2.5 KB92 lines
Blame
1import type {
2 DefaultSharedCoreModuleContext,
3 LangiumCoreServices,
4 LangiumSharedCoreServices,
5 Module,
6 PartialLangiumCoreServices,
7} from 'langium';
8import {
9 EmptyFileSystem,
10 createDefaultCoreModule,
11 createDefaultSharedCoreModule,
12 inject,
13} from 'langium';
14
15import {
16 MermaidGeneratedSharedModule,
17 TreemapGrammarGeneratedModule as TreemapGeneratedModule,
18} from '../generated/module.js';
19import { TreemapTokenBuilder } from './tokenBuilder.js';
20import { TreemapValueConverter } from './valueConverter.js';
21import { TreemapValidator, registerValidationChecks } from './treemap-validator.js';
22
23/**
24 * Declaration of `Treemap` services.
25 */
26interface TreemapAddedServices {
27 parser: {
28 TokenBuilder: TreemapTokenBuilder;
29 ValueConverter: TreemapValueConverter;
30 };
31 validation: {
32 TreemapValidator: TreemapValidator;
33 };
34}
35
36/**
37 * Union of Langium default services and `Treemap` services.
38 */
39export type TreemapServices = LangiumCoreServices & TreemapAddedServices;
40
41/**
42 * Dependency injection module that overrides Langium default services and
43 * contributes the declared `Treemap` services.
44 */
45export const TreemapModule: Module<
46 TreemapServices,
47 PartialLangiumCoreServices & TreemapAddedServices
48> = {
49 parser: {
50 TokenBuilder: () => new TreemapTokenBuilder(),
51 ValueConverter: () => new TreemapValueConverter(),
52 },
53 validation: {
54 TreemapValidator: () => new TreemapValidator(),
55 },
56};
57
58/**
59 * Create the full set of services required by Langium.
60 *
61 * First inject the shared services by merging two modules:
62 * - Langium default shared services
63 * - Services generated by langium-cli
64 *
65 * Then inject the language-specific services by merging three modules:
66 * - Langium default language-specific services
67 * - Services generated by langium-cli
68 * - Services specified in this file
69 * @param context - Optional module context with the LSP connection
70 * @returns An object wrapping the shared services and the language-specific services
71 */
72export function createTreemapServices(context: DefaultSharedCoreModuleContext = EmptyFileSystem): {
73 shared: LangiumSharedCoreServices;
74 Treemap: TreemapServices;
75} {
76 const shared: LangiumSharedCoreServices = inject(
77 createDefaultSharedCoreModule(context),
78 MermaidGeneratedSharedModule
79 );
80 const Treemap: TreemapServices = inject(
81 createDefaultCoreModule({ shared }),
82 TreemapGeneratedModule,
83 TreemapModule
84 );
85 shared.ServiceRegistry.register(Treemap);
86
87 // Register validation checks
88 registerValidationChecks(Treemap);
89
90 return { shared, Treemap };
91}
92