export declare namespace Canonical { enum Kind { Base = "base", Composite = "composite", Domain = "domain", Enum = "enum", Range = "range", Pseudo = "pseudo", Unknown = "unknown" } interface Abstract { original_type: string; canonical_name: string; schema: string; name: string; kind: Kind; dimensions: number; modifiers?: string | null; } interface Base extends Abstract { kind: Kind.Base; } interface Enum extends Abstract { kind: Kind.Enum; enum_values: string[]; } interface CompositeAttribute { name: string; index: number; type: Canonical; comment: string | null; defaultValue: any; isNullable: boolean; /** * Whether the attribute is an identity attribute. */ isIdentity: boolean; /** * Behavior of the generated attribute. "ALWAYS" if always generated, * "NEVER" if never generated, "BY DEFAULT" if generated when a value * is not provided. */ generated: "ALWAYS" | "NEVER" | "BY DEFAULT"; } interface Composite extends Abstract { kind: Kind.Composite; attributes: CompositeAttribute[]; } interface Domain extends Abstract { kind: Kind.Domain; domain_base_type: Canonical; } interface Range extends Abstract { kind: Kind.Range; range_subtype: Canonical; } interface Pseudo extends Abstract { kind: Kind.Pseudo; } } export type Canonical = Canonical.Base | Canonical.Enum | Canonical.Composite | Canonical.Domain | Canonical.Range | Canonical.Pseudo; type Exclusive = Omit>; export type ExclusiveBase = Exclusive; export type ExclusiveEnum = Exclusive; export type ExclusiveComposite = Exclusive; export type ExclusiveDomain = Exclusive; export type ExclusiveRange = Exclusive; export type ExclusivePseudo = Exclusive; export type ExclusiveCanonProps = ExclusiveBase | ExclusiveEnum | ExclusiveComposite | ExclusiveDomain | ExclusiveRange | ExclusivePseudo; export {};