@nordicsemiconductor/pc-nrfconnect-shared 121.0.0 → 123.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 (174) hide show
  1. package/Changelog.md +85 -0
  2. package/coverage/cobertura-coverage.xml +2276 -1778
  3. package/ipc/launcherConfig.ts +25 -0
  4. package/ipc/openWindow.ts +17 -1
  5. package/ipc/schema/packageJson.ts +26 -22
  6. package/main/index.ts +11 -5
  7. package/mocks/packageJsonMock.ts +1 -1
  8. package/nrfutil/device/__mocks__/device.ts +2 -0
  9. package/nrfutil/device/batch.ts +19 -9
  10. package/nrfutil/device/common.ts +32 -46
  11. package/nrfutil/device/device.ts +2 -0
  12. package/nrfutil/device/deviceInfo.ts +70 -0
  13. package/nrfutil/device/erase.ts +2 -2
  14. package/nrfutil/device/firmwareRead.ts +2 -2
  15. package/nrfutil/device/getCoreInfo.ts +2 -2
  16. package/nrfutil/device/getFwInfo.ts +2 -2
  17. package/nrfutil/device/getProtectionStatus.ts +2 -2
  18. package/nrfutil/device/list.ts +5 -31
  19. package/nrfutil/device/program.ts +4 -4
  20. package/nrfutil/device/recover.ts +2 -2
  21. package/nrfutil/device/reset.ts +2 -2
  22. package/nrfutil/device/setMcuState.ts +2 -5
  23. package/nrfutil/device/setProtectionStatus.ts +2 -2
  24. package/nrfutil/index.ts +1 -1
  25. package/nrfutil/moduleVersion.ts +22 -2
  26. package/nrfutil/sandbox.ts +52 -32
  27. package/nrfutil/sandboxTypes.ts +15 -1
  28. package/package.json +3 -2
  29. package/scripts/check-app-properties.ts +6 -6
  30. package/scripts/esbuild.ts +3 -3
  31. package/scripts/nordic-publish.js +23 -23
  32. package/scripts/nordic-publish.ts +3 -3
  33. package/scripts/release-shared.ts +2 -2
  34. package/src/About/ApplicationCard.tsx +3 -5
  35. package/src/About/DeviceCard.tsx +6 -5
  36. package/src/About/SupportCard.tsx +2 -2
  37. package/src/App/App.test.tsx +7 -0
  38. package/src/App/App.tsx +14 -27
  39. package/src/Device/DeviceSelector/BasicDeviceInfo.tsx +12 -6
  40. package/src/Device/DeviceSelector/DeviceList/AnimatedList.tsx +1 -1
  41. package/src/Device/DeviceSelector/DeviceList/Device.tsx +7 -5
  42. package/src/Device/DeviceSelector/DeviceList/DeviceList.tsx +23 -5
  43. package/src/Device/DeviceSelector/DeviceList/EditDeviceButtons.tsx +7 -6
  44. package/src/Device/DeviceSelector/DeviceList/MoreDeviceInfo.tsx +26 -30
  45. package/src/Device/DeviceSelector/DeviceList/edit-device-buttons.scss +1 -2
  46. package/src/Device/DeviceSelector/DeviceSelector.test.tsx +17 -37
  47. package/src/Device/DeviceSelector/DeviceSelector.tsx +64 -21
  48. package/src/Device/DeviceSelector/Favorite.tsx +10 -10
  49. package/src/Device/DeviceSelector/basic-device-info.scss +0 -12
  50. package/src/Device/deviceInfo/deviceInfo.ts +2 -2
  51. package/src/Device/deviceLister.ts +111 -59
  52. package/src/Device/deviceSetup.ts +30 -13
  53. package/src/Device/deviceSlice.ts +157 -84
  54. package/src/Device/jprogOperations.ts +56 -27
  55. package/src/Device/sdfuOperations.ts +25 -31
  56. package/src/ErrorBoundary/ErrorBoundary.tsx +7 -13
  57. package/src/Feedback/sendFeedback.ts +2 -4
  58. package/src/InlineInput/NumberInlineInput.tsx +1 -1
  59. package/src/InlineInput/NumberInputWithDropdown.tsx +1 -2
  60. package/src/index.ts +4 -0
  61. package/src/logging/sendInitialLogMessages.ts +15 -13
  62. package/src/utils/appDetails.ts +22 -0
  63. package/src/utils/appDirs.ts +4 -4
  64. package/src/utils/launcherConfig.ts +17 -0
  65. package/src/utils/logLibVersions.ts +1 -1
  66. package/src/utils/packageJson.ts +52 -10
  67. package/src/utils/persistentStore.ts +21 -14
  68. package/src/utils/systemReport.ts +4 -6
  69. package/src/utils/usageData.ts +75 -167
  70. package/src/utils/usageDataCommon.ts +59 -0
  71. package/src/utils/usageDataMain.ts +117 -0
  72. package/src/utils/usageDataRenderer.ts +126 -0
  73. package/src/utils/useHotKey.ts +2 -2
  74. package/typings/generated/ipc/launcherConfig.d.ts +14 -0
  75. package/typings/generated/ipc/launcherConfig.d.ts.map +1 -0
  76. package/typings/generated/ipc/openWindow.d.ts +10 -4
  77. package/typings/generated/ipc/openWindow.d.ts.map +1 -1
  78. package/typings/generated/ipc/schema/packageJson.d.ts +34 -52
  79. package/typings/generated/ipc/schema/packageJson.d.ts.map +1 -1
  80. package/typings/generated/main/index.d.ts +8 -2
  81. package/typings/generated/main/index.d.ts.map +1 -1
  82. package/typings/generated/nrfutil/device/__mocks__/device.d.ts +1 -0
  83. package/typings/generated/nrfutil/device/__mocks__/device.d.ts.map +1 -1
  84. package/typings/generated/nrfutil/device/batch.d.ts +3 -2
  85. package/typings/generated/nrfutil/device/batch.d.ts.map +1 -1
  86. package/typings/generated/nrfutil/device/common.d.ts +7 -34
  87. package/typings/generated/nrfutil/device/common.d.ts.map +1 -1
  88. package/typings/generated/nrfutil/device/device.d.ts +14 -13
  89. package/typings/generated/nrfutil/device/device.d.ts.map +1 -1
  90. package/typings/generated/nrfutil/device/deviceInfo.d.ts +40 -0
  91. package/typings/generated/nrfutil/device/deviceInfo.d.ts.map +1 -0
  92. package/typings/generated/nrfutil/device/erase.d.ts +2 -2
  93. package/typings/generated/nrfutil/device/erase.d.ts.map +1 -1
  94. package/typings/generated/nrfutil/device/firmwareRead.d.ts +2 -2
  95. package/typings/generated/nrfutil/device/firmwareRead.d.ts.map +1 -1
  96. package/typings/generated/nrfutil/device/getCoreInfo.d.ts +2 -2
  97. package/typings/generated/nrfutil/device/getCoreInfo.d.ts.map +1 -1
  98. package/typings/generated/nrfutil/device/getFwInfo.d.ts +2 -2
  99. package/typings/generated/nrfutil/device/getFwInfo.d.ts.map +1 -1
  100. package/typings/generated/nrfutil/device/getProtectionStatus.d.ts +2 -2
  101. package/typings/generated/nrfutil/device/getProtectionStatus.d.ts.map +1 -1
  102. package/typings/generated/nrfutil/device/list.d.ts +3 -3
  103. package/typings/generated/nrfutil/device/list.d.ts.map +1 -1
  104. package/typings/generated/nrfutil/device/program.d.ts +2 -2
  105. package/typings/generated/nrfutil/device/program.d.ts.map +1 -1
  106. package/typings/generated/nrfutil/device/recover.d.ts +2 -2
  107. package/typings/generated/nrfutil/device/recover.d.ts.map +1 -1
  108. package/typings/generated/nrfutil/device/reset.d.ts +2 -2
  109. package/typings/generated/nrfutil/device/reset.d.ts.map +1 -1
  110. package/typings/generated/nrfutil/device/setMcuState.d.ts +2 -2
  111. package/typings/generated/nrfutil/device/setMcuState.d.ts.map +1 -1
  112. package/typings/generated/nrfutil/device/setProtectionStatus.d.ts +2 -2
  113. package/typings/generated/nrfutil/device/setProtectionStatus.d.ts.map +1 -1
  114. package/typings/generated/nrfutil/index.d.ts +2 -1
  115. package/typings/generated/nrfutil/index.d.ts.map +1 -1
  116. package/typings/generated/nrfutil/moduleVersion.d.ts +4 -0
  117. package/typings/generated/nrfutil/moduleVersion.d.ts.map +1 -1
  118. package/typings/generated/nrfutil/sandbox.d.ts +2 -2
  119. package/typings/generated/nrfutil/sandbox.d.ts.map +1 -1
  120. package/typings/generated/nrfutil/sandboxTypes.d.ts +10 -1
  121. package/typings/generated/nrfutil/sandboxTypes.d.ts.map +1 -1
  122. package/typings/generated/src/About/ApplicationCard.d.ts.map +1 -1
  123. package/typings/generated/src/About/DeviceCard.d.ts.map +1 -1
  124. package/typings/generated/src/App/App.d.ts +0 -1
  125. package/typings/generated/src/App/App.d.ts.map +1 -1
  126. package/typings/generated/src/Device/DeviceSelector/BasicDeviceInfo.d.ts.map +1 -1
  127. package/typings/generated/src/Device/DeviceSelector/DeviceList/Device.d.ts +0 -1
  128. package/typings/generated/src/Device/DeviceSelector/DeviceList/Device.d.ts.map +1 -1
  129. package/typings/generated/src/Device/DeviceSelector/DeviceList/DeviceList.d.ts.map +1 -1
  130. package/typings/generated/src/Device/DeviceSelector/DeviceList/EditDeviceButtons.d.ts.map +1 -1
  131. package/typings/generated/src/Device/DeviceSelector/DeviceList/MoreDeviceInfo.d.ts +0 -1
  132. package/typings/generated/src/Device/DeviceSelector/DeviceList/MoreDeviceInfo.d.ts.map +1 -1
  133. package/typings/generated/src/Device/DeviceSelector/DeviceSelector.d.ts.map +1 -1
  134. package/typings/generated/src/Device/DeviceSelector/Favorite.d.ts +0 -1
  135. package/typings/generated/src/Device/DeviceSelector/Favorite.d.ts.map +1 -1
  136. package/typings/generated/src/Device/deviceLister.d.ts +1 -15
  137. package/typings/generated/src/Device/deviceLister.d.ts.map +1 -1
  138. package/typings/generated/src/Device/deviceSetup.d.ts +7 -6
  139. package/typings/generated/src/Device/deviceSetup.d.ts.map +1 -1
  140. package/typings/generated/src/Device/deviceSlice.d.ts +16 -15
  141. package/typings/generated/src/Device/deviceSlice.d.ts.map +1 -1
  142. package/typings/generated/src/Device/jprogOperations.d.ts.map +1 -1
  143. package/typings/generated/src/Device/sdfuOperations.d.ts.map +1 -1
  144. package/typings/generated/src/ErrorBoundary/ErrorBoundary.d.ts.map +1 -1
  145. package/typings/generated/src/Feedback/sendFeedback.d.ts.map +1 -1
  146. package/typings/generated/src/InlineInput/NumberInlineInput.d.ts +1 -1
  147. package/typings/generated/src/InlineInput/NumberInlineInput.d.ts.map +1 -1
  148. package/typings/generated/src/InlineInput/NumberInputWithDropdown.d.ts.map +1 -1
  149. package/typings/generated/src/index.d.ts +3 -1
  150. package/typings/generated/src/index.d.ts.map +1 -1
  151. package/typings/generated/src/logging/sendInitialLogMessages.d.ts.map +1 -1
  152. package/typings/generated/src/utils/appDetails.d.ts +4 -0
  153. package/typings/generated/src/utils/appDetails.d.ts.map +1 -0
  154. package/typings/generated/src/utils/appDirs.d.ts +1 -1
  155. package/typings/generated/src/utils/appDirs.d.ts.map +1 -1
  156. package/typings/generated/src/utils/launcherConfig.d.ts +4 -0
  157. package/typings/generated/src/utils/launcherConfig.d.ts.map +1 -0
  158. package/typings/generated/src/utils/packageJson.d.ts +30 -7
  159. package/typings/generated/src/utils/packageJson.d.ts.map +1 -1
  160. package/typings/generated/src/utils/persistentStore.d.ts +3 -2
  161. package/typings/generated/src/utils/persistentStore.d.ts.map +1 -1
  162. package/typings/generated/src/utils/systemReport.d.ts +1 -1
  163. package/typings/generated/src/utils/systemReport.d.ts.map +1 -1
  164. package/typings/generated/src/utils/usageData.d.ts +8 -65
  165. package/typings/generated/src/utils/usageData.d.ts.map +1 -1
  166. package/typings/generated/src/utils/usageDataCommon.d.ts +27 -0
  167. package/typings/generated/src/utils/usageDataCommon.d.ts.map +1 -0
  168. package/typings/generated/src/utils/usageDataMain.d.ts +10 -0
  169. package/typings/generated/src/utils/usageDataMain.d.ts.map +1 -0
  170. package/typings/generated/src/utils/usageDataRenderer.d.ts +10 -0
  171. package/typings/generated/src/utils/usageDataRenderer.d.ts.map +1 -0
  172. package/src/Device/DeviceSelector/DeviceList/device.scss +0 -28
  173. package/src/Device/DeviceSelector/DeviceList/more-device-info.scss +0 -33
  174. package/src/Device/DeviceSelector/favorite.scss +0 -17
