@nuclearplayer/plugin-sdk 0.0.10 → 0.0.14
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/README.md +92 -83
- package/dist/index.d.ts +409 -7
- package/dist/index.js +76 -48
- package/package.json +5 -3
- package/dist/api/index.d.ts +0 -15
- package/dist/api/index.d.ts.map +0 -1
- package/dist/api/providers.d.ts +0 -11
- package/dist/api/providers.d.ts.map +0 -1
- package/dist/api/settings.d.ts +0 -10
- package/dist/api/settings.d.ts.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/react/useSetting.d.ts +0 -3
- package/dist/react/useSetting.d.ts.map +0 -1
- package/dist/test/setup.d.ts +0 -1
- package/dist/test/setup.d.ts.map +0 -1
- package/dist/test/utils/inMemorySettingsHost.d.ts +0 -16
- package/dist/test/utils/inMemorySettingsHost.d.ts.map +0 -1
- package/dist/types/providers.d.ts +0 -9
- package/dist/types/providers.d.ts.map +0 -1
- package/dist/types/search.d.ts +0 -40
- package/dist/types/search.d.ts.map +0 -1
- package/dist/types/settings.d.ts +0 -113
- package/dist/types/settings.d.ts.map +0 -1
- package/dist/types.d.ts +0 -41
- package/dist/types.d.ts.map +0 -1
package/README.md
CHANGED
|
@@ -1,53 +1,59 @@
|
|
|
1
1
|
# Nuclear Plugin SDK
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
Build plugins for Nuclear music player.
|
|
4
4
|
|
|
5
|
-
|
|
6
|
-
|
|
5
|
+
Plugins are JavaScript/TypeScript modules that extend Nuclear's functionality. Write lifecycle hooks, register providers, and ship it as an npm package or local bundle.
|
|
6
|
+
|
|
7
|
+
## Quick Start
|
|
7
8
|
|
|
8
|
-
## 2. Quick Start
|
|
9
9
|
```bash
|
|
10
10
|
mkdir my-plugin && cd my-plugin
|
|
11
11
|
pnpm init -y
|
|
12
12
|
pnpm add @nuclearplayer/plugin-sdk
|
|
13
|
-
# add dev tooling of your choice (vite, tsup, esbuild, rollup)
|
|
14
13
|
```
|
|
15
14
|
|
|
16
15
|
Create `src/index.ts`:
|
|
16
|
+
|
|
17
17
|
```ts
|
|
18
18
|
import { NuclearPluginAPI } from '@nuclearplayer/plugin-sdk';
|
|
19
19
|
|
|
20
20
|
export default {
|
|
21
21
|
async onLoad(api: NuclearPluginAPI) {
|
|
22
|
+
console.log('Plugin loaded');
|
|
22
23
|
},
|
|
23
24
|
async onEnable(api: NuclearPluginAPI) {
|
|
25
|
+
console.log('Plugin enabled');
|
|
24
26
|
},
|
|
25
27
|
async onDisable() {
|
|
28
|
+
console.log('Plugin disabled');
|
|
26
29
|
},
|
|
27
30
|
async onUnload() {
|
|
31
|
+
console.log('Plugin unloaded');
|
|
28
32
|
},
|
|
29
33
|
};
|
|
30
34
|
```
|
|
31
35
|
|
|
32
|
-
|
|
36
|
+
Build it to `dist/index.js` as a CommonJS bundle.
|
|
37
|
+
|
|
38
|
+
## Manifest (package.json)
|
|
33
39
|
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
- `
|
|
37
|
-
- `
|
|
38
|
-
- `
|
|
39
|
-
- `author`: Plain string.
|
|
40
|
+
### Required fields
|
|
41
|
+
- `name` - Unique plugin ID (scoped names allowed)
|
|
42
|
+
- `version` - Semver version
|
|
43
|
+
- `description` - One-line summary
|
|
44
|
+
- `author` - Your name
|
|
40
45
|
|
|
41
|
-
Optional
|
|
42
|
-
- `main
|
|
46
|
+
### Optional fields
|
|
47
|
+
- `main` - Entry file path (defaults to `index.js` or `dist/index.js`)
|
|
43
48
|
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
- `
|
|
48
|
-
- `
|
|
49
|
+
### Nuclear-specific config
|
|
50
|
+
Add a `nuclear` object for extra metadata:
|
|
51
|
+
|
|
52
|
+
- `displayName` - Friendly name (defaults to `name`)
|
|
53
|
+
- `category` - Arbitrary grouping (e.g., `source`, `integration`, `lyrics`)
|
|
54
|
+
- `icon` - See below
|
|
55
|
+
- `permissions` - Capabilities your plugin uses (informational only for now)
|
|
49
56
|
|
|
50
|
-
Example:
|
|
51
57
|
```json
|
|
52
58
|
{
|
|
53
59
|
"name": "@nuclear-plugin/lastfm",
|
|
@@ -64,20 +70,23 @@ Example:
|
|
|
64
70
|
}
|
|
65
71
|
```
|
|
66
72
|
|
|
67
|
-
##
|
|
73
|
+
## Icons
|
|
74
|
+
|
|
68
75
|
```ts
|
|
69
76
|
type PluginIcon = { type: 'link'; link: string };
|
|
70
77
|
```
|
|
78
|
+
|
|
71
79
|
Link icons should point to a local file path or remote URL; keep them small (<= 64x64, optimized).
|
|
72
80
|
|
|
73
|
-
##
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
- `
|
|
78
|
-
- `
|
|
81
|
+
## Lifecycle Hooks
|
|
82
|
+
|
|
83
|
+
All hooks are optional. Export a default object with any of:
|
|
84
|
+
|
|
85
|
+
- `onLoad(api)` - Runs after plugin code loads and manifest is parsed
|
|
86
|
+
- `onEnable(api)` - Runs when user enables the plugin
|
|
87
|
+
- `onDisable()` - Runs when user disables it
|
|
88
|
+
- `onUnload()` - Runs before plugin is removed from memory
|
|
79
89
|
|
|
80
|
-
Typical pattern:
|
|
81
90
|
```ts
|
|
82
91
|
export default {
|
|
83
92
|
async onLoad(api) {
|
|
@@ -91,74 +100,74 @@ export default {
|
|
|
91
100
|
};
|
|
92
101
|
```
|
|
93
102
|
|
|
94
|
-
##
|
|
95
|
-
|
|
103
|
+
## Permissions
|
|
104
|
+
|
|
105
|
+
Declare what your plugin does in the `permissions` array. Permissions are currently informational. Future versions might show UI for this.
|
|
106
|
+
|
|
107
|
+
Examples: `network`, `scrobble`, `playback-control`, `lyrics`, `search`, `storage`
|
|
108
|
+
|
|
109
|
+
## File Structure
|
|
96
110
|
|
|
97
|
-
## 7. File Structure Example
|
|
98
111
|
```text
|
|
99
112
|
my-plugin/
|
|
100
113
|
package.json
|
|
101
|
-
README.md
|
|
102
114
|
src/
|
|
103
115
|
index.ts
|
|
104
116
|
dist/
|
|
105
|
-
index.js
|
|
106
|
-
node_modules/
|
|
117
|
+
index.js
|
|
107
118
|
```
|
|
108
119
|
|
|
109
|
-
##
|
|
110
|
-
You can use any bundler that outputs a single JS file that the loader can evaluate in a CommonJS style environment.
|
|
120
|
+
## Building
|
|
111
121
|
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
## 9. Local Development Workflow
|
|
123
|
-
1. Create your plugin folder somewhere accessible.
|
|
124
|
-
2. Build to produce entry file.
|
|
125
|
-
3. (Future) Place or symlink the folder into the Nuclear plugins directory once auto-discovery is implemented. For now loading is manual (loader API expects a path).
|
|
126
|
-
4. Rebuild after changes; the app will need a reload or unload+load cycle when hot-reload support is added.
|
|
127
|
-
|
|
128
|
-
## 10. Best Practices
|
|
129
|
-
- Keep startup fast; defer heavy work until `onEnable`.
|
|
130
|
-
- Avoid global state leakage; store state on a module-local object.
|
|
131
|
-
- Validate network responses defensively.
|
|
132
|
-
- Use permissions array to communicate scope clearly.
|
|
133
|
-
- Keep dependencies minimal; smaller bundles load faster.
|
|
134
|
-
|
|
135
|
-
## 11. Troubleshooting
|
|
136
|
-
| Issue | Check |
|
|
137
|
-
|-------|-------|
|
|
138
|
-
| Loader cannot resolve entry | Is `main` correct or is there a built `index.js` / `dist/index.js`? |
|
|
139
|
-
| Missing fields error | Confirm all required manifest fields: name, version, description, author. |
|
|
140
|
-
| Hooks not firing | Ensure default export is an object, not a function or class. |
|
|
141
|
-
|
|
142
|
-
## 12. Type Exports
|
|
143
|
-
```ts
|
|
144
|
-
import type { NuclearPlugin, PluginManifest, PluginIcon } from '@nuclearplayer/plugin-sdk';
|
|
122
|
+
You can use any bundler that outputs a single JS file. Your bundle needs to work in a CommonJS environment (`module.exports` or `exports.default`).
|
|
123
|
+
|
|
124
|
+
Example with tsup:
|
|
125
|
+
|
|
126
|
+
```json
|
|
127
|
+
{
|
|
128
|
+
"devDependencies": { "tsup": "^8" },
|
|
129
|
+
"scripts": { "build": "tsup src/index.ts --dts --format cjs --minify --out-dir dist" }
|
|
130
|
+
}
|
|
145
131
|
```
|
|
146
132
|
|
|
147
|
-
|
|
148
|
-
```ts
|
|
149
|
-
import { NuclearPluginAPI } from '@nuclearplayer/plugin-sdk';
|
|
133
|
+
Run `pnpm build` and you'll get `dist/index.js`.
|
|
150
134
|
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
135
|
+
## Development
|
|
136
|
+
|
|
137
|
+
1. Create your plugin folder
|
|
138
|
+
2. Build to produce the entry file
|
|
139
|
+
3. Load it in Nuclear
|
|
140
|
+
4. Rebuild after changes; you'll need to reload the plugin
|
|
141
|
+
|
|
142
|
+
## Tips
|
|
143
|
+
|
|
144
|
+
- Keep startup fast, defer heavy work to `onEnable`
|
|
145
|
+
- Validate network responses
|
|
146
|
+
- Minimize dependencies, smaller = faster
|
|
147
|
+
|
|
148
|
+
## Troubleshooting
|
|
149
|
+
|
|
150
|
+
| Problem | Solution |
|
|
151
|
+
|---------|----------|
|
|
152
|
+
| Can't find entry file | Check `main` in package.json or make sure `index.js` or `dist/index.js` exists |
|
|
153
|
+
| Missing fields error | Add all required fields: name, version, description, author |
|
|
154
|
+
| Hooks don't fire | Export a default object, not a function or class |
|
|
155
|
+
|
|
156
|
+
## Types
|
|
157
|
+
|
|
158
|
+
```ts
|
|
159
|
+
import type {
|
|
160
|
+
NuclearPlugin,
|
|
161
|
+
PluginManifest,
|
|
162
|
+
PluginIcon,
|
|
163
|
+
// Model types (re-exported from @nuclearplayer/model)
|
|
164
|
+
Artist,
|
|
165
|
+
Album,
|
|
166
|
+
Track,
|
|
167
|
+
// ... and many more
|
|
168
|
+
} from '@nuclearplayer/plugin-sdk';
|
|
161
169
|
```
|
|
162
170
|
|
|
163
|
-
##
|
|
171
|
+
## License
|
|
172
|
+
|
|
164
173
|
AGPL-3.0-only
|
package/dist/index.d.ts
CHANGED
|
@@ -1,7 +1,409 @@
|
|
|
1
|
-
export
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
1
|
+
export declare type Album = {
|
|
2
|
+
title: string;
|
|
3
|
+
artists: ArtistCredit[];
|
|
4
|
+
tracks?: TrackRef[];
|
|
5
|
+
releaseDate?: {
|
|
6
|
+
precision: 'year' | 'month' | 'day';
|
|
7
|
+
dateIso: string;
|
|
8
|
+
};
|
|
9
|
+
genres?: string[];
|
|
10
|
+
artwork?: ArtworkSet;
|
|
11
|
+
source: ProviderRef;
|
|
12
|
+
};
|
|
13
|
+
|
|
14
|
+
export declare type AlbumRef = {
|
|
15
|
+
title: string;
|
|
16
|
+
artists?: ArtistRef[];
|
|
17
|
+
artwork?: ArtworkSet;
|
|
18
|
+
source: ProviderRef;
|
|
19
|
+
};
|
|
20
|
+
|
|
21
|
+
export declare type Artist = {
|
|
22
|
+
name: string;
|
|
23
|
+
disambiguation?: string;
|
|
24
|
+
bio?: string;
|
|
25
|
+
onTour?: boolean;
|
|
26
|
+
artwork?: ArtworkSet;
|
|
27
|
+
tags?: string[];
|
|
28
|
+
source: ProviderRef;
|
|
29
|
+
};
|
|
30
|
+
|
|
31
|
+
export declare type ArtistCredit = {
|
|
32
|
+
name: string;
|
|
33
|
+
roles: string[];
|
|
34
|
+
source?: ProviderRef;
|
|
35
|
+
};
|
|
36
|
+
|
|
37
|
+
export declare type ArtistMetadataCapability = 'artistDetails' | 'artistAlbums' | 'artistTopTracks' | 'artistRelatedArtists';
|
|
38
|
+
|
|
39
|
+
export declare type ArtistRef = {
|
|
40
|
+
name: string;
|
|
41
|
+
disambiguation?: string;
|
|
42
|
+
artwork?: ArtworkSet;
|
|
43
|
+
source: ProviderRef;
|
|
44
|
+
};
|
|
45
|
+
|
|
46
|
+
export declare type Artwork = {
|
|
47
|
+
url: string;
|
|
48
|
+
width?: number;
|
|
49
|
+
height?: number;
|
|
50
|
+
purpose?: ArtworkPurpose;
|
|
51
|
+
source?: ProviderRef;
|
|
52
|
+
};
|
|
53
|
+
|
|
54
|
+
export declare type ArtworkPurpose = 'avatar' | 'cover' | 'background' | 'thumbnail';
|
|
55
|
+
|
|
56
|
+
export declare type ArtworkSet = {
|
|
57
|
+
items: Artwork[];
|
|
58
|
+
};
|
|
59
|
+
|
|
60
|
+
export declare type BooleanSettingDefinition = {
|
|
61
|
+
id: string;
|
|
62
|
+
title: string;
|
|
63
|
+
description?: string;
|
|
64
|
+
category: SettingCategory;
|
|
65
|
+
kind: 'boolean';
|
|
66
|
+
default?: boolean;
|
|
67
|
+
hidden?: boolean;
|
|
68
|
+
source?: SettingSource;
|
|
69
|
+
widget?: BooleanWidget;
|
|
70
|
+
};
|
|
71
|
+
|
|
72
|
+
export declare type BooleanWidget = {
|
|
73
|
+
type: 'toggle';
|
|
74
|
+
};
|
|
75
|
+
|
|
76
|
+
export declare type EnumOption = {
|
|
77
|
+
value: string;
|
|
78
|
+
label: string;
|
|
79
|
+
};
|
|
80
|
+
|
|
81
|
+
export declare type EnumSettingDefinition = {
|
|
82
|
+
id: string;
|
|
83
|
+
title: string;
|
|
84
|
+
description?: string;
|
|
85
|
+
category: SettingCategory;
|
|
86
|
+
kind: 'enum';
|
|
87
|
+
options: EnumOption[];
|
|
88
|
+
default?: string;
|
|
89
|
+
hidden?: boolean;
|
|
90
|
+
source?: SettingSource;
|
|
91
|
+
widget?: EnumWidget;
|
|
92
|
+
};
|
|
93
|
+
|
|
94
|
+
export declare type EnumWidget = {
|
|
95
|
+
type: 'select';
|
|
96
|
+
} | {
|
|
97
|
+
type: 'radio';
|
|
98
|
+
};
|
|
99
|
+
|
|
100
|
+
export declare type LoadedPlugin = {
|
|
101
|
+
metadata: PluginMetadata;
|
|
102
|
+
instance: NuclearPlugin;
|
|
103
|
+
path: string;
|
|
104
|
+
};
|
|
105
|
+
|
|
106
|
+
export declare type LocalFileInfo = {
|
|
107
|
+
fileUri: string;
|
|
108
|
+
fileSize?: number;
|
|
109
|
+
format?: string;
|
|
110
|
+
bitrateKbps?: number;
|
|
111
|
+
sampleRateHz?: number;
|
|
112
|
+
channels?: number;
|
|
113
|
+
fingerprint?: string;
|
|
114
|
+
scannedAtIso?: string;
|
|
115
|
+
};
|
|
116
|
+
|
|
117
|
+
export declare type MetadataProvider = ProviderDescriptor<'metadata'> & {
|
|
118
|
+
searchCapabilities?: SearchCapability[];
|
|
119
|
+
artistMetadataCapabilities?: ArtistMetadataCapability[];
|
|
120
|
+
search?: (params: SearchParams) => Promise<SearchResults>;
|
|
121
|
+
searchArtists?: (params: Omit<SearchParams, 'types'>) => Promise<ArtistRef[]>;
|
|
122
|
+
searchAlbums?: (params: Omit<SearchParams, 'types'>) => Promise<AlbumRef[]>;
|
|
123
|
+
searchTracks?: (params: Omit<SearchParams, 'types'>) => Promise<Track[]>;
|
|
124
|
+
searchPlaylists?: (params: Omit<SearchParams, 'types'>) => Promise<PlaylistRef[]>;
|
|
125
|
+
fetchArtistDetails?: (query: string) => Promise<Artist>;
|
|
126
|
+
fetchAlbumDetails?: (query: string) => Promise<Album>;
|
|
127
|
+
fetchArtistAlbums?: (artistId: string) => Promise<AlbumRef[]>;
|
|
128
|
+
fetchArtistTopTracks?: (artistId: string) => Promise<TrackRef[]>;
|
|
129
|
+
fetchArtistRelatedArtists?: (artistId: string) => Promise<ArtistRef[]>;
|
|
130
|
+
};
|
|
131
|
+
|
|
132
|
+
export declare class MissingCapabilityError extends Error {
|
|
133
|
+
constructor(capability: string);
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
export declare class NuclearAPI {
|
|
137
|
+
readonly Settings: Settings;
|
|
138
|
+
readonly Providers: Providers;
|
|
139
|
+
constructor(opts?: {
|
|
140
|
+
settingsHost?: SettingsHost;
|
|
141
|
+
providersHost?: ProvidersHost;
|
|
142
|
+
});
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
export declare type NuclearPlugin = {
|
|
146
|
+
onLoad?(api: NuclearPluginAPI): void | Promise<void>;
|
|
147
|
+
onUnload?(): void | Promise<void>;
|
|
148
|
+
onEnable?(api: NuclearPluginAPI): void | Promise<void>;
|
|
149
|
+
onDisable?(): void | Promise<void>;
|
|
150
|
+
};
|
|
151
|
+
|
|
152
|
+
export declare class NuclearPluginAPI extends NuclearAPI {
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
export declare type NumberSettingDefinition = {
|
|
156
|
+
id: string;
|
|
157
|
+
title: string;
|
|
158
|
+
description?: string;
|
|
159
|
+
category: SettingCategory;
|
|
160
|
+
kind: 'number';
|
|
161
|
+
default?: number;
|
|
162
|
+
hidden?: boolean;
|
|
163
|
+
source?: SettingSource;
|
|
164
|
+
widget?: NumberWidget;
|
|
165
|
+
min?: number;
|
|
166
|
+
max?: number;
|
|
167
|
+
step?: number;
|
|
168
|
+
unit?: string;
|
|
169
|
+
};
|
|
170
|
+
|
|
171
|
+
export declare type NumberWidget = {
|
|
172
|
+
type: 'slider';
|
|
173
|
+
min?: number;
|
|
174
|
+
max?: number;
|
|
175
|
+
step?: number;
|
|
176
|
+
unit?: string;
|
|
177
|
+
} | {
|
|
178
|
+
type: 'number-input';
|
|
179
|
+
min?: number;
|
|
180
|
+
max?: number;
|
|
181
|
+
step?: number;
|
|
182
|
+
unit?: string;
|
|
183
|
+
};
|
|
184
|
+
|
|
185
|
+
export declare function pickArtwork(set: ArtworkSet | undefined, purpose: ArtworkPurpose, targetPx: number): Artwork | undefined;
|
|
186
|
+
|
|
187
|
+
export declare type Playlist = {
|
|
188
|
+
id: string;
|
|
189
|
+
name: string;
|
|
190
|
+
lastModifiedIso?: string;
|
|
191
|
+
items: PlaylistItem[];
|
|
192
|
+
};
|
|
193
|
+
|
|
194
|
+
export declare type PlaylistItem = {
|
|
195
|
+
id: string;
|
|
196
|
+
title: string;
|
|
197
|
+
artists: ArtistCredit[];
|
|
198
|
+
album?: string;
|
|
199
|
+
durationMs?: number;
|
|
200
|
+
artwork?: ArtworkSet;
|
|
201
|
+
note?: string;
|
|
202
|
+
addedAtIso?: string;
|
|
203
|
+
source: ProviderRef;
|
|
204
|
+
};
|
|
205
|
+
|
|
206
|
+
export declare type PlaylistRef = {
|
|
207
|
+
id: string;
|
|
208
|
+
name: string;
|
|
209
|
+
artwork?: ArtworkSet;
|
|
210
|
+
source: ProviderRef;
|
|
211
|
+
};
|
|
212
|
+
|
|
213
|
+
export declare type PluginIcon = {
|
|
214
|
+
type: 'link';
|
|
215
|
+
link: string;
|
|
216
|
+
};
|
|
217
|
+
|
|
218
|
+
export declare type PluginManifest = {
|
|
219
|
+
name: string;
|
|
220
|
+
version: string;
|
|
221
|
+
description: string;
|
|
222
|
+
author: string;
|
|
223
|
+
main?: string;
|
|
224
|
+
nuclear?: {
|
|
225
|
+
displayName?: string;
|
|
226
|
+
category?: string;
|
|
227
|
+
icon?: PluginIcon;
|
|
228
|
+
permissions?: string[];
|
|
229
|
+
};
|
|
230
|
+
};
|
|
231
|
+
|
|
232
|
+
export declare type PluginMetadata = {
|
|
233
|
+
id: string;
|
|
234
|
+
name: string;
|
|
235
|
+
displayName: string;
|
|
236
|
+
version: string;
|
|
237
|
+
description: string;
|
|
238
|
+
author: string;
|
|
239
|
+
category?: string;
|
|
240
|
+
icon?: PluginIcon;
|
|
241
|
+
permissions: string[];
|
|
242
|
+
};
|
|
243
|
+
|
|
244
|
+
export declare type ProviderDescriptor<K extends ProviderKind = ProviderKind> = {
|
|
245
|
+
id: string;
|
|
246
|
+
kind: K;
|
|
247
|
+
name: string;
|
|
248
|
+
pluginId?: string;
|
|
249
|
+
};
|
|
250
|
+
|
|
251
|
+
export declare type ProviderKind = 'metadata' | 'streaming' | 'lyrics' | (string & {});
|
|
252
|
+
|
|
253
|
+
export declare type ProviderRef = {
|
|
254
|
+
provider: string;
|
|
255
|
+
id: string;
|
|
256
|
+
url?: string;
|
|
257
|
+
};
|
|
258
|
+
|
|
259
|
+
declare class Providers {
|
|
260
|
+
#private;
|
|
261
|
+
constructor(host?: ProvidersHost);
|
|
262
|
+
register<T extends ProviderDescriptor>(p: T): string;
|
|
263
|
+
unregister(id: string): boolean;
|
|
264
|
+
list<K extends ProviderKind = ProviderKind>(kind?: K): ProviderDescriptor<K>[];
|
|
265
|
+
get<T extends ProviderDescriptor>(id: string): T | undefined;
|
|
266
|
+
}
|
|
267
|
+
|
|
268
|
+
export declare type ProvidersHost = {
|
|
269
|
+
register<T extends ProviderDescriptor>(provider: T): string;
|
|
270
|
+
unregister(providerId: string): boolean;
|
|
271
|
+
list<K extends ProviderKind = ProviderKind>(kind?: K): ProviderDescriptor<K>[];
|
|
272
|
+
get<T extends ProviderDescriptor>(providerId: string): T | undefined;
|
|
273
|
+
clear(): void;
|
|
274
|
+
};
|
|
275
|
+
|
|
276
|
+
export declare type QueueItem = {
|
|
277
|
+
id: string;
|
|
278
|
+
title: string;
|
|
279
|
+
artists: ArtistCredit[];
|
|
280
|
+
album?: string;
|
|
281
|
+
durationMs?: number;
|
|
282
|
+
artwork?: ArtworkSet;
|
|
283
|
+
note?: string;
|
|
284
|
+
addedAtIso?: string;
|
|
285
|
+
source: ProviderRef;
|
|
286
|
+
};
|
|
287
|
+
|
|
288
|
+
export declare type SearchCapability = SearchCategory | 'unified';
|
|
289
|
+
|
|
290
|
+
export declare type SearchCategory = 'artists' | 'albums' | 'tracks' | 'playlists';
|
|
291
|
+
|
|
292
|
+
export declare type SearchParams = {
|
|
293
|
+
query: string;
|
|
294
|
+
types?: SearchCategory[];
|
|
295
|
+
limit?: number;
|
|
296
|
+
};
|
|
297
|
+
|
|
298
|
+
export declare type SearchResults = {
|
|
299
|
+
artists?: ArtistRef[];
|
|
300
|
+
albums?: AlbumRef[];
|
|
301
|
+
tracks?: Track[];
|
|
302
|
+
playlists?: PlaylistRef[];
|
|
303
|
+
};
|
|
304
|
+
|
|
305
|
+
export declare type SettingCategory = string;
|
|
306
|
+
|
|
307
|
+
export declare type SettingDefinition = BooleanSettingDefinition | NumberSettingDefinition | StringSettingDefinition | EnumSettingDefinition;
|
|
308
|
+
|
|
309
|
+
declare class Settings {
|
|
310
|
+
#private;
|
|
311
|
+
constructor(host?: SettingsHost);
|
|
312
|
+
register(defs: SettingDefinition[], source: SettingSource): Promise<SettingsRegistrationResult>;
|
|
313
|
+
get<T extends SettingValue = SettingValue>(id: string): Promise<T | undefined>;
|
|
314
|
+
set<T extends SettingValue = SettingValue>(id: string, value: T): Promise<void>;
|
|
315
|
+
subscribe<T extends SettingValue = SettingValue>(id: string, listener: (value: T | undefined) => void): () => void;
|
|
316
|
+
}
|
|
317
|
+
|
|
318
|
+
export declare type SettingsHost = {
|
|
319
|
+
register(defs: SettingDefinition[], source: SettingSource): Promise<SettingsRegistrationResult>;
|
|
320
|
+
get<T extends SettingValue = SettingValue>(id: string): Promise<T | undefined>;
|
|
321
|
+
set<T extends SettingValue = SettingValue>(id: string, value: T): Promise<void>;
|
|
322
|
+
subscribe<T extends SettingValue = SettingValue>(id: string, listener: (value: T | undefined) => void): () => void;
|
|
323
|
+
};
|
|
324
|
+
|
|
325
|
+
export declare type SettingSource = {
|
|
326
|
+
type: 'core';
|
|
327
|
+
} | {
|
|
328
|
+
type: 'plugin';
|
|
329
|
+
pluginId: string;
|
|
330
|
+
pluginName?: string;
|
|
331
|
+
};
|
|
332
|
+
|
|
333
|
+
export declare type SettingsRegistration = {
|
|
334
|
+
settings: SettingDefinition[];
|
|
335
|
+
};
|
|
336
|
+
|
|
337
|
+
export declare type SettingsRegistrationResult = {
|
|
338
|
+
registered: string[];
|
|
339
|
+
};
|
|
340
|
+
|
|
341
|
+
export declare type SettingValue = boolean | number | string | undefined;
|
|
342
|
+
|
|
343
|
+
export declare type Stream = {
|
|
344
|
+
url: string;
|
|
345
|
+
protocol: 'file' | 'http' | 'https' | 'hls';
|
|
346
|
+
mimeType?: string;
|
|
347
|
+
bitrateKbps?: number;
|
|
348
|
+
codec?: string;
|
|
349
|
+
container?: string;
|
|
350
|
+
qualityLabel?: string;
|
|
351
|
+
durationMs?: number;
|
|
352
|
+
contentLengthBytes?: number;
|
|
353
|
+
source: ProviderRef;
|
|
354
|
+
};
|
|
355
|
+
|
|
356
|
+
export declare type StringFormat = 'text' | 'url' | 'path' | 'token' | 'language';
|
|
357
|
+
|
|
358
|
+
export declare type StringSettingDefinition = {
|
|
359
|
+
id: string;
|
|
360
|
+
title: string;
|
|
361
|
+
description?: string;
|
|
362
|
+
category: SettingCategory;
|
|
363
|
+
kind: 'string';
|
|
364
|
+
default?: string;
|
|
365
|
+
hidden?: boolean;
|
|
366
|
+
source?: SettingSource;
|
|
367
|
+
widget?: StringWidget;
|
|
368
|
+
format?: StringFormat;
|
|
369
|
+
pattern?: string;
|
|
370
|
+
minLength?: number;
|
|
371
|
+
maxLength?: number;
|
|
372
|
+
};
|
|
373
|
+
|
|
374
|
+
export declare type StringWidget = {
|
|
375
|
+
type: 'text';
|
|
376
|
+
placeholder?: string;
|
|
377
|
+
} | {
|
|
378
|
+
type: 'password';
|
|
379
|
+
placeholder?: string;
|
|
380
|
+
} | {
|
|
381
|
+
type: 'textarea';
|
|
382
|
+
placeholder?: string;
|
|
383
|
+
rows?: number;
|
|
384
|
+
};
|
|
385
|
+
|
|
386
|
+
export declare type Track = {
|
|
387
|
+
title: string;
|
|
388
|
+
artists: ArtistCredit[];
|
|
389
|
+
album?: AlbumRef;
|
|
390
|
+
durationMs?: number;
|
|
391
|
+
trackNumber?: number;
|
|
392
|
+
disc?: string;
|
|
393
|
+
artwork?: ArtworkSet;
|
|
394
|
+
tags?: string[];
|
|
395
|
+
source: ProviderRef;
|
|
396
|
+
localFile?: LocalFileInfo;
|
|
397
|
+
streams?: Stream[];
|
|
398
|
+
};
|
|
399
|
+
|
|
400
|
+
export declare type TrackRef = {
|
|
401
|
+
title: string;
|
|
402
|
+
artists: ArtistRef[];
|
|
403
|
+
artwork?: ArtworkSet;
|
|
404
|
+
source: ProviderRef;
|
|
405
|
+
};
|
|
406
|
+
|
|
407
|
+
export declare const useSetting: <T extends SettingValue = SettingValue>(host: SettingsHost | undefined, id: string) => readonly [T | undefined, (nextValue: T) => void];
|
|
408
|
+
|
|
409
|
+
export { }
|
package/dist/index.js
CHANGED
|
@@ -1,92 +1,120 @@
|
|
|
1
|
-
import { useState as
|
|
2
|
-
class
|
|
3
|
-
#
|
|
1
|
+
import { useState as g, useEffect as f, useMemo as b } from "react";
|
|
2
|
+
class p {
|
|
3
|
+
#e;
|
|
4
4
|
constructor(t) {
|
|
5
|
-
this.#
|
|
5
|
+
this.#e = t;
|
|
6
6
|
}
|
|
7
7
|
#t(t) {
|
|
8
|
-
const
|
|
9
|
-
if (!
|
|
8
|
+
const e = this.#e;
|
|
9
|
+
if (!e)
|
|
10
10
|
throw new Error("Providers host not available");
|
|
11
|
-
return t(
|
|
11
|
+
return t(e);
|
|
12
12
|
}
|
|
13
13
|
register(t) {
|
|
14
|
-
return this.#t((
|
|
14
|
+
return this.#t((e) => e.register(t));
|
|
15
15
|
}
|
|
16
16
|
unregister(t) {
|
|
17
|
-
return this.#t((
|
|
17
|
+
return this.#t((e) => e.unregister(t));
|
|
18
18
|
}
|
|
19
19
|
list(t) {
|
|
20
|
-
return this.#t((
|
|
20
|
+
return this.#t((e) => e.list(t));
|
|
21
21
|
}
|
|
22
22
|
get(t) {
|
|
23
|
-
return this.#t((
|
|
23
|
+
return this.#t((e) => e.get(t));
|
|
24
24
|
}
|
|
25
25
|
}
|
|
26
|
-
class
|
|
27
|
-
#
|
|
26
|
+
class d {
|
|
27
|
+
#e;
|
|
28
28
|
constructor(t) {
|
|
29
|
-
this.#
|
|
29
|
+
this.#e = t;
|
|
30
30
|
}
|
|
31
31
|
#t(t) {
|
|
32
|
-
const
|
|
33
|
-
if (!
|
|
32
|
+
const e = this.#e;
|
|
33
|
+
if (!e)
|
|
34
34
|
throw new Error("Settings host not available");
|
|
35
|
-
return t(
|
|
35
|
+
return t(e);
|
|
36
36
|
}
|
|
37
|
-
register(t,
|
|
38
|
-
return this.#t((
|
|
37
|
+
register(t, e) {
|
|
38
|
+
return this.#t((i) => i.register(t, e));
|
|
39
39
|
}
|
|
40
40
|
get(t) {
|
|
41
|
-
return this.#t((
|
|
41
|
+
return this.#t((e) => e.get(t));
|
|
42
42
|
}
|
|
43
|
-
set(t,
|
|
44
|
-
return this.#t((
|
|
43
|
+
set(t, e) {
|
|
44
|
+
return this.#t((i) => i.set(t, e));
|
|
45
45
|
}
|
|
46
|
-
subscribe(t,
|
|
47
|
-
return this.#t((
|
|
46
|
+
subscribe(t, e) {
|
|
47
|
+
return this.#t((i) => i.subscribe(t, e));
|
|
48
48
|
}
|
|
49
49
|
}
|
|
50
|
-
class
|
|
50
|
+
class v {
|
|
51
51
|
Settings;
|
|
52
52
|
Providers;
|
|
53
53
|
constructor(t) {
|
|
54
|
-
this.Settings = new
|
|
54
|
+
this.Settings = new d(t?.settingsHost), this.Providers = new p(t?.providersHost);
|
|
55
55
|
}
|
|
56
56
|
}
|
|
57
|
-
class
|
|
57
|
+
class w extends v {
|
|
58
58
|
}
|
|
59
|
-
class
|
|
59
|
+
class M extends Error {
|
|
60
60
|
constructor(t) {
|
|
61
61
|
super(`Missing capability: ${t}`), this.name = "MissingCapabilityError";
|
|
62
62
|
}
|
|
63
63
|
}
|
|
64
|
-
const
|
|
65
|
-
const [
|
|
66
|
-
|
|
67
|
-
if (!
|
|
64
|
+
const A = (s, t) => {
|
|
65
|
+
const [e, i] = g(void 0);
|
|
66
|
+
f(() => {
|
|
67
|
+
if (!s)
|
|
68
68
|
return;
|
|
69
|
-
let
|
|
70
|
-
const
|
|
71
|
-
|
|
69
|
+
let u = !0, c = !1;
|
|
70
|
+
const r = s.subscribe(t, (n) => {
|
|
71
|
+
u && (c = !0, i(n));
|
|
72
72
|
});
|
|
73
|
-
return
|
|
74
|
-
|
|
73
|
+
return s.get(t).then((n) => {
|
|
74
|
+
u && (c || i(n));
|
|
75
75
|
}), () => {
|
|
76
|
-
|
|
76
|
+
u = !1, r && r();
|
|
77
77
|
};
|
|
78
|
-
}, [t,
|
|
79
|
-
const
|
|
80
|
-
() => (
|
|
81
|
-
|
|
78
|
+
}, [t, s]);
|
|
79
|
+
const o = b(
|
|
80
|
+
() => (u) => {
|
|
81
|
+
s && s.set(t, u);
|
|
82
82
|
},
|
|
83
|
-
[t,
|
|
83
|
+
[t, s]
|
|
84
84
|
);
|
|
85
|
-
return [
|
|
85
|
+
return [e, o];
|
|
86
86
|
};
|
|
87
|
+
function E(s, t, e) {
|
|
88
|
+
if (!s?.items?.length)
|
|
89
|
+
return;
|
|
90
|
+
const i = s.items.filter((r) => !(r.purpose && r.purpose !== t || !r.url));
|
|
91
|
+
if (!i.length)
|
|
92
|
+
return s.items[0];
|
|
93
|
+
const o = (r) => !r.width || !r.height ? 1 : r.width / r.height, c = ((r) => {
|
|
94
|
+
switch (r) {
|
|
95
|
+
case "avatar":
|
|
96
|
+
case "thumbnail":
|
|
97
|
+
return 1;
|
|
98
|
+
case "cover":
|
|
99
|
+
return 1;
|
|
100
|
+
case "background":
|
|
101
|
+
return 16 / 9;
|
|
102
|
+
default:
|
|
103
|
+
return 1;
|
|
104
|
+
}
|
|
105
|
+
})(t);
|
|
106
|
+
return i.map((r) => {
|
|
107
|
+
const n = Math.min(r.width || 0, r.height || 0), a = Math.abs(o(r) - c), h = Math.abs(n - e), l = n < e ? e / n : 1;
|
|
108
|
+
return {
|
|
109
|
+
artwork: r,
|
|
110
|
+
score: (l > 1.5 ? -1e3 : 0) + -a * 50 + -h * 0.1
|
|
111
|
+
};
|
|
112
|
+
}).sort((r, n) => n.score - r.score)[0]?.artwork;
|
|
113
|
+
}
|
|
87
114
|
export {
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
115
|
+
M as MissingCapabilityError,
|
|
116
|
+
v as NuclearAPI,
|
|
117
|
+
w as NuclearPluginAPI,
|
|
118
|
+
E as pickArtwork,
|
|
119
|
+
A as useSetting
|
|
92
120
|
};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@nuclearplayer/plugin-sdk",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.14",
|
|
4
4
|
"description": "Plugin SDK for Nuclear music player",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -24,6 +24,7 @@
|
|
|
24
24
|
"tailwind-merge": "^3.3.1"
|
|
25
25
|
},
|
|
26
26
|
"devDependencies": {
|
|
27
|
+
"@microsoft/api-extractor": "^7.51.1",
|
|
27
28
|
"@tailwindcss/vite": "^4.1.11",
|
|
28
29
|
"@testing-library/jest-dom": "^6.6.4",
|
|
29
30
|
"@testing-library/react": "^16.3.0",
|
|
@@ -67,8 +68,9 @@
|
|
|
67
68
|
},
|
|
68
69
|
"scripts": {
|
|
69
70
|
"dev": "vite",
|
|
70
|
-
"build": "tsc && vite build",
|
|
71
|
-
"build:npm": "vite build --mode npm",
|
|
71
|
+
"build": "tsc && vite build && api-extractor run --local && pnpm clean:dts",
|
|
72
|
+
"build:npm": "tsc && vite build --mode npm && api-extractor run --local && pnpm clean:dts",
|
|
73
|
+
"clean:dts": "rm -rf dist/api dist/react dist/test dist/types dist/types.d.ts dist/*.d.ts.map dist/tsdoc-metadata.json",
|
|
72
74
|
"test": "vitest --run",
|
|
73
75
|
"test:watch": "vitest",
|
|
74
76
|
"test:coverage": "vitest --run --coverage",
|
package/dist/api/index.d.ts
DELETED
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
import { ProvidersHost } from '../types/providers';
|
|
2
|
-
import { SettingsHost } from '../types/settings';
|
|
3
|
-
import { Providers } from './providers';
|
|
4
|
-
import { Settings } from './settings';
|
|
5
|
-
export declare class NuclearAPI {
|
|
6
|
-
readonly Settings: Settings;
|
|
7
|
-
readonly Providers: Providers;
|
|
8
|
-
constructor(opts?: {
|
|
9
|
-
settingsHost?: SettingsHost;
|
|
10
|
-
providersHost?: ProvidersHost;
|
|
11
|
-
});
|
|
12
|
-
}
|
|
13
|
-
export declare class NuclearPluginAPI extends NuclearAPI {
|
|
14
|
-
}
|
|
15
|
-
//# sourceMappingURL=index.d.ts.map
|
package/dist/api/index.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/api/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEtC,qBAAa,UAAU;IACrB,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAC5B,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC;gBAElB,IAAI,CAAC,EAAE;QACjB,YAAY,CAAC,EAAE,YAAY,CAAC;QAC5B,aAAa,CAAC,EAAE,aAAa,CAAC;KAC/B;CAIF;AAED,qBAAa,gBAAiB,SAAQ,UAAU;CAAG"}
|
package/dist/api/providers.d.ts
DELETED
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
import { ProvidersHost } from '../types/providers';
|
|
2
|
-
import { ProviderDescriptor, ProviderKind } from '../types/search';
|
|
3
|
-
export declare class Providers {
|
|
4
|
-
#private;
|
|
5
|
-
constructor(host?: ProvidersHost);
|
|
6
|
-
register<T extends ProviderDescriptor>(p: T): string;
|
|
7
|
-
unregister(id: string): boolean;
|
|
8
|
-
list<K extends ProviderKind = ProviderKind>(kind?: K): ProviderDescriptor<K>[];
|
|
9
|
-
get<T extends ProviderDescriptor>(id: string): T | undefined;
|
|
10
|
-
}
|
|
11
|
-
//# sourceMappingURL=providers.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"providers.d.ts","sourceRoot":"","sources":["../../src/api/providers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,KAAK,EAAE,kBAAkB,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAExE,qBAAa,SAAS;;gBAGR,IAAI,CAAC,EAAE,aAAa;IAYhC,QAAQ,CAAC,CAAC,SAAS,kBAAkB,EAAE,CAAC,EAAE,CAAC;IAI3C,UAAU,CAAC,EAAE,EAAE,MAAM;IAIrB,IAAI,CAAC,CAAC,SAAS,YAAY,GAAG,YAAY,EAAE,IAAI,CAAC,EAAE,CAAC;IAIpD,GAAG,CAAC,CAAC,SAAS,kBAAkB,EAAE,EAAE,EAAE,MAAM;CAG7C"}
|
package/dist/api/settings.d.ts
DELETED
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
import { SettingDefinition, SettingsHost, SettingSource, SettingValue } from '../types/settings';
|
|
2
|
-
export declare class Settings {
|
|
3
|
-
#private;
|
|
4
|
-
constructor(host?: SettingsHost);
|
|
5
|
-
register(defs: SettingDefinition[], source: SettingSource): Promise<import('..').SettingsRegistrationResult>;
|
|
6
|
-
get<T extends SettingValue = SettingValue>(id: string): Promise<T | undefined>;
|
|
7
|
-
set<T extends SettingValue = SettingValue>(id: string, value: T): Promise<void>;
|
|
8
|
-
subscribe<T extends SettingValue = SettingValue>(id: string, listener: (value: T | undefined) => void): () => void;
|
|
9
|
-
}
|
|
10
|
-
//# sourceMappingURL=settings.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"settings.d.ts","sourceRoot":"","sources":["../../src/api/settings.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,iBAAiB,EACjB,YAAY,EACZ,aAAa,EACb,YAAY,EACb,MAAM,mBAAmB,CAAC;AAE3B,qBAAa,QAAQ;;gBAGP,IAAI,CAAC,EAAE,YAAY;IAY/B,QAAQ,CAAC,IAAI,EAAE,iBAAiB,EAAE,EAAE,MAAM,EAAE,aAAa;IAIzD,GAAG,CAAC,CAAC,SAAS,YAAY,GAAG,YAAY,EAAE,EAAE,EAAE,MAAM;IAIrD,GAAG,CAAC,CAAC,SAAS,YAAY,GAAG,YAAY,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;IAI/D,SAAS,CAAC,CAAC,SAAS,YAAY,GAAG,YAAY,EAC7C,EAAE,EAAE,MAAM,EACV,QAAQ,EAAE,CAAC,KAAK,EAAE,CAAC,GAAG,SAAS,KAAK,IAAI;CAI3C"}
|
package/dist/index.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AACrD,cAAc,SAAS,CAAC;AACxB,cAAc,kBAAkB,CAAC;AACjC,cAAc,gBAAgB,CAAC;AAC/B,YAAY,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC"}
|
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
import { SettingsHost, SettingValue } from '../types/settings';
|
|
2
|
-
export declare const useSetting: <T extends SettingValue = SettingValue>(host: SettingsHost | undefined, id: string) => readonly [T | undefined, (nextValue: T) => void];
|
|
3
|
-
//# sourceMappingURL=useSetting.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"useSetting.d.ts","sourceRoot":"","sources":["../../src/react/useSetting.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEpE,eAAO,MAAM,UAAU,GAAI,CAAC,SAAS,YAAY,GAAG,YAAY,EAC9D,MAAM,YAAY,GAAG,SAAS,EAC9B,IAAI,MAAM,0CAkCU,CAAC,UAUtB,CAAC"}
|
package/dist/test/setup.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
//# sourceMappingURL=setup.d.ts.map
|
package/dist/test/setup.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../../src/test/setup.ts"],"names":[],"mappings":"AAAA,OAAO,2BAA2B,CAAC"}
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
import { SettingDefinition, SettingsHost, SettingSource, SettingValue } from '../../types/settings';
|
|
2
|
-
export declare class InMemorySettingsHost implements SettingsHost {
|
|
3
|
-
private definitions;
|
|
4
|
-
private values;
|
|
5
|
-
private listeners;
|
|
6
|
-
private readonly source;
|
|
7
|
-
constructor(source: SettingSource);
|
|
8
|
-
private fullyQualified;
|
|
9
|
-
register(definitions: SettingDefinition[], _source: SettingSource): Promise<{
|
|
10
|
-
registered: string[];
|
|
11
|
-
}>;
|
|
12
|
-
get<T extends SettingValue = SettingValue>(id: string): Promise<T | undefined>;
|
|
13
|
-
set<T extends SettingValue = SettingValue>(id: string, value: T): Promise<void>;
|
|
14
|
-
subscribe<T extends SettingValue = SettingValue>(id: string, listener: (value: T | undefined) => void): () => void;
|
|
15
|
-
}
|
|
16
|
-
//# sourceMappingURL=inMemorySettingsHost.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"inMemorySettingsHost.d.ts","sourceRoot":"","sources":["../../../src/test/utils/inMemorySettingsHost.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,iBAAiB,EACjB,YAAY,EACZ,aAAa,EACb,YAAY,EACb,MAAM,sBAAsB,CAAC;AAE9B,qBAAa,oBAAqB,YAAW,YAAY;IACvD,OAAO,CAAC,WAAW,CAAwC;IAC3D,OAAO,CAAC,MAAM,CAAmC;IACjD,OAAO,CAAC,SAAS,CAGb;IACJ,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAgB;gBAE3B,MAAM,EAAE,aAAa;IAIjC,OAAO,CAAC,cAAc;IAOhB,QAAQ,CAAC,WAAW,EAAE,iBAAiB,EAAE,EAAE,OAAO,EAAE,aAAa;;;IAsBjE,GAAG,CAAC,CAAC,SAAS,YAAY,GAAG,YAAY,EAAE,EAAE,EAAE,MAAM;IAKrD,GAAG,CAAC,CAAC,SAAS,YAAY,GAAG,YAAY,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;IAWrE,SAAS,CAAC,CAAC,SAAS,YAAY,GAAG,YAAY,EAC7C,EAAE,EAAE,MAAM,EACV,QAAQ,EAAE,CAAC,KAAK,EAAE,CAAC,GAAG,SAAS,KAAK,IAAI;CAmB3C"}
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
import { ProviderDescriptor, ProviderKind } from './search';
|
|
2
|
-
export type ProvidersHost = {
|
|
3
|
-
register<T extends ProviderDescriptor>(provider: T): string;
|
|
4
|
-
unregister(providerId: string): boolean;
|
|
5
|
-
list<K extends ProviderKind = ProviderKind>(kind?: K): ProviderDescriptor<K>[];
|
|
6
|
-
get<T extends ProviderDescriptor>(providerId: string): T | undefined;
|
|
7
|
-
clear(): void;
|
|
8
|
-
};
|
|
9
|
-
//# sourceMappingURL=providers.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"providers.d.ts","sourceRoot":"","sources":["../../src/types/providers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAEjE,MAAM,MAAM,aAAa,GAAG;IAC1B,QAAQ,CAAC,CAAC,SAAS,kBAAkB,EAAE,QAAQ,EAAE,CAAC,GAAG,MAAM,CAAC;IAC5D,UAAU,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC;IACxC,IAAI,CAAC,CAAC,SAAS,YAAY,GAAG,YAAY,EACxC,IAAI,CAAC,EAAE,CAAC,GACP,kBAAkB,CAAC,CAAC,CAAC,EAAE,CAAC;IAC3B,GAAG,CAAC,CAAC,SAAS,kBAAkB,EAAE,UAAU,EAAE,MAAM,GAAG,CAAC,GAAG,SAAS,CAAC;IACrE,KAAK,IAAI,IAAI,CAAC;CACf,CAAC"}
|
package/dist/types/search.d.ts
DELETED
|
@@ -1,40 +0,0 @@
|
|
|
1
|
-
import { Album, AlbumRef, Artist, ArtistRef, PlaylistRef, Track, TrackRef } from '@nuclearplayer/model';
|
|
2
|
-
export type SearchCategory = 'artists' | 'albums' | 'tracks' | 'playlists';
|
|
3
|
-
export type SearchCapability = SearchCategory | 'unified';
|
|
4
|
-
export type ArtistMetadataCapability = 'artistDetails' | 'artistAlbums' | 'artistTopTracks' | 'artistRelatedArtists';
|
|
5
|
-
export type SearchParams = {
|
|
6
|
-
query: string;
|
|
7
|
-
types?: SearchCategory[];
|
|
8
|
-
limit?: number;
|
|
9
|
-
};
|
|
10
|
-
export type SearchResults = {
|
|
11
|
-
artists?: ArtistRef[];
|
|
12
|
-
albums?: AlbumRef[];
|
|
13
|
-
tracks?: Track[];
|
|
14
|
-
playlists?: PlaylistRef[];
|
|
15
|
-
};
|
|
16
|
-
export type ProviderKind = 'metadata' | 'streaming' | 'lyrics' | (string & {});
|
|
17
|
-
export type ProviderDescriptor<K extends ProviderKind = ProviderKind> = {
|
|
18
|
-
id: string;
|
|
19
|
-
kind: K;
|
|
20
|
-
name: string;
|
|
21
|
-
pluginId?: string;
|
|
22
|
-
};
|
|
23
|
-
export type MetadataProvider = ProviderDescriptor<'metadata'> & {
|
|
24
|
-
searchCapabilities?: SearchCapability[];
|
|
25
|
-
artistMetadataCapabilities?: ArtistMetadataCapability[];
|
|
26
|
-
search?: (params: SearchParams) => Promise<SearchResults>;
|
|
27
|
-
searchArtists?: (params: Omit<SearchParams, 'types'>) => Promise<ArtistRef[]>;
|
|
28
|
-
searchAlbums?: (params: Omit<SearchParams, 'types'>) => Promise<AlbumRef[]>;
|
|
29
|
-
searchTracks?: (params: Omit<SearchParams, 'types'>) => Promise<Track[]>;
|
|
30
|
-
searchPlaylists?: (params: Omit<SearchParams, 'types'>) => Promise<PlaylistRef[]>;
|
|
31
|
-
fetchArtistDetails?: (query: string) => Promise<Artist>;
|
|
32
|
-
fetchAlbumDetails?: (query: string) => Promise<Album>;
|
|
33
|
-
fetchArtistAlbums?: (artistId: string) => Promise<AlbumRef[]>;
|
|
34
|
-
fetchArtistTopTracks?: (artistId: string) => Promise<TrackRef[]>;
|
|
35
|
-
fetchArtistRelatedArtists?: (artistId: string) => Promise<ArtistRef[]>;
|
|
36
|
-
};
|
|
37
|
-
export declare class MissingCapabilityError extends Error {
|
|
38
|
-
constructor(capability: string);
|
|
39
|
-
}
|
|
40
|
-
//# sourceMappingURL=search.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../../src/types/search.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,KAAK,EACL,QAAQ,EACR,MAAM,EACN,SAAS,EACT,WAAW,EACX,KAAK,EACL,QAAQ,EACT,MAAM,sBAAsB,CAAC;AAE9B,MAAM,MAAM,cAAc,GAAG,SAAS,GAAG,QAAQ,GAAG,QAAQ,GAAG,WAAW,CAAC;AAC3E,MAAM,MAAM,gBAAgB,GAAG,cAAc,GAAG,SAAS,CAAC;AAE1D,MAAM,MAAM,wBAAwB,GAChC,eAAe,GACf,cAAc,GACd,iBAAiB,GACjB,sBAAsB,CAAC;AAE3B,MAAM,MAAM,YAAY,GAAG;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,cAAc,EAAE,CAAC;IACzB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG;IAC1B,OAAO,CAAC,EAAE,SAAS,EAAE,CAAC;IACtB,MAAM,CAAC,EAAE,QAAQ,EAAE,CAAC;IACpB,MAAM,CAAC,EAAE,KAAK,EAAE,CAAC;IACjB,SAAS,CAAC,EAAE,WAAW,EAAE,CAAC;CAC3B,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG,UAAU,GAAG,WAAW,GAAG,QAAQ,GAAG,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC;AAE/E,MAAM,MAAM,kBAAkB,CAAC,CAAC,SAAS,YAAY,GAAG,YAAY,IAAI;IACtE,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,CAAC,CAAC;IACR,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG,kBAAkB,CAAC,UAAU,CAAC,GAAG;IAC9D,kBAAkB,CAAC,EAAE,gBAAgB,EAAE,CAAC;IACxC,0BAA0B,CAAC,EAAE,wBAAwB,EAAE,CAAC;IACxD,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,YAAY,KAAK,OAAO,CAAC,aAAa,CAAC,CAAC;IAC1D,aAAa,CAAC,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC,YAAY,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC;IAC9E,YAAY,CAAC,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC,YAAY,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC;IAC5E,YAAY,CAAC,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC,YAAY,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;IACzE,eAAe,CAAC,EAAE,CAChB,MAAM,EAAE,IAAI,CAAC,YAAY,EAAE,OAAO,CAAC,KAChC,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC;IAE5B,kBAAkB,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IACxD,iBAAiB,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,KAAK,CAAC,CAAC;IACtD,iBAAiB,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC;IAC9D,oBAAoB,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC;IACjE,yBAAyB,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC;CACxE,CAAC;AAEF,qBAAa,sBAAuB,SAAQ,KAAK;gBACnC,UAAU,EAAE,MAAM;CAI/B"}
|
package/dist/types/settings.d.ts
DELETED
|
@@ -1,113 +0,0 @@
|
|
|
1
|
-
export type SettingSource = {
|
|
2
|
-
type: 'core';
|
|
3
|
-
} | {
|
|
4
|
-
type: 'plugin';
|
|
5
|
-
pluginId: string;
|
|
6
|
-
pluginName?: string;
|
|
7
|
-
};
|
|
8
|
-
export type SettingCategory = string;
|
|
9
|
-
export type BooleanWidget = {
|
|
10
|
-
type: 'toggle';
|
|
11
|
-
};
|
|
12
|
-
export type NumberWidget = {
|
|
13
|
-
type: 'slider';
|
|
14
|
-
min?: number;
|
|
15
|
-
max?: number;
|
|
16
|
-
step?: number;
|
|
17
|
-
unit?: string;
|
|
18
|
-
} | {
|
|
19
|
-
type: 'number-input';
|
|
20
|
-
min?: number;
|
|
21
|
-
max?: number;
|
|
22
|
-
step?: number;
|
|
23
|
-
unit?: string;
|
|
24
|
-
};
|
|
25
|
-
export type StringWidget = {
|
|
26
|
-
type: 'text';
|
|
27
|
-
placeholder?: string;
|
|
28
|
-
} | {
|
|
29
|
-
type: 'password';
|
|
30
|
-
placeholder?: string;
|
|
31
|
-
} | {
|
|
32
|
-
type: 'textarea';
|
|
33
|
-
placeholder?: string;
|
|
34
|
-
rows?: number;
|
|
35
|
-
};
|
|
36
|
-
export type EnumWidget = {
|
|
37
|
-
type: 'select';
|
|
38
|
-
} | {
|
|
39
|
-
type: 'radio';
|
|
40
|
-
};
|
|
41
|
-
export type BooleanSettingDefinition = {
|
|
42
|
-
id: string;
|
|
43
|
-
title: string;
|
|
44
|
-
description?: string;
|
|
45
|
-
category: SettingCategory;
|
|
46
|
-
kind: 'boolean';
|
|
47
|
-
default?: boolean;
|
|
48
|
-
hidden?: boolean;
|
|
49
|
-
source?: SettingSource;
|
|
50
|
-
widget?: BooleanWidget;
|
|
51
|
-
};
|
|
52
|
-
export type NumberSettingDefinition = {
|
|
53
|
-
id: string;
|
|
54
|
-
title: string;
|
|
55
|
-
description?: string;
|
|
56
|
-
category: SettingCategory;
|
|
57
|
-
kind: 'number';
|
|
58
|
-
default?: number;
|
|
59
|
-
hidden?: boolean;
|
|
60
|
-
source?: SettingSource;
|
|
61
|
-
widget?: NumberWidget;
|
|
62
|
-
min?: number;
|
|
63
|
-
max?: number;
|
|
64
|
-
step?: number;
|
|
65
|
-
unit?: string;
|
|
66
|
-
};
|
|
67
|
-
export type StringFormat = 'text' | 'url' | 'path' | 'token' | 'language';
|
|
68
|
-
export type StringSettingDefinition = {
|
|
69
|
-
id: string;
|
|
70
|
-
title: string;
|
|
71
|
-
description?: string;
|
|
72
|
-
category: SettingCategory;
|
|
73
|
-
kind: 'string';
|
|
74
|
-
default?: string;
|
|
75
|
-
hidden?: boolean;
|
|
76
|
-
source?: SettingSource;
|
|
77
|
-
widget?: StringWidget;
|
|
78
|
-
format?: StringFormat;
|
|
79
|
-
pattern?: string;
|
|
80
|
-
minLength?: number;
|
|
81
|
-
maxLength?: number;
|
|
82
|
-
};
|
|
83
|
-
export type EnumOption = {
|
|
84
|
-
value: string;
|
|
85
|
-
label: string;
|
|
86
|
-
};
|
|
87
|
-
export type EnumSettingDefinition = {
|
|
88
|
-
id: string;
|
|
89
|
-
title: string;
|
|
90
|
-
description?: string;
|
|
91
|
-
category: SettingCategory;
|
|
92
|
-
kind: 'enum';
|
|
93
|
-
options: EnumOption[];
|
|
94
|
-
default?: string;
|
|
95
|
-
hidden?: boolean;
|
|
96
|
-
source?: SettingSource;
|
|
97
|
-
widget?: EnumWidget;
|
|
98
|
-
};
|
|
99
|
-
export type SettingDefinition = BooleanSettingDefinition | NumberSettingDefinition | StringSettingDefinition | EnumSettingDefinition;
|
|
100
|
-
export type SettingValue = boolean | number | string | undefined;
|
|
101
|
-
export type SettingsRegistration = {
|
|
102
|
-
settings: SettingDefinition[];
|
|
103
|
-
};
|
|
104
|
-
export type SettingsRegistrationResult = {
|
|
105
|
-
registered: string[];
|
|
106
|
-
};
|
|
107
|
-
export type SettingsHost = {
|
|
108
|
-
register(defs: SettingDefinition[], source: SettingSource): Promise<SettingsRegistrationResult>;
|
|
109
|
-
get<T extends SettingValue = SettingValue>(id: string): Promise<T | undefined>;
|
|
110
|
-
set<T extends SettingValue = SettingValue>(id: string, value: T): Promise<void>;
|
|
111
|
-
subscribe<T extends SettingValue = SettingValue>(id: string, listener: (value: T | undefined) => void): () => void;
|
|
112
|
-
};
|
|
113
|
-
//# sourceMappingURL=settings.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"settings.d.ts","sourceRoot":"","sources":["../../src/types/settings.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
DELETED
|
@@ -1,41 +0,0 @@
|
|
|
1
|
-
import { NuclearPluginAPI } from './api';
|
|
2
|
-
export type PluginIcon = {
|
|
3
|
-
type: 'link';
|
|
4
|
-
link: string;
|
|
5
|
-
};
|
|
6
|
-
export type PluginManifest = {
|
|
7
|
-
name: string;
|
|
8
|
-
version: string;
|
|
9
|
-
description: string;
|
|
10
|
-
author: string;
|
|
11
|
-
main?: string;
|
|
12
|
-
nuclear?: {
|
|
13
|
-
displayName?: string;
|
|
14
|
-
category?: string;
|
|
15
|
-
icon?: PluginIcon;
|
|
16
|
-
permissions?: string[];
|
|
17
|
-
};
|
|
18
|
-
};
|
|
19
|
-
export type NuclearPlugin = {
|
|
20
|
-
onLoad?(api: NuclearPluginAPI): void | Promise<void>;
|
|
21
|
-
onUnload?(): void | Promise<void>;
|
|
22
|
-
onEnable?(api: NuclearPluginAPI): void | Promise<void>;
|
|
23
|
-
onDisable?(): void | Promise<void>;
|
|
24
|
-
};
|
|
25
|
-
export type PluginMetadata = {
|
|
26
|
-
id: string;
|
|
27
|
-
name: string;
|
|
28
|
-
displayName: string;
|
|
29
|
-
version: string;
|
|
30
|
-
description: string;
|
|
31
|
-
author: string;
|
|
32
|
-
category?: string;
|
|
33
|
-
icon?: PluginIcon;
|
|
34
|
-
permissions: string[];
|
|
35
|
-
};
|
|
36
|
-
export type LoadedPlugin = {
|
|
37
|
-
metadata: PluginMetadata;
|
|
38
|
-
instance: NuclearPlugin;
|
|
39
|
-
path: string;
|
|
40
|
-
};
|
|
41
|
-
//# sourceMappingURL=types.d.ts.map
|
package/dist/types.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,OAAO,CAAC;AAE9C,MAAM,MAAM,UAAU,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AAExD,MAAM,MAAM,cAAc,GAAG;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE;QACR,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,IAAI,CAAC,EAAE,UAAU,CAAC;QAClB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;KACxB,CAAC;CACH,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG;IAC1B,MAAM,CAAC,CAAC,GAAG,EAAE,gBAAgB,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACrD,QAAQ,CAAC,IAAI,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAClC,QAAQ,CAAC,CAAC,GAAG,EAAE,gBAAgB,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACvD,SAAS,CAAC,IAAI,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACpC,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,WAAW,EAAE,MAAM,EAAE,CAAC;CACvB,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG;IACzB,QAAQ,EAAE,cAAc,CAAC;IACzB,QAAQ,EAAE,aAAa,CAAC;IACxB,IAAI,EAAE,MAAM,CAAC;CACd,CAAC"}
|