123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220 |
- // These types are not exported, and are only used internally
- /**
- * Take in an unknown value and return one that is of type T
- */
- type Converter<T> = (object: unknown) => T
- type SequenceConverter<T> = (object: unknown) => T[]
- type RecordConverter<K extends string, V> = (object: unknown) => Record<K, V>
- interface ConvertToIntOpts {
- clamp?: boolean
- enforceRange?: boolean
- }
- interface WebidlErrors {
- exception (opts: { header: string, message: string }): TypeError
- /**
- * @description Throw an error when conversion from one type to another has failed
- */
- conversionFailed (opts: {
- prefix: string
- argument: string
- types: string[]
- }): TypeError
- /**
- * @description Throw an error when an invalid argument is provided
- */
- invalidArgument (opts: {
- prefix: string
- value: string
- type: string
- }): TypeError
- }
- interface WebidlUtil {
- /**
- * @see https://tc39.es/ecma262/#sec-ecmascript-data-types-and-values
- */
- Type (object: unknown):
- | 'Undefined'
- | 'Boolean'
- | 'String'
- | 'Symbol'
- | 'Number'
- | 'BigInt'
- | 'Null'
- | 'Object'
- /**
- * @see https://webidl.spec.whatwg.org/#abstract-opdef-converttoint
- */
- ConvertToInt (
- V: unknown,
- bitLength: number,
- signedness: 'signed' | 'unsigned',
- opts?: ConvertToIntOpts
- ): number
- /**
- * @see https://webidl.spec.whatwg.org/#abstract-opdef-converttoint
- */
- IntegerPart (N: number): number
- }
- interface WebidlConverters {
- /**
- * @see https://webidl.spec.whatwg.org/#es-DOMString
- */
- DOMString (V: unknown, opts?: {
- legacyNullToEmptyString: boolean
- }): string
- /**
- * @see https://webidl.spec.whatwg.org/#es-ByteString
- */
- ByteString (V: unknown): string
- /**
- * @see https://webidl.spec.whatwg.org/#es-USVString
- */
- USVString (V: unknown): string
- /**
- * @see https://webidl.spec.whatwg.org/#es-boolean
- */
- boolean (V: unknown): boolean
- /**
- * @see https://webidl.spec.whatwg.org/#es-any
- */
- any <Value>(V: Value): Value
- /**
- * @see https://webidl.spec.whatwg.org/#es-long-long
- */
- ['long long'] (V: unknown): number
- /**
- * @see https://webidl.spec.whatwg.org/#es-unsigned-long-long
- */
- ['unsigned long long'] (V: unknown): number
- /**
- * @see https://webidl.spec.whatwg.org/#es-unsigned-long
- */
- ['unsigned long'] (V: unknown): number
- /**
- * @see https://webidl.spec.whatwg.org/#es-unsigned-short
- */
- ['unsigned short'] (V: unknown, opts?: ConvertToIntOpts): number
- /**
- * @see https://webidl.spec.whatwg.org/#idl-ArrayBuffer
- */
- ArrayBuffer (V: unknown): ArrayBufferLike
- ArrayBuffer (V: unknown, opts: { allowShared: false }): ArrayBuffer
- /**
- * @see https://webidl.spec.whatwg.org/#es-buffer-source-types
- */
- TypedArray (
- V: unknown,
- TypedArray: NodeJS.TypedArray | ArrayBufferLike
- ): NodeJS.TypedArray | ArrayBufferLike
- TypedArray (
- V: unknown,
- TypedArray: NodeJS.TypedArray | ArrayBufferLike,
- opts?: { allowShared: false }
- ): NodeJS.TypedArray | ArrayBuffer
- /**
- * @see https://webidl.spec.whatwg.org/#es-buffer-source-types
- */
- DataView (V: unknown, opts?: { allowShared: boolean }): DataView
- /**
- * @see https://webidl.spec.whatwg.org/#BufferSource
- */
- BufferSource (
- V: unknown,
- opts?: { allowShared: boolean }
- ): NodeJS.TypedArray | ArrayBufferLike | DataView
- ['sequence<ByteString>']: SequenceConverter<string>
-
- ['sequence<sequence<ByteString>>']: SequenceConverter<string[]>
- ['record<ByteString, ByteString>']: RecordConverter<string, string>
- [Key: string]: (...args: any[]) => unknown
- }
- export interface Webidl {
- errors: WebidlErrors
- util: WebidlUtil
- converters: WebidlConverters
- /**
- * @description Performs a brand-check on {@param V} to ensure it is a
- * {@param cls} object.
- */
- brandCheck <Interface>(V: unknown, cls: Interface, opts?: { strict?: boolean }): asserts V is Interface
- /**
- * @see https://webidl.spec.whatwg.org/#es-sequence
- * @description Convert a value, V, to a WebIDL sequence type.
- */
- sequenceConverter <Type>(C: Converter<Type>): SequenceConverter<Type>
- illegalConstructor (): never
- /**
- * @see https://webidl.spec.whatwg.org/#es-to-record
- * @description Convert a value, V, to a WebIDL record type.
- */
- recordConverter <K extends string, V>(
- keyConverter: Converter<K>,
- valueConverter: Converter<V>
- ): RecordConverter<K, V>
- /**
- * Similar to {@link Webidl.brandCheck} but allows skipping the check if third party
- * interfaces are allowed.
- */
- interfaceConverter <Interface>(cls: Interface): (
- V: unknown,
- opts?: { strict: boolean }
- ) => asserts V is typeof cls
- // TODO(@KhafraDev): a type could likely be implemented that can infer the return type
- // from the converters given?
- /**
- * Converts a value, V, to a WebIDL dictionary types. Allows limiting which keys are
- * allowed, values allowed, optional and required keys. Auto converts the value to
- * a type given a converter.
- */
- dictionaryConverter (converters: {
- key: string,
- defaultValue?: unknown,
- required?: boolean,
- converter: (...args: unknown[]) => unknown,
- allowedValues?: unknown[]
- }[]): (V: unknown) => Record<string, unknown>
- /**
- * @see https://webidl.spec.whatwg.org/#idl-nullable-type
- * @description allows a type, V, to be null
- */
- nullableConverter <T>(
- converter: Converter<T>
- ): (V: unknown) => ReturnType<typeof converter> | null
- argumentLengthCheck (args: { length: number }, min: number, context: {
- header: string
- message?: string
- }): void
- }
|