Skip to content

Commit 8587c6d

Browse files
authored
Merge pull request #457 from saschanaz/fullautoexpose
Autoexpose all types
2 parents c6f87f1 + 4bf3310 commit 8587c6d

File tree

8 files changed

+114
-213
lines changed

8 files changed

+114
-213
lines changed

baselines/webworker.generated.d.ts

Lines changed: 4 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -2051,20 +2051,8 @@ declare var XMLHttpRequestUpload: {
20512051

20522052
declare type EventListenerOrEventListenerObject = EventListener | EventListenerObject;
20532053

2054-
interface ErrorEventHandler {
2055-
(event: Event | string, source?: string, fileno?: number, columnNumber?: number, error?: Error): void;
2056-
}
2057-
2058-
interface ForEachCallback {
2059-
(keyId: Int8Array | Int16Array | Int32Array | Uint8Array | Uint16Array | Uint32Array | Uint8ClampedArray | Float32Array | Float64Array | DataView | ArrayBuffer | null, status: MediaKeyStatus): void;
2060-
}
2061-
2062-
interface FunctionStringCallback {
2063-
(data: string): void;
2064-
}
2065-
2066-
interface NotificationPermissionCallback {
2067-
(permission: NotificationPermission): void;
2054+
interface EventHandlerNonNull {
2055+
(event: Event): any;
20682056
}
20692057

20702058
interface PerformanceObserverCallback {
@@ -2107,43 +2095,20 @@ type HeadersInit = Headers | string[][] | Record<string, string>;
21072095
type BodyInit = Blob | BufferSource | FormData | URLSearchParams | ReadableStream | string;
21082096
type RequestInfo = Request | string;
21092097
type BlobPart = BufferSource | Blob | string;
2098+
type DOMHighResTimeStamp = number;
21102099
type PerformanceEntryList = PerformanceEntry[];
21112100
type PushMessageDataInit = BufferSource | string;
21122101
type VibratePattern = number | number[];
21132102
type BufferSource = ArrayBufferView | ArrayBuffer;
2103+
type DOMTimeStamp = number;
21142104
type FormDataEntryValue = File | string;
21152105
type IDBValidKey = number | string | Date | BufferSource | IDBArrayKey;
2116-
type AlgorithmIdentifier = string | Algorithm;
2117-
type AAGUID = string;
2118-
type ByteString = string;
2119-
type CryptoOperationData = ArrayBufferView;
2120-
type GLbitfield = number;
2121-
type GLboolean = boolean;
2122-
type GLbyte = number;
2123-
type GLclampf = number;
2124-
type GLenum = number;
2125-
type GLfloat = number;
2126-
type GLint = number;
2127-
type GLintptr = number;
2128-
type GLshort = number;
2129-
type GLsizei = number;
2130-
type GLsizeiptr = number;
2131-
type GLubyte = number;
2132-
type GLuint = number;
2133-
type GLushort = number;
2134-
type IDBKeyPath = string;
2135-
type USVString = string;
2136-
type payloadtype = number;
21372106
type MessageEventSource = object | MessagePort | ServiceWorker;
21382107
type BinaryType = "blob" | "arraybuffer";
21392108
type ClientTypes = "window" | "worker" | "sharedworker" | "all";
21402109
type IDBCursorDirection = "next" | "nextunique" | "prev" | "prevunique";
21412110
type IDBRequestReadyState = "pending" | "done";
21422111
type IDBTransactionMode = "readonly" | "readwrite" | "versionchange";
2143-
type KeyFormat = "raw" | "spki" | "pkcs8" | "jwk";
2144-
type KeyType = "public" | "private" | "secret";
2145-
type KeyUsage = "encrypt" | "decrypt" | "sign" | "verify" | "deriveKey" | "deriveBits" | "wrapKey" | "unwrapKey";
2146-
type MediaKeyStatus = "usable" | "expired" | "output-downscaled" | "output-not-allowed" | "status-pending" | "internal-error";
21472112
type NotificationDirection = "auto" | "ltr" | "rtl";
21482113
type NotificationPermission = "default" | "denied" | "granted";
21492114
type PushEncryptionKeyName = "p256dh" | "auth";

inputfiles/addedTypes.json

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -515,8 +515,8 @@
515515
"[index: number]: TNode"
516516
],
517517
"iterator": {
518-
"type": "iterable",
519-
"subtype": [{
518+
"kind": "iterable",
519+
"type": [{
520520
"override-type": "TNode"
521521
}]
522522
}
@@ -546,8 +546,8 @@
546546
"[index: number]: T"
547547
],
548548
"iterator": {
549-
"type": "iterable",
550-
"subtype": [{
549+
"kind": "iterable",
550+
"type": [{
551551
"override-type": "T"
552552
}]
553553
}

inputfiles/knownWorkerTypes.json

Lines changed: 3 additions & 131 deletions
Original file line numberDiff line numberDiff line change
@@ -1,135 +1,7 @@
11
[
2-
"ClientQueryOptions",
3-
"ExtendableEventInit",
4-
"ExtendableMessageEventInit",
5-
"FetchEventInit",
6-
"NotificationEventInit",
7-
"PushEventInit",
8-
"SyncEventInit",
9-
"Algorithm",
10-
"CacheQueryOptions",
11-
"CloseEventInit",
12-
"EventInit",
13-
"GetNotificationOptions",
14-
"IDBIndexParameters",
15-
"IDBObjectStoreParameters",
16-
"KeyAlgorithm",
17-
"MessageEventInit",
18-
"NotificationOptions",
19-
"PushSubscriptionOptionsInit",
20-
"RequestInit",
21-
"ResponseInit",
22-
"DOMMatrixInit",
23-
"DOMMatrix2DInit",
24-
"DOMPointInit",
25-
"DOMQuadInit",
26-
"DOMRectInit",
27-
"BlobPart",
28-
"IDBKeyRange",
29-
"MessageEventSource",
30-
"MessagePort",
31-
"NavigationPreloadState",
32-
"NotificationAction",
33-
"PerformanceEntryList",
34-
"PerformanceObserverCallback",
35-
"PerformanceObserverInit",
36-
"PromiseRejectionEventInit",
37-
"PushSubscriptionJSON",
38-
"RegistrationOptions",
39-
"ServiceWorkerUpdateViaCache",
40-
"VibratePattern",
41-
"WorkerType",
42-
"AbstractWorker",
43-
"Body",
44-
"GlobalFetch",
45-
"NavigatorBeacon",
46-
"NavigatorConcurrentHardware",
47-
"NavigatorID",
48-
"NavigatorOnLine",
49-
"WindowBase64",
50-
"WindowConsole",
51-
"Client",
52-
"Clients",
53-
"DedicatedWorkerGlobalScope",
54-
"ServiceWorkerGlobalScope",
55-
"WindowClient",
56-
"WorkerGlobalScope",
57-
"WorkerLocation",
58-
"WorkerNavigator",
59-
"WorkerUtils",
60-
"EventListener",
61-
"ErrorEventHandler",
62-
"ForEachCallback",
63-
"FunctionStringCallback",
64-
"NotificationPermissionCallback",
65-
"PushMessageDataInit",
66-
"AAGUID",
67-
"AlgorithmIdentifier",
68-
"BodyInit",
69-
"ByteString",
70-
"CryptoOperationData",
71-
"GLbitfield",
72-
"GLboolean",
73-
"GLbyte",
74-
"GLclampf",
75-
"GLenum",
76-
"GLfloat",
77-
"GLint",
78-
"GLintptr",
79-
"GLshort",
80-
"GLsizei",
81-
"GLsizeiptr",
82-
"GLubyte",
83-
"GLuint",
84-
"GLushort",
85-
"HeadersInit",
86-
"IDBKeyPath",
87-
"JSON",
88-
"KeyFormat",
89-
"KeyType",
90-
"KeyUsage",
91-
"RequestInfo",
92-
"USVString",
93-
"payloadtype",
94-
"IDBCursorDirection",
95-
"IDBRequestReadyState",
96-
"IDBTransactionMode",
97-
"MediaKeyStatus",
98-
"NotificationDirection",
99-
"NotificationPermission",
100-
"PushEncryptionKeyName",
101-
"PushPermissionState",
102-
"ReferrerPolicy",
103-
"RequestCache",
104-
"RequestCredentials",
105-
"RequestDestination",
106-
"RequestMode",
107-
"RequestRedirect",
108-
"RequestType",
109-
"ResponseType",
110-
"ServiceWorkerState",
111-
"TextDecodeOptions",
112-
"TextDecoderOptions",
113-
"VisibilityState",
114-
"XMLHttpRequestResponseType",
1152
"ClientTypes",
116-
"FrameType",
117-
"BinaryType",
118-
"ProgressEventInit",
119-
"EventListenerOptions",
120-
"AddEventListenerOptions",
121-
"ErrorEventInit",
122-
"PushSubscriptionChangeEvent",
123-
"PushSubscriptionChangeInit",
124-
"ImageBitmap",
125-
"ImageBitmapOptions",
126-
"FormDataEntryValue",
127-
"EventListenerObject",
128-
"URLSearchParams",
129-
"BlobPropertyBag",
130-
"FilePropertyBag",
131-
"IDBValidKey",
1323
"IDBArrayKey",
133-
"IDBVersionChangeEventInit",
134-
"BufferSource"
4+
"IDBValidKey",
5+
"MessageEventSource",
6+
"PromiseRejectionEventInit"
1357
]

src/emitter.ts

Lines changed: 12 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import * as Browser from "./types";
2-
import { mapToArray, distinct, map, toNameMap, mapDefined, arrayToMap, flatMap } from "./helpers";
2+
import { mapToArray, distinct, map, toNameMap, mapDefined, arrayToMap, flatMap, integerTypes, baseTypeConversionMap } from "./helpers";
33

44
export const enum Flavor {
55
Web,
@@ -20,9 +20,6 @@ enum EmitScope {
2020
}
2121

2222
const defaultEventType = "Event";
23-
// Extended types used but not defined in the spec
24-
const extendedTypes = new Set(["ArrayBuffer", "ArrayBufferView", "DataView", "Int8Array", "Uint8Array", "Int16Array", "Uint16Array", "Uint8ClampedArray", "Int32Array", "Uint32Array", "Float32Array", "Float64Array"]);
25-
const integerTypes = new Set(["byte", "octet", "short", "unsigned short", "long", "unsigned long", "long long", "unsigned long long"]);
2623
const tsKeywords = new Set(["default", "delete", "continue"]);
2724
const extendConflictsBaseTypes: Record<string, { extendType: string[], memberNames: Set<string> }> = {
2825
"AudioContext": { extendType: ["OfflineContext"], memberNames: new Set(["suspend"]) },
@@ -308,31 +305,14 @@ export function emitWebIDl(webidl: Browser.WebIdl, flavor: Flavor) {
308305
}
309306

310307
function convertDomTypeToTsTypeSimple(objDomType: string): string {
308+
if (baseTypeConversionMap.has(objDomType)) {
309+
return baseTypeConversionMap.get(objDomType)!;
310+
}
311311
switch (objDomType) {
312312
case "DOMHighResTimeStamp": return "number";
313313
case "DOMTimeStamp": return "number";
314314
case "EventListener": return "EventListenerOrEventListenerObject";
315-
case "double":
316-
case "unrestricted double": return "number";
317-
case "float": return "number";
318-
case "object": return "any";
319-
case "ByteString":
320-
case "DOMString":
321-
case "USVString": return "string";
322-
case "sequence": return "Array";
323-
case "record": return "Record";
324-
case "FrozenArray": return "ReadonlyArray";
325-
case "WindowProxy": return "Window";
326-
case "any":
327-
case "boolean":
328-
case "BufferSource":
329-
case "Date":
330-
case "Function":
331-
case "Promise":
332-
case "void": return objDomType;
333315
default:
334-
if (integerTypes.has(objDomType)) return "number";
335-
if (extendedTypes.has(objDomType)) return objDomType;
336316
if (flavor === Flavor.Worker && (objDomType === "Element" || objDomType === "Window" || objDomType === "Document" || objDomType === "AbortSignal" || objDomType === "HTMLFormElement")) return "object";
337317
if (flavor === Flavor.Web && objDomType === "Client") return "object";
338318
// Name of an interface / enum / dict. Just return itself
@@ -692,10 +672,10 @@ export function emitWebIDl(webidl: Browser.WebIdl, flavor: Flavor) {
692672
if (!i.iterator) {
693673
return;
694674
}
695-
const subtype = i.iterator.subtype.map(convertDomTypeToTsType);
675+
const subtype = i.iterator.type.map(convertDomTypeToTsType);
696676
const value = subtype[subtype.length - 1];
697677
const key = subtype.length > 1 ? subtype[0] :
698-
i.iterator.type === "iterable" ? "number" : value;
678+
i.iterator.kind === "iterable" ? "number" : value;
699679
const name = i.name.replace(/ extends \w+/, "");
700680
printer.printLine(`forEach(callbackfn: (value: ${value}, key: ${key}, parent: ${name}) => void, thisArg?: any): void;`);
701681
}
@@ -1102,10 +1082,10 @@ export function emitWebIDl(webidl: Browser.WebIdl, flavor: Flavor) {
11021082

11031083
function getIteratorSubtypes() {
11041084
if (i.iterator) {
1105-
if (i.iterator.subtype.length === 1) {
1106-
return [convertDomTypeToTsType(i.iterator.subtype[0])];
1085+
if (i.iterator.type.length === 1) {
1086+
return [convertDomTypeToTsType(i.iterator.type[0])];
11071087
}
1108-
return i.iterator.subtype.map(convertDomTypeToTsType);
1088+
return i.iterator.type.map(convertDomTypeToTsType);
11091089
}
11101090
else if (i.name !== "Window" && i.properties) {
11111091
const iterableGetter = findIterableGetter();
@@ -1138,8 +1118,8 @@ export function emitWebIDl(webidl: Browser.WebIdl, flavor: Flavor) {
11381118
if (!iterator) {
11391119
return "";
11401120
}
1141-
const base = iterator.type === "maplike" ? `Map<${subtypes[0]}, ${subtypes[1]}>` :
1142-
iterator.type === "setlike" ? `Set<${subtypes[0]}>` : undefined;
1121+
const base = iterator.kind === "maplike" ? `Map<${subtypes[0]}, ${subtypes[1]}>` :
1122+
iterator.kind === "setlike" ? `Set<${subtypes[0]}>` : undefined;
11431123
if (!base) {
11441124
return "";
11451125
}
@@ -1156,7 +1136,7 @@ export function emitWebIDl(webidl: Browser.WebIdl, flavor: Flavor) {
11561136
if (!iteratorExtends) {
11571137
printer.printLine(`[Symbol.iterator](): IterableIterator<${stringifySingleOrTupleTypes(subtypes)}>`);
11581138
}
1159-
if (i.iterator && i.iterator.type === "iterable") {
1139+
if (i.iterator && i.iterator.kind === "iterable") {
11601140
emitIterableDeclarationMethods(subtypes);
11611141
}
11621142
printer.decreaseIndent();

0 commit comments

Comments
 (0)