@vestra-player/sdk 1.5.16 → 1.5.17
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 +11 -0
- package/dist/capabilities.js +0 -1
- package/dist/plugin/packages.js +0 -4
- package/dist/plugin/testing.d.ts +1 -10
- package/dist/plugin/testing.js +3 -18
- package/dist/plugin/types.d.ts +0 -19
- package/dist/wire.d.ts +1 -12
- package/dist/wire.js +0 -9
- package/llms-full.txt +12 -29
- package/llms.txt +20 -20
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,16 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 1.5.17
|
|
4
|
+
|
|
5
|
+
**Package rollback is removed**, as announced in 1.5.16: the player keeps no previous plugin version. `apiVersion` stays `vestra/1` (a patch release, as when 1.5.8 removed `PackageCandidate.trial()`); plugins that do not manage other plugins need no change. A plugin manager that still calls `rollback` or reads `previousVersion` no longer compiles. Migration: [Migrating off package rollback](docs/how-to/rollback-migration.md).
|
|
6
|
+
|
|
7
|
+
- **Removed: `Packages.rollback`** and the wire method `packages.rollback`. The player already answers the method with `unsupported` ("unknown package method"). To go back to an older version of a third-party plugin, the user uninstalls it and installs that version's `.vxp`.
|
|
8
|
+
- **Removed: `PluginInfo.previousVersion`** and the wire field `PackageInfo.previousVersion`; `packages.list` and `packages.changed` no longer carry it.
|
|
9
|
+
- **Removed from `CAPABILITY_INFO["plugins.manage"].apis`**: `"Packages.rollback"`; the capability is unchanged otherwise.
|
|
10
|
+
- **`TestHost`**: `host.packages` entries have no `previousVersion` field (delete it from test data), and there is no `packages.rollback` handler.
|
|
11
|
+
- Unchanged: `revisionConflict`, and the `restoring` and `failedDegraded` statuses of `PackageChange`, which belong to recovery from a failed install.
|
|
12
|
+
- Docs: the Capabilities reference loses the deprecation note; *Migrating off package rollback* says what 1.5.17 removed; `llms.txt` and `llms-full.txt` regenerated.
|
|
13
|
+
|
|
3
14
|
## 1.5.16
|
|
4
15
|
|
|
5
16
|
**Package rollback is deprecated: the player keeps no previous plugin version.** `apiVersion` stays `vestra/1`; code still compiles, and plugins that do not manage other plugins need no change. 1.5.17 removes the deprecated symbols, as 1.5.8 removed `PackageCandidate.trial()` at patch level. Migration: [Migrating off package rollback](docs/how-to/rollback-migration.md).
|
package/dist/capabilities.js
CHANGED
package/dist/plugin/packages.js
CHANGED
|
@@ -126,9 +126,6 @@ export const packages = (scope) => ({
|
|
|
126
126
|
const checked = await scope.runtime.host.packages.validateArchive(path);
|
|
127
127
|
return candidate(scope, path, checked);
|
|
128
128
|
},
|
|
129
|
-
// Deprecated (removed in 1.5.17): still forwarded, so the player's
|
|
130
|
-
// `unsupported` ("unknown package method") reaches the caller.
|
|
131
|
-
rollback: (id) => change(scope, (requestId, revision) => scope.runtime.host.packages.rollback(id, revision, requestId), id),
|
|
132
129
|
list: async () => (await scope.runtime.host.packages.list()).map(info),
|
|
133
130
|
onChange(listener) {
|
|
134
131
|
const watch = scope.runtime.on("packages.changed", (data) => scope.run(listener, data.map(info)), null);
|
|
@@ -154,7 +151,6 @@ const info = (plugin) => Object.freeze({
|
|
|
154
151
|
error: plugin.error,
|
|
155
152
|
capabilities: [...plugin.capabilities],
|
|
156
153
|
directory: plugin.directory,
|
|
157
|
-
previousVersion: plugin.previousVersion ?? null,
|
|
158
154
|
builtin: plugin.builtin === true,
|
|
159
155
|
source: plugin.source ? Object.freeze({ ...plugin.source }) : null,
|
|
160
156
|
dataDirectory: plugin.dataDirectory ?? null,
|
package/dist/plugin/testing.d.ts
CHANGED
|
@@ -1311,9 +1311,7 @@ export declare class TestHost implements Transport {
|
|
|
1311
1311
|
/**
|
|
1312
1312
|
* What `packages.list` reports; `setEnabled`, `uninstall` and `install`
|
|
1313
1313
|
* update it. `builtin`, `source` and `dataDirectory` are optional here
|
|
1314
|
-
* (default `false`, `null`, `null`).
|
|
1315
|
-
* plugin with `previousVersion: null` and answers `packages.rollback` with
|
|
1316
|
-
* `unsupported` (since 1.5.16).
|
|
1314
|
+
* (default `false`, `null`, `null`).
|
|
1317
1315
|
*/
|
|
1318
1316
|
packages: {
|
|
1319
1317
|
/** The plugin's manifest id. */
|
|
@@ -1330,13 +1328,6 @@ export declare class TestHost implements Transport {
|
|
|
1330
1328
|
capabilities: string[];
|
|
1331
1329
|
/** The package directory. */
|
|
1332
1330
|
directory: string;
|
|
1333
|
-
/**
|
|
1334
|
-
* Ignored: `packages.list` always reports `null`. Still required in
|
|
1335
|
-
* 1.5.16 so that test data shaped like a `PluginInfo` keeps compiling.
|
|
1336
|
-
*
|
|
1337
|
-
* @deprecated Removed in 1.5.17 with `PluginInfo.previousVersion`.
|
|
1338
|
-
*/
|
|
1339
|
-
previousVersion: string | null;
|
|
1340
1331
|
/** Shipped with the player: `uninstall` and `install` are `unsupported`. */
|
|
1341
1332
|
builtin?: boolean;
|
|
1342
1333
|
/** Where it was installed from. */
|
package/dist/plugin/testing.js
CHANGED
|
@@ -1862,9 +1862,7 @@ export class TestHost {
|
|
|
1862
1862
|
/**
|
|
1863
1863
|
* What `packages.list` reports; `setEnabled`, `uninstall` and `install`
|
|
1864
1864
|
* update it. `builtin`, `source` and `dataDirectory` are optional here
|
|
1865
|
-
* (default `false`, `null`, `null`).
|
|
1866
|
-
* plugin with `previousVersion: null` and answers `packages.rollback` with
|
|
1867
|
-
* `unsupported` (since 1.5.16).
|
|
1865
|
+
* (default `false`, `null`, `null`).
|
|
1868
1866
|
*/
|
|
1869
1867
|
packages = [];
|
|
1870
1868
|
/** Every `packages.setEnabled` / `uninstall` / `install`, newest last. */
|
|
@@ -1921,14 +1919,7 @@ export class TestHost {
|
|
|
1921
1919
|
*/
|
|
1922
1920
|
setPackages(list) {
|
|
1923
1921
|
this.packages = list;
|
|
1924
|
-
this.emit("packages.changed", this
|
|
1925
|
-
}
|
|
1926
|
-
/** `packages.list` as the player sends it: no previous version is kept. */
|
|
1927
|
-
#listed() {
|
|
1928
|
-
return this.packages.map((entry) => ({
|
|
1929
|
-
...structuredClone(entry),
|
|
1930
|
-
previousVersion: null,
|
|
1931
|
-
}));
|
|
1922
|
+
this.emit("packages.changed", structuredClone(this.packages));
|
|
1932
1923
|
}
|
|
1933
1924
|
#split(key) {
|
|
1934
1925
|
const at = key.indexOf("/");
|
|
@@ -3162,7 +3153,7 @@ export class TestHost {
|
|
|
3162
3153
|
this.bindings.overlay.delete(`${p.plugin}/${p.command}`);
|
|
3163
3154
|
this.emit("bindings.changed", null);
|
|
3164
3155
|
},
|
|
3165
|
-
"packages.list": () => this
|
|
3156
|
+
"packages.list": () => structuredClone(this.packages),
|
|
3166
3157
|
"packages.setEnabled": (p) => {
|
|
3167
3158
|
const id = String(p.id);
|
|
3168
3159
|
if (id === this.manifestId && p.enabled === false)
|
|
@@ -3214,7 +3205,6 @@ export class TestHost {
|
|
|
3214
3205
|
error: null,
|
|
3215
3206
|
capabilities: [...manifest.capabilities],
|
|
3216
3207
|
directory: `/test-host/packages/${manifest.id}`,
|
|
3217
|
-
previousVersion: null,
|
|
3218
3208
|
builtin: false,
|
|
3219
3209
|
source,
|
|
3220
3210
|
dataDirectory: entry?.dataDirectory ?? null,
|
|
@@ -3242,11 +3232,6 @@ export class TestHost {
|
|
|
3242
3232
|
this.setPackages(this.packages.filter((each) => each.id !== id));
|
|
3243
3233
|
return { operationId: String(p.requestId), status: "committed" };
|
|
3244
3234
|
},
|
|
3245
|
-
// The player no longer keeps a previous version (SDK 1.5.16): the method
|
|
3246
|
-
// is gone and fails like any unknown package method.
|
|
3247
|
-
"packages.rollback": () => {
|
|
3248
|
-
throw new HostError("unsupported", "unknown package method");
|
|
3249
|
-
},
|
|
3250
3235
|
"ui.markdownScan": (p) => {
|
|
3251
3236
|
const text = String(p.text);
|
|
3252
3237
|
const images = [
|
package/dist/plugin/types.d.ts
CHANGED
|
@@ -4732,15 +4732,6 @@ export interface PluginInfo {
|
|
|
4732
4732
|
* under its own {@link Plugin.dataDirectory}.
|
|
4733
4733
|
*/
|
|
4734
4734
|
directory: string;
|
|
4735
|
-
/**
|
|
4736
|
-
* Always `null`: the player no longer keeps a previous version, and an
|
|
4737
|
-
* upgrade replaces the package.
|
|
4738
|
-
*
|
|
4739
|
-
* @deprecated Removed in 1.5.17. The player no longer keeps a previous
|
|
4740
|
-
* version, so this is always `null`. See
|
|
4741
|
-
* [Migrating off package rollback](../../docs/how-to/rollback-migration.md).
|
|
4742
|
-
*/
|
|
4743
|
-
previousVersion: string | null;
|
|
4744
4735
|
/**
|
|
4745
4736
|
* Shipped with the player: it can be disabled, not uninstalled or
|
|
4746
4737
|
* replaced. `false` from players before 0.2.0.
|
|
@@ -4839,16 +4830,6 @@ export interface Packages {
|
|
|
4839
4830
|
* fails with `reserved`, as in {@link Packages.validate}.
|
|
4840
4831
|
*/
|
|
4841
4832
|
validateArchive(file: string): Promise<PackageCandidate>;
|
|
4842
|
-
/**
|
|
4843
|
-
* Formerly restored a plugin's previous version (`plugins.manage`).
|
|
4844
|
-
*
|
|
4845
|
-
* @deprecated Removed in 1.5.17. The player no longer keeps a previous
|
|
4846
|
-
* version, so this always fails with `unsupported`. To go back to an older
|
|
4847
|
-
* version of a third-party plugin, the user uninstalls it and installs that
|
|
4848
|
-
* version's `.vxp`. See
|
|
4849
|
-
* [Migrating off package rollback](../../docs/how-to/rollback-migration.md).
|
|
4850
|
-
*/
|
|
4851
|
-
rollback(id: string): Promise<PackageChange>;
|
|
4852
4833
|
/** Every plugin: running, installed, and this run's development loads. No capability. */
|
|
4853
4834
|
list(): Promise<PluginInfo[]>;
|
|
4854
4835
|
/** The new list after any start, stop, failure, install or uninstall. No capability. */
|
package/dist/wire.d.ts
CHANGED
|
@@ -102,12 +102,6 @@ export interface PackageInfo {
|
|
|
102
102
|
error: string | null;
|
|
103
103
|
capabilities: string[];
|
|
104
104
|
directory: string;
|
|
105
|
-
/**
|
|
106
|
-
* Always `null` from players that ship with SDK 1.5.16 or later.
|
|
107
|
-
*
|
|
108
|
-
* @deprecated Removed in 1.5.17: the player keeps no previous version.
|
|
109
|
-
*/
|
|
110
|
-
previousVersion: string | null;
|
|
111
105
|
/** Player 0.2.0; absent from older players. */
|
|
112
106
|
builtin?: boolean;
|
|
113
107
|
source?: WireSource | null;
|
|
@@ -572,11 +566,6 @@ export declare function createWire(transport: Transport): {
|
|
|
572
566
|
source?: WireSource;
|
|
573
567
|
replace?: boolean;
|
|
574
568
|
}) => Promise<PackageOperation>;
|
|
575
|
-
/**
|
|
576
|
-
* @deprecated Removed in 1.5.17. The player no longer has this method and
|
|
577
|
-
* rejects it with `unsupported` ("unknown package method").
|
|
578
|
-
*/
|
|
579
|
-
rollback: (id: string, expectedRevision: number, requestId: string) => Promise<PackageOperation>;
|
|
580
569
|
operation: (operationId: string) => Promise<PackageOperation>;
|
|
581
570
|
cancel: (operationId: string) => Promise<PackageOperation>;
|
|
582
571
|
list: () => Promise<PackageInfo[]>;
|
|
@@ -602,7 +591,7 @@ export declare function createWire(transport: Transport): {
|
|
|
602
591
|
sampleTime?: number;
|
|
603
592
|
} | {
|
|
604
593
|
kind: "rawJpeg" | "processedJpeg";
|
|
605
|
-
sampleTime
|
|
594
|
+
sampleTime?: number;
|
|
606
595
|
quality?: number;
|
|
607
596
|
} | {
|
|
608
597
|
kind: "rawMp4" | "processedMp4";
|
package/dist/wire.js
CHANGED
|
@@ -278,15 +278,6 @@ export function createWire(transport) {
|
|
|
278
278
|
...(options.source === undefined ? {} : { source: options.source }),
|
|
279
279
|
...(options.replace ? { replace: true } : {}),
|
|
280
280
|
}),
|
|
281
|
-
/**
|
|
282
|
-
* @deprecated Removed in 1.5.17. The player no longer has this method and
|
|
283
|
-
* rejects it with `unsupported` ("unknown package method").
|
|
284
|
-
*/
|
|
285
|
-
rollback: (id, expectedRevision, requestId) => transport.request("packages.rollback", {
|
|
286
|
-
id,
|
|
287
|
-
expectedRevision,
|
|
288
|
-
requestId,
|
|
289
|
-
}),
|
|
290
281
|
operation: (operationId) => transport.request("packages.operation", {
|
|
291
282
|
operationId,
|
|
292
283
|
}),
|
package/llms-full.txt
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# @vestra-player/sdk 1.5.
|
|
1
|
+
# @vestra-player/sdk 1.5.17: full reference
|
|
2
2
|
|
|
3
3
|
> Everything needed to write a Vestra Player plugin (plugin API `vestra/1`): the guides, every public declaration of `@vestra-player/sdk` and `@vestra-player/sdk/testing` with its documentation, and the complete source of the example plugins. Generated from the SDK's sources by scripts/llms.mjs; the short index is llms.txt.
|
|
4
4
|
|
|
@@ -1840,22 +1840,22 @@ The store shows the newest version's manifest fields, so what you write there is
|
|
|
1840
1840
|
- **Before installing**, the user confirms a dialog that lists the capabilities; an update that adds capabilities lists the new ones. A plugin whose every version needs a newer player shows "needs Vestra Player x.y.z or later" instead of an install button.
|
|
1841
1841
|
- **The README** is rendered as Markdown; relative links and images resolve against the README's own address, and remote images are shown for the official repository.
|
|
1842
1842
|
|
|
1843
|
-
## How-to: Migrating off package rollback (1.5.16)
|
|
1843
|
+
## How-to: Migrating off package rollback (1.5.16, removed in 1.5.17)
|
|
1844
1844
|
|
|
1845
|
-
For plugins that manage other plugins (`plugins.manage`): stores, plugin managers, anything that
|
|
1845
|
+
For plugins that manage other plugins (`plugins.manage`): stores, plugin managers, anything that called `packages.rollback` or read `PluginInfo.previousVersion`. Both were deprecated in 1.5.16 and **removed in 1.5.17**: with 1.5.17 a remaining use is a TypeScript compile error. A plugin that only uses its own API needs no change.
|
|
1846
1846
|
|
|
1847
1847
|
#### What changed
|
|
1848
1848
|
|
|
1849
1849
|
The player no longer keeps a previous version of a plugin. An upgrade replaces the package, so there is nothing to roll back to:
|
|
1850
1850
|
|
|
1851
|
-
- `packages.rollback
|
|
1852
|
-
-
|
|
1851
|
+
- There is no `packages.rollback`: the player answers the wire method with `unsupported` ("unknown package method"), and SDK 1.5.17 no longer has it.
|
|
1852
|
+
- `packages.list()` and `packages.onChange` entries have no `previousVersion` (always `null` with SDK 1.5.16, removed in 1.5.17).
|
|
1853
1853
|
- Built-in plugins (`builtin: true`) run in place from the player installation. They can be disabled and enabled, never uninstalled or replaced; `uninstall` fails with `unsupported`. A built-in's `directory` is inside the installation (`<install resources>/plugins/<id>`) and read-only.
|
|
1854
1854
|
- Third-party plugins can still be uninstalled.
|
|
1855
1855
|
|
|
1856
1856
|
Why: built-ins now run from the read-only installation instead of a copy, and an upgrade replaces the package instead of keeping the old one beside it. Going back to an older version becomes an ordinary uninstall and install that the user starts.
|
|
1857
1857
|
|
|
1858
|
-
`TestHost` behaves the same way
|
|
1858
|
+
`TestHost` behaves the same way, so tests show it too.
|
|
1859
1859
|
|
|
1860
1860
|
#### 1. Remove rollback calls and `previousVersion` checks
|
|
1861
1861
|
|
|
@@ -1865,7 +1865,7 @@ Before:
|
|
|
1865
1865
|
if (info.previousVersion !== null) showButton("Roll back", () => plugin.packages.rollback(info.id));
|
|
1866
1866
|
```
|
|
1867
1867
|
|
|
1868
|
-
After: delete both. There is no replacement call; nothing on the player can restore an earlier package. Remove the button, menu item or command, and any state, text or test that depends on `previousVersion`.
|
|
1868
|
+
After: delete both. There is no replacement call; nothing on the player can restore an earlier package. Remove the button, menu item or command, and any state, text or test that depends on `previousVersion`. With SDK 1.5.17 the compiler finds every remaining use.
|
|
1869
1869
|
|
|
1870
1870
|
#### 2. Going back to an older version
|
|
1871
1871
|
|
|
@@ -1895,14 +1895,14 @@ for (const info of await plugin.packages.list()) {
|
|
|
1895
1895
|
|
|
1896
1896
|
#### 5. Tests
|
|
1897
1897
|
|
|
1898
|
-
`
|
|
1898
|
+
With SDK 1.5.17, `host.packages` entries have no `previousVersion` field: delete `previousVersion: null` (or any value) from test data, or the test no longer compiles. `TestHost` has no `packages.rollback`. Remove tests that exercised a rollback; there is nothing left to assert. (With 1.5.16 the field was still required but ignored, and `TestHost` answered rollback with `unsupported`.)
|
|
1899
1899
|
|
|
1900
1900
|
#### Timeline
|
|
1901
1901
|
|
|
1902
1902
|
| SDK | Player | What happens |
|
|
1903
1903
|
| --- | --- | --- |
|
|
1904
1904
|
| 1.5.16 | ships with it | `Packages.rollback` and `PluginInfo.previousVersion` (and the wire field) are `@deprecated`. The player and `TestHost` answer rollback with `unsupported` and list `previousVersion: null`. Code still compiles. |
|
|
1905
|
-
| 1.5.17 |
|
|
1905
|
+
| 1.5.17 | ships with it | **Removed:** `Packages.rollback`, `PluginInfo.previousVersion`, the wire method `packages.rollback` and the wire field `previousVersion`, `TestHost`'s `previousVersion` field and its `packages.rollback` handler, and `Packages.rollback` in the `plugins.manage` capability. Remaining uses are TypeScript compile errors. |
|
|
1906
1906
|
|
|
1907
1907
|
`apiVersion` stays `vestra/1` in both releases, as when 1.5.8 removed `PackageCandidate.trial()`.
|
|
1908
1908
|
|
|
@@ -1912,7 +1912,7 @@ for (const info of await plugin.packages.list()) {
|
|
|
1912
1912
|
- [ ] Built-ins offer only disable and enable.
|
|
1913
1913
|
- [ ] Nothing writes into a plugin's `directory`.
|
|
1914
1914
|
- [ ] No Undo after an install, no older-version install; older versions go through uninstall and a user-chosen `.vxp`.
|
|
1915
|
-
- [ ] Tests pass with SDK 1.5.
|
|
1915
|
+
- [ ] Tests compile and pass with SDK 1.5.17; no `previousVersion` is left in `host.packages` test data.
|
|
1916
1916
|
|
|
1917
1917
|
## Guideline: Interface guidelines
|
|
1918
1918
|
|
|
@@ -2176,7 +2176,7 @@ A plugin lists what it may do in the manifest's `capabilities` (Manifest). A cal
|
|
|
2176
2176
|
| `ui.window` | Windows.create | — | Open tool windows | |
|
|
2177
2177
|
| `ui.mount` | Panels.mount, Panels.bottom, Panels.sidebar, Panels.backdrop, PanelSlot.onChange, Panel.onChange, BackdropSlot.onChange | — | Show panels in the bottom bar, the sidebar or behind the video | |
|
|
2178
2178
|
| `ui.dialog` | Dialogs.confirm, Dialogs.openFile, Dialogs.openFiles, Dialogs.openDirectory, Dialogs.saveFile | — | Show file pickers and confirmations | |
|
|
2179
|
-
| `plugins.manage` | Packages.validate, Packages.validateArchive, Packages.
|
|
2179
|
+
| `plugins.manage` | Packages.validate, Packages.validateArchive, Packages.setEnabled, Packages.uninstall | — | Install, uninstall and disable other plugins | yes |
|
|
2180
2180
|
| `processing.video` | Plugin.video.filter, Plugin.video.view, Plugin.video.render | `playback.read` | Process the picture (filters, shaders) | |
|
|
2181
2181
|
| `processing.audio` | Plugin.audio.filter | `playback.read`, `events` | Process the sound | |
|
|
2182
2182
|
| `subtitles.read` | Subtitles.state, Subtitles.onChange, Subtitles.refresh | — | Read subtitles | |
|
|
@@ -2200,8 +2200,6 @@ A plugin lists what it may do in the manifest's `capabilities` (Manifest). A cal
|
|
|
2200
2200
|
- A file resolver (Resolvers.add with file types) also needs `producer.av`.
|
|
2201
2201
|
- Without `events`, Player.state is read at start and after the plugin's own operations, and `onChange` listeners do not fire for changes made elsewhere.
|
|
2202
2202
|
|
|
2203
|
-
**Deprecated:** Packages.rollback in the `plugins.manage` row (since 1.5.16; removed in 1.5.17). The player keeps no previous version, so it always fails with `unsupported`; see Migrating off package rollback.
|
|
2204
|
-
|
|
2205
2203
|
#### Without a capability
|
|
2206
2204
|
|
|
2207
2205
|
A member not in the table needs no capability: `plugin.tools`, `plugin.storage`, `plugin.system`, `plugin.app`, `plugin.ui` (images and Markdown), `plugin.i18n`, reading window.state, appearance.theme and packages.list. The table is `CAPABILITY_INFO`, which tests can import from `@vestra-player/sdk/testing` to check a manifest (CAPABILITY_INFO).
|
|
@@ -6009,11 +6007,6 @@ interface PluginInfo {
|
|
|
6009
6007
|
* The package directory (read its `manifest.json` for display fields). A built-in's directory is inside the player installation (`<install resources>/plugins/<id>`) and read-only: a plugin writes only under its own Plugin.dataDirectory.
|
|
6010
6008
|
*/
|
|
6011
6009
|
directory: string;
|
|
6012
|
-
/**
|
|
6013
|
-
* Always `null`: the player no longer keeps a previous version, and an upgrade replaces the package.
|
|
6014
|
-
* @deprecated Removed in 1.5.17. The player no longer keeps a previous version, so this is always `null`. See Migrating off package rollback.
|
|
6015
|
-
*/
|
|
6016
|
-
previousVersion: string | null;
|
|
6017
6010
|
/** Shipped with the player: it can be disabled, not uninstalled or replaced. `false` from players before 0.2.0. */
|
|
6018
6011
|
builtin: boolean;
|
|
6019
6012
|
/** Where an installed plugin came from; `null` for development loads. */
|
|
@@ -6087,11 +6080,6 @@ interface Packages {
|
|
|
6087
6080
|
* Validate a `.vxp` package file (`plugins.manage`, player 0.2.0): the same checks as Packages.validate after unpacking. Check the file's sha256 yourself before calling when you know it. A reserved id fails with `reserved`, as in Packages.validate.
|
|
6088
6081
|
*/
|
|
6089
6082
|
validateArchive(file: string): Promise<PackageCandidate>;
|
|
6090
|
-
/**
|
|
6091
|
-
* Formerly restored a plugin's previous version (`plugins.manage`).
|
|
6092
|
-
* @deprecated Removed in 1.5.17. The player no longer keeps a previous version, so this always fails with `unsupported`. To go back to an older version of a third-party plugin, the user uninstalls it and installs that version's `.vxp`. See Migrating off package rollback.
|
|
6093
|
-
*/
|
|
6094
|
-
rollback(id: string): Promise<PackageChange>;
|
|
6095
6083
|
/** Every plugin: running, installed, and this run's development loads. No capability. */
|
|
6096
6084
|
list(): Promise<PluginInfo[]>;
|
|
6097
6085
|
/** The new list after any start, stop, failure, install or uninstall. No capability. */
|
|
@@ -7411,7 +7399,7 @@ class TestHost implements Transport {
|
|
|
7411
7399
|
overlay: Map<string, string[]>;
|
|
7412
7400
|
};
|
|
7413
7401
|
/**
|
|
7414
|
-
* What `packages.list` reports; `setEnabled`, `uninstall` and `install` update it. `builtin`, `source` and `dataDirectory` are optional here (default `false`, `null`, `null`).
|
|
7402
|
+
* What `packages.list` reports; `setEnabled`, `uninstall` and `install` update it. `builtin`, `source` and `dataDirectory` are optional here (default `false`, `null`, `null`).
|
|
7415
7403
|
*/
|
|
7416
7404
|
packages: {
|
|
7417
7405
|
/** The plugin's manifest id. */
|
|
@@ -7428,11 +7416,6 @@ class TestHost implements Transport {
|
|
|
7428
7416
|
capabilities: string[];
|
|
7429
7417
|
/** The package directory. */
|
|
7430
7418
|
directory: string;
|
|
7431
|
-
/**
|
|
7432
|
-
* Ignored: `packages.list` always reports `null`. Still required in 1.5.16 so that test data shaped like a `PluginInfo` keeps compiling.
|
|
7433
|
-
* @deprecated Removed in 1.5.17 with `PluginInfo.previousVersion`.
|
|
7434
|
-
*/
|
|
7435
|
-
previousVersion: string | null;
|
|
7436
7419
|
/** Shipped with the player: `uninstall` and `install` are `unsupported`. */
|
|
7437
7420
|
builtin?: boolean;
|
|
7438
7421
|
/** Where it was installed from. */
|
package/llms.txt
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Vestra Player SDK
|
|
2
2
|
|
|
3
|
-
> @vestra-player/sdk 1.5.
|
|
3
|
+
> @vestra-player/sdk 1.5.17: write plugins for Vestra Player in TypeScript (plugin API `vestra/1`). A plugin is a folder with `manifest.json` and an entry module whose default export `activate(plugin)` the player calls; it runs in its own Node.js process. Everything a plugin creates (commands, windows, panels, filters, listeners…) is a handle that is released automatically when the plugin stops. L<n> are line numbers in llms-full.txt, next to this file: every page, declaration and example.
|
|
4
4
|
|
|
5
5
|
**Rules**
|
|
6
6
|
|
|
@@ -60,7 +60,7 @@ export default async function activate(plugin: Plugin) {
|
|
|
60
60
|
- `ui.window`: Windows.create
|
|
61
61
|
- `ui.mount`: Panels.mount/bottom/sidebar/backdrop, PanelSlot/Panel/BackdropSlot.onChange
|
|
62
62
|
- `ui.dialog`: Dialogs.confirm/openFile/openFiles/openDirectory/saveFile
|
|
63
|
-
- `plugins.manage`: Packages.validate/validateArchive/
|
|
63
|
+
- `plugins.manage`: Packages.validate/validateArchive/setEnabled/uninstall
|
|
64
64
|
- `processing.video`: Plugin.video.filter/video.view/video.render (also `playback.read`)
|
|
65
65
|
- `processing.audio`: Plugin.audio.filter (also `playback.read`, `events`)
|
|
66
66
|
- `subtitles.read`: Subtitles.state/onChange/refresh
|
|
@@ -76,9 +76,9 @@ export default async function activate(plugin: Plugin) {
|
|
|
76
76
|
- `ui.settings`: Settings.page/show
|
|
77
77
|
- `ui.theme`: Appearance.set/setLanguage
|
|
78
78
|
- `secrets`: Secrets.get/set/delete
|
|
79
|
-
- No capability: `tools`, `storage`, `system`, `app`, `ui` (images and Markdown), `i18n`, reading window.state, appearance.theme and packages.list. Details: L2164–
|
|
79
|
+
- No capability: `tools`, `storage`, `system`, `app`, `ui` (images and Markdown), `i18n`, reading window.state, appearance.theme and packages.list. Details: L2164–2206.
|
|
80
80
|
|
|
81
|
-
**Test**: `tests/*.test.ts` with `node:test`, run by `vestra-plugin test`. `startPlugin(activate, { directory: new URL("..", import.meta.url) })` from `@vestra-player/sdk/testing` returns `{ host, stop }`; `host` is a TestHost (an in-memory player): `host.setSource(…)`, `host.command(id).run()`, `host.press(key)`, `await host.settle()`, then assert on `host.osd`, `host.window(id).props`… Guide: L1588–1753; TestHost:
|
|
81
|
+
**Test**: `tests/*.test.ts` with `node:test`, run by `vestra-plugin test`. `startPlugin(activate, { directory: new URL("..", import.meta.url) })` from `@vestra-player/sdk/testing` returns `{ host, stop }`; `host` is a TestHost (an in-memory player): `host.setSource(…)`, `host.command(id).run()`, `host.press(key)`, `await host.settle()`, then assert on `host.osd`, `host.window(id).props`… Guide: L1588–1753; TestHost: L6747.
|
|
82
82
|
|
|
83
83
|
**Command line**
|
|
84
84
|
|
|
@@ -106,39 +106,39 @@ export default async function activate(plugin: Plugin) {
|
|
|
106
106
|
- `limit`: A player-wide limit was reached, a property value is over the limits of PropValue
|
|
107
107
|
- `reserved`: The id is `vestra` or starts with `vestra.`
|
|
108
108
|
- `versionMismatch`: The package needs a newer player or another `apiVersion`
|
|
109
|
-
- Others: PluginError, llms-full.txt
|
|
109
|
+
- Others: PluginError, llms-full.txt L3103.
|
|
110
110
|
|
|
111
111
|
## Reference
|
|
112
112
|
|
|
113
113
|
- [llms-full.txt](https://vestrasys.github.io/vestra-player-sdk/llms-full.txt), also node_modules/@vestra-player/sdk/llms-full.txt; the pages are on the [site](https://vestrasys.github.io/vestra-player-sdk/).
|
|
114
114
|
- Tutorials: Getting started L9–214
|
|
115
115
|
- Concepts: How a plugin runs L215–364; Commands, menus and key bindings L365–462; Playback state, controls and sources L463–585; Video and audio processing L586–663; Windows, panels, settings pages, dialogs and the OSD L664–950
|
|
116
|
-
- How-to: Keep a slider responsive while dragging L951–1125; Remember a window's state between runs L1126–1255; Translate a plugin L1256–1439; Migrate a plugin to English source text L1440–1587; Test a plugin L1588–1753; Publish a plugin L1754–1842; Migrating off package rollback (1.5.16) L1843–1916
|
|
116
|
+
- How-to: Keep a slider responsive while dragging L951–1125; Remember a window's state between runs L1126–1255; Translate a plugin L1256–1439; Migrate a plugin to English source text L1440–1587; Test a plugin L1588–1753; Publish a plugin L1754–1842; Migrating off package rollback (1.5.16, removed in 1.5.17) L1843–1916
|
|
117
117
|
- Guidelines: Interface guidelines L1917–2001; Menu guidelines L2002–2099
|
|
118
|
-
- Reference: Manifest L2100–2163; Capabilities L2164–
|
|
119
|
-
- [API: @vestra-player/sdk](https://vestrasys.github.io/vestra-player-sdk/modules/_vestra-player_sdk.html):
|
|
120
|
-
- [API: @vestra-player/sdk/testing](https://vestrasys.github.io/vestra-player-sdk/modules/_vestra-player_sdk_testing.html):
|
|
118
|
+
- Reference: Manifest L2100–2163; Capabilities L2164–2206; Limits L2207–2301; Commands, menus and bindings L2302–2770; Platforms L2771–2799; Theme L2800–3004; Command line L3005–3060
|
|
119
|
+
- [API: @vestra-player/sdk](https://vestrasys.github.io/vestra-player-sdk/modules/_vestra-player_sdk.html): L3061–6582
|
|
120
|
+
- [API: @vestra-player/sdk/testing](https://vestrasys.github.io/vestra-player-sdk/modules/_vestra-player_sdk_testing.html): L6583–7905
|
|
121
121
|
|
|
122
122
|
## API
|
|
123
123
|
|
|
124
124
|
Where each module of `plugin` (`plugin.<module>`) is declared:
|
|
125
125
|
|
|
126
|
-
- Plugin
|
|
127
|
-
- Commands
|
|
126
|
+
- Plugin L3295, Scope L3164, PluginError L3103, Disposable L3076
|
|
127
|
+
- Commands L3507; Windows L3712; Panels L4355; Dialogs L4641; Player L5089; video: VideoFilter L5354, VideoView L5417, RenderOptions L5459; audio: AudioFilter L5378; Subtitles L5557; media: MediaCapture L5717; Resolvers L5822; Packages L6062; Osd L5290; Host L5238; Clipboard L6177; Power L6197; Tools L6230; Storage L6273; System L6296; Secrets L6314; window: MainWindow L4478; App L4559; Bindings L6147; Ui L3599; Timeline L4435; Drops L4011; Appearance L4040; I18n L4182; Settings L4288.
|
|
128
128
|
|
|
129
129
|
## Examples
|
|
130
130
|
|
|
131
131
|
Tested plugins in [examples/](https://github.com/vestrasys/vestra-player-sdk/tree/main/examples):
|
|
132
132
|
|
|
133
|
-
- hello: The README Quick start: one menu command and an on-screen message.
|
|
134
|
-
- blur: A tool window with one slider that blurs the playing video.
|
|
135
|
-
- signal-generator: Generates its own video and audio: colour bars and a 1 kHz tone.
|
|
136
|
-
- bookmark: A tool window bound to the playback state: remember the position and jump back to it.
|
|
137
|
-
- panel-menu: A sidebar panel with its own right-click menu.
|
|
138
|
-
- menus: Radio menu items, separator groups and a menu item whose title changes.
|
|
139
|
-
- theme-widgets: A tool window drawn with the player's theme and widgets.
|
|
140
|
-
- markdown: A window that shows a Markdown document.
|
|
141
|
-
- i18n: A plugin in the player's language: English source text, a Chinese translation.
|
|
133
|
+
- hello: The README Quick start: one menu command and an on-screen message. L8329–8418
|
|
134
|
+
- blur: A tool window with one slider that blurs the playing video. L8419–8680
|
|
135
|
+
- signal-generator: Generates its own video and audio: colour bars and a 1 kHz tone. L8681–9013
|
|
136
|
+
- bookmark: A tool window bound to the playback state: remember the position and jump back to it. L9014–9198
|
|
137
|
+
- panel-menu: A sidebar panel with its own right-click menu. L9199–9404
|
|
138
|
+
- menus: Radio menu items, separator groups and a menu item whose title changes. L9405–9564
|
|
139
|
+
- theme-widgets: A tool window drawn with the player's theme and widgets. L9565–9728
|
|
140
|
+
- markdown: A window that shows a Markdown document. L9729–9923
|
|
141
|
+
- i18n: A plugin in the player's language: English source text, a Chinese translation. L9924–10091
|
|
142
142
|
|
|
143
143
|
## Optional
|
|
144
144
|
|