@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.
- package/Changelog.md +85 -0
- package/coverage/cobertura-coverage.xml +2276 -1778
- package/ipc/launcherConfig.ts +25 -0
- package/ipc/openWindow.ts +17 -1
- package/ipc/schema/packageJson.ts +26 -22
- package/main/index.ts +11 -5
- package/mocks/packageJsonMock.ts +1 -1
- package/nrfutil/device/__mocks__/device.ts +2 -0
- package/nrfutil/device/batch.ts +19 -9
- package/nrfutil/device/common.ts +32 -46
- package/nrfutil/device/device.ts +2 -0
- package/nrfutil/device/deviceInfo.ts +70 -0
- package/nrfutil/device/erase.ts +2 -2
- package/nrfutil/device/firmwareRead.ts +2 -2
- package/nrfutil/device/getCoreInfo.ts +2 -2
- package/nrfutil/device/getFwInfo.ts +2 -2
- package/nrfutil/device/getProtectionStatus.ts +2 -2
- package/nrfutil/device/list.ts +5 -31
- package/nrfutil/device/program.ts +4 -4
- package/nrfutil/device/recover.ts +2 -2
- package/nrfutil/device/reset.ts +2 -2
- package/nrfutil/device/setMcuState.ts +2 -5
- package/nrfutil/device/setProtectionStatus.ts +2 -2
- package/nrfutil/index.ts +1 -1
- package/nrfutil/moduleVersion.ts +22 -2
- package/nrfutil/sandbox.ts +52 -32
- package/nrfutil/sandboxTypes.ts +15 -1
- package/package.json +3 -2
- package/scripts/check-app-properties.ts +6 -6
- package/scripts/esbuild.ts +3 -3
- package/scripts/nordic-publish.js +23 -23
- package/scripts/nordic-publish.ts +3 -3
- package/scripts/release-shared.ts +2 -2
- package/src/About/ApplicationCard.tsx +3 -5
- package/src/About/DeviceCard.tsx +6 -5
- package/src/About/SupportCard.tsx +2 -2
- package/src/App/App.test.tsx +7 -0
- package/src/App/App.tsx +14 -27
- package/src/Device/DeviceSelector/BasicDeviceInfo.tsx +12 -6
- package/src/Device/DeviceSelector/DeviceList/AnimatedList.tsx +1 -1
- package/src/Device/DeviceSelector/DeviceList/Device.tsx +7 -5
- package/src/Device/DeviceSelector/DeviceList/DeviceList.tsx +23 -5
- package/src/Device/DeviceSelector/DeviceList/EditDeviceButtons.tsx +7 -6
- package/src/Device/DeviceSelector/DeviceList/MoreDeviceInfo.tsx +26 -30
- package/src/Device/DeviceSelector/DeviceList/edit-device-buttons.scss +1 -2
- package/src/Device/DeviceSelector/DeviceSelector.test.tsx +17 -37
- package/src/Device/DeviceSelector/DeviceSelector.tsx +64 -21
- package/src/Device/DeviceSelector/Favorite.tsx +10 -10
- package/src/Device/DeviceSelector/basic-device-info.scss +0 -12
- package/src/Device/deviceInfo/deviceInfo.ts +2 -2
- package/src/Device/deviceLister.ts +111 -59
- package/src/Device/deviceSetup.ts +30 -13
- package/src/Device/deviceSlice.ts +157 -84
- package/src/Device/jprogOperations.ts +56 -27
- package/src/Device/sdfuOperations.ts +25 -31
- package/src/ErrorBoundary/ErrorBoundary.tsx +7 -13
- package/src/Feedback/sendFeedback.ts +2 -4
- package/src/InlineInput/NumberInlineInput.tsx +1 -1
- package/src/InlineInput/NumberInputWithDropdown.tsx +1 -2
- package/src/index.ts +4 -0
- package/src/logging/sendInitialLogMessages.ts +15 -13
- package/src/utils/appDetails.ts +22 -0
- package/src/utils/appDirs.ts +4 -4
- package/src/utils/launcherConfig.ts +17 -0
- package/src/utils/logLibVersions.ts +1 -1
- package/src/utils/packageJson.ts +52 -10
- package/src/utils/persistentStore.ts +21 -14
- package/src/utils/systemReport.ts +4 -6
- package/src/utils/usageData.ts +75 -167
- package/src/utils/usageDataCommon.ts +59 -0
- package/src/utils/usageDataMain.ts +117 -0
- package/src/utils/usageDataRenderer.ts +126 -0
- package/src/utils/useHotKey.ts +2 -2
- package/typings/generated/ipc/launcherConfig.d.ts +14 -0
- package/typings/generated/ipc/launcherConfig.d.ts.map +1 -0
- package/typings/generated/ipc/openWindow.d.ts +10 -4
- package/typings/generated/ipc/openWindow.d.ts.map +1 -1
- package/typings/generated/ipc/schema/packageJson.d.ts +34 -52
- package/typings/generated/ipc/schema/packageJson.d.ts.map +1 -1
- package/typings/generated/main/index.d.ts +8 -2
- package/typings/generated/main/index.d.ts.map +1 -1
- package/typings/generated/nrfutil/device/__mocks__/device.d.ts +1 -0
- package/typings/generated/nrfutil/device/__mocks__/device.d.ts.map +1 -1
- package/typings/generated/nrfutil/device/batch.d.ts +3 -2
- package/typings/generated/nrfutil/device/batch.d.ts.map +1 -1
- package/typings/generated/nrfutil/device/common.d.ts +7 -34
- package/typings/generated/nrfutil/device/common.d.ts.map +1 -1
- package/typings/generated/nrfutil/device/device.d.ts +14 -13
- package/typings/generated/nrfutil/device/device.d.ts.map +1 -1
- package/typings/generated/nrfutil/device/deviceInfo.d.ts +40 -0
- package/typings/generated/nrfutil/device/deviceInfo.d.ts.map +1 -0
- package/typings/generated/nrfutil/device/erase.d.ts +2 -2
- package/typings/generated/nrfutil/device/erase.d.ts.map +1 -1
- package/typings/generated/nrfutil/device/firmwareRead.d.ts +2 -2
- package/typings/generated/nrfutil/device/firmwareRead.d.ts.map +1 -1
- package/typings/generated/nrfutil/device/getCoreInfo.d.ts +2 -2
- package/typings/generated/nrfutil/device/getCoreInfo.d.ts.map +1 -1
- package/typings/generated/nrfutil/device/getFwInfo.d.ts +2 -2
- package/typings/generated/nrfutil/device/getFwInfo.d.ts.map +1 -1
- package/typings/generated/nrfutil/device/getProtectionStatus.d.ts +2 -2
- package/typings/generated/nrfutil/device/getProtectionStatus.d.ts.map +1 -1
- package/typings/generated/nrfutil/device/list.d.ts +3 -3
- package/typings/generated/nrfutil/device/list.d.ts.map +1 -1
- package/typings/generated/nrfutil/device/program.d.ts +2 -2
- package/typings/generated/nrfutil/device/program.d.ts.map +1 -1
- package/typings/generated/nrfutil/device/recover.d.ts +2 -2
- package/typings/generated/nrfutil/device/recover.d.ts.map +1 -1
- package/typings/generated/nrfutil/device/reset.d.ts +2 -2
- package/typings/generated/nrfutil/device/reset.d.ts.map +1 -1
- package/typings/generated/nrfutil/device/setMcuState.d.ts +2 -2
- package/typings/generated/nrfutil/device/setMcuState.d.ts.map +1 -1
- package/typings/generated/nrfutil/device/setProtectionStatus.d.ts +2 -2
- package/typings/generated/nrfutil/device/setProtectionStatus.d.ts.map +1 -1
- package/typings/generated/nrfutil/index.d.ts +2 -1
- package/typings/generated/nrfutil/index.d.ts.map +1 -1
- package/typings/generated/nrfutil/moduleVersion.d.ts +4 -0
- package/typings/generated/nrfutil/moduleVersion.d.ts.map +1 -1
- package/typings/generated/nrfutil/sandbox.d.ts +2 -2
- package/typings/generated/nrfutil/sandbox.d.ts.map +1 -1
- package/typings/generated/nrfutil/sandboxTypes.d.ts +10 -1
- package/typings/generated/nrfutil/sandboxTypes.d.ts.map +1 -1
- package/typings/generated/src/About/ApplicationCard.d.ts.map +1 -1
- package/typings/generated/src/About/DeviceCard.d.ts.map +1 -1
- package/typings/generated/src/App/App.d.ts +0 -1
- package/typings/generated/src/App/App.d.ts.map +1 -1
- package/typings/generated/src/Device/DeviceSelector/BasicDeviceInfo.d.ts.map +1 -1
- package/typings/generated/src/Device/DeviceSelector/DeviceList/Device.d.ts +0 -1
- package/typings/generated/src/Device/DeviceSelector/DeviceList/Device.d.ts.map +1 -1
- package/typings/generated/src/Device/DeviceSelector/DeviceList/DeviceList.d.ts.map +1 -1
- package/typings/generated/src/Device/DeviceSelector/DeviceList/EditDeviceButtons.d.ts.map +1 -1
- package/typings/generated/src/Device/DeviceSelector/DeviceList/MoreDeviceInfo.d.ts +0 -1
- package/typings/generated/src/Device/DeviceSelector/DeviceList/MoreDeviceInfo.d.ts.map +1 -1
- package/typings/generated/src/Device/DeviceSelector/DeviceSelector.d.ts.map +1 -1
- package/typings/generated/src/Device/DeviceSelector/Favorite.d.ts +0 -1
- package/typings/generated/src/Device/DeviceSelector/Favorite.d.ts.map +1 -1
- package/typings/generated/src/Device/deviceLister.d.ts +1 -15
- package/typings/generated/src/Device/deviceLister.d.ts.map +1 -1
- package/typings/generated/src/Device/deviceSetup.d.ts +7 -6
- package/typings/generated/src/Device/deviceSetup.d.ts.map +1 -1
- package/typings/generated/src/Device/deviceSlice.d.ts +16 -15
- package/typings/generated/src/Device/deviceSlice.d.ts.map +1 -1
- package/typings/generated/src/Device/jprogOperations.d.ts.map +1 -1
- package/typings/generated/src/Device/sdfuOperations.d.ts.map +1 -1
- package/typings/generated/src/ErrorBoundary/ErrorBoundary.d.ts.map +1 -1
- package/typings/generated/src/Feedback/sendFeedback.d.ts.map +1 -1
- package/typings/generated/src/InlineInput/NumberInlineInput.d.ts +1 -1
- package/typings/generated/src/InlineInput/NumberInlineInput.d.ts.map +1 -1
- package/typings/generated/src/InlineInput/NumberInputWithDropdown.d.ts.map +1 -1
- package/typings/generated/src/index.d.ts +3 -1
- package/typings/generated/src/index.d.ts.map +1 -1
- package/typings/generated/src/logging/sendInitialLogMessages.d.ts.map +1 -1
- package/typings/generated/src/utils/appDetails.d.ts +4 -0
- package/typings/generated/src/utils/appDetails.d.ts.map +1 -0
- package/typings/generated/src/utils/appDirs.d.ts +1 -1
- package/typings/generated/src/utils/appDirs.d.ts.map +1 -1
- package/typings/generated/src/utils/launcherConfig.d.ts +4 -0
- package/typings/generated/src/utils/launcherConfig.d.ts.map +1 -0
- package/typings/generated/src/utils/packageJson.d.ts +30 -7
- package/typings/generated/src/utils/packageJson.d.ts.map +1 -1
- package/typings/generated/src/utils/persistentStore.d.ts +3 -2
- package/typings/generated/src/utils/persistentStore.d.ts.map +1 -1
- package/typings/generated/src/utils/systemReport.d.ts +1 -1
- package/typings/generated/src/utils/systemReport.d.ts.map +1 -1
- package/typings/generated/src/utils/usageData.d.ts +8 -65
- package/typings/generated/src/utils/usageData.d.ts.map +1 -1
- package/typings/generated/src/utils/usageDataCommon.d.ts +27 -0
- package/typings/generated/src/utils/usageDataCommon.d.ts.map +1 -0
- package/typings/generated/src/utils/usageDataMain.d.ts +10 -0
- package/typings/generated/src/utils/usageDataMain.d.ts.map +1 -0
- package/typings/generated/src/utils/usageDataRenderer.d.ts +10 -0
- package/typings/generated/src/utils/usageDataRenderer.d.ts.map +1 -0
- package/src/Device/DeviceSelector/DeviceList/device.scss +0 -28
- package/src/Device/DeviceSelector/DeviceList/more-device-info.scss +0 -33
- 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
|
-
|
|
11
|
+
NrfutilDevice,
|
|
12
12
|
} from './common';
|
|
13
13
|
|
|
14
14
|
export default (
|
|
15
|
-
device:
|
|
15
|
+
device: NrfutilDevice,
|
|
16
16
|
core?: DeviceCore,
|
|
17
17
|
onProgress?: (progress: Progress) => void,
|
|
18
18
|
controller?: AbortController
|
package/nrfutil/device/reset.ts
CHANGED
|
@@ -8,12 +8,12 @@ import { Progress } from '../sandboxTypes';
|
|
|
8
8
|
import {
|
|
9
9
|
DeviceCore,
|
|
10
10
|
deviceSingleTaskEndOperationVoid,
|
|
11
|
-
|
|
11
|
+
NrfutilDevice,
|
|
12
12
|
ResetKind,
|
|
13
13
|
} from './common';
|
|
14
14
|
|
|
15
15
|
export default async (
|
|
16
|
-
device:
|
|
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:
|
|
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
|
-
|
|
11
|
+
NrfutilDevice,
|
|
12
12
|
} from './common';
|
|
13
13
|
|
|
14
14
|
export default (
|
|
15
|
-
device:
|
|
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
|
|
package/nrfutil/moduleVersion.ts
CHANGED
|
@@ -4,13 +4,14 @@
|
|
|
4
4
|
* SPDX-License-Identifier: LicenseRef-Nordic-4-Clause
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
|
-
import
|
|
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
|
-
|
|
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}`);
|
package/nrfutil/sandbox.ts
CHANGED
|
@@ -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 =>
|
|
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>(
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
onTaskEnd
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
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
|
-
|
|
219
|
-
|
|
220
|
-
|
|
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 = (
|
|
492
|
+
public onLogging = (
|
|
493
|
+
handler: (logging: LogMessage, pid?: number) => void
|
|
494
|
+
) => {
|
|
475
495
|
this.onLoggingHandlers.push(handler);
|
|
476
496
|
|
|
477
497
|
return () =>
|
package/nrfutil/sandboxTypes.ts
CHANGED
|
@@ -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": "
|
|
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.
|
|
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 {
|
|
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:
|
|
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:
|
|
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:
|
|
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 =
|
|
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:
|
|
139
|
+
packageJson: PackageJsonApp,
|
|
140
140
|
checkChangelogHasCurrentEntry: boolean
|
|
141
141
|
) => {
|
|
142
142
|
if (!existsSync('./Changelog.md')) {
|
package/scripts/esbuild.ts
CHANGED
|
@@ -8,11 +8,11 @@
|
|
|
8
8
|
import * as fs from 'node:fs';
|
|
9
9
|
import * as path from 'node:path';
|
|
10
10
|
|
|
11
|
-
import {
|
|
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 =
|
|
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.
|
|
45
|
+
'process.env.PACKAGE_JSON': JSON.stringify(packageJson),
|
|
46
46
|
},
|
|
47
47
|
entryPoints: [entry()],
|
|
48
48
|
});
|