@nordicsemiconductor/pc-nrfconnect-shared 88.0.0 → 90.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 (149) hide show
  1. package/Changelog.md +34 -0
  2. package/config/tsconfig.json +1 -1
  3. package/coverage/cobertura-coverage.xml +2216 -1061
  4. package/ipc/MetaFiles.ts +17 -7
  5. package/nrfutil/device/__mocks__/device.ts +43 -0
  6. package/nrfutil/device/batch.ts +219 -0
  7. package/nrfutil/device/batchTypes.ts +133 -0
  8. package/nrfutil/device/common.ts +274 -0
  9. package/nrfutil/device/device.ts +62 -0
  10. package/nrfutil/device/erase.ts +26 -0
  11. package/nrfutil/device/eraseBatch.ts +28 -0
  12. package/nrfutil/device/firmwareRead.ts +34 -0
  13. package/nrfutil/device/firmwareReadBatch.ts +42 -0
  14. package/nrfutil/device/getCoreInfo.ts +44 -0
  15. package/nrfutil/device/getCoreInfoBatch.ts +29 -0
  16. package/nrfutil/device/getFwInfo.ts +69 -0
  17. package/nrfutil/device/getFwInfoBatch.ts +29 -0
  18. package/nrfutil/device/getProtectionStatus.ts +46 -0
  19. package/nrfutil/device/getProtectionStatusBatch.ts +32 -0
  20. package/nrfutil/device/list.ts +81 -0
  21. package/nrfutil/device/program.ts +186 -0
  22. package/nrfutil/device/programBatch.ts +69 -0
  23. package/nrfutil/device/recover.ts +26 -0
  24. package/nrfutil/device/recoverBatch.ts +28 -0
  25. package/nrfutil/device/reset.ts +41 -0
  26. package/nrfutil/device/resetBatch.ts +30 -0
  27. package/nrfutil/device/setMcuState.ts +27 -0
  28. package/nrfutil/device/setProtectionStatus.ts +27 -0
  29. package/nrfutil/index.ts +25 -0
  30. package/nrfutil/moduleVersion.ts +57 -0
  31. package/nrfutil/nrfutilLogger.ts +15 -0
  32. package/nrfutil/sandbox.ts +504 -0
  33. package/nrfutil/sandboxTypes.ts +178 -0
  34. package/package.json +2 -2
  35. package/scripts/nordic-publish.js +1 -1
  36. package/scripts/nordic-publish.ts +11 -2
  37. package/src/About/SupportCard.tsx +6 -9
  38. package/src/App/App.test.tsx +4 -0
  39. package/src/App/App.tsx +13 -2
  40. package/src/Device/DeviceSelector/DeviceList/MoreDeviceInfo.tsx +1 -1
  41. package/src/Device/DeviceSelector/DeviceSelector.test.tsx +39 -31
  42. package/src/Device/DeviceSelector/DeviceSelector.tsx +3 -12
  43. package/src/Device/deviceInfo/deviceInfo.ts +2 -3
  44. package/src/Device/deviceLibWrapper.ts +0 -66
  45. package/src/Device/deviceLister.test.ts +1 -2
  46. package/src/Device/deviceLister.ts +169 -215
  47. package/src/Device/deviceSlice.ts +2 -16
  48. package/src/Device/jprogOperations.ts +21 -69
  49. package/src/Device/sdfuOperations.ts +77 -93
  50. package/src/ErrorBoundary/ErrorBoundary.tsx +1 -1
  51. package/src/Log/LogViewer.tsx +0 -4
  52. package/src/Log/logSlice.ts +4 -7
  53. package/src/logging/sendInitialLogMessages.ts +7 -8
  54. package/src/utils/appDirs.ts +6 -11
  55. package/src/utils/logLibVersions.ts +12 -14
  56. package/src/utils/systemReport.ts +11 -17
  57. package/src/utils/usageData.ts +14 -9
  58. package/tsconfig.json +1 -0
  59. package/typings/generated/ipc/MetaFiles.d.ts +14 -7
  60. package/typings/generated/ipc/MetaFiles.d.ts.map +1 -1
  61. package/typings/generated/nrfutil/device/__mocks__/device.d.ts +23 -0
  62. package/typings/generated/nrfutil/device/__mocks__/device.d.ts.map +1 -0
  63. package/typings/generated/nrfutil/device/batch.d.ts +26 -0
  64. package/typings/generated/nrfutil/device/batch.d.ts.map +1 -0
  65. package/typings/generated/nrfutil/device/batchTypes.d.ts +78 -0
  66. package/typings/generated/nrfutil/device/batchTypes.d.ts.map +1 -0
  67. package/typings/generated/nrfutil/device/common.d.ts +125 -0
  68. package/typings/generated/nrfutil/device/common.d.ts.map +1 -0
  69. package/typings/generated/nrfutil/device/device.d.ts +30 -0
  70. package/typings/generated/nrfutil/device/device.d.ts.map +1 -0
  71. package/typings/generated/nrfutil/device/erase.d.ts +5 -0
  72. package/typings/generated/nrfutil/device/erase.d.ts.map +1 -0
  73. package/typings/generated/nrfutil/device/eraseBatch.d.ts +7 -0
  74. package/typings/generated/nrfutil/device/eraseBatch.d.ts.map +1 -0
  75. package/typings/generated/nrfutil/device/firmwareRead.d.ts +10 -0
  76. package/typings/generated/nrfutil/device/firmwareRead.d.ts.map +1 -0
  77. package/typings/generated/nrfutil/device/firmwareReadBatch.d.ts +9 -0
  78. package/typings/generated/nrfutil/device/firmwareReadBatch.d.ts.map +1 -0
  79. package/typings/generated/nrfutil/device/getCoreInfo.d.ts +22 -0
  80. package/typings/generated/nrfutil/device/getCoreInfo.d.ts.map +1 -0
  81. package/typings/generated/nrfutil/device/getCoreInfoBatch.d.ts +8 -0
  82. package/typings/generated/nrfutil/device/getCoreInfoBatch.d.ts.map +1 -0
  83. package/typings/generated/nrfutil/device/getFwInfo.d.ts +31 -0
  84. package/typings/generated/nrfutil/device/getFwInfo.d.ts.map +1 -0
  85. package/typings/generated/nrfutil/device/getFwInfoBatch.d.ts +8 -0
  86. package/typings/generated/nrfutil/device/getFwInfoBatch.d.ts.map +1 -0
  87. package/typings/generated/nrfutil/device/getProtectionStatus.d.ts +13 -0
  88. package/typings/generated/nrfutil/device/getProtectionStatus.d.ts.map +1 -0
  89. package/typings/generated/nrfutil/device/getProtectionStatusBatch.d.ts +8 -0
  90. package/typings/generated/nrfutil/device/getProtectionStatusBatch.d.ts.map +1 -0
  91. package/typings/generated/nrfutil/device/list.d.ts +19 -0
  92. package/typings/generated/nrfutil/device/list.d.ts.map +1 -0
  93. package/typings/generated/nrfutil/device/program.d.ts +27 -0
  94. package/typings/generated/nrfutil/device/program.d.ts.map +1 -0
  95. package/typings/generated/nrfutil/device/programBatch.d.ts +9 -0
  96. package/typings/generated/nrfutil/device/programBatch.d.ts.map +1 -0
  97. package/typings/generated/nrfutil/device/recover.d.ts +5 -0
  98. package/typings/generated/nrfutil/device/recover.d.ts.map +1 -0
  99. package/typings/generated/nrfutil/device/recoverBatch.d.ts +7 -0
  100. package/typings/generated/nrfutil/device/recoverBatch.d.ts.map +1 -0
  101. package/typings/generated/nrfutil/device/reset.d.ts +5 -0
  102. package/typings/generated/nrfutil/device/reset.d.ts.map +1 -0
  103. package/typings/generated/nrfutil/device/resetBatch.d.ts +8 -0
  104. package/typings/generated/nrfutil/device/resetBatch.d.ts.map +1 -0
  105. package/typings/generated/nrfutil/device/setMcuState.d.ts +6 -0
  106. package/typings/generated/nrfutil/device/setMcuState.d.ts.map +1 -0
  107. package/typings/generated/nrfutil/device/setProtectionStatus.d.ts +5 -0
  108. package/typings/generated/nrfutil/device/setProtectionStatus.d.ts.map +1 -0
  109. package/typings/generated/nrfutil/index.d.ts +11 -0
  110. package/typings/generated/nrfutil/index.d.ts.map +1 -0
  111. package/typings/generated/nrfutil/moduleVersion.d.ts +6 -0
  112. package/typings/generated/nrfutil/moduleVersion.d.ts.map +1 -0
  113. package/typings/generated/nrfutil/nrfutilLogger.d.ts +4 -0
  114. package/typings/generated/nrfutil/nrfutilLogger.d.ts.map +1 -0
  115. package/typings/generated/nrfutil/sandbox.d.ts +36 -0
  116. package/typings/generated/nrfutil/sandbox.d.ts.map +1 -0
  117. package/typings/generated/nrfutil/sandboxTypes.d.ts +135 -0
  118. package/typings/generated/nrfutil/sandboxTypes.d.ts.map +1 -0
  119. package/typings/generated/src/About/SupportCard.d.ts.map +1 -1
  120. package/typings/generated/src/App/App.d.ts.map +1 -1
  121. package/typings/generated/src/Device/DeviceSelector/DeviceSelector.d.ts +2 -6
  122. package/typings/generated/src/Device/DeviceSelector/DeviceSelector.d.ts.map +1 -1
  123. package/typings/generated/src/Device/deviceInfo/deviceInfo.d.ts +2 -2
  124. package/typings/generated/src/Device/deviceInfo/deviceInfo.d.ts.map +1 -1
  125. package/typings/generated/src/Device/deviceLibWrapper.d.ts +1 -4
  126. package/typings/generated/src/Device/deviceLibWrapper.d.ts.map +1 -1
  127. package/typings/generated/src/Device/deviceLister.d.ts +11 -16
  128. package/typings/generated/src/Device/deviceLister.d.ts.map +1 -1
  129. package/typings/generated/src/Device/deviceLister.test.d.ts.map +1 -1
  130. package/typings/generated/src/Device/deviceSlice.d.ts +3 -3
  131. package/typings/generated/src/Device/deviceSlice.d.ts.map +1 -1
  132. package/typings/generated/src/Device/jprogOperations.d.ts.map +1 -1
  133. package/typings/generated/src/Device/sdfuOperations.d.ts.map +1 -1
  134. package/typings/generated/src/ErrorBoundary/ErrorBoundary.d.ts +1 -1
  135. package/typings/generated/src/ErrorBoundary/ErrorBoundary.d.ts.map +1 -1
  136. package/typings/generated/src/Log/LogViewer.d.ts.map +1 -1
  137. package/typings/generated/src/Log/logSlice.d.ts +2 -3
  138. package/typings/generated/src/Log/logSlice.d.ts.map +1 -1
  139. package/typings/generated/src/logging/sendInitialLogMessages.d.ts.map +1 -1
  140. package/typings/generated/src/utils/appDirs.d.ts +4 -4
  141. package/typings/generated/src/utils/appDirs.d.ts.map +1 -1
  142. package/typings/generated/src/utils/logLibVersions.d.ts.map +1 -1
  143. package/typings/generated/src/utils/systemReport.d.ts +1 -1
  144. package/typings/generated/src/utils/systemReport.d.ts.map +1 -1
  145. package/typings/generated/src/utils/usageData.d.ts +2 -0
  146. package/typings/generated/src/utils/usageData.d.ts.map +1 -1
  147. package/src/utils/describeVersion.ts +0 -21
  148. package/typings/generated/src/utils/describeVersion.d.ts +0 -4
  149. package/typings/generated/src/utils/describeVersion.d.ts.map +0 -1
