@nordicsemiconductor/pc-nrfconnect-shared 186.0.0 → 188.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 +19 -0
- package/nrfutil/device/logLibVersions.ts +1 -1
- package/nrfutil/moduleVersion.ts +1 -1
- package/nrfutil/modules.ts +3 -3
- package/nrfutil/sandbox.ts +6 -4
- package/package.json +6 -6
- package/scripts/nordic-publish.js +25 -25
- package/src/About/SupportCard.tsx +2 -2
- package/src/Device/DeviceSelector/DeviceList/DeviceList.tsx +2 -2
- package/src/Device/DeviceSelector/DeviceSelector.test.tsx +3 -3
- package/src/Device/DeviceSelector/DeviceSelector.tsx +1 -1
- package/src/Device/deviceLister.ts +45 -3
- package/src/Device/deviceSetup.ts +6 -6
- package/src/Device/deviceSlice.ts +2 -36
- package/src/Device/jprogOperations.ts +3 -3
- package/src/Device/sdfuOperations.ts +13 -11
- package/src/Log/logSlice.ts +1 -1
- package/src/Parsers/shellParser.ts +1 -1
- package/src/SerialPort/ConflictingSettingsDialog.tsx +2 -2
- package/src/logging/index.ts +2 -2
- package/src/utils/persistentStore.ts +2 -2
- package/src/utils/systemReport.ts +1 -1
- package/typings/generated/ipc/schema/packageJson.d.ts +41 -20
- package/typings/generated/ipc/schema/packageJson.d.ts.map +1 -1
- package/typings/generated/ipc/schema/parseJson.d.ts +1 -0
- package/typings/generated/ipc/schema/parseJson.d.ts.map +1 -1
- package/typings/generated/nrfutil/sandbox.d.ts.map +1 -1
- package/typings/generated/src/Device/deviceLister.d.ts.map +1 -1
- package/typings/generated/src/Device/deviceSlice.d.ts.map +1 -1
- package/typings/generated/src/Device/sdfuOperations.d.ts.map +1 -1
- package/typings/generated/src/Parsers/shellParser.d.ts +1 -1
- package/typings/generated/src/Parsers/shellParser.d.ts.map +1 -1
|
@@ -77,7 +77,7 @@ export default ({ feedbackCategories }: { feedbackCategories?: string[] }) => {
|
|
|
77
77
|
<div className="tw-w-full">
|
|
78
78
|
<Toggle
|
|
79
79
|
id="enableVerboseLoggin"
|
|
80
|
-
label="
|
|
80
|
+
label="Verbose Logging"
|
|
81
81
|
onToggle={isToggled =>
|
|
82
82
|
dispatch(setIsLoggingVerbose(isToggled))
|
|
83
83
|
}
|
|
@@ -92,7 +92,7 @@ export default ({ feedbackCategories }: { feedbackCategories?: string[] }) => {
|
|
|
92
92
|
doNotResetVerboseLogginOnRestart();
|
|
93
93
|
getCurrentWindow().emit('restart-window');
|
|
94
94
|
}}
|
|
95
|
-
title="Restart application with verbose logging
|
|
95
|
+
title="Restart application with verbose logging toggled on to get log messages from the initial enumeration."
|
|
96
96
|
disabled={!verboseLogging}
|
|
97
97
|
>
|
|
98
98
|
Restart with verbose logging
|
|
@@ -84,10 +84,10 @@ const DeviceList: FC<Props> = ({
|
|
|
84
84
|
<div className="global-auto-reconnect">
|
|
85
85
|
<Toggle
|
|
86
86
|
id="toggle-global-auto-reconnect"
|
|
87
|
-
label="Auto
|
|
87
|
+
label="Auto-reconnect"
|
|
88
88
|
title={
|
|
89
89
|
!canUseAutoReconnect
|
|
90
|
-
? 'Cannot auto
|
|
90
|
+
? 'Cannot auto-reconnect to a device with no serial number.'
|
|
91
91
|
: ''
|
|
92
92
|
}
|
|
93
93
|
disabled={!canUseAutoReconnect}
|
|
@@ -313,7 +313,7 @@ describe('DeviceSelector', () => {
|
|
|
313
313
|
fireEvent.click(screen.getByText(DEVICE_SERIAL_NUMBER));
|
|
314
314
|
|
|
315
315
|
await screen.findByText(
|
|
316
|
-
'Device must be programmed
|
|
316
|
+
'Device must be programmed. Do you want to proceed?'
|
|
317
317
|
);
|
|
318
318
|
});
|
|
319
319
|
|
|
@@ -335,14 +335,14 @@ describe('DeviceSelector', () => {
|
|
|
335
335
|
fireEvent.click(screen.getByText(DEVICE_SERIAL_NUMBER));
|
|
336
336
|
|
|
337
337
|
await screen.findByText(
|
|
338
|
-
'Device must be programmed
|
|
338
|
+
'Device must be programmed. Do you want to proceed?'
|
|
339
339
|
);
|
|
340
340
|
|
|
341
341
|
fireEvent.click(screen.getByText('No'));
|
|
342
342
|
|
|
343
343
|
expect(
|
|
344
344
|
screen.queryByText(
|
|
345
|
-
'Device must be programmed
|
|
345
|
+
'Device must be programmed. Do you want to proceed?'
|
|
346
346
|
)
|
|
347
347
|
).toBeNull();
|
|
348
348
|
|
|
@@ -11,6 +11,11 @@ import logger from '../logging';
|
|
|
11
11
|
import type { AppThunk, RootState } from '../store';
|
|
12
12
|
import simplifyDevice from '../telemetry/simplifyDevice';
|
|
13
13
|
import telemetry from '../telemetry/telemetry';
|
|
14
|
+
import {
|
|
15
|
+
getPersistedIsFavorite,
|
|
16
|
+
getPersistedNickname,
|
|
17
|
+
getPersistedSerialPortSettings,
|
|
18
|
+
} from '../utils/persistentStore';
|
|
14
19
|
import {
|
|
15
20
|
clearWaitForDevice,
|
|
16
21
|
clearWaitForDeviceTimeout,
|
|
@@ -161,6 +166,36 @@ const removeDeviceFromList =
|
|
|
161
166
|
* library for available traits. Whenever devices are attached/detached, this
|
|
162
167
|
* will dispatch AddDevice or removeDevice and trigger events.
|
|
163
168
|
*/
|
|
169
|
+
|
|
170
|
+
const setPersistedData = (device: Device) => {
|
|
171
|
+
if (device.serialNumber) {
|
|
172
|
+
const newDevice = { ...device };
|
|
173
|
+
newDevice.favorite = getPersistedIsFavorite(device.serialNumber);
|
|
174
|
+
newDevice.nickname = getPersistedNickname(device.serialNumber);
|
|
175
|
+
|
|
176
|
+
const persistedSerialPortSettings = getPersistedSerialPortSettings(
|
|
177
|
+
device.serialNumber
|
|
178
|
+
);
|
|
179
|
+
|
|
180
|
+
if (persistedSerialPortSettings) {
|
|
181
|
+
const path =
|
|
182
|
+
newDevice.serialPorts?.[persistedSerialPortSettings.vComIndex]
|
|
183
|
+
?.comName;
|
|
184
|
+
|
|
185
|
+
if (path) {
|
|
186
|
+
newDevice.persistedSerialPortOptions = {
|
|
187
|
+
...persistedSerialPortSettings.serialPortOptions,
|
|
188
|
+
path,
|
|
189
|
+
};
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
return newDevice;
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
return device;
|
|
197
|
+
};
|
|
198
|
+
|
|
164
199
|
export const startWatchingDevices =
|
|
165
200
|
(
|
|
166
201
|
deviceListing: DeviceTraits,
|
|
@@ -231,7 +266,7 @@ export const startWatchingDevices =
|
|
|
231
266
|
);
|
|
232
267
|
|
|
233
268
|
logger.info(
|
|
234
|
-
`Auto
|
|
269
|
+
`Auto-reconnecting to device with the serial number: ${deviceWithPersistedData.serialNumber}`
|
|
235
270
|
);
|
|
236
271
|
doSelectDevice(deviceWithPersistedData, true);
|
|
237
272
|
dispatch(setSelectedDeviceInfo(deviceInfo));
|
|
@@ -290,7 +325,7 @@ export const startWatchingDevices =
|
|
|
290
325
|
);
|
|
291
326
|
dispatch(setDisconnectedTime(undefined));
|
|
292
327
|
|
|
293
|
-
logger.info('Wait For Device was
|
|
328
|
+
logger.info('Wait For Device was successful');
|
|
294
329
|
|
|
295
330
|
dispatch(
|
|
296
331
|
clearWaitForDeviceTimeout(
|
|
@@ -404,13 +439,20 @@ export const startWatchingDevices =
|
|
|
404
439
|
const operation = await NrfutilDeviceLib.list(
|
|
405
440
|
deviceListing,
|
|
406
441
|
d => {
|
|
442
|
+
d = d.map(setPersistedData);
|
|
407
443
|
d.forEach(onDeviceArrived);
|
|
408
444
|
autoSelectDeviceCLI(d, doSelectDevice);
|
|
409
445
|
},
|
|
410
446
|
error => {
|
|
411
447
|
logger.error(error);
|
|
412
448
|
},
|
|
413
|
-
{
|
|
449
|
+
{
|
|
450
|
+
onDeviceArrived: d => {
|
|
451
|
+
d = setPersistedData(d);
|
|
452
|
+
onDeviceArrived(d);
|
|
453
|
+
},
|
|
454
|
+
onDeviceLeft,
|
|
455
|
+
}
|
|
414
456
|
);
|
|
415
457
|
|
|
416
458
|
stopNrfutilDevice = (callback?: () => void) => {
|
|
@@ -100,7 +100,7 @@ export const prepareDevice =
|
|
|
100
100
|
|
|
101
101
|
if (possibleFirmware.length === 0) {
|
|
102
102
|
logger.info(
|
|
103
|
-
`Connected to device with serial number
|
|
103
|
+
`Connected to device with the serial number ${device.serialNumber} ` +
|
|
104
104
|
`and family: ${device.devkit?.deviceFamily || 'Unknown'} `
|
|
105
105
|
);
|
|
106
106
|
if (deviceSetupConfig.allowCustomDevice) {
|
|
@@ -169,8 +169,8 @@ export const prepareDevice =
|
|
|
169
169
|
dispatch(
|
|
170
170
|
preventAppCloseUntilComplete(
|
|
171
171
|
{
|
|
172
|
-
message: `The device is being programmed.
|
|
173
|
-
Closing application right now might result in
|
|
172
|
+
message: `The device is being programmed.
|
|
173
|
+
Closing application right now might result in unknown behavior and might also brick the device.
|
|
174
174
|
Are you sure you want to continue?`,
|
|
175
175
|
},
|
|
176
176
|
task
|
|
@@ -217,7 +217,7 @@ export const prepareDevice =
|
|
|
217
217
|
},
|
|
218
218
|
message:
|
|
219
219
|
deviceSetupConfig.confirmMessage ??
|
|
220
|
-
'Device must be programmed
|
|
220
|
+
'Device must be programmed. Do you want to proceed?',
|
|
221
221
|
})
|
|
222
222
|
);
|
|
223
223
|
} else {
|
|
@@ -225,7 +225,7 @@ export const prepareDevice =
|
|
|
225
225
|
openDeviceSetupDialog({
|
|
226
226
|
message:
|
|
227
227
|
deviceSetupConfig.confirmMessage ??
|
|
228
|
-
'Device must be programmed
|
|
228
|
+
'Device must be programmed. Do you want to proceed?',
|
|
229
229
|
})
|
|
230
230
|
);
|
|
231
231
|
proceedAction(0);
|
|
@@ -279,7 +279,7 @@ export const setupDevice =
|
|
|
279
279
|
error => {
|
|
280
280
|
dispatch(closeDeviceSetupDialog());
|
|
281
281
|
logger.error(
|
|
282
|
-
`Error while setting up device ${device.serialNumber}`
|
|
282
|
+
`Error while setting up device with the serial number ${device.serialNumber}`
|
|
283
283
|
);
|
|
284
284
|
logger.error(describeError(error));
|
|
285
285
|
doDeselectDevice(getState().device.selectedDevice);
|
|
@@ -12,9 +12,6 @@ import { DeviceInfo } from '../../nrfutil/device';
|
|
|
12
12
|
import { NrfutilDevice } from '../../nrfutil/device/common';
|
|
13
13
|
import type { RootState } from '../store';
|
|
14
14
|
import {
|
|
15
|
-
getPersistedIsFavorite,
|
|
16
|
-
getPersistedNickname,
|
|
17
|
-
getPersistedSerialPortSettings,
|
|
18
15
|
persistIsFavorite,
|
|
19
16
|
persistNickname,
|
|
20
17
|
persistSerialPortSettings as persistSerialPortSettingsToStore,
|
|
@@ -69,35 +66,6 @@ const initialState: DeviceState = {
|
|
|
69
66
|
devices: [],
|
|
70
67
|
};
|
|
71
68
|
|
|
72
|
-
const setPersistedData = (device: Device) => {
|
|
73
|
-
if (device.serialNumber) {
|
|
74
|
-
const newDevice = { ...device };
|
|
75
|
-
newDevice.favorite = getPersistedIsFavorite(device.serialNumber);
|
|
76
|
-
newDevice.nickname = getPersistedNickname(device.serialNumber);
|
|
77
|
-
|
|
78
|
-
const persistedSerialPortSettings = getPersistedSerialPortSettings(
|
|
79
|
-
device.serialNumber
|
|
80
|
-
);
|
|
81
|
-
|
|
82
|
-
if (persistedSerialPortSettings) {
|
|
83
|
-
const path =
|
|
84
|
-
newDevice.serialPorts?.[persistedSerialPortSettings.vComIndex]
|
|
85
|
-
?.comName;
|
|
86
|
-
|
|
87
|
-
if (path) {
|
|
88
|
-
newDevice.persistedSerialPortOptions = {
|
|
89
|
-
...persistedSerialPortSettings.serialPortOptions,
|
|
90
|
-
path,
|
|
91
|
-
};
|
|
92
|
-
}
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
return newDevice;
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
return device;
|
|
99
|
-
};
|
|
100
|
-
|
|
101
69
|
const slice = createSlice({
|
|
102
70
|
name: 'device',
|
|
103
71
|
initialState,
|
|
@@ -130,12 +98,10 @@ const slice = createSlice({
|
|
|
130
98
|
item.serialNumber === action.payload.serialNumber ||
|
|
131
99
|
item.id === action.payload.id
|
|
132
100
|
);
|
|
133
|
-
|
|
134
|
-
const device = setPersistedData(action.payload);
|
|
135
101
|
if (index !== -1) {
|
|
136
|
-
state.devices[index] =
|
|
102
|
+
state.devices[index] = action.payload;
|
|
137
103
|
} else {
|
|
138
|
-
state.devices.push(
|
|
104
|
+
state.devices.push(action.payload);
|
|
139
105
|
}
|
|
140
106
|
},
|
|
141
107
|
|
|
@@ -30,7 +30,7 @@ const programDeviceWithFw =
|
|
|
30
30
|
) {
|
|
31
31
|
batch.recover('Application', {
|
|
32
32
|
onTaskBegin: () =>
|
|
33
|
-
logger.info(`Device protected
|
|
33
|
+
logger.info(`Device protected - recovering device`),
|
|
34
34
|
onTaskEnd: () => logger.info(`Finished recovering device.`),
|
|
35
35
|
onException: () =>
|
|
36
36
|
logger.error(`Failed to recover device.`),
|
|
@@ -56,8 +56,8 @@ const programDeviceWithFw =
|
|
|
56
56
|
});
|
|
57
57
|
|
|
58
58
|
batch.reset('Application', undefined, {
|
|
59
|
-
onTaskBegin: () => logger.info(`
|
|
60
|
-
onTaskEnd: () => logger.info(`Finished
|
|
59
|
+
onTaskBegin: () => logger.info(`Resetting device`),
|
|
60
|
+
onTaskEnd: () => logger.info(`Finished resetting device.`),
|
|
61
61
|
onException: () => logger.error(`Failed to reset device.`),
|
|
62
62
|
onProgress: progress => {
|
|
63
63
|
onProgress(
|
|
@@ -61,10 +61,10 @@ export const isDeviceInDFUBootloader = (device: Device) => {
|
|
|
61
61
|
|
|
62
62
|
export const ensureBootloaderMode = (device: Device) => {
|
|
63
63
|
if (isDeviceInDFUBootloader(device)) {
|
|
64
|
-
logger.debug('Device is in bootloader mode');
|
|
64
|
+
logger.debug('Device is in the bootloader mode');
|
|
65
65
|
return true;
|
|
66
66
|
}
|
|
67
|
-
logger.debug('Device is NOT in bootloader mode');
|
|
67
|
+
logger.debug('Device is NOT in the bootloader mode');
|
|
68
68
|
return false;
|
|
69
69
|
};
|
|
70
70
|
|
|
@@ -92,13 +92,13 @@ const updateBootloader =
|
|
|
92
92
|
onProgress: (progress: number, message?: string) => void
|
|
93
93
|
): AppThunk =>
|
|
94
94
|
async dispatch => {
|
|
95
|
-
logger.info(`Update
|
|
95
|
+
logger.info(`Update bootloader ${device}`);
|
|
96
96
|
const zip = new AdmZip(getAppFile(LATEST_BOOTLOADER));
|
|
97
97
|
const zipBuffer = zip.toBuffer();
|
|
98
98
|
|
|
99
|
-
logger.debug('Starting
|
|
99
|
+
logger.debug('Starting bootloader update');
|
|
100
100
|
|
|
101
|
-
onProgress(0, 'Updating
|
|
101
|
+
onProgress(0, 'Updating bootloader');
|
|
102
102
|
|
|
103
103
|
dispatch(
|
|
104
104
|
setWaitForDevice({
|
|
@@ -192,7 +192,9 @@ export const switchToBootloaderMode =
|
|
|
192
192
|
d => {
|
|
193
193
|
if (!isDeviceInDFUBootloader(d))
|
|
194
194
|
onFail(
|
|
195
|
-
new Error(
|
|
195
|
+
new Error(
|
|
196
|
+
'Failed to switch to the bootloader mode'
|
|
197
|
+
)
|
|
196
198
|
);
|
|
197
199
|
else onSuccess(d);
|
|
198
200
|
},
|
|
@@ -221,7 +223,7 @@ export const switchToApplicationMode =
|
|
|
221
223
|
if (isDeviceInDFUBootloader(d))
|
|
222
224
|
onFail(
|
|
223
225
|
new Error(
|
|
224
|
-
'Failed to switch to
|
|
226
|
+
'Failed to switch to the application mode'
|
|
225
227
|
)
|
|
226
228
|
);
|
|
227
229
|
else onSuccess(d);
|
|
@@ -296,7 +298,7 @@ const askAndUpdateBootloader =
|
|
|
296
298
|
}
|
|
297
299
|
},
|
|
298
300
|
message:
|
|
299
|
-
'Device will be programmed. A
|
|
301
|
+
'Device will be programmed. A newer version of the bootloader is available. Do you want to update it as well?',
|
|
300
302
|
})
|
|
301
303
|
);
|
|
302
304
|
} else {
|
|
@@ -500,7 +502,7 @@ const programInDFUBootloader =
|
|
|
500
502
|
)
|
|
501
503
|
.then(() => {
|
|
502
504
|
logger.info(
|
|
503
|
-
'All
|
|
505
|
+
'All DFU images have been written to the target device.'
|
|
504
506
|
);
|
|
505
507
|
logger.debug('DFU completed successfully!');
|
|
506
508
|
dispatch(
|
|
@@ -512,7 +514,7 @@ const programInDFUBootloader =
|
|
|
512
514
|
onFail,
|
|
513
515
|
})
|
|
514
516
|
);
|
|
515
|
-
onProgress(100, 'Waiting for device to reboot');
|
|
517
|
+
onProgress(100, 'Waiting for device to reboot.');
|
|
516
518
|
})
|
|
517
519
|
.catch(err => {
|
|
518
520
|
if (err) {
|
|
@@ -581,7 +583,7 @@ export const sdfuDeviceSetup = (
|
|
|
581
583
|
isExpectedFirmware: (device, deviceInfo) => () => {
|
|
582
584
|
if (deviceInfo?.dfuTriggerVersion) {
|
|
583
585
|
logger.debug(
|
|
584
|
-
'Device has DFU trigger interface
|
|
586
|
+
'Device has DFU trigger interface; the device is in the application mode'
|
|
585
587
|
);
|
|
586
588
|
|
|
587
589
|
const { semVer } = deviceInfo.dfuTriggerVersion;
|
package/src/Log/logSlice.ts
CHANGED
|
@@ -4,8 +4,8 @@
|
|
|
4
4
|
* SPDX-License-Identifier: LicenseRef-Nordic-4-Clause
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
|
+
import { Terminal } from '@xterm/headless';
|
|
7
8
|
import EventEmitter from 'events';
|
|
8
|
-
import { Terminal } from 'xterm-headless';
|
|
9
9
|
|
|
10
10
|
import logger from '../logging';
|
|
11
11
|
import { SerialPort } from '../SerialPort/SerialPort';
|
|
@@ -71,7 +71,7 @@ const ConflictingSettingsDialog = ({
|
|
|
71
71
|
onCancel();
|
|
72
72
|
} else {
|
|
73
73
|
console.error(
|
|
74
|
-
'Port could not be opened. Verify it is not used by
|
|
74
|
+
'Port could not be opened. Verify it is not used by other applications.'
|
|
75
75
|
);
|
|
76
76
|
}
|
|
77
77
|
}
|
|
@@ -180,7 +180,7 @@ const DisplayConflictingSettings = ({
|
|
|
180
180
|
))}
|
|
181
181
|
</ul>
|
|
182
182
|
) : (
|
|
183
|
-
<p>Could not retrieve the current settings
|
|
183
|
+
<p>Could not retrieve the current settings.</p>
|
|
184
184
|
)}
|
|
185
185
|
</div>
|
|
186
186
|
<div className="tw-pr-7">
|
package/src/logging/index.ts
CHANGED
|
@@ -90,7 +90,7 @@ logger.openLogFile = () => {
|
|
|
90
90
|
try {
|
|
91
91
|
openFile(logFilePath());
|
|
92
92
|
} catch (error) {
|
|
93
|
-
logger.logError('Unable to open log file', error);
|
|
93
|
+
logger.logError('Unable to open the log file', error);
|
|
94
94
|
}
|
|
95
95
|
};
|
|
96
96
|
|
|
@@ -98,7 +98,7 @@ logger.openLogFileLocation = () => {
|
|
|
98
98
|
try {
|
|
99
99
|
openFileLocation(logFilePath());
|
|
100
100
|
} catch (error) {
|
|
101
|
-
logger.logError('Unable to open log file location', error);
|
|
101
|
+
logger.logError('Unable to open the log file location', error);
|
|
102
102
|
}
|
|
103
103
|
};
|
|
104
104
|
|
|
@@ -84,7 +84,7 @@ export const getPersistedSerialPortSettings = (
|
|
|
84
84
|
): SerialSettings | undefined => {
|
|
85
85
|
const appName = packageJson().name;
|
|
86
86
|
logger.info(
|
|
87
|
-
`Getting
|
|
87
|
+
`Getting serial port options from the persistent store for ${serialNumber}.${appName}`
|
|
88
88
|
);
|
|
89
89
|
return sharedStore.get(`${serialNumber}.${appName}`);
|
|
90
90
|
};
|
|
@@ -106,7 +106,7 @@ export const getPersistedTerminalSettings = (
|
|
|
106
106
|
): TerminalSettings | undefined => {
|
|
107
107
|
if (device.serialNumber) {
|
|
108
108
|
logger.info(
|
|
109
|
-
`Get terminal settings from persistent store ${device.serialNumber}.vCom-${vComIndex}.TerminalSettings`
|
|
109
|
+
`Get terminal settings from the persistent store for ${device.serialNumber}.vCom-${vComIndex}.TerminalSettings`
|
|
110
110
|
);
|
|
111
111
|
return sharedStore.get(
|
|
112
112
|
`${device.serialNumber}.vCom-${vComIndex}.TerminalSettings`
|
|
@@ -83,7 +83,7 @@ const generalInfoReport = async () => {
|
|
|
83
83
|
` - nrfjprog DLL: ${describeVersion(
|
|
84
84
|
resolveModuleVersion('jprog', dependencies)
|
|
85
85
|
)}`,
|
|
86
|
-
` -
|
|
86
|
+
` - SEGGER J-Link: ${describeVersion(
|
|
87
87
|
resolveModuleVersion('JlinkARM', dependencies)
|
|
88
88
|
)}`,
|
|
89
89
|
'',
|
|
@@ -20,10 +20,13 @@ export declare const parsePackageJson: (content: string) => z.SafeParseSuccess<{
|
|
|
20
20
|
}> | {
|
|
21
21
|
error: import("zod-validation-error").ValidationError;
|
|
22
22
|
success: false;
|
|
23
|
+
data?: undefined;
|
|
23
24
|
};
|
|
24
|
-
declare const packageJsonApp: z.ZodObject<{
|
|
25
|
+
declare const packageJsonApp: z.ZodObject<z.objectUtil.extendShape<{
|
|
25
26
|
name: z.ZodString;
|
|
26
27
|
version: z.ZodString;
|
|
28
|
+
displayName: z.ZodOptional<z.ZodString>;
|
|
29
|
+
}, {
|
|
27
30
|
dependencies: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodOptional<z.ZodString>>>;
|
|
28
31
|
description: z.ZodString;
|
|
29
32
|
homepage: z.ZodOptional<z.ZodString>;
|
|
@@ -61,7 +64,7 @@ declare const packageJsonApp: z.ZodObject<{
|
|
|
61
64
|
type: string;
|
|
62
65
|
url: string;
|
|
63
66
|
}>>;
|
|
64
|
-
}
|
|
67
|
+
}>, "strip", z.ZodTypeAny, {
|
|
65
68
|
name: string;
|
|
66
69
|
version: string;
|
|
67
70
|
displayName: string;
|
|
@@ -132,15 +135,18 @@ export declare const parsePackageJsonApp: (content: string) => z.SafeParseSucces
|
|
|
132
135
|
}> | {
|
|
133
136
|
error: import("zod-validation-error").ValidationError;
|
|
134
137
|
success: false;
|
|
138
|
+
data?: undefined;
|
|
135
139
|
};
|
|
136
|
-
declare const packageJsonLegacyApp: z.ZodObject<{
|
|
140
|
+
declare const packageJsonLegacyApp: z.ZodObject<z.objectUtil.extendShape<z.objectUtil.extendShape<{
|
|
137
141
|
name: z.ZodString;
|
|
138
142
|
version: z.ZodString;
|
|
139
|
-
displayName: z.ZodString
|
|
143
|
+
displayName: z.ZodOptional<z.ZodString>;
|
|
144
|
+
}, {
|
|
140
145
|
dependencies: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodOptional<z.ZodString>>>;
|
|
141
146
|
description: z.ZodString;
|
|
142
147
|
homepage: z.ZodOptional<z.ZodString>;
|
|
143
148
|
devDependencies: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodOptional<z.ZodString>>>;
|
|
149
|
+
displayName: z.ZodString;
|
|
144
150
|
engines: z.ZodIntersection<z.ZodRecord<z.ZodString, z.ZodOptional<z.ZodString>>, z.ZodObject<{
|
|
145
151
|
nrfconnect: z.ZodString;
|
|
146
152
|
}, "strip", z.ZodTypeAny, {
|
|
@@ -148,6 +154,19 @@ declare const packageJsonLegacyApp: z.ZodObject<{
|
|
|
148
154
|
}, {
|
|
149
155
|
nrfconnect: string;
|
|
150
156
|
}>>;
|
|
157
|
+
nrfConnectForDesktop: z.ZodObject<{
|
|
158
|
+
supportedDevices: z.ZodOptional<z.ZodArray<z.ZodEnum<["PCA10028", "PCA10031", "PCA10040", "PCA10056", "PCA10059", "PCA10090", "PCA10095", "PCA10100", "PCA10121", "PCA20020", "PCA20035", "PCA10143", "PCA10152", "PCA10153", "PCA10165", "PCA20049", "PCA10171", "PCA10156", "PCA10175"]>, "atleastone">>;
|
|
159
|
+
nrfutil: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodArray<z.ZodString, "atleastone">>>;
|
|
160
|
+
html: z.ZodString;
|
|
161
|
+
}, "strip", z.ZodTypeAny, {
|
|
162
|
+
html: string;
|
|
163
|
+
supportedDevices?: ["PCA10028" | "PCA10031" | "PCA10040" | "PCA10056" | "PCA10059" | "PCA10090" | "PCA10095" | "PCA10100" | "PCA10121" | "PCA20020" | "PCA20035" | "PCA10143" | "PCA10152" | "PCA10153" | "PCA10165" | "PCA20049" | "PCA10171" | "PCA10156" | "PCA10175", ...("PCA10028" | "PCA10031" | "PCA10040" | "PCA10056" | "PCA10059" | "PCA10090" | "PCA10095" | "PCA10100" | "PCA10121" | "PCA20020" | "PCA20035" | "PCA10143" | "PCA10152" | "PCA10153" | "PCA10165" | "PCA20049" | "PCA10171" | "PCA10156" | "PCA10175")[]] | undefined;
|
|
164
|
+
nrfutil?: Record<string, [string, ...string[]]> | undefined;
|
|
165
|
+
}, {
|
|
166
|
+
html: string;
|
|
167
|
+
supportedDevices?: ["PCA10028" | "PCA10031" | "PCA10040" | "PCA10056" | "PCA10059" | "PCA10090" | "PCA10095" | "PCA10100" | "PCA10121" | "PCA20020" | "PCA20035" | "PCA10143" | "PCA10152" | "PCA10153" | "PCA10165" | "PCA20049" | "PCA10171" | "PCA10156" | "PCA10175", ...("PCA10028" | "PCA10031" | "PCA10040" | "PCA10056" | "PCA10059" | "PCA10090" | "PCA10095" | "PCA10100" | "PCA10121" | "PCA20020" | "PCA20035" | "PCA10143" | "PCA10152" | "PCA10153" | "PCA10165" | "PCA20049" | "PCA10171" | "PCA10156" | "PCA10175")[]] | undefined;
|
|
168
|
+
nrfutil?: Record<string, [string, ...string[]]> | undefined;
|
|
169
|
+
}>;
|
|
151
170
|
files: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
|
|
152
171
|
peerDependencies: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodOptional<z.ZodString>>>;
|
|
153
172
|
repository: z.ZodOptional<z.ZodObject<{
|
|
@@ -160,6 +179,7 @@ declare const packageJsonLegacyApp: z.ZodObject<{
|
|
|
160
179
|
type: string;
|
|
161
180
|
url: string;
|
|
162
181
|
}>>;
|
|
182
|
+
}>, {
|
|
163
183
|
nrfConnectForDesktop: z.ZodOptional<z.ZodObject<{
|
|
164
184
|
supportedDevices: z.ZodOptional<z.ZodArray<z.ZodString, "atleastone">>;
|
|
165
185
|
nrfutil: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodArray<z.ZodString, "atleastone">>>;
|
|
@@ -173,7 +193,7 @@ declare const packageJsonLegacyApp: z.ZodObject<{
|
|
|
173
193
|
nrfutil?: Record<string, [string, ...string[]]> | undefined;
|
|
174
194
|
html?: string | undefined;
|
|
175
195
|
}>>;
|
|
176
|
-
}
|
|
196
|
+
}>, "strip", z.ZodTypeAny, {
|
|
177
197
|
name: string;
|
|
178
198
|
version: string;
|
|
179
199
|
displayName: string;
|
|
@@ -184,17 +204,17 @@ declare const packageJsonLegacyApp: z.ZodObject<{
|
|
|
184
204
|
dependencies?: Record<string, string | undefined> | undefined;
|
|
185
205
|
homepage?: string | undefined;
|
|
186
206
|
devDependencies?: Record<string, string | undefined> | undefined;
|
|
207
|
+
nrfConnectForDesktop?: {
|
|
208
|
+
supportedDevices?: [string, ...string[]] | undefined;
|
|
209
|
+
nrfutil?: Record<string, [string, ...string[]]> | undefined;
|
|
210
|
+
html?: string | undefined;
|
|
211
|
+
} | undefined;
|
|
187
212
|
files?: string[] | undefined;
|
|
188
213
|
peerDependencies?: Record<string, string | undefined> | undefined;
|
|
189
214
|
repository?: {
|
|
190
215
|
type: string;
|
|
191
216
|
url: string;
|
|
192
217
|
} | undefined;
|
|
193
|
-
nrfConnectForDesktop?: {
|
|
194
|
-
supportedDevices?: [string, ...string[]] | undefined;
|
|
195
|
-
nrfutil?: Record<string, [string, ...string[]]> | undefined;
|
|
196
|
-
html?: string | undefined;
|
|
197
|
-
} | undefined;
|
|
198
218
|
}, {
|
|
199
219
|
name: string;
|
|
200
220
|
version: string;
|
|
@@ -206,17 +226,17 @@ declare const packageJsonLegacyApp: z.ZodObject<{
|
|
|
206
226
|
dependencies?: Record<string, string | undefined> | undefined;
|
|
207
227
|
homepage?: string | undefined;
|
|
208
228
|
devDependencies?: Record<string, string | undefined> | undefined;
|
|
229
|
+
nrfConnectForDesktop?: {
|
|
230
|
+
supportedDevices?: [string, ...string[]] | undefined;
|
|
231
|
+
nrfutil?: Record<string, [string, ...string[]]> | undefined;
|
|
232
|
+
html?: string | undefined;
|
|
233
|
+
} | undefined;
|
|
209
234
|
files?: string[] | undefined;
|
|
210
235
|
peerDependencies?: Record<string, string | undefined> | undefined;
|
|
211
236
|
repository?: {
|
|
212
237
|
type: string;
|
|
213
238
|
url: string;
|
|
214
239
|
} | undefined;
|
|
215
|
-
nrfConnectForDesktop?: {
|
|
216
|
-
supportedDevices?: [string, ...string[]] | undefined;
|
|
217
|
-
nrfutil?: Record<string, [string, ...string[]]> | undefined;
|
|
218
|
-
html?: string | undefined;
|
|
219
|
-
} | undefined;
|
|
220
240
|
}>;
|
|
221
241
|
export type PackageJsonLegacyApp = z.infer<typeof packageJsonLegacyApp>;
|
|
222
242
|
export declare const parsePackageJsonLegacyApp: (content: string) => z.SafeParseSuccess<{
|
|
@@ -230,20 +250,21 @@ export declare const parsePackageJsonLegacyApp: (content: string) => z.SafeParse
|
|
|
230
250
|
dependencies?: Record<string, string | undefined> | undefined;
|
|
231
251
|
homepage?: string | undefined;
|
|
232
252
|
devDependencies?: Record<string, string | undefined> | undefined;
|
|
253
|
+
nrfConnectForDesktop?: {
|
|
254
|
+
supportedDevices?: [string, ...string[]] | undefined;
|
|
255
|
+
nrfutil?: Record<string, [string, ...string[]]> | undefined;
|
|
256
|
+
html?: string | undefined;
|
|
257
|
+
} | undefined;
|
|
233
258
|
files?: string[] | undefined;
|
|
234
259
|
peerDependencies?: Record<string, string | undefined> | undefined;
|
|
235
260
|
repository?: {
|
|
236
261
|
type: string;
|
|
237
262
|
url: string;
|
|
238
263
|
} | undefined;
|
|
239
|
-
nrfConnectForDesktop?: {
|
|
240
|
-
supportedDevices?: [string, ...string[]] | undefined;
|
|
241
|
-
nrfutil?: Record<string, [string, ...string[]]> | undefined;
|
|
242
|
-
html?: string | undefined;
|
|
243
|
-
} | undefined;
|
|
244
264
|
}> | {
|
|
245
265
|
error: import("zod-validation-error").ValidationError;
|
|
246
266
|
success: false;
|
|
267
|
+
data?: undefined;
|
|
247
268
|
};
|
|
248
269
|
export {};
|
|
249
270
|
//# sourceMappingURL=packageJson.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"packageJson.d.ts","sourceRoot":"","sources":["../../../../ipc/schema/packageJson.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAMxB,QAAA,MAAM,WAAW;;;;;;;;;;;;EAKf,CAAC;AAEH,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,WAAW,CAAC,CAAC;AAEtD,eAAO,MAAM,gBAAgB
|
|
1
|
+
{"version":3,"file":"packageJson.d.ts","sourceRoot":"","sources":["../../../../ipc/schema/packageJson.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAMxB,QAAA,MAAM,WAAW;;;;;;;;;;;;EAKf,CAAC;AAEH,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,WAAW,CAAC,CAAC;AAEtD,eAAO,MAAM,gBAAgB;;;;;;;;CACgC,CAAC;AAgB9D,QAAA,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAgBlB,CAAC;AAEH,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,cAAc,CAAC,CAAC;AAE5D,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;CACmC,CAAC;AAIpE,QAAA,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAKxB,CAAC;AAEH,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAExE,eAAO,MAAM,yBAAyB;;;;;;;;;;;;;;;;;;;;;;;;;;CACyC,CAAC"}
|
|
@@ -2,5 +2,6 @@ import { z } from 'zod';
|
|
|
2
2
|
export declare const parseWithPrettifiedErrorMessage: <Out, T extends z.ZodType<Out, z.ZodTypeDef, Out> = z.ZodTypeAny>(schema: T) => (content: string) => z.SafeParseSuccess<Out> | {
|
|
3
3
|
error: import("zod-validation-error").ValidationError;
|
|
4
4
|
success: false;
|
|
5
|
+
data?: undefined;
|
|
5
6
|
};
|
|
6
7
|
//# sourceMappingURL=parseJson.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parseJson.d.ts","sourceRoot":"","sources":["../../../../ipc/schema/parseJson.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,eAAO,MAAM,+BAA+B,4FAE9B,MAAM
|
|
1
|
+
{"version":3,"file":"parseJson.d.ts","sourceRoot":"","sources":["../../../../ipc/schema/parseJson.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,eAAO,MAAM,+BAA+B,4FAE9B,MAAM;;;;CAef,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sandbox.d.ts","sourceRoot":"","sources":["../../../nrfutil/sandbox.ts"],"names":[],"mappings":";AAiBA,OAAO,EACH,cAAc,EACd,QAAQ,EACR,UAAU,EACV,aAAa,EAGb,QAAQ,EACR,IAAI,EACJ,SAAS,EACT,OAAO,EACV,MAAM,gBAAgB,CAAC;AAmBxB,QAAA,MAAM,UAAU,YAAa,MAAM,UAAU,MAAM,WAAW,MAAM;;;;;;;;;;;CA0BnE,CAAC;AAiDF,qBAAa,cAAc;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,iBAAiB,EAAE,CAAC,CAAC,OAAO,EAAE,UAAU,EAAE,GAAG,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC,EAAE,CAAM;IACxE,QAAQ,EAAE,QAAQ,CAAmC;IACrD,GAAG,EAAE,UAAU,CAAC,OAAO,UAAU,CAAC,CAAC;gBAEvB,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;IAQ5D,OAAO,CAAC,kBAAkB,CASxB;IAEK,gBAAgB,+BAUrB;IAEK,cAAc,+BAQnB;IAEK,kBAAkB,yBAmBvB;IAEK,cAAc,4BACO,QAAQ,SAAS,IAAI,KAAK,IAAI,gCAiCxD;IAEK,iBAAiB,4BACI,QAAQ,SAAS,IAAI,KAAK,IAAI,
|
|
1
|
+
{"version":3,"file":"sandbox.d.ts","sourceRoot":"","sources":["../../../nrfutil/sandbox.ts"],"names":[],"mappings":";AAiBA,OAAO,EACH,cAAc,EACd,QAAQ,EACR,UAAU,EACV,aAAa,EAGb,QAAQ,EACR,IAAI,EACJ,SAAS,EACT,OAAO,EACV,MAAM,gBAAgB,CAAC;AAmBxB,QAAA,MAAM,UAAU,YAAa,MAAM,UAAU,MAAM,WAAW,MAAM;;;;;;;;;;;CA0BnE,CAAC;AAiDF,qBAAa,cAAc;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,iBAAiB,EAAE,CAAC,CAAC,OAAO,EAAE,UAAU,EAAE,GAAG,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC,EAAE,CAAM;IACxE,QAAQ,EAAE,QAAQ,CAAmC;IACrD,GAAG,EAAE,UAAU,CAAC,OAAO,UAAU,CAAC,CAAC;gBAEvB,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;IAQ5D,OAAO,CAAC,kBAAkB,CASxB;IAEK,gBAAgB,+BAUrB;IAEK,cAAc,+BAQnB;IAEK,kBAAkB,yBAmBvB;IAEK,cAAc,4BACO,QAAQ,SAAS,IAAI,KAAK,IAAI,gCAiCxD;IAEK,iBAAiB,4BACI,QAAQ,SAAS,IAAI,KAAK,IAAI,gCAUxD;IAEK,iBAAiB,eAA4C;IAE7D,sBAAsB,oBAChB,MAAM,QACT,MAAM,EAAE,2BACU,QAAQ,SAAS,IAAI,KAAK,IAAI,0CAC5B,SAAS,KAAK,IAAI,0DACF,IAAI,4BACjC,eAAe,mBACZ,OAAO,UAAU,KAAK,OAAO,UAAU;;;OAUrD;IAEN,OAAO,CAAC,mBAAmB,CAsBrB;IAEN,OAAO,CAAC,YAAY,CAmFlB;IAEK,YAAY,YACN,MAAM,QACT,MAAM,EAAE,iBACC,MAAM,QAAQ,MAAM,KAAK,MAAM,GAAG,SAAS,qBACvC,MAAM,QAAQ,MAAM,KAAK,IAAI,eACnC,eAAe,kBACb,OAAO,UAAU,KAAK,OAAO,UAAU,mBA0EnD;IAEA,qBAAqB,oBACf,MAAM,QACT,MAAM,EAAE,2BACU,QAAQ,SAAS,IAAI,KAAK,IAAI,0CAC5B,SAAS,KAAK,IAAI,0DACF,IAAI,4BACjC,eAAe,mBACZ,OAAO,UAAU,KAAK,OAAO,UAAU;;;OAUrD;IAEN,OAAO,CAAC,kBAAkB,CAmFxB;IAEK,WAAW,YACL,MAAM,QACT,MAAM,EAAE,iBACC,MAAM,QAAQ,MAAM,KAAK,IAAI,qBACzB,MAAM,QAAQ,MAAM,KAAK,IAAI,eACnC,eAAe,kBACb,OAAO,UAAU,KAAK,OAAO,UAAU,mBA0DnD;IAEA,yBAAyB,oBACnB,MAAM,QACT,MAAM,EAAE,uDAEE,OAAO,UAAU,KAAK,OAAO,UAAU;yBA4ClC,MAAM,IAAI;;qCAKE,KAAK,KAAK,IAAI,qBA7Cf,KAAK,KAAK,IAAI;MAoDhD;IAEK,8BAA8B,eACxB,MAAM,2BACS,QAAQ,SAAS,IAAI,KAAK,IAAI,4BACzC,eAAe,SACtB,MAAM,EAAE,sCAahB;IAEK,kCAAkC,sBAC5B,MAAM,2BACS,QAAQ,SAAS,IAAI,KAAK,IAAI,4BACzC,eAAe,SACtB,MAAM,EAAE,gBAehB;IAEK,+BAA+B,sBACzB,MAAM,eACF,eAAe,SACtB,MAAM,EAAE,gBAehB;IAEK,SAAS,sBACO,UAAU,QAAQ,MAAM,KAAK,IAAI,sBA5mB1B,UAAU,QAAQ,MAAM,KAAK,IAAI,IAqnB7D;IAEK,WAAW,UAAW,QAAQ,UAEnC;CACL;kCAGY,MAAM,UACP,MAAM,YACJ,MAAM,2BACQ,QAAQ,SAAS,IAAI,KAAK,IAAI;AAJ1D,wBAwBE"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"deviceLister.d.ts","sourceRoot":"","sources":["../../../../src/Device/deviceLister.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,YAAY,EAAiB,MAAM,6BAA6B,CAAC;AAG1E,OAAO,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"deviceLister.d.ts","sourceRoot":"","sources":["../../../../src/Device/deviceLister.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,YAAY,EAAiB,MAAM,6BAA6B,CAAC;AAG1E,OAAO,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAmBpD,OAAO,EAEH,MAAM,EAIT,MAAM,eAAe,CAAC;AAsDvB,eAAO,MAAM,QAAQ,WAAY,MAAM,eAAe,UAAU,YAI3D,CAAC;AA8BN,eAAO,MAAM,oBAAoB,iBACf,YAAY,kBACV,YAAY,YAS3B,CAAC;AAgEN,eAAO,MAAM,oBAAoB,kBAEV,YAAY,8BACC,MAAM,KAAK,IAAI,iCACZ,MAAM,KAAK,IAAI,sBAC1B,MAAM,IAAI,2BACL,MAAM,kBAAkB,OAAO,KAAK,IAAI,KAClE,SAAS,SAAS,EAAE,IAAI,CAkQ1B,CAAC;AAqDN,eAAO,MAAM,mBAAmB,cAAe,MAAM,IAAI,SAGxD,CAAC"}
|