UNPKG

@opra/common

Version:
95 lines (94 loc) 3.43 kB
import 'reflect-metadata'; import type { Class, Combine, Type } from 'ts-gems'; import { OpraSchema } from '../../schema/index.js'; import type { ApiDocument } from '../api-document.js'; import type { DocumentElement } from '../common/document-element.js'; import type { ComplexType } from './complex-type.js'; import { ComplexTypeBase } from './complex-type-base.js'; import { DataType } from './data-type.js'; import type { MappedType } from './mapped-type.js'; /** * @namespace MixinType */ export declare namespace MixinType { interface Metadata extends Combine<{ kind: OpraSchema.MixinType.Kind; name?: string; types: Type[]; }, DataType.Metadata, Pick<ComplexType.Metadata, 'additionalFields'>, OpraSchema.MixinType> { } interface InitArguments extends Combine<{ kind: OpraSchema.MixinType.Kind; types: (ComplexType | MappedType | MixinType)[]; ctor?: Type; }, DataType.InitArguments, MixinType.Metadata> { } } /** * Type definition for MixinType * @class MixinType */ export interface MixinTypeStatic { /** * Class constructor of MixinType * * @param owner * @param args * @constructor */ new (owner: DocumentElement, args: MixinType.InitArguments): MixinType; /** * Create a new mixin type from given two types * @param types * @param options */ <A1 extends any[], I1, S1, A2 extends any[], I2, S2>(types: [Class<A1, I1, S1>, Class<A2, I2, S2>], options?: DataType.Options): Class<any[], I1 & I2, S1 & S2>; /** * Helper method that mixes given types * @param types * @param options */ <A1 extends any[], I1, S1, A2 extends any[], I2, S2, A3 extends any[], I3, S3>(types: [Class<A1, I1, S1>, Class<A2, I2, S2>, Class<A3, I3, S3>], options?: DataType.Options): Class<any[], I1 & I2 & I3, S1 & S2 & S3>; /** * Helper method that mixes given types * @param types * @param options */ <A1 extends any[], I1, S1, A2 extends any[], I2, S2, A3 extends any[], I3, S3, A4 extends any[], I4, S4>(types: [ Class<A1, I1, S1>, Class<A2, I2, S2>, Class<A3, I3, S3>, Class<A4, I4, S4> ], options?: DataType.Options): Class<any[], I1 & I2 & I3 & I4, S1 & S2 & S3 & S4>; /** * Helper method that mixes given types * @param types * @param options */ <A1 extends any[], I1, S1, A2 extends any[], I2, S2, A3 extends any[], I3, S3, A4 extends any[], I4, S4, A5 extends any[], I5, S5>(types: [ Class<A1, I1, S1>, Class<A2, I2, S2>, Class<A3, I3, S3>, Class<A4, I4, S4>, Class<A5, I5, S5> ], options?: DataType.Options): Class<any[], I1 & I2 & I3 & I4 & I5, S1 & S2 & S3 & S4 & S5>; prototype: MixinType; } /** * Type definition of MixinType prototype * @interface */ export interface MixinType extends MixinTypeClass { } /** * @class MixinType */ export declare const MixinType: MixinTypeStatic; /** * * @class MixinType */ declare class MixinTypeClass extends ComplexTypeBase { readonly kind: OpraSchema.MixinType.Kind; readonly types: (ComplexType | MixinType | MappedType)[]; extendsFrom(baseType: DataType | string | Type | object): boolean; toJSON(options?: ApiDocument.ExportOptions): OpraSchema.MixinType; protected _locateBase(callback: (base: ComplexTypeBase) => boolean): ComplexTypeBase | undefined; } export {};