From a6beab824815cededf0ba9fc7904d3b00fde75e4 Mon Sep 17 00:00:00 2001 From: Anonymous <65428781+00ff0000red@users.noreply.github.com> Date: Mon, 15 Feb 2021 15:13:46 -0800 Subject: chore: add internal webidl helpers for enums and nullables (#9504) Co-authored-by: Luca Casonato --- op_crates/web/00_webidl.js | 36 +++++++++++++++++++++++++++++++++++- 1 file changed, 35 insertions(+), 1 deletion(-) (limited to 'op_crates/web/00_webidl.js') diff --git a/op_crates/web/00_webidl.js b/op_crates/web/00_webidl.js index 72c58c377..8831cb71e 100644 --- a/op_crates/web/00_webidl.js +++ b/op_crates/web/00_webidl.js @@ -662,10 +662,44 @@ }; } - window.__bootstrap = window.__bootstrap || {}; + // https://heycam.github.io/webidl/#es-enumeration + function createEnumConverter(name, values) { + const E = new Set(values); + + return function (V, opts = {}) { + const S = String(V); + + if (!E.has(S)) { + throw makeException( + TypeError, + `The provided value '${V}' is not a valid enum value of type ${name}.`, + opts, + ); + } + + return S; + }; + } + + function createNullableConverter(converter) { + return (V, opts = {}) => { + // FIXME: If Type(V) is not Object, and the conversion to an IDL value is + // being performed due to V being assigned to an attribute whose type is a + // nullable callback function that is annotated with + // [LegacyTreatNonObjectAsNull], then return the IDL nullable type T? + // value null. + + if (V === null || V === undefined) return null; + return converter(V, opts); + }; + } + + window.__bootstrap ??= {}; window.__bootstrap.webidl = { converters, requiredArguments, createDictionaryConverter, + createEnumConverter, + createNullableConverter, }; })(this); -- cgit v1.2.3