import { IPublicEnumTransformStage } from '@alilc/lowcode-types'; import type { IPublicTypeCompositeValue, IPublicTypeJSSlot, IPublicModelProp, IPublicTypeNodeData } from '@alilc/lowcode-types'; import { IPropParent } from './props'; import type { IProps } from './props'; import { INode } from '../node'; export declare const UNSET: unique symbol; export type UNSET = typeof UNSET; export interface IProp extends Omit, 'exportSchema' | 'node'>, IPropParent { spread: boolean; key: string | number | undefined; readonly props: IProps; readonly owner: INode; delete(prop: IProp): void; export(stage: IPublicEnumTransformStage): IPublicTypeCompositeValue; getNode(): INode; getAsString(): string; unset(): void; get value(): IPublicTypeCompositeValue | UNSET; compare(other: IProp | null): number; isUnset(): boolean; purge(): void; setupItems(): IProp[] | null; isVirtual(): boolean; get type(): ValueTypes; get size(): number; get code(): string; } export type ValueTypes = 'unset' | 'literal' | 'map' | 'list' | 'expression' | 'slot'; export declare class Prop implements IProp, IPropParent { parent: IPropParent; readonly isProp = true; readonly owner: INode; /** * 键值 */ key: string | number | undefined; /** * 扩展值 */ spread: boolean; readonly props: IProps; readonly options: any; readonly id: string; private _type; /** * 属性类型 */ get type(): ValueTypes; private _value; /** * 属性值 */ get value(): IPublicTypeCompositeValue | UNSET; private _code; /** * 获得表达式值 */ get code(): string; /** * 设置表达式值 */ set code(code: string); private _slotNode?; get slotNode(): INode | null; private _items; /** * 作为一层缓存机制,主要是复用部分已存在的 Prop,保持响应式关系,比如: * 当前 Prop#_value 值为 { a: 1 },当调用 setValue({ a: 2 }) 时,所有原来的子 Prop 均被销毁, * 导致假如外部有 mobx reaction(常见于 observer),此时响应式链路会被打断, * 因为 reaction 监听的是原 Prop(a) 的 _value,而不是新 Prop(a) 的 _value。 */ private _maps; /** * 构造 items 属性,同时构造 maps 属性 */ private get items(); private get maps(); get path(): string[]; /** * 元素个数 */ get size(): number; private purged; constructor(parent: IPropParent, value?: IPublicTypeCompositeValue | IPublicTypeNodeData | IPublicTypeNodeData[] | UNSET, key?: string | number, spread?: boolean, options?: {}); setupItems(): IProp[]; /** * @see SettingTarget */ getPropValue(propName: string | number): any; /** * @see SettingTarget */ setPropValue(propName: string | number, value: any): void; /** * @see SettingTarget */ clearPropValue(propName: string | number): void; export(stage?: IPublicEnumTransformStage): IPublicTypeCompositeValue; getAsString(): string; /** * set value, val should be JSON Object */ setValue(val: IPublicTypeCompositeValue | IPublicTypeNodeData | IPublicTypeNodeData[]): void; emitChange: ({ oldValue, }: { oldValue: IPublicTypeCompositeValue | UNSET; }) => void; getValue(): IPublicTypeCompositeValue; private dispose; setAsSlot(data: IPublicTypeJSSlot): void; /** * 取消设置值 */ unset(): void; /** * 是否未设置值 */ isUnset(): boolean; isVirtual(): boolean; /** * @returns 0: the same 1: maybe & like 2: not the same */ compare(other: IProp | null): number; /** * 获取某个属性 * @param createIfNone 当没有的时候,是否创建一个 */ get(path: string | number, createIfNone?: boolean): IProp | null; /** * 从父级移除本身 */ remove(): void; /** * 删除项 */ delete(prop: IProp): void; /** * 删除 key */ deleteKey(key: string): void; /** * 添加值到列表 * * @param force 强制 */ add(value: IPublicTypeCompositeValue, force?: boolean): IProp | null; /** * 设置值到字典 * * @param force 强制 */ set(key: string | number, value: IPublicTypeCompositeValue | Prop, force?: boolean): Prop; /** * 是否存在 key */ has(key: string): boolean; /** * 回收销毁 */ purge(): void; /** * 迭代器 */ [Symbol.iterator](): { next(): { value: IProp; }; }; /** * 遍历 */ forEach(fn: (item: IProp, key: number | string | undefined) => void): void; /** * 遍历 */ map(fn: (item: IProp, key: number | string | undefined) => T): T[] | null; getProps(): IProps; getNode(): INode; } export declare function isProp(obj: any): obj is Prop; export declare function isValidArrayIndex(key: any, limit?: number): key is number;