@lapidist/dtif-language-server 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (142) hide show
  1. package/README.md +108 -0
  2. package/dist/code-actions.d.ts +11 -0
  3. package/dist/code-actions.d.ts.map +1 -0
  4. package/dist/code-actions.js +106 -0
  5. package/dist/code-actions.js.map +1 -0
  6. package/dist/core/documents/analysis-store.d.ts +27 -0
  7. package/dist/core/documents/analysis-store.d.ts.map +1 -0
  8. package/dist/core/documents/analysis-store.js +83 -0
  9. package/dist/core/documents/analysis-store.js.map +1 -0
  10. package/dist/core/documents/analyzer.d.ts +4 -0
  11. package/dist/core/documents/analyzer.d.ts.map +1 -0
  12. package/dist/core/documents/analyzer.js +147 -0
  13. package/dist/core/documents/analyzer.js.map +1 -0
  14. package/dist/core/documents/queries.d.ts +15 -0
  15. package/dist/core/documents/queries.d.ts.map +1 -0
  16. package/dist/core/documents/queries.js +52 -0
  17. package/dist/core/documents/queries.js.map +1 -0
  18. package/dist/core/documents/ranges.d.ts +9 -0
  19. package/dist/core/documents/ranges.d.ts.map +1 -0
  20. package/dist/core/documents/ranges.js +32 -0
  21. package/dist/core/documents/ranges.js.map +1 -0
  22. package/dist/core/documents/types.d.ts +23 -0
  23. package/dist/core/documents/types.d.ts.map +1 -0
  24. package/dist/core/documents/types.js +2 -0
  25. package/dist/core/documents/types.js.map +1 -0
  26. package/dist/core/json-tree.d.ts +3 -0
  27. package/dist/core/json-tree.d.ts.map +1 -0
  28. package/dist/core/json-tree.js +17 -0
  29. package/dist/core/json-tree.js.map +1 -0
  30. package/dist/core/utils/object.d.ts +2 -0
  31. package/dist/core/utils/object.d.ts.map +1 -0
  32. package/dist/core/utils/object.js +4 -0
  33. package/dist/core/utils/object.js.map +1 -0
  34. package/dist/diagnostics/constants.d.ts +2 -0
  35. package/dist/diagnostics/constants.d.ts.map +1 -0
  36. package/dist/diagnostics/constants.js +2 -0
  37. package/dist/diagnostics/constants.js.map +1 -0
  38. package/dist/diagnostics/document-validator.d.ts +12 -0
  39. package/dist/diagnostics/document-validator.d.ts.map +1 -0
  40. package/dist/diagnostics/document-validator.js +29 -0
  41. package/dist/diagnostics/document-validator.js.map +1 -0
  42. package/dist/diagnostics/index.d.ts +3 -0
  43. package/dist/diagnostics/index.d.ts.map +1 -0
  44. package/dist/diagnostics/index.js +2 -0
  45. package/dist/diagnostics/index.js.map +1 -0
  46. package/dist/diagnostics/messages.d.ts +4 -0
  47. package/dist/diagnostics/messages.d.ts.map +1 -0
  48. package/dist/diagnostics/messages.js +96 -0
  49. package/dist/diagnostics/messages.js.map +1 -0
  50. package/dist/diagnostics/parsing.d.ts +15 -0
  51. package/dist/diagnostics/parsing.d.ts.map +1 -0
  52. package/dist/diagnostics/parsing.js +47 -0
  53. package/dist/diagnostics/parsing.js.map +1 -0
  54. package/dist/diagnostics/schema-diagnostics.d.ts +10 -0
  55. package/dist/diagnostics/schema-diagnostics.d.ts.map +1 -0
  56. package/dist/diagnostics/schema-diagnostics.js +44 -0
  57. package/dist/diagnostics/schema-diagnostics.js.map +1 -0
  58. package/dist/diagnostics/types.d.ts +12 -0
  59. package/dist/diagnostics/types.d.ts.map +1 -0
  60. package/dist/diagnostics/types.js +2 -0
  61. package/dist/diagnostics/types.js.map +1 -0
  62. package/dist/features/completions/extension-items.d.ts +4 -0
  63. package/dist/features/completions/extension-items.d.ts.map +1 -0
  64. package/dist/features/completions/extension-items.js +31 -0
  65. package/dist/features/completions/extension-items.js.map +1 -0
  66. package/dist/features/completions/index.d.ts +10 -0
  67. package/dist/features/completions/index.d.ts.map +1 -0
  68. package/dist/features/completions/index.js +50 -0
  69. package/dist/features/completions/index.js.map +1 -0
  70. package/dist/features/completions/registry.d.ts +10 -0
  71. package/dist/features/completions/registry.d.ts.map +1 -0
  72. package/dist/features/completions/registry.js +26 -0
  73. package/dist/features/completions/registry.js.map +1 -0
  74. package/dist/features/completions/type-items.d.ts +4 -0
  75. package/dist/features/completions/type-items.d.ts.map +1 -0
  76. package/dist/features/completions/type-items.js +61 -0
  77. package/dist/features/completions/type-items.js.map +1 -0
  78. package/dist/features/completions/unit-items.d.ts +4 -0
  79. package/dist/features/completions/unit-items.d.ts.map +1 -0
  80. package/dist/features/completions/unit-items.js +97 -0
  81. package/dist/features/completions/unit-items.js.map +1 -0
  82. package/dist/features/definition.d.ts +4 -0
  83. package/dist/features/definition.d.ts.map +1 -0
  84. package/dist/features/definition.js +12 -0
  85. package/dist/features/definition.js.map +1 -0
  86. package/dist/features/hover/markdown.d.ts +11 -0
  87. package/dist/features/hover/markdown.d.ts.map +1 -0
  88. package/dist/features/hover/markdown.js +122 -0
  89. package/dist/features/hover/markdown.js.map +1 -0
  90. package/dist/features/hover.d.ts +4 -0
  91. package/dist/features/hover.d.ts.map +1 -0
  92. package/dist/features/hover.js +26 -0
  93. package/dist/features/hover.js.map +1 -0
  94. package/dist/features/rename.d.ts +4 -0
  95. package/dist/features/rename.d.ts.map +1 -0
  96. package/dist/features/rename.js +144 -0
  97. package/dist/features/rename.js.map +1 -0
  98. package/dist/index.d.ts +4 -0
  99. package/dist/index.d.ts.map +1 -0
  100. package/dist/index.js +4 -0
  101. package/dist/index.js.map +1 -0
  102. package/dist/package-metadata.d.ts +8 -0
  103. package/dist/package-metadata.d.ts.map +1 -0
  104. package/dist/package-metadata.js +22 -0
  105. package/dist/package-metadata.js.map +1 -0
  106. package/dist/pointer-utils.d.ts +6 -0
  107. package/dist/pointer-utils.d.ts.map +1 -0
  108. package/dist/pointer-utils.js +55 -0
  109. package/dist/pointer-utils.js.map +1 -0
  110. package/dist/runtime/documents.d.ts +12 -0
  111. package/dist/runtime/documents.d.ts.map +1 -0
  112. package/dist/runtime/documents.js +7 -0
  113. package/dist/runtime/documents.js.map +1 -0
  114. package/dist/runtime/initialize.d.ts +11 -0
  115. package/dist/runtime/initialize.d.ts.map +1 -0
  116. package/dist/runtime/initialize.js +34 -0
  117. package/dist/runtime/initialize.js.map +1 -0
  118. package/dist/runtime/services/settings-controller.d.ts +20 -0
  119. package/dist/runtime/services/settings-controller.d.ts.map +1 -0
  120. package/dist/runtime/services/settings-controller.js +53 -0
  121. package/dist/runtime/services/settings-controller.js.map +1 -0
  122. package/dist/runtime/session.d.ts +38 -0
  123. package/dist/runtime/session.d.ts.map +1 -0
  124. package/dist/runtime/session.js +120 -0
  125. package/dist/runtime/session.js.map +1 -0
  126. package/dist/runtime/utils/errors.d.ts +2 -0
  127. package/dist/runtime/utils/errors.d.ts.map +1 -0
  128. package/dist/runtime/utils/errors.js +8 -0
  129. package/dist/runtime/utils/errors.js.map +1 -0
  130. package/dist/server.d.ts +20 -0
  131. package/dist/server.d.ts.map +1 -0
  132. package/dist/server.js +76 -0
  133. package/dist/server.js.map +1 -0
  134. package/dist/settings.d.ts +10 -0
  135. package/dist/settings.d.ts.map +1 -0
  136. package/dist/settings.js +26 -0
  137. package/dist/settings.js.map +1 -0
  138. package/dist/util/markdown.d.ts +2 -0
  139. package/dist/util/markdown.d.ts.map +1 -0
  140. package/dist/util/markdown.js +4 -0
  141. package/dist/util/markdown.js.map +1 -0
  142. package/package.json +43 -0
