Bug 1871127 - Add tsconfig, basic types, and fix or ignore remaining type errors...
[gecko.git] / toolkit / components / extensions / types / extensions.ts
blob8f9555421b7445e9869654628ac32e213020820e
1 /**
2  * Type declarations for WebExtensions framework code.
3  */
5 // This has every possible property we import from all modules, which is not
6 // great, but should be manageable and easy to generate for each component.
7 // ESLint warns if we use one which is not actually defined, so still safe.
8 type LazyAll = {
9   BroadcastConduit: typeof import("ConduitsParent.sys.mjs").BroadcastConduit,
10   Extension: typeof import("Extension.sys.mjs").Extension,
11   ExtensionActivityLog: typeof import("ExtensionActivityLog.sys.mjs").ExtensionActivityLog,
12   ExtensionChild: typeof import("ExtensionChild.sys.mjs").ExtensionChild,
13   ExtensionCommon: typeof import("ExtensionCommon.sys.mjs").ExtensionCommon,
14   ExtensionContent: typeof import("ExtensionContent.sys.mjs").ExtensionContent,
15   ExtensionDNR: typeof import("ExtensionDNR.sys.mjs").ExtensionDNR,
16   ExtensionDNRLimits: typeof import("ExtensionDNRLimits.sys.mjs").ExtensionDNRLimits,
17   ExtensionDNRStore: typeof import("ExtensionDNRStore.sys.mjs").ExtensionDNRStore,
18   ExtensionData: typeof import("Extension.sys.mjs").ExtensionData,
19   ExtensionPageChild: typeof import("ExtensionPageChild.sys.mjs").ExtensionPageChild,
20   ExtensionParent: typeof import("ExtensionParent.sys.mjs").ExtensionParent,
21   ExtensionPermissions: typeof import("ExtensionPermissions.sys.mjs").ExtensionPermissions,
22   ExtensionStorage: typeof import("ExtensionStorage.sys.mjs").ExtensionStorage,
23   ExtensionStorageIDB: typeof import("ExtensionStorageIDB.sys.mjs").ExtensionStorageIDB,
24   ExtensionTelemetry: typeof import("ExtensionTelemetry.sys.mjs").ExtensionTelemetry,
25   ExtensionTestCommon: typeof import("resource://testing-common/ExtensionTestCommon.sys.mjs").ExtensionTestCommon,
26   ExtensionUtils: typeof import("ExtensionUtils.sys.mjs").ExtensionUtils,
27   ExtensionWorkerChild: typeof import("ExtensionWorkerChild.sys.mjs").ExtensionWorkerChild,
28   GeckoViewConnection: typeof import("resource://gre/modules/GeckoViewWebExtension.sys.mjs").GeckoViewConnection,
29   JSONFile: typeof import("resource://gre/modules/JSONFile.sys.mjs").JSONFile,
30   Management: typeof import("Extension.sys.mjs").Management,
31   MessageManagerProxy: typeof import("MessageManagerProxy.sys.mjs").MessageManagerProxy,
32   NativeApp: typeof import("NativeMessaging.sys.mjs").NativeApp,
33   NativeManifests: typeof import("NativeManifests.sys.mjs").NativeManifests,
34   PERMISSION_L10N: typeof import("ExtensionPermissionMessages.sys.mjs").PERMISSION_L10N,
35   QuarantinedDomains: typeof import("ExtensionPermissions.sys.mjs").QuarantinedDomains,
36   SchemaRoot: typeof import("Schemas.sys.mjs").SchemaRoot,
37   Schemas: typeof import("Schemas.sys.mjs").Schemas,
38   WebNavigationFrames: typeof import("WebNavigationFrames.sys.mjs").WebNavigationFrames,
39   WebRequest: typeof import("webrequest/WebRequest.sys.mjs").WebRequest,
40   extensionStorageSync: typeof import("ExtensionStorageSync.sys.mjs").extensionStorageSync,
41   getErrorNameForTelemetry: typeof import("ExtensionTelemetry.sys.mjs").getErrorNameForTelemetry,
42   getTrimmedString: typeof import("ExtensionTelemetry.sys.mjs").getTrimmedString,
45 // Utility type to extract all strings from a const array, to use as keys.
46 type Items<A> = A extends ReadonlyArray<infer U extends string> ? U : never;
48 declare global {
49   type Lazy<Keys extends keyof LazyAll = keyof LazyAll> = Pick<LazyAll, Keys> & { [k: string]: any };
51   // Export JSDoc types, and make other classes available globally.
52   type ConduitAddress = import("ConduitsParent.sys.mjs").ConduitAddress;
53   type ConduitID = import("ConduitsParent.sys.mjs").ConduitID;
54   type Extension = import("Extension.sys.mjs").Extension;
56   // Something about Class type not being exported when nested in a namespace?
57   type BaseContext = InstanceType<typeof import("ExtensionCommon.sys.mjs").ExtensionCommon.BaseContext>;
58   type BrowserExtensionContent = InstanceType<typeof import("ExtensionContent.sys.mjs").ExtensionContent.BrowserExtensionContent>;
59   type EventEmitter = InstanceType<typeof import("ExtensionCommon.sys.mjs").ExtensionCommon.EventEmitter>;
60   type ExtensionAPI = InstanceType<typeof import("ExtensionCommon.sys.mjs").ExtensionCommon.ExtensionAPI>;
61   type ExtensionError = InstanceType<typeof import("ExtensionUtils.sys.mjs").ExtensionUtils.ExtensionError>;
62   type LocaleData = InstanceType<typeof import("ExtensionCommon.sys.mjs").ExtensionCommon.LocaleData>;
63   type ProxyAPIImplementation = InstanceType<typeof import("ExtensionChild.sys.mjs").ExtensionChild.ProxyAPIImplementation>;
64   type SchemaAPIInterface = InstanceType<typeof import("ExtensionCommon.sys.mjs").ExtensionCommon.SchemaAPIInterface>;
65   type WorkerExtensionError = InstanceType<typeof import("ExtensionUtils.sys.mjs").ExtensionUtils.WorkerExtensionError>;
67   // Other misc types.
68   type AddonWrapper = any;
69   type Context = BaseContext;
70   type NativeTab = Element;
71   type SavedFrame = object;
73   // Can't define a const generic parameter in jsdocs yet.
74   // https://github.com/microsoft/TypeScript/issues/56634
75   type ConduitInit<Send> = ConduitAddress & { send: Send; };
76   type Conduit<Send> = import("../ConduitsChild.sys.mjs").PointConduit & { [s in `send${Items<Send>}`]: callback };
77   type ConduitOpen = <const Send>(subject: object, address: ConduitInit<Send>) => Conduit<Send>;
80 export {}