UNPKG

mathjslab

Version:

MathJSLab - An interpreter with language syntax like MATLAB®/Octave, ISBN 978-65-00-82338-7.

301 lines (300 loc) 11 kB
import type { ClassEnumerationDefinition as ClassEnumerationDefinitionBase, ClassEventDefinition as ClassEventDefinitionBase, ClassMethodDefinition as ClassMethodDefinitionBase, ClassPropertyDefinition as ClassPropertyDefinitionBase } from './ClassMember'; import { ClassDefinition } from './ClassDefinition'; import { type RuntimeExpressionValue } from './AST'; import type { RuntimeDisplay } from './RuntimeDisplay'; type ClassPropertyDefinition = ClassPropertyDefinitionBase<ClassDefinition>; type ClassMethodDefinition = ClassMethodDefinitionBase<ClassDefinition>; type ClassEventDefinition = ClassEventDefinitionBase<ClassDefinition>; type ClassEnumerationDefinition = ClassEnumerationDefinitionBase<ClassDefinition>; /** Member metadata variants that can be exposed as MATLAB-like meta objects. */ type ClassMetaMemberDefinition = ClassPropertyDefinition | ClassMethodDefinition | ClassEventDefinition | ClassEnumerationDefinition; /** Supported meta-object kind names. */ type ClassMetaKind = 'meta.class' | 'meta.property' | 'meta.method' | 'meta.event' | 'meta.EnumerationMember'; /** Runtime values exposed by public MATLAB-like `meta.*` properties. */ type ClassMetaPropertyValue = RuntimeExpressionValue; /** * Callback used by runtime-created meta objects to evaluate property defaults * lazily. */ type ClassPropertyDefaultProvider = (property: ClassPropertyDefinition) => RuntimeExpressionValue | undefined; /** * Base class for MATLAB-like class meta objects. */ declare abstract class ClassMetaObject { /** Runtime type tag used by interpreter predicates. */ static readonly CLASS_META = 7; /** Runtime type tag stored on all meta objects. */ readonly type = 7; /** Optional AST-style parent pointer used by generic value handling. */ parent?: unknown; /** MATLAB-like meta object kind. */ abstract readonly kind: ClassMetaKind; /** * Test whether a value is a class meta object. * * @param obj Value to test. * @returns `true` when `obj` is a `ClassMetaObject`. */ static readonly isInstanceOf: (obj: unknown) => obj is ClassMetaObject; /** * Copy a meta object. * * Meta objects are immutable views, so copying preserves identity. * * @param meta Meta object to copy. * @returns The same meta object. */ static readonly copy: <T extends ClassMetaObject>(meta: T) => T; /** * Copy this meta object. * * @returns This meta object. */ copy(): this; /** * Read a MATLAB-like public meta property. * * @param field Property name. * @returns Property value, if supported. */ abstract getProperty(field: string): ClassMetaPropertyValue | undefined; /** * Return the display name used by unparse and diagnostics. * * @returns Display name. */ abstract displayName(): string; /** * Render a compact meta-object summary. * * @param meta Meta object to render. * @param _interpreter Interpreter requesting unparse. * @returns Human-readable meta-object summary. */ static readonly unparse: (meta: ClassMetaObject, _interpreter: RuntimeDisplay) => string; } /** * Meta object representing a class definition. */ declare class ClassMetaClass extends ClassMetaObject { readonly definition: ClassDefinition; private readonly propertyDefaultProvider?; /** MATLAB-like meta object kind. */ readonly kind = "meta.class"; /** * Create a class meta object. * * @param definition Class metadata. * @param propertyDefaultProvider Optional callback used to expose evaluated * property defaults from runtime-created meta objects. */ private constructor(); /** * Test whether a value is a class meta object. * * @param obj Value to test. * @returns `true` when `obj` is a `ClassMetaClass`. */ static readonly isInstanceOf: (obj: unknown) => obj is ClassMetaClass; /** * Create a class meta object. * * @param definition Class metadata. * @param propertyDefaultProvider Optional callback used to expose evaluated * property defaults from runtime-created meta objects. * @returns Class meta object. */ static readonly create: (definition: ClassDefinition, propertyDefaultProvider?: ClassPropertyDefaultProvider) => ClassMetaClass; /** * Return the class name. * * @returns Class name. */ displayName(): string; /** * Read a supported `meta.class` property. * * @param field Property name. * @returns Property value, if supported. */ getProperty(field: string): ClassMetaPropertyValue | undefined; } /** * Base class for meta objects that wrap class members. */ declare abstract class ClassMetaMember extends ClassMetaObject { readonly member: ClassMetaMemberDefinition; private readonly propertyDefaultProvider?; /** * Create a member meta object. * * @param member Member metadata. * @param propertyDefaultProvider Optional callback propagated back through * `DefiningClass`. */ protected constructor(member: ClassMetaMemberDefinition, propertyDefaultProvider?: ClassPropertyDefaultProvider | undefined); /** * Return a qualified member display name. * * @returns Qualified member name. */ displayName(): string; /** * Read fields shared by property, method, event, and enumeration meta * objects. * * @param field Property name. * @returns Property value, if supported by all member meta objects. */ protected commonProperty(field: string): ClassMetaPropertyValue | undefined; } /** * Meta object representing a class property. */ declare class ClassMetaProperty extends ClassMetaMember { readonly property: ClassPropertyDefinition; private readonly defaultProvider?; /** MATLAB-like meta object kind. */ readonly kind = "meta.property"; /** * Create a property meta object. * * @param property Property metadata. * @param defaultProvider Optional callback used to evaluate the property's * default expression lazily. */ private constructor(); /** * Create a property meta object. * * @param property Property metadata. * @param defaultProvider Optional callback used to evaluate the property's * default expression lazily. * @returns Property meta object. */ static readonly create: (property: ClassPropertyDefinition, defaultProvider?: ClassPropertyDefaultProvider) => ClassMetaProperty; /** * Return the default value exposed through metadata. * * Runtime-created meta objects evaluate defaults lazily; parser-created * meta objects without a provider expose compact expression text. * * @returns Evaluated/default expression value, or `null` when absent. */ private defaultValue; /** * Read a supported `meta.property` property. * * @param field Property name. * @returns Property value, if supported. */ getProperty(field: string): ClassMetaPropertyValue | undefined; } /** * Meta object representing a class method. */ declare class ClassMetaMethod extends ClassMetaMember { readonly method: ClassMethodDefinition; /** MATLAB-like meta object kind. */ readonly kind = "meta.method"; /** * Create a method meta object. * * @param method Method metadata. * @param propertyDefaultProvider Optional callback propagated through * `DefiningClass`. */ private constructor(); /** * Create a method meta object. * * @param method Method metadata. * @param propertyDefaultProvider Optional callback propagated through * `DefiningClass`. * @returns Method meta object. */ static readonly create: (method: ClassMethodDefinition, propertyDefaultProvider?: ClassPropertyDefaultProvider) => ClassMetaMethod; /** * Read a supported `meta.method` property. * * @param field Property name. * @returns Property value, if supported. */ getProperty(field: string): ClassMetaPropertyValue | undefined; } /** * Meta object representing a class event. */ declare class ClassMetaEvent extends ClassMetaMember { readonly event: ClassEventDefinition; /** MATLAB-like meta object kind. */ readonly kind = "meta.event"; /** * Create an event meta object. * * @param event Event metadata. * @param propertyDefaultProvider Optional callback propagated through * `DefiningClass`. */ private constructor(); /** * Create an event meta object. * * @param event Event metadata. * @param propertyDefaultProvider Optional callback propagated through * `DefiningClass`. * @returns Event meta object. */ static readonly create: (event: ClassEventDefinition, propertyDefaultProvider?: ClassPropertyDefaultProvider) => ClassMetaEvent; /** * Read a supported `meta.event` property. * * @param field Property name. * @returns Property value, if supported. */ getProperty(field: string): ClassMetaPropertyValue | undefined; } /** * Meta object representing an enumeration member. */ declare class ClassMetaEnumerationMember extends ClassMetaMember { readonly enumeration: ClassEnumerationDefinition; /** MATLAB-like meta object kind. */ readonly kind = "meta.EnumerationMember"; /** * Create an enumeration-member meta object. * * @param enumeration Enumeration metadata. * @param propertyDefaultProvider Optional callback propagated through * `DefiningClass`. */ private constructor(); /** * Create an enumeration-member meta object. * * @param enumeration Enumeration metadata. * @param propertyDefaultProvider Optional callback propagated through * `DefiningClass`. * @returns Enumeration-member meta object. */ static readonly create: (enumeration: ClassEnumerationDefinition, propertyDefaultProvider?: ClassPropertyDefaultProvider) => ClassMetaEnumerationMember; /** * Read a supported `meta.EnumerationMember` property. * * @param field Property name. * @returns Property value, if supported. */ getProperty(field: string): ClassMetaPropertyValue | undefined; } export { ClassMetaObject, ClassMetaClass, ClassMetaMember, ClassMetaProperty, ClassMetaMethod, ClassMetaEvent, ClassMetaEnumerationMember }; export type { ClassMetaKind, ClassMetaPropertyValue }; declare const _default: { ClassMetaObject: typeof ClassMetaObject; ClassMetaClass: typeof ClassMetaClass; ClassMetaMember: typeof ClassMetaMember; ClassMetaProperty: typeof ClassMetaProperty; ClassMetaMethod: typeof ClassMetaMethod; ClassMetaEvent: typeof ClassMetaEvent; ClassMetaEnumerationMember: typeof ClassMetaEnumerationMember; }; export default _default;