export { EventEmitter } from './common/EventEmitter';
export { Vertex } from './common/Vertex';
export { default as PackageJSON } from './common/PackageJSON';
export { vertexsMap, genFinalCode } from './cacheData';

export { App } from './app/App';
export { History } from './app/History';
export { Service, WebService, MicroService, SERVICE_TYPE } from './app/Service';

export { DataNode } from './data/DataNode';
export { GlobalLogicNode } from './data/GlobalLogicNode';
export { Entity, systemProperty } from './data/Entity';
export { EntityProperty } from './data/EntityProperty';
export { EntityIndex } from './data/EntityIndex';
export { Structure } from './data/Structure';
export { StructureProperty } from './data/StructureProperty';
export { Enum } from './data/Enum';
export { EnumItem } from './data/EnumItem';
export * from './data/dataTypes';
export * from './data/dataTypeUtils';
export { Interface } from './data/Interface';
export { Category } from './data/GlobalLogicNode';
export { Logic } from './logic/Logic';
export { LogicItem, LogicNode, ExpressionNode, evaluate } from './logic/LogicItem';
export { BaseVariable, updateVariablesChildrenSchema, updateAllVariablesChildrenSchema } from './logic/BaseVariable';
export { Param } from './logic/Param';
export { Variable } from './logic/Variable';
export { Return } from './logic/Return';

export { Page } from './page/Page';
export { View } from './page/View';
export { ViewParam } from './page/ViewParam';
export { ViewVariable } from './page/ViewVariable';
export { Lifecycle } from './page/Lifecycle';
export { Block } from './page/Block';
export { Process } from './process/Process';
export { ProcessComponent } from './process/ProcessComponent';
export { ProcessParam } from './process/ProcessParam';
export { ProcessReturn } from './process/ProcessReturn';
export { ProcessProperty } from './process/ProcessProperty';
export { ProcessComponentReturn } from './process/ProcessComponentReturn';
export { ProcessComponentVariable } from './process/ProcessComponentVariable';
export { ProcessComponentAttribute } from './process/ProcessComponentAttribute';
export { ProcessComponentProperty } from './process/ProcessComponentProperty';
export { ProcessInterface } from './process/ProcessInterface';
export { Element } from './page/Element';
export { Attr } from './page/Attr';
export { Event } from './page/Event';
export { Directive } from './page/Directive';
export { Nuims } from './nuims/Nuims';
export * from './data/Schema';

export { default as config } from './config';
export { default as history } from './history';
export { default as typeCheck } from './typeCheck';
export { default as login } from './login';
export * as utils from './utils';
export * as genBlock from './data/genBlock';
export * as generator from './generator';

/**
 * 层级枚举
 * 目前是弱一点的判断
 */
export enum LEVEL_ENUM {
    vertex = 'vertex',
    edge = 'edge',

    app = 'app',
    service = 'service',

    page = 'page',
    view = 'view',
    block = 'block',

    logic = 'logic',
    param = 'param',
    variable = 'variable',
    return = 'return',
    interface = 'interface',

    dataNode = 'dataNode',
    gloablLogicNode = 'gloablLogicNode',
    category = 'category',
    entity = 'entity',
    structure = 'structure',
    enum = 'enum',
    enumItem = 'enumItem',
    schema = 'schema',
    property = 'property',
    entityIndex = 'entityIndex',

    lifecycle = 'lifecycle',
    element = 'element',
    attr = 'attr',
    event = 'event',
    directive = 'directive',

    logicItem = 'logicItem',
    logicNode = 'logicNode',
    expressionNode = 'expressionNode',

    process = 'process',
    processComponent = 'processComponent',
    processParam = 'processParam',
    processReturn = 'processReturn',
    processProperty = 'processProperty',
    processComponentReturn = 'processComponentReturn',
    processComponentVariable = 'processComponentVariable',
    processComponentAttribute = 'processComponentAttribute',
    processComponentProperty = 'processComponentProperty',
}

export const LEVEL_NAME_MAP = {
    app: '应用',
    service: '服务',

    page: '页面',
    view: '子页面',
    block: '区块',

    logic: '逻辑',
    param: '输入参数',
    variable: '局部变量',
    return: '输出参数',
    interface: '接口',

    dataNode: '数据',
    entity: '实体',
    structure: '数据结构',
    enum: '枚举',
    enumItem: '枚举项',
    property: '属性',

    lifecycle: '生命周期',
    element: '元素',
    attr: '属性',
    event: '事件',
    directive: '指令',

    logicItem: '逻辑项',
    logicNode: '逻辑节点',
    expressionNode: '表达式节点',
};

/**
 * 操作模式
 */
export enum ACTION_MODE {
    undoRedo = 'undoRedo',
    local = 'local',
    mock = 'mock',
}
export interface ActionOptions {
    actionMode?: ACTION_MODE;
    actionName?: string;
    actionDesc?: string;
    actionIgnore?: boolean;
    loadHistory?: boolean;
    checkTypeIgnore?: boolean;
}