@@ -4,17 +4,17 @@
4
4
  * SPDX-License-Identifier: LicenseRef-Nordic-4-Clause
5
5
  */
6
6
 
7
- import nrfDeviceLib from '@nordicsemiconductor/nrf-device-lib-js';
8
7
  import AdmZip from 'adm-zip';
9
8
  import { createHash } from 'crypto';
10
9
  import fs from 'fs';
11
10
  import MemoryMap from 'nrf-intel-hex';
12
11
 
12
+ import NrfutilDeviceLib from '../../nrfutil/device/device';
13
+ import { McuState } from '../../nrfutil/device/setMcuState';
13
14
  import logger from '../logging';
14
15
  import { AppThunk, RootState } from '../store';
15
16
  import { getAppFile } from '../utils/appDirs';
16
17
  import { setWaitForDevice } from './deviceAutoSelectSlice';
17
- import { getDeviceLibContext } from './deviceLibWrapper';
18
18
  import { DeviceSetup, DfuEntry } from './deviceSetup';
19
19
  import { openDeviceSetupDialog } from './deviceSetupSlice';
20
20
  import { Device } from './deviceSlice';
@@ -63,10 +63,7 @@ export const ensureBootloaderMode = (device: Device) => {
63
63
  };
64
64
 
65
65
  const getBootloaderInformation = async (device: Device) => {
66
- const info = await nrfDeviceLib.readFwInfo(
67
- getDeviceLibContext(),
68
- device.id
69
- );
66
+ const info = await NrfutilDeviceLib.getFwInfo(device);
70
67
 
71
68
  const index = info.imageInfoList.findIndex(
72
69
  imageInfo => imageInfo.imageType === 'NRFDL_IMAGE_TYPE_BOOTLOADER'
@@ -106,76 +103,67 @@ const updateBootloader =
106
103
  onFail,
107
104
  })
