@adrk/mxls 1.0.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 (112) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +110 -0
  3. package/dist/completion/CompletionBuilder.d.ts +26 -0
  4. package/dist/completion/CompletionBuilder.d.ts.map +1 -0
  5. package/dist/completion/CompletionBuilder.js +113 -0
  6. package/dist/completion/CompletionBuilder.js.map +1 -0
  7. package/dist/completion/CompletionCache.d.ts +16 -0
  8. package/dist/completion/CompletionCache.d.ts.map +1 -0
  9. package/dist/completion/CompletionCache.js +25 -0
  10. package/dist/completion/CompletionCache.js.map +1 -0
  11. package/dist/completion/NamespaceResolver.d.ts +21 -0
  12. package/dist/completion/NamespaceResolver.d.ts.map +1 -0
  13. package/dist/completion/NamespaceResolver.js +58 -0
  14. package/dist/completion/NamespaceResolver.js.map +1 -0
  15. package/dist/completion/SchemaCompleter.d.ts +23 -0
  16. package/dist/completion/SchemaCompleter.d.ts.map +1 -0
  17. package/dist/completion/SchemaCompleter.js +164 -0
  18. package/dist/completion/SchemaCompleter.js.map +1 -0
  19. package/dist/completion/TextAnalyzer.d.ts +34 -0
  20. package/dist/completion/TextAnalyzer.d.ts.map +1 -0
  21. package/dist/completion/TextAnalyzer.js +122 -0
  22. package/dist/completion/TextAnalyzer.js.map +1 -0
  23. package/dist/features/EditorPlugin.d.ts +49 -0
  24. package/dist/features/EditorPlugin.d.ts.map +1 -0
  25. package/dist/features/EditorPlugin.js +128 -0
  26. package/dist/features/EditorPlugin.js.map +1 -0
  27. package/dist/formatter/XmlFormatter.d.ts +4 -0
  28. package/dist/formatter/XmlFormatter.d.ts.map +1 -0
  29. package/dist/formatter/XmlFormatter.js +13 -0
  30. package/dist/formatter/XmlFormatter.js.map +1 -0
  31. package/dist/hover/HoverBuilder.d.ts +8 -0
  32. package/dist/hover/HoverBuilder.d.ts.map +1 -0
  33. package/dist/hover/HoverBuilder.js +27 -0
  34. package/dist/hover/HoverBuilder.js.map +1 -0
  35. package/dist/hover/SchemaHover.d.ts +12 -0
  36. package/dist/hover/SchemaHover.d.ts.map +1 -0
  37. package/dist/hover/SchemaHover.js +71 -0
  38. package/dist/hover/SchemaHover.js.map +1 -0
  39. package/dist/index.d.ts +14 -0
  40. package/dist/index.d.ts.map +1 -0
  41. package/dist/index.js +9 -0
  42. package/dist/index.js.map +1 -0
  43. package/dist/interfaces/IMonacoApi.d.ts +39 -0
  44. package/dist/interfaces/IMonacoApi.d.ts.map +1 -0
  45. package/dist/interfaces/IMonacoApi.js +2 -0
  46. package/dist/interfaces/IMonacoApi.js.map +1 -0
  47. package/dist/interfaces/ISchemaParser.d.ts +30 -0
  48. package/dist/interfaces/ISchemaParser.d.ts.map +1 -0
  49. package/dist/interfaces/ISchemaParser.js +2 -0
  50. package/dist/interfaces/ISchemaParser.js.map +1 -0
  51. package/dist/interfaces/ISchemaRegistry.d.ts +46 -0
  52. package/dist/interfaces/ISchemaRegistry.d.ts.map +1 -0
  53. package/dist/interfaces/ISchemaRegistry.js +2 -0
  54. package/dist/interfaces/ISchemaRegistry.js.map +1 -0
  55. package/dist/interfaces/ISchemaWorker.d.ts +25 -0
  56. package/dist/interfaces/ISchemaWorker.d.ts.map +1 -0
  57. package/dist/interfaces/ISchemaWorker.js +2 -0
  58. package/dist/interfaces/ISchemaWorker.js.map +1 -0
  59. package/dist/manager/SchemaRegistry.d.ts +24 -0
  60. package/dist/manager/SchemaRegistry.d.ts.map +1 -0
  61. package/dist/manager/SchemaRegistry.js +84 -0
  62. package/dist/manager/SchemaRegistry.js.map +1 -0
  63. package/dist/manager/SchemaWorker.d.ts +25 -0
  64. package/dist/manager/SchemaWorker.d.ts.map +1 -0
  65. package/dist/manager/SchemaWorker.js +70 -0
  66. package/dist/manager/SchemaWorker.js.map +1 -0
  67. package/dist/parser/SchemaIndex.d.ts +54 -0
  68. package/dist/parser/SchemaIndex.d.ts.map +1 -0
  69. package/dist/parser/SchemaIndex.js +149 -0
  70. package/dist/parser/SchemaIndex.js.map +1 -0
  71. package/dist/parser/SchemaParser.d.ts +23 -0
  72. package/dist/parser/SchemaParser.d.ts.map +1 -0
  73. package/dist/parser/SchemaParser.js +44 -0
  74. package/dist/parser/SchemaParser.js.map +1 -0
  75. package/dist/parser/SchemaQuery.d.ts +38 -0
  76. package/dist/parser/SchemaQuery.d.ts.map +1 -0
  77. package/dist/parser/SchemaQuery.js +364 -0
  78. package/dist/parser/SchemaQuery.js.map +1 -0
  79. package/dist/template/TemplateBuilder.d.ts +18 -0
  80. package/dist/template/TemplateBuilder.d.ts.map +1 -0
  81. package/dist/template/TemplateBuilder.js +52 -0
  82. package/dist/template/TemplateBuilder.js.map +1 -0
  83. package/dist/types.d.ts +81 -0
  84. package/dist/types.d.ts.map +1 -0
  85. package/dist/types.js +27 -0
  86. package/dist/types.js.map +1 -0
  87. package/dist/utils/Logger.d.ts +17 -0
  88. package/dist/utils/Logger.d.ts.map +1 -0
  89. package/dist/utils/Logger.js +41 -0
  90. package/dist/utils/Logger.js.map +1 -0
  91. package/dist/utils/XmlTextUtils.d.ts +20 -0
  92. package/dist/utils/XmlTextUtils.d.ts.map +1 -0
  93. package/dist/utils/XmlTextUtils.js +85 -0
  94. package/dist/utils/XmlTextUtils.js.map +1 -0
  95. package/dist/validation/DecorationMapper.d.ts +15 -0
  96. package/dist/validation/DecorationMapper.d.ts.map +1 -0
  97. package/dist/validation/DecorationMapper.js +59 -0
  98. package/dist/validation/DecorationMapper.js.map +1 -0
  99. package/dist/validation/SchemaDecorator.d.ts +26 -0
  100. package/dist/validation/SchemaDecorator.d.ts.map +1 -0
  101. package/dist/validation/SchemaDecorator.js +50 -0
  102. package/dist/validation/SchemaDecorator.js.map +1 -0
  103. package/dist/validation/SchemaValidator.d.ts +13 -0
  104. package/dist/validation/SchemaValidator.d.ts.map +1 -0
  105. package/dist/validation/SchemaValidator.js +387 -0
  106. package/dist/validation/SchemaValidator.js.map +1 -0
  107. package/dist/validation/validation.worker.d.ts +2 -0
  108. package/dist/validation/validation.worker.d.ts.map +1 -0
  109. package/dist/validation/validation.worker.js +57 -0
  110. package/dist/validation/validation.worker.js.map +1 -0
  111. package/package.json +49 -0
  112. package/style.css +17 -0
