blob: 52c70254b70be305f416b64e13c7968d318ddf93 [file] [log] [blame]
import { ExtendedAttributes } from "./productions/extended-attributes.js";
import { Type } from "./productions/type.js";
import { Default } from "./productions/default.js";
import { Token } from "./tokeniser.js";
import { Argument } from "./productions/argument.js";
import { WrappedToken } from "./productions/token.js";
import { Base } from "./productions/base.js";
import { Definitions } from "./validator.js";
import { Writer } from "./writer.js";
declare module "./tokeniser.js" {
interface Tokeniser {
current: any;
// TODO: This somehow causes fatal error on typescript
// source: Token[] & { name?: string };
}
}
declare module "./productions/argument.js" {
interface Argument {
idlType: Type;
default: Default | null;
}
}
declare module "./productions/attribute.js" {
interface Attribute {
idlType: Type;
default: Default | null;
}
}
declare module "./productions/attribute.js" {
interface Attribute {
idlType: Type;
default: Default | null;
}
}
declare module "./productions/callback.js" {
interface CallbackFunction {
idlType: Type;
arguments: Argument[];
}
}
declare module "./productions/constant.js" {
interface Constant {
idlType: Type;
}
}
declare module "./productions/constructor.js" {
interface Constructor {
arguments: Argument[];
}
}
declare module "./productions/container.js" {
interface TypedBase extends Base {
type: string
}
interface Container {
type: string;
members: RootType[];
}
}
declare module "./productions/default.js" {
interface Default {
expression: Token[];
}
}
declare module "./productions/enum.js" {
interface Enum {
values: EnumValue[];
}
}
declare module "./productions/field.js" {
interface Field {
idlType: Type;
default: Default | null;
}
}
declare module "./productions/iterable.js" {
interface IterableLike {
idlType: Type[];
arguments: Argument[];
}
}
declare module "./productions/operation.js" {
interface Operation {
idlType: Type;
arguments: Argument[];
}
}
declare module "./productions/typedef.js" {
interface Typedef {
idlType: Type;
}
}
declare module "./productions/extended-attributes.js" {
interface ExtendedAttributeParameters {
list: WrappedToken[] | Argument[];
}
interface SimpleExtendedAttribute {
params: ExtendedAttributeParameters;
}
}
declare module "./productions/base.js" {
interface Base {
tokens: Record<string, Token | undefined>;
source: Token[];
extAttrs: ExtendedAttributes | undefined;
this: this;
parent?: any;
validate?(defs: Definitions): IterableIterator<any>;
write(w: Writer): any;
}
}
declare module "./productions/array-base.js" {
interface ArrayBase {
tokens: Record<string, Token | undefined>;
source: Token[];
parent?: any;
}
}
declare module "./productions/type.js" {
interface Type {
/**
* TODO: This kind of type check should ultimately be replaced by exposed constructors.
* See https://github.com/w3c/webidl2.js/issues/537 and https://github.com/w3c/webidl2.js/issues/297.
*/
type: string | null;
subtype: Type[];
}
}
declare global {
export type ArrayItemType<T> = T extends Array<infer X> ? X : null;
}