@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.
- package/LICENSE +21 -0
- package/README.md +110 -0
- package/dist/completion/CompletionBuilder.d.ts +26 -0
- package/dist/completion/CompletionBuilder.d.ts.map +1 -0
- package/dist/completion/CompletionBuilder.js +113 -0
- package/dist/completion/CompletionBuilder.js.map +1 -0
- package/dist/completion/CompletionCache.d.ts +16 -0
- package/dist/completion/CompletionCache.d.ts.map +1 -0
- package/dist/completion/CompletionCache.js +25 -0
- package/dist/completion/CompletionCache.js.map +1 -0
- package/dist/completion/NamespaceResolver.d.ts +21 -0
- package/dist/completion/NamespaceResolver.d.ts.map +1 -0
- package/dist/completion/NamespaceResolver.js +58 -0
- package/dist/completion/NamespaceResolver.js.map +1 -0
- package/dist/completion/SchemaCompleter.d.ts +23 -0
- package/dist/completion/SchemaCompleter.d.ts.map +1 -0
- package/dist/completion/SchemaCompleter.js +164 -0
- package/dist/completion/SchemaCompleter.js.map +1 -0
- package/dist/completion/TextAnalyzer.d.ts +34 -0
- package/dist/completion/TextAnalyzer.d.ts.map +1 -0
- package/dist/completion/TextAnalyzer.js +122 -0
- package/dist/completion/TextAnalyzer.js.map +1 -0
- package/dist/features/EditorPlugin.d.ts +49 -0
- package/dist/features/EditorPlugin.d.ts.map +1 -0
- package/dist/features/EditorPlugin.js +128 -0
- package/dist/features/EditorPlugin.js.map +1 -0
- package/dist/formatter/XmlFormatter.d.ts +4 -0
- package/dist/formatter/XmlFormatter.d.ts.map +1 -0
- package/dist/formatter/XmlFormatter.js +13 -0
- package/dist/formatter/XmlFormatter.js.map +1 -0
- package/dist/hover/HoverBuilder.d.ts +8 -0
- package/dist/hover/HoverBuilder.d.ts.map +1 -0
- package/dist/hover/HoverBuilder.js +27 -0
- package/dist/hover/HoverBuilder.js.map +1 -0
- package/dist/hover/SchemaHover.d.ts +12 -0
- package/dist/hover/SchemaHover.d.ts.map +1 -0
- package/dist/hover/SchemaHover.js +71 -0
- package/dist/hover/SchemaHover.js.map +1 -0
- package/dist/index.d.ts +14 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +9 -0
- package/dist/index.js.map +1 -0
- package/dist/interfaces/IMonacoApi.d.ts +39 -0
- package/dist/interfaces/IMonacoApi.d.ts.map +1 -0
- package/dist/interfaces/IMonacoApi.js +2 -0
- package/dist/interfaces/IMonacoApi.js.map +1 -0
- package/dist/interfaces/ISchemaParser.d.ts +30 -0
- package/dist/interfaces/ISchemaParser.d.ts.map +1 -0
- package/dist/interfaces/ISchemaParser.js +2 -0
- package/dist/interfaces/ISchemaParser.js.map +1 -0
- package/dist/interfaces/ISchemaRegistry.d.ts +46 -0
- package/dist/interfaces/ISchemaRegistry.d.ts.map +1 -0
- package/dist/interfaces/ISchemaRegistry.js +2 -0
- package/dist/interfaces/ISchemaRegistry.js.map +1 -0
- package/dist/interfaces/ISchemaWorker.d.ts +25 -0
- package/dist/interfaces/ISchemaWorker.d.ts.map +1 -0
- package/dist/interfaces/ISchemaWorker.js +2 -0
- package/dist/interfaces/ISchemaWorker.js.map +1 -0
- package/dist/manager/SchemaRegistry.d.ts +24 -0
- package/dist/manager/SchemaRegistry.d.ts.map +1 -0
- package/dist/manager/SchemaRegistry.js +84 -0
- package/dist/manager/SchemaRegistry.js.map +1 -0
- package/dist/manager/SchemaWorker.d.ts +25 -0
- package/dist/manager/SchemaWorker.d.ts.map +1 -0
- package/dist/manager/SchemaWorker.js +70 -0
- package/dist/manager/SchemaWorker.js.map +1 -0
- package/dist/parser/SchemaIndex.d.ts +54 -0
- package/dist/parser/SchemaIndex.d.ts.map +1 -0
- package/dist/parser/SchemaIndex.js +149 -0
- package/dist/parser/SchemaIndex.js.map +1 -0
- package/dist/parser/SchemaParser.d.ts +23 -0
- package/dist/parser/SchemaParser.d.ts.map +1 -0
- package/dist/parser/SchemaParser.js +44 -0
- package/dist/parser/SchemaParser.js.map +1 -0
- package/dist/parser/SchemaQuery.d.ts +38 -0
- package/dist/parser/SchemaQuery.d.ts.map +1 -0
- package/dist/parser/SchemaQuery.js +364 -0
- package/dist/parser/SchemaQuery.js.map +1 -0
- package/dist/template/TemplateBuilder.d.ts +18 -0
- package/dist/template/TemplateBuilder.d.ts.map +1 -0
- package/dist/template/TemplateBuilder.js +52 -0
- package/dist/template/TemplateBuilder.js.map +1 -0
- package/dist/types.d.ts +81 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +27 -0
- package/dist/types.js.map +1 -0
- package/dist/utils/Logger.d.ts +17 -0
- package/dist/utils/Logger.d.ts.map +1 -0
- package/dist/utils/Logger.js +41 -0
- package/dist/utils/Logger.js.map +1 -0
- package/dist/utils/XmlTextUtils.d.ts +20 -0
- package/dist/utils/XmlTextUtils.d.ts.map +1 -0
- package/dist/utils/XmlTextUtils.js +85 -0
- package/dist/utils/XmlTextUtils.js.map +1 -0
- package/dist/validation/DecorationMapper.d.ts +15 -0
- package/dist/validation/DecorationMapper.d.ts.map +1 -0
- package/dist/validation/DecorationMapper.js +59 -0
- package/dist/validation/DecorationMapper.js.map +1 -0
- package/dist/validation/SchemaDecorator.d.ts +26 -0
- package/dist/validation/SchemaDecorator.d.ts.map +1 -0
- package/dist/validation/SchemaDecorator.js +50 -0
- package/dist/validation/SchemaDecorator.js.map +1 -0
- package/dist/validation/SchemaValidator.d.ts +13 -0
- package/dist/validation/SchemaValidator.d.ts.map +1 -0
- package/dist/validation/SchemaValidator.js +387 -0
- package/dist/validation/SchemaValidator.js.map +1 -0
- package/dist/validation/validation.worker.d.ts +2 -0
- package/dist/validation/validation.worker.d.ts.map +1 -0
- package/dist/validation/validation.worker.js +57 -0
- package/dist/validation/validation.worker.js.map +1 -0
- package/package.json +49 -0
- package/style.css +17 -0
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import type { ContentModelType, DocumentNode } from '../types';
|
|
2
|
+
/**
|
|
3
|
+
* Read-only schema query contract. Implemented by SchemaParser; consumed by
|
|
4
|
+
* SchemaWorker and TemplateBuilder. No Monaco dependency — fully testable in Node.
|
|
5
|
+
*/
|
|
6
|
+
export interface ISchemaParser {
|
|
7
|
+
/** Top-level xs:element declarations (valid XML root elements). */
|
|
8
|
+
getRootElements(): DocumentNode[];
|
|
9
|
+
/**
|
|
10
|
+
* All direct child elements allowed under `elementName`.
|
|
11
|
+
* When `ancestorChain` is provided the result is context-aware: the chain
|
|
12
|
+
* is walked top-down to resolve the exact type of `elementName` before
|
|
13
|
+
* collecting children.
|
|
14
|
+
*/
|
|
15
|
+
getSubElements(elementName: string, ancestorChain?: string[]): DocumentNode[];
|
|
16
|
+
/**
|
|
17
|
+
* For template generation: returns sequence members in full and only the
|
|
18
|
+
* first branch of each xs:choice.
|
|
19
|
+
*/
|
|
20
|
+
getFirstSubElements(elementName: string, withAttributes: boolean): DocumentNode[];
|
|
21
|
+
/** xs:attribute declarations for `elementName`. */
|
|
22
|
+
getAttributesForElement(elementName: string): DocumentNode[];
|
|
23
|
+
/** Allowed enum values for a specific attribute on `elementName`. */
|
|
24
|
+
getEnumValuesForAttribute(elementName: string, attrName: string): string[];
|
|
25
|
+
/** Allowed enum values looked up by the named simpleType directly. */
|
|
26
|
+
getEnumValuesForNamedType(typeName: string): string[];
|
|
27
|
+
/** sequence | choice | all | simpleContent, or null when unknown. */
|
|
28
|
+
getContentModelType(elementName: string): ContentModelType | null;
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=ISchemaParser.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ISchemaParser.d.ts","sourceRoot":"","sources":["../../src/interfaces/ISchemaParser.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,UAAU,CAAA;AAE9D;;;GAGG;AACH,MAAM,WAAW,aAAa;IAC1B,mEAAmE;IACnE,eAAe,IAAI,YAAY,EAAE,CAAA;IAEjC;;;;;OAKG;IACH,cAAc,CAAC,WAAW,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,MAAM,EAAE,GAAG,YAAY,EAAE,CAAA;IAE7E;;;OAGG;IACH,mBAAmB,CAAC,WAAW,EAAE,MAAM,EAAE,cAAc,EAAE,OAAO,GAAG,YAAY,EAAE,CAAA;IAEjF,mDAAmD;IACnD,uBAAuB,CAAC,WAAW,EAAE,MAAM,GAAG,YAAY,EAAE,CAAA;IAE5D,qEAAqE;IACrE,yBAAyB,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE,CAAA;IAE1E,sEAAsE;IACtE,yBAAyB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE,CAAA;IAErD,qEAAqE;IACrE,mBAAmB,CAAC,WAAW,EAAE,MAAM,GAAG,gBAAgB,GAAG,IAAI,CAAA;CACpE"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ISchemaParser.js","sourceRoot":"","sources":["../../src/interfaces/ISchemaParser.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import type { IXsd } from '../types';
|
|
2
|
+
import type { ISchemaWorker } from './ISchemaWorker';
|
|
3
|
+
/**
|
|
4
|
+
* Schema registry contract. Holds the set of registered XSD workers and
|
|
5
|
+
* answers lookup queries. No editor reference — the root tag is passed in
|
|
6
|
+
* by EditorPlugin when needed.
|
|
7
|
+
*/
|
|
8
|
+
export interface ISchemaRegistry {
|
|
9
|
+
/** Register or replace a schema. */
|
|
10
|
+
set(xsd: IXsd): void;
|
|
11
|
+
/** Convenience: delete then re-set. */
|
|
12
|
+
update(xsd: IXsd): void;
|
|
13
|
+
/** Remove a schema by path. Returns true if it existed. */
|
|
14
|
+
delete(path: string): boolean;
|
|
15
|
+
/** Exact-path lookup. */
|
|
16
|
+
get(path: string): ISchemaWorker | undefined;
|
|
17
|
+
has(path: string): boolean;
|
|
18
|
+
/**
|
|
19
|
+
* Non-strict lookup: returns the first worker whose `xsd.nonStrictPath`
|
|
20
|
+
* flag is set and whose `xsd.path` is a substring of `path`.
|
|
21
|
+
*/
|
|
22
|
+
getNonStrict(path: string): ISchemaWorker | undefined;
|
|
23
|
+
/**
|
|
24
|
+
* Returns all workers that should always be consulted regardless of
|
|
25
|
+
* namespace matching (alwaysInclude) plus those whose includeIfRootTag
|
|
26
|
+
* matches the current root tag.
|
|
27
|
+
*/
|
|
28
|
+
getAlwaysIncludedWorkers(rootTag: string | undefined): ISchemaWorker[];
|
|
29
|
+
getXsdList(): IXsd[];
|
|
30
|
+
getAllWorkers(): ISchemaWorker[];
|
|
31
|
+
/**
|
|
32
|
+
* Find the best worker that declares `elementName` as a known element
|
|
33
|
+
* under `parentName` (or as a root element when `parentName` is null).
|
|
34
|
+
*/
|
|
35
|
+
getWorkerForElement(elementName: string, parentName: string | null): ISchemaWorker | undefined;
|
|
36
|
+
/**
|
|
37
|
+
* Inject runtime enum values for a specific element+attribute pair.
|
|
38
|
+
* These supplement (and take priority over) any XSD-defined enumerations.
|
|
39
|
+
* Call this to expose dynamic data (e.g. live signal lists) as attribute
|
|
40
|
+
* value completions without regenerating the XSD.
|
|
41
|
+
*/
|
|
42
|
+
setDynamicEnumValues(elementName: string, attrName: string, values: string[]): void;
|
|
43
|
+
/** Retrieve previously injected dynamic enum values, or [] if none. */
|
|
44
|
+
getDynamicEnumValues(elementName: string, attrName: string): string[];
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=ISchemaRegistry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ISchemaRegistry.d.ts","sourceRoot":"","sources":["../../src/interfaces/ISchemaRegistry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,UAAU,CAAA;AACpC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAEpD;;;;GAIG;AACH,MAAM,WAAW,eAAe;IAC5B,oCAAoC;IACpC,GAAG,CAAC,GAAG,EAAE,IAAI,GAAG,IAAI,CAAA;IAEpB,uCAAuC;IACvC,MAAM,CAAC,GAAG,EAAE,IAAI,GAAG,IAAI,CAAA;IAEvB,2DAA2D;IAC3D,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAA;IAE7B,yBAAyB;IACzB,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS,CAAA;IAE5C,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAA;IAE1B;;;OAGG;IACH,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS,CAAA;IAErD;;;;OAIG;IACH,wBAAwB,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,GAAG,aAAa,EAAE,CAAA;IAEtE,UAAU,IAAI,IAAI,EAAE,CAAA;IACpB,aAAa,IAAI,aAAa,EAAE,CAAA;IAEhC;;;OAGG;IACH,mBAAmB,CACf,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,MAAM,GAAG,IAAI,GAC1B,aAAa,GAAG,SAAS,CAAA;IAE5B;;;;;OAKG;IACH,oBAAoB,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,CAAA;IAEnF,uEAAuE;IACvE,oBAAoB,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE,CAAA;CACxE"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ISchemaRegistry.js","sourceRoot":"","sources":["../../src/interfaces/ISchemaRegistry.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import type { CompletionType, ContentModelType, DocumentNode, ICompletion, IXsd } from '../types';
|
|
2
|
+
/**
|
|
3
|
+
* Per-schema worker contract. Each registered XSD gets one ISchemaWorker.
|
|
4
|
+
* Provides both the raw schema query API (delegating to ISchemaParser) and the
|
|
5
|
+
* completion API used by SchemaCompleter.
|
|
6
|
+
*/
|
|
7
|
+
export interface ISchemaWorker {
|
|
8
|
+
/** The XSD config this worker was built from. */
|
|
9
|
+
readonly xsd: IXsd;
|
|
10
|
+
/**
|
|
11
|
+
* Returns a copy of this worker bound to the given XML namespace prefix.
|
|
12
|
+
* Completions produced by `doCompletion` will be prefixed accordingly.
|
|
13
|
+
*/
|
|
14
|
+
withNamespace(namespace: string): ISchemaWorker;
|
|
15
|
+
/** Produce completions for the given context. */
|
|
16
|
+
doCompletion(type: CompletionType, parentTag: string, ancestorChain?: string[]): ICompletion[];
|
|
17
|
+
getRootElements(): DocumentNode[];
|
|
18
|
+
getSubElements(parentTag: string, ancestorChain?: string[]): DocumentNode[];
|
|
19
|
+
getFirstSubElements(parentTag: string, withAttributes: boolean): DocumentNode[];
|
|
20
|
+
getAttributesForElement(elementName: string): DocumentNode[];
|
|
21
|
+
getEnumValuesForAttribute(elementName: string, attrName: string): string[];
|
|
22
|
+
getEnumValuesForNamedType(typeName: string): string[];
|
|
23
|
+
getContentModelType(elementName: string): ContentModelType | null;
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=ISchemaWorker.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ISchemaWorker.d.ts","sourceRoot":"","sources":["../../src/interfaces/ISchemaWorker.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,gBAAgB,EAAE,YAAY,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,UAAU,CAAA;AAEjG;;;;GAIG;AACH,MAAM,WAAW,aAAa;IAC1B,iDAAiD;IACjD,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAA;IAElB;;;OAGG;IACH,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,aAAa,CAAA;IAE/C,iDAAiD;IACjD,YAAY,CACR,IAAI,EAAE,cAAc,EACpB,SAAS,EAAE,MAAM,EACjB,aAAa,CAAC,EAAE,MAAM,EAAE,GACzB,WAAW,EAAE,CAAA;IAEhB,eAAe,IAAI,YAAY,EAAE,CAAA;IACjC,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,MAAM,EAAE,GAAG,YAAY,EAAE,CAAA;IAC3E,mBAAmB,CAAC,SAAS,EAAE,MAAM,EAAE,cAAc,EAAE,OAAO,GAAG,YAAY,EAAE,CAAA;IAC/E,uBAAuB,CAAC,WAAW,EAAE,MAAM,GAAG,YAAY,EAAE,CAAA;IAC5D,yBAAyB,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE,CAAA;IAC1E,yBAAyB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE,CAAA;IACrD,mBAAmB,CAAC,WAAW,EAAE,MAAM,GAAG,gBAAgB,GAAG,IAAI,CAAA;CACpE"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ISchemaWorker.js","sourceRoot":"","sources":["../../src/interfaces/ISchemaWorker.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { IXsd } from '../types';
|
|
2
|
+
import type { ISchemaWorker } from '../interfaces/ISchemaWorker';
|
|
3
|
+
import type { ISchemaRegistry } from '../interfaces/ISchemaRegistry';
|
|
4
|
+
import type { IMonacoApi } from '../interfaces/IMonacoApi';
|
|
5
|
+
/** Schema registry — no editor reference. */
|
|
6
|
+
export declare class SchemaRegistry implements ISchemaRegistry {
|
|
7
|
+
private readonly monacoApi;
|
|
8
|
+
private readonly workers;
|
|
9
|
+
private readonly dynamicEnums;
|
|
10
|
+
constructor(monacoApi: IMonacoApi);
|
|
11
|
+
set(xsd: IXsd): void;
|
|
12
|
+
update(xsd: IXsd): void;
|
|
13
|
+
delete(path: string): boolean;
|
|
14
|
+
get(path: string): ISchemaWorker | undefined;
|
|
15
|
+
has(path: string): boolean;
|
|
16
|
+
getNonStrict(path: string): ISchemaWorker | undefined;
|
|
17
|
+
getAlwaysIncludedWorkers(rootTag: string | undefined): ISchemaWorker[];
|
|
18
|
+
getXsdList(): IXsd[];
|
|
19
|
+
getAllWorkers(): ISchemaWorker[];
|
|
20
|
+
getWorkerForElement(elementName: string, parentName: string | null): ISchemaWorker | undefined;
|
|
21
|
+
setDynamicEnumValues(elementName: string, attrName: string, values: string[]): void;
|
|
22
|
+
getDynamicEnumValues(elementName: string, attrName: string): string[];
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=SchemaRegistry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SchemaRegistry.d.ts","sourceRoot":"","sources":["../../src/manager/SchemaRegistry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,UAAU,CAAA;AACpC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAA;AAChE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAA;AACpE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAA;AAI1D,6CAA6C;AAC7C,qBAAa,cAAe,YAAW,eAAe;IAItC,OAAO,CAAC,QAAQ,CAAC,SAAS;IAHtC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAmC;IAC3D,OAAO,CAAC,QAAQ,CAAC,YAAY,CAA2C;gBAE3C,SAAS,EAAE,UAAU;IAElD,GAAG,CAAC,GAAG,EAAE,IAAI,GAAG,IAAI;IAKpB,MAAM,CAAC,GAAG,EAAE,IAAI,GAAG,IAAI;IAMvB,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAM7B,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS;IAI5C,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAI1B,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS;IASrD,wBAAwB,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,GAAG,aAAa,EAAE;IAYtE,UAAU,IAAI,IAAI,EAAE;IAIpB,aAAa,IAAI,aAAa,EAAE;IAIhC,mBAAmB,CAAC,WAAW,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI,GAAG,aAAa,GAAG,SAAS;IAe9F,oBAAoB,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI;IASnF,oBAAoB,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE;CAGxE"}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import { SchemaWorker } from './SchemaWorker';
|
|
2
|
+
import { logger } from '../utils/Logger';
|
|
3
|
+
/** Schema registry — no editor reference. */
|
|
4
|
+
export class SchemaRegistry {
|
|
5
|
+
monacoApi;
|
|
6
|
+
workers = new Map();
|
|
7
|
+
dynamicEnums = new Map();
|
|
8
|
+
constructor(monacoApi) {
|
|
9
|
+
this.monacoApi = monacoApi;
|
|
10
|
+
}
|
|
11
|
+
set(xsd) {
|
|
12
|
+
this.workers.set(xsd.path, SchemaWorker.create(xsd, this.monacoApi));
|
|
13
|
+
logger.info(`schema registered: ${xsd.path}`);
|
|
14
|
+
}
|
|
15
|
+
update(xsd) {
|
|
16
|
+
this.workers.delete(xsd.path);
|
|
17
|
+
this.set(xsd);
|
|
18
|
+
logger.info(`schema updated: ${xsd.path}`);
|
|
19
|
+
}
|
|
20
|
+
delete(path) {
|
|
21
|
+
const removed = this.workers.delete(path);
|
|
22
|
+
logger.info(`schema ${removed ? 'removed' : 'not found (delete):'} ${path}`);
|
|
23
|
+
return removed;
|
|
24
|
+
}
|
|
25
|
+
get(path) {
|
|
26
|
+
return this.workers.get(path);
|
|
27
|
+
}
|
|
28
|
+
has(path) {
|
|
29
|
+
return this.workers.has(path);
|
|
30
|
+
}
|
|
31
|
+
getNonStrict(path) {
|
|
32
|
+
for (const worker of this.workers.values()) {
|
|
33
|
+
if (worker.xsd.nonStrictPath && path.includes(worker.xsd.path)) {
|
|
34
|
+
return worker;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
return undefined;
|
|
38
|
+
}
|
|
39
|
+
getAlwaysIncludedWorkers(rootTag) {
|
|
40
|
+
const result = [];
|
|
41
|
+
for (const worker of this.workers.values()) {
|
|
42
|
+
if (worker.xsd.alwaysInclude) {
|
|
43
|
+
result.push(worker);
|
|
44
|
+
}
|
|
45
|
+
else if (rootTag && worker.xsd.includeIfRootTag?.includes(rootTag)) {
|
|
46
|
+
result.push(worker);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
return result;
|
|
50
|
+
}
|
|
51
|
+
getXsdList() {
|
|
52
|
+
return [...this.workers.values()].map(w => w.xsd);
|
|
53
|
+
}
|
|
54
|
+
getAllWorkers() {
|
|
55
|
+
return [...this.workers.values()];
|
|
56
|
+
}
|
|
57
|
+
getWorkerForElement(elementName, parentName) {
|
|
58
|
+
for (const worker of this.workers.values()) {
|
|
59
|
+
if (parentName === null) {
|
|
60
|
+
if (worker.getRootElements().some(n => n.name === elementName)) {
|
|
61
|
+
return worker;
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
else {
|
|
65
|
+
if (worker.getSubElements(parentName).some(n => n.name === elementName)) {
|
|
66
|
+
return worker;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
return undefined;
|
|
71
|
+
}
|
|
72
|
+
setDynamicEnumValues(elementName, attrName, values) {
|
|
73
|
+
let attrMap = this.dynamicEnums.get(elementName);
|
|
74
|
+
if (!attrMap) {
|
|
75
|
+
attrMap = new Map();
|
|
76
|
+
this.dynamicEnums.set(elementName, attrMap);
|
|
77
|
+
}
|
|
78
|
+
attrMap.set(attrName, values);
|
|
79
|
+
}
|
|
80
|
+
getDynamicEnumValues(elementName, attrName) {
|
|
81
|
+
return this.dynamicEnums.get(elementName)?.get(attrName) ?? [];
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
//# sourceMappingURL=SchemaRegistry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SchemaRegistry.js","sourceRoot":"","sources":["../../src/manager/SchemaRegistry.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { CompletionType, type ContentModelType, type DocumentNode, type ICompletion, type IXsd } from '../types';
|
|
2
|
+
import type { ISchemaWorker } from '../interfaces/ISchemaWorker';
|
|
3
|
+
import type { IMonacoApi } from '../interfaces/IMonacoApi';
|
|
4
|
+
/**
|
|
5
|
+
* Per-schema facade. Wraps SchemaParser + CompletionBuilder and implements ISchemaWorker.
|
|
6
|
+
* Use SchemaWorker.create() to instantiate; withNamespace() clones with a prefix bound.
|
|
7
|
+
*/
|
|
8
|
+
export declare class SchemaWorker implements ISchemaWorker {
|
|
9
|
+
private readonly parser;
|
|
10
|
+
private readonly builder;
|
|
11
|
+
private readonly ns;
|
|
12
|
+
readonly xsd: IXsd;
|
|
13
|
+
private constructor();
|
|
14
|
+
static create(xsd: IXsd, monacoApi: IMonacoApi): SchemaWorker;
|
|
15
|
+
withNamespace(namespace: string): ISchemaWorker;
|
|
16
|
+
doCompletion(type: CompletionType, parentTag: string, ancestorChain?: string[]): ICompletion[];
|
|
17
|
+
getRootElements(): DocumentNode[];
|
|
18
|
+
getSubElements(parentTag: string, ancestorChain?: string[]): DocumentNode[];
|
|
19
|
+
getFirstSubElements(parentTag: string, withAttributes: boolean): DocumentNode[];
|
|
20
|
+
getAttributesForElement(elementName: string): DocumentNode[];
|
|
21
|
+
getEnumValuesForAttribute(elementName: string, attrName: string): string[];
|
|
22
|
+
getEnumValuesForNamedType(typeName: string): string[];
|
|
23
|
+
getContentModelType(elementName: string): ContentModelType | null;
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=SchemaWorker.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SchemaWorker.d.ts","sourceRoot":"","sources":["../../src/manager/SchemaWorker.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,KAAK,gBAAgB,EAAE,KAAK,YAAY,EAAE,KAAK,WAAW,EAAE,KAAK,IAAI,EAAE,MAAM,UAAU,CAAA;AAChH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAA;AAChE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAA;AAI1D;;;GAGG;AACH,qBAAa,YAAa,YAAW,aAAa;IAK1C,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,EAAE;IANvB,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAA;IAElB,OAAO;IASP,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,IAAI,EAAE,SAAS,EAAE,UAAU,GAAG,YAAY;IAI7D,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,aAAa;IAI/C,YAAY,CACR,IAAI,EAAE,cAAc,EACpB,SAAS,EAAE,MAAM,EACjB,aAAa,CAAC,EAAE,MAAM,EAAE,GACzB,WAAW,EAAE;IAwBhB,eAAe,IAAI,YAAY,EAAE;IAIjC,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,MAAM,EAAE,GAAG,YAAY,EAAE;IAI3E,mBAAmB,CAAC,SAAS,EAAE,MAAM,EAAE,cAAc,EAAE,OAAO,GAAG,YAAY,EAAE;IAI/E,uBAAuB,CAAC,WAAW,EAAE,MAAM,GAAG,YAAY,EAAE;IAI5D,yBAAyB,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE;IAI1E,yBAAyB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE;IAIrD,mBAAmB,CAAC,WAAW,EAAE,MAAM,GAAG,gBAAgB,GAAG,IAAI;CAGpE"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import { CompletionType } from '../types';
|
|
2
|
+
import { SchemaParser } from '../parser/SchemaParser';
|
|
3
|
+
import { CompletionBuilder } from '../completion/CompletionBuilder';
|
|
4
|
+
/**
|
|
5
|
+
* Per-schema facade. Wraps SchemaParser + CompletionBuilder and implements ISchemaWorker.
|
|
6
|
+
* Use SchemaWorker.create() to instantiate; withNamespace() clones with a prefix bound.
|
|
7
|
+
*/
|
|
8
|
+
export class SchemaWorker {
|
|
9
|
+
parser;
|
|
10
|
+
builder;
|
|
11
|
+
ns;
|
|
12
|
+
xsd;
|
|
13
|
+
constructor(xsd, parser, builder, ns) {
|
|
14
|
+
this.parser = parser;
|
|
15
|
+
this.builder = builder;
|
|
16
|
+
this.ns = ns;
|
|
17
|
+
this.xsd = xsd;
|
|
18
|
+
}
|
|
19
|
+
static create(xsd, monacoApi) {
|
|
20
|
+
return new SchemaWorker(xsd, new SchemaParser(xsd), new CompletionBuilder(monacoApi), undefined);
|
|
21
|
+
}
|
|
22
|
+
withNamespace(namespace) {
|
|
23
|
+
return new SchemaWorker(this.xsd, this.parser, this.builder, namespace);
|
|
24
|
+
}
|
|
25
|
+
doCompletion(type, parentTag, ancestorChain) {
|
|
26
|
+
switch (type) {
|
|
27
|
+
case CompletionType.element: {
|
|
28
|
+
const nodes = parentTag
|
|
29
|
+
? this.parser.getSubElements(parentTag, ancestorChain)
|
|
30
|
+
: this.parser.getRootElements();
|
|
31
|
+
return this.builder.buildElements(nodes, this.ns, false, false);
|
|
32
|
+
}
|
|
33
|
+
case CompletionType.incompleteElement: {
|
|
34
|
+
const nodes = parentTag
|
|
35
|
+
? this.parser.getSubElements(parentTag, ancestorChain)
|
|
36
|
+
: this.parser.getRootElements();
|
|
37
|
+
return this.builder.buildElements(nodes, this.ns, true, true);
|
|
38
|
+
}
|
|
39
|
+
case CompletionType.attribute:
|
|
40
|
+
case CompletionType.incompleteAttribute: {
|
|
41
|
+
const nodes = this.parser.getAttributesForElement(parentTag);
|
|
42
|
+
return this.builder.buildAttributes(nodes, type === CompletionType.incompleteAttribute);
|
|
43
|
+
}
|
|
44
|
+
default:
|
|
45
|
+
return [];
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
getRootElements() {
|
|
49
|
+
return this.parser.getRootElements();
|
|
50
|
+
}
|
|
51
|
+
getSubElements(parentTag, ancestorChain) {
|
|
52
|
+
return this.parser.getSubElements(parentTag, ancestorChain);
|
|
53
|
+
}
|
|
54
|
+
getFirstSubElements(parentTag, withAttributes) {
|
|
55
|
+
return this.parser.getFirstSubElements(parentTag, withAttributes);
|
|
56
|
+
}
|
|
57
|
+
getAttributesForElement(elementName) {
|
|
58
|
+
return this.parser.getAttributesForElement(elementName);
|
|
59
|
+
}
|
|
60
|
+
getEnumValuesForAttribute(elementName, attrName) {
|
|
61
|
+
return this.parser.getEnumValuesForAttribute(elementName, attrName);
|
|
62
|
+
}
|
|
63
|
+
getEnumValuesForNamedType(typeName) {
|
|
64
|
+
return this.parser.getEnumValuesForNamedType(typeName);
|
|
65
|
+
}
|
|
66
|
+
getContentModelType(elementName) {
|
|
67
|
+
return this.parser.getContentModelType(elementName);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
//# sourceMappingURL=SchemaWorker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SchemaWorker.js","sourceRoot":"","sources":["../../src/manager/SchemaWorker.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAyE,MAAM,UAAU,CAAA;AAGhH,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAA;AACrD,OAAO,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAA;AAEnE;;;GAGG;AACH,MAAM,OAAO,YAAY;IAKA;IACA;IACA;IANZ,GAAG,CAAM;IAElB,YACI,GAAS,EACQ,MAAoB,EACpB,OAA0B,EAC1B,EAAsB;QAFtB,WAAM,GAAN,MAAM,CAAc;QACpB,YAAO,GAAP,OAAO,CAAmB;QAC1B,OAAE,GAAF,EAAE,CAAoB;QAEvC,IAAI,CAAC,GAAG,GAAG,GAAG,CAAA;IAClB,CAAC;IAED,MAAM,CAAC,MAAM,CAAC,GAAS,EAAE,SAAqB;QAC1C,OAAO,IAAI,YAAY,CAAC,GAAG,EAAE,IAAI,YAAY,CAAC,GAAG,CAAC,EAAE,IAAI,iBAAiB,CAAC,SAAS,CAAC,EAAE,SAAS,CAAC,CAAA;IACpG,CAAC;IAED,aAAa,CAAC,SAAiB;QAC3B,OAAO,IAAI,YAAY,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC,CAAA;IAC3E,CAAC;IAED,YAAY,CACR,IAAoB,EACpB,SAAiB,EACjB,aAAwB;QAExB,QAAQ,IAAI,EAAE,CAAC;YACX,KAAK,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC;gBAC1B,MAAM,KAAK,GAAG,SAAS;oBACnB,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,SAAS,EAAE,aAAa,CAAC;oBACtD,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,eAAe,EAAE,CAAA;gBACnC,OAAO,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,KAAK,EAAE,IAAI,CAAC,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,CAAA;YACnE,CAAC;YACD,KAAK,cAAc,CAAC,iBAAiB,CAAC,CAAC,CAAC;gBACpC,MAAM,KAAK,GAAG,SAAS;oBACnB,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,SAAS,EAAE,aAAa,CAAC;oBACtD,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,eAAe,EAAE,CAAA;gBACnC,OAAO,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,KAAK,EAAE,IAAI,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,CAAA;YACjE,CAAC;YACD,KAAK,cAAc,CAAC,SAAS,CAAC;YAC9B,KAAK,cAAc,CAAC,mBAAmB,CAAC,CAAC,CAAC;gBACtC,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,uBAAuB,CAAC,SAAS,CAAC,CAAA;gBAC5D,OAAO,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,KAAK,EAAE,IAAI,KAAK,cAAc,CAAC,mBAAmB,CAAC,CAAA;YAC3F,CAAC;YACD;gBACI,OAAO,EAAE,CAAA;QACjB,CAAC;IACL,CAAC;IAED,eAAe;QACX,OAAO,IAAI,CAAC,MAAM,CAAC,eAAe,EAAE,CAAA;IACxC,CAAC;IAED,cAAc,CAAC,SAAiB,EAAE,aAAwB;QACtD,OAAO,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,SAAS,EAAE,aAAa,CAAC,CAAA;IAC/D,CAAC;IAED,mBAAmB,CAAC,SAAiB,EAAE,cAAuB;QAC1D,OAAO,IAAI,CAAC,MAAM,CAAC,mBAAmB,CAAC,SAAS,EAAE,cAAc,CAAC,CAAA;IACrE,CAAC;IAED,uBAAuB,CAAC,WAAmB;QACvC,OAAO,IAAI,CAAC,MAAM,CAAC,uBAAuB,CAAC,WAAW,CAAC,CAAA;IAC3D,CAAC;IAED,yBAAyB,CAAC,WAAmB,EAAE,QAAgB;QAC3D,OAAO,IAAI,CAAC,MAAM,CAAC,yBAAyB,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAA;IACvE,CAAC;IAED,yBAAyB,CAAC,QAAgB;QACtC,OAAO,IAAI,CAAC,MAAM,CAAC,yBAAyB,CAAC,QAAQ,CAAC,CAAA;IAC1D,CAAC;IAED,mBAAmB,CAAC,WAAmB;QACnC,OAAO,IAAI,CAAC,MAAM,CAAC,mBAAmB,CAAC,WAAW,CAAC,CAAA;IACvD,CAAC;CACJ"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import type { IXsd } from '../types';
|
|
2
|
+
export declare const XSD_NS = "http://www.w3.org/2001/XMLSchema";
|
|
3
|
+
/** Container node local-names that are transparent during element traversal. */
|
|
4
|
+
export declare const CONTAINER_LOCAL_NAMES: Set<string>;
|
|
5
|
+
/**
|
|
6
|
+
* Builds lookup maps from an XSD DOM at construction time.
|
|
7
|
+
* All maps are populated once and never mutated afterwards.
|
|
8
|
+
*/
|
|
9
|
+
export declare class SchemaIndex {
|
|
10
|
+
readonly doc: Document;
|
|
11
|
+
readonly xsd: IXsd;
|
|
12
|
+
/** Named xs:complexType nodes, keyed by @name.
|
|
13
|
+
* Inline anonymous types are stored under `__inline__<elementName>`. */
|
|
14
|
+
readonly complexTypeMap: Map<string, Element>;
|
|
15
|
+
/** Named xs:attributeGroup nodes, keyed by @name. */
|
|
16
|
+
readonly attributeGroupMap: Map<string, Element>;
|
|
17
|
+
/** Named xs:group nodes, keyed by @name. */
|
|
18
|
+
readonly groupMap: Map<string, Element>;
|
|
19
|
+
/** Named xs:simpleType nodes, keyed by @name. */
|
|
20
|
+
readonly simpleTypeMap: Map<string, Element>;
|
|
21
|
+
/**
|
|
22
|
+
* Primary type lookup: element name → one type name.
|
|
23
|
+
* Last-write-wins when the same element name appears more than once.
|
|
24
|
+
* Priority: @type attr > extension @base > `__inline__<name>`.
|
|
25
|
+
*/
|
|
26
|
+
readonly elementTypeMap: Map<string, string>;
|
|
27
|
+
/**
|
|
28
|
+
* Multi-value type lookup: element name → all distinct type names.
|
|
29
|
+
* Used for union fallback when context-aware resolution fails.
|
|
30
|
+
*/
|
|
31
|
+
readonly elementTypesMultiMap: Map<string, Set<string>>;
|
|
32
|
+
constructor(xsd: IXsd);
|
|
33
|
+
private buildMaps;
|
|
34
|
+
/** Finds all xs:<localName> nodes with a @name attribute and adds them to the map. */
|
|
35
|
+
private indexNamed;
|
|
36
|
+
/** Walks every xs:element in the document and populates element type maps. */
|
|
37
|
+
private indexElements;
|
|
38
|
+
private indexOneElement;
|
|
39
|
+
private addToMultiMap;
|
|
40
|
+
/**
|
|
41
|
+
* Checks whether an xs:element hosts an inline complexType that wraps a
|
|
42
|
+
* complexContent/extension, and if so returns the extension's @base value.
|
|
43
|
+
*/
|
|
44
|
+
private readExtensionBase;
|
|
45
|
+
}
|
|
46
|
+
/** Returns the first direct child Element with a matching localName, or null. */
|
|
47
|
+
export declare function firstChildByLocalName(parent: Element, localName: string): Element | null;
|
|
48
|
+
/** Returns all direct child Elements of a node. */
|
|
49
|
+
export declare function directChildElements(parent: Element): Element[];
|
|
50
|
+
/** Returns all direct child Elements with a given localName. */
|
|
51
|
+
export declare function childrenByLocalName(parent: Element, localName: string): Element[];
|
|
52
|
+
/** Strips an XML namespace prefix ("xs:string" → "string"). */
|
|
53
|
+
export declare function stripNsPrefix(value: string): string;
|
|
54
|
+
//# sourceMappingURL=SchemaIndex.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SchemaIndex.d.ts","sourceRoot":"","sources":["../../src/parser/SchemaIndex.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,UAAU,CAAA;AAEpC,eAAO,MAAM,MAAM,qCAAqC,CAAA;AAExD,gFAAgF;AAChF,eAAO,MAAM,qBAAqB,aAMhC,CAAA;AAEF;;;GAGG;AACH,qBAAa,WAAW;IACpB,QAAQ,CAAC,GAAG,EAAE,QAAQ,CAAA;IACtB,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAA;IAElB;6EACyE;IACzE,QAAQ,CAAC,cAAc,uBAA6B;IAEpD,qDAAqD;IACrD,QAAQ,CAAC,iBAAiB,uBAA6B;IAEvD,4CAA4C;IAC5C,QAAQ,CAAC,QAAQ,uBAA6B;IAE9C,iDAAiD;IACjD,QAAQ,CAAC,aAAa,uBAA6B;IAEnD;;;;OAIG;IACH,QAAQ,CAAC,cAAc,sBAA4B;IAEnD;;;OAGG;IACH,QAAQ,CAAC,oBAAoB,2BAAiC;gBAElD,GAAG,EAAE,IAAI;IAWrB,OAAO,CAAC,SAAS;IAQjB,sFAAsF;IACtF,OAAO,CAAC,UAAU;IASlB,8EAA8E;IAC9E,OAAO,CAAC,aAAa;IAOrB,OAAO,CAAC,eAAe;IAgCvB,OAAO,CAAC,aAAa;IASrB;;;OAGG;IACH,OAAO,CAAC,iBAAiB;CAQ5B;AAID,iFAAiF;AACjF,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,GAAG,IAAI,CAMxF;AAED,mDAAmD;AACnD,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO,EAAE,CAO9D;AAED,gEAAgE;AAChE,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,EAAE,CAEjF;AAED,+DAA+D;AAC/D,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAGnD"}
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
import { DOMParser, MIME_TYPE } from '@xmldom/xmldom';
|
|
2
|
+
export const XSD_NS = 'http://www.w3.org/2001/XMLSchema';
|
|
3
|
+
/** Container node local-names that are transparent during element traversal. */
|
|
4
|
+
export const CONTAINER_LOCAL_NAMES = new Set([
|
|
5
|
+
'sequence',
|
|
6
|
+
'all',
|
|
7
|
+
'complexContent',
|
|
8
|
+
'extension',
|
|
9
|
+
'restriction',
|
|
10
|
+
]);
|
|
11
|
+
/**
|
|
12
|
+
* Builds lookup maps from an XSD DOM at construction time.
|
|
13
|
+
* All maps are populated once and never mutated afterwards.
|
|
14
|
+
*/
|
|
15
|
+
export class SchemaIndex {
|
|
16
|
+
doc;
|
|
17
|
+
xsd;
|
|
18
|
+
/** Named xs:complexType nodes, keyed by @name.
|
|
19
|
+
* Inline anonymous types are stored under `__inline__<elementName>`. */
|
|
20
|
+
complexTypeMap = new Map();
|
|
21
|
+
/** Named xs:attributeGroup nodes, keyed by @name. */
|
|
22
|
+
attributeGroupMap = new Map();
|
|
23
|
+
/** Named xs:group nodes, keyed by @name. */
|
|
24
|
+
groupMap = new Map();
|
|
25
|
+
/** Named xs:simpleType nodes, keyed by @name. */
|
|
26
|
+
simpleTypeMap = new Map();
|
|
27
|
+
/**
|
|
28
|
+
* Primary type lookup: element name → one type name.
|
|
29
|
+
* Last-write-wins when the same element name appears more than once.
|
|
30
|
+
* Priority: @type attr > extension @base > `__inline__<name>`.
|
|
31
|
+
*/
|
|
32
|
+
elementTypeMap = new Map();
|
|
33
|
+
/**
|
|
34
|
+
* Multi-value type lookup: element name → all distinct type names.
|
|
35
|
+
* Used for union fallback when context-aware resolution fails.
|
|
36
|
+
*/
|
|
37
|
+
elementTypesMultiMap = new Map();
|
|
38
|
+
constructor(xsd) {
|
|
39
|
+
this.xsd = xsd;
|
|
40
|
+
this.doc = new DOMParser().parseFromString(xsd.value.trim(), MIME_TYPE.XML_TEXT);
|
|
41
|
+
this.buildMaps();
|
|
42
|
+
}
|
|
43
|
+
// ─── private helpers ──────────────────────────────────────────────────────
|
|
44
|
+
buildMaps() {
|
|
45
|
+
this.indexNamed('complexType', this.complexTypeMap);
|
|
46
|
+
this.indexNamed('attributeGroup', this.attributeGroupMap);
|
|
47
|
+
this.indexNamed('group', this.groupMap);
|
|
48
|
+
this.indexNamed('simpleType', this.simpleTypeMap);
|
|
49
|
+
this.indexElements();
|
|
50
|
+
}
|
|
51
|
+
/** Finds all xs:<localName> nodes with a @name attribute and adds them to the map. */
|
|
52
|
+
indexNamed(localName, map) {
|
|
53
|
+
const nodes = this.doc.getElementsByTagNameNS(XSD_NS, localName);
|
|
54
|
+
for (let i = 0; i < nodes.length; i++) {
|
|
55
|
+
const el = nodes[i];
|
|
56
|
+
const name = el.getAttribute('name');
|
|
57
|
+
if (name)
|
|
58
|
+
map.set(name, el);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
/** Walks every xs:element in the document and populates element type maps. */
|
|
62
|
+
indexElements() {
|
|
63
|
+
const nodes = this.doc.getElementsByTagNameNS(XSD_NS, 'element');
|
|
64
|
+
for (let i = 0; i < nodes.length; i++) {
|
|
65
|
+
this.indexOneElement(nodes[i]);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
indexOneElement(el) {
|
|
69
|
+
const name = el.getAttribute('name');
|
|
70
|
+
if (!name)
|
|
71
|
+
return;
|
|
72
|
+
// Priority 1: explicit @type attribute
|
|
73
|
+
const typeAttr = el.getAttribute('type');
|
|
74
|
+
if (typeAttr) {
|
|
75
|
+
const typeName = stripNsPrefix(typeAttr);
|
|
76
|
+
this.elementTypeMap.set(name, typeName);
|
|
77
|
+
this.addToMultiMap(name, typeName);
|
|
78
|
+
return;
|
|
79
|
+
}
|
|
80
|
+
// Priority 2: extension @base (inline complexType that extends another type)
|
|
81
|
+
const extensionBase = this.readExtensionBase(el);
|
|
82
|
+
if (extensionBase) {
|
|
83
|
+
const typeName = stripNsPrefix(extensionBase);
|
|
84
|
+
this.elementTypeMap.set(name, typeName);
|
|
85
|
+
this.addToMultiMap(name, typeName);
|
|
86
|
+
return;
|
|
87
|
+
}
|
|
88
|
+
// Priority 3: anonymous inline complexType
|
|
89
|
+
const inlineCT = firstChildByLocalName(el, 'complexType');
|
|
90
|
+
if (inlineCT && !this.elementTypeMap.has(name)) {
|
|
91
|
+
const key = `__inline__${name}`;
|
|
92
|
+
this.complexTypeMap.set(key, inlineCT);
|
|
93
|
+
this.elementTypeMap.set(name, key);
|
|
94
|
+
this.addToMultiMap(name, key);
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
addToMultiMap(name, typeName) {
|
|
98
|
+
let set = this.elementTypesMultiMap.get(name);
|
|
99
|
+
if (!set) {
|
|
100
|
+
set = new Set();
|
|
101
|
+
this.elementTypesMultiMap.set(name, set);
|
|
102
|
+
}
|
|
103
|
+
set.add(typeName);
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Checks whether an xs:element hosts an inline complexType that wraps a
|
|
107
|
+
* complexContent/extension, and if so returns the extension's @base value.
|
|
108
|
+
*/
|
|
109
|
+
readExtensionBase(el) {
|
|
110
|
+
const ct = firstChildByLocalName(el, 'complexType');
|
|
111
|
+
if (!ct)
|
|
112
|
+
return null;
|
|
113
|
+
const cc = firstChildByLocalName(ct, 'complexContent');
|
|
114
|
+
if (!cc)
|
|
115
|
+
return null;
|
|
116
|
+
const ext = firstChildByLocalName(cc, 'extension');
|
|
117
|
+
return ext ? ext.getAttribute('base') : null;
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
// ─── pure helpers (module-private) ───────────────────────────────────────────
|
|
121
|
+
/** Returns the first direct child Element with a matching localName, or null. */
|
|
122
|
+
export function firstChildByLocalName(parent, localName) {
|
|
123
|
+
for (let i = 0; i < parent.childNodes.length; i++) {
|
|
124
|
+
const node = parent.childNodes[i];
|
|
125
|
+
if (node.nodeType === 1 && node.localName === localName)
|
|
126
|
+
return node;
|
|
127
|
+
}
|
|
128
|
+
return null;
|
|
129
|
+
}
|
|
130
|
+
/** Returns all direct child Elements of a node. */
|
|
131
|
+
export function directChildElements(parent) {
|
|
132
|
+
const result = [];
|
|
133
|
+
for (let i = 0; i < parent.childNodes.length; i++) {
|
|
134
|
+
const node = parent.childNodes[i];
|
|
135
|
+
if (node.nodeType === 1)
|
|
136
|
+
result.push(node);
|
|
137
|
+
}
|
|
138
|
+
return result;
|
|
139
|
+
}
|
|
140
|
+
/** Returns all direct child Elements with a given localName. */
|
|
141
|
+
export function childrenByLocalName(parent, localName) {
|
|
142
|
+
return directChildElements(parent).filter(el => el.localName === localName);
|
|
143
|
+
}
|
|
144
|
+
/** Strips an XML namespace prefix ("xs:string" → "string"). */
|
|
145
|
+
export function stripNsPrefix(value) {
|
|
146
|
+
const idx = value.indexOf(':');
|
|
147
|
+
return idx === -1 ? value : value.slice(idx + 1);
|
|
148
|
+
}
|
|
149
|
+
//# sourceMappingURL=SchemaIndex.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SchemaIndex.js","sourceRoot":"","sources":["../../src/parser/SchemaIndex.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAGrD,MAAM,CAAC,MAAM,MAAM,GAAG,kCAAkC,CAAA;AAExD,gFAAgF;AAChF,MAAM,CAAC,MAAM,qBAAqB,GAAG,IAAI,GAAG,CAAC;IACzC,UAAU;IACV,KAAK;IACL,gBAAgB;IAChB,WAAW;IACX,aAAa;CAChB,CAAC,CAAA;AAEF;;;GAGG;AACH,MAAM,OAAO,WAAW;IACX,GAAG,CAAU;IACb,GAAG,CAAM;IAElB;6EACyE;IAChE,cAAc,GAAG,IAAI,GAAG,EAAmB,CAAA;IAEpD,qDAAqD;IAC5C,iBAAiB,GAAG,IAAI,GAAG,EAAmB,CAAA;IAEvD,4CAA4C;IACnC,QAAQ,GAAG,IAAI,GAAG,EAAmB,CAAA;IAE9C,iDAAiD;IACxC,aAAa,GAAG,IAAI,GAAG,EAAmB,CAAA;IAEnD;;;;OAIG;IACM,cAAc,GAAG,IAAI,GAAG,EAAkB,CAAA;IAEnD;;;OAGG;IACM,oBAAoB,GAAG,IAAI,GAAG,EAAuB,CAAA;IAE9D,YAAY,GAAS;QACjB,IAAI,CAAC,GAAG,GAAG,GAAG,CAAA;QACd,IAAI,CAAC,GAAG,GAAG,IAAI,SAAS,EAAE,CAAC,eAAe,CACtC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,EAChB,SAAS,CAAC,QAAQ,CACE,CAAA;QACxB,IAAI,CAAC,SAAS,EAAE,CAAA;IACpB,CAAC;IAED,6EAA6E;IAErE,SAAS;QACb,IAAI,CAAC,UAAU,CAAC,aAAa,EAAE,IAAI,CAAC,cAAc,CAAC,CAAA;QACnD,IAAI,CAAC,UAAU,CAAC,gBAAgB,EAAE,IAAI,CAAC,iBAAiB,CAAC,CAAA;QACzD,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAA;QACvC,IAAI,CAAC,UAAU,CAAC,YAAY,EAAE,IAAI,CAAC,aAAa,CAAC,CAAA;QACjD,IAAI,CAAC,aAAa,EAAE,CAAA;IACxB,CAAC;IAED,sFAAsF;IAC9E,UAAU,CAAC,SAAiB,EAAE,GAAyB;QAC3D,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,sBAAsB,CAAC,MAAM,EAAE,SAAS,CAAC,CAAA;QAChE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACpC,MAAM,EAAE,GAAG,KAAK,CAAC,CAAC,CAAuB,CAAA;YACzC,MAAM,IAAI,GAAG,EAAE,CAAC,YAAY,CAAC,MAAM,CAAC,CAAA;YACpC,IAAI,IAAI;gBAAE,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC,CAAA;QAC/B,CAAC;IACL,CAAC;IAED,8EAA8E;IACtE,aAAa;QACjB,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,sBAAsB,CAAC,MAAM,EAAE,SAAS,CAAC,CAAA;QAChE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACpC,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,CAAuB,CAAC,CAAA;QACxD,CAAC;IACL,CAAC;IAEO,eAAe,CAAC,EAAW;QAC/B,MAAM,IAAI,GAAG,EAAE,CAAC,YAAY,CAAC,MAAM,CAAC,CAAA;QACpC,IAAI,CAAC,IAAI;YAAE,OAAM;QAEjB,uCAAuC;QACvC,MAAM,QAAQ,GAAG,EAAE,CAAC,YAAY,CAAC,MAAM,CAAC,CAAA;QACxC,IAAI,QAAQ,EAAE,CAAC;YACX,MAAM,QAAQ,GAAG,aAAa,CAAC,QAAQ,CAAC,CAAA;YACxC,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAA;YACvC,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAA;YAClC,OAAM;QACV,CAAC;QAED,6EAA6E;QAC7E,MAAM,aAAa,GAAG,IAAI,CAAC,iBAAiB,CAAC,EAAE,CAAC,CAAA;QAChD,IAAI,aAAa,EAAE,CAAC;YAChB,MAAM,QAAQ,GAAG,aAAa,CAAC,aAAa,CAAC,CAAA;YAC7C,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAA;YACvC,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAA;YAClC,OAAM;QACV,CAAC;QAED,2CAA2C;QAC3C,MAAM,QAAQ,GAAG,qBAAqB,CAAC,EAAE,EAAE,aAAa,CAAC,CAAA;QACzD,IAAI,QAAQ,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YAC7C,MAAM,GAAG,GAAG,aAAa,IAAI,EAAE,CAAA;YAC/B,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAA;YACtC,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,CAAA;YAClC,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,GAAG,CAAC,CAAA;QACjC,CAAC;IACL,CAAC;IAEO,aAAa,CAAC,IAAY,EAAE,QAAgB;QAChD,IAAI,GAAG,GAAG,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;QAC7C,IAAI,CAAC,GAAG,EAAE,CAAC;YACP,GAAG,GAAG,IAAI,GAAG,EAAE,CAAA;YACf,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,CAAA;QAC5C,CAAC;QACD,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;IACrB,CAAC;IAED;;;OAGG;IACK,iBAAiB,CAAC,EAAW;QACjC,MAAM,EAAE,GAAG,qBAAqB,CAAC,EAAE,EAAE,aAAa,CAAC,CAAA;QACnD,IAAI,CAAC,EAAE;YAAE,OAAO,IAAI,CAAA;QACpB,MAAM,EAAE,GAAG,qBAAqB,CAAC,EAAE,EAAE,gBAAgB,CAAC,CAAA;QACtD,IAAI,CAAC,EAAE;YAAE,OAAO,IAAI,CAAA;QACpB,MAAM,GAAG,GAAG,qBAAqB,CAAC,EAAE,EAAE,WAAW,CAAC,CAAA;QAClD,OAAO,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;IAChD,CAAC;CACJ;AAED,gFAAgF;AAEhF,iFAAiF;AACjF,MAAM,UAAU,qBAAqB,CAAC,MAAe,EAAE,SAAiB;IACpE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAChD,MAAM,IAAI,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC,CAAY,CAAA;QAC5C,IAAI,IAAI,CAAC,QAAQ,KAAK,CAAC,IAAI,IAAI,CAAC,SAAS,KAAK,SAAS;YAAE,OAAO,IAAI,CAAA;IACxE,CAAC;IACD,OAAO,IAAI,CAAA;AACf,CAAC;AAED,mDAAmD;AACnD,MAAM,UAAU,mBAAmB,CAAC,MAAe;IAC/C,MAAM,MAAM,GAAc,EAAE,CAAA;IAC5B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAChD,MAAM,IAAI,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC,CAAY,CAAA;QAC5C,IAAI,IAAI,CAAC,QAAQ,KAAK,CAAC;YAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IAC9C,CAAC;IACD,OAAO,MAAM,CAAA;AACjB,CAAC;AAED,gEAAgE;AAChE,MAAM,UAAU,mBAAmB,CAAC,MAAe,EAAE,SAAiB;IAClE,OAAO,mBAAmB,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,SAAS,KAAK,SAAS,CAAC,CAAA;AAC/E,CAAC;AAED,+DAA+D;AAC/D,MAAM,UAAU,aAAa,CAAC,KAAa;IACvC,MAAM,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;IAC9B,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,CAAA;AACpD,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import type { ContentModelType, DocumentNode, IXsd } from '../types';
|
|
2
|
+
import type { ISchemaParser } from '../interfaces/ISchemaParser';
|
|
3
|
+
/**
|
|
4
|
+
* Public entry point for the parser module.
|
|
5
|
+
* Composes SchemaIndex (build phase) and SchemaQuery (query phase).
|
|
6
|
+
* Implements ISchemaParser by delegating to SchemaQuery.
|
|
7
|
+
*/
|
|
8
|
+
export declare class SchemaParser implements ISchemaParser {
|
|
9
|
+
private readonly query;
|
|
10
|
+
constructor(xsd: IXsd);
|
|
11
|
+
getRootElements(): DocumentNode[];
|
|
12
|
+
getSubElements(elementName: string, ancestorChain?: string[]): DocumentNode[];
|
|
13
|
+
getFirstSubElements(elementName: string, withAttributes: boolean): DocumentNode[];
|
|
14
|
+
getAttributesForElement(elementName: string): DocumentNode[];
|
|
15
|
+
getEnumValuesForAttribute(elementName: string, attrName: string): string[];
|
|
16
|
+
getEnumValuesForNamedType(typeName: string): string[];
|
|
17
|
+
getContentModelType(elementName: string): ContentModelType | null;
|
|
18
|
+
/** Returns the child elements declared inside a named xs:group. */
|
|
19
|
+
getElementsFromGroup(groupNode: DocumentNode): DocumentNode[];
|
|
20
|
+
/** Returns the attributes declared inside a named xs:attributeGroup. */
|
|
21
|
+
getAttributesFromAttributeGroup(attrGroupNode: DocumentNode): DocumentNode[];
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=SchemaParser.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SchemaParser.d.ts","sourceRoot":"","sources":["../../src/parser/SchemaParser.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,UAAU,CAAA;AACpE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAA;AAIhE;;;;GAIG;AACH,qBAAa,YAAa,YAAW,aAAa;IAC9C,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAa;gBAEvB,GAAG,EAAE,IAAI;IAKrB,eAAe,IAAI,YAAY,EAAE;IAIjC,cAAc,CAAC,WAAW,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,MAAM,EAAE,GAAG,YAAY,EAAE;IAI7E,mBAAmB,CAAC,WAAW,EAAE,MAAM,EAAE,cAAc,EAAE,OAAO,GAAG,YAAY,EAAE;IAIjF,uBAAuB,CAAC,WAAW,EAAE,MAAM,GAAG,YAAY,EAAE;IAI5D,yBAAyB,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE;IAI1E,yBAAyB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE;IAIrD,mBAAmB,CAAC,WAAW,EAAE,MAAM,GAAG,gBAAgB,GAAG,IAAI;IAIjE,mEAAmE;IACnE,oBAAoB,CAAC,SAAS,EAAE,YAAY,GAAG,YAAY,EAAE;IAI7D,wEAAwE;IACxE,+BAA+B,CAAC,aAAa,EAAE,YAAY,GAAG,YAAY,EAAE;CAG/E"}
|