mirror of
https://github.com/alibaba/lowcode-engine.git
synced 2025-12-11 18:42:56 +00:00
200 lines
6.3 KiB
TypeScript
200 lines
6.3 KiB
TypeScript
import {
|
|
Editor,
|
|
engineConfig, Setters as InnerSetters,
|
|
Hotkey as InnerHotkey,
|
|
commonEvent,
|
|
IEngineConfig,
|
|
IHotKey,
|
|
Command as InnerCommand,
|
|
} from '@alilc/lowcode-editor-core';
|
|
import {
|
|
Designer,
|
|
ILowCodePluginContextApiAssembler,
|
|
LowCodePluginManager,
|
|
ILowCodePluginContextPrivate,
|
|
IProject,
|
|
IDesigner,
|
|
ILowCodePluginManager,
|
|
} from '@alilc/lowcode-designer';
|
|
import {
|
|
ISkeleton,
|
|
Skeleton as InnerSkeleton,
|
|
} from '@alilc/lowcode-editor-skeleton';
|
|
import {
|
|
Hotkey,
|
|
Plugins,
|
|
Project,
|
|
Skeleton,
|
|
Setters,
|
|
Material,
|
|
Event,
|
|
Common,
|
|
Logger,
|
|
Workspace,
|
|
Window,
|
|
Canvas,
|
|
CommonUI,
|
|
Command,
|
|
} from '@alilc/lowcode-shell';
|
|
import {
|
|
IPluginPreferenceMananger,
|
|
IPublicApiCanvas,
|
|
IPublicApiCommon,
|
|
IPublicApiEvent,
|
|
IPublicApiHotkey,
|
|
IPublicApiMaterial,
|
|
IPublicApiPlugins,
|
|
IPublicApiProject,
|
|
IPublicApiSetters,
|
|
IPublicApiSkeleton,
|
|
IPublicEnumPluginRegisterLevel,
|
|
IPublicModelPluginContext,
|
|
IPublicTypePluginMeta,
|
|
} from '@alilc/lowcode-types';
|
|
import { getLogger, Logger as InnerLogger } from '@alilc/lowcode-utils';
|
|
import { IWorkspace } from '../workspace';
|
|
import { IEditorWindow } from '../window';
|
|
|
|
export interface IBasicContext extends Omit<IPublicModelPluginContext, 'workspace'> {
|
|
skeleton: IPublicApiSkeleton;
|
|
plugins: IPublicApiPlugins;
|
|
project: IPublicApiProject;
|
|
setters: IPublicApiSetters;
|
|
material: IPublicApiMaterial;
|
|
common: IPublicApiCommon;
|
|
config: IEngineConfig;
|
|
event: IPublicApiEvent;
|
|
logger: InnerLogger;
|
|
hotkey: IPublicApiHotkey;
|
|
innerProject: IProject;
|
|
editor: Editor;
|
|
designer: IDesigner;
|
|
registerInnerPlugins: () => Promise<void>;
|
|
innerSetters: InnerSetters;
|
|
innerSkeleton: ISkeleton;
|
|
innerHotkey: IHotKey;
|
|
innerPlugins: ILowCodePluginManager;
|
|
canvas: IPublicApiCanvas;
|
|
pluginEvent: IPublicApiEvent;
|
|
preference: IPluginPreferenceMananger;
|
|
workspace: IWorkspace;
|
|
}
|
|
|
|
export class BasicContext implements IBasicContext {
|
|
skeleton: IPublicApiSkeleton;
|
|
plugins: IPublicApiPlugins;
|
|
project: IPublicApiProject;
|
|
setters: IPublicApiSetters;
|
|
material: IPublicApiMaterial;
|
|
common: IPublicApiCommon;
|
|
config: IEngineConfig;
|
|
event: IPublicApiEvent;
|
|
logger: InnerLogger;
|
|
hotkey: IPublicApiHotkey;
|
|
innerProject: IProject;
|
|
editor: Editor;
|
|
designer: IDesigner;
|
|
registerInnerPlugins: () => Promise<void>;
|
|
innerSetters: InnerSetters;
|
|
innerSkeleton: ISkeleton;
|
|
innerHotkey: IHotKey;
|
|
innerPlugins: ILowCodePluginManager;
|
|
canvas: IPublicApiCanvas;
|
|
pluginEvent: IPublicApiEvent;
|
|
preference: IPluginPreferenceMananger;
|
|
workspace: IWorkspace;
|
|
|
|
constructor(innerWorkspace: IWorkspace, viewName: string, readonly registerLevel: IPublicEnumPluginRegisterLevel, public editorWindow?: IEditorWindow) {
|
|
const editor = new Editor(viewName, true);
|
|
|
|
const innerSkeleton = new InnerSkeleton(editor, viewName);
|
|
editor.set('skeleton' as any, innerSkeleton);
|
|
|
|
const designer: Designer = new Designer({
|
|
editor,
|
|
viewName,
|
|
shellModelFactory: innerWorkspace?.shellModelFactory,
|
|
});
|
|
editor.set('designer' as any, designer);
|
|
|
|
const { project: innerProject } = designer;
|
|
const workspace = new Workspace(innerWorkspace);
|
|
const innerHotkey = new InnerHotkey(viewName);
|
|
const hotkey = new Hotkey(innerHotkey, true);
|
|
const innerSetters = new InnerSetters(viewName);
|
|
const setters = new Setters(innerSetters, true);
|
|
const material = new Material(editor, true);
|
|
const project = new Project(innerProject, true);
|
|
const config = engineConfig;
|
|
const event = new Event(commonEvent, { prefix: 'common' });
|
|
const logger = getLogger({ level: 'warn', bizName: 'common' });
|
|
const skeleton = new Skeleton(innerSkeleton, 'any', true);
|
|
const canvas = new Canvas(editor, true);
|
|
const commonUI = new CommonUI(editor);
|
|
const innerCommand = new InnerCommand();
|
|
editor.set('setters', setters);
|
|
editor.set('project', project);
|
|
editor.set('material', material);
|
|
editor.set('hotkey', hotkey);
|
|
editor.set('innerHotkey', innerHotkey);
|
|
this.innerSetters = innerSetters;
|
|
this.innerSkeleton = innerSkeleton;
|
|
this.skeleton = skeleton;
|
|
this.innerProject = innerProject;
|
|
this.project = project;
|
|
this.setters = setters;
|
|
this.material = material;
|
|
this.config = config;
|
|
this.event = event;
|
|
this.logger = logger;
|
|
this.hotkey = hotkey;
|
|
this.innerHotkey = innerHotkey;
|
|
this.editor = editor;
|
|
this.designer = designer;
|
|
this.canvas = canvas;
|
|
const common = new Common(editor, innerSkeleton);
|
|
this.common = common;
|
|
let plugins: IPublicApiPlugins;
|
|
|
|
const pluginContextApiAssembler: ILowCodePluginContextApiAssembler = {
|
|
assembleApis: (context: ILowCodePluginContextPrivate, pluginName: string, meta: IPublicTypePluginMeta) => {
|
|
context.workspace = workspace;
|
|
context.hotkey = hotkey;
|
|
context.project = project;
|
|
context.skeleton = new Skeleton(innerSkeleton, pluginName, true);
|
|
context.setters = setters;
|
|
context.material = material;
|
|
const eventPrefix = meta?.eventPrefix || 'common';
|
|
const commandScope = meta?.commandScope;
|
|
context.event = new Event(commonEvent, { prefix: eventPrefix });
|
|
context.config = config;
|
|
context.common = common;
|
|
context.plugins = plugins;
|
|
context.logger = new Logger({ level: 'warn', bizName: `plugin:${pluginName}` });
|
|
context.canvas = canvas;
|
|
context.commonUI = commonUI;
|
|
if (editorWindow) {
|
|
context.editorWindow = new Window(editorWindow);
|
|
}
|
|
context.command = new Command(innerCommand, context as IPublicModelPluginContext, {
|
|
commandScope,
|
|
});
|
|
context.registerLevel = registerLevel;
|
|
context.isPluginRegisteredInWorkspace = registerLevel === IPublicEnumPluginRegisterLevel.Workspace;
|
|
editor.set('pluginContext', context);
|
|
},
|
|
};
|
|
|
|
const innerPlugins = new LowCodePluginManager(pluginContextApiAssembler, viewName);
|
|
this.innerPlugins = innerPlugins;
|
|
plugins = new Plugins(innerPlugins, true).toProxy();
|
|
editor.set('plugins' as any, plugins);
|
|
editor.set('innerPlugins' as any, innerPlugins);
|
|
this.plugins = plugins;
|
|
|
|
// 注册一批内置插件
|
|
this.registerInnerPlugins = async function registerPlugins() {
|
|
await innerWorkspace?.registryInnerPlugin(designer, editor, plugins);
|
|
};
|
|
}
|
|
} |