1
0
Fork 0
mirror of https://github.com/denoland/deno.git synced 2024-12-01 16:51:13 -05:00

chore: add internal webidl helpers for enums and nullables (#9504)

Co-authored-by: Luca Casonato <lucacasonato@yahoo.com>
This commit is contained in:
Anonymous 2021-02-15 15:13:46 -08:00 committed by GitHub
parent 0cf952e7fb
commit a6beab8248
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 52 additions and 3 deletions

View file

@ -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 = { window.__bootstrap.webidl = {
converters, converters,
requiredArguments, requiredArguments,
createDictionaryConverter, createDictionaryConverter,
createEnumConverter,
createNullableConverter,
}; };
})(this); })(this);

View file

@ -209,13 +209,28 @@ declare namespace globalThis {
required?: boolean; required?: boolean;
} }
/**ie /**
* Assert that the a function has at least a required amount of arguments. * Create a converter for dictionaries.
*/ */
declare function createDictionaryConverter<T>( declare function createDictionaryConverter<T>(
name: string, name: string,
...dictionaries: Dictionary[] ...dictionaries: Dictionary[]
): (v: any, opts: ValueConverterOpts) => T; ): (v: any, opts: ValueConverterOpts) => T;
/**
* Create a converter for enums.
*/
declare function createEnumConverter(
name: string,
values: string[],
): (v: any, opts: ValueConverterOpts) => string;
/**
* Create a converter that makes the contained type nullable.
*/
declare function createNullableConverter<T>(
converter: (v: any, opts: ValueConverterOpts) => T,
): (v: any, opts: ValueConverterOpts) => T | null;
} }
declare var url: { declare var url: {