@opra/common
Version:
Opra common package
82 lines (81 loc) • 2.99 kB
TypeScript
import 'reflect-metadata';
import type { Combine, Type, TypeThunkAsync } 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 { DocumentInitContext } from '../common/document-init-context.js';
import { ApiField } from './api-field.js';
import { ComplexTypeBase } from './complex-type-base.js';
import { DataType } from './data-type.js';
import type { MappedType } from './mapped-type.js';
import type { MixinType } from './mixin-type.js';
/**
* @namespace ComplexType
*/
export declare namespace ComplexType {
interface Metadata extends Combine<{
kind: OpraSchema.ComplexType.Kind;
fields?: Record<string, ApiField.Metadata>;
additionalFields?: boolean | string | TypeThunkAsync | ['error'] | ['error', string];
}, DataType.Metadata, OpraSchema.ComplexType> {
}
interface Options extends Combine<Pick<Metadata, 'additionalFields' | 'keyField' | 'discriminatorField' | 'discriminatorValue'>, DataType.Options, Pick<OpraSchema.ComplexType, 'abstract'>> {
}
interface InitArguments extends Combine<{
kind: OpraSchema.ComplexType.Kind;
base?: ComplexType | MappedType | MixinType;
fields?: Record<string, ApiField.InitArguments | ApiField>;
additionalFields?: boolean | DataType | ['error'] | ['error', string];
}, DataType.InitArguments, ComplexType.Metadata> {
}
interface ParsedFieldPath {
fieldName: string;
dataType: DataType;
field?: ApiField;
additionalField?: boolean;
sign?: '+' | '-';
}
}
/**
* Type definition for MixinType
* @class ComplexType
*/
export interface ComplexTypeStatic {
/**
* Class constructor of ComplexType
*
* @param owner
* @param args
* @param context
* @constructor
*/
new (owner: DocumentElement, args?: ComplexType.InitArguments, context?: DocumentInitContext): ComplexType;
(options?: ComplexType.Options): ClassDecorator;
prototype: ComplexType;
extend<T extends Type>(typeClass: T, fields: Record<string, ApiField.Options>): T;
}
/**
* Type definition of ComplexType prototype
* @interface ComplexType
*/
export interface ComplexType extends ComplexTypeClass {
}
/**
* ComplexType constructor
*/
export declare const ComplexType: ComplexTypeStatic;
/**
*
* @class ComplexType
*/
declare abstract class ComplexTypeClass extends ComplexTypeBase {
readonly kind: OpraSchema.ComplexType.Kind;
readonly base?: ComplexType | MappedType | MixinType;
readonly ctor?: Type;
discriminatorField?: string;
discriminatorValue?: string;
extendsFrom(baseType: DataType | string | Type | object): boolean;
toJSON(options?: ApiDocument.ExportOptions): OpraSchema.ComplexType;
protected _locateBase(callback: (base: ComplexTypeBase) => boolean): ComplexTypeBase | undefined;
}
export {};