@nordicsemiconductor/pc-nrfconnect-shared 221.0.0 → 223.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 +14 -0
- package/README.md +30 -21
- package/ipc/apps.ts +3 -12
- package/ipc/sources.ts +0 -5
- package/package.json +1 -1
- package/release_notes.md +4 -9
- package/scripts/is-releasable.ts +1 -1
- package/scripts/latest-changelog-entry.test.ts +4 -4
- package/src/Device/DeviceSelector/DeviceSelector.test.tsx +11 -11
- package/src/Dialog/Dialog.test.tsx +9 -10
- package/src/Dropdown/Dropdown.test.tsx +3 -3
- package/src/Dropdown/DropdownHelpers.test.ts +20 -21
- package/src/ErrorBoundary/ErrorBoundary.test.tsx +4 -4
- package/src/ErrorDialog/ErrorDialog.test.tsx +3 -3
- package/src/ErrorDialog/errorDialogSlice.test.ts +5 -5
- package/src/FactoryReset/FactoryResetButton.test.tsx +23 -17
- package/src/Slider/Factor.test.ts +4 -4
- package/src/index.ts +0 -2
- package/src/logging/appTransport.test.ts +6 -6
- package/src/logging/logBuffer.test.ts +4 -4
- package/typings/generated/ipc/apps.d.ts +5 -11
- package/typings/generated/ipc/apps.d.ts.map +1 -1
- package/typings/generated/ipc/sources.d.ts +0 -7
- package/typings/generated/ipc/sources.d.ts.map +1 -1
- package/typings/generated/main/index.d.ts +1 -9
- package/typings/generated/main/index.d.ts.map +1 -1
- package/typings/generated/src/index.d.ts +1 -1
- package/typings/generated/src/index.d.ts.map +1 -1
package/Changelog.md
CHANGED
|
@@ -7,6 +7,20 @@ This project does _not_ adhere to
|
|
|
7
7
|
[Semantic Versioning](https://semver.org/spec/v2.0.0.html) but contrary to it
|
|
8
8
|
every new version is a new major version.
|
|
9
9
|
|
|
10
|
+
## 223.0.0 - 2025-07-28
|
|
11
|
+
|
|
12
|
+
### Changed
|
|
13
|
+
|
|
14
|
+
- Return value of `getDownloadableApps` has less fields now and some more
|
|
15
|
+
exports were removed, because they were only needed in the launcher and
|
|
16
|
+
having them in shared made changes harder in the launcher.
|
|
17
|
+
|
|
18
|
+
## 222.0.0 - 2025-07-23
|
|
19
|
+
|
|
20
|
+
### Added
|
|
21
|
+
|
|
22
|
+
- Automatic publishing of shared.
|
|
23
|
+
|
|
10
24
|
## 221.0.0 - 2025-07-21
|
|
11
25
|
|
|
12
26
|
### Added
|
package/README.md
CHANGED
|
@@ -1,7 +1,5 @@
|
|
|
1
1
|
# Shared commodities for developing nRF Connect for Desktop
|
|
2
2
|
|
|
3
|
-
[](https://dev.azure.com/NordicSemiconductor/Wayland/_build/latest?definitionId=31&branchName=master)
|
|
4
|
-
|
|
5
3
|
This project provides shared commodities for developing nRF Connect for Desktop
|
|
6
4
|
apps and their launcher:
|
|
7
5
|
|
|
@@ -10,30 +8,41 @@ apps and their launcher:
|
|
|
10
8
|
- Configurations
|
|
11
9
|
- Test facilities
|
|
12
10
|
|
|
11
|
+
## Developing a new feature or fixing an error
|
|
12
|
+
|
|
13
|
+
Whenever something is changed in pc-nrfconnect-shared, an entry should be added
|
|
14
|
+
to `Changelog.md`.
|
|
15
|
+
|
|
16
|
+
If there is no latest entry there yet, and you do not intend to release the
|
|
17
|
+
change as a new version right ahead, add a new section with the heading
|
|
18
|
+
`## Unreleased` at the top.
|
|
19
|
+
|
|
13
20
|
## Releasing
|
|
14
21
|
|
|
15
|
-
|
|
16
|
-
|
|
22
|
+
To release, two files must be up-to-date:
|
|
23
|
+
|
|
24
|
+
- `package.json` contain the correct version number (one more than the last
|
|
25
|
+
release).
|
|
26
|
+
- `Changelog.md` must contain an entry, with that version number and today's
|
|
27
|
+
date.
|
|
17
28
|
|
|
18
|
-
|
|
29
|
+
By running `npm run prepare-shared-release` you update the version in
|
|
30
|
+
`package.json` and in `Changelog.md` a potential `## Unreleased` heading is
|
|
31
|
+
updated to the right version and today‘s date.
|
|
19
32
|
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
`## X.0.0 - YYYY-MM-DD`.
|
|
23
|
-
- Commit and push your changes
|
|
33
|
+
When those conditions are met, a new release of shared will automatically be
|
|
34
|
+
created when the according PR is merged into main.
|
|
24
35
|
|
|
25
|
-
|
|
36
|
+
## Unpublishing a version
|
|
26
37
|
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
action.
|
|
30
|
-
- Click "Run workflow".
|
|
31
|
-
- Optionally select a ref to release, but usually this should be `main` and
|
|
32
|
-
can be left empty.
|
|
38
|
+
If you need to unpublish a specific version from npm (e.g., due to a critical
|
|
39
|
+
bug), you can use the "Unpublish npm version" GitHub Action:
|
|
33
40
|
|
|
34
|
-
|
|
41
|
+
1. Go to the
|
|
42
|
+
[Unpublish npm version GitHub Action](https://github.com/NordicSemiconductor/pc-nrfconnect-shared/actions/workflows/unpublish-npm-version.yml)
|
|
43
|
+
and run the workflow.
|
|
44
|
+
1. Enter the version to unpublish (e.g., `221.0.0`)
|
|
35
45
|
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
- Publish to npm.
|
|
46
|
+
**Warning:** Unpublishing a version from npm is irreversible and should only be
|
|
47
|
+
done in exceptional circumstances (e.g., security vulnerabilities, critical
|
|
48
|
+
bugs).
|
package/ipc/apps.ts
CHANGED
|
@@ -11,7 +11,7 @@ import type {
|
|
|
11
11
|
NrfutilModuleVersion,
|
|
12
12
|
UrlString,
|
|
13
13
|
} from './MetaFiles';
|
|
14
|
-
import { LOCAL,
|
|
14
|
+
import { LOCAL, SourceName } from './sources';
|
|
15
15
|
|
|
16
16
|
export interface AppSpec {
|
|
17
17
|
name: string;
|
|
@@ -75,18 +75,11 @@ export type LaunchableApp = LocalApp | InstalledDownloadableApp | WithdrawnApp;
|
|
|
75
75
|
|
|
76
76
|
export type App = LocalApp | DownloadableApp;
|
|
77
77
|
|
|
78
|
-
export
|
|
79
|
-
reason: unknown;
|
|
80
|
-
path: string;
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
const channel = {
|
|
78
|
+
export const channel = {
|
|
84
79
|
getDownloadableApps: 'apps:get-downloadable-apps',
|
|
85
80
|
installDownloadableApp: 'apps:install-downloadable-app',
|
|
86
81
|
};
|
|
87
82
|
|
|
88
|
-
export type SourceWithError = { source: Source; reason?: string };
|
|
89
|
-
|
|
90
83
|
export const isDownloadable = (app?: App): app is DownloadableApp =>
|
|
91
84
|
app != null && app?.source !== LOCAL;
|
|
92
85
|
|
|
@@ -115,10 +108,8 @@ export const isUpdatable = (app?: App): app is InstalledDownloadableApp =>
|
|
|
115
108
|
latestVersionHasDifferentChecksum(app));
|
|
116
109
|
|
|
117
110
|
// getDownloadableApps
|
|
118
|
-
type GetDownloadableAppsResult = {
|
|
111
|
+
export type GetDownloadableAppsResult = {
|
|
119
112
|
apps: DownloadableApp[];
|
|
120
|
-
appsWithErrors: AppWithError[];
|
|
121
|
-
sourcesWithErrors: SourceWithError[];
|
|
122
113
|
};
|
|
123
114
|
|
|
124
115
|
type GetDownloadableApps = () => GetDownloadableAppsResult;
|
package/ipc/sources.ts
CHANGED
|
@@ -4,16 +4,11 @@
|
|
|
4
4
|
* SPDX-License-Identifier: LicenseRef-Nordic-4-Clause
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
|
-
import { UrlString } from './MetaFiles';
|
|
8
|
-
|
|
9
7
|
enum StandardSourceNames {
|
|
10
8
|
OFFICIAL = 'official',
|
|
11
9
|
LOCAL = 'local',
|
|
12
10
|
}
|
|
13
11
|
|
|
14
12
|
export const { LOCAL, OFFICIAL } = StandardSourceNames;
|
|
15
|
-
export const allStandardSourceNames: SourceName[] = [OFFICIAL, LOCAL];
|
|
16
13
|
|
|
17
14
|
export type SourceName = string;
|
|
18
|
-
export type SourceUrl = UrlString;
|
|
19
|
-
export type Source = { name: SourceName; url: SourceUrl };
|
package/package.json
CHANGED
package/release_notes.md
CHANGED
|
@@ -1,10 +1,5 @@
|
|
|
1
|
-
###
|
|
1
|
+
### Changed
|
|
2
2
|
|
|
3
|
-
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
their range constraints.
|
|
7
|
-
|
|
8
|
-
### Fixed
|
|
9
|
-
|
|
10
|
-
- Running build scripts failed on Windows.
|
|
3
|
+
- Return value of `getDownloadableApps` has less fields now and some more
|
|
4
|
+
exports were removed, because they were only needed in the launcher and
|
|
5
|
+
having them in shared made changes harder in the launcher.
|
package/scripts/is-releasable.ts
CHANGED
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
import { getLatestEntry } from './latest-changelog-entry';
|
|
8
8
|
|
|
9
9
|
describe('getLatestEntry', () => {
|
|
10
|
-
it('
|
|
10
|
+
it('extracts the latest changelog entry', () => {
|
|
11
11
|
const changelog = `# Changelog
|
|
12
12
|
|
|
13
13
|
All notable changes to this project will be documented in this file.
|
|
@@ -29,7 +29,7 @@ All notable changes to this project will be documented in this file.
|
|
|
29
29
|
expect(result.content).toBe('### Changed\n\n- Something');
|
|
30
30
|
});
|
|
31
31
|
|
|
32
|
-
it('
|
|
32
|
+
it('handles changelog with only one entry', () => {
|
|
33
33
|
const changelog = `# Changelog
|
|
34
34
|
|
|
35
35
|
All notable changes to this project will be documented in this file.
|
|
@@ -46,7 +46,7 @@ All notable changes to this project will be documented in this file.
|
|
|
46
46
|
expect(result.content).toBe('### Added\n\n- Something else');
|
|
47
47
|
});
|
|
48
48
|
|
|
49
|
-
it('
|
|
49
|
+
it('handles changelog with empty content', () => {
|
|
50
50
|
const changelog = `# Changelog
|
|
51
51
|
|
|
52
52
|
All notable changes to this project will be documented in this file.
|
|
@@ -65,7 +65,7 @@ All notable changes to this project will be documented in this file.
|
|
|
65
65
|
expect(result.content).toBe('');
|
|
66
66
|
});
|
|
67
67
|
|
|
68
|
-
it('
|
|
68
|
+
it('handles changelog with nothing before the first entry', () => {
|
|
69
69
|
const changelog = `## 33.0.0 - 2022-02-01
|
|
70
70
|
|
|
71
71
|
### Added
|
|
@@ -105,7 +105,7 @@ const validFirmware = {
|
|
|
105
105
|
};
|
|
106
106
|
|
|
107
107
|
describe('DeviceSelector', () => {
|
|
108
|
-
it('
|
|
108
|
+
it('has no device selected by default', () => {
|
|
109
109
|
render(
|
|
110
110
|
<DeviceSelector
|
|
111
111
|
deviceListing={{
|
|
@@ -119,7 +119,7 @@ describe('DeviceSelector', () => {
|
|
|
119
119
|
expect(screen.getByText('Select device')).toBeInTheDocument();
|
|
120
120
|
});
|
|
121
121
|
|
|
122
|
-
it('
|
|
122
|
+
it('shows an information when no devices are connected', () => {
|
|
123
123
|
render(
|
|
124
124
|
<DeviceSelector
|
|
125
125
|
deviceListing={{
|
|
@@ -134,7 +134,7 @@ describe('DeviceSelector', () => {
|
|
|
134
134
|
expect(screen.getByText('Nordic development kit')).toBeInTheDocument();
|
|
135
135
|
});
|
|
136
136
|
|
|
137
|
-
it('
|
|
137
|
+
it('shows a list of connected devices', () => {
|
|
138
138
|
render(
|
|
139
139
|
<DeviceSelector
|
|
140
140
|
deviceListing={{
|
|
@@ -149,7 +149,7 @@ describe('DeviceSelector', () => {
|
|
|
149
149
|
expect(screen.getByText(DEVICE_SERIAL_NUMBER)).toBeInTheDocument();
|
|
150
150
|
});
|
|
151
151
|
|
|
152
|
-
it('
|
|
152
|
+
it('does not show disconnected devices', () => {
|
|
153
153
|
render(
|
|
154
154
|
<DeviceSelector
|
|
155
155
|
deviceListing={{
|
|
@@ -164,7 +164,7 @@ describe('DeviceSelector', () => {
|
|
|
164
164
|
expect(screen.queryByText(DEVICE_SERIAL_NUMBER)).toBeNull();
|
|
165
165
|
});
|
|
166
166
|
|
|
167
|
-
it('
|
|
167
|
+
it('shows more device info when selecting the expand button', () => {
|
|
168
168
|
render(
|
|
169
169
|
<DeviceSelector
|
|
170
170
|
deviceListing={{
|
|
@@ -181,7 +181,7 @@ describe('DeviceSelector', () => {
|
|
|
181
181
|
expect(screen.getAllByText(/COM/)).toHaveLength(2);
|
|
182
182
|
});
|
|
183
183
|
|
|
184
|
-
it('
|
|
184
|
+
it('allows selecting a device', async () => {
|
|
185
185
|
render(
|
|
186
186
|
<DeviceSelector
|
|
187
187
|
deviceListing={{
|
|
@@ -203,7 +203,7 @@ describe('DeviceSelector', () => {
|
|
|
203
203
|
expect(screen.getAllByText(DEVICE_SERIAL_NUMBER)).toHaveLength(2);
|
|
204
204
|
});
|
|
205
205
|
|
|
206
|
-
it('
|
|
206
|
+
it('allows disconnecting a device', async () => {
|
|
207
207
|
render(
|
|
208
208
|
<DeviceSelector
|
|
209
209
|
deviceListing={{
|
|
@@ -223,7 +223,7 @@ describe('DeviceSelector', () => {
|
|
|
223
223
|
expect(screen.getByText('Select device')).toBeInTheDocument();
|
|
224
224
|
});
|
|
225
225
|
|
|
226
|
-
it('
|
|
226
|
+
it('allows selecting a device when custom devices are enabled and no valid firmware is defined', async () => {
|
|
227
227
|
render(
|
|
228
228
|
<DeviceSelector
|
|
229
229
|
deviceListing={{
|
|
@@ -259,7 +259,7 @@ describe('DeviceSelector', () => {
|
|
|
259
259
|
expect(screen.getAllByText(DEVICE_SERIAL_NUMBER)).toHaveLength(2);
|
|
260
260
|
});
|
|
261
261
|
|
|
262
|
-
it('
|
|
262
|
+
it('allows deselecting a device when custom devices are disabled and no valid firmware is defined', async () => {
|
|
263
263
|
render(
|
|
264
264
|
<DeviceSelector
|
|
265
265
|
deviceListing={{
|
|
@@ -295,7 +295,7 @@ describe('DeviceSelector', () => {
|
|
|
295
295
|
await screen.findByText('Select device');
|
|
296
296
|
});
|
|
297
297
|
|
|
298
|
-
it('
|
|
298
|
+
it('shows firmware prompt when a valid firmware is defined', async () => {
|
|
299
299
|
render(
|
|
300
300
|
<DeviceSelector
|
|
301
301
|
deviceListing={{
|
|
@@ -317,7 +317,7 @@ describe('DeviceSelector', () => {
|
|
|
317
317
|
);
|
|
318
318
|
});
|
|
319
319
|
|
|
320
|
-
it('
|
|
320
|
+
it('selects a device when cancelling firmware prompt', async () => {
|
|
321
321
|
render(
|
|
322
322
|
<DeviceSelector
|
|
323
323
|
deviceListing={{
|
|
@@ -28,18 +28,17 @@ describe('Dialog', () => {
|
|
|
28
28
|
</Dialog>
|
|
29
29
|
);
|
|
30
30
|
|
|
31
|
-
|
|
31
|
+
it('is rendered when visible', () => {
|
|
32
32
|
render(dialog());
|
|
33
33
|
expect(screen.getByRole('dialog')).toBeInTheDocument();
|
|
34
|
-
test;
|
|
35
34
|
});
|
|
36
35
|
|
|
37
|
-
|
|
36
|
+
it('is not rendered when not visible', () => {
|
|
38
37
|
render(dialog(false));
|
|
39
38
|
expect(screen.queryByRole('dialog')).not.toBeInTheDocument();
|
|
40
39
|
});
|
|
41
40
|
|
|
42
|
-
|
|
41
|
+
it('shows the expected content', () => {
|
|
43
42
|
render(dialog());
|
|
44
43
|
|
|
45
44
|
expect(screen.getByText('Test Title')).toBeInTheDocument();
|
|
@@ -55,7 +54,7 @@ describe('InfoDialog creator', () => {
|
|
|
55
54
|
</InfoDialog>
|
|
56
55
|
);
|
|
57
56
|
|
|
58
|
-
|
|
57
|
+
it('shows the expected content', () => {
|
|
59
58
|
render(dialog());
|
|
60
59
|
|
|
61
60
|
expect(screen.getByText('Info')).toBeInTheDocument();
|
|
@@ -63,7 +62,7 @@ describe('InfoDialog creator', () => {
|
|
|
63
62
|
expect(screen.getByText('Close')).toBeInTheDocument();
|
|
64
63
|
});
|
|
65
64
|
|
|
66
|
-
|
|
65
|
+
it('invokes the expected action', () => {
|
|
67
66
|
render(dialog());
|
|
68
67
|
|
|
69
68
|
const closeButton = screen.getByText('Close');
|
|
@@ -80,7 +79,7 @@ describe('ErrorDialog creator', () => {
|
|
|
80
79
|
</ErrorDialog>
|
|
81
80
|
);
|
|
82
81
|
|
|
83
|
-
|
|
82
|
+
it('shows the expected content', () => {
|
|
84
83
|
render(dialog());
|
|
85
84
|
|
|
86
85
|
expect(screen.getByText('Error')).toBeInTheDocument();
|
|
@@ -88,7 +87,7 @@ describe('ErrorDialog creator', () => {
|
|
|
88
87
|
expect(screen.getByText('Close')).toBeInTheDocument();
|
|
89
88
|
});
|
|
90
89
|
|
|
91
|
-
|
|
90
|
+
it('invokes the expected action', () => {
|
|
92
91
|
render(dialog());
|
|
93
92
|
|
|
94
93
|
const closeButton = screen.getByText('Close');
|
|
@@ -111,7 +110,7 @@ describe('ConfirmationDialog creator', () => {
|
|
|
111
110
|
</ConfirmationDialog>
|
|
112
111
|
);
|
|
113
112
|
|
|
114
|
-
|
|
113
|
+
it('shows the expected content', () => {
|
|
115
114
|
render(dialog());
|
|
116
115
|
|
|
117
116
|
expect(screen.getByText('Confirm')).toBeInTheDocument();
|
|
@@ -121,7 +120,7 @@ describe('ConfirmationDialog creator', () => {
|
|
|
121
120
|
expect(screen.getByText('Cancel')).toBeInTheDocument();
|
|
122
121
|
});
|
|
123
122
|
|
|
124
|
-
|
|
123
|
+
it('invokes the expected action', () => {
|
|
125
124
|
render(dialog());
|
|
126
125
|
|
|
127
126
|
fireEvent.click(screen.getByText('Optional'));
|
|
@@ -22,7 +22,7 @@ const items = [
|
|
|
22
22
|
];
|
|
23
23
|
|
|
24
24
|
describe('Dropdown', () => {
|
|
25
|
-
it('
|
|
25
|
+
it('shows a list of items', () => {
|
|
26
26
|
render(
|
|
27
27
|
<Dropdown
|
|
28
28
|
items={items}
|
|
@@ -34,7 +34,7 @@ describe('Dropdown', () => {
|
|
|
34
34
|
expect(screen.getByText('Bar')).toBeInTheDocument();
|
|
35
35
|
});
|
|
36
36
|
|
|
37
|
-
it('calls onSelect
|
|
37
|
+
it('calls onSelect', () => {
|
|
38
38
|
const onSelect = jest.fn();
|
|
39
39
|
const item = items[1];
|
|
40
40
|
render(
|
|
@@ -49,7 +49,7 @@ describe('Dropdown', () => {
|
|
|
49
49
|
expect(onSelect).toHaveBeenCalledWith(item);
|
|
50
50
|
});
|
|
51
51
|
|
|
52
|
-
it('correct item
|
|
52
|
+
it('selects the correct item', () => {
|
|
53
53
|
render(
|
|
54
54
|
<Dropdown
|
|
55
55
|
items={items}
|
|
@@ -10,40 +10,39 @@ import {
|
|
|
10
10
|
getSelectedDropdownItem,
|
|
11
11
|
} from './DropdownHelpers';
|
|
12
12
|
|
|
13
|
+
const itemList = [
|
|
14
|
+
{ label: 'foo label', value: 'foo' },
|
|
15
|
+
{ label: 'bar label', value: 'bar' },
|
|
16
|
+
];
|
|
17
|
+
|
|
13
18
|
describe('getSelectedDropdownItem', () => {
|
|
19
|
+
it('returns the item with the correct value', () => {
|
|
20
|
+
expect(getSelectedDropdownItem(itemList, 'bar')).toBe(itemList[1]);
|
|
21
|
+
});
|
|
22
|
+
|
|
14
23
|
it('returns the first item if value is undefined', () => {
|
|
15
|
-
const itemList = [{ label: 'foo', value: 'foo' }];
|
|
16
24
|
expect(getSelectedDropdownItem(itemList, undefined)).toBe(itemList[0]);
|
|
17
25
|
});
|
|
18
26
|
|
|
19
27
|
it('returns the first item if value is not found', () => {
|
|
20
|
-
|
|
21
|
-
expect(getSelectedDropdownItem(itemList, 'bar')).toBe(itemList[0]);
|
|
22
|
-
});
|
|
23
|
-
|
|
24
|
-
it('returns the item with the correct value', () => {
|
|
25
|
-
const itemList = [
|
|
26
|
-
{ label: 'foo', value: 'foo' },
|
|
27
|
-
{ label: 'bar', value: 'bar' },
|
|
28
|
-
];
|
|
29
|
-
expect(getSelectedDropdownItem(itemList, 'bar')).toBe(itemList[1]);
|
|
30
|
-
});
|
|
31
|
-
|
|
32
|
-
it('returns the item with the correct value when value is a boolean', () => {
|
|
33
|
-
const itemList = [
|
|
34
|
-
{ label: 'on', value: 'on' },
|
|
35
|
-
{ label: 'off', value: 'off' },
|
|
36
|
-
];
|
|
37
|
-
expect(getSelectedDropdownItem(itemList, true)).toBe(itemList[0]);
|
|
28
|
+
expect(getSelectedDropdownItem(itemList, 'unknown')).toBe(itemList[0]);
|
|
38
29
|
});
|
|
39
30
|
|
|
40
31
|
it('returns the notFound item if value is not found', () => {
|
|
41
|
-
const itemList = [{ label: 'foo', value: 'foo' }];
|
|
42
32
|
const notFound = { label: 'not found', value: 'not found' };
|
|
43
|
-
expect(getSelectedDropdownItem(itemList, '
|
|
33
|
+
expect(getSelectedDropdownItem(itemList, 'unknown', notFound)).toBe(
|
|
44
34
|
notFound
|
|
45
35
|
);
|
|
46
36
|
});
|
|
37
|
+
|
|
38
|
+
it('handles booleans as the strings `on` and `off`', () => {
|
|
39
|
+
const booleanList = [
|
|
40
|
+
{ label: 'on label', value: 'on' },
|
|
41
|
+
{ label: 'off label', value: 'off' },
|
|
42
|
+
];
|
|
43
|
+
expect(getSelectedDropdownItem(booleanList, true).value).toBe('on');
|
|
44
|
+
expect(getSelectedDropdownItem(booleanList, false).value).toBe('off');
|
|
45
|
+
});
|
|
47
46
|
});
|
|
48
47
|
|
|
49
48
|
describe('convertToDropDownItems', () => {
|
|
@@ -43,7 +43,7 @@ describe('ErrorBoundary', () => {
|
|
|
43
43
|
jest.clearAllMocks();
|
|
44
44
|
});
|
|
45
45
|
|
|
46
|
-
it('
|
|
46
|
+
it('accepts custom reporting functions', () => {
|
|
47
47
|
const sendTelemetryEvent = jest.fn();
|
|
48
48
|
|
|
49
49
|
render(
|
|
@@ -54,7 +54,7 @@ describe('ErrorBoundary', () => {
|
|
|
54
54
|
expect(sendTelemetryEvent).toHaveBeenCalled();
|
|
55
55
|
});
|
|
56
56
|
|
|
57
|
-
it('
|
|
57
|
+
it('renders error boundary component when there is an error', () => {
|
|
58
58
|
render(
|
|
59
59
|
<ErrorBoundary>
|
|
60
60
|
<Child />
|
|
@@ -64,7 +64,7 @@ describe('ErrorBoundary', () => {
|
|
|
64
64
|
expect(errorMessage).toBeDefined();
|
|
65
65
|
});
|
|
66
66
|
|
|
67
|
-
it('
|
|
67
|
+
it('clears store on factory reset', async () => {
|
|
68
68
|
render(
|
|
69
69
|
<ErrorBoundary>
|
|
70
70
|
<Child />
|
|
@@ -76,7 +76,7 @@ describe('ErrorBoundary', () => {
|
|
|
76
76
|
expect(store().clear).toHaveBeenCalled();
|
|
77
77
|
});
|
|
78
78
|
|
|
79
|
-
it('
|
|
79
|
+
it('presents system information', async () => {
|
|
80
80
|
render(
|
|
81
81
|
<ErrorBoundary>
|
|
82
82
|
<Child />
|
|
@@ -21,14 +21,14 @@ describe('ErrorDialog', () => {
|
|
|
21
21
|
expect(screen.queryByRole('dialog')).not.toBeInTheDocument();
|
|
22
22
|
});
|
|
23
23
|
|
|
24
|
-
it('
|
|
24
|
+
it('renders visible dialog with one message', () => {
|
|
25
25
|
render(<ErrorDialog />, [showDialog('An error occured')]);
|
|
26
26
|
|
|
27
27
|
expect(screen.getByRole('dialog')).toBeInTheDocument();
|
|
28
28
|
expect(screen.getByText('An error occured')).toBeInTheDocument();
|
|
29
29
|
});
|
|
30
30
|
|
|
31
|
-
it('
|
|
31
|
+
it('renders visible dialog with two messages', () => {
|
|
32
32
|
render(<ErrorDialog />, [
|
|
33
33
|
showDialog('An error occured'),
|
|
34
34
|
showDialog('Another error occured'),
|
|
@@ -54,7 +54,7 @@ describe('ErrorDialog', () => {
|
|
|
54
54
|
});
|
|
55
55
|
});
|
|
56
56
|
|
|
57
|
-
it('can have
|
|
57
|
+
it('can have custom error resolutions', () => {
|
|
58
58
|
const specialHandling = jest.fn();
|
|
59
59
|
|
|
60
60
|
render(<ErrorDialog />, [
|
|
@@ -11,13 +11,13 @@ const anErrorMessage = 'An error occurred';
|
|
|
11
11
|
const anotherErrorMessage = 'Another error occurred';
|
|
12
12
|
|
|
13
13
|
describe('errorDialogReducer', () => {
|
|
14
|
-
it('
|
|
14
|
+
it('is hidden by default', () => {
|
|
15
15
|
const initialState = dispatchTo(reducer);
|
|
16
16
|
|
|
17
17
|
expect(initialState.isVisible).toEqual(false);
|
|
18
18
|
});
|
|
19
19
|
|
|
20
|
-
it('
|
|
20
|
+
it('shows a message', () => {
|
|
21
21
|
const withAnError = dispatchTo(reducer, [
|
|
22
22
|
showDialog(anErrorMessage, {}),
|
|
23
23
|
]);
|
|
@@ -27,7 +27,7 @@ describe('errorDialogReducer', () => {
|
|
|
27
27
|
});
|
|
28
28
|
});
|
|
29
29
|
|
|
30
|
-
it('
|
|
30
|
+
it('shows multiple messages', () => {
|
|
31
31
|
const withTwoErrors = dispatchTo(reducer, [
|
|
32
32
|
showDialog(anErrorMessage, {}),
|
|
33
33
|
showDialog(anotherErrorMessage, {}),
|
|
@@ -41,7 +41,7 @@ describe('errorDialogReducer', () => {
|
|
|
41
41
|
});
|
|
42
42
|
});
|
|
43
43
|
|
|
44
|
-
it('
|
|
44
|
+
it('does not show duplicate messages', () => {
|
|
45
45
|
const withAnError = dispatchTo(reducer, [
|
|
46
46
|
showDialog(anErrorMessage, {}),
|
|
47
47
|
showDialog(anErrorMessage, {}),
|
|
@@ -52,7 +52,7 @@ describe('errorDialogReducer', () => {
|
|
|
52
52
|
]);
|
|
53
53
|
});
|
|
54
54
|
|
|
55
|
-
it('
|
|
55
|
+
it('can be hidden and cleared', () => {
|
|
56
56
|
const withAClearedError = dispatchTo(reducer, [
|
|
57
57
|
showDialog(anErrorMessage, {}),
|
|
58
58
|
hideDialog(),
|
|
@@ -11,36 +11,42 @@ import render from '../../test/testrenderer';
|
|
|
11
11
|
import { getAppSpecificStore as store } from '../utils/persistentStore';
|
|
12
12
|
import FactoryResetButton from './FactoryResetButton';
|
|
13
13
|
|
|
14
|
-
const
|
|
15
|
-
const
|
|
14
|
+
const FACTORY_RESET = 'Factory reset';
|
|
15
|
+
const OK = 'Restore';
|
|
16
|
+
const CANCEL = 'Cancel';
|
|
16
17
|
|
|
17
18
|
describe('FactoryReset', () => {
|
|
18
19
|
afterEach(() => {
|
|
19
20
|
jest.resetAllMocks();
|
|
20
21
|
});
|
|
21
22
|
|
|
22
|
-
it('
|
|
23
|
-
render(<FactoryResetButton label={
|
|
24
|
-
fireEvent.click(screen.getByText(
|
|
25
|
-
await screen.findByText(
|
|
26
|
-
fireEvent.click(screen.getByText(
|
|
23
|
+
it('clears the store', async () => {
|
|
24
|
+
render(<FactoryResetButton label={FACTORY_RESET} />);
|
|
25
|
+
fireEvent.click(screen.getByText(FACTORY_RESET));
|
|
26
|
+
await screen.findByText(OK);
|
|
27
|
+
fireEvent.click(screen.getByText(OK));
|
|
27
28
|
expect(store().clear).toHaveBeenCalled();
|
|
28
29
|
});
|
|
29
30
|
|
|
30
|
-
it('
|
|
31
|
-
render(<FactoryResetButton label={
|
|
32
|
-
fireEvent.click(screen.getByText(
|
|
33
|
-
await screen.findByText(
|
|
34
|
-
fireEvent.click(screen.getByText(
|
|
31
|
+
it('does not clear the store when cancelled', async () => {
|
|
32
|
+
render(<FactoryResetButton label={FACTORY_RESET} />);
|
|
33
|
+
fireEvent.click(screen.getByText(FACTORY_RESET));
|
|
34
|
+
await screen.findByText(CANCEL);
|
|
35
|
+
fireEvent.click(screen.getByText(CANCEL));
|
|
35
36
|
expect(store().clear).not.toHaveBeenCalled();
|
|
36
37
|
});
|
|
37
38
|
|
|
38
|
-
it('
|
|
39
|
+
it('allows overriding the reset function', async () => {
|
|
39
40
|
const overrideResetFn = jest.fn();
|
|
40
|
-
render(
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
41
|
+
render(
|
|
42
|
+
<FactoryResetButton
|
|
43
|
+
label={FACTORY_RESET}
|
|
44
|
+
resetFn={overrideResetFn}
|
|
45
|
+
/>
|
|
46
|
+
);
|
|
47
|
+
fireEvent.click(screen.getByText(FACTORY_RESET));
|
|
48
|
+
await screen.findByText(OK);
|
|
49
|
+
fireEvent.click(screen.getByText(OK));
|
|
44
50
|
expect(overrideResetFn).toHaveBeenCalled();
|
|
45
51
|
});
|
|
46
52
|
});
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
import { isFactor } from './factor';
|
|
8
8
|
|
|
9
9
|
describe('Factor', () => {
|
|
10
|
-
|
|
10
|
+
test('Valid integer factors ', () => {
|
|
11
11
|
expect(isFactor(20, 5)).toBe(true);
|
|
12
12
|
expect(isFactor(28, 2)).toBe(true);
|
|
13
13
|
expect(isFactor(27, 3)).toBe(true);
|
|
@@ -16,7 +16,7 @@ describe('Factor', () => {
|
|
|
16
16
|
expect(isFactor(21, 7)).toBe(true);
|
|
17
17
|
});
|
|
18
18
|
|
|
19
|
-
|
|
19
|
+
test('Invalid integer factors ', () => {
|
|
20
20
|
expect(isFactor(20, 6)).toBe(false);
|
|
21
21
|
expect(isFactor(28, 3)).toBe(false);
|
|
22
22
|
expect(isFactor(27, 4)).toBe(false);
|
|
@@ -25,7 +25,7 @@ describe('Factor', () => {
|
|
|
25
25
|
expect(isFactor(21, 8)).toBe(false);
|
|
26
26
|
});
|
|
27
27
|
|
|
28
|
-
|
|
28
|
+
test('Valid decimal factors ', () => {
|
|
29
29
|
expect(isFactor(0.15, 0.05)).toBe(true);
|
|
30
30
|
expect(isFactor(0.2331, 0.0001)).toBe(true);
|
|
31
31
|
expect(isFactor(0.22, 0.02)).toBe(true);
|
|
@@ -36,7 +36,7 @@ describe('Factor', () => {
|
|
|
36
36
|
expect(isFactor(0.2331, 0.1)).toBe(true);
|
|
37
37
|
});
|
|
38
38
|
|
|
39
|
-
|
|
39
|
+
test('Invalid decimal factors ', () => {
|
|
40
40
|
expect(isFactor(0.16, 0.05)).toBe(false);
|
|
41
41
|
expect(isFactor(0.2331, 0.0002)).toBe(false);
|
|
42
42
|
expect(isFactor(0.22, 0.03)).toBe(false);
|
package/src/index.ts
CHANGED
|
@@ -196,12 +196,10 @@ export {
|
|
|
196
196
|
inMain as apps,
|
|
197
197
|
type App as AppType,
|
|
198
198
|
type AppSpec,
|
|
199
|
-
type AppWithError,
|
|
200
199
|
type DownloadableApp,
|
|
201
200
|
type InstalledDownloadableApp,
|
|
202
201
|
type LaunchableApp,
|
|
203
202
|
type LocalApp,
|
|
204
|
-
type SourceWithError,
|
|
205
203
|
type UninstalledDownloadableApp,
|
|
206
204
|
type WithdrawnApp,
|
|
207
205
|
} from '../ipc/apps';
|
|
@@ -13,11 +13,11 @@ describe('AppTransport', () => {
|
|
|
13
13
|
timestamp: '2019-07-31T11:00:42.660Z',
|
|
14
14
|
};
|
|
15
15
|
|
|
16
|
-
it('
|
|
16
|
+
it('throws if onLogEntry is not provided to constructor', () => {
|
|
17
17
|
expect(() => new AppTransport(<never>{})).toThrow();
|
|
18
18
|
});
|
|
19
19
|
|
|
20
|
-
it('
|
|
20
|
+
it('includes message in log entry', () => {
|
|
21
21
|
const onLogEntry = jest.fn();
|
|
22
22
|
const appTransport = new AppTransport({ onLogEntry });
|
|
23
23
|
const { message } = info;
|
|
@@ -30,7 +30,7 @@ describe('AppTransport', () => {
|
|
|
30
30
|
);
|
|
31
31
|
});
|
|
32
32
|
|
|
33
|
-
it('
|
|
33
|
+
it('includes level in log entry', () => {
|
|
34
34
|
const onLogEntry = jest.fn();
|
|
35
35
|
const appTransport = new AppTransport({ onLogEntry });
|
|
36
36
|
const { level } = info;
|
|
@@ -44,7 +44,7 @@ describe('AppTransport', () => {
|
|
|
44
44
|
);
|
|
45
45
|
});
|
|
46
46
|
|
|
47
|
-
it('
|
|
47
|
+
it('includes timestamp in log entry', () => {
|
|
48
48
|
const onLogEntry = jest.fn();
|
|
49
49
|
const appTransport = new AppTransport({ onLogEntry });
|
|
50
50
|
|
|
@@ -53,7 +53,7 @@ describe('AppTransport', () => {
|
|
|
53
53
|
expect(typeof onLogEntry.mock.calls[0][0].timestamp).toBe('string');
|
|
54
54
|
});
|
|
55
55
|
|
|
56
|
-
it('
|
|
56
|
+
it('increments the log entry id', () => {
|
|
57
57
|
const onLogEntry = jest.fn();
|
|
58
58
|
const appTransport = new AppTransport({ onLogEntry });
|
|
59
59
|
|
|
@@ -66,7 +66,7 @@ describe('AppTransport', () => {
|
|
|
66
66
|
expect(onLogEntry.mock.calls[2][0].id).toEqual(2);
|
|
67
67
|
});
|
|
68
68
|
|
|
69
|
-
it('
|
|
69
|
+
it('invokes the provided callback function when log completed', () => {
|
|
70
70
|
const onLogEntry = jest.fn();
|
|
71
71
|
const onLogDone = jest.fn();
|
|
72
72
|
const appTransport = new AppTransport({ onLogEntry });
|
|
@@ -13,16 +13,16 @@ describe('logBuffer', () => {
|
|
|
13
13
|
logBuffer = createLogBuffer();
|
|
14
14
|
});
|
|
15
15
|
|
|
16
|
-
it('
|
|
16
|
+
it('is initially empty', () => {
|
|
17
17
|
expect(logBuffer.size()).toEqual(0);
|
|
18
18
|
});
|
|
19
19
|
|
|
20
|
-
it('
|
|
20
|
+
it('can have an entry added', () => {
|
|
21
21
|
logBuffer.addEntry({ id: 0, level: '', message: '' });
|
|
22
22
|
expect(logBuffer.size()).toEqual(1);
|
|
23
23
|
});
|
|
24
24
|
|
|
25
|
-
it('
|
|
25
|
+
it('returns all added entries when clearing buffer', () => {
|
|
26
26
|
const inputEntries = [
|
|
27
27
|
{ id: 0, level: '', message: '' },
|
|
28
28
|
{ id: 1, level: '', message: '' },
|
|
@@ -33,7 +33,7 @@ describe('logBuffer', () => {
|
|
|
33
33
|
expect(outputEntries).toEqual(inputEntries);
|
|
34
34
|
});
|
|
35
35
|
|
|
36
|
-
it('
|
|
36
|
+
it('is empty after clearing', () => {
|
|
37
37
|
logBuffer.addEntry({ id: 0, level: '', message: '' });
|
|
38
38
|
logBuffer.clear();
|
|
39
39
|
expect(logBuffer.size()).toEqual(0);
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { AppVersions, NrfutilModules, NrfutilModuleVersion, UrlString } from './MetaFiles';
|
|
2
|
-
import { LOCAL,
|
|
2
|
+
import { LOCAL, SourceName } from './sources';
|
|
3
3
|
export interface AppSpec {
|
|
4
4
|
name: string;
|
|
5
5
|
source: SourceName;
|
|
@@ -45,22 +45,16 @@ export interface WithdrawnApp extends BaseApp, Installed, Downloadable {
|
|
|
45
45
|
export type DownloadableApp = InstalledDownloadableApp | UninstalledDownloadableApp | WithdrawnApp;
|
|
46
46
|
export type LaunchableApp = LocalApp | InstalledDownloadableApp | WithdrawnApp;
|
|
47
47
|
export type App = LocalApp | DownloadableApp;
|
|
48
|
-
export
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
}
|
|
52
|
-
export type SourceWithError = {
|
|
53
|
-
source: Source;
|
|
54
|
-
reason?: string;
|
|
48
|
+
export declare const channel: {
|
|
49
|
+
getDownloadableApps: string;
|
|
50
|
+
installDownloadableApp: string;
|
|
55
51
|
};
|
|
56
52
|
export declare const isDownloadable: (app?: App) => app is DownloadableApp;
|
|
57
53
|
export declare const isInstalled: (app?: App) => app is LaunchableApp;
|
|
58
54
|
export declare const isWithdrawn: (app?: App) => app is WithdrawnApp;
|
|
59
55
|
export declare const isUpdatable: (app?: App) => app is InstalledDownloadableApp;
|
|
60
|
-
type GetDownloadableAppsResult = {
|
|
56
|
+
export type GetDownloadableAppsResult = {
|
|
61
57
|
apps: DownloadableApp[];
|
|
62
|
-
appsWithErrors: AppWithError[];
|
|
63
|
-
sourcesWithErrors: SourceWithError[];
|
|
64
58
|
};
|
|
65
59
|
export declare const forRenderer: {
|
|
66
60
|
registerGetDownloadableApps: (handler: (() => GetDownloadableAppsResult) | (() => Promise<GetDownloadableAppsResult>)) => void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"apps.d.ts","sourceRoot":"","sources":["../../../ipc/apps.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EACR,WAAW,EACX,cAAc,EACd,oBAAoB,EACpB,SAAS,EACZ,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"apps.d.ts","sourceRoot":"","sources":["../../../ipc/apps.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EACR,WAAW,EACX,cAAc,EACd,oBAAoB,EACpB,SAAS,EACZ,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAE9C,MAAM,WAAW,OAAO;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,UAAU,CAAC;CACtB;AAED,UAAU,OAAO;IACb,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;CACpB;AAED,UAAU,YAAY;IAClB,MAAM,EAAE,UAAU,CAAC;IACnB,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,QAAQ,CAAC,EAAE,WAAW,CAAC;IACvB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;CACzB;AAED,UAAU,SAAS;IACf,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,aAAa,CAAC,EAAE,SAAS,CAAC;IAC1B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,cAAc,CAAC;IACzB,WAAW,CAAC,EAAE,oBAAoB,CAAC;IACnC,SAAS,EAAE;QACP,gBAAgB,CAAC,EAAE,MAAM,CAAC;QAC1B,IAAI,EAAE,MAAM,CAAC;QACb,MAAM,CAAC,EAAE,MAAM,CAAC;KACnB,CAAC;CACL;AAED,MAAM,WAAW,QAAS,SAAQ,SAAS,EAAE,OAAO;IAChD,MAAM,EAAE,OAAO,KAAK,CAAC;CACxB;AAED,MAAM,WAAW,wBACb,SAAQ,OAAO,EACX,SAAS,EACT,YAAY;IAChB,WAAW,EAAE,KAAK,CAAC;CACtB;AAED,MAAM,WAAW,0BAA2B,SAAQ,OAAO,EAAE,YAAY;IACrE,WAAW,EAAE,KAAK,CAAC;CACtB;AAED,MAAM,WAAW,YAAa,SAAQ,OAAO,EAAE,SAAS,EAAE,YAAY;IAClE,WAAW,EAAE,IAAI,CAAC;CACrB;AAED,MAAM,MAAM,eAAe,GACrB,wBAAwB,GACxB,0BAA0B,GAC1B,YAAY,CAAC;AAEnB,MAAM,MAAM,aAAa,GAAG,QAAQ,GAAG,wBAAwB,GAAG,YAAY,CAAC;AAE/E,MAAM,MAAM,GAAG,GAAG,QAAQ,GAAG,eAAe,CAAC;AAE7C,eAAO,MAAM,OAAO;;;CAGnB,CAAC;AAEF,eAAO,MAAM,cAAc,SAAU,GAAG,2BACA,CAAC;AAEzC,eAAO,MAAM,WAAW,SAAU,GAAG,yBACA,CAAC;AAEtC,eAAO,MAAM,WAAW,SAAU,GAAG,wBACK,CAAC;AAa3C,eAAO,MAAM,WAAW,SAAU,GAAG,oCAKU,CAAC;AAGhD,MAAM,MAAM,yBAAyB,GAAG;IACpC,IAAI,EAAE,eAAe,EAAE,CAAC;CAC3B,CAAC;AAwBF,eAAO,MAAM,WAAW;;;CAGvB,CAAC;AAEF,eAAO,MAAM,MAAM;;;2BA3DkB,GAAG;wBAGN,GAAG;wBAGH,GAAG;wBAcH,GAAG;CA+CpC,CAAC"}
|
|
@@ -1,15 +1,8 @@
|
|
|
1
|
-
import { UrlString } from './MetaFiles';
|
|
2
1
|
declare enum StandardSourceNames {
|
|
3
2
|
OFFICIAL = "official",
|
|
4
3
|
LOCAL = "local"
|
|
5
4
|
}
|
|
6
5
|
export declare const LOCAL: StandardSourceNames, OFFICIAL: StandardSourceNames;
|
|
7
|
-
export declare const allStandardSourceNames: SourceName[];
|
|
8
6
|
export type SourceName = string;
|
|
9
|
-
export type SourceUrl = UrlString;
|
|
10
|
-
export type Source = {
|
|
11
|
-
name: SourceName;
|
|
12
|
-
url: SourceUrl;
|
|
13
|
-
};
|
|
14
7
|
export {};
|
|
15
8
|
//# sourceMappingURL=sources.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sources.d.ts","sourceRoot":"","sources":["../../../ipc/sources.ts"],"names":[],"mappings":"AAMA,
|
|
1
|
+
{"version":3,"file":"sources.d.ts","sourceRoot":"","sources":["../../../ipc/sources.ts"],"names":[],"mappings":"AAMA,aAAK,mBAAmB;IACpB,QAAQ,aAAa;IACrB,KAAK,UAAU;CAClB;AAED,eAAO,MAAQ,KAAK,uBAAE,QAAQ,qBAAwB,CAAC;AAEvD,MAAM,MAAM,UAAU,GAAG,MAAM,CAAC"}
|
|
@@ -7,15 +7,7 @@ export declare const appDetails: {
|
|
|
7
7
|
};
|
|
8
8
|
export declare const apps: {
|
|
9
9
|
forRenderer: {
|
|
10
|
-
registerGetDownloadableApps: (handler: (() =>
|
|
11
|
-
apps: import("../ipc/apps").DownloadableApp[];
|
|
12
|
-
appsWithErrors: import("../ipc/apps").AppWithError[];
|
|
13
|
-
sourcesWithErrors: import("../ipc/apps").SourceWithError[];
|
|
14
|
-
}) | (() => Promise<{
|
|
15
|
-
apps: import("../ipc/apps").DownloadableApp[];
|
|
16
|
-
appsWithErrors: import("../ipc/apps").AppWithError[];
|
|
17
|
-
sourcesWithErrors: import("../ipc/apps").SourceWithError[];
|
|
18
|
-
}>)) => void;
|
|
10
|
+
registerGetDownloadableApps: (handler: (() => import("../ipc/apps").GetDownloadableAppsResult) | (() => Promise<import("../ipc/apps").GetDownloadableAppsResult>)) => void;
|
|
19
11
|
registerInstallDownloadableApp: (handler: ((app: import("../ipc/apps").DownloadableApp, version?: string | undefined) => import("../ipc/apps").DownloadableApp) | ((app: import("../ipc/apps").DownloadableApp, version?: string | undefined) => Promise<import("../ipc/apps").DownloadableApp>)) => void;
|
|
20
12
|
};
|
|
21
13
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../main/index.ts"],"names":[],"mappings":";AAiBA,OAAO,EACH,8BAA8B,EAC9B,4BAA4B,GAC/B,MAAM,sCAAsC,CAAC;AAE9C,eAAO,MAAM,UAAU;;;;CAAyC,CAAC;AACjE,eAAO,MAAM,IAAI
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../main/index.ts"],"names":[],"mappings":";AAiBA,OAAO,EACH,8BAA8B,EAC9B,4BAA4B,GAC/B,MAAM,sCAAsC,CAAC;AAE9C,eAAO,MAAM,UAAU;;;;CAAyC,CAAC;AACjE,eAAO,MAAM,IAAI;;;;;CAAmC,CAAC;AACrD,eAAO,MAAM,cAAc;;;;CAA6C,CAAC;AACzE,eAAO,MAAM,IAAI;;;;;;;;CAAmC,CAAC;AACrD,eAAO,MAAM,YAAY;;;;;CAA2C,CAAC;AACrE,eAAO,MAAM,WAAW;;;;;;CAEvB,CAAC;AACF,eAAO,MAAM,UAAU;;;;;;;;;;;;;;;;;;CAGtB,CAAC;AAEF,OAAO,EACH,gBAAgB,EAChB,mBAAmB,EACnB,KAAK,OAAO,EACZ,KAAK,iBAAiB,EACtB,KAAK,cAAc,EACnB,KAAK,oBAAoB,EACzB,KAAK,UAAU,EACf,KAAK,aAAa,GACrB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACH,KAAK,oBAAoB,EACzB,KAAK,cAAc,EACnB,yBAAyB,EACzB,mBAAmB,GACtB,MAAM,2BAA2B,CAAC;AAEnC,OAAO,EAAE,KAAK,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAC1D,YAAY,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EACH,0BAA0B,EAC1B,wBAAwB,GAC3B,MAAM,aAAa,CAAC"}
|
|
@@ -78,7 +78,7 @@ export { type DeviceSetupConfig, type DeviceSetup, prepareDevice, } from './Devi
|
|
|
78
78
|
export { shellParser, xTerminalShellParserWrapper, type Callbacks as ShellParserCallbacks, type ShellParser, } from './Parsers/shellParser';
|
|
79
79
|
export { addNewMessage, newCopiedFlashMessage, newInfoFlashMessage, newWarningFlashMessage, newErrorFlashMessage, newSuccessFlashMessage, } from './FlashMessage/FlashMessageSlice';
|
|
80
80
|
export { getSelectedDropdownItem, convertToDropDownItems, convertToNumberDropDownItems, } from './Dropdown/DropdownHelpers';
|
|
81
|
-
export { inMain as apps, type App as AppType, type AppSpec, type
|
|
81
|
+
export { inMain as apps, type App as AppType, type AppSpec, type DownloadableApp, type InstalledDownloadableApp, type LaunchableApp, type LocalApp, type UninstalledDownloadableApp, type WithdrawnApp, } from '../ipc/apps';
|
|
82
82
|
export { inMain as openWindow } from '../ipc/open';
|
|
83
83
|
export { inMain as preventSleep } from '../ipc/preventSleep';
|
|
84
84
|
export { inMain as safeStorage } from '../ipc/safeStorage';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":"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"}
|