@@ -0,0 +1,8 @@
1
+ export interface PackageMetadata {
2
+ readonly name: string;
3
+ readonly version: string;
4
+ }
5
+ export declare const packageMetadata: PackageMetadata;
6
+ export declare const packageName: string;
7
+ export declare const packageVersion: string;
8
+ //# sourceMappingURL=package-metadata.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"package-metadata.d.ts","sourceRoot":"","sources":["../src/package-metadata.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAwBD,eAAO,MAAM,eAAe,iBAAqC,CAAC;AAElE,eAAO,MAAM,WAAW,QAAuB,CAAC;AAChD,eAAO,MAAM,cAAc,QAA0B,CAAC"}
@@ -0,0 +1,22 @@
1
+ import packageJson from '../package.json' with { type: 'json' };
2
+ function createPackageMetadata(raw) {
3
+ if (typeof raw !== 'object' || raw === null) {
4
+ throw new TypeError('package.json must export an object.');
5
+ }
6
+ const possibleName = Reflect.get(raw, 'name');
7
+ const possibleVersion = Reflect.get(raw, 'version');
8
+ if (typeof possibleName !== 'string') {
9
+ throw new TypeError('package.json is missing a string "name" property.');
10
+ }
11
+ if (typeof possibleVersion !== 'string') {
12
+ throw new TypeError('package.json is missing a string "version" property.');
13
+ }
14
+ return {
15
+ name: possibleName,
16
+ version: possibleVersion
17
+ };
18
+ }
19
+ export const packageMetadata = createPackageMetadata(packageJson);
20
+ export const packageName = packageMetadata.name;
21
+ export const packageVersion = packageMetadata.version;
22
+ //# sourceMappingURL=package-metadata.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"package-metadata.js","sourceRoot":"","sources":["../src/package-metadata.ts"],"names":[],"mappings":"AAAA,OAAO,WAAW,MAAM,iBAAiB,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAC;AAOhE,SAAS,qBAAqB,CAAC,GAAY;IACzC,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;QAC5C,MAAM,IAAI,SAAS,CAAC,qCAAqC,CAAC,CAAC;IAC7D,CAAC;IAED,MAAM,YAAY,GAAY,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IACvD,MAAM,eAAe,GAAY,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;IAE7D,IAAI,OAAO,YAAY,KAAK,QAAQ,EAAE,CAAC;QACrC,MAAM,IAAI,SAAS,CAAC,mDAAmD,CAAC,CAAC;IAC3E,CAAC;IAED,IAAI,OAAO,eAAe,KAAK,QAAQ,EAAE,CAAC;QACxC,MAAM,IAAI,SAAS,CAAC,sDAAsD,CAAC,CAAC;IAC9E,CAAC;IAED,OAAO;QACL,IAAI,EAAE,YAAY;QAClB,OAAO,EAAE,eAAe;KACC,CAAC;AAC9B,CAAC;AAED,MAAM,CAAC,MAAM,eAAe,GAAG,qBAAqB,CAAC,WAAW,CAAC,CAAC;AAElE,MAAM,CAAC,MAAM,WAAW,GAAG,eAAe,CAAC,IAAI,CAAC;AAChD,MAAM,CAAC,MAAM,cAAc,GAAG,eAAe,CAAC,OAAO,CAAC"}
@@ -0,0 +1,6 @@
1
+ export declare function normalizePointer(pointer: string): string | undefined;
2
+ export declare function escapeJsonPointerSegment(segment: string): string;
3
+ export declare function pointerToPath(pointer: string): (string | number)[];
4
+ export declare function pathToPointer(path: readonly (string | number)[]): string;
5
+ export declare function parentPointer(pointer: string): string | undefined;
6
+ //# sourceMappingURL=pointer-utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pointer-utils.d.ts","sourceRoot":"","sources":["../src/pointer-utils.ts"],"names":[],"mappings":"AAAA,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAkBpE;AAED,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAEhE;AAED,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,CAmBlE;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,SAAS,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,GAAG,MAAM,CAUxE;AAED,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAYjE"}
@@ -0,0 +1,55 @@
1
+ export function normalizePointer(pointer) {
2
+ if (pointer === '#') {
3
+ return '#';
4
+ }
5
+ if (pointer.startsWith('#/')) {
6
+ return pointer;
7
+ }
8
+ if (pointer.startsWith('/')) {
9
+ return `#${pointer}`;
10
+ }
11
+ if (pointer.startsWith('#')) {
12
+ return pointer.length > 1 ? `#/${pointer.slice(1)}` : '#';
13
+ }
14
+ return undefined;
15
+ }
16
+ export function escapeJsonPointerSegment(segment) {
17
+ return segment.replace(/~/gu, '~0').replace(/\//gu, '~1');
18
+ }
19
+ export function pointerToPath(pointer) {
20
+ if (pointer === '#') {
21
+ return [];
22
+ }
23
+ const segments = pointer
24
+ .slice(2)
25
+ .split('/')
26
+ .map((segment) => segment.replace(/~1/gu, '/').replace(/~0/gu, '~'));
27
+ return segments.map((segment) => {
28
+ if (/^-?\d+$/u.test(segment)) {
29
+ const index = Number.parseInt(segment, 10);
30
+ if (Number.isSafeInteger(index)) {
31
+ return index;
32
+ }
33
+ }
34
+ return segment;
35
+ });
36
+ }
37
+ export function pathToPointer(path) {
38
+ if (path.length === 0) {
39
+ return '#';
40
+ }
41
+ const segments = path.map((segment) => typeof segment === 'number' ? segment.toString() : escapeJsonPointerSegment(segment));
42
+ return `#/${segments.join('/')}`;
43
+ }
44
+ export function parentPointer(pointer) {
45
+ if (pointer === '#') {
46
+ return undefined;
47
+ }
48
+ const path = pointerToPath(pointer);
49
+ if (path.length === 0) {
50
+ return undefined;
51
+ }
52
+ path.pop();
53
+ return pathToPointer(path);
54
+ }
55
+ //# sourceMappingURL=pointer-utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pointer-utils.js","sourceRoot":"","sources":["../src/pointer-utils.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,gBAAgB,CAAC,OAAe;IAC9C,IAAI,OAAO,KAAK,GAAG,EAAE,CAAC;QACpB,OAAO,GAAG,CAAC;IACb,CAAC;IAED,IAAI,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QAC7B,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QAC5B,OAAO,IAAI,OAAO,EAAE,CAAC;IACvB,CAAC;IAED,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QAC5B,OAAO,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC;IAC5D,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,MAAM,UAAU,wBAAwB,CAAC,OAAe;IACtD,OAAO,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;AAC5D,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,OAAe;IAC3C,IAAI,OAAO,KAAK,GAAG,EAAE,CAAC;QACpB,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,QAAQ,GAAG,OAAO;SACrB,KAAK,CAAC,CAAC,CAAC;SACR,KAAK,CAAC,GAAG,CAAC;SACV,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC;IAEvE,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE;QAC9B,IAAI,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;YAC7B,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;YAC3C,IAAI,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE,CAAC;gBAChC,OAAO,KAAK,CAAC;YACf,CAAC;QACH,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,IAAkC;IAC9D,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtB,OAAO,GAAG,CAAC;IACb,CAAC;IAED,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CACpC,OAAO,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,wBAAwB,CAAC,OAAO,CAAC,CACrF,CAAC;IAEF,OAAO,KAAK,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;AACnC,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,OAAe;IAC3C,IAAI,OAAO,KAAK,GAAG,EAAE,CAAC;QACpB,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,MAAM,IAAI,GAAG,aAAa,CAAC,OAAO,CAAC,CAAC;IACpC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtB,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,IAAI,CAAC,GAAG,EAAE,CAAC;IACX,OAAO,aAAa,CAAC,IAAI,CAAC,CAAC;AAC7B,CAAC"}
@@ -0,0 +1,12 @@
1
+ import type { Connection, Disposable, TextDocumentChangeEvent } from 'vscode-languageserver/node.js';
2
+ import { TextDocument } from 'vscode-languageserver-textdocument';
3
+ export interface ManagedDocuments {
4
+ listen(connection: Connection): void;
5
+ onDidOpen(handler: (event: TextDocumentChangeEvent<TextDocument>) => void): Disposable;
6
+ onDidChangeContent(handler: (event: TextDocumentChangeEvent<TextDocument>) => void): Disposable;
7
+ onDidClose(handler: (event: TextDocumentChangeEvent<TextDocument>) => void): Disposable;
8
+ get(uri: string): TextDocument | undefined;
9
+ all(): Iterable<TextDocument>;
10
+ }
11
+ export declare function createManagedDocuments(): ManagedDocuments;
12
+ //# sourceMappingURL=documents.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"documents.d.ts","sourceRoot":"","sources":["../../src/runtime/documents.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,UAAU,EACV,UAAU,EACV,uBAAuB,EACxB,MAAM,+BAA+B,CAAC;AAEvC,OAAO,EAAE,YAAY,EAAE,MAAM,oCAAoC,CAAC;AAElE,MAAM,WAAW,gBAAgB;IAC/B,MAAM,CAAC,UAAU,EAAE,UAAU,GAAG,IAAI,CAAC;IACrC,SAAS,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,uBAAuB,CAAC,YAAY,CAAC,KAAK,IAAI,GAAG,UAAU,CAAC;IACvF,kBAAkB,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,uBAAuB,CAAC,YAAY,CAAC,KAAK,IAAI,GAAG,UAAU,CAAC;IAChG,UAAU,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,uBAAuB,CAAC,YAAY,CAAC,KAAK,IAAI,GAAG,UAAU,CAAC;IACxF,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS,CAAC;IAC3C,GAAG,IAAI,QAAQ,CAAC,YAAY,CAAC,CAAC;CAC/B;AAED,wBAAgB,sBAAsB,IAAI,gBAAgB,CAGzD"}
@@ -0,0 +1,7 @@
1
+ import { TextDocuments } from 'vscode-languageserver/node.js';
2
+ import { TextDocument } from 'vscode-languageserver-textdocument';
3
+ export function createManagedDocuments() {
4
+ const documents = new TextDocuments(TextDocument);
5
+ return documents;
6
+ }
7
+ //# sourceMappingURL=documents.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"documents.js","sourceRoot":"","sources":["../../src/runtime/documents.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAC9D,OAAO,EAAE,YAAY,EAAE,MAAM,oCAAoC,CAAC;AAWlE,MAAM,UAAU,sBAAsB;IACpC,MAAM,SAAS,GAAG,IAAI,aAAa,CAAC,YAAY,CAAC,CAAC;IAClD,OAAO,SAAS,CAAC;AACnB,CAAC"}
@@ -0,0 +1,11 @@
1
+ import { type InitializeResult } from 'vscode-languageserver/node.js';
2
+ export interface DtifInitializeResult extends InitializeResult {
3
+ capabilities: InitializeResult['capabilities'] & {
4
+ workspace?: InitializeResult['capabilities']['workspace'] & {
5
+ configuration?: boolean;
6
+ };
7
+ };
8
+ }
9
+ export declare function buildInitializeResult(): DtifInitializeResult;
10
+ export declare function getServerName(): string;
11
+ //# sourceMappingURL=initialize.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"initialize.d.ts","sourceRoot":"","sources":["../../src/runtime/initialize.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,gBAAgB,EACtB,MAAM,+BAA+B,CAAC;AAKvC,MAAM,WAAW,oBAAqB,SAAQ,gBAAgB;IAC5D,YAAY,EAAE,gBAAgB,CAAC,cAAc,CAAC,GAAG;QAC/C,SAAS,CAAC,EAAE,gBAAgB,CAAC,cAAc,CAAC,CAAC,WAAW,CAAC,GAAG;YAC1D,aAAa,CAAC,EAAE,OAAO,CAAC;SACzB,CAAC;KACH,CAAC;CACH;AAED,wBAAgB,qBAAqB,IAAI,oBAAoB,CA0B5D;AAED,wBAAgB,aAAa,IAAI,MAAM,CAEtC"}
@@ -0,0 +1,34 @@
1
+ import { CodeActionKind, TextDocumentSyncKind } from 'vscode-languageserver/node.js';
2
+ import { packageVersion } from '../package-metadata.js';
3
+ const SERVER_NAME = 'DTIF Language Server';
4
+ export function buildInitializeResult() {
5
+ return {
6
+ capabilities: {
7
+ textDocumentSync: TextDocumentSyncKind.Incremental,
8
+ hoverProvider: true,
9
+ completionProvider: {
10
+ triggerCharacters: ['"', ':', '.', '$'],
11
+ resolveProvider: false
12
+ },
13
+ renameProvider: true,
14
+ codeActionProvider: {
15
+ codeActionKinds: [CodeActionKind.QuickFix]
16
+ },
17
+ workspace: {
18
+ configuration: true,
19
+ workspaceFolders: {
20
+ supported: true,
21
+ changeNotifications: true
22
+ }
23
+ }
24
+ },
25
+ serverInfo: {
26
+ name: SERVER_NAME,
27
+ version: packageVersion
28
+ }
29
+ };
30
+ }
31
+ export function getServerName() {
32
+ return SERVER_NAME;
33
+ }
34
+ //# sourceMappingURL=initialize.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"initialize.js","sourceRoot":"","sources":["../../src/runtime/initialize.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,cAAc,EACd,oBAAoB,EAErB,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAExD,MAAM,WAAW,GAAG,sBAAsB,CAAC;AAU3C,MAAM,UAAU,qBAAqB;IACnC,OAAO;QACL,YAAY,EAAE;YACZ,gBAAgB,EAAE,oBAAoB,CAAC,WAAW;YAClD,aAAa,EAAE,IAAI;YACnB,kBAAkB,EAAE;gBAClB,iBAAiB,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;gBACvC,eAAe,EAAE,KAAK;aACvB;YACD,cAAc,EAAE,IAAI;YACpB,kBAAkB,EAAE;gBAClB,eAAe,EAAE,CAAC,cAAc,CAAC,QAAQ,CAAC;aAC3C;YACD,SAAS,EAAE;gBACT,aAAa,EAAE,IAAI;gBACnB,gBAAgB,EAAE;oBAChB,SAAS,EAAE,IAAI;oBACf,mBAAmB,EAAE,IAAI;iBAC1B;aACF;SACF;QACD,UAAU,EAAE;YACV,IAAI,EAAE,WAAW;YACjB,OAAO,EAAE,cAAc;SACxB;KAC6B,CAAC;AACnC,CAAC;AAED,MAAM,UAAU,aAAa;IAC3B,OAAO,WAAW,CAAC;AACrB,CAAC"}
@@ -0,0 +1,20 @@
1
+ import type { Connection } from 'vscode-languageserver/node.js';
2
+ import { type DtifLanguageServerSettings } from '../../settings.js';
3
+ export interface SettingsChange {
4
+ readonly previous: DtifLanguageServerSettings;
5
+ readonly current: DtifLanguageServerSettings;
6
+ readonly changed: boolean;
7
+ }
8
+ export declare class SettingsReadError extends Error {
9
+ readonly cause: unknown;
10
+ constructor(cause: unknown);
11
+ }
12
+ export declare class SettingsController {
13
+ #private;
14
+ constructor(connection: Connection);
15
+ get current(): DtifLanguageServerSettings;
16
+ reset(): void;
17
+ refresh(): Promise<SettingsChange>;
18
+ private read;
19
+ }
20
+ //# sourceMappingURL=settings-controller.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"settings-controller.d.ts","sourceRoot":"","sources":["../../../src/runtime/services/settings-controller.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAChE,OAAO,EAKL,KAAK,0BAA0B,EAChC,MAAM,mBAAmB,CAAC;AAE3B,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,QAAQ,EAAE,0BAA0B,CAAC;IAC9C,QAAQ,CAAC,OAAO,EAAE,0BAA0B,CAAC;IAC7C,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;CAC3B;AAED,qBAAa,iBAAkB,SAAQ,KAAK;IAC1C,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;gBAEZ,KAAK,EAAE,OAAO;CAK3B;AAED,qBAAa,kBAAkB;;gBAIjB,UAAU,EAAE,UAAU;IAIlC,IAAI,OAAO,IAAI,0BAA0B,CAExC;IAED,KAAK,IAAI,IAAI;IAIP,OAAO,IAAI,OAAO,CAAC,cAAc,CAAC;YAkB1B,IAAI;CASnB"}
@@ -0,0 +1,53 @@
1
+ import { DEFAULT_SETTINGS, SETTINGS_SECTION, parseSettings, settingsEqual } from '../../settings.js';
2
+ export class SettingsReadError extends Error {
3
+ cause;
4
+ constructor(cause) {
5
+ super('Failed to read DTIF language server settings.');
6
+ this.name = 'SettingsReadError';
7
+ this.cause = cause;
8
+ }
9
+ }
10
+ export class SettingsController {
11
+ #connection;
12
+ #current = DEFAULT_SETTINGS;
13
+ constructor(connection) {
14
+ this.#connection = connection;
15
+ }
16
+ get current() {
17
+ return this.#current;
18
+ }
19
+ reset() {
20
+ this.#current = DEFAULT_SETTINGS;
21
+ }
22
+ async refresh() {
23
+ const previous = this.#current;
24
+ let next;
25
+ try {
26
+ next = await this.read();
27
+ }
28
+ catch (error) {
29
+ throw new SettingsReadError(error);
30
+ }
31
+ if (settingsEqual(previous, next)) {
32
+ return { previous, current: previous, changed: false };
33
+ }
34
+ this.#current = next;
35
+ return { previous, current: next, changed: true };
36
+ }
37
+ async read() {
38
+ const workspace = this.#connection.workspace;
39
+ if (!hasConfiguration(workspace)) {
40
+ return DEFAULT_SETTINGS;
41
+ }
42
+ const configuration = await workspace.getConfiguration({ section: SETTINGS_SECTION });
43
+ return parseSettings(configuration);
44
+ }
45
+ }
46
+ function hasConfiguration(workspace) {
47
+ if (typeof workspace !== 'object' || workspace === null) {
48
+ return false;
49
+ }
50
+ const getter = Reflect.get(workspace, 'getConfiguration');
51
+ return typeof getter === 'function';
52
+ }
53
+ //# sourceMappingURL=settings-controller.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"settings-controller.js","sourceRoot":"","sources":["../../../src/runtime/services/settings-controller.ts"],"names":[],"mappings":"AACA,OAAO,EACL,gBAAgB,EAChB,gBAAgB,EAChB,aAAa,EACb,aAAa,EAEd,MAAM,mBAAmB,CAAC;AAQ3B,MAAM,OAAO,iBAAkB,SAAQ,KAAK;IACjC,KAAK,CAAU;IAExB,YAAY,KAAc;QACxB,KAAK,CAAC,+CAA+C,CAAC,CAAC;QACvD,IAAI,CAAC,IAAI,GAAG,mBAAmB,CAAC;QAChC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACrB,CAAC;CACF;AAED,MAAM,OAAO,kBAAkB;IAC7B,WAAW,CAAa;IACxB,QAAQ,GAA+B,gBAAgB,CAAC;IAExD,YAAY,UAAsB;QAChC,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC;IAChC,CAAC;IAED,IAAI,OAAO;QACT,OAAO,IAAI,CAAC,QAAQ,CAAC;IACvB,CAAC;IAED,KAAK;QACH,IAAI,CAAC,QAAQ,GAAG,gBAAgB,CAAC;IACnC,CAAC;IAED,KAAK,CAAC,OAAO;QACX,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;QAC/B,IAAI,IAAgC,CAAC;QAErC,IAAI,CAAC;YACH,IAAI,GAAG,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;QAC3B,CAAC;QAAC,OAAO,KAAc,EAAE,CAAC;YACxB,MAAM,IAAI,iBAAiB,CAAC,KAAK,CAAC,CAAC;QACrC,CAAC;QAED,IAAI,aAAa,CAAC,QAAQ,EAAE,IAAI,CAAC,EAAE,CAAC;YAClC,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAA2B,CAAC;QAClF,CAAC;QAED,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;QACrB,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAA2B,CAAC;IAC7E,CAAC;IAEO,KAAK,CAAC,IAAI;QAChB,MAAM,SAAS,GAAY,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC;QACtD,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,EAAE,CAAC;YACjC,OAAO,gBAAgB,CAAC;QAC1B,CAAC;QAED,MAAM,aAAa,GAAY,MAAM,SAAS,CAAC,gBAAgB,CAAC,EAAE,OAAO,EAAE,gBAAgB,EAAE,CAAC,CAAC;QAC/F,OAAO,aAAa,CAAC,aAAa,CAAC,CAAC;IACtC,CAAC;CACF;AAMD,SAAS,gBAAgB,CAAC,SAAkB;IAC1C,IAAI,OAAO,SAAS,KAAK,QAAQ,IAAI,SAAS,KAAK,IAAI,EAAE,CAAC;QACxD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,MAAM,GAAY,OAAO,CAAC,GAAG,CAAC,SAAS,EAAE,kBAAkB,CAAC,CAAC;IACnE,OAAO,OAAO,MAAM,KAAK,UAAU,CAAC;AACtC,CAAC"}
@@ -0,0 +1,38 @@
1
+ import { type Connection, type TextDocumentChangeEvent } from 'vscode-languageserver/node.js';
2
+ import { TextDocument } from 'vscode-languageserver-textdocument';
3
+ import type { DtifLanguageServerSettings } from '../settings.js';
4
+ import { DocumentValidator } from '../diagnostics/index.js';
5
+ import { DocumentAnalysisStore } from '../core/documents/analysis-store.js';
6
+ import type { ManagedDocuments } from './documents.js';
7
+ import { type DtifInitializeResult } from './initialize.js';
8
+ export interface LanguageServerSessionOptions {
9
+ readonly connection: Connection;
10
+ readonly documents: ManagedDocuments;
11
+ readonly validator?: DocumentValidator;
12
+ readonly store?: DocumentAnalysisStore;
13
+ }
14
+ export declare class LanguageServerSession {
15
+ #private;
16
+ readonly connection: Connection;
17
+ readonly documents: ManagedDocuments;
18
+ readonly store: DocumentAnalysisStore;
19
+ constructor(options: LanguageServerSessionOptions);
20
+ get settings(): DtifLanguageServerSettings;
21
+ handleInitialize(): DtifInitializeResult;
22
+ handleInitialized(): Promise<void>;
23
+ handleShutdown(): void;
24
+ handleDidChangeConfiguration(): Promise<void>;
25
+ handleDocumentOpen(event: TextDocumentChangeEvent<TextDocument>): void;
26
+ handleDocumentChange(event: TextDocumentChangeEvent<TextDocument>): void;
27
+ handleDocumentClose(event: TextDocumentChangeEvent<TextDocument>): void;
28
+ private refreshSettings;
29
+ private logSettingsError;
30
+ private indexDocument;
31
+ private reindexDocuments;
32
+ private publishDiagnostics;
33
+ private publishDiagnosticsForAll;
34
+ private clearDiagnostics;
35
+ private logIndexError;
36
+ private logValidationError;
37
+ }
38
+ //# sourceMappingURL=session.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../src/runtime/session.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,UAAU,EAAE,KAAK,uBAAuB,EAAE,MAAM,+BAA+B,CAAC;AAC9F,OAAO,EAAE,YAAY,EAAE,MAAM,oCAAoC,CAAC;AAClE,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,gBAAgB,CAAC;AACjE,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,EAAE,qBAAqB,EAAE,MAAM,qCAAqC,CAAC;AAC5E,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AACvD,OAAO,EAAwC,KAAK,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAQlG,MAAM,WAAW,4BAA4B;IAC3C,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAC;IAChC,QAAQ,CAAC,SAAS,EAAE,gBAAgB,CAAC;IACrC,QAAQ,CAAC,SAAS,CAAC,EAAE,iBAAiB,CAAC;IACvC,QAAQ,CAAC,KAAK,CAAC,EAAE,qBAAqB,CAAC;CACxC;AAED,qBAAa,qBAAqB;;IAChC,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAC;IAChC,QAAQ,CAAC,SAAS,EAAE,gBAAgB,CAAC;IACrC,QAAQ,CAAC,KAAK,EAAE,qBAAqB,CAAC;gBAK1B,OAAO,EAAE,4BAA4B;IAQjD,IAAI,QAAQ,IAAI,0BAA0B,CAEzC;IAED,gBAAgB,IAAI,oBAAoB;IAKlC,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC;IAKxC,cAAc,IAAI,IAAI;IAIhB,4BAA4B,IAAI,OAAO,CAAC,IAAI,CAAC;IAInD,kBAAkB,CAAC,KAAK,EAAE,uBAAuB,CAAC,YAAY,CAAC,GAAG,IAAI;IAKtE,oBAAoB,CAAC,KAAK,EAAE,uBAAuB,CAAC,YAAY,CAAC,GAAG,IAAI;IAKxE,mBAAmB,CAAC,KAAK,EAAE,uBAAuB,CAAC,YAAY,CAAC,GAAG,IAAI;YAKzD,eAAe;IAuB7B,OAAO,CAAC,gBAAgB;IAKxB,OAAO,CAAC,aAAa;IAOrB,OAAO,CAAC,gBAAgB;YAMV,kBAAkB;YAiBlB,wBAAwB;YAMxB,gBAAgB;IAQ9B,OAAO,CAAC,aAAa;IAKrB,OAAO,CAAC,kBAAkB;CAI3B"}
@@ -0,0 +1,120 @@
1
+ import { DocumentValidator } from '../diagnostics/index.js';
2
+ import { DocumentAnalysisStore } from '../core/documents/analysis-store.js';
3
+ import { buildInitializeResult, getServerName } from './initialize.js';
4
+ import { SettingsController, SettingsReadError } from './services/settings-controller.js';
5
+ import { describeError } from './utils/errors.js';
6
+ export class LanguageServerSession {
7
+ connection;
8
+ documents;
9
+ store;
10
+ #settings;
11
+ #validator;
12
+ constructor(options) {
13
+ this.connection = options.connection;
14
+ this.documents = options.documents;
15
+ this.store = options.store ?? new DocumentAnalysisStore();
16
+ this.#settings = new SettingsController(this.connection);
17
+ this.#validator = options.validator ?? new DocumentValidator();
18
+ }
19
+ get settings() {
20
+ return this.#settings.current;
21
+ }
22
+ handleInitialize() {
23
+ this.#settings.reset();
24
+ return buildInitializeResult();
25
+ }
26
+ async handleInitialized() {
27
+ this.connection.console.info(`${getServerName()} initialised.`);
28
+ await this.refreshSettings();
29
+ }
30
+ handleShutdown() {
31
+ this.connection.console.info(`${getServerName()} shutting down.`);
32
+ }
33
+ async handleDidChangeConfiguration() {
34
+ await this.refreshSettings();
35
+ }
36
+ handleDocumentOpen(event) {
37
+ this.indexDocument(event.document);
38
+ void this.publishDiagnostics(event.document, this.#settings.current);
39
+ }
40
+ handleDocumentChange(event) {
41
+ this.indexDocument(event.document);
42
+ void this.publishDiagnostics(event.document, this.#settings.current);
43
+ }
44
+ handleDocumentClose(event) {
45
+ this.store.remove(event.document.uri);
46
+ void this.clearDiagnostics(event.document.uri);
47
+ }
48
+ async refreshSettings() {
49
+ let change;
50
+ try {
51
+ change = await this.#settings.refresh();
52
+ }
53
+ catch (error) {
54
+ if (error instanceof SettingsReadError) {
55
+ this.logSettingsError(error.cause ?? error);
56
+ }
57
+ else {
58
+ this.logSettingsError(error);
59
+ }
60
+ return;
61
+ }
62
+ if (!change.changed) {
63
+ return;
64
+ }
65
+ if (change.previous.validation.mode !== change.current.validation.mode) {
66
+ this.reindexDocuments();
67
+ await this.publishDiagnosticsForAll(change.current);
68
+ }
69
+ }
70
+ logSettingsError(error) {
71
+ const message = describeError(error);
72
+ this.connection.console.error(`Failed to load DTIF language server settings: ${message}`);
73
+ }
74
+ indexDocument(document) {
75
+ const result = this.store.update(document);
76
+ if (!result.ok && result.error) {
77
+ this.logIndexError(result.error);
78
+ }
79
+ }
80
+ reindexDocuments() {
81
+ for (const document of this.documents.all()) {
82
+ this.indexDocument(document);
83
+ }
84
+ }
85
+ async publishDiagnostics(document, settings) {
86
+ if (settings.validation.mode === 'off') {
87
+ await this.clearDiagnostics(document.uri);
88
+ return;
89
+ }
90
+ try {
91
+ const diagnostics = this.#validator.validate(document);
92
+ await this.connection.sendDiagnostics({ uri: document.uri, diagnostics });
93
+ }
94
+ catch (error) {
95
+ this.logValidationError(error);
96
+ }
97
+ }
98
+ async publishDiagnosticsForAll(settings) {
99
+ for (const document of this.documents.all()) {
100
+ await this.publishDiagnostics(document, settings);
101
+ }
102
+ }
103
+ async clearDiagnostics(uri) {
104
+ try {
105
+ await this.connection.sendDiagnostics({ uri, diagnostics: [] });
106
+ }
107
+ catch (error) {
108
+ this.logValidationError(error);
109
+ }
110
+ }
111
+ logIndexError(error) {
112
+ const message = describeError(error);
113
+ this.connection.console.error(`Failed to analyse DTIF document: ${message}`);
114
+ }
115
+ logValidationError(error) {
116
+ const message = describeError(error);
117
+ this.connection.console.error(`Failed to validate DTIF document: ${message}`);
118
+ }
119
+ }
120
+ //# sourceMappingURL=session.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session.js","sourceRoot":"","sources":["../../src/runtime/session.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function describeError(error: unknown): string;
2
+ //# sourceMappingURL=errors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../../src/runtime/utils/errors.ts"],"names":[],"mappings":"AAAA,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAOpD"}
@@ -0,0 +1,8 @@
1
+ export function describeError(error) {
2
+ if (error instanceof Error) {
3
+ const stack = error.stack ?? '';
4
+ return stack ? `${error.message}\n${stack}` : error.message;
5
+ }
6
+ return String(error);
7
+ }
8
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../../src/runtime/utils/errors.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,aAAa,CAAC,KAAc;IAC1C,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;QAC3B,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,IAAI,EAAE,CAAC;QAChC,OAAO,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,OAAO,KAAK,KAAK,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC;IAC9D,CAAC;IAED,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;AACvB,CAAC"}
@@ -0,0 +1,20 @@
1
+ import { type Connection } from 'vscode-languageserver/node.js';
2
+ import { DocumentValidator } from './diagnostics/index.js';
3
+ import { DocumentAnalysisStore } from './core/documents/analysis-store.js';
4
+ import { type ManagedDocuments } from './runtime/documents.js';
5
+ export type { DtifInitializeResult } from './runtime/initialize.js';
6
+ export interface CreateServerOptions {
7
+ readonly connection?: Connection;
8
+ readonly documents?: ManagedDocuments;
9
+ readonly validator?: DocumentValidator;
10
+ readonly store?: DocumentAnalysisStore;
11
+ }
12
+ export interface LanguageServer {
13
+ readonly connection: Connection;
14
+ readonly documents: ManagedDocuments;
15
+ listen(): void;
16
+ }
17
+ export { type ManagedDocuments } from './runtime/documents.js';
18
+ export declare function createServer(options?: CreateServerOptions): LanguageServer;
19
+ export declare function start(): LanguageServer;
20
+ //# sourceMappingURL=server.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,KAAK,UAAU,EAIhB,MAAM,+BAA+B,CAAC;AAQvC,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,qBAAqB,EAAE,MAAM,oCAAoC,CAAC;AAC3E,OAAO,EAA0B,KAAK,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAEvF,YAAY,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAEpE,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,UAAU,CAAC,EAAE,UAAU,CAAC;IACjC,QAAQ,CAAC,SAAS,CAAC,EAAE,gBAAgB,CAAC;IACtC,QAAQ,CAAC,SAAS,CAAC,EAAE,iBAAiB,CAAC;IACvC,QAAQ,CAAC,KAAK,CAAC,EAAE,qBAAqB,CAAC;CACxC;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAC;IAChC,QAAQ,CAAC,SAAS,EAAE,gBAAgB,CAAC;IACrC,MAAM,IAAI,IAAI,CAAC;CAChB;AAED,OAAO,EAAE,KAAK,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAE/D,wBAAgB,YAAY,CAAC,OAAO,GAAE,mBAAwB,GAAG,cAAc,CA+E9E;AAED,wBAAgB,KAAK,IAAI,cAAc,CAItC"}
package/dist/server.js ADDED
@@ -0,0 +1,76 @@
1
+ import { createConnection, ProposedFeatures } from 'vscode-languageserver/node.js';
2
+ import { pathToFileURL } from 'node:url';
3
+ import { buildQuickFixes } from './code-actions.js';
4
+ import { buildCompletions } from './features/completions/index.js';
5
+ import { buildHover } from './features/hover.js';
6
+ import { findDefinition } from './features/definition.js';
7
+ import { buildRenameEdit } from './features/rename.js';
8
+ import { DocumentValidator } from './diagnostics/index.js';
9
+ import { DocumentAnalysisStore } from './core/documents/analysis-store.js';
10
+ import { createManagedDocuments } from './runtime/documents.js';
11
+ import { LanguageServerSession } from './runtime/session.js';
12
+ export function createServer(options = {}) {
13
+ const connection = options.connection ?? createConnection(ProposedFeatures.all);
14
+ const documents = options.documents ?? createManagedDocuments();
15
+ const validator = options.validator ?? new DocumentValidator();
16
+ const store = options.store ?? new DocumentAnalysisStore();
17
+ const session = new LanguageServerSession({ connection, documents, validator, store });
18
+ const documentListeners = [];
19
+ connection.onInitialize(() => session.handleInitialize());
20
+ connection.onInitialized(() => {
21
+ void session.handleInitialized();
22
+ });
23
+ connection.onShutdown(() => {
24
+ session.handleShutdown();
25
+ for (const disposable of documentListeners) {
26
+ disposable.dispose();
27
+ }
28
+ });
29
+ connection.onDidChangeConfiguration(() => {
30
+ void session.handleDidChangeConfiguration();
31
+ });
32
+ connection.onDefinition((params) => findDefinition(session.store, params.textDocument.uri, params.position));
33
+ connection.onHover((params) => buildHover(session.store, params.textDocument.uri, params.position));
34
+ connection.onCompletion((params) => {
35
+ const document = documents.get(params.textDocument.uri);
36
+ if (!document) {
37
+ return [];
38
+ }
39
+ return buildCompletions({ document, position: params.position, store: session.store });
40
+ });
41
+ connection.onRenameRequest((params) => buildRenameEdit(session.store, params.textDocument.uri, params.position, params.newName));
42
+ connection.onCodeAction((params) => {
43
+ const document = documents.get(params.textDocument.uri);
44
+ if (!document) {
45
+ return [];
46
+ }
47
+ return buildQuickFixes({ document, params, store: session.store });
48
+ });
49
+ documents.listen(connection);
50
+ documentListeners.push(documents.onDidOpen((event) => {
51
+ session.handleDocumentOpen(event);
52
+ }));
53
+ documentListeners.push(documents.onDidChangeContent((event) => {
54
+ session.handleDocumentChange(event);
55
+ }));
56
+ documentListeners.push(documents.onDidClose((event) => {
57
+ session.handleDocumentClose(event);
58
+ }));
59
+ return {
60
+ connection,
61
+ documents,
62
+ listen() {
63
+ connection.listen();
64
+ }
65
+ };
66
+ }
67
+ export function start() {
68
+ const server = createServer();
69
+ server.listen();
70
+ return server;
71
+ }
72
+ const executedPath = process.argv[1];
73
+ if (executedPath && import.meta.url === pathToFileURL(executedPath).href) {
74
+ start();
75
+ }
76
+ //# sourceMappingURL=server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ export interface DtifLanguageServerSettings {
2
+ readonly validation: {
3
+ readonly mode: 'on' | 'off';
4
+ };
5
+ }
6
+ export declare const SETTINGS_SECTION = "dtifLanguageServer";
7
+ export declare const DEFAULT_SETTINGS: DtifLanguageServerSettings;
8
+ export declare function parseSettings(value: unknown): DtifLanguageServerSettings;
9
+ export declare function settingsEqual(a: DtifLanguageServerSettings, b: DtifLanguageServerSettings): boolean;
10
+ //# sourceMappingURL=settings.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"settings.d.ts","sourceRoot":"","sources":["../src/settings.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,0BAA0B;IACzC,QAAQ,CAAC,UAAU,EAAE;QACnB,QAAQ,CAAC,IAAI,EAAE,IAAI,GAAG,KAAK,CAAC;KAC7B,CAAC;CACH;AAED,eAAO,MAAM,gBAAgB,uBAAuB,CAAC;AAErD,eAAO,MAAM,gBAAgB,EAAE,0BAE9B,CAAC;AAeF,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,0BAA0B,CAQxE;AAED,wBAAgB,aAAa,CAC3B,CAAC,EAAE,0BAA0B,EAC7B,CAAC,EAAE,0BAA0B,GAC5B,OAAO,CAET"}
@@ -0,0 +1,26 @@
1
+ import { isRecord } from './core/utils/object.js';
2
+ export const SETTINGS_SECTION = 'dtifLanguageServer';
3
+ export const DEFAULT_SETTINGS = {
4
+ validation: { mode: 'on' }
5
+ };
6
+ function parseValidationSettings(value) {
7
+ if (!isRecord(value)) {
8
+ return DEFAULT_SETTINGS.validation;
9
+ }
10
+ const mode = value.mode;
11
+ if (mode === 'off') {
12
+ return { mode: 'off' };
13
+ }
14
+ return { mode: 'on' };
15
+ }
16
+ export function parseSettings(value) {
17
+ if (!isRecord(value)) {
18
+ return DEFAULT_SETTINGS;
19
+ }
20
+ const validation = parseValidationSettings(value.validation);
21
+ return { validation };
22
+ }
23
+ export function settingsEqual(a, b) {
24
+ return a.validation.mode === b.validation.mode;
25
+ }
26
+ //# sourceMappingURL=settings.js.map