@@ -0,0 +1,387 @@
1
+ import { DOMParser, MIME_TYPE } from '@xmldom/xmldom';
2
+ import { ContentModelType, Severity } from '../types';
3
+ import { stripNsPrefix } from '../utils/XmlTextUtils';
4
+ import { logger } from '../utils/Logger';
5
+ // ─── Internal helpers ─────────────────────────────────────────────────────────
6
+ const VALID_BOOLEANS = new Set(['true', 'false', '1', '0']);
7
+ function nodeLocation(node) {
8
+ return {
9
+ line: node.lineNumber ?? 1,
10
+ col: node.columnNumber ?? 1,
11
+ };
12
+ }
13
+ /** Cast a Node to Element so we can call getAttribute / localName etc. */
14
+ function asElement(node) {
15
+ if (node.nodeType === 1 /* ELEMENT_NODE */)
16
+ return node;
17
+ return null;
18
+ }
19
+ /** Collect all element nodes in document order (depth-first). */
20
+ function collectAllElements(root) {
21
+ const result = [];
22
+ const walk = (el) => {
23
+ result.push(el);
24
+ for (let i = 0; i < el.childNodes.length; i++) {
25
+ const child = el.childNodes[i];
26
+ const childEl = asElement(child);
27
+ if (childEl)
28
+ walk(childEl);
29
+ }
30
+ };
31
+ walk(root);
32
+ return result;
33
+ }
34
+ /** Children that are element nodes. */
35
+ function childElements(el) {
36
+ const result = [];
37
+ for (let i = 0; i < el.childNodes.length; i++) {
38
+ const child = asElement(el.childNodes[i]);
39
+ if (child)
40
+ result.push(child);
41
+ }
42
+ return result;
43
+ }
44
+ /** Deduplicate key: `line:col:severity:message60` */
45
+ function dedupKey(e) {
46
+ return `${e.line}:${e.col}:${e.severity}:${e.message.slice(0, 60)}`;
47
+ }
48
+ /**
49
+ * Find the first worker that recognises `localName` as a root or sub-element
50
+ * of `parentLocalName`. Returns null when no worker owns the element.
51
+ */
52
+ function findWorkerForElement(localName, parentLocalName, workers) {
53
+ for (const w of workers) {
54
+ if (parentLocalName === null) {
55
+ // root level
56
+ const roots = w.getRootElements();
57
+ if (roots.some(r => r.name === localName))
58
+ return w;
59
+ }
60
+ else {
61
+ const subs = w.getSubElements(parentLocalName);
62
+ if (subs.some(s => s.name === localName))
63
+ return w;
64
+ }
65
+ }
66
+ return null;
67
+ }
68
+ // ─── SchemaValidator ─────────────────────────────────────────────────────────
69
+ /**
70
+ * Pure validator: no Monaco dependency, fully testable in Node.
71
+ * Returns a deduplicated array of ValidationError for the given XML string
72
+ * checked against all provided schema workers.
73
+ */
74
+ export class SchemaValidator {
75
+ validate(xml, workers) {
76
+ const errors = [];
77
+ // ── 0. Duplicate attribute names (raw text scan) ──────────────────────
78
+ errors.push(...this.checkDuplicateAttributes(xml));
79
+ // ── 1. XML parse errors ───────────────────────────────────────────────
80
+ let parseErrors = [];
81
+ const parser = new DOMParser({
82
+ onError: (level, msg, context) => {
83
+ const ctx = context;
84
+ const line = ctx?.locator?.lineNumber ?? 1;
85
+ const col = ctx?.locator?.columnNumber ?? 1;
86
+ parseErrors.push({
87
+ line,
88
+ col,
89
+ message: msg,
90
+ severity: level === 'warning'
91
+ ? Severity.warning
92
+ : level === 'fatalError'
93
+ ? Severity.fatalError
94
+ : Severity.error,
95
+ });
96
+ },
97
+ });
98
+ let doc;
99
+ try {
100
+ doc = parser.parseFromString(xml, MIME_TYPE.XML_TEXT);
101
+ }
102
+ catch (err) {
103
+ const msg = err instanceof Error ? err.message : String(err);
104
+ logger.error(`XML parse threw: ${msg}`);
105
+ if (!parseErrors.some(e => e.message === msg)) {
106
+ parseErrors.push({ line: 1, col: 1, message: msg, severity: Severity.fatalError });
107
+ }
108
+ errors.push(...parseErrors);
109
+ return this.deduplicate(errors);
110
+ }
111
+ if (parseErrors.length > 0) {
112
+ logger.warn(`XML parse produced ${parseErrors.length} error(s)`);
113
+ parseErrors.forEach(e => logger.verbose(` parse [${e.severity}] ${e.line}:${e.col} ${e.message}`));
114
+ }
115
+ errors.push(...parseErrors);
116
+ // If we have fatal errors or no root, structural validation is impossible
117
+ const docRoot = doc.documentElement;
118
+ if (!docRoot || parseErrors.some(e => e.severity === Severity.fatalError)) {
119
+ return this.deduplicate(errors);
120
+ }
121
+ // ── Walk every element node ────────────────────────────────────────────
122
+ const allElements = collectAllElements(docRoot);
123
+ for (const el of allElements) {
124
+ const located = el;
125
+ const { line, col } = nodeLocation(located);
126
+ const localName = stripNsPrefix(el.localName ?? el.nodeName);
127
+ // Determine parent local name
128
+ const parentNode = el.parentNode;
129
+ const parentEl = parentNode ? asElement(parentNode) : null;
130
+ const parentLocalName = parentEl
131
+ ? stripNsPrefix(parentEl.localName ?? parentEl.nodeName)
132
+ : null;
133
+ // Build the full ancestor chain (top-down, excluding el itself) so
134
+ // context-aware getSubElements resolves the correct type for this
135
+ // element rather than falling back to the union of all types.
136
+ const ancestorChain = [];
137
+ let ancestor = el.parentNode;
138
+ while (ancestor && ancestor.nodeType === 1) {
139
+ ancestorChain.unshift(stripNsPrefix(ancestor.localName ?? ancestor.nodeName));
140
+ ancestor = ancestor.parentNode;
141
+ }
142
+ // Find the worker that owns this element
143
+ const ownerWorker = findWorkerForElement(localName, parentLocalName, workers);
144
+ // ── 2. Unknown element ─────────────────────────────────────────────
145
+ if (workers.length > 0) {
146
+ if (parentLocalName === null) {
147
+ // Root element: must be in at least one worker's root elements
148
+ const knownRoot = workers.some(w => w.getRootElements().some(r => r.name === localName));
149
+ if (!knownRoot) {
150
+ errors.push({
151
+ line,
152
+ col,
153
+ message: `Unknown root element <${localName}>`,
154
+ severity: Severity.error,
155
+ });
156
+ }
157
+ }
158
+ else {
159
+ // Child element: must be in parent's sub-elements for at least one worker
160
+ const knownChild = workers.some(w => w.getSubElements(parentLocalName).some(s => s.name === localName));
161
+ if (!knownChild) {
162
+ errors.push({
163
+ line,
164
+ col,
165
+ message: `Unknown element <${localName}> inside <${parentLocalName}>`,
166
+ severity: Severity.error,
167
+ });
168
+ }
169
+ }
170
+ }
171
+ if (!ownerWorker)
172
+ continue;
173
+ const definedAttrs = ownerWorker.getAttributesForElement(localName);
174
+ // ── 3. Missing required attributes ────────────────────────────────
175
+ for (const attrDef of definedAttrs) {
176
+ if (attrDef.use === 'required' && attrDef.name) {
177
+ if (!el.hasAttribute(attrDef.name)) {
178
+ errors.push({
179
+ line,
180
+ col,
181
+ message: `Required attribute "${attrDef.name}" is missing on <${localName}>`,
182
+ severity: Severity.error,
183
+ });
184
+ }
185
+ }
186
+ }
187
+ // ── 4–6. Attribute-level checks ───────────────────────────────────
188
+ const attrMap = el.attributes;
189
+ for (let i = 0; attrMap && i < attrMap.length; i++) {
190
+ const attr = attrMap[i];
191
+ const attrName = stripNsPrefix(attr.name);
192
+ const attrValue = attr.value;
193
+ // Skip xmlns declarations
194
+ if (attr.name.startsWith('xmlns') || attr.name === 'xmlns')
195
+ continue;
196
+ // ── 4. Unknown attribute ───────────────────────────────────────
197
+ const knownAttr = definedAttrs.some(a => a.name === attrName);
198
+ if (!knownAttr && definedAttrs.length > 0) {
199
+ errors.push({
200
+ line,
201
+ col,
202
+ message: `Unknown attribute "${attrName}" on <${localName}>`,
203
+ severity: Severity.error,
204
+ });
205
+ continue;
206
+ }
207
+ const attrDef = definedAttrs.find(a => a.name === attrName);
208
+ if (!attrDef)
209
+ continue;
210
+ // ── 5. Invalid boolean ─────────────────────────────────────────
211
+ if (attrDef.type === 'xs:boolean') {
212
+ if (!VALID_BOOLEANS.has(attrValue)) {
213
+ errors.push({
214
+ line,
215
+ col,
216
+ message: `Attribute "${attrName}" on <${localName}> must be a boolean (true/false/1/0), got "${attrValue}"`,
217
+ severity: Severity.error,
218
+ });
219
+ }
220
+ continue;
221
+ }
222
+ // ── 6. Invalid enum value ──────────────────────────────────────
223
+ const enumValues = ownerWorker.getEnumValuesForAttribute(localName, attrName);
224
+ if (enumValues.length > 0 && !enumValues.includes(attrValue)) {
225
+ errors.push({
226
+ line,
227
+ col,
228
+ message: `Invalid value "${attrValue}" for attribute "${attrName}" on <${localName}>. Allowed: ${enumValues.join(', ')}`,
229
+ severity: Severity.error,
230
+ });
231
+ }
232
+ // ── 10. xs:pattern violation ───────────────────────────────────
233
+ if (attrDef.pattern && enumValues.length === 0) {
234
+ try {
235
+ if (!new RegExp(`^(?:${attrDef.pattern})$`).test(attrValue)) {
236
+ errors.push({
237
+ line,
238
+ col,
239
+ message: `Value "${attrValue}" for attribute "${attrName}" on <${localName}> does not match pattern /${attrDef.pattern}/`,
240
+ severity: Severity.error,
241
+ });
242
+ }
243
+ }
244
+ catch {
245
+ // malformed XSD regex — skip silently
246
+ }
247
+ }
248
+ }
249
+ // ── 7–9. Child occurrence / content-model checks ──────────────────
250
+ const children = childElements(el);
251
+ const contentModel = ownerWorker.getContentModelType(localName);
252
+ // ── 9. Empty choice ────────────────────────────────────────────────
253
+ if (contentModel === ContentModelType.choice && children.length === 0) {
254
+ errors.push({
255
+ line,
256
+ col,
257
+ message: `Element <${localName}> uses xs:choice but has no children`,
258
+ severity: Severity.error,
259
+ });
260
+ }
261
+ const subDefs = ownerWorker.getSubElements(localName, ancestorChain);
262
+ if (subDefs.length === 0)
263
+ continue;
264
+ // Count child occurrences
265
+ const childCountMap = new Map();
266
+ for (const child of children) {
267
+ const childName = stripNsPrefix(child.localName ?? child.nodeName);
268
+ childCountMap.set(childName, (childCountMap.get(childName) ?? 0) + 1);
269
+ }
270
+ for (const subDef of subDefs) {
271
+ if (!subDef.name)
272
+ continue;
273
+ const count = childCountMap.get(subDef.name) ?? 0;
274
+ // ── 7. maxOccurs exceeded ──────────────────────────────────────
275
+ // XSD default for maxOccurs is 1 when not specified
276
+ if (subDef.maxOccurs !== 'unbounded') {
277
+ const max = parseInt(subDef.maxOccurs ?? '1', 10);
278
+ if (!isNaN(max) && count > max) {
279
+ errors.push({
280
+ line,
281
+ col,
282
+ message: `Element <${subDef.name}> appears ${count} time(s) inside <${localName}> but maxOccurs is ${max}`,
283
+ severity: Severity.error,
284
+ });
285
+ }
286
+ }
287
+ // ── 8. minOccurs violated (sequence / all only) ────────────────
288
+ if (contentModel === ContentModelType.sequence ||
289
+ contentModel === ContentModelType.all) {
290
+ const minStr = subDef.minOccurs ?? '1';
291
+ const min = parseInt(minStr, 10);
292
+ if (!isNaN(min) && min > 0 && count < min) {
293
+ errors.push({
294
+ line,
295
+ col,
296
+ message: `Required child <${subDef.name}> is missing inside <${localName}> (minOccurs=${min})`,
297
+ severity: Severity.error,
298
+ });
299
+ }
300
+ }
301
+ }
302
+ }
303
+ const result = this.deduplicate(errors);
304
+ logger.debug(`validation: ${result.length} error(s) in ${allElements.length} element(s)`);
305
+ result.forEach(e => logger.verbose(` [${e.severity}] ${e.line}:${e.col} ${e.message}`));
306
+ return result;
307
+ }
308
+ checkDuplicateAttributes(xml) {
309
+ const errors = [];
310
+ let i = 0, line = 1, lineStart = 0;
311
+ const advanceNewline = () => {
312
+ if (xml[i] === '\n') {
313
+ line++;
314
+ lineStart = i + 1;
315
+ }
316
+ i++;
317
+ };
318
+ const skipQuoted = () => {
319
+ const q = xml[i++];
320
+ while (i < xml.length && xml[i] !== q)
321
+ advanceNewline();
322
+ if (i < xml.length)
323
+ i++;
324
+ };
325
+ while (i < xml.length) {
326
+ if (xml[i] !== '<') {
327
+ advanceNewline();
328
+ continue;
329
+ }
330
+ const next = xml[i + 1];
331
+ if (next === '/' || next === '!' || next === '?') {
332
+ while (i < xml.length && xml[i] !== '>')
333
+ advanceNewline();
334
+ if (i < xml.length)
335
+ i++;
336
+ continue;
337
+ }
338
+ const tagLine = line;
339
+ const tagCol = i - lineStart + 1;
340
+ i++; // skip <
341
+ while (i < xml.length && !/[\s>\/]/.test(xml[i]))
342
+ i++; // skip tag name
343
+ const seen = new Set();
344
+ while (i < xml.length && xml[i] !== '>' && xml[i] !== '/') {
345
+ while (i < xml.length && /\s/.test(xml[i]))
346
+ advanceNewline();
347
+ if (i >= xml.length || xml[i] === '>' || xml[i] === '/')
348
+ break;
349
+ const nameStart = i;
350
+ while (i < xml.length && !/[\s=\/>]/.test(xml[i]))
351
+ i++;
352
+ const attrName = xml.slice(nameStart, i);
353
+ if (attrName) {
354
+ if (seen.has(attrName)) {
355
+ errors.push({ line: tagLine, col: tagCol, message: `Duplicate attribute "${attrName}"`, severity: Severity.error });
356
+ }
357
+ seen.add(attrName);
358
+ }
359
+ while (i < xml.length && xml[i] === ' ')
360
+ i++;
361
+ if (i < xml.length && xml[i] === '=') {
362
+ i++;
363
+ while (i < xml.length && xml[i] === ' ')
364
+ i++;
365
+ if (i < xml.length && (xml[i] === '"' || xml[i] === "'"))
366
+ skipQuoted();
367
+ }
368
+ }
369
+ while (i < xml.length && xml[i] !== '>')
370
+ advanceNewline();
371
+ if (i < xml.length)
372
+ i++;
373
+ }
374
+ return errors;
375
+ }
376
+ deduplicate(errors) {
377
+ const seen = new Set();
378
+ return errors.filter(e => {
379
+ const key = dedupKey(e);
380
+ if (seen.has(key))
381
+ return false;
382
+ seen.add(key);
383
+ return true;
384
+ });
385
+ }
386
+ }
387
+ //# sourceMappingURL=SchemaValidator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SchemaValidator.js","sourceRoot":"","sources":["../../src/validation/SchemaValidator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=validation.worker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validation.worker.d.ts","sourceRoot":"","sources":["../../src/validation/validation.worker.ts"],"names":[],"mappings":""}
@@ -0,0 +1,57 @@
1
+ import { SchemaParser } from '../parser/SchemaParser';
2
+ import { SchemaValidator } from './SchemaValidator';
3
+ // ─── Simple non-cryptographic hash for cache-key generation ──────────────────
4
+ function simpleHash(s) {
5
+ let h = 0;
6
+ for (let i = 0; i < s.length; i++) {
7
+ h = ((h << 5) - h + s.charCodeAt(i)) | 0;
8
+ }
9
+ return h.toString(36);
10
+ }
11
+ // ─── Parser cache keyed by path + content hash ────────────────────────────────
12
+ const parserCache = new Map();
13
+ function getParser(xsd) {
14
+ const key = `${xsd.path}:${simpleHash(xsd.value)}`;
15
+ const hit = parserCache.get(key);
16
+ if (hit)
17
+ return hit;
18
+ // Remove stale entry for this path (same path, different content)
19
+ for (const k of parserCache.keys()) {
20
+ if (k.startsWith(`${xsd.path}:`)) {
21
+ parserCache.delete(k);
22
+ break;
23
+ }
24
+ }
25
+ const parser = new SchemaParser(xsd);
26
+ parserCache.set(key, parser);
27
+ return parser;
28
+ }
29
+ // ─── ISchemaParser → ISchemaWorker adapter ─────────────────────────────────────────
30
+ function parserToWorker(xsd, parser) {
31
+ const w = {
32
+ xsd,
33
+ withNamespace: () => w,
34
+ doCompletion: () => [],
35
+ getRootElements: () => parser.getRootElements(),
36
+ getSubElements: (name, anc) => parser.getSubElements(name, anc),
37
+ getFirstSubElements: (name, wa) => parser.getFirstSubElements(name, wa),
38
+ getAttributesForElement: (name) => parser.getAttributesForElement(name),
39
+ getEnumValuesForAttribute: (elem, attr) => parser.getEnumValuesForAttribute(elem, attr),
40
+ getEnumValuesForNamedType: (type) => parser.getEnumValuesForNamedType(type),
41
+ getContentModelType: (name) => parser.getContentModelType(name),
42
+ };
43
+ return w;
44
+ }
45
+ // ─── Worker message handler ───────────────────────────────────────────────────
46
+ const validator = new SchemaValidator();
47
+ // `self` is Window in DOM context but DedicatedWorkerGlobalScope in a worker.
48
+ // Cast to the minimal shape we need to avoid requiring the webworker lib.
49
+ const workerSelf = self;
50
+ workerSelf.addEventListener('message', (event) => {
51
+ const req = event.data;
52
+ const workers = req.xsds.map(xsd => parserToWorker(xsd, getParser(xsd)));
53
+ const errors = validator.validate(req.xml, workers);
54
+ const response = { id: req.id, errors };
55
+ workerSelf.postMessage(response);
56
+ });
57
+ //# sourceMappingURL=validation.worker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validation.worker.js","sourceRoot":"","sources":["../../src/validation/validation.worker.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,49 @@
1
+ {
2
+ "name": "@adrk/mxls",
3
+ "version": "1.0.0",
4
+ "description": "Monaco XML Language Support — schema-driven autocomplete, validation, and template generation",
5
+ "license": "MIT",
6
+ "author": "Ahmet Durak",
7
+ "repository": {
8
+ "type": "git",
9
+ "url": "https://github.com/AhmetDurak/mxls.git"
10
+ },
11
+ "homepage": "https://github.com/AhmetDurak/mxls#readme",
12
+ "keywords": ["monaco", "xml", "xsd", "autocomplete", "validation", "language-server", "editor"],
13
+ "main": "dist/index.js",
14
+ "module": "dist/index.js",
15
+ "types": "dist/index.d.ts",
16
+ "exports": {
17
+ ".": {
18
+ "import": "./dist/index.js",
19
+ "require": "./dist/index.js",
20
+ "types": "./dist/index.d.ts"
21
+ }
22
+ },
23
+ "files": [
24
+ "dist",
25
+ "style.css",
26
+ "README.md"
27
+ ],
28
+ "scripts": {
29
+ "test": "vitest run",
30
+ "test:watch": "vitest",
31
+ "clear": "npx rimraf dist",
32
+ "build": "npm run clear && tsc -p tsconfig.build.json"
33
+ },
34
+ "dependencies": {
35
+ "@prettier/plugin-xml": "^3.4.2",
36
+ "@types/turndown": "^5.0.6",
37
+ "@xmldom/xmldom": "^0.9.10",
38
+ "prettier": "^3.8.3",
39
+ "ts-debounce": "^5.0.1",
40
+ "turndown": "^7.2.4"
41
+ },
42
+ "peerDependencies": {
43
+ "monaco-editor": ">=0.30.0"
44
+ },
45
+ "devDependencies": {
46
+ "typescript": "^5.0.0",
47
+ "vitest": "^2.0.0"
48
+ }
49
+ }
package/style.css ADDED
@@ -0,0 +1,17 @@
1
+ .xml-lint {
2
+ border-width: 0;
3
+ border-style: dotted;
4
+ border-bottom-width: 3px;
5
+ }
6
+
7
+ .xml-lint--fatal-error {
8
+ border-color: red;
9
+ }
10
+
11
+ .xml-lint--error {
12
+ border-color: orange;
13
+ }
14
+
15
+ .xml-lint--warning {
16
+ border-color: blue;
17
+ }