@@ -8,11 +8,11 @@ import { Progress } from '../sandboxTypes';
8
8
  import {
9
9
  DeviceCore,
10
10
  deviceSingleTaskEndOperationVoid,
11
- NrfutilDeviceWithSerialnumber,
11
+ NrfutilDevice,
12
12
  } from './common';
13
13
 
14
14
  export default (
15
- device: NrfutilDeviceWithSerialnumber,
15
+ device: NrfutilDevice,
16
16
  core?: DeviceCore,
17
17
  onProgress?: (progress: Progress) => void,
18
18
  controller?: AbortController
@@ -8,12 +8,12 @@ import { Progress } from '../sandboxTypes';
8
8
  import {
9
9
  DeviceCore,
10
10
  deviceSingleTaskEndOperationVoid,
11
- NrfutilDeviceWithSerialnumber,
11
+ NrfutilDevice,
12
12
  ResetKind,
13
13
  } from './common';
14
14
 
15
15
  export default async (
16
- device: NrfutilDeviceWithSerialnumber,
16
+ device: NrfutilDevice,
17
17
  core?: DeviceCore,
18
18
  resetKind?: ResetKind,
19
19
  onProgress?: (progress: Progress) => void,
@@ -5,15 +5,12 @@
5
5
  */
6
6
 
7
7
  import { Progress } from '../sandboxTypes';
8
- import {
9
- deviceSingleTaskEndOperationVoid,
10
- NrfutilDeviceWithSerialnumber,
11
- } from './common';
8
+ import { deviceSingleTaskEndOperationVoid, NrfutilDevice } from './common';
12
9
 
13
10
  export type McuState = 'Application' | 'Programming';
14
11
 
15
12
  export default (
16
- device: NrfutilDeviceWithSerialnumber,
13
+ device: NrfutilDevice,
17
14
  state: McuState,
18
15
  onProgress?: (progress: Progress) => void,
19
16
  controller?: AbortController
@@ -8,11 +8,11 @@ import { Progress } from '../sandboxTypes';
8
8
  import {
9
9
  DeviceCore,
10
10
  deviceSingleTaskEndOperationVoid,
11
- NrfutilDeviceWithSerialnumber,
11
+ NrfutilDevice,
12
12
  } from './common';
13
13
 
14
14
  export default (
15
- device: NrfutilDeviceWithSerialnumber,
15
+ device: NrfutilDevice,
16
16
  region: 'All' | 'SecureRegions' | 'Region0' | 'Region0Region1',
17
17
  core?: DeviceCore,
18
18
  onProgress?: (progress: Progress) => void,
package/nrfutil/index.ts CHANGED
@@ -12,9 +12,9 @@ export type {
12
12
  ProtectionStatus,
13
13
  SerialPort as DeviceSerialPort,
14
14
  NrfutilDevice,
15
- NrfutilDeviceWithSerialnumber,
16
15
  } from './device/common';
17
16
 
17
+ export type { DeviceInfo } from './device/deviceInfo';
18
18
  export type { DeviceCoreInfo } from './device/getCoreInfo';
19
19
  export type { ImageType } from './device/getFwInfo';
20
20
 
@@ -4,13 +4,14 @@
4
4
  * SPDX-License-Identifier: LicenseRef-Nordic-4-Clause
5
5
  */
6
6
 
7
- import packageJson from '../src/utils/packageJson';
7
+ import { packageJsonApp } from '../src/utils/packageJson';
8
8
  import {
9
9
  Dependency,
10
10
  isIncrementalVersion,
11
11
  isSemanticVersion,
12
12
  isStringVersion,
13
13
  SubDependency,
14
+ versionToString,
14
15
  } from './sandboxTypes';
15
16
 
16
17
  export const describeVersion = (version?: SubDependency | string) => {
@@ -51,6 +52,25 @@ const findInDependencies = (
51
52
  }
52
53
  };
53
54
 
55
+ export const getExpectedVersion = (dependency: Dependency) => {
56
+ const currentVersion = versionToString(
57
+ dependency.versionFormat,
58
+ dependency.version
59
+ );
60
+
61
+ const expectedVersion = dependency.expectedVersion
62
+ ? versionToString(
63
+ dependency.expectedVersion.versionFormat,
64
+ dependency.expectedVersion.version
65
+ )
66
+ : currentVersion;
67
+
68
+ return {
69
+ isExpectedVersion: currentVersion === expectedVersion,
70
+ expectedVersion,
71
+ };
72
+ };
73
+
54
74
  export const resolveModuleVersion = (
55
75
  module: KnownModule,
56
76
  versions: Dependency[] = []
@@ -69,7 +89,7 @@ const overriddenVersion = (module: string) => {
69
89
  };
70
90
 
71
91
  const versionFromPackageJson = (module: string) =>
72
- packageJson().nrfConnectForDesktop.nrfutil?.[module][0];
92
+ packageJsonApp().nrfConnectForDesktop.nrfutil?.[module][0];
73
93
 
74
94
  const failToDetermineVersion = (module: string) => {
75
95
  throw new Error(`No version specified for nrfutil-${module}`);
@@ -10,6 +10,7 @@ import os from 'os';
10
10
  import path from 'path';
11
11
 
12
12
  import describeError from '../src/logging/describeError';
13
+ import usageData from '../src/utils/usageData';
13
14
  import { versionToInstall } from './moduleVersion';
14
15
  import { getNrfutilLogger } from './nrfutilLogger';
15
16
  import {
@@ -67,8 +68,9 @@ const commonParser = <Result>(
67
68
  onInfo?: (info: Result) => void;
68
69
  onTaskBegin?: (taskEnd: TaskBegin) => void;
69
70
  onTaskEnd?: (taskEnd: TaskEnd<Result>) => void;
70
- onLogging?: (logging: LogMessage) => void;
71
- }
71
+ onLogging?: (logging: LogMessage, pid?: number) => void;
72
+ },
73
+ pid?: number
72
74
  ): Buffer | undefined => {
73
75
  const parsedData: NrfutilJson<Result>[] | undefined =
74
76
  parseJsonBuffers(data);
@@ -95,7 +97,7 @@ const commonParser = <Result>(
95
97
  callbacks.onInfo?.(item.data);
96
98
  break;
97
99
  case 'log':
98
- callbacks.onLogging?.(item.data);
100
+ callbacks.onLogging?.(item.data, pid);
99
101
  break;
100
102
  case 'batch_update':
101
103
  processItem(item.data.data);
@@ -110,7 +112,7 @@ export class NrfutilSandbox {
110
112
  baseDir: string;
111
113
  module: string;
112
114
  version: string;
113
- onLoggingHandlers: ((logging: LogMessage) => void)[] = [];
115
+ onLoggingHandlers: ((logging: LogMessage, pid?: number) => void)[] = [];
114
116
  logLevel: LogLevel = 'info';
115
117
  env: ReturnType<typeof prepareEnv>;
116
118
 
@@ -122,9 +124,11 @@ export class NrfutilSandbox {
122
124
  this.env = prepareEnv(baseDir, module, version);
123
125
  }
124
126
 
125
- private processLoggingData = (data: NrfutilJson) => {
127
+ private processLoggingData = (data: NrfutilJson, pid?: number) => {
126
128
  if (data.type === 'log') {
127
- this.onLoggingHandlers.forEach(onLogging => onLogging(data.data));
129
+ this.onLoggingHandlers.forEach(onLogging =>
130
+ onLogging(data.data, pid)
131
+ );
128
132
  return true;
129
133
  }
130
134
 
@@ -200,28 +204,35 @@ export class NrfutilSandbox {
200
204
  const info: Result[] = [];
201
205
  const taskEnd: TaskEnd<Result>[] = [];
202
206
  let stdErr: string | undefined;
207
+ let pid: number | undefined;
208
+
203
209
  try {
204
210
  await this.execCommand(
205
211
  command,
206
212
  args,
207
- data =>
208
- commonParser<Result>(data, {
209
- onProgress,
210
- onTaskBegin,
211
- onTaskEnd: end => {
212
- taskEnd.push(end);
213
- onTaskEnd?.(end);
214
- },
215
- onInfo: i => {
216
- info.push(i);
213
+ (data, processId) =>
214
+ commonParser<Result>(
215
+ data,
216
+ {
217
+ onProgress,
218
+ onTaskBegin,
219
+ onTaskEnd: end => {
220
+ taskEnd.push(end);
221
+ onTaskEnd?.(end);
222
+ },
223
+ onInfo: i => {
224
+ info.push(i);
225
+ },
226
+ onLogging: logging => {
227
+ this.onLoggingHandlers.forEach(onLogging => {
228
+ onLogging(logging, processId);
229
+ });
230
+ },
217
231
  },
218
- onLogging: logging => {
219
- this.onLoggingHandlers.forEach(onLogging => {
220
- onLogging(logging);
221
- });
222
- },
223
- }),
224
- data => {
232
+ processId
233
+ ),
234
+ (data, processId) => {
235
+ pid = processId;
225
236
  stdErr = (stdErr ?? '') + data.toString();
226
237
  },
227
238
  controller
@@ -256,6 +267,11 @@ export class NrfutilSandbox {
256
267
  }
257
268
 
258
269
  error.message = error.message.replaceAll('Error: ', '');
270
+ usageData.sendErrorReport(
271
+ `${
272
+ pid && this.logLevel === 'trace' ? `[PID:${pid}] ` : ''
273
+ }${describeError(error)}`
274
+ );
259
275
  throw error;
260
276
  }
261
277
  };
@@ -280,12 +296,13 @@ export class NrfutilSandbox {
280
296
  private execCommand = (
281
297
  command: string,
282
298
  args: string[],
283
- parser: (data: Buffer) => Buffer | undefined,
284
- onStdError: (data: Buffer) => void,
299
+ parser: (data: Buffer, pid?: number) => Buffer | undefined,
300
+ onStdError: (data: Buffer, pid?: number) => void,
285
301
  controller?: AbortController
286
302
  ) =>
287
303
  new Promise<void>((resolve, reject) => {
288
304
  let aborting = false;
305
+ usageData.sendUsageData(`running nrfutil ${command}`, { args });
289
306
  const nrfutil = spawn(
290
307
  path.join(this.baseDir, 'nrfutil'),
291
308
  [
@@ -319,7 +336,7 @@ export class NrfutilSandbox {
319
336
  if (controller?.signal.aborted) return;
320
337
 
321
338
  buffer = Buffer.concat([buffer, data]);
322
- const remainingBytes = parser(buffer);
339
+ const remainingBytes = parser(buffer, nrfutil.pid);
323
340
  if (remainingBytes) {
324
341
  buffer = remainingBytes;
325
342
  } else {
@@ -328,7 +345,7 @@ export class NrfutilSandbox {
328
345
  });
329
346
 
330
347
  nrfutil.stderr.on('data', (data: Buffer) => {
331
- onStdError(data);
348
+ onStdError(data, nrfutil.pid);
332
349
  });
333
350
 
334
351
  nrfutil.on('close', code => {
@@ -364,7 +381,7 @@ export class NrfutilSandbox {
364
381
  const operation = this.execCommand(
365
382
  this.module,
366
383
  [command, ...args],
367
- data => {
384
+ (data, pid) => {
368
385
  const parsedData: NrfutilJson<Result>[] | undefined =
369
386
  parseJsonBuffers(data);
370
387
 
@@ -373,15 +390,15 @@ export class NrfutilSandbox {
373
390
  }
374
391
 
375
392
  parsedData.forEach(item => {
376
- if (!this.processLoggingData(item)) {
393
+ if (!this.processLoggingData(item, pid)) {
377
394
  if (item.type === 'info') {
378
395
  processors.onData(item.data);
379
396
  }
380
397
  }
381
398
  });
382
399
  },
383
- data => {
384
- processors.onError(new Error(data.toString()));
400
+ (data, pid) => {
401
+ processors.onError(new Error(data.toString()), pid);
385
402
  },
386
403
  controller
387
404
  );
@@ -392,6 +409,7 @@ export class NrfutilSandbox {
392
409
  closedHandlers.forEach(callback => callback());
393
410
  })
394
411
  .catch(error => {
412
+ usageData.sendErrorReport(describeError(error));
395
413
  running = false;
396
414
  closedHandlers.forEach(callback => callback(error));
397
415
  });
@@ -471,7 +489,9 @@ export class NrfutilSandbox {
471
489
  throw new Error('Unexpected result');
472
490
  };
473
491
 
474
- public onLogging = (handler: (logging: LogMessage) => void) => {
492
+ public onLogging = (
493
+ handler: (logging: LogMessage, pid?: number) => void
494
+ ) => {
475
495
  this.onLoggingHandlers.push(handler);
476
496
 
477
497
  return () =>
@@ -5,7 +5,7 @@
5
5
  */
6
6
 
7
7
  export interface BackgroundTask<T> {
8
- onError: (error: Error) => void;
8
+ onError: (error: Error, pid?: number) => void;
9
9
  onData: (data: T) => void;
10
10
  }
11
11
 
@@ -155,6 +155,10 @@ export type Dependency = {
155
155
  dependencies?: SubDependency[];
156
156
  versionFormat: VersionFormat;
157
157
  version: VersionType;
158
+ expectedVersion?: {
159
+ versionFormat: VersionFormat;
160
+ version: VersionType;
161
+ };
158
162
  };
159
163
 
160
164
  export type VersionType = SemanticVersion | string | number;
@@ -165,6 +169,7 @@ export interface SubDependency {
165
169
  dependencies?: SubDependency[];
166
170
  versionFormat: VersionFormat;
167
171
  version: VersionType;
172
+ expectedVersion?: { versionFormat: VersionFormat; version: VersionType };
168
173
  }
169
174
 
170
175
  export type ModuleVersion = {
@@ -192,3 +197,12 @@ export const isStringVersion = (
192
197
  version?: SubDependency
193
198
  ): version is SubDependency & { version: string } =>
194
199
  version?.versionFormat === 'string';
200
+
201
+ export const versionToString = (type: VersionFormat, version: VersionType) => {
202
+ if (type === 'incremental' || type === 'string') {
203
+ return `${version}`;
204
+ }
205
+
206
+ const v = version as SemanticVersion;
207
+ return `${v.major}.${v.minor}.${v.patch}`;
208
+ };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nordicsemiconductor/pc-nrfconnect-shared",
3
- "version": "121.0.0",
3
+ "version": "123.0.0",
4
4
  "description": "Shared commodities for developing pc-nrfconnect-* packages",
5
5
  "repository": {
6
6
  "type": "git",
@@ -33,7 +33,7 @@
33
33
  "@mdi/font": "7.2.96",
34
34
  "@mdi/js": "^7.2.96",
35
35
  "@mdi/react": "^1.6.1",
36
- "@microsoft/applicationinsights-web": "^3.0.2",
36
+ "@microsoft/applicationinsights-web": "^3.0.4",
37
37
  "@reduxjs/toolkit": "1.9.3",
38
38
  "@svgr/core": "^7.0.0",
39
39
  "@svgr/plugin-jsx": "7.0.0",
@@ -57,6 +57,7 @@
57
57
  "@typescript-eslint/eslint-plugin": "5.57.1",
58
58
  "@typescript-eslint/parser": "5.57.1",
59
59
  "adm-zip": "^0.5.5",
60
+ "applicationinsights": "^2.9.0",
60
61
  "autoprefixer": "10.4.14",
61
62
  "bootstrap": "4.6.2",
62
63
  "commander": "10.0.0",
@@ -10,7 +10,7 @@ import { execSync } from 'child_process';
10
10
  import { existsSync, readdirSync, readFileSync } from 'fs';
11
11
  import property from 'lodash/property';
12
12
 
13
- import { PackageJson, parsePackageJson } from '../ipc/schema/packageJson';
13
+ import { PackageJsonApp, parsePackageJsonApp } from '../ipc/schema/packageJson';
14
14
 
15
15
  const format = (strings: string[]) =>
16
16
  strings.map(string => `\`${string}\``).join(', ');
@@ -61,7 +61,7 @@ const mustContainOneOf = (
61
61
  }
62
62
  };
63
63
 
64
- const checkRepoUrl = (packageJson: PackageJson) => {
64
+ const checkRepoUrl = (packageJson: PackageJsonApp) => {
65
65
  if (!existsSync('./.git')) {
66
66
  return;
67
67
  }
@@ -88,7 +88,7 @@ const checkRepoUrl = (packageJson: PackageJson) => {
88
88
  }
89
89
  };
90
90
 
91
- const checkOptionalProperties = (packageJson: PackageJson) => {
91
+ const checkOptionalProperties = (packageJson: PackageJsonApp) => {
92
92
  if (propertyIsMissing(packageJson)('homepage')) {
93
93
  warn('Please provide a property `homepage` in package.json.');
94
94
  }
@@ -100,7 +100,7 @@ const checkOptionalProperties = (packageJson: PackageJson) => {
100
100
  }
101
101
  };
102
102
 
103
- const checkFileProperty = (packageJson: PackageJson) => {
103
+ const checkFileProperty = (packageJson: PackageJsonApp) => {
104
104
  mustContain(
105
105
  packageJson.files ?? [],
106
106
  ['LICENSE', 'dist/', 'Changelog.md'],
@@ -115,7 +115,7 @@ const checkFileProperty = (packageJson: PackageJson) => {
115
115
  };
116
116
 
117
117
  const readAndCheckPackageJson = () => {
118
- const packageJsonResult = parsePackageJson(
118
+ const packageJsonResult = parsePackageJsonApp(
119
119
  readFileSync('./package.json', 'utf8')
120
120
  );
121
121
 
@@ -136,7 +136,7 @@ const changelogEntryRegexp = (version?: string) =>
136
136
  new RegExp(`^## ${version}`, 'mi');
137
137
 
138
138
  const checkChangelog = (
139
- packageJson: PackageJson,
139
+ packageJson: PackageJsonApp,
140
140
  checkChangelogHasCurrentEntry: boolean
141
141
  ) => {
142
142
  if (!existsSync('./Changelog.md')) {
@@ -8,11 +8,11 @@
8
8
  import * as fs from 'node:fs';
9
9
  import * as path from 'node:path';
10
10
 
11
- import { parsePackageJson } from '../ipc/schema/packageJson';
11
+ import { parsePackageJsonApp } from '../ipc/schema/packageJson';
12
12
  import { build } from './esbuild-renderer';
13
13
 
14
14
  const validate = (packageJson: string) => {
15
- const result = parsePackageJson(packageJson);
15
+ const result = parsePackageJsonApp(packageJson);
16
16
 
17
17
  if (!result.success) {
18
18
  console.log(result.error.message);
@@ -42,7 +42,7 @@ const bundle = () => {
42
42
 
43
43
  build({
44
44
  define: {
45
- 'process.env.PACKAGE_JSON_OF_APP': JSON.stringify(packageJson),
45
+ 'process.env.PACKAGE_JSON': JSON.stringify(packageJson),
46
46
  },
47
47
  entryPoints: [entry()],
48
48
  });