container.ts 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. import { Container } from 'inversify';
  2. import {
  3. ScopeChain,
  4. VariableContainerModule,
  5. } from '@flowgram.ai/variable-core';
  6. import { createPlaygroundContainer } from '@flowgram.ai/core';
  7. import {
  8. FreeLayoutScopeChain,
  9. FixedLayoutScopeChain,
  10. FlowNodeVariableData,
  11. VariableLayoutConfig,
  12. } from '../src';
  13. import { EntityManager } from '@flowgram.ai/core';
  14. import { VariableEngine } from '@flowgram.ai/variable-core';
  15. import {
  16. FlowDocument,
  17. FlowDocumentContainerModule,
  18. } from '@flowgram.ai/document';
  19. import { WorkflowDocumentContainerModule, WorkflowLinesManager, WorkflowSimpleLineContribution } from '@flowgram.ai/free-layout-core';
  20. export function getContainer(layout: 'free' | 'fixed', layoutConfig?: VariableLayoutConfig): Container {
  21. const container = createPlaygroundContainer() as Container;
  22. container.load(VariableContainerModule);
  23. container.load(FlowDocumentContainerModule);
  24. if (layout === 'free') {
  25. container.load(WorkflowDocumentContainerModule);
  26. container.get(WorkflowLinesManager).registerContribution(WorkflowSimpleLineContribution);
  27. container.get(WorkflowLinesManager).switchLineType(WorkflowSimpleLineContribution.type);
  28. }
  29. if (layoutConfig) {
  30. container.bind(VariableLayoutConfig).toConstantValue(layoutConfig);
  31. }
  32. if (layout === 'free') {
  33. container.bind(ScopeChain).to(FreeLayoutScopeChain).inSingletonScope();
  34. }
  35. if (layout === 'fixed') {
  36. container.bind(ScopeChain).to(FixedLayoutScopeChain).inSingletonScope();
  37. }
  38. const entityManager = container.get<EntityManager>(EntityManager);
  39. const variableEngine = container.get<VariableEngine>(VariableEngine);
  40. const document = container.get<FlowDocument>(FlowDocument);
  41. /**
  42. * 扩展 FlowNodeVariableData
  43. */
  44. entityManager.registerEntityData(
  45. FlowNodeVariableData,
  46. () => ({ variableEngine } as any),
  47. );
  48. document.registerNodeDatas(FlowNodeVariableData);
  49. return container;
  50. }