{
  "version": 3,
  "sources": ["../../../src/language/eventmodeling/tokenBuilder.ts", "../../../src/language/eventmodeling/event-modeling-validator.ts", "../../../src/language/eventmodeling/module.ts"],
  "sourcesContent": ["import { AbstractMermaidTokenBuilder } from '../common/index.js';\n\nexport class EventModelingTokenBuilder extends AbstractMermaidTokenBuilder {\n  public constructor() {\n    super(['eventmodeling']);\n  }\n}\n", "import type { ValidationAcceptor, ValidationChecks } from 'langium';\nimport type { EmFrame, EmResetFrame, EmTimeFrame, MermaidAstType } from '../generated/ast.js';\nimport type { EventModelingServices } from './module.js';\n\nconst COMMAND_TYPES = new Set<string>(['cmd', 'command']);\nconst EVENT_TYPES = new Set<string>(['evt', 'event']);\nconst READMODEL_TYPES = new Set<string>(['rmo', 'readmodel']);\nconst PROCESSOR_TYPES = new Set<string>(['pcr', 'processor']);\nconst UI_TYPES = new Set<string>(['ui']);\n\nexport function registerValidationChecks(services: EventModelingServices) {\n  const validator = services.validation.EventModelingValidator;\n  const registry = services.validation.ValidationRegistry;\n  if (registry) {\n    const checks: ValidationChecks<MermaidAstType> = {\n      EmTimeFrame: validator.checkSourceFrameTypes.bind(validator),\n      EmResetFrame: validator.checkSourceFrameTypes.bind(validator),\n    };\n    registry.register(checks, validator);\n  }\n}\n\nexport class EventModelingValidator {\n  checkSourceFrameTypes(frame: EmTimeFrame | EmResetFrame, accept: ValidationAcceptor): void {\n    if (frame.sourceFrames.length === 0) {\n      return;\n    }\n\n    if (COMMAND_TYPES.has(frame.modelEntityType)) {\n      this.validateSources(\n        frame,\n        new Set([...UI_TYPES, ...PROCESSOR_TYPES]),\n        'command',\n        'ui or processor',\n        accept\n      );\n    } else if (EVENT_TYPES.has(frame.modelEntityType)) {\n      this.validateSources(frame, COMMAND_TYPES, 'event', 'command', accept);\n    } else if (READMODEL_TYPES.has(frame.modelEntityType)) {\n      this.validateSources(frame, EVENT_TYPES, 'read model', 'event', accept);\n    } else if (PROCESSOR_TYPES.has(frame.modelEntityType)) {\n      this.validateSources(frame, READMODEL_TYPES, 'processor', 'read model', accept);\n    } else if (UI_TYPES.has(frame.modelEntityType)) {\n      this.validateSources(frame, READMODEL_TYPES, 'ui', 'read model', accept);\n    }\n  }\n\n  private validateSources(\n    frame: EmTimeFrame | EmResetFrame,\n    allowedSourceTypes: Set<string>,\n    targetLabel: string,\n    expectedSourceLabel: string,\n    accept: ValidationAcceptor\n  ): void {\n    for (const sourceRef of frame.sourceFrames) {\n      const source: EmFrame | undefined = sourceRef.ref;\n      if (source !== undefined && !allowedSourceTypes.has(source.modelEntityType)) {\n        accept(\n          'error',\n          `A ${targetLabel} can only receive input from a ${expectedSourceLabel}, not from '${source.modelEntityType}'.`,\n          { node: frame, property: 'sourceFrames' }\n        );\n      }\n    }\n  }\n}\n", "import type {\n  DefaultSharedCoreModuleContext,\n  LangiumCoreServices,\n  LangiumSharedCoreServices,\n  Module,\n  PartialLangiumCoreServices,\n} from 'langium';\nimport {\n  inject,\n  createDefaultCoreModule,\n  createDefaultSharedCoreModule,\n  EmptyFileSystem,\n} from 'langium';\nimport { CommonValueConverter } from '../common/valueConverter.js';\nimport { MermaidGeneratedSharedModule, EventModelingGeneratedModule } from '../generated/module.js';\nimport { EventModelingTokenBuilder } from './tokenBuilder.js';\nimport { EventModelingValidator, registerValidationChecks } from './event-modeling-validator.js';\n\ninterface EventModelingAddedServices {\n  parser: {\n    TokenBuilder: EventModelingTokenBuilder;\n    ValueConverter: CommonValueConverter;\n  };\n  validation: {\n    EventModelingValidator: EventModelingValidator;\n  };\n}\n\nexport type EventModelingServices = LangiumCoreServices & EventModelingAddedServices;\n\nexport const EventModelingModule: Module<\n  EventModelingServices,\n  PartialLangiumCoreServices & EventModelingAddedServices\n> = {\n  parser: {\n    TokenBuilder: () => new EventModelingTokenBuilder(),\n    ValueConverter: () => new CommonValueConverter(),\n  },\n  validation: {\n    EventModelingValidator: () => new EventModelingValidator(),\n  },\n};\n\nexport function createEventModelingServices(\n  context: DefaultSharedCoreModuleContext = EmptyFileSystem\n): {\n  shared: LangiumSharedCoreServices;\n  EventModel: EventModelingServices;\n} {\n  const shared: LangiumSharedCoreServices = inject(\n    createDefaultSharedCoreModule(context),\n    MermaidGeneratedSharedModule\n  );\n  const EventModel: EventModelingServices = inject(\n    createDefaultCoreModule({ shared }),\n    EventModelingGeneratedModule,\n    EventModelingModule\n  );\n  shared.ServiceRegistry.register(EventModel);\n  registerValidationChecks(EventModel);\n  return { shared, EventModel };\n}\n"],
  "mappings": ";;;;;;;;;;;;;;AAEO,IAAM,4BAAN,cAAwC,4BAA4B;AAAA,EAF3E,OAE2E;AAAA;AAAA;AAAA,EAClE,cAAc;AACnB,UAAM,CAAC,eAAe,CAAC;AAAA,EACzB;AACF;;;ACFA,IAAM,gBAAgB,oBAAI,IAAY,CAAC,OAAO,SAAS,CAAC;AACxD,IAAM,cAAc,oBAAI,IAAY,CAAC,OAAO,OAAO,CAAC;AACpD,IAAM,kBAAkB,oBAAI,IAAY,CAAC,OAAO,WAAW,CAAC;AAC5D,IAAM,kBAAkB,oBAAI,IAAY,CAAC,OAAO,WAAW,CAAC;AAC5D,IAAM,WAAW,oBAAI,IAAY,CAAC,IAAI,CAAC;AAEhC,SAAS,yBAAyB,UAAiC;AACxE,QAAM,YAAY,SAAS,WAAW;AACtC,QAAM,WAAW,SAAS,WAAW;AACrC,MAAI,UAAU;AACZ,UAAM,SAA2C;AAAA,MAC/C,aAAa,UAAU,sBAAsB,KAAK,SAAS;AAAA,MAC3D,cAAc,UAAU,sBAAsB,KAAK,SAAS;AAAA,IAC9D;AACA,aAAS,SAAS,QAAQ,SAAS;AAAA,EACrC;AACF;AAVgB;AAYT,IAAM,yBAAN,MAA6B;AAAA,EAtBpC,OAsBoC;AAAA;AAAA;AAAA,EAClC,sBAAsB,OAAmC,QAAkC;AACzF,QAAI,MAAM,aAAa,WAAW,GAAG;AACnC;AAAA,IACF;AAEA,QAAI,cAAc,IAAI,MAAM,eAAe,GAAG;AAC5C,WAAK;AAAA,QACH;AAAA,QACA,oBAAI,IAAI,CAAC,GAAG,UAAU,GAAG,eAAe,CAAC;AAAA,QACzC;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF,WAAW,YAAY,IAAI,MAAM,eAAe,GAAG;AACjD,WAAK,gBAAgB,OAAO,eAAe,SAAS,WAAW,MAAM;AAAA,IACvE,WAAW,gBAAgB,IAAI,MAAM,eAAe,GAAG;AACrD,WAAK,gBAAgB,OAAO,aAAa,cAAc,SAAS,MAAM;AAAA,IACxE,WAAW,gBAAgB,IAAI,MAAM,eAAe,GAAG;AACrD,WAAK,gBAAgB,OAAO,iBAAiB,aAAa,cAAc,MAAM;AAAA,IAChF,WAAW,SAAS,IAAI,MAAM,eAAe,GAAG;AAC9C,WAAK,gBAAgB,OAAO,iBAAiB,MAAM,cAAc,MAAM;AAAA,IACzE;AAAA,EACF;AAAA,EAEQ,gBACN,OACA,oBACA,aACA,qBACA,QACM;AACN,eAAW,aAAa,MAAM,cAAc;AAC1C,YAAM,SAA8B,UAAU;AAC9C,UAAI,WAAW,UAAa,CAAC,mBAAmB,IAAI,OAAO,eAAe,GAAG;AAC3E;AAAA,UACE;AAAA,UACA,KAAK,WAAW,kCAAkC,mBAAmB,eAAe,OAAO,eAAe;AAAA,UAC1G,EAAE,MAAM,OAAO,UAAU,eAAe;AAAA,QAC1C;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;;;ACnCO,IAAM,sBAGT;AAAA,EACF,QAAQ;AAAA,IACN,cAAc,6BAAM,IAAI,0BAA0B,GAApC;AAAA,IACd,gBAAgB,6BAAM,IAAI,qBAAqB,GAA/B;AAAA,EAClB;AAAA,EACA,YAAY;AAAA,IACV,wBAAwB,6BAAM,IAAI,uBAAuB,GAAjC;AAAA,EAC1B;AACF;AAEO,SAAS,4BACd,UAA0C,iBAI1C;AACA,QAAM,SAAoC;AAAA,IACxC,8BAA8B,OAAO;AAAA,IACrC;AAAA,EACF;AACA,QAAM,aAAoC;AAAA,IACxC,wBAAwB,EAAE,OAAO,CAAC;AAAA,IAClC;AAAA,IACA;AAAA,EACF;AACA,SAAO,gBAAgB,SAAS,UAAU;AAC1C,2BAAyB,UAAU;AACnC,SAAO,EAAE,QAAQ,WAAW;AAC9B;AAlBgB;",
  "names": []
}
