@elurjs/language-server 1.1.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 (115) hide show
  1. package/README.md +71 -0
  2. package/bin/elur-language-server.js +3 -0
  3. package/dist/capabilities.d.ts +6 -0
  4. package/dist/capabilities.d.ts.map +1 -0
  5. package/dist/capabilities.js +22 -0
  6. package/dist/capabilities.js.map +1 -0
  7. package/dist/codeActions/fixes.d.ts +16 -0
  8. package/dist/codeActions/fixes.d.ts.map +1 -0
  9. package/dist/codeActions/fixes.js +94 -0
  10. package/dist/codeActions/fixes.js.map +1 -0
  11. package/dist/codeActions/provider.d.ts +7 -0
  12. package/dist/codeActions/provider.d.ts.map +1 -0
  13. package/dist/codeActions/provider.js +46 -0
  14. package/dist/codeActions/provider.js.map +1 -0
  15. package/dist/completion/directives.d.ts +6 -0
  16. package/dist/completion/directives.d.ts.map +1 -0
  17. package/dist/completion/directives.js +16 -0
  18. package/dist/completion/directives.js.map +1 -0
  19. package/dist/completion/events.d.ts +6 -0
  20. package/dist/completion/events.d.ts.map +1 -0
  21. package/dist/completion/events.js +20 -0
  22. package/dist/completion/events.js.map +1 -0
  23. package/dist/completion/modifiers.d.ts +6 -0
  24. package/dist/completion/modifiers.d.ts.map +1 -0
  25. package/dist/completion/modifiers.js +19 -0
  26. package/dist/completion/modifiers.js.map +1 -0
  27. package/dist/completion/provider.d.ts +7 -0
  28. package/dist/completion/provider.d.ts.map +1 -0
  29. package/dist/completion/provider.js +46 -0
  30. package/dist/completion/provider.js.map +1 -0
  31. package/dist/diagnostics/provider.d.ts +7 -0
  32. package/dist/diagnostics/provider.d.ts.map +1 -0
  33. package/dist/diagnostics/provider.js +49 -0
  34. package/dist/diagnostics/provider.js.map +1 -0
  35. package/dist/diagnostics/rules.d.ts +29 -0
  36. package/dist/diagnostics/rules.d.ts.map +1 -0
  37. package/dist/diagnostics/rules.js +46 -0
  38. package/dist/diagnostics/rules.js.map +1 -0
  39. package/dist/formatting/ast.d.ts +37 -0
  40. package/dist/formatting/ast.d.ts.map +1 -0
  41. package/dist/formatting/ast.js +112 -0
  42. package/dist/formatting/ast.js.map +1 -0
  43. package/dist/formatting/attributes.d.ts +7 -0
  44. package/dist/formatting/attributes.d.ts.map +1 -0
  45. package/dist/formatting/attributes.js +7 -0
  46. package/dist/formatting/attributes.js.map +1 -0
  47. package/dist/formatting/printer.d.ts +34 -0
  48. package/dist/formatting/printer.d.ts.map +1 -0
  49. package/dist/formatting/printer.js +380 -0
  50. package/dist/formatting/printer.js.map +1 -0
  51. package/dist/formatting/provider.d.ts +10 -0
  52. package/dist/formatting/provider.d.ts.map +1 -0
  53. package/dist/formatting/provider.js +82 -0
  54. package/dist/formatting/provider.js.map +1 -0
  55. package/dist/formatting/renderer.d.ts +11 -0
  56. package/dist/formatting/renderer.d.ts.map +1 -0
  57. package/dist/formatting/renderer.js +175 -0
  58. package/dist/formatting/renderer.js.map +1 -0
  59. package/dist/formatting/tokenizer.d.ts +7 -0
  60. package/dist/formatting/tokenizer.d.ts.map +1 -0
  61. package/dist/formatting/tokenizer.js +7 -0
  62. package/dist/formatting/tokenizer.js.map +1 -0
  63. package/dist/hover/provider.d.ts +7 -0
  64. package/dist/hover/provider.d.ts.map +1 -0
  65. package/dist/hover/provider.js +48 -0
  66. package/dist/hover/provider.js.map +1 -0
  67. package/dist/modifiers/analyzer.d.ts +18 -0
  68. package/dist/modifiers/analyzer.d.ts.map +1 -0
  69. package/dist/modifiers/analyzer.js +75 -0
  70. package/dist/modifiers/analyzer.js.map +1 -0
  71. package/dist/modifiers/constants.d.ts +17 -0
  72. package/dist/modifiers/constants.d.ts.map +1 -0
  73. package/dist/modifiers/constants.js +58 -0
  74. package/dist/modifiers/constants.js.map +1 -0
  75. package/dist/modifiers/normalizer.d.ts +20 -0
  76. package/dist/modifiers/normalizer.d.ts.map +1 -0
  77. package/dist/modifiers/normalizer.js +62 -0
  78. package/dist/modifiers/normalizer.js.map +1 -0
  79. package/dist/modifiers/parser.d.ts +33 -0
  80. package/dist/modifiers/parser.d.ts.map +1 -0
  81. package/dist/modifiers/parser.js +73 -0
  82. package/dist/modifiers/parser.js.map +1 -0
  83. package/dist/modifiers/suggestions.d.ts +20 -0
  84. package/dist/modifiers/suggestions.d.ts.map +1 -0
  85. package/dist/modifiers/suggestions.js +60 -0
  86. package/dist/modifiers/suggestions.js.map +1 -0
  87. package/dist/server-browser.d.ts +16 -0
  88. package/dist/server-browser.d.ts.map +1 -0
  89. package/dist/server-browser.js +16 -0
  90. package/dist/server-browser.js.map +1 -0
  91. package/dist/server.d.ts +8 -0
  92. package/dist/server.d.ts.map +1 -0
  93. package/dist/server.js +29 -0
  94. package/dist/server.js.map +1 -0
  95. package/dist/template/detector.d.ts +43 -0
  96. package/dist/template/detector.d.ts.map +1 -0
  97. package/dist/template/detector.js +184 -0
  98. package/dist/template/detector.js.map +1 -0
  99. package/dist/template/parser.d.ts +42 -0
  100. package/dist/template/parser.d.ts.map +1 -0
  101. package/dist/template/parser.js +225 -0
  102. package/dist/template/parser.js.map +1 -0
  103. package/dist/template/scope.d.ts +18 -0
  104. package/dist/template/scope.d.ts.map +1 -0
  105. package/dist/template/scope.js +44 -0
  106. package/dist/template/scope.js.map +1 -0
  107. package/dist/utils/config.d.ts +14 -0
  108. package/dist/utils/config.d.ts.map +1 -0
  109. package/dist/utils/config.js +13 -0
  110. package/dist/utils/config.js.map +1 -0
  111. package/dist/utils/levenshtein.d.ts +7 -0
  112. package/dist/utils/levenshtein.d.ts.map +1 -0
  113. package/dist/utils/levenshtein.js +7 -0
  114. package/dist/utils/levenshtein.js.map +1 -0
  115. package/package.json +61 -0