108
105
  );
109
- await nrfDeviceLib.firmwareProgram(
110
- getDeviceLibContext(),
111
- device.id,
112
- 'NRFDL_FW_BUFFER',
113
- 'NRFDL_FW_SDFU_ZIP',
114
- zipBuffer,
115
- err => {
116
- if (err) {
117
- logger.error(
118
- `Failed to write bootloader to the target device: ${
119
- err.message || err
120
- }`
121
- );
122
- onFail(err.message);
123
- } else {
124
- dispatch(
125
- setWaitForDevice({
126
- timeout: DEFAULT_DEVICE_WAIT_TIME,
127
- when: 'always',
128
- once: true,
129
- onSuccess,
130
- onFail,
131
- })
132
- );
133
106
 
134
- onProgress(100, 'Bootloader updated');
135
- logger.info(
136
- 'Bootloader has been written to the target device'
107
+ try {
108
+ await NrfutilDeviceLib.program(
109
+ device,
110
+ { buffer: zipBuffer, type: 'zip' },
111
+ progress => {
112
+ onProgress(
113
+ progress.progressPercentage,
114
+ progress.message ?? 'Programming bootloader'
137
115
  );
138
- logger.debug('Bootloader DFU completed successfully!');
139
116
  }
140
- },
141
- progress => {
142
- onProgress(
143
- progress.progressJson.progressPercentage,
144
- progress.progressJson.message ?? 'Programming bootloader'
117
+ );
118
+ } catch (error) {
119
+ if (error) {
120
+ logger.error(
121
+ `Failed to write bootloader to the target device: ${
122
+ (error as Error).message || error
123
+ }`
124
+ );
125
+ onFail((error as Error).message || error);
126
+ } else {
127
+ dispatch(
128
+ setWaitForDevice({
129
+ timeout: DEFAULT_DEVICE_WAIT_TIME,
130
+ when: 'always',
131
+ once: true,
132
+ onSuccess,
133
+ onFail,
134
+ })
145
135
  );
136
+
137
+ onProgress(100, 'Bootloader updated');
138
+ logger.info('Bootloader has been written to the target device');
139
+ logger.debug('Bootloader DFU completed successfully!');
146
140
  }
147
- );
141
+ }
148
142
  };
149
143
 
150
144
  const switchToDeviceMode =
151
145
  (
152
146
  device: Device,
153
- mcuState: nrfDeviceLib.MCUState,
147
+ mcuState: McuState,
154
148
  onSuccess: (device: Device) => void,
155
149
  onFail: (reason?: unknown) => void
156
150
  ): AppThunk =>
157
151
  dispatch => {
158
- nrfDeviceLib
159
- .deviceControlSetMcuState(
160
- getDeviceLibContext(),
161
- device.id,
162
- mcuState
163
- )
164
- .then(() => {
165
- dispatch(
166
- setWaitForDevice({
167
- timeout: 10000,
168
- when:
169
- mcuState === 'NRFDL_MCU_STATE_APPLICATION'
170
- ? 'applicationMode'
171
- : 'dfuBootLoaderMode',
172
- once: true,
173
- onSuccess,
174
- onFail,
175
- })
176
- );
152
+ dispatch(
153
+ setWaitForDevice({
154
+ timeout: 10000,
155
+ when:
156
+ mcuState === 'Application'
157
+ ? 'applicationMode'
158
+ : 'dfuBootLoaderMode',
159
+ once: true,
160
+ onSuccess,
161
+ onFail,
177
162
  })
178
- .catch(err => onFail(err));
163
+ );
164
+ NrfutilDeviceLib.setMcuState(device, mcuState).catch(err =>
165
+ onFail(err)
166
+ );
179
167
  };
180
168
 
181
169
  export const switchToBootloaderMode =
@@ -189,7 +177,7 @@ export const switchToBootloaderMode =
189
177
  dispatch(
190
178
  switchToDeviceMode(
191
179
  device,
192
- 'NRFDL_MCU_STATE_PROGRAMMING',
180
+ 'Programming',
193
181
  d => {
194
182
  if (!isDeviceInDFUBootloader(d))
195
183
  onFail(
@@ -216,7 +204,7 @@ export const switchToApplicationMode =
216
204
  dispatch(
217
205
  switchToDeviceMode(
218
206
  device,
219
- 'NRFDL_MCU_STATE_APPLICATION',
207
+ 'Application',
220
208
  d => {
221
209
  if (isDeviceInDFUBootloader(d))
222
210
  onFail(
@@ -487,13 +475,31 @@ const programInDFUBootloader =
487
475
  onFail,
488
476
  })
489
477
  );
490
- nrfDeviceLib.firmwareProgram(
491
- getDeviceLibContext(),
492
- device.id,
493
- 'NRFDL_FW_BUFFER',
494
- 'NRFDL_FW_SDFU_ZIP',
495
- zipBuffer,
496
- err => {
478
+
479
+ NrfutilDeviceLib.program(
480
+ device,
481
+ { buffer: zipBuffer, type: 'zip' },
482
+ progress => {
483
+ onProgress(progress.progressPercentage, progress.message ?? '');
484
+ }
485
+ )
486
+ .then(() => {
487
+ logger.info(
488
+ 'All dfu images have been written to the target device'
489
+ );
490
+ logger.debug('DFU completed successfully!');
491
+ dispatch(
492
+ setWaitForDevice({
493
+ timeout: DEFAULT_DEVICE_WAIT_TIME,
494
+ when: 'applicationMode',
495
+ once: true,
496
+ onSuccess,
497
+ onFail,
498
+ })
499
+ );
500
+ onProgress(100, 'Waiting for device to reboot');
501
+ })
502
+ .catch(err => {
497
503
  if (err) {
498
504
  logger.error(
499
505
  `Failed to write to the target device: ${
@@ -501,30 +507,8 @@ const programInDFUBootloader =
501
507
  }`
502
508
  );
503
509
  onFail(err);
504
- } else {
505
- logger.info(
506
- 'All dfu images have been written to the target device'
507
- );
508
- logger.debug('DFU completed successfully!');
509
- dispatch(
510
- setWaitForDevice({
511
- timeout: DEFAULT_DEVICE_WAIT_TIME,
512
- when: 'applicationMode',
513
- once: true,
514
- onSuccess,
515
- onFail,
516
- })
517
- );
518
- onProgress(100, 'Waiting for device to reboot');
519
510
  }
520
- },
521
- progress => {
522
- onProgress(
523
- progress.progressJson.progressPercentage,
524
- progress.progressJson.message ?? ''
525
- );
526
- }
527
- );
511
+ });
528
512
  };
529
513
 
530
514
  const programDeviceWithFw =
@@ -6,9 +6,9 @@
6
6
 
7
7
  import React, { ReactNode } from 'react';
8
8
  import { getCurrentWindow } from '@electron/remote';
9
- import { Device } from '@nordicsemiconductor/nrf-device-lib-js';
10
9
 
11
10
  import Button from '../Button/Button';
11
+ import { Device } from '../Device/deviceSlice';
12
12
  import FactoryResetButton from '../FactoryReset/FactoryResetButton';
13
13
  import { CollapsibleGroup } from '../SidePanel/Group';
14
14
  import Spinner from '../Spinner/Spinner';
@@ -7,8 +7,6 @@
7
7
  import React, { useEffect, useRef } from 'react';
8
8
  import { useDispatch, useSelector } from 'react-redux';
9
9
 
10
- import { forwardLogEventsFromDeviceLib } from '../Device/deviceLibWrapper';
11
- import logger from '../logging';
12
10
  import sendInitialLogMessages from '../logging/sendInitialLogMessages';
13
11
  import LogEntry from './LogEntry';
14
12
  import {
@@ -22,8 +20,6 @@ import './log-viewer.scss';
22
20
  export const useInitialisedLog = () => {
23
21
  const dispatch = useDispatch();
24
22
  useEffect(() => {
25
- logger.initialise();
26
- forwardLogEventsFromDeviceLib();
27
23
  sendInitialLogMessages();
28
24
  const stopSyncLogToStore = startSyncLogToStore(dispatch);
29
25
 
@@ -39,9 +39,7 @@ const limitedToMaxSize = (entries: LogEntry[]) =>
39
39
 
40
40
  export const autoScroll = (state: RootState) => state.log.autoScroll;
41
41
  export const logEntries = (state: RootState) => state.log.logEntries;
42
- let isLoggingVerboseLocal = initialState.isLoggingVerbose;
43
- export const isLoggingVerbose = () => isLoggingVerboseLocal;
44
- export const isLoggingVerboseSelector = (state: RootState) =>
42
+ export const isLoggingVerbose = (state: RootState) =>
45
43
  state.log.isLoggingVerbose;
46
44
 
47
45
  const slice = createSlice({
@@ -60,14 +58,13 @@ const slice = createSlice({
60
58
  toggleAutoScroll: state => {
61
59
  state.autoScroll = !state.autoScroll;
62
60
  },
63
- toggleIsLoggingVerbose: state => {
64
- state.isLoggingVerbose = !state.isLoggingVerbose;
65
- isLoggingVerboseLocal = state.isLoggingVerbose;
61
+ setIsLoggingVerbose: (state, action: PayloadAction<boolean>) => {
62
+ state.isLoggingVerbose = action.payload;
66
63
  },
67
64
  },
68
65
  });
69
66
 
70
67
  export const {
71
68
  reducer,
72
- actions: { addEntries, clear, toggleAutoScroll, toggleIsLoggingVerbose },
69
+ actions: { addEntries, clear, toggleAutoScroll, setIsLoggingVerbose },
73
70
  } = slice;
@@ -4,15 +4,13 @@
4
4
  * SPDX-License-Identifier: LicenseRef-Nordic-4-Clause
5
5
  */
6
6
 
7
- import { getModuleVersions } from '@nordicsemiconductor/nrf-device-lib-js';
8
-
9
7
  import { inMain as appDetails } from '../../ipc/appDetails';
8
+ import NrfutilDeviceLib from '../../nrfutil/device/device';
10
9
  import {
11
- getDeviceLibContext,
12
- getModuleVersion,
13
- } from '../Device/deviceLibWrapper';
10
+ describeVersion,
11
+ resolveModuleVersion,
12
+ } from '../../nrfutil/moduleVersion';
14
13
  import { getAppDataDir } from '../utils/appDirs';
15
- import describeVersion from '../utils/describeVersion';
16
14
  import logLibVersions from '../utils/logLibVersions';
17
15
  import udevInstalled from '../utils/udevInstalled';
18
16
  import logger from '.';
@@ -50,8 +48,9 @@ export default async () => {
50
48
  logger.debug(`TmpDir: ${tmpDir}`);
51
49
 
52
50
  if (bundledJlink) {
53
- const versions = await getModuleVersions(getDeviceLibContext());
54
- const jlinkVersion = getModuleVersion('JlinkARM', versions);
51
+ const dependencies = (await NrfutilDeviceLib.getModuleVersion())
52
+ .dependencies;
53
+ const jlinkVersion = resolveModuleVersion('JlinkARM', dependencies);
55
54
 
56
55
  if (!describeVersion(jlinkVersion).includes(bundledJlink)) {
57
56
  logger.info(
@@ -16,10 +16,10 @@ const getUserDataDir = () => getGlobal('userDataDir');
16
16
  *
17
17
  * @returns {string|undefined} Absolute path of current app.
18
18
  */
19
- function getAppDir() {
19
+ const getAppDir = () => {
20
20
  const html = packageJson()?.nrfConnectForDesktop?.html ?? '';
21
21
  return __filename.replace(html, '');
22
- }
22
+ };
23
23
 
24
24
  /**
25
25
  * Get the filesystem path of a file for the currently loaded app.
@@ -27,26 +27,21 @@ function getAppDir() {
27
27
  * @param {string} filename relative name of file in the app directory
28
28
  * @returns {string|undefined} Absolute path of file.
29
29
  */
30
- function getAppFile(filename: string) {
31
- return path.resolve(getAppDir(), filename);
32
- }
30
+ const getAppFile = (filename: string) => path.resolve(getAppDir(), filename);
33
31
 
34
32
  /**
35
33
  * Get the filesystem path of the data directory of currently loaded app.
36
34
  *
37
35
  * @returns {string|undefined} Absolute path of data directory of the current app.
38
36
  */
39
- function getAppDataDir() {
40
- return `${getUserDataDir()}${path.basename(getAppDir())}`;
41
- }
37
+ const getAppDataDir = () =>
38
+ path.join(getUserDataDir(), path.basename(getAppDir()));
42
39
 
43
40
  /**
44
41
  * Get the filesystem path of the log directory of currently loaded app.
45
42
  *
46
43
  * @returns {string|undefined} Absolute path of data directory of the current app.
47
44
  */
48
- function getAppLogDir() {
49
- return `${getAppDataDir()}/logs`;
50
- }
45
+ const getAppLogDir = () => path.join(getAppDataDir(), 'logs');
51
46
 
52
47
  export { getAppDir, getAppFile, getAppDataDir, getAppLogDir, getUserDataDir };
@@ -4,21 +4,18 @@
4
4
  * SPDX-License-Identifier: LicenseRef-Nordic-4-Clause
5
5
  */
6
6
 
7
- import {
8
- getModuleVersions,
9
- ModuleVersion,
10
- } from '@nordicsemiconductor/nrf-device-lib-js';
11
7
  import { spawn } from 'child_process';
12
8
  import os from 'os';
13
9
 
10
+ import NrfutilDeviceLib from '../../nrfutil/device/device';
14
11
  import {
15
- getDeviceLibContext,
16
- getModuleVersion,
17
- } from '../Device/deviceLibWrapper';
12
+ describeVersion,
13
+ resolveModuleVersion,
14
+ } from '../../nrfutil/moduleVersion';
15
+ import { SubDependency } from '../../nrfutil/sandboxTypes';
18
16
  import logger from '../logging';
19
- import describeVersion from './describeVersion';
20
17
 
21
- const log = (description: string, moduleVersion?: ModuleVersion) => {
18
+ const log = (description: string, moduleVersion?: SubDependency | string) => {
22
19
  if (moduleVersion == null) {
23
20
  logger.warn(`Unable to detect version of ${description}.`);
24
21
  } else {
@@ -72,12 +69,13 @@ const checkJLinkArchitectureOnDarwin = async () => {
72
69
 
73
70
  export default async () => {
74
71
  try {
75
- const versions = await getModuleVersions(getDeviceLibContext());
72
+ const moduleVersion = await NrfutilDeviceLib.getModuleVersion();
73
+ const dependencies = moduleVersion.dependencies;
76
74
 
77
- log('nrf-device-lib-js', getModuleVersion('nrfdl-js', versions));
78
- log('nrf-device-lib', getModuleVersion('nrfdl', versions));
79
- log('nrfjprog DLL', getModuleVersion('jprog', versions));
80
- log('JLink', getModuleVersion('JlinkARM', versions));
75
+ log('nrfutil-device', moduleVersion.version);
76
+ log('nrf-device-lib', resolveModuleVersion('nrfdl', dependencies));
77
+ log('nrfjprog DLL', resolveModuleVersion('jprog', dependencies));
78
+ log('JLink', resolveModuleVersion('JlinkARM', dependencies));
81
79
  if (
82
80
  process.platform === 'darwin' &&
83
81
  os.cpus()[0].model.includes('Apple')
@@ -4,24 +4,24 @@
4
4
  * SPDX-License-Identifier: LicenseRef-Nordic-4-Clause
5
5
  */
6
6
 
7
- import nrfDeviceLib, { Device } from '@nordicsemiconductor/nrf-device-lib-js';
8
7
  import fs from 'fs';
9
8
  import { EOL } from 'os';
10
9
  import path from 'path';
11
10
  import pretty from 'prettysize';
12
11
  import type Systeminformation from 'systeminformation';
13
12
 
13
+ import NrfutilDeviceLib from '../../nrfutil/device/device';
14
+ import {
15
+ describeVersion,
16
+ resolveModuleVersion,
17
+ } from '../../nrfutil/moduleVersion';
14
18
  import {
15
19
  deviceInfo as getDeviceInfo,
16
20
  productPageUrl,
17
21
  } from '../Device/deviceInfo/deviceInfo';
18
- import {
19
- getDeviceLibContext,
20
- getModuleVersion,
21
- } from '../Device/deviceLibWrapper';
22
+ import { Device } from '../Device/deviceSlice';
22
23
  import logger from '../logging';
23
24
  import { getAppDataDir } from './appDirs';
24
- import describeVersion from './describeVersion';
25
25
  import { openFile } from './open';
26
26
 
27
27
  const generalInfoReport = async () => {
@@ -52,9 +52,8 @@ const generalInfoReport = async () => {
52
52
  si.fsSize(),
53
53
  ]);
54
54
 
55
- const versions = await nrfDeviceLib.getModuleVersions(
56
- getDeviceLibContext()
57
- );
55
+ const moduleVersion = await NrfutilDeviceLib.getModuleVersion();
56
+ const dependencies = moduleVersion.dependencies;
58
57
 
59
58
  return [
60
59
  `- System: ${manufacturer} ${model}`,
@@ -74,17 +73,12 @@ const generalInfoReport = async () => {
74
73
  ` - node: ${node}`,
75
74
  ` - python: ${python}`,
76
75
  ` - python3: ${python3}`,
77
- ` - nrf-device-lib-js: ${describeVersion(
78
- getModuleVersion('nrfdl-js', versions)
79
- )}`,
80
- ` - nrf-device-lib: ${describeVersion(
81
- getModuleVersion('nrfdl', versions)
82
- )}`,
76
+ ` - nrfutil-device: ${moduleVersion.version}`,
83
77
  ` - nrfjprog DLL: ${describeVersion(
84
- getModuleVersion('jprog', versions)
78
+ resolveModuleVersion('jprog', dependencies)
85
79
  )}`,
86
80
  ` - JLink: ${describeVersion(
87
- getModuleVersion('JlinkARM', versions)
81
+ resolveModuleVersion('JlinkARM', dependencies)
88
82
  )}`,
89
83
  '',
90
84
  ];
@@ -6,9 +6,9 @@
6
6
 
7
7
  import { ApplicationInsights } from '@microsoft/applicationinsights-web';
8
8
  import type Systeminformation from 'systeminformation';
9
+ import winston from 'winston';
9
10
 
10
11
  import type { PackageJson } from '../../ipc/MetaFiles';
11
- import logger from '../logging';
12
12
  import { isDevelopment } from './environment';
13
13
  import {
14
14
  deleteIsSendingUsageData,
@@ -67,7 +67,7 @@ export const init = (packageJson: PackageJson) => {
67
67
  };
68
68
  });
69
69
 
70
- logger.debug(
70
+ logger?.debug(
71
71
  `Application Insights for category ${applicationName} has initialized`
72
72
  );
73
73
 
@@ -85,7 +85,7 @@ export const init = (packageJson: PackageJson) => {
85
85
  * @returns {Boolean} returns whether the setting is on, off or undefined
86
86
  */
87
87
  export const isInitialized = () => {
88
- logger.debug(
88
+ logger?.debug(
89
89
  `Usage report instance is${
90
90
  insights !== undefined ? '' : ' not'
91
91
  } initialized`
@@ -100,7 +100,7 @@ export const isInitialized = () => {
100
100
  */
101
101
  export const isEnabled = () => {
102
102
  const isSendingUsageData = getIsSendingUsageData();
103
- logger.debug(`Usage data is ${isSendingUsageData}`);
103
+ logger?.debug(`Usage data is ${isSendingUsageData}`);
104
104
  return isSendingUsageData;
105
105
  };
106
106
 
@@ -111,7 +111,7 @@ export const isEnabled = () => {
111
111
  */
112
112
  export const enable = () => {
113
113
  persistIsSendingUsageData(true);
114
- logger.debug('Usage data has been enabled');
114
+ logger?.debug('Usage data has been enabled');
115
115
  };
116
116
 
117
117
  /**
@@ -121,7 +121,7 @@ export const enable = () => {
121
121
  */
122
122
  export const disable = () => {
123
123
  persistIsSendingUsageData(false);
124
- logger.debug('Usage data has been disabled');
124
+ logger?.debug('Usage data has been disabled');
125
125
  };
126
126
 
127
127
  /**
@@ -132,7 +132,7 @@ export const disable = () => {
132
132
  */
133
133
  export const reset = () => {
134
134
  deleteIsSendingUsageData();
135
- logger.debug('Usage data setting has been reset');
135
+ logger?.debug('Usage data setting has been reset');
136
136
  };
137
137
 
138
138
  /**
@@ -145,7 +145,7 @@ const sendEvent = ({ action, label }: EventAction) => {
145
145
  const isSendingUsageData = getIsSendingUsageData();
146
146
 
147
147
  if (isSendingUsageData && insights !== undefined) {
148
- logger.debug(`Sending usage data ${action} ${label}`);
148
+ logger?.debug(`Sending usage data ${action} ${label}`);
149
149
  insights.trackEvent({
150
150
  name: action,
151
151
  properties: label ? { label } : undefined,
@@ -174,7 +174,7 @@ export const sendUsageData = <T extends string>(action: T, label?: string) => {
174
174
  * @returns {void}
175
175
  */
176
176
  export const sendErrorReport = (error: string) => {
177
- logger.error(error);
177
+ logger?.error(error);
178
178
  insights?.trackException({
179
179
  exception: new Error(error),
180
180
  });
@@ -184,6 +184,11 @@ export const sendErrorReport = (error: string) => {
184
184
  );
185
185
  };
186
186
 
187
+ let logger: winston.Logger | undefined;
188
+ export const setUsageLogger = (log: winston.Logger) => {
189
+ logger = log;
190
+ };
191
+
187
192
  export default {
188
193
  disable,
189
194
  enable,
package/tsconfig.json CHANGED
@@ -1,6 +1,7 @@
1
1
  {
2
2
  "extends": "./config/tsconfig.json",
3
3
  "include": [
4
+ "./nrfutil/**/*.ts",
4
5
  "./main/**/*.ts",
5
6
  "./src/**/*.ts",
6
7
  "./src/**/*.tsx",
@@ -5,10 +5,12 @@ export interface SourceJson {
5
5
  }
6
6
  export type WithdrawnJson = UrlString[];
7
7
  export type AppVersions = {
8
- [version: string]: {
9
- shasum?: string;
10
- tarballUrl: UrlString;
11
- };
8
+ [version: string]: AppVersion;
9
+ };
10
+ export type AppVersion = {
11
+ shasum?: string;
12
+ tarballUrl: UrlString;
13
+ nrfutilModules?: nrfutilModules;
12
14
  };
13
15
  export interface AppInfo {
14
16
  name: string;
@@ -27,6 +29,13 @@ export interface AppInfo {
27
29
  interface ObjectContainingOptionalStrings {
28
30
  [index: string]: string | undefined;
29
31
  }
32
+ interface nrfConnectForDesktop {
33
+ nrfutil?: nrfutilModules;
34
+ html?: string;
35
+ }
36
+ interface nrfutilModules {
37
+ [index: string]: string[] | undefined;
38
+ }
30
39
  export interface PackageJson {
31
40
  name: string;
32
41
  version: string;
@@ -38,6 +47,7 @@ export interface PackageJson {
38
47
  devDependencies?: ObjectContainingOptionalStrings;
39
48
  displayName?: string;
40
49
  engines?: ObjectContainingOptionalStrings;
50
+ nrfConnectForDesktop?: nrfConnectForDesktop;
41
51
  files?: readonly string[];
42
52
  license?: string;
43
53
  main?: string;
@@ -47,9 +57,6 @@ export interface PackageJson {
47
57
  url: UrlString;
48
58
  };
49
59
  scripts?: ObjectContainingOptionalStrings;
50
- nrfConnectForDesktop?: {
51
- html?: string;
52
- };
53
60
  }
54
61
  export {};
55
62
  //# sourceMappingURL=MetaFiles.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"MetaFiles.d.ts","sourceRoot":"","sources":["../../../ipc/MetaFiles.ts"],"names":[],"mappings":"AAMA,MAAM,MAAM,SAAS,GAAG,MAAM,CAAC;AAE/B,MAAM,WAAW,UAAU;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,SAAS,EAAE,CAAC;CACrB;AAED,MAAM,MAAM,aAAa,GAAG,SAAS,EAAE,CAAC;AAExC,MAAM,MAAM,WAAW,GAAG;IACtB,CAAC,OAAO,EAAE,MAAM,GAAG;QACf,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,UAAU,EAAE,SAAS,CAAC;KACzB,CAAC;CACL,CAAC;AAEF,MAAM,WAAW,OAAO;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,OAAO,EAAE,SAAS,CAAC;IACnB,eAAe,EAAE,SAAS,CAAC;IAC3B,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,WAAW,CAAC;IACtB,SAAS,CAAC,EAAE;QACR,IAAI,EAAE,MAAM,CAAC;QACb,MAAM,CAAC,EAAE,MAAM,CAAC;KACnB,CAAC;CACL;AAED,UAAU,+BAA+B;IACrC,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;CACvC;AAED,MAAM,WAAW,WAAW;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAGhB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,GAAG,CAAC,EAAE,+BAA+B,GAAG,MAAM,CAAC;IAC/C,YAAY,CAAC,EAAE,+BAA+B,CAAC;IAC/C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,eAAe,CAAC,EAAE,+BAA+B,CAAC;IAClD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,+BAA+B,CAAC;IAC1C,KAAK,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC1B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,gBAAgB,CAAC,EAAE,+BAA+B,CAAC;IACnD,UAAU,CAAC,EAAE;QACT,IAAI,EAAE,MAAM,CAAC;QACb,GAAG,EAAE,SAAS,CAAC;KAClB,CAAC;IACF,OAAO,CAAC,EAAE,+BAA+B,CAAC;IAC1C,oBAAoB,CAAC,EAAE;QACnB,IAAI,CAAC,EAAE,MAAM,CAAC;KACjB,CAAC;CACL"}
1
+ {"version":3,"file":"MetaFiles.d.ts","sourceRoot":"","sources":["../../../ipc/MetaFiles.ts"],"names":[],"mappings":"AAMA,MAAM,MAAM,SAAS,GAAG,MAAM,CAAC;AAE/B,MAAM,WAAW,UAAU;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,SAAS,EAAE,CAAC;CACrB;AAED,MAAM,MAAM,aAAa,GAAG,SAAS,EAAE,CAAC;AAExC,MAAM,MAAM,WAAW,GAAG;IACtB,CAAC,OAAO,EAAE,MAAM,GAAG,UAAU,CAAC;CACjC,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,SAAS,CAAC;IACtB,cAAc,CAAC,EAAE,cAAc,CAAC;CACnC,CAAC;AAEF,MAAM,WAAW,OAAO;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,OAAO,EAAE,SAAS,CAAC;IACnB,eAAe,EAAE,SAAS,CAAC;IAC3B,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,WAAW,CAAC;IACtB,SAAS,CAAC,EAAE;QACR,IAAI,EAAE,MAAM,CAAC;QACb,MAAM,CAAC,EAAE,MAAM,CAAC;KACnB,CAAC;CACL;AAED,UAAU,+BAA+B;IACrC,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;CACvC;AAED,UAAU,oBAAoB;IAC1B,OAAO,CAAC,EAAE,cAAc,CAAC;IACzB,IAAI,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,UAAU,cAAc;IACpB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,SAAS,CAAC;CACzC;AAED,MAAM,WAAW,WAAW;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAGhB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,GAAG,CAAC,EAAE,+BAA+B,GAAG,MAAM,CAAC;IAC/C,YAAY,CAAC,EAAE,+BAA+B,CAAC;IAC/C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,eAAe,CAAC,EAAE,+BAA+B,CAAC;IAClD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,+BAA+B,CAAC;IAC1C,oBAAoB,CAAC,EAAE,oBAAoB,CAAC;IAC5C,KAAK,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC1B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,gBAAgB,CAAC,EAAE,+BAA+B,CAAC;IACnD,UAAU,CAAC,EAAE;QACT,IAAI,EAAE,MAAM,CAAC;QACb,GAAG,EAAE,SAAS,CAAC;KAClB,CAAC;IACF,OAAO,CAAC,EAAE,+BAA+B,CAAC;CAC7C"}
@@ -0,0 +1,23 @@
1
+ /// <reference types="jest" />
2
+ declare const _default: {
3
+ program: jest.Mock<any, any, any>;
4
+ programBuffer: jest.Mock<any, any, any>;
5
+ erase: jest.Mock<any, any, any>;
6
+ recover: jest.Mock<any, any, any>;
7
+ reset: jest.Mock<any, any, any>;
8
+ getProtectionStatus: jest.Mock<any, any, any>;
9
+ setProtectionStatus: jest.Mock<any, any, any>;
10
+ getFwInfo: jest.Mock<any, any, any>;
11
+ setMcuState: jest.Mock<any, any, any>;
12
+ getCoreInfo: jest.Mock<any, any, any>;
13
+ list: jest.Mock<{
14
+ stop: jest.Mock<any, any, any>;
15
+ }, [], any>;
16
+ firmwareRead: jest.Mock<any, any, any>;
17
+ onLogging: jest.Mock<any, any, any>;
18
+ setLogLevel: jest.Mock<any, any, any>;
19
+ setVerboseLogging: jest.Mock<any, any, any>;
20
+ getModuleVersion: jest.Mock<any, any, any>;
21
+ };
22
+ export default _default;
23
+ //# sourceMappingURL=device.d.ts.map