1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
|
/**
* Gecko generic/specialized adjustments for xpcom and webidl types.
*/
// More specific types for parent process browsing contexts.
interface CanonicalBrowsingContext extends LoadContextMixin {
embedderElement: XULBrowserElement;
currentWindowContext: WindowGlobalParent;
parent: CanonicalBrowsingContext;
parentWindowContext: WindowGlobalParent;
top: CanonicalBrowsingContext;
topWindowContext: WindowGlobalParent;
}
interface ChromeWindow extends Window {
isChromeWindow: true;
}
interface Document {
createXULElement(name: "browser"): XULBrowserElement;
}
interface MessageListenerManagerMixin {
// Overloads that define `data` arg as required, since it's ~always expected.
addMessageListener(msg: string, listener: { receiveMessage(_: ReceiveMessageArgument & { data })});
removeMessageListener(msg: string, listener: { receiveMessage(_: ReceiveMessageArgument & { data })});
}
interface MozQueryInterface {
<T>(iid: T): nsQIResult<T>;
}
interface nsICryptoHash extends nsISupports {
// Accepts a TypedArray.
update(aData: ArrayLike<number>, aLen: number): void;
}
interface nsIDOMWindow extends Window {}
interface nsISimpleEnumerator extends Iterable<any> {}
interface nsISupports {
wrappedJSObject?: object;
}
interface nsIXPCComponents_Constructor {
<const T, IIDs = nsIXPCComponents_Interfaces>(cid, id: T, init?): {
new (...any): nsQIResult<T extends keyof IIDs ? IIDs[T] : T>;
(...any): nsQIResult<T extends keyof IIDs ? IIDs[T] : T>;
}
}
interface nsIXPCComponents_Exception {
(...args: ConstructorParameters<typeof Error>): Error;
}
interface nsIXPCComponents_utils_Sandbox {
(principal: nsIPrincipal | nsIPrincipal[], options: object): typeof globalThis;
}
interface nsXPCComponents_Classes {
[cid: string]: {
createInstance<T>(aID: T): nsQIResult<T>;
getService<T>(aID?: T): unknown extends T ? nsISupports : nsQIResult<T>;
}
}
// Generic overloads.
interface nsXPCComponents_Utils {
cloneInto<T>(value: T, ...any): T;
createObjectIn<T = object>(_, object?: T): T;
exportFunction<T>(func: T, ...any): T;
getWeakReference<T>(value: T): { get(): T };
waiveXrays<T>(object: T): T;
}
// TODO: remove after next TS update.
interface PromiseConstructor {
withResolvers<T>(): {
promise: Promise<T>;
resolve: (value: T | PromiseLike<T>) => void;
reject: (reason?: any) => void;
};
}
// Hand-crafted artisanal types.
interface XULBrowserElement extends XULFrameElement, FrameLoader {
currentURI: nsIURI;
docShellIsActive: boolean;
isRemoteBrowser: boolean;
remoteType: string;
}
type nsQIResult<iid> = import("gecko/lib.gecko.xpcom").nsQIResult<iid>;
|