@@ -0,0 +1,42 @@
1
+ /**
2
+ * parser.ts — Tokenize and parse html`` template inner content.
3
+ *
4
+ * Ported from elur-vscode/formatter.js tokenize() and consumeOpenTag().
5
+ * Produces a token stream that the formatter can render.
6
+ */
7
+ export declare const TOKEN: {
8
+ readonly OPEN_TAG: "OPEN_TAG";
9
+ readonly CLOSE_TAG: "CLOSE_TAG";
10
+ readonly SELF_CLOSE: "SELF_CLOSE";
11
+ readonly EXPR: "EXPR";
12
+ readonly TEXT: "TEXT";
13
+ readonly COMMENT: "COMMENT";
14
+ readonly DOCTYPE: "DOCTYPE";
15
+ };
16
+ export type TokenType = (typeof TOKEN)[keyof typeof TOKEN];
17
+ export interface Token {
18
+ type: TokenType;
19
+ raw: string;
20
+ tag?: string;
21
+ attrs?: string;
22
+ selfClose?: boolean;
23
+ }
24
+ export declare const VOID_ELEMENTS: Set<string>;
25
+ export declare const INLINE_ELEMENTS: Set<string>;
26
+ export declare const PRE_ELEMENTS: Set<string>;
27
+ /**
28
+ * Tokenizes the inner HTML content of a html`` template.
29
+ */
30
+ export declare function tokenize(html: string): Token[];
31
+ /**
32
+ * Parses attributes from an attrs raw string into individual attr tokens.
33
+ */
34
+ export declare function parseAttributes(attrsRaw: string): string[];
35
+ declare function collapseWhitespace(text: string): string;
36
+ /**
37
+ * Returns true when an expression should be treated as block-level
38
+ * (gets its own line) rather than inline.
39
+ */
40
+ export declare function isBlockExpr(raw: string): boolean;
41
+ export { collapseWhitespace };
42
+ //# sourceMappingURL=parser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parser.d.ts","sourceRoot":"","sources":["../../src/template/parser.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,eAAO,MAAM,KAAK;;;;;;;;CAQR,CAAC;AAEX,MAAM,MAAM,SAAS,GAAG,CAAC,OAAO,KAAK,CAAC,CAAC,MAAM,OAAO,KAAK,CAAC,CAAC;AAE3D,MAAM,WAAW,KAAK;IACpB,IAAI,EAAE,SAAS,CAAC;IAChB,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,eAAO,MAAM,aAAa,aAGxB,CAAC;AAEH,eAAO,MAAM,eAAe,aAK1B,CAAC;AAEH,eAAO,MAAM,YAAY,aAAkD,CAAC;AAE5E;;GAEG;AACH,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,KAAK,EAAE,CAsE9C;AAwDD;;GAEG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE,CAgD1D;AAED,iBAAS,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEhD;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAMhD;AAED,OAAO,EAAE,kBAAkB,EAAE,CAAC"}
@@ -0,0 +1,225 @@
1
+ /**
2
+ * parser.ts — Tokenize and parse html`` template inner content.
3
+ *
4
+ * Ported from elur-vscode/formatter.js tokenize() and consumeOpenTag().
5
+ * Produces a token stream that the formatter can render.
6
+ */
7
+ export const TOKEN = {
8
+ OPEN_TAG: "OPEN_TAG",
9
+ CLOSE_TAG: "CLOSE_TAG",
10
+ SELF_CLOSE: "SELF_CLOSE",
11
+ EXPR: "EXPR",
12
+ TEXT: "TEXT",
13
+ COMMENT: "COMMENT",
14
+ DOCTYPE: "DOCTYPE",
15
+ };
16
+ export const VOID_ELEMENTS = new Set([
17
+ "area", "base", "br", "col", "embed", "hr", "img", "input",
18
+ "link", "meta", "param", "source", "track", "wbr",
19
+ ]);
20
+ export const INLINE_ELEMENTS = new Set([
21
+ "a", "abbr", "acronym", "b", "bdo", "big", "br", "button", "cite",
22
+ "code", "dfn", "em", "i", "img", "input", "kbd", "label", "map",
23
+ "object", "output", "q", "samp", "select", "small", "span", "strong",
24
+ "sub", "sup", "textarea", "time", "tt", "u", "var",
25
+ ]);
26
+ export const PRE_ELEMENTS = new Set(["pre", "script", "style", "textarea"]);
27
+ /**
28
+ * Tokenizes the inner HTML content of a html`` template.
29
+ */
30
+ export function tokenize(html) {
31
+ const tokens = [];
32
+ let i = 0;
33
+ const len = html.length;
34
+ while (i < len) {
35
+ // Expression ${...}
36
+ if (html[i] === "$" && html[i + 1] === "{") {
37
+ const start = i;
38
+ i += 2;
39
+ let depth = 1;
40
+ while (i < len && depth > 0) {
41
+ if (html[i] === "{")
42
+ depth++;
43
+ else if (html[i] === "}")
44
+ depth--;
45
+ i++;
46
+ }
47
+ tokens.push({ type: TOKEN.EXPR, raw: html.slice(start, i) });
48
+ continue;
49
+ }
50
+ if (html[i] === "<") {
51
+ // Comment
52
+ if (html.slice(i, i + 4) === "<!--") {
53
+ const end = html.indexOf("-->", i + 4);
54
+ const closeIdx = end === -1 ? len : end + 3;
55
+ tokens.push({ type: TOKEN.COMMENT, raw: html.slice(i, closeIdx) });
56
+ i = closeIdx;
57
+ continue;
58
+ }
59
+ // Doctype
60
+ if (html.slice(i, i + 9).toLowerCase() === "<!doctype") {
61
+ const end = html.indexOf(">", i);
62
+ const closeIdx = end === -1 ? len : end + 1;
63
+ tokens.push({ type: TOKEN.DOCTYPE, raw: html.slice(i, closeIdx) });
64
+ i = closeIdx;
65
+ continue;
66
+ }
67
+ // Close tag
68
+ if (html[i + 1] === "/") {
69
+ const end = html.indexOf(">", i);
70
+ const closeIdx = end === -1 ? len : end + 1;
71
+ const raw = html.slice(i, closeIdx);
72
+ const tagMatch = raw.match(/^<\/([a-zA-Z][a-zA-Z0-9-]*)/);
73
+ const tag = tagMatch ? tagMatch[1] : "";
74
+ tokens.push({ type: TOKEN.CLOSE_TAG, raw, tag });
75
+ i = closeIdx;
76
+ continue;
77
+ }
78
+ // Open tag
79
+ const tagResult = consumeOpenTag(html, i);
80
+ if (tagResult) {
81
+ tokens.push(tagResult);
82
+ i += tagResult.raw.length;
83
+ continue;
84
+ }
85
+ tokens.push({ type: TOKEN.TEXT, raw: "<" });
86
+ i++;
87
+ continue;
88
+ }
89
+ // Text
90
+ const start = i;
91
+ while (i < len && html[i] !== "<" && !(html[i] === "$" && html[i + 1] === "{")) {
92
+ i++;
93
+ }
94
+ if (i > start) {
95
+ tokens.push({ type: TOKEN.TEXT, raw: html.slice(start, i) });
96
+ }
97
+ }
98
+ return tokens;
99
+ }
100
+ function consumeOpenTag(html, from) {
101
+ let i = from + 1;
102
+ const len = html.length;
103
+ const tagNameStart = i;
104
+ while (i < len && /[a-zA-Z0-9-]/.test(html[i]))
105
+ i++;
106
+ if (i === tagNameStart)
107
+ return null;
108
+ const tag = html.slice(tagNameStart, i);
109
+ const attrsStart = i;
110
+ while (i < len && html[i] !== ">") {
111
+ if (html[i] === "$" && html[i + 1] === "{") {
112
+ i += 2;
113
+ let depth = 1;
114
+ while (i < len && depth > 0) {
115
+ if (html[i] === "{")
116
+ depth++;
117
+ else if (html[i] === "}")
118
+ depth--;
119
+ i++;
120
+ }
121
+ continue;
122
+ }
123
+ if (html[i] === '"') {
124
+ i++;
125
+ while (i < len && html[i] !== '"')
126
+ i++;
127
+ i++;
128
+ continue;
129
+ }
130
+ if (html[i] === "'") {
131
+ i++;
132
+ while (i < len && html[i] !== "'")
133
+ i++;
134
+ i++;
135
+ continue;
136
+ }
137
+ i++;
138
+ }
139
+ if (i >= len)
140
+ return null;
141
+ i++;
142
+ const raw = html.slice(from, i);
143
+ let attrsRaw = html.slice(attrsStart, i - 1).trimEnd();
144
+ let selfClose = VOID_ELEMENTS.has(tag.toLowerCase());
145
+ while (/(?:^|\s)\/\s*$/.test(attrsRaw)) {
146
+ selfClose = true;
147
+ attrsRaw = attrsRaw.replace(/\s*\/\s*$/, "").trimEnd();
148
+ }
149
+ const type = selfClose ? TOKEN.SELF_CLOSE : TOKEN.OPEN_TAG;
150
+ return { type, raw, tag, attrs: attrsRaw, selfClose };
151
+ }
152
+ /**
153
+ * Parses attributes from an attrs raw string into individual attr tokens.
154
+ */
155
+ export function parseAttributes(attrsRaw) {
156
+ const attrs = [];
157
+ let i = 0;
158
+ const len = attrsRaw.length;
159
+ let current = "";
160
+ const push = () => {
161
+ const v = current.trim();
162
+ if (v && v !== "/")
163
+ attrs.push(v);
164
+ current = "";
165
+ };
166
+ while (i < len) {
167
+ if (/\s/.test(attrsRaw[i]) && current.trim() === "") {
168
+ i++;
169
+ continue;
170
+ }
171
+ if (attrsRaw[i] === "$" && attrsRaw[i + 1] === "{") {
172
+ const start = i;
173
+ i += 2;
174
+ let depth = 1;
175
+ while (i < len && depth > 0) {
176
+ if (attrsRaw[i] === "{")
177
+ depth++;
178
+ else if (attrsRaw[i] === "}")
179
+ depth--;
180
+ i++;
181
+ }
182
+ current += attrsRaw.slice(start, i);
183
+ continue;
184
+ }
185
+ if (attrsRaw[i] === '"' || attrsRaw[i] === "'") {
186
+ const q = attrsRaw[i];
187
+ const start = i;
188
+ i++;
189
+ while (i < len && attrsRaw[i] !== q)
190
+ i++;
191
+ i++;
192
+ current += attrsRaw.slice(start, i);
193
+ continue;
194
+ }
195
+ if (/\s/.test(attrsRaw[i])) {
196
+ push();
197
+ i++;
198
+ continue;
199
+ }
200
+ current += attrsRaw[i];
201
+ i++;
202
+ }
203
+ push();
204
+ return attrs;
205
+ }
206
+ function collapseWhitespace(text) {
207
+ return text.replace(/\s+/g, " ");
208
+ }
209
+ /**
210
+ * Returns true when an expression should be treated as block-level
211
+ * (gets its own line) rather than inline.
212
+ */
213
+ export function isBlockExpr(raw) {
214
+ if (raw.includes("\n"))
215
+ return true;
216
+ if (/^\$\{[a-zA-Z_$][\w$]*\s*\(/.test(raw))
217
+ return true;
218
+ if (/^\$\{\s*(?:async\s+)?\(/.test(raw))
219
+ return true;
220
+ if (/\bhtml\s*`/.test(raw))
221
+ return true;
222
+ return false;
223
+ }
224
+ export { collapseWhitespace };
225
+ //# sourceMappingURL=parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parser.js","sourceRoot":"","sources":["../../src/template/parser.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * scope.ts — Template scope analysis utilities.
3
+ *
4
+ * Helpers for determining what kind of construct the cursor is in.
5
+ */
6
+ export type CursorContext = "event-name" | "modifier" | "attribute-name" | "attribute-value" | "text" | "outside-template";
7
+ export interface ScopeInfo {
8
+ context: CursorContext;
9
+ /** The @event.modifier prefix before the cursor, if applicable. */
10
+ eventPrefix?: string;
11
+ /** The modifier prefix before the cursor, if applicable. */
12
+ modifierPrefix?: string;
13
+ }
14
+ /**
15
+ * Determines the cursor context within a html`` template.
16
+ */
17
+ export declare function getCursorContext(documentText: string, cursorOffset: number, allowedTags?: readonly string[]): ScopeInfo;
18
+ //# sourceMappingURL=scope.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scope.d.ts","sourceRoot":"","sources":["../../src/template/scope.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,MAAM,MAAM,aAAa,GACrB,YAAY,GACZ,UAAU,GACV,gBAAgB,GAChB,iBAAiB,GACjB,MAAM,GACN,kBAAkB,CAAC;AAEvB,MAAM,WAAW,SAAS;IACxB,OAAO,EAAE,aAAa,CAAC;IACvB,mEAAmE;IACnE,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,4DAA4D;IAC5D,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAC9B,YAAY,EAAE,MAAM,EACpB,YAAY,EAAE,MAAM,EACpB,WAAW,GAAE,SAAS,MAAM,EAAoB,GAC/C,SAAS,CAqCX"}
@@ -0,0 +1,44 @@
1
+ /**
2
+ * scope.ts — Template scope analysis utilities.
3
+ *
4
+ * Helpers for determining what kind of construct the cursor is in.
5
+ */
6
+ import { isInsideTaggedTemplate } from "./detector.js";
7
+ /**
8
+ * Determines the cursor context within a html`` template.
9
+ */
10
+ export function getCursorContext(documentText, cursorOffset, allowedTags = ["html", "raw"]) {
11
+ if (!isInsideTaggedTemplate(documentText, cursorOffset, allowedTags)) {
12
+ return { context: "outside-template" };
13
+ }
14
+ // Get the line prefix up to the cursor
15
+ const before = documentText.slice(0, cursorOffset);
16
+ const lastNewline = before.lastIndexOf("\n");
17
+ const linePrefix = lastNewline >= 0 ? before.slice(lastNewline + 1) : before;
18
+ // Check for @event.modifier context
19
+ const tokenMatch = linePrefix.match(/@[a-zA-Z0-9.:-]*$/);
20
+ if (tokenMatch) {
21
+ const token = tokenMatch[0];
22
+ if (token === "@") {
23
+ return { context: "event-name", eventPrefix: "" };
24
+ }
25
+ const withoutAt = token.slice(1);
26
+ if (!withoutAt.includes(".")) {
27
+ return { context: "event-name", eventPrefix: withoutAt.toLowerCase() };
28
+ }
29
+ const parts = withoutAt.split(".");
30
+ const eventName = (parts[0] || "").toLowerCase();
31
+ const trailingDot = token.endsWith(".");
32
+ const modifierPrefix = trailingDot
33
+ ? ""
34
+ : (parts[parts.length - 1] || "").toLowerCase();
35
+ return { context: "modifier", eventPrefix: eventName, modifierPrefix };
36
+ }
37
+ // Check for attribute name context
38
+ const attrMatch = linePrefix.match(/[@a-zA-Z][a-zA-Z0-9.:-]*$/);
39
+ if (attrMatch) {
40
+ return { context: "attribute-name" };
41
+ }
42
+ return { context: "text" };
43
+ }
44
+ //# sourceMappingURL=scope.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scope.js","sourceRoot":"","sources":["../../src/template/scope.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,sBAAsB,EAAE,MAAM,eAAe,CAAC;AAkBvD;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAC9B,YAAoB,EACpB,YAAoB,EACpB,cAAiC,CAAC,MAAM,EAAE,KAAK,CAAC;IAEhD,IAAI,CAAC,sBAAsB,CAAC,YAAY,EAAE,YAAY,EAAE,WAAW,CAAC,EAAE,CAAC;QACrE,OAAO,EAAE,OAAO,EAAE,kBAAkB,EAAE,CAAC;IACzC,CAAC;IAED,uCAAuC;IACvC,MAAM,MAAM,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC;IACnD,MAAM,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;IAC7C,MAAM,UAAU,GAAG,WAAW,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;IAE7E,oCAAoC;IACpC,MAAM,UAAU,GAAG,UAAU,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC;IACzD,IAAI,UAAU,EAAE,CAAC;QACf,MAAM,KAAK,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;QAC5B,IAAI,KAAK,KAAK,GAAG,EAAE,CAAC;YAClB,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,EAAE,EAAE,CAAC;QACpD,CAAC;QACD,MAAM,SAAS,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACjC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YAC7B,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,SAAS,CAAC,WAAW,EAAE,EAAE,CAAC;QACzE,CAAC;QACD,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACnC,MAAM,SAAS,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;QACjD,MAAM,WAAW,GAAG,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;QACxC,MAAM,cAAc,GAAG,WAAW;YAChC,CAAC,CAAC,EAAE;YACJ,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;QAClD,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,SAAS,EAAE,cAAc,EAAE,CAAC;IACzE,CAAC;IAED,mCAAmC;IACnC,MAAM,SAAS,GAAG,UAAU,CAAC,KAAK,CAAC,2BAA2B,CAAC,CAAC;IAChE,IAAI,SAAS,EAAE,CAAC;QACd,OAAO,EAAE,OAAO,EAAE,gBAAgB,EAAE,CAAC;IACvC,CAAC;IAED,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC;AAC7B,CAAC"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * config.ts — Read settings from the LSP client.
3
+ */
4
+ export interface ElurLspConfig {
5
+ enableDiagnostics: boolean;
6
+ enableStyleHints: boolean;
7
+ enableCompletions: boolean;
8
+ enableModifierSuggestions: boolean;
9
+ enableFormatting: boolean;
10
+ formatOnSave: boolean;
11
+ templateTags: string[];
12
+ }
13
+ export declare const DEFAULT_CONFIG: ElurLspConfig;
14
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/utils/config.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,WAAW,aAAa;IAC5B,iBAAiB,EAAE,OAAO,CAAC;IAC3B,gBAAgB,EAAE,OAAO,CAAC;IAC1B,iBAAiB,EAAE,OAAO,CAAC;IAC3B,yBAAyB,EAAE,OAAO,CAAC;IACnC,gBAAgB,EAAE,OAAO,CAAC;IAC1B,YAAY,EAAE,OAAO,CAAC;IACtB,YAAY,EAAE,MAAM,EAAE,CAAC;CACxB;AAED,eAAO,MAAM,cAAc,EAAE,aAQ5B,CAAC"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * config.ts — Read settings from the LSP client.
3
+ */
4
+ export const DEFAULT_CONFIG = {
5
+ enableDiagnostics: true,
6
+ enableStyleHints: true,
7
+ enableCompletions: true,
8
+ enableModifierSuggestions: true,
9
+ enableFormatting: true,
10
+ formatOnSave: true,
11
+ templateTags: ["html", "raw"],
12
+ };
13
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/utils/config.ts"],"names":[],"mappings":"AAAA;;GAEG;AAYH,MAAM,CAAC,MAAM,cAAc,GAAkB;IAC3C,iBAAiB,EAAE,IAAI;IACvB,gBAAgB,EAAE,IAAI;IACtB,iBAAiB,EAAE,IAAI;IACvB,yBAAyB,EAAE,IAAI;IAC/B,gBAAgB,EAAE,IAAI;IACtB,YAAY,EAAE,IAAI;IAClB,YAAY,EAAE,CAAC,MAAM,EAAE,KAAK,CAAC;CAC9B,CAAC"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * levenshtein.ts — Levenshtein edit distance.
3
+ *
4
+ * Re-exported from modifiers/suggestions.ts for convenience.
5
+ */
6
+ export { levenshtein } from "../modifiers/suggestions.js";
7
+ //# sourceMappingURL=levenshtein.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"levenshtein.d.ts","sourceRoot":"","sources":["../../src/utils/levenshtein.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * levenshtein.ts — Levenshtein edit distance.
3
+ *
4
+ * Re-exported from modifiers/suggestions.ts for convenience.
5
+ */
6
+ export { levenshtein } from "../modifiers/suggestions.js";
7
+ //# sourceMappingURL=levenshtein.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"levenshtein.js","sourceRoot":"","sources":["../../src/utils/levenshtein.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC"}
package/package.json ADDED
@@ -0,0 +1,61 @@
1
+ {
2
+ "name": "@elurjs/language-server",
3
+ "version": "1.1.0",
4
+ "description": "LSP server for Elur html`` tagged templates",
5
+ "type": "module",
6
+ "license": "MIT",
7
+ "author": "Deiver Vasquez",
8
+ "repository": {
9
+ "type": "git",
10
+ "url": "git+https://github.com/elurjs/elur-language-server.git"
11
+ },
12
+ "bin": {
13
+ "elur-language-server": "./bin/elur-language-server.js"
14
+ },
15
+ "main": "./dist/server.js",
16
+ "exports": {
17
+ ".": "./dist/server.js",
18
+ "./browser": "./dist/server-browser.js",
19
+ "./dist/*": "./dist/*"
20
+ },
21
+ "files": [
22
+ "dist",
23
+ "bin"
24
+ ],
25
+ "keywords": [
26
+ "lsp",
27
+ "language-server",
28
+ "elur",
29
+ "html",
30
+ "tagged-template",
31
+ "diagnostics",
32
+ "completion"
33
+ ],
34
+ "scripts": {
35
+ "build": "tsc",
36
+ "typecheck": "tsc --noEmit",
37
+ "test": "vitest run",
38
+ "lint": "eslint src/"
39
+ },
40
+ "dependencies": {
41
+ "vscode-languageserver": "^9.0.1",
42
+ "vscode-languageserver-textdocument": "^1.0.11",
43
+ "vscode-uri": "^3.0.8"
44
+ },
45
+ "peerDependencies": {
46
+ "@elurjs/core": "^3.0.0"
47
+ },
48
+ "peerDependenciesMeta": {
49
+ "@elurjs/core": {
50
+ "optional": true
51
+ }
52
+ },
53
+ "devDependencies": {
54
+ "@types/node": "^20.0.0",
55
+ "typescript": "~5.9.3",
56
+ "vitest": "^4.0.18"
57
+ },
58
+ "engines": {
59
+ "node": ">=18.0.0"
60
+ }
61
+ }