@auroraview/sdk 0.3.21
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/dist/bridge-CRwRGPq-.d.cts +306 -0
- package/dist/bridge-CRwRGPq-.d.ts +306 -0
- package/dist/index.cjs +227 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +61 -0
- package/dist/index.d.ts +61 -0
- package/dist/index.js +222 -0
- package/dist/index.js.map +1 -0
- package/dist/react.cjs +399 -0
- package/dist/react.cjs.map +1 -0
- package/dist/react.d.cts +169 -0
- package/dist/react.d.ts +169 -0
- package/dist/react.js +391 -0
- package/dist/react.js.map +1 -0
- package/dist/vue.cjs +389 -0
- package/dist/vue.cjs.map +1 -0
- package/dist/vue.d.cts +132 -0
- package/dist/vue.d.ts +132 -0
- package/dist/vue.js +381 -0
- package/dist/vue.js.map +1 -0
- package/package.json +80 -0
package/dist/index.cjs
ADDED
|
@@ -0,0 +1,227 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
// src/core/events.ts
|
|
4
|
+
var EventEmitter = class {
|
|
5
|
+
constructor() {
|
|
6
|
+
this.handlers = /* @__PURE__ */ new Map();
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Subscribe to an event
|
|
10
|
+
* @param event - Event name
|
|
11
|
+
* @param handler - Event handler function
|
|
12
|
+
* @returns Unsubscribe function
|
|
13
|
+
*/
|
|
14
|
+
on(event, handler) {
|
|
15
|
+
if (!this.handlers.has(event)) {
|
|
16
|
+
this.handlers.set(event, /* @__PURE__ */ new Set());
|
|
17
|
+
}
|
|
18
|
+
const handlers = this.handlers.get(event);
|
|
19
|
+
handlers.add(handler);
|
|
20
|
+
return () => {
|
|
21
|
+
handlers.delete(handler);
|
|
22
|
+
if (handlers.size === 0) {
|
|
23
|
+
this.handlers.delete(event);
|
|
24
|
+
}
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Subscribe to an event once
|
|
29
|
+
* @param event - Event name
|
|
30
|
+
* @param handler - Event handler function
|
|
31
|
+
* @returns Unsubscribe function
|
|
32
|
+
*/
|
|
33
|
+
once(event, handler) {
|
|
34
|
+
const wrapper = (data) => {
|
|
35
|
+
unsubscribe();
|
|
36
|
+
handler(data);
|
|
37
|
+
};
|
|
38
|
+
const unsubscribe = this.on(event, wrapper);
|
|
39
|
+
return unsubscribe;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Emit an event to all handlers
|
|
43
|
+
* @param event - Event name
|
|
44
|
+
* @param data - Event data
|
|
45
|
+
*/
|
|
46
|
+
emit(event, data) {
|
|
47
|
+
const handlers = this.handlers.get(event);
|
|
48
|
+
if (!handlers) return;
|
|
49
|
+
handlers.forEach((handler) => {
|
|
50
|
+
try {
|
|
51
|
+
handler(data);
|
|
52
|
+
} catch (e) {
|
|
53
|
+
console.error(`[AuroraView] Error in event handler for "${event}":`, e);
|
|
54
|
+
}
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Remove event handler(s)
|
|
59
|
+
* @param event - Event name
|
|
60
|
+
* @param handler - Optional specific handler to remove
|
|
61
|
+
*/
|
|
62
|
+
off(event, handler) {
|
|
63
|
+
if (handler) {
|
|
64
|
+
this.handlers.get(event)?.delete(handler);
|
|
65
|
+
} else {
|
|
66
|
+
this.handlers.delete(event);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Check if event has handlers
|
|
71
|
+
* @param event - Event name
|
|
72
|
+
*/
|
|
73
|
+
hasHandlers(event) {
|
|
74
|
+
const handlers = this.handlers.get(event);
|
|
75
|
+
return handlers !== void 0 && handlers.size > 0;
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Get handler count for an event
|
|
79
|
+
* @param event - Event name
|
|
80
|
+
*/
|
|
81
|
+
handlerCount(event) {
|
|
82
|
+
return this.handlers.get(event)?.size ?? 0;
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Remove all handlers
|
|
86
|
+
*/
|
|
87
|
+
clear() {
|
|
88
|
+
this.handlers.clear();
|
|
89
|
+
}
|
|
90
|
+
};
|
|
91
|
+
var globalEmitter = null;
|
|
92
|
+
function getGlobalEmitter() {
|
|
93
|
+
if (!globalEmitter) {
|
|
94
|
+
globalEmitter = new EventEmitter();
|
|
95
|
+
}
|
|
96
|
+
return globalEmitter;
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
// src/core/bridge.ts
|
|
100
|
+
var AuroraViewClientImpl = class {
|
|
101
|
+
constructor() {
|
|
102
|
+
this.interceptInstalled = false;
|
|
103
|
+
this.events = getGlobalEmitter();
|
|
104
|
+
this.installTriggerIntercept();
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Install intercept on window.auroraview.trigger to forward events
|
|
108
|
+
*/
|
|
109
|
+
installTriggerIntercept() {
|
|
110
|
+
if (this.interceptInstalled) return;
|
|
111
|
+
if (typeof window === "undefined") return;
|
|
112
|
+
const install = () => {
|
|
113
|
+
const bridge = window.auroraview;
|
|
114
|
+
if (!bridge) return;
|
|
115
|
+
const originalTrigger = bridge.trigger;
|
|
116
|
+
bridge.trigger = (event, detail) => {
|
|
117
|
+
originalTrigger?.call(bridge, event, detail);
|
|
118
|
+
this.events.emit(event, detail);
|
|
119
|
+
};
|
|
120
|
+
this.interceptInstalled = true;
|
|
121
|
+
};
|
|
122
|
+
if (window.auroraview) {
|
|
123
|
+
install();
|
|
124
|
+
} else {
|
|
125
|
+
const checkInterval = setInterval(() => {
|
|
126
|
+
if (window.auroraview) {
|
|
127
|
+
clearInterval(checkInterval);
|
|
128
|
+
install();
|
|
129
|
+
}
|
|
130
|
+
}, 10);
|
|
131
|
+
setTimeout(() => clearInterval(checkInterval), 1e4);
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
call(method, params) {
|
|
135
|
+
const bridge = window.auroraview;
|
|
136
|
+
if (!bridge) {
|
|
137
|
+
return Promise.reject(new Error("AuroraView bridge not available"));
|
|
138
|
+
}
|
|
139
|
+
return bridge.call(method, params);
|
|
140
|
+
}
|
|
141
|
+
invoke(cmd, args) {
|
|
142
|
+
const bridge = window.auroraview;
|
|
143
|
+
if (!bridge) {
|
|
144
|
+
return Promise.reject(new Error("AuroraView bridge not available"));
|
|
145
|
+
}
|
|
146
|
+
return bridge.invoke(cmd, args);
|
|
147
|
+
}
|
|
148
|
+
emit(event, data) {
|
|
149
|
+
const bridge = window.auroraview;
|
|
150
|
+
if (bridge) {
|
|
151
|
+
bridge.send_event(event, data);
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
on(event, handler) {
|
|
155
|
+
return this.events.on(event, handler);
|
|
156
|
+
}
|
|
157
|
+
once(event, handler) {
|
|
158
|
+
return this.events.once(event, handler);
|
|
159
|
+
}
|
|
160
|
+
off(event, handler) {
|
|
161
|
+
this.events.off(event, handler);
|
|
162
|
+
}
|
|
163
|
+
isReady() {
|
|
164
|
+
return window.auroraview?._ready === true;
|
|
165
|
+
}
|
|
166
|
+
whenReady() {
|
|
167
|
+
return new Promise((resolve) => {
|
|
168
|
+
if (this.isReady()) {
|
|
169
|
+
resolve(this);
|
|
170
|
+
} else if (window.auroraview) {
|
|
171
|
+
window.auroraview.whenReady().then(() => {
|
|
172
|
+
this.installTriggerIntercept();
|
|
173
|
+
resolve(this);
|
|
174
|
+
});
|
|
175
|
+
} else {
|
|
176
|
+
const checkInterval = setInterval(() => {
|
|
177
|
+
if (window.auroraview) {
|
|
178
|
+
clearInterval(checkInterval);
|
|
179
|
+
window.auroraview.whenReady().then(() => {
|
|
180
|
+
this.installTriggerIntercept();
|
|
181
|
+
resolve(this);
|
|
182
|
+
});
|
|
183
|
+
}
|
|
184
|
+
}, 10);
|
|
185
|
+
setTimeout(() => {
|
|
186
|
+
clearInterval(checkInterval);
|
|
187
|
+
resolve(this);
|
|
188
|
+
}, 3e4);
|
|
189
|
+
}
|
|
190
|
+
});
|
|
191
|
+
}
|
|
192
|
+
getRawBridge() {
|
|
193
|
+
return window.auroraview;
|
|
194
|
+
}
|
|
195
|
+
get fs() {
|
|
196
|
+
return window.auroraview?.fs;
|
|
197
|
+
}
|
|
198
|
+
get dialog() {
|
|
199
|
+
return window.auroraview?.dialog;
|
|
200
|
+
}
|
|
201
|
+
get clipboard() {
|
|
202
|
+
return window.auroraview?.clipboard;
|
|
203
|
+
}
|
|
204
|
+
get shell() {
|
|
205
|
+
return window.auroraview?.shell;
|
|
206
|
+
}
|
|
207
|
+
get state() {
|
|
208
|
+
return window.auroraview?.state;
|
|
209
|
+
}
|
|
210
|
+
};
|
|
211
|
+
var clientInstance = null;
|
|
212
|
+
function createAuroraView() {
|
|
213
|
+
if (!clientInstance) {
|
|
214
|
+
clientInstance = new AuroraViewClientImpl();
|
|
215
|
+
}
|
|
216
|
+
return clientInstance;
|
|
217
|
+
}
|
|
218
|
+
function getAuroraView() {
|
|
219
|
+
return createAuroraView();
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
exports.EventEmitter = EventEmitter;
|
|
223
|
+
exports.createAuroraView = createAuroraView;
|
|
224
|
+
exports.getAuroraView = getAuroraView;
|
|
225
|
+
exports.getGlobalEmitter = getGlobalEmitter;
|
|
226
|
+
//# sourceMappingURL=index.cjs.map
|
|
227
|
+
//# sourceMappingURL=index.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/core/events.ts","../src/core/bridge.ts"],"names":[],"mappings":"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","file":"index.cjs","sourcesContent":["/**\n * AuroraView SDK Event System\n *\n * Provides a type-safe event emitter with proper unsubscribe support.\n */\n\nimport type { EventHandler, Unsubscribe } from './types';\n\n/**\n * Event emitter with unsubscribe support\n */\nexport class EventEmitter {\n private handlers = new Map<string, Set<EventHandler>>();\n\n /**\n * Subscribe to an event\n * @param event - Event name\n * @param handler - Event handler function\n * @returns Unsubscribe function\n */\n on<T = unknown>(event: string, handler: EventHandler<T>): Unsubscribe {\n if (!this.handlers.has(event)) {\n this.handlers.set(event, new Set());\n }\n const handlers = this.handlers.get(event)!;\n handlers.add(handler as EventHandler);\n\n // Return unsubscribe function\n return () => {\n handlers.delete(handler as EventHandler);\n if (handlers.size === 0) {\n this.handlers.delete(event);\n }\n };\n }\n\n /**\n * Subscribe to an event once\n * @param event - Event name\n * @param handler - Event handler function\n * @returns Unsubscribe function\n */\n once<T = unknown>(event: string, handler: EventHandler<T>): Unsubscribe {\n const wrapper: EventHandler<T> = (data) => {\n unsubscribe();\n handler(data);\n };\n const unsubscribe = this.on(event, wrapper);\n return unsubscribe;\n }\n\n /**\n * Emit an event to all handlers\n * @param event - Event name\n * @param data - Event data\n */\n emit<T = unknown>(event: string, data: T): void {\n const handlers = this.handlers.get(event);\n if (!handlers) return;\n\n handlers.forEach((handler) => {\n try {\n handler(data);\n } catch (e) {\n console.error(`[AuroraView] Error in event handler for \"${event}\":`, e);\n }\n });\n }\n\n /**\n * Remove event handler(s)\n * @param event - Event name\n * @param handler - Optional specific handler to remove\n */\n off(event: string, handler?: EventHandler): void {\n if (handler) {\n this.handlers.get(event)?.delete(handler);\n } else {\n this.handlers.delete(event);\n }\n }\n\n /**\n * Check if event has handlers\n * @param event - Event name\n */\n hasHandlers(event: string): boolean {\n const handlers = this.handlers.get(event);\n return handlers !== undefined && handlers.size > 0;\n }\n\n /**\n * Get handler count for an event\n * @param event - Event name\n */\n handlerCount(event: string): number {\n return this.handlers.get(event)?.size ?? 0;\n }\n\n /**\n * Remove all handlers\n */\n clear(): void {\n this.handlers.clear();\n }\n}\n\n/** Singleton event emitter instance */\nlet globalEmitter: EventEmitter | null = null;\n\n/**\n * Get the global event emitter instance\n */\nexport function getGlobalEmitter(): EventEmitter {\n if (!globalEmitter) {\n globalEmitter = new EventEmitter();\n }\n return globalEmitter;\n}\n","/**\n * AuroraView SDK Bridge Client\n *\n * Provides a type-safe wrapper around the native bridge API.\n */\n\nimport { EventEmitter, getGlobalEmitter } from './events';\nimport type {\n EventHandler,\n Unsubscribe,\n AuroraViewBridge,\n FileSystemAPI,\n DialogAPI,\n ClipboardAPI,\n ShellAPI,\n AuroraViewState,\n} from './types';\n\n/**\n * AuroraView client interface\n */\nexport interface AuroraViewClient {\n /** Call a Python method (RPC-style) */\n call<T = unknown>(method: string, params?: unknown): Promise<T>;\n\n /** Invoke a plugin command */\n invoke<T = unknown>(cmd: string, args?: Record<string, unknown>): Promise<T>;\n\n /** Send an event to Python (fire-and-forget) */\n emit(event: string, data?: unknown): void;\n\n /** Subscribe to an event from Python */\n on<T = unknown>(event: string, handler: EventHandler<T>): Unsubscribe;\n\n /** Subscribe to an event once */\n once<T = unknown>(event: string, handler: EventHandler<T>): Unsubscribe;\n\n /** Unsubscribe from an event */\n off(event: string, handler?: EventHandler): void;\n\n /** Check if bridge is ready */\n isReady(): boolean;\n\n /** Wait for bridge to be ready */\n whenReady(): Promise<AuroraViewClient>;\n\n /** Get the raw bridge object */\n getRawBridge(): AuroraViewBridge | undefined;\n\n /** File system API */\n readonly fs: FileSystemAPI | undefined;\n\n /** Dialog API */\n readonly dialog: DialogAPI | undefined;\n\n /** Clipboard API */\n readonly clipboard: ClipboardAPI | undefined;\n\n /** Shell API */\n readonly shell: ShellAPI | undefined;\n\n /** Shared state */\n readonly state: AuroraViewState | undefined;\n}\n\n/**\n * Internal client implementation\n */\nclass AuroraViewClientImpl implements AuroraViewClient {\n private events: EventEmitter;\n private interceptInstalled = false;\n\n constructor() {\n this.events = getGlobalEmitter();\n this.installTriggerIntercept();\n }\n\n /**\n * Install intercept on window.auroraview.trigger to forward events\n */\n private installTriggerIntercept(): void {\n if (this.interceptInstalled) return;\n if (typeof window === 'undefined') return;\n\n const install = () => {\n const bridge = window.auroraview;\n if (!bridge) return;\n\n const originalTrigger = bridge.trigger;\n bridge.trigger = (event: string, detail?: unknown) => {\n // Call original trigger first\n originalTrigger?.call(bridge, event, detail);\n // Forward to our event system\n this.events.emit(event, detail);\n };\n\n this.interceptInstalled = true;\n };\n\n // Try to install immediately\n if (window.auroraview) {\n install();\n } else {\n // Wait for bridge to be available\n const checkInterval = setInterval(() => {\n if (window.auroraview) {\n clearInterval(checkInterval);\n install();\n }\n }, 10);\n\n // Stop checking after 10 seconds\n setTimeout(() => clearInterval(checkInterval), 10000);\n }\n }\n\n call<T = unknown>(method: string, params?: unknown): Promise<T> {\n const bridge = window.auroraview;\n if (!bridge) {\n return Promise.reject(new Error('AuroraView bridge not available'));\n }\n return bridge.call<T>(method, params);\n }\n\n invoke<T = unknown>(cmd: string, args?: Record<string, unknown>): Promise<T> {\n const bridge = window.auroraview;\n if (!bridge) {\n return Promise.reject(new Error('AuroraView bridge not available'));\n }\n return bridge.invoke<T>(cmd, args);\n }\n\n emit(event: string, data?: unknown): void {\n const bridge = window.auroraview;\n if (bridge) {\n bridge.send_event(event, data);\n }\n }\n\n on<T = unknown>(event: string, handler: EventHandler<T>): Unsubscribe {\n return this.events.on(event, handler);\n }\n\n once<T = unknown>(event: string, handler: EventHandler<T>): Unsubscribe {\n return this.events.once(event, handler);\n }\n\n off(event: string, handler?: EventHandler): void {\n this.events.off(event, handler);\n }\n\n isReady(): boolean {\n return window.auroraview?._ready === true;\n }\n\n whenReady(): Promise<AuroraViewClient> {\n return new Promise((resolve) => {\n if (this.isReady()) {\n resolve(this);\n } else if (window.auroraview) {\n window.auroraview.whenReady().then(() => {\n this.installTriggerIntercept();\n resolve(this);\n });\n } else {\n // Wait for bridge to appear\n const checkInterval = setInterval(() => {\n if (window.auroraview) {\n clearInterval(checkInterval);\n window.auroraview.whenReady().then(() => {\n this.installTriggerIntercept();\n resolve(this);\n });\n }\n }, 10);\n\n // Timeout after 30 seconds\n setTimeout(() => {\n clearInterval(checkInterval);\n resolve(this);\n }, 30000);\n }\n });\n }\n\n getRawBridge(): AuroraViewBridge | undefined {\n return window.auroraview;\n }\n\n get fs(): FileSystemAPI | undefined {\n return window.auroraview?.fs;\n }\n\n get dialog(): DialogAPI | undefined {\n return window.auroraview?.dialog;\n }\n\n get clipboard(): ClipboardAPI | undefined {\n return window.auroraview?.clipboard;\n }\n\n get shell(): ShellAPI | undefined {\n return window.auroraview?.shell;\n }\n\n get state(): AuroraViewState | undefined {\n return window.auroraview?.state;\n }\n}\n\n/** Singleton client instance */\nlet clientInstance: AuroraViewClient | null = null;\n\n/**\n * Create or get the AuroraView client instance\n */\nexport function createAuroraView(): AuroraViewClient {\n if (!clientInstance) {\n clientInstance = new AuroraViewClientImpl();\n }\n return clientInstance;\n}\n\n/**\n * Get the AuroraView client instance (alias for createAuroraView)\n */\nexport function getAuroraView(): AuroraViewClient {\n return createAuroraView();\n}\n"]}
|
package/dist/index.d.cts
ADDED
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { E as EventHandler, U as Unsubscribe } from './bridge-CRwRGPq-.cjs';
|
|
2
|
+
export { s as AuroraViewBridge, A as AuroraViewClient, t as AuroraViewState, e as CallErrorInfo, C as CallMessage, d as CallResult, w as ClipboardAPI, l as ConfirmResult, v as DialogAPI, D as DirEntry, a as EventMessage, m as ExecuteOptions, n as ExecuteResult, f as FileFilter, F as FileStat, u as FileSystemAPI, I as IPCMessage, b as InvokeMessage, M as MessageOptions, k as MessageResult, O as OpenFileOptions, h as OpenFileResult, i as OpenFilesResult, P as PluginResult, q as ProcessExit, p as ProcessOutput, j as SaveFileOptions, x as ShellAPI, o as SpawnResult, S as StateChangeHandler, r as WindowEventData, W as WindowEventType, c as createAuroraView, g as getAuroraView } from './bridge-CRwRGPq-.cjs';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* AuroraView SDK Event System
|
|
6
|
+
*
|
|
7
|
+
* Provides a type-safe event emitter with proper unsubscribe support.
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* Event emitter with unsubscribe support
|
|
12
|
+
*/
|
|
13
|
+
declare class EventEmitter {
|
|
14
|
+
private handlers;
|
|
15
|
+
/**
|
|
16
|
+
* Subscribe to an event
|
|
17
|
+
* @param event - Event name
|
|
18
|
+
* @param handler - Event handler function
|
|
19
|
+
* @returns Unsubscribe function
|
|
20
|
+
*/
|
|
21
|
+
on<T = unknown>(event: string, handler: EventHandler<T>): Unsubscribe;
|
|
22
|
+
/**
|
|
23
|
+
* Subscribe to an event once
|
|
24
|
+
* @param event - Event name
|
|
25
|
+
* @param handler - Event handler function
|
|
26
|
+
* @returns Unsubscribe function
|
|
27
|
+
*/
|
|
28
|
+
once<T = unknown>(event: string, handler: EventHandler<T>): Unsubscribe;
|
|
29
|
+
/**
|
|
30
|
+
* Emit an event to all handlers
|
|
31
|
+
* @param event - Event name
|
|
32
|
+
* @param data - Event data
|
|
33
|
+
*/
|
|
34
|
+
emit<T = unknown>(event: string, data: T): void;
|
|
35
|
+
/**
|
|
36
|
+
* Remove event handler(s)
|
|
37
|
+
* @param event - Event name
|
|
38
|
+
* @param handler - Optional specific handler to remove
|
|
39
|
+
*/
|
|
40
|
+
off(event: string, handler?: EventHandler): void;
|
|
41
|
+
/**
|
|
42
|
+
* Check if event has handlers
|
|
43
|
+
* @param event - Event name
|
|
44
|
+
*/
|
|
45
|
+
hasHandlers(event: string): boolean;
|
|
46
|
+
/**
|
|
47
|
+
* Get handler count for an event
|
|
48
|
+
* @param event - Event name
|
|
49
|
+
*/
|
|
50
|
+
handlerCount(event: string): number;
|
|
51
|
+
/**
|
|
52
|
+
* Remove all handlers
|
|
53
|
+
*/
|
|
54
|
+
clear(): void;
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Get the global event emitter instance
|
|
58
|
+
*/
|
|
59
|
+
declare function getGlobalEmitter(): EventEmitter;
|
|
60
|
+
|
|
61
|
+
export { EventEmitter, EventHandler, Unsubscribe, getGlobalEmitter };
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { E as EventHandler, U as Unsubscribe } from './bridge-CRwRGPq-.js';
|
|
2
|
+
export { s as AuroraViewBridge, A as AuroraViewClient, t as AuroraViewState, e as CallErrorInfo, C as CallMessage, d as CallResult, w as ClipboardAPI, l as ConfirmResult, v as DialogAPI, D as DirEntry, a as EventMessage, m as ExecuteOptions, n as ExecuteResult, f as FileFilter, F as FileStat, u as FileSystemAPI, I as IPCMessage, b as InvokeMessage, M as MessageOptions, k as MessageResult, O as OpenFileOptions, h as OpenFileResult, i as OpenFilesResult, P as PluginResult, q as ProcessExit, p as ProcessOutput, j as SaveFileOptions, x as ShellAPI, o as SpawnResult, S as StateChangeHandler, r as WindowEventData, W as WindowEventType, c as createAuroraView, g as getAuroraView } from './bridge-CRwRGPq-.js';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* AuroraView SDK Event System
|
|
6
|
+
*
|
|
7
|
+
* Provides a type-safe event emitter with proper unsubscribe support.
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* Event emitter with unsubscribe support
|
|
12
|
+
*/
|
|
13
|
+
declare class EventEmitter {
|
|
14
|
+
private handlers;
|
|
15
|
+
/**
|
|
16
|
+
* Subscribe to an event
|
|
17
|
+
* @param event - Event name
|
|
18
|
+
* @param handler - Event handler function
|
|
19
|
+
* @returns Unsubscribe function
|
|
20
|
+
*/
|
|
21
|
+
on<T = unknown>(event: string, handler: EventHandler<T>): Unsubscribe;
|
|
22
|
+
/**
|
|
23
|
+
* Subscribe to an event once
|
|
24
|
+
* @param event - Event name
|
|
25
|
+
* @param handler - Event handler function
|
|
26
|
+
* @returns Unsubscribe function
|
|
27
|
+
*/
|
|
28
|
+
once<T = unknown>(event: string, handler: EventHandler<T>): Unsubscribe;
|
|
29
|
+
/**
|
|
30
|
+
* Emit an event to all handlers
|
|
31
|
+
* @param event - Event name
|
|
32
|
+
* @param data - Event data
|
|
33
|
+
*/
|
|
34
|
+
emit<T = unknown>(event: string, data: T): void;
|
|
35
|
+
/**
|
|
36
|
+
* Remove event handler(s)
|
|
37
|
+
* @param event - Event name
|
|
38
|
+
* @param handler - Optional specific handler to remove
|
|
39
|
+
*/
|
|
40
|
+
off(event: string, handler?: EventHandler): void;
|
|
41
|
+
/**
|
|
42
|
+
* Check if event has handlers
|
|
43
|
+
* @param event - Event name
|
|
44
|
+
*/
|
|
45
|
+
hasHandlers(event: string): boolean;
|
|
46
|
+
/**
|
|
47
|
+
* Get handler count for an event
|
|
48
|
+
* @param event - Event name
|
|
49
|
+
*/
|
|
50
|
+
handlerCount(event: string): number;
|
|
51
|
+
/**
|
|
52
|
+
* Remove all handlers
|
|
53
|
+
*/
|
|
54
|
+
clear(): void;
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Get the global event emitter instance
|
|
58
|
+
*/
|
|
59
|
+
declare function getGlobalEmitter(): EventEmitter;
|
|
60
|
+
|
|
61
|
+
export { EventEmitter, EventHandler, Unsubscribe, getGlobalEmitter };
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,222 @@
|
|
|
1
|
+
// src/core/events.ts
|
|
2
|
+
var EventEmitter = class {
|
|
3
|
+
constructor() {
|
|
4
|
+
this.handlers = /* @__PURE__ */ new Map();
|
|
5
|
+
}
|
|
6
|
+
/**
|
|
7
|
+
* Subscribe to an event
|
|
8
|
+
* @param event - Event name
|
|
9
|
+
* @param handler - Event handler function
|
|
10
|
+
* @returns Unsubscribe function
|
|
11
|
+
*/
|
|
12
|
+
on(event, handler) {
|
|
13
|
+
if (!this.handlers.has(event)) {
|
|
14
|
+
this.handlers.set(event, /* @__PURE__ */ new Set());
|
|
15
|
+
}
|
|
16
|
+
const handlers = this.handlers.get(event);
|
|
17
|
+
handlers.add(handler);
|
|
18
|
+
return () => {
|
|
19
|
+
handlers.delete(handler);
|
|
20
|
+
if (handlers.size === 0) {
|
|
21
|
+
this.handlers.delete(event);
|
|
22
|
+
}
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Subscribe to an event once
|
|
27
|
+
* @param event - Event name
|
|
28
|
+
* @param handler - Event handler function
|
|
29
|
+
* @returns Unsubscribe function
|
|
30
|
+
*/
|
|
31
|
+
once(event, handler) {
|
|
32
|
+
const wrapper = (data) => {
|
|
33
|
+
unsubscribe();
|
|
34
|
+
handler(data);
|
|
35
|
+
};
|
|
36
|
+
const unsubscribe = this.on(event, wrapper);
|
|
37
|
+
return unsubscribe;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Emit an event to all handlers
|
|
41
|
+
* @param event - Event name
|
|
42
|
+
* @param data - Event data
|
|
43
|
+
*/
|
|
44
|
+
emit(event, data) {
|
|
45
|
+
const handlers = this.handlers.get(event);
|
|
46
|
+
if (!handlers) return;
|
|
47
|
+
handlers.forEach((handler) => {
|
|
48
|
+
try {
|
|
49
|
+
handler(data);
|
|
50
|
+
} catch (e) {
|
|
51
|
+
console.error(`[AuroraView] Error in event handler for "${event}":`, e);
|
|
52
|
+
}
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Remove event handler(s)
|
|
57
|
+
* @param event - Event name
|
|
58
|
+
* @param handler - Optional specific handler to remove
|
|
59
|
+
*/
|
|
60
|
+
off(event, handler) {
|
|
61
|
+
if (handler) {
|
|
62
|
+
this.handlers.get(event)?.delete(handler);
|
|
63
|
+
} else {
|
|
64
|
+
this.handlers.delete(event);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Check if event has handlers
|
|
69
|
+
* @param event - Event name
|
|
70
|
+
*/
|
|
71
|
+
hasHandlers(event) {
|
|
72
|
+
const handlers = this.handlers.get(event);
|
|
73
|
+
return handlers !== void 0 && handlers.size > 0;
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Get handler count for an event
|
|
77
|
+
* @param event - Event name
|
|
78
|
+
*/
|
|
79
|
+
handlerCount(event) {
|
|
80
|
+
return this.handlers.get(event)?.size ?? 0;
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Remove all handlers
|
|
84
|
+
*/
|
|
85
|
+
clear() {
|
|
86
|
+
this.handlers.clear();
|
|
87
|
+
}
|
|
88
|
+
};
|
|
89
|
+
var globalEmitter = null;
|
|
90
|
+
function getGlobalEmitter() {
|
|
91
|
+
if (!globalEmitter) {
|
|
92
|
+
globalEmitter = new EventEmitter();
|
|
93
|
+
}
|
|
94
|
+
return globalEmitter;
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
// src/core/bridge.ts
|
|
98
|
+
var AuroraViewClientImpl = class {
|
|
99
|
+
constructor() {
|
|
100
|
+
this.interceptInstalled = false;
|
|
101
|
+
this.events = getGlobalEmitter();
|
|
102
|
+
this.installTriggerIntercept();
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Install intercept on window.auroraview.trigger to forward events
|
|
106
|
+
*/
|
|
107
|
+
installTriggerIntercept() {
|
|
108
|
+
if (this.interceptInstalled) return;
|
|
109
|
+
if (typeof window === "undefined") return;
|
|
110
|
+
const install = () => {
|
|
111
|
+
const bridge = window.auroraview;
|
|
112
|
+
if (!bridge) return;
|
|
113
|
+
const originalTrigger = bridge.trigger;
|
|
114
|
+
bridge.trigger = (event, detail) => {
|
|
115
|
+
originalTrigger?.call(bridge, event, detail);
|
|
116
|
+
this.events.emit(event, detail);
|
|
117
|
+
};
|
|
118
|
+
this.interceptInstalled = true;
|
|
119
|
+
};
|
|
120
|
+
if (window.auroraview) {
|
|
121
|
+
install();
|
|
122
|
+
} else {
|
|
123
|
+
const checkInterval = setInterval(() => {
|
|
124
|
+
if (window.auroraview) {
|
|
125
|
+
clearInterval(checkInterval);
|
|
126
|
+
install();
|
|
127
|
+
}
|
|
128
|
+
}, 10);
|
|
129
|
+
setTimeout(() => clearInterval(checkInterval), 1e4);
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
call(method, params) {
|
|
133
|
+
const bridge = window.auroraview;
|
|
134
|
+
if (!bridge) {
|
|
135
|
+
return Promise.reject(new Error("AuroraView bridge not available"));
|
|
136
|
+
}
|
|
137
|
+
return bridge.call(method, params);
|
|
138
|
+
}
|
|
139
|
+
invoke(cmd, args) {
|
|
140
|
+
const bridge = window.auroraview;
|
|
141
|
+
if (!bridge) {
|
|
142
|
+
return Promise.reject(new Error("AuroraView bridge not available"));
|
|
143
|
+
}
|
|
144
|
+
return bridge.invoke(cmd, args);
|
|
145
|
+
}
|
|
146
|
+
emit(event, data) {
|
|
147
|
+
const bridge = window.auroraview;
|
|
148
|
+
if (bridge) {
|
|
149
|
+
bridge.send_event(event, data);
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
on(event, handler) {
|
|
153
|
+
return this.events.on(event, handler);
|
|
154
|
+
}
|
|
155
|
+
once(event, handler) {
|
|
156
|
+
return this.events.once(event, handler);
|
|
157
|
+
}
|
|
158
|
+
off(event, handler) {
|
|
159
|
+
this.events.off(event, handler);
|
|
160
|
+
}
|
|
161
|
+
isReady() {
|
|
162
|
+
return window.auroraview?._ready === true;
|
|
163
|
+
}
|
|
164
|
+
whenReady() {
|
|
165
|
+
return new Promise((resolve) => {
|
|
166
|
+
if (this.isReady()) {
|
|
167
|
+
resolve(this);
|
|
168
|
+
} else if (window.auroraview) {
|
|
169
|
+
window.auroraview.whenReady().then(() => {
|
|
170
|
+
this.installTriggerIntercept();
|
|
171
|
+
resolve(this);
|
|
172
|
+
});
|
|
173
|
+
} else {
|
|
174
|
+
const checkInterval = setInterval(() => {
|
|
175
|
+
if (window.auroraview) {
|
|
176
|
+
clearInterval(checkInterval);
|
|
177
|
+
window.auroraview.whenReady().then(() => {
|
|
178
|
+
this.installTriggerIntercept();
|
|
179
|
+
resolve(this);
|
|
180
|
+
});
|
|
181
|
+
}
|
|
182
|
+
}, 10);
|
|
183
|
+
setTimeout(() => {
|
|
184
|
+
clearInterval(checkInterval);
|
|
185
|
+
resolve(this);
|
|
186
|
+
}, 3e4);
|
|
187
|
+
}
|
|
188
|
+
});
|
|
189
|
+
}
|
|
190
|
+
getRawBridge() {
|
|
191
|
+
return window.auroraview;
|
|
192
|
+
}
|
|
193
|
+
get fs() {
|
|
194
|
+
return window.auroraview?.fs;
|
|
195
|
+
}
|
|
196
|
+
get dialog() {
|
|
197
|
+
return window.auroraview?.dialog;
|
|
198
|
+
}
|
|
199
|
+
get clipboard() {
|
|
200
|
+
return window.auroraview?.clipboard;
|
|
201
|
+
}
|
|
202
|
+
get shell() {
|
|
203
|
+
return window.auroraview?.shell;
|
|
204
|
+
}
|
|
205
|
+
get state() {
|
|
206
|
+
return window.auroraview?.state;
|
|
207
|
+
}
|
|
208
|
+
};
|
|
209
|
+
var clientInstance = null;
|
|
210
|
+
function createAuroraView() {
|
|
211
|
+
if (!clientInstance) {
|
|
212
|
+
clientInstance = new AuroraViewClientImpl();
|
|
213
|
+
}
|
|
214
|
+
return clientInstance;
|
|
215
|
+
}
|
|
216
|
+
function getAuroraView() {
|
|
217
|
+
return createAuroraView();
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
export { EventEmitter, createAuroraView, getAuroraView, getGlobalEmitter };
|
|
221
|
+
//# sourceMappingURL=index.js.map
|
|
222
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/core/events.ts","../src/core/bridge.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["/**\n * AuroraView SDK Event System\n *\n * Provides a type-safe event emitter with proper unsubscribe support.\n */\n\nimport type { EventHandler, Unsubscribe } from './types';\n\n/**\n * Event emitter with unsubscribe support\n */\nexport class EventEmitter {\n private handlers = new Map<string, Set<EventHandler>>();\n\n /**\n * Subscribe to an event\n * @param event - Event name\n * @param handler - Event handler function\n * @returns Unsubscribe function\n */\n on<T = unknown>(event: string, handler: EventHandler<T>): Unsubscribe {\n if (!this.handlers.has(event)) {\n this.handlers.set(event, new Set());\n }\n const handlers = this.handlers.get(event)!;\n handlers.add(handler as EventHandler);\n\n // Return unsubscribe function\n return () => {\n handlers.delete(handler as EventHandler);\n if (handlers.size === 0) {\n this.handlers.delete(event);\n }\n };\n }\n\n /**\n * Subscribe to an event once\n * @param event - Event name\n * @param handler - Event handler function\n * @returns Unsubscribe function\n */\n once<T = unknown>(event: string, handler: EventHandler<T>): Unsubscribe {\n const wrapper: EventHandler<T> = (data) => {\n unsubscribe();\n handler(data);\n };\n const unsubscribe = this.on(event, wrapper);\n return unsubscribe;\n }\n\n /**\n * Emit an event to all handlers\n * @param event - Event name\n * @param data - Event data\n */\n emit<T = unknown>(event: string, data: T): void {\n const handlers = this.handlers.get(event);\n if (!handlers) return;\n\n handlers.forEach((handler) => {\n try {\n handler(data);\n } catch (e) {\n console.error(`[AuroraView] Error in event handler for \"${event}\":`, e);\n }\n });\n }\n\n /**\n * Remove event handler(s)\n * @param event - Event name\n * @param handler - Optional specific handler to remove\n */\n off(event: string, handler?: EventHandler): void {\n if (handler) {\n this.handlers.get(event)?.delete(handler);\n } else {\n this.handlers.delete(event);\n }\n }\n\n /**\n * Check if event has handlers\n * @param event - Event name\n */\n hasHandlers(event: string): boolean {\n const handlers = this.handlers.get(event);\n return handlers !== undefined && handlers.size > 0;\n }\n\n /**\n * Get handler count for an event\n * @param event - Event name\n */\n handlerCount(event: string): number {\n return this.handlers.get(event)?.size ?? 0;\n }\n\n /**\n * Remove all handlers\n */\n clear(): void {\n this.handlers.clear();\n }\n}\n\n/** Singleton event emitter instance */\nlet globalEmitter: EventEmitter | null = null;\n\n/**\n * Get the global event emitter instance\n */\nexport function getGlobalEmitter(): EventEmitter {\n if (!globalEmitter) {\n globalEmitter = new EventEmitter();\n }\n return globalEmitter;\n}\n","/**\n * AuroraView SDK Bridge Client\n *\n * Provides a type-safe wrapper around the native bridge API.\n */\n\nimport { EventEmitter, getGlobalEmitter } from './events';\nimport type {\n EventHandler,\n Unsubscribe,\n AuroraViewBridge,\n FileSystemAPI,\n DialogAPI,\n ClipboardAPI,\n ShellAPI,\n AuroraViewState,\n} from './types';\n\n/**\n * AuroraView client interface\n */\nexport interface AuroraViewClient {\n /** Call a Python method (RPC-style) */\n call<T = unknown>(method: string, params?: unknown): Promise<T>;\n\n /** Invoke a plugin command */\n invoke<T = unknown>(cmd: string, args?: Record<string, unknown>): Promise<T>;\n\n /** Send an event to Python (fire-and-forget) */\n emit(event: string, data?: unknown): void;\n\n /** Subscribe to an event from Python */\n on<T = unknown>(event: string, handler: EventHandler<T>): Unsubscribe;\n\n /** Subscribe to an event once */\n once<T = unknown>(event: string, handler: EventHandler<T>): Unsubscribe;\n\n /** Unsubscribe from an event */\n off(event: string, handler?: EventHandler): void;\n\n /** Check if bridge is ready */\n isReady(): boolean;\n\n /** Wait for bridge to be ready */\n whenReady(): Promise<AuroraViewClient>;\n\n /** Get the raw bridge object */\n getRawBridge(): AuroraViewBridge | undefined;\n\n /** File system API */\n readonly fs: FileSystemAPI | undefined;\n\n /** Dialog API */\n readonly dialog: DialogAPI | undefined;\n\n /** Clipboard API */\n readonly clipboard: ClipboardAPI | undefined;\n\n /** Shell API */\n readonly shell: ShellAPI | undefined;\n\n /** Shared state */\n readonly state: AuroraViewState | undefined;\n}\n\n/**\n * Internal client implementation\n */\nclass AuroraViewClientImpl implements AuroraViewClient {\n private events: EventEmitter;\n private interceptInstalled = false;\n\n constructor() {\n this.events = getGlobalEmitter();\n this.installTriggerIntercept();\n }\n\n /**\n * Install intercept on window.auroraview.trigger to forward events\n */\n private installTriggerIntercept(): void {\n if (this.interceptInstalled) return;\n if (typeof window === 'undefined') return;\n\n const install = () => {\n const bridge = window.auroraview;\n if (!bridge) return;\n\n const originalTrigger = bridge.trigger;\n bridge.trigger = (event: string, detail?: unknown) => {\n // Call original trigger first\n originalTrigger?.call(bridge, event, detail);\n // Forward to our event system\n this.events.emit(event, detail);\n };\n\n this.interceptInstalled = true;\n };\n\n // Try to install immediately\n if (window.auroraview) {\n install();\n } else {\n // Wait for bridge to be available\n const checkInterval = setInterval(() => {\n if (window.auroraview) {\n clearInterval(checkInterval);\n install();\n }\n }, 10);\n\n // Stop checking after 10 seconds\n setTimeout(() => clearInterval(checkInterval), 10000);\n }\n }\n\n call<T = unknown>(method: string, params?: unknown): Promise<T> {\n const bridge = window.auroraview;\n if (!bridge) {\n return Promise.reject(new Error('AuroraView bridge not available'));\n }\n return bridge.call<T>(method, params);\n }\n\n invoke<T = unknown>(cmd: string, args?: Record<string, unknown>): Promise<T> {\n const bridge = window.auroraview;\n if (!bridge) {\n return Promise.reject(new Error('AuroraView bridge not available'));\n }\n return bridge.invoke<T>(cmd, args);\n }\n\n emit(event: string, data?: unknown): void {\n const bridge = window.auroraview;\n if (bridge) {\n bridge.send_event(event, data);\n }\n }\n\n on<T = unknown>(event: string, handler: EventHandler<T>): Unsubscribe {\n return this.events.on(event, handler);\n }\n\n once<T = unknown>(event: string, handler: EventHandler<T>): Unsubscribe {\n return this.events.once(event, handler);\n }\n\n off(event: string, handler?: EventHandler): void {\n this.events.off(event, handler);\n }\n\n isReady(): boolean {\n return window.auroraview?._ready === true;\n }\n\n whenReady(): Promise<AuroraViewClient> {\n return new Promise((resolve) => {\n if (this.isReady()) {\n resolve(this);\n } else if (window.auroraview) {\n window.auroraview.whenReady().then(() => {\n this.installTriggerIntercept();\n resolve(this);\n });\n } else {\n // Wait for bridge to appear\n const checkInterval = setInterval(() => {\n if (window.auroraview) {\n clearInterval(checkInterval);\n window.auroraview.whenReady().then(() => {\n this.installTriggerIntercept();\n resolve(this);\n });\n }\n }, 10);\n\n // Timeout after 30 seconds\n setTimeout(() => {\n clearInterval(checkInterval);\n resolve(this);\n }, 30000);\n }\n });\n }\n\n getRawBridge(): AuroraViewBridge | undefined {\n return window.auroraview;\n }\n\n get fs(): FileSystemAPI | undefined {\n return window.auroraview?.fs;\n }\n\n get dialog(): DialogAPI | undefined {\n return window.auroraview?.dialog;\n }\n\n get clipboard(): ClipboardAPI | undefined {\n return window.auroraview?.clipboard;\n }\n\n get shell(): ShellAPI | undefined {\n return window.auroraview?.shell;\n }\n\n get state(): AuroraViewState | undefined {\n return window.auroraview?.state;\n }\n}\n\n/** Singleton client instance */\nlet clientInstance: AuroraViewClient | null = null;\n\n/**\n * Create or get the AuroraView client instance\n */\nexport function createAuroraView(): AuroraViewClient {\n if (!clientInstance) {\n clientInstance = new AuroraViewClientImpl();\n }\n return clientInstance;\n}\n\n/**\n * Get the AuroraView client instance (alias for createAuroraView)\n */\nexport function getAuroraView(): AuroraViewClient {\n return createAuroraView();\n}\n"]}
|