@vantail/api 0.1.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.
Files changed (109) hide show
  1. package/dist/app.d.ts +87 -0
  2. package/dist/app.d.ts.map +1 -0
  3. package/dist/app.js +79 -0
  4. package/dist/app.js.map +1 -0
  5. package/dist/autostart.d.ts +21 -0
  6. package/dist/autostart.d.ts.map +1 -0
  7. package/dist/autostart.js +28 -0
  8. package/dist/autostart.js.map +1 -0
  9. package/dist/binary.d.ts +13 -0
  10. package/dist/binary.d.ts.map +1 -0
  11. package/dist/binary.js +41 -0
  12. package/dist/binary.js.map +1 -0
  13. package/dist/clipboard.d.ts +36 -0
  14. package/dist/clipboard.d.ts.map +1 -0
  15. package/dist/clipboard.js +34 -0
  16. package/dist/clipboard.js.map +1 -0
  17. package/dist/deeplink.d.ts +36 -0
  18. package/dist/deeplink.d.ts.map +1 -0
  19. package/dist/deeplink.js +61 -0
  20. package/dist/deeplink.js.map +1 -0
  21. package/dist/dialog.d.ts +48 -0
  22. package/dist/dialog.d.ts.map +1 -0
  23. package/dist/dialog.js +25 -0
  24. package/dist/dialog.js.map +1 -0
  25. package/dist/drop.d.ts +37 -0
  26. package/dist/drop.d.ts.map +1 -0
  27. package/dist/drop.js +29 -0
  28. package/dist/drop.js.map +1 -0
  29. package/dist/error.d.ts +27 -0
  30. package/dist/error.d.ts.map +1 -0
  31. package/dist/error.js +39 -0
  32. package/dist/error.js.map +1 -0
  33. package/dist/filesystem.d.ts +99 -0
  34. package/dist/filesystem.d.ts.map +1 -0
  35. package/dist/filesystem.js +75 -0
  36. package/dist/filesystem.js.map +1 -0
  37. package/dist/hid.d.ts +69 -0
  38. package/dist/hid.d.ts.map +1 -0
  39. package/dist/hid.js +54 -0
  40. package/dist/hid.js.map +1 -0
  41. package/dist/index.d.ts +41 -0
  42. package/dist/index.d.ts.map +1 -0
  43. package/dist/index.js +40 -0
  44. package/dist/index.js.map +1 -0
  45. package/dist/mdns.d.ts +65 -0
  46. package/dist/mdns.d.ts.map +1 -0
  47. package/dist/mdns.js +42 -0
  48. package/dist/mdns.js.map +1 -0
  49. package/dist/menu.d.ts +83 -0
  50. package/dist/menu.d.ts.map +1 -0
  51. package/dist/menu.js +55 -0
  52. package/dist/menu.js.map +1 -0
  53. package/dist/network.d.ts +61 -0
  54. package/dist/network.d.ts.map +1 -0
  55. package/dist/network.js +59 -0
  56. package/dist/network.js.map +1 -0
  57. package/dist/notification.d.ts +17 -0
  58. package/dist/notification.d.ts.map +1 -0
  59. package/dist/notification.js +13 -0
  60. package/dist/notification.js.map +1 -0
  61. package/dist/os.d.ts +22 -0
  62. package/dist/os.d.ts.map +1 -0
  63. package/dist/os.js +20 -0
  64. package/dist/os.js.map +1 -0
  65. package/dist/power.d.ts +29 -0
  66. package/dist/power.d.ts.map +1 -0
  67. package/dist/power.js +30 -0
  68. package/dist/power.js.map +1 -0
  69. package/dist/process.d.ts +69 -0
  70. package/dist/process.d.ts.map +1 -0
  71. package/dist/process.js +44 -0
  72. package/dist/process.js.map +1 -0
  73. package/dist/protocol.d.ts +66 -0
  74. package/dist/protocol.d.ts.map +1 -0
  75. package/dist/protocol.js +26 -0
  76. package/dist/protocol.js.map +1 -0
  77. package/dist/screen.d.ts +49 -0
  78. package/dist/screen.d.ts.map +1 -0
  79. package/dist/screen.js +38 -0
  80. package/dist/screen.js.map +1 -0
  81. package/dist/secrets.d.ts +31 -0
  82. package/dist/secrets.d.ts.map +1 -0
  83. package/dist/secrets.js +32 -0
  84. package/dist/secrets.js.map +1 -0
  85. package/dist/shell.d.ts +14 -0
  86. package/dist/shell.d.ts.map +1 -0
  87. package/dist/shell.js +13 -0
  88. package/dist/shell.js.map +1 -0
  89. package/dist/shortcut.d.ts +45 -0
  90. package/dist/shortcut.d.ts.map +1 -0
  91. package/dist/shortcut.js +45 -0
  92. package/dist/shortcut.js.map +1 -0
  93. package/dist/transport.d.ts +36 -0
  94. package/dist/transport.d.ts.map +1 -0
  95. package/dist/transport.js +141 -0
  96. package/dist/transport.js.map +1 -0
  97. package/dist/tray.d.ts +59 -0
  98. package/dist/tray.d.ts.map +1 -0
  99. package/dist/tray.js +30 -0
  100. package/dist/tray.js.map +1 -0
  101. package/dist/updater.d.ts +65 -0
  102. package/dist/updater.d.ts.map +1 -0
  103. package/dist/updater.js +48 -0
  104. package/dist/updater.js.map +1 -0
  105. package/dist/window.d.ts +156 -0
  106. package/dist/window.d.ts.map +1 -0
  107. package/dist/window.js +141 -0
  108. package/dist/window.js.map +1 -0
  109. package/package.json +27 -0
@@ -0,0 +1,65 @@
1
+ export interface UpdateAvailable {
2
+ available: true;
3
+ currentVersion: string;
4
+ version: string;
5
+ notes: string | null;
6
+ pubDate: string | null;
7
+ target: string;
8
+ }
9
+ export interface NoUpdate {
10
+ available: false;
11
+ currentVersion: string;
12
+ }
13
+ export type UpdateCheck = UpdateAvailable | NoUpdate;
14
+ export interface DownloadProgress {
15
+ downloaded: number;
16
+ /** `0` when the server did not send a content length. */
17
+ total: number;
18
+ }
19
+ export interface DownloadResult {
20
+ ready: true;
21
+ version: string;
22
+ bytes: number;
23
+ }
24
+ /**
25
+ * Replacing the application with a newer one.
26
+ *
27
+ * Three steps rather than one, because they fail for different reasons and an
28
+ * application usually wants to say something different about each: `check` is
29
+ * a network call, `download` can take minutes and reports progress, and
30
+ * `install` restarts the app.
31
+ *
32
+ * Nothing is extracted before its signature has been checked against the
33
+ * public key in `vantail.config.ts`, so whoever controls the update endpoint
34
+ * can stop an update but cannot substitute one.
35
+ *
36
+ * ```ts
37
+ * const update = await updater.check();
38
+ * if (update.available && await dialog.confirm(`Install ${update.version}?`)) {
39
+ * await updater.downloadAndInstall((p) => setProgress(p.downloaded / p.total));
40
+ * }
41
+ * ```
42
+ */
43
+ export declare const updater: {
44
+ check: () => Promise<UpdateCheck>;
45
+ /**
46
+ * Download and verify, without installing. Resolves once the archive is on
47
+ * disk and its signature has been checked.
48
+ */
49
+ download: (onProgress?: (progress: DownloadProgress) => void) => Promise<DownloadResult>;
50
+ /** Whether a verified update is sitting on disk waiting to be installed. */
51
+ pending: () => Promise<{
52
+ ready: boolean;
53
+ version?: string;
54
+ }>;
55
+ /**
56
+ * Swap in the downloaded version and relaunch.
57
+ *
58
+ * This never resolves: the process is replaced. Save anything you care
59
+ * about before calling it.
60
+ */
61
+ install: () => Promise<never>;
62
+ downloadAndInstall: (onProgress?: (progress: DownloadProgress) => void) => Promise<never>;
63
+ onProgress: (handler: (progress: DownloadProgress) => void) => () => void;
64
+ };
65
+ //# sourceMappingURL=updater.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"updater.d.ts","sourceRoot":"","sources":["../src/updater.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,IAAI,CAAC;IAChB,cAAc,EAAE,MAAM,CAAC;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,QAAQ;IACvB,SAAS,EAAE,KAAK,CAAC;IACjB,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,MAAM,WAAW,GAAG,eAAe,GAAG,QAAQ,CAAC;AAErD,MAAM,WAAW,gBAAgB;IAC/B,UAAU,EAAE,MAAM,CAAC;IACnB,yDAAyD;IACzD,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,IAAI,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,eAAO,MAAM,OAAO;IAClB,KAAK;IAEL;;;OAGG;IACH,QAAQ,gBACO,CAAC,QAAQ,EAAE,gBAAgB,KAAK,IAAI,KAChD,OAAO,CAAC,cAAc,CAAC;IAO1B,4EAA4E;IAC5E,OAAO;eACW,OAAO;kBAAY,MAAM;;IAE3C;;;;;OAKG;IACH,OAAO;IAEP,kBAAkB,gBACH,CAAC,QAAQ,EAAE,gBAAgB,KAAK,IAAI;IAMnD,UAAU,YAAY,CAAC,QAAQ,EAAE,gBAAgB,KAAK,IAAI;CAE3D,CAAC"}
@@ -0,0 +1,48 @@
1
+ import { invoke, listen } from "./transport.js";
2
+ /**
3
+ * Replacing the application with a newer one.
4
+ *
5
+ * Three steps rather than one, because they fail for different reasons and an
6
+ * application usually wants to say something different about each: `check` is
7
+ * a network call, `download` can take minutes and reports progress, and
8
+ * `install` restarts the app.
9
+ *
10
+ * Nothing is extracted before its signature has been checked against the
11
+ * public key in `vantail.config.ts`, so whoever controls the update endpoint
12
+ * can stop an update but cannot substitute one.
13
+ *
14
+ * ```ts
15
+ * const update = await updater.check();
16
+ * if (update.available && await dialog.confirm(`Install ${update.version}?`)) {
17
+ * await updater.downloadAndInstall((p) => setProgress(p.downloaded / p.total));
18
+ * }
19
+ * ```
20
+ */
21
+ export const updater = {
22
+ check: () => invoke("updater.check"),
23
+ /**
24
+ * Download and verify, without installing. Resolves once the archive is on
25
+ * disk and its signature has been checked.
26
+ */
27
+ download: (onProgress) => {
28
+ const stop = onProgress
29
+ ? listen("updater.progress", onProgress)
30
+ : undefined;
31
+ return invoke("updater.download").finally(() => stop?.());
32
+ },
33
+ /** Whether a verified update is sitting on disk waiting to be installed. */
34
+ pending: () => invoke("updater.pending"),
35
+ /**
36
+ * Swap in the downloaded version and relaunch.
37
+ *
38
+ * This never resolves: the process is replaced. Save anything you care
39
+ * about before calling it.
40
+ */
41
+ install: () => invoke("updater.install"),
42
+ downloadAndInstall: async (onProgress) => {
43
+ await updater.download(onProgress);
44
+ return updater.install();
45
+ },
46
+ onProgress: (handler) => listen("updater.progress", handler),
47
+ };
48
+ //# sourceMappingURL=updater.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"updater.js","sourceRoot":"","sources":["../src/updater.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AA8BhD;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,CAAC,MAAM,OAAO,GAAG;IACrB,KAAK,EAAE,GAAG,EAAE,CAAC,MAAM,CAAc,eAAe,CAAC;IAEjD;;;OAGG;IACH,QAAQ,EAAE,CACR,UAAiD,EACxB,EAAE;QAC3B,MAAM,IAAI,GAAG,UAAU;YACrB,CAAC,CAAC,MAAM,CAAmB,kBAAkB,EAAE,UAAU,CAAC;YAC1D,CAAC,CAAC,SAAS,CAAC;QACd,OAAO,MAAM,CAAiB,kBAAkB,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IAC5E,CAAC;IAED,4EAA4E;IAC5E,OAAO,EAAE,GAAG,EAAE,CACZ,MAAM,CAAuC,iBAAiB,CAAC;IAEjE;;;;;OAKG;IACH,OAAO,EAAE,GAAG,EAAE,CAAC,MAAM,CAAQ,iBAAiB,CAAC;IAE/C,kBAAkB,EAAE,KAAK,EACvB,UAAiD,EACjD,EAAE;QACF,MAAM,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;QACnC,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;IAC3B,CAAC;IAED,UAAU,EAAE,CAAC,OAA6C,EAAE,EAAE,CAC5D,MAAM,CAAmB,kBAAkB,EAAE,OAAO,CAAC;CACxD,CAAC"}
@@ -0,0 +1,156 @@
1
+ export interface Size {
2
+ width: number;
3
+ height: number;
4
+ }
5
+ export interface Position {
6
+ x: number;
7
+ y: number;
8
+ }
9
+ /** Everything a new window can be given, matching `window` in the config. */
10
+ export interface WindowOptions {
11
+ /** Path within the application, e.g. `settings.html` or `/#/settings`. */
12
+ url?: string;
13
+ /**
14
+ * Resolve only once the new window's page has loaded. Default `true`.
15
+ *
16
+ * A window exists before its document does, so without this a message sent
17
+ * straight after `createWindow` would arrive at a webview with nothing
18
+ * listening yet, and vanish.
19
+ */
20
+ waitForReady?: boolean;
21
+ /** How long to wait for that. Default 15000. */
22
+ readyTimeoutMs?: number;
23
+ title?: string;
24
+ width?: number;
25
+ height?: number;
26
+ minWidth?: number;
27
+ minHeight?: number;
28
+ maxWidth?: number;
29
+ maxHeight?: number;
30
+ x?: number;
31
+ y?: number;
32
+ resizable?: boolean;
33
+ maximized?: boolean;
34
+ fullscreen?: boolean;
35
+ decorations?: boolean;
36
+ transparent?: boolean;
37
+ alwaysOnTop?: boolean;
38
+ center?: boolean;
39
+ visible?: boolean;
40
+ closeBehavior?: CloseBehavior;
41
+ }
42
+ /**
43
+ * What a window's own close button does.
44
+ *
45
+ * - `close` - destroy it. With no other windows open and
46
+ * `quitOnLastWindowClosed`, that ends the application.
47
+ * - `hide` - hide it instead. The webview keeps running, so timers keep
48
+ * firing and sockets stay connected. This is what a tray application wants.
49
+ * - `ask` - do nothing, and let `onCloseRequested` decide.
50
+ *
51
+ * There is no `preventDefault()` here on purpose: it would mean the runtime
52
+ * waiting on an answer from JavaScript before it could close a window, and an
53
+ * application that never answered would have a window nobody could shut.
54
+ * Declaring the behaviour is the same thing without that failure mode.
55
+ */
56
+ export type CloseBehavior = "close" | "hide" | "ask";
57
+ /**
58
+ * A handle to one window.
59
+ *
60
+ * `appWindow` is the window your code is running in. `getWindow(label)` is any
61
+ * other. The two are the same object shape, so code that adjusts a window does
62
+ * not care which one it was handed.
63
+ */
64
+ export interface WindowHandle {
65
+ /** `undefined` on `appWindow`, which always means "whichever window I am". */
66
+ readonly label: string | undefined;
67
+ setTitle(title: string): Promise<null>;
68
+ title(): Promise<string>;
69
+ setSize(width: number, height: number): Promise<null>;
70
+ size(): Promise<Size>;
71
+ setPosition(x: number, y: number): Promise<null>;
72
+ position(): Promise<Position>;
73
+ center(): Promise<null>;
74
+ minimize(): Promise<null>;
75
+ unminimize(): Promise<null>;
76
+ /**
77
+ * Stop the user shrinking the window below this. Pass `null` to remove it.
78
+ *
79
+ * Logical pixels, like every other window measurement.
80
+ */
81
+ setMinSize(width: number | null, height: number | null): Promise<null>;
82
+ /** The other end. `null` removes it. */
83
+ setMaxSize(width: number | null, height: number | null): Promise<null>;
84
+ /**
85
+ * Keep the window out of the taskbar. Windows and Linux only - macOS has no
86
+ * taskbar, and answers `UNSUPPORTED`.
87
+ */
88
+ setSkipTaskbar(value: boolean): Promise<null>;
89
+ maximize(): Promise<null>;
90
+ unmaximize(): Promise<null>;
91
+ toggleMaximize(): Promise<boolean>;
92
+ isMaximized(): Promise<boolean>;
93
+ setFullscreen(value: boolean): Promise<null>;
94
+ isFullscreen(): Promise<boolean>;
95
+ setResizable(value: boolean): Promise<null>;
96
+ setAlwaysOnTop(value: boolean): Promise<null>;
97
+ setCloseBehavior(behavior: CloseBehavior): Promise<null>;
98
+ closeBehavior(): Promise<CloseBehavior>;
99
+ show(): Promise<null>;
100
+ hide(): Promise<null>;
101
+ isVisible(): Promise<boolean>;
102
+ focus(): Promise<null>;
103
+ close(): Promise<boolean>;
104
+ exists(): Promise<boolean>;
105
+ openDevtools(): Promise<null>;
106
+ /**
107
+ * Window events reach only the window they happened to, so these fire for
108
+ * `appWindow` and stay quiet on a handle to somebody else's window.
109
+ */
110
+ onResized(handler: (size: Size) => void): () => void;
111
+ onMoved(handler: (position: Position) => void): () => void;
112
+ onFocusChanged(handler: (state: {
113
+ focused: boolean;
114
+ }) => void): () => void;
115
+ /**
116
+ * The close button was pressed. `outcome` says what the runtime did:
117
+ * `hidden` under `hide`, or `ignored` under `ask` - in which case closing
118
+ * or hiding the window is now your job.
119
+ *
120
+ * Not emitted under `close`, where the window is already gone.
121
+ */
122
+ onCloseRequested(handler: (event: {
123
+ outcome: "hidden" | "ignored";
124
+ }) => void): () => void;
125
+ }
126
+ /**
127
+ * The window this code is running in.
128
+ *
129
+ * Note this shadows the global `window` when imported under that name. Import
130
+ * it as `appWindow` if you need both.
131
+ */
132
+ export declare const appWindow: WindowHandle;
133
+ /** A handle to another window. Calls on a window that is gone reject. */
134
+ export declare function getWindow(label: string): WindowHandle;
135
+ /**
136
+ * Open a new window and return a handle to it.
137
+ *
138
+ * Labels are how every other call names this window, so they have to be
139
+ * unique - creating one that already exists rejects with `ALREADY_EXISTS`.
140
+ */
141
+ export declare function createWindow(label: string, options?: WindowOptions): Promise<WindowHandle>;
142
+ /** Fires when a window's page has finished loading. */
143
+ export declare function onWindowReady(handler: (event: {
144
+ label: string;
145
+ }) => void): () => void;
146
+ /** Labels of every open window, in the order they were opened. */
147
+ export declare function listWindows(): Promise<string[]>;
148
+ /** The label of the calling window, without awaiting. */
149
+ export declare function currentWindow(): string | undefined;
150
+ export declare function onWindowCreated(handler: (event: {
151
+ label: string;
152
+ }) => void): () => void;
153
+ export declare function onWindowClosed(handler: (event: {
154
+ label: string;
155
+ }) => void): () => void;
156
+ //# sourceMappingURL=window.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"window.d.ts","sourceRoot":"","sources":["../src/window.ts"],"names":[],"mappings":"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"}
package/dist/window.js ADDED
@@ -0,0 +1,141 @@
1
+ import { VantailError } from "./error.js";
2
+ import { invoke, listen, windowLabel } from "./transport.js";
3
+ function handle(label) {
4
+ // Omitting `label` entirely lets the runtime answer for the calling window,
5
+ // which is what makes one implementation serve both cases.
6
+ const target = label === undefined ? {} : { label };
7
+ const call = (method, params = {}) => invoke(method, { ...target, ...params });
8
+ const scoped = (event, handler) => {
9
+ // `appWindow` has no label of its own, but it still means *this* window -
10
+ // so fall back to the one the runtime injected rather than taking
11
+ // everything that happens to arrive.
12
+ const mine = label ?? windowLabel();
13
+ return listen(event, (payload) => {
14
+ if (mine !== undefined &&
15
+ payload.label !== undefined &&
16
+ payload.label !== mine)
17
+ return;
18
+ handler(payload);
19
+ });
20
+ };
21
+ return {
22
+ label,
23
+ setTitle: (title) => call("window.setTitle", { title }),
24
+ title: () => call("window.title"),
25
+ setSize: (width, height) => call("window.setSize", { width, height }),
26
+ size: () => call("window.size"),
27
+ setPosition: (x, y) => call("window.setPosition", { x, y }),
28
+ position: () => call("window.position"),
29
+ center: () => call("window.center"),
30
+ minimize: () => call("window.minimize"),
31
+ unminimize: () => call("window.unminimize"),
32
+ setMinSize: (width, height) => call("window.setMinSize", { width, height }),
33
+ setMaxSize: (width, height) => call("window.setMaxSize", { width, height }),
34
+ setSkipTaskbar: (value) => call("window.setSkipTaskbar", { value }),
35
+ maximize: () => call("window.maximize"),
36
+ unmaximize: () => call("window.unmaximize"),
37
+ toggleMaximize: () => call("window.toggleMaximize"),
38
+ isMaximized: () => call("window.isMaximized"),
39
+ setFullscreen: (value) => call("window.setFullscreen", { value }),
40
+ isFullscreen: () => call("window.isFullscreen"),
41
+ setResizable: (value) => call("window.setResizable", { value }),
42
+ setAlwaysOnTop: (value) => call("window.setAlwaysOnTop", { value }),
43
+ setCloseBehavior: (behavior) => call("window.setCloseBehavior", { behavior }),
44
+ closeBehavior: () => call("window.closeBehavior"),
45
+ show: () => call("window.show"),
46
+ hide: () => call("window.hide"),
47
+ isVisible: () => call("window.isVisible"),
48
+ focus: () => call("window.focus"),
49
+ close: () => call("window.close"),
50
+ exists: () => call("window.exists"),
51
+ openDevtools: () => call("window.openDevtools"),
52
+ onResized: (fn) => scoped("window.resized", fn),
53
+ onMoved: (fn) => scoped("window.moved", fn),
54
+ onFocusChanged: (fn) => scoped("window.focus", fn),
55
+ onCloseRequested: (fn) => scoped("window.closeRequested", fn),
56
+ };
57
+ }
58
+ /**
59
+ * The window this code is running in.
60
+ *
61
+ * Note this shadows the global `window` when imported under that name. Import
62
+ * it as `appWindow` if you need both.
63
+ */
64
+ export const appWindow = handle();
65
+ /** A handle to another window. Calls on a window that is gone reject. */
66
+ export function getWindow(label) {
67
+ return handle(label);
68
+ }
69
+ /**
70
+ * Open a new window and return a handle to it.
71
+ *
72
+ * Labels are how every other call names this window, so they have to be
73
+ * unique - creating one that already exists rejects with `ALREADY_EXISTS`.
74
+ */
75
+ export async function createWindow(label, options = {}) {
76
+ const { url, waitForReady = true, readyTimeoutMs = 15_000, ...window } = options;
77
+ // Subscribed before the window is asked for, so a page that loads instantly
78
+ // cannot report ready before anyone is listening.
79
+ const ready = waitForReady ? waitFor(label, readyTimeoutMs) : undefined;
80
+ try {
81
+ await invoke("window.create", {
82
+ label,
83
+ ...(url === undefined ? {} : { url }),
84
+ window,
85
+ });
86
+ }
87
+ catch (error) {
88
+ ready?.cancel();
89
+ throw error;
90
+ }
91
+ await ready?.promise;
92
+ return handle(label);
93
+ }
94
+ function waitFor(label, timeoutMs) {
95
+ let settle;
96
+ let fail;
97
+ const stop = listen("window.ready", (event) => {
98
+ if (event.label === label)
99
+ settle?.();
100
+ });
101
+ const timer = setTimeout(() => {
102
+ fail?.(new VantailError("INTERNAL", `The window "${label}" opened but its page did not finish loading within ${timeoutMs}ms. ` +
103
+ `Check the URL it was given, or pass { waitForReady: false }.`));
104
+ }, timeoutMs);
105
+ const promise = new Promise((resolve, reject) => {
106
+ settle = resolve;
107
+ fail = reject;
108
+ }).finally(() => {
109
+ clearTimeout(timer);
110
+ stop();
111
+ });
112
+ return {
113
+ promise,
114
+ cancel: () => {
115
+ clearTimeout(timer);
116
+ stop();
117
+ // Nothing is awaiting it, but an unhandled rejection would still be
118
+ // reported if the timer had already fired.
119
+ settle?.();
120
+ },
121
+ };
122
+ }
123
+ /** Fires when a window's page has finished loading. */
124
+ export function onWindowReady(handler) {
125
+ return listen("window.ready", handler);
126
+ }
127
+ /** Labels of every open window, in the order they were opened. */
128
+ export function listWindows() {
129
+ return invoke("window.list");
130
+ }
131
+ /** The label of the calling window, without awaiting. */
132
+ export function currentWindow() {
133
+ return windowLabel();
134
+ }
135
+ export function onWindowCreated(handler) {
136
+ return listen("window.created", handler);
137
+ }
138
+ export function onWindowClosed(handler) {
139
+ return listen("window.closed", handler);
140
+ }
141
+ //# sourceMappingURL=window.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"window.js","sourceRoot":"","sources":["../src/window.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,27 @@
1
+ {
2
+ "name": "@vantail/api",
3
+ "version": "0.1.0",
4
+ "description": "The Vantail JavaScript SDK: native APIs for your application.",
5
+ "license": "MIT",
6
+ "repository": {
7
+ "type": "git",
8
+ "url": "git+https://github.com/Vantail/vantail.git",
9
+ "directory": "packages/api"
10
+ },
11
+ "homepage": "https://github.com/Vantail/vantail",
12
+ "type": "module",
13
+ "sideEffects": false,
14
+ "files": [
15
+ "dist"
16
+ ],
17
+ "exports": {
18
+ ".": {
19
+ "types": "./dist/index.d.ts",
20
+ "default": "./dist/index.js"
21
+ }
22
+ },
23
+ "scripts": {
24
+ "build": "tsc -p tsconfig.json",
25
+ "typecheck": "tsc -p tsconfig.json --noEmit"
26
+ }
27
+ }