Skip to content

Commit 4878ace

Browse files
committed
refactor(build/emitter): simplify nullability check
1 parent 1d101f5 commit 4878ace

File tree

1 file changed

+14
-27
lines changed

1 file changed

+14
-27
lines changed

src/build/emitter.ts

Lines changed: 14 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -261,7 +261,7 @@ export function emitWebIdl(webidl: Browser.WebIdl, flavor: Flavor, iterator: boo
261261
if (obj.overrideType) return obj.overrideType!;
262262
if (!obj.type) throw new Error("Missing type " + JSON.stringify(obj));
263263
const type = convertDomTypeToTsTypeWorker(obj);
264-
return type.nullable ? makeNullable(type.name) : type.name;
264+
return obj.nullable ? makeNullable(type) : type;
265265
}
266266

267267
function convertDomTypeToTsReturnType(obj: Browser.Typed): string {
@@ -278,38 +278,25 @@ export function emitWebIdl(webidl: Browser.WebIdl, flavor: Flavor, iterator: boo
278278
return type;
279279
}
280280

281-
function convertDomTypeToTsTypeWorker(obj: Browser.Typed): { name: string; nullable: boolean } {
282-
let type;
283-
if (!obj.additionalTypes && typeof obj.type === "string") {
284-
type = { name: convertDomTypeToTsTypeSimple(obj.type), nullable: !!obj.nullable };
285-
}
286-
else {
287-
const types = typeof obj.type === "string" ? [{ ...obj, additionalTypes: undefined }] : obj.type;
288-
types.push(...(obj.additionalTypes ?? []).map(t => ({ type: t })));
289-
290-
const converted = types.map(convertDomTypeToTsTypeWorker);
291-
const isAny = converted.some(t => t.name === "any");
292-
if (isAny) {
293-
type = {
294-
name: "any",
295-
nullable: false
296-
};
281+
function convertDomTypeToTsTypeWorker(obj: Browser.Typed): string {
282+
function convertBaseType() {
283+
if (!obj.additionalTypes && typeof obj.type === "string") {
284+
return convertDomTypeToTsTypeSimple(obj.type);
297285
}
298286
else {
299-
type = {
300-
name: converted.map(t => t.name).join(" | "),
301-
nullable: converted.some(t => t.nullable) || !!obj.nullable
302-
};
287+
const types = typeof obj.type === "string" ? [{ ...obj, additionalTypes: undefined }] : obj.type;
288+
types.push(...(obj.additionalTypes ?? []).map(t => ({ type: t })));
289+
290+
const converted = types.map(convertDomTypeToTsTypeWorker);
291+
const isAny = converted.some(t => t === "any");
292+
return isAny ? "any" : converted.join(" | ");
303293
}
304294
}
305295

306-
const subtypes = arrayify(obj.subtype).map(convertDomTypeToTsTypeWorker);
307-
const subtypeString = subtypes.map(subtype => subtype.nullable ? makeNullable(subtype.name) : subtype.name).join(", ");
296+
const type = convertBaseType();
297+
const subtypeString = arrayify(obj.subtype).map(convertDomTypeToTsType).join(", ");
308298

309-
return {
310-
name: (type.name === "Array" && subtypeString) ? makeArrayType(subtypeString, obj) : `${type.name}${subtypeString ? `<${subtypeString}>` : ""}`,
311-
nullable: type.nullable
312-
};
299+
return (type === "Array" && subtypeString) ? makeArrayType(subtypeString, obj) : `${type}${subtypeString ? `<${subtypeString}>` : ""}`;
313300
}
314301

315302
function makeArrayType(elementType: string, obj: Browser.Typed): string {

0 commit comments

Comments
 (0)