@sap-ux/xml-odata-annotation-converter 0.1.1

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 (59) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +55 -0
  3. package/dist/index.d.ts +3 -0
  4. package/dist/index.d.ts.map +1 -0
  5. package/dist/index.js +23 -0
  6. package/dist/index.js.map +1 -0
  7. package/dist/parser/attribute-getters.d.ts +18 -0
  8. package/dist/parser/attribute-getters.d.ts.map +1 -0
  9. package/dist/parser/attribute-getters.js +28 -0
  10. package/dist/parser/attribute-getters.js.map +1 -0
  11. package/dist/parser/document.d.ts +11 -0
  12. package/dist/parser/document.d.ts.map +1 -0
  13. package/dist/parser/document.js +325 -0
  14. package/dist/parser/document.js.map +1 -0
  15. package/dist/parser/element-getters.d.ts +10 -0
  16. package/dist/parser/element-getters.d.ts.map +1 -0
  17. package/dist/parser/element-getters.js +15 -0
  18. package/dist/parser/element-getters.js.map +1 -0
  19. package/dist/parser/escaping.d.ts +8 -0
  20. package/dist/parser/escaping.d.ts.map +1 -0
  21. package/dist/parser/escaping.js +21 -0
  22. package/dist/parser/escaping.js.map +1 -0
  23. package/dist/parser/index.d.ts +4 -0
  24. package/dist/parser/index.d.ts.map +1 -0
  25. package/dist/parser/index.js +10 -0
  26. package/dist/parser/index.js.map +1 -0
  27. package/dist/parser/metadata.d.ts +11 -0
  28. package/dist/parser/metadata.d.ts.map +1 -0
  29. package/dist/parser/metadata.js +515 -0
  30. package/dist/parser/metadata.js.map +1 -0
  31. package/dist/parser/range.d.ts +37 -0
  32. package/dist/parser/range.d.ts.map +1 -0
  33. package/dist/parser/range.js +67 -0
  34. package/dist/parser/range.js.map +1 -0
  35. package/dist/printer/builders.d.ts +49 -0
  36. package/dist/printer/builders.d.ts.map +1 -0
  37. package/dist/printer/builders.js +138 -0
  38. package/dist/printer/builders.js.map +1 -0
  39. package/dist/printer/csdl-to-xml.d.ts +23 -0
  40. package/dist/printer/csdl-to-xml.d.ts.map +1 -0
  41. package/dist/printer/csdl-to-xml.js +160 -0
  42. package/dist/printer/csdl-to-xml.js.map +1 -0
  43. package/dist/printer/document-modifier.d.ts +6 -0
  44. package/dist/printer/document-modifier.d.ts.map +1 -0
  45. package/dist/printer/document-modifier.js +47 -0
  46. package/dist/printer/document-modifier.js.map +1 -0
  47. package/dist/printer/index.d.ts +5 -0
  48. package/dist/printer/index.d.ts.map +1 -0
  49. package/dist/printer/index.js +31 -0
  50. package/dist/printer/index.js.map +1 -0
  51. package/dist/printer/namespaces.d.ts +3 -0
  52. package/dist/printer/namespaces.d.ts.map +1 -0
  53. package/dist/printer/namespaces.js +6 -0
  54. package/dist/printer/namespaces.js.map +1 -0
  55. package/dist/printer/serializer-edmx.d.ts +46 -0
  56. package/dist/printer/serializer-edmx.d.ts.map +1 -0
  57. package/dist/printer/serializer-edmx.js +214 -0
  58. package/dist/printer/serializer-edmx.js.map +1 -0
  59. package/package.json +59 -0
@@ -0,0 +1,325 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.convertDocument = void 0;
4
+ const odata_annotation_core_1 = require("@sap-ux/odata-annotation-core");
5
+ const range_1 = require("./range");
6
+ const element_getters_1 = require("./element-getters");
7
+ const attribute_getters_1 = require("./attribute-getters");
8
+ const escaping_1 = require("./escaping");
9
+ /**
10
+ * Convert AST of an XML document to annotation document.
11
+ *
12
+ * @param uri Uri of the document.
13
+ * @param ast XML document containing annotations.
14
+ * @returns annotation file.
15
+ */
16
+ function convertDocument(uri, ast) {
17
+ if (ast.rootElement) {
18
+ const dataServices = (0, element_getters_1.getElementsWithName)('DataServices', ast.rootElement);
19
+ const schemas = dataServices.length ? (0, element_getters_1.getElementsWithName)('Schema', dataServices[0]) : [];
20
+ const targets = schemas.reduce((acc, schema) => [...acc, ...convertSchema(schema)], []);
21
+ const range = (0, range_1.transformElementRange)(ast.rootElement.position, ast.rootElement);
22
+ const contentRange = (0, range_1.getGapRangeBetween)(ast.rootElement.syntax.openBody, ast.rootElement.syntax.closeName);
23
+ const references = convertReferences(ast.rootElement);
24
+ if (range) {
25
+ const namespace = createNamespace(schemas[0]);
26
+ const file = {
27
+ type: 'annotation-file',
28
+ uri,
29
+ range,
30
+ references,
31
+ targets
32
+ };
33
+ if (contentRange) {
34
+ file.contentRange = contentRange;
35
+ }
36
+ if (namespace) {
37
+ file.namespace = namespace;
38
+ }
39
+ return file;
40
+ }
41
+ }
42
+ return {
43
+ type: 'annotation-file',
44
+ uri,
45
+ range: undefined,
46
+ contentRange: undefined,
47
+ references: [],
48
+ targets: []
49
+ };
50
+ }
51
+ exports.convertDocument = convertDocument;
52
+ /**
53
+ * Creates namespace object.
54
+ *
55
+ * @param schema schema XML element
56
+ * @returns Namespace object
57
+ */
58
+ function createNamespace(schema) {
59
+ var _a;
60
+ if (!schema) {
61
+ return;
62
+ }
63
+ const namespace = (0, attribute_getters_1.getElementAttributeByName)('Namespace', schema);
64
+ const alias = (0, attribute_getters_1.getElementAttributeByName)('Alias', schema);
65
+ if (!(namespace === null || namespace === void 0 ? void 0 : namespace.value)) {
66
+ return;
67
+ }
68
+ const currentNamespace = {
69
+ type: 'namespace',
70
+ name: namespace.value,
71
+ range: (0, range_1.transformElementRange)(schema.position, schema),
72
+ nameRange: (0, range_1.transformRange)(namespace.syntax.value)
73
+ };
74
+ const contentRange = schema.syntax.openBody && schema.syntax.closeName
75
+ ? (0, range_1.getGapRangeBetween)(schema.syntax.openBody, schema.syntax.closeName)
76
+ : undefined;
77
+ if (contentRange) {
78
+ currentNamespace.contentRange = contentRange;
79
+ }
80
+ if (currentNamespace.nameRange) {
81
+ (0, range_1.adjustRange)(currentNamespace.nameRange, 1, -1);
82
+ }
83
+ if (alias) {
84
+ currentNamespace.alias = (_a = alias.value) !== null && _a !== void 0 ? _a : '';
85
+ currentNamespace.aliasRange = (0, range_1.transformRange)(alias.syntax.value);
86
+ if (currentNamespace.aliasRange) {
87
+ (0, range_1.adjustRange)(currentNamespace.aliasRange, 1, -1);
88
+ }
89
+ }
90
+ return currentNamespace;
91
+ }
92
+ /**
93
+ * Creates reference object from XML element.
94
+ *
95
+ * @param element EDMX XML Element
96
+ * @returns references contained in the XML element
97
+ */
98
+ function convertReferences(element) {
99
+ var _a, _b;
100
+ const referenceElements = (0, element_getters_1.getElementsWithName)('Reference', element);
101
+ const references = [];
102
+ for (const referenceElement of referenceElements) {
103
+ const uri = (_b = (_a = (0, attribute_getters_1.getElementAttributeByName)('Uri', referenceElement)) === null || _a === void 0 ? void 0 : _a.value) !== null && _b !== void 0 ? _b : undefined;
104
+ const refRange = (0, range_1.transformRange)(referenceElement.position);
105
+ for (const namespaceElement of (0, element_getters_1.getElementsWithName)('Include', referenceElement)) {
106
+ const reference = createReference(namespaceElement, refRange, uri);
107
+ if (reference) {
108
+ references.push(reference);
109
+ }
110
+ }
111
+ }
112
+ return references;
113
+ }
114
+ /**
115
+ * Creates referece.
116
+ *
117
+ * @param namespaceElement namespace XML element
118
+ * @param range reference element range
119
+ * @param uri reference uri
120
+ * @returns reference object or undefined if namespace is not provided in the corresponding attribute
121
+ */
122
+ function createReference(namespaceElement, range, uri) {
123
+ var _a;
124
+ const namespace = (0, attribute_getters_1.getElementAttributeByName)('Namespace', namespaceElement);
125
+ const alias = (0, attribute_getters_1.getElementAttributeByName)('Alias', namespaceElement);
126
+ if (!(namespace === null || namespace === void 0 ? void 0 : namespace.value)) {
127
+ return;
128
+ }
129
+ const reference = {
130
+ type: 'reference',
131
+ name: namespace.value,
132
+ nameRange: (0, range_1.transformRange)(namespace.syntax.value),
133
+ range,
134
+ uri
135
+ };
136
+ if (reference.nameRange) {
137
+ (0, range_1.adjustRange)(reference.nameRange, 1, -1);
138
+ }
139
+ if (alias) {
140
+ reference.alias = (_a = alias.value) !== null && _a !== void 0 ? _a : '';
141
+ reference.aliasRange = (0, range_1.transformRange)(alias.syntax.value);
142
+ if (reference.aliasRange) {
143
+ (0, range_1.adjustRange)(reference.aliasRange, 1, -1);
144
+ }
145
+ }
146
+ return reference;
147
+ }
148
+ /**
149
+ * Converts schema.
150
+ *
151
+ * @param schema Schema XML Element
152
+ * @returns targets contained in the XML element
153
+ */
154
+ function convertSchema(schema) {
155
+ var _a;
156
+ const targets = [];
157
+ const annotationsElements = (0, element_getters_1.getElementsWithName)("Annotations" /* Edm.Annotations */, schema);
158
+ for (const annotations of annotationsElements) {
159
+ const targetAttribute = (0, attribute_getters_1.getElementAttributeByName)('Target', annotations);
160
+ if (targetAttribute) {
161
+ const targetName = (_a = targetAttribute.value) !== null && _a !== void 0 ? _a : '';
162
+ const targetNamePosition = (0, range_1.transformRange)(targetAttribute.syntax.value);
163
+ if (targetNamePosition) {
164
+ (0, range_1.adjustRange)(targetNamePosition, 1, -1);
165
+ const terms = (0, element_getters_1.getElementsWithName)("Annotation" /* Edm.Annotation */, annotations)
166
+ .map(convertElement)
167
+ .filter((node) => (node === null || node === void 0 ? void 0 : node.type) === odata_annotation_core_1.ELEMENT_TYPE);
168
+ const termsRange = annotations.syntax.closeName
169
+ ? (0, range_1.getGapRangeBetween)(annotations.syntax.openBody, annotations.syntax.closeName)
170
+ : undefined;
171
+ const range = (0, range_1.transformElementRange)(annotations.position, annotations);
172
+ const target = {
173
+ type: 'target',
174
+ name: targetName,
175
+ nameRange: targetNamePosition,
176
+ terms,
177
+ range,
178
+ termsRange
179
+ };
180
+ targets.push(target);
181
+ }
182
+ }
183
+ }
184
+ return targets;
185
+ }
186
+ /**
187
+ * Returns namespace details.
188
+ *
189
+ * @param element XML element
190
+ * @returns element default namespace if it exists
191
+ */
192
+ function getNamespace(element) {
193
+ if (element.ns) {
194
+ const namespace = element.namespaces[element.ns];
195
+ if (namespace) {
196
+ return {
197
+ alias: element.ns,
198
+ uri: namespace
199
+ };
200
+ }
201
+ }
202
+ return undefined;
203
+ }
204
+ /**
205
+ * Converts element.
206
+ *
207
+ * @param element XMLElement
208
+ * @returns generic annotation file Element
209
+ */
210
+ function convertElement(element) {
211
+ var _a, _b, _c;
212
+ const range = (0, range_1.transformElementRange)(element.position, element);
213
+ const nameRange = getElementNameRange(element);
214
+ const contentRange = element.syntax.openBody && element.syntax.closeName
215
+ ? (0, range_1.getGapRangeBetween)(element.syntax.openBody, element.syntax.closeName)
216
+ : undefined;
217
+ const namespace = getNamespace(element);
218
+ const textNodes = (_a = element.textContents) !== null && _a !== void 0 ? _a : [];
219
+ const elementNodes = (_b = element.subElements) !== null && _b !== void 0 ? _b : [];
220
+ const sortedContentNodes = [...textNodes, ...elementNodes].sort((a, b) => a.position.startOffset - b.position.endOffset);
221
+ // merge adjacent text fragments into solid text node
222
+ const children = mergeContentNodes(sortedContentNodes);
223
+ const attributes = element.attributes.reduce((acc, attribute) => {
224
+ if (!attribute.key) {
225
+ return acc;
226
+ }
227
+ const value = attribute.value ? (0, escaping_1.removeEscapeSequences)(attribute.value) : '';
228
+ const attributeNode = (0, odata_annotation_core_1.createAttributeNode)(attribute.key, value, (0, range_1.transformRange)(attribute.syntax.key), (0, range_1.transformRange)(attribute.syntax.value));
229
+ if (attributeNode.valueRange) {
230
+ (0, range_1.adjustRange)(attributeNode.valueRange, 1, -1);
231
+ }
232
+ acc[attribute.key] = attributeNode;
233
+ return acc;
234
+ }, {});
235
+ return (0, odata_annotation_core_1.createElementNode)({
236
+ name: (_c = element.name) !== null && _c !== void 0 ? _c : '',
237
+ range,
238
+ nameRange,
239
+ attributes,
240
+ content: children.nodes,
241
+ contentRange,
242
+ namespace: namespace === null || namespace === void 0 ? void 0 : namespace.uri,
243
+ namespaceAlias: namespace === null || namespace === void 0 ? void 0 : namespace.alias
244
+ });
245
+ }
246
+ /**
247
+ * Returns element name range.
248
+ *
249
+ * @param element XML element
250
+ * @returns range
251
+ */
252
+ function getElementNameRange(element) {
253
+ if (element.syntax.openName) {
254
+ return (0, range_1.transformRange)(element.syntax.openName);
255
+ }
256
+ if (element.name === null) {
257
+ if (element.syntax.openBody) {
258
+ // element name is missing: "< ></>"
259
+ const range = (0, range_1.transformRange)(element.syntax.openBody);
260
+ if (!range) {
261
+ return undefined;
262
+ }
263
+ // element name starts 1 character after "<"
264
+ range.start.character += 1;
265
+ // element name range should cover only the single character after "<"
266
+ range.end = odata_annotation_core_1.Position.create(range.start.line, range.start.character);
267
+ return range;
268
+ }
269
+ else {
270
+ // closing bracket is missing: "<"
271
+ const range = (0, range_1.transformRange)(element.position);
272
+ if (!range) {
273
+ return undefined;
274
+ }
275
+ // name range should start after <, so we need to increment elements start range by 1
276
+ range.start.character++;
277
+ return range;
278
+ }
279
+ }
280
+ return undefined;
281
+ }
282
+ /**
283
+ * Converts text node.
284
+ *
285
+ * @param textNode XML text node
286
+ * @returns annotation file TextNode
287
+ */
288
+ function convertTextNode(textNode) {
289
+ var _a;
290
+ const range = (0, range_1.transformRange)(textNode.position);
291
+ return (0, odata_annotation_core_1.createTextNode)((_a = textNode.text) !== null && _a !== void 0 ? _a : '', range);
292
+ }
293
+ /**
294
+ * Merges content nodes.
295
+ *
296
+ * @param sortedContentNodes
297
+ * @returns merged nodes data
298
+ */
299
+ function mergeContentNodes(sortedContentNodes) {
300
+ return sortedContentNodes.reduce((acc, child, index, array) => {
301
+ if (child.type === 'XMLTextContent') {
302
+ if (index + 1 < array.length && array[index + 1].type === 'XMLTextContent') {
303
+ acc.textNodes.push(child);
304
+ }
305
+ else {
306
+ const [first, ...textNodes] = [...acc.textNodes, child];
307
+ const concatenatedTextNode = textNodes.reduce((accTextNode, textNode) => {
308
+ var _a, _b;
309
+ return Object.assign(Object.assign({}, accTextNode), { text: ((_a = accTextNode.text) !== null && _a !== void 0 ? _a : '') + ((_b = textNode.text) !== null && _b !== void 0 ? _b : ''), position: Object.assign(Object.assign({}, accTextNode.position), { endColumn: textNode.position.endColumn, endLine: textNode.position.endLine, endOffset: textNode.position.endOffset }) });
310
+ }, first);
311
+ acc.nodes.push(convertTextNode(concatenatedTextNode));
312
+ acc.textNodes = [];
313
+ }
314
+ }
315
+ else if (child.type === 'XMLElement') {
316
+ acc.nodes.push(convertElement(child));
317
+ }
318
+ return acc;
319
+ }, {
320
+ textNodes: [],
321
+ nodes: [],
322
+ diagnostics: []
323
+ });
324
+ }
325
+ //# sourceMappingURL=document.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"document.js","sourceRoot":"","sources":["../../src/parser/document.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import type { XMLElement } from '@xml-tools/ast';
2
+ /**
3
+ * Returns a subset of elements children based on their name.
4
+ *
5
+ * @param name Name of the element
6
+ * @param element Element which sub-elements will be checked
7
+ * @returns An array with matching elements
8
+ */
9
+ export declare function getElementsWithName(name: string, element: XMLElement): XMLElement[];
10
+ //# sourceMappingURL=element-getters.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"element-getters.d.ts","sourceRoot":"","sources":["../../src/parser/element-getters.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAEjD;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,GAAG,UAAU,EAAE,CAEnF"}
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getElementsWithName = void 0;
4
+ /**
5
+ * Returns a subset of elements children based on their name.
6
+ *
7
+ * @param name Name of the element
8
+ * @param element Element which sub-elements will be checked
9
+ * @returns An array with matching elements
10
+ */
11
+ function getElementsWithName(name, element) {
12
+ return element.subElements ? element.subElements.filter((subElement) => subElement.name === name) : [];
13
+ }
14
+ exports.getElementsWithName = getElementsWithName;
15
+ //# sourceMappingURL=element-getters.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"element-getters.js","sourceRoot":"","sources":["../../src/parser/element-getters.ts"],"names":[],"mappings":";;;AAEA;;;;;;GAMG;AACH,SAAgB,mBAAmB,CAAC,IAAY,EAAE,OAAmB;IACjE,OAAO,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,UAAsB,EAAE,EAAE,CAAC,UAAU,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AACvH,CAAC;AAFD,kDAEC"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Replaces XML escape sequences with their matching special characters.
3
+ *
4
+ * @param input text with escape sequences
5
+ * @returns text with special characters
6
+ */
7
+ export declare function removeEscapeSequences(input: string): string;
8
+ //# sourceMappingURL=escaping.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"escaping.d.ts","sourceRoot":"","sources":["../../src/parser/escaping.ts"],"names":[],"mappings":"AAQA;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAE3D"}
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.removeEscapeSequences = void 0;
4
+ const ESCAPE_MAPPINGS = {
5
+ '&apos;': "'",
6
+ '&gt;': '>',
7
+ '&lt;': '<',
8
+ '&amp;': '&',
9
+ '&quot;': '"'
10
+ };
11
+ /**
12
+ * Replaces XML escape sequences with their matching special characters.
13
+ *
14
+ * @param input text with escape sequences
15
+ * @returns text with special characters
16
+ */
17
+ function removeEscapeSequences(input) {
18
+ return input.replace(/(&apos;|&lt;|&gt;|&amp;|&quot;)/g, (_str, item) => ESCAPE_MAPPINGS[item]);
19
+ }
20
+ exports.removeEscapeSequences = removeEscapeSequences;
21
+ //# sourceMappingURL=escaping.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"escaping.js","sourceRoot":"","sources":["../../src/parser/escaping.ts"],"names":[],"mappings":";;;AAAA,MAAM,eAAe,GAA2B;IAC5C,QAAQ,EAAE,GAAG;IACb,MAAM,EAAE,GAAG;IACX,MAAM,EAAE,GAAG;IACX,OAAO,EAAE,GAAG;IACZ,QAAQ,EAAE,GAAG;CAChB,CAAC;AAEF;;;;;GAKG;AACH,SAAgB,qBAAqB,CAAC,KAAa;IAC/C,OAAO,KAAK,CAAC,OAAO,CAAC,kCAAkC,EAAE,CAAC,IAAI,EAAE,IAAY,EAAE,EAAE,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC;AAC5G,CAAC;AAFD,sDAEC"}
@@ -0,0 +1,4 @@
1
+ export { convertDocument } from './document';
2
+ export { transformRange } from './range';
3
+ export { convertMetadataDocument } from './metadata';
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/parser/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AACzC,OAAO,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAC"}
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.convertMetadataDocument = exports.transformRange = exports.convertDocument = void 0;
4
+ var document_1 = require("./document");
5
+ Object.defineProperty(exports, "convertDocument", { enumerable: true, get: function () { return document_1.convertDocument; } });
6
+ var range_1 = require("./range");
7
+ Object.defineProperty(exports, "transformRange", { enumerable: true, get: function () { return range_1.transformRange; } });
8
+ var metadata_1 = require("./metadata");
9
+ Object.defineProperty(exports, "convertMetadataDocument", { enumerable: true, get: function () { return metadata_1.convertMetadataDocument; } });
10
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/parser/index.ts"],"names":[],"mappings":";;;AAAA,uCAA6C;AAApC,2GAAA,eAAe,OAAA;AACxB,iCAAyC;AAAhC,uGAAA,cAAc,OAAA;AACvB,uCAAqD;AAA5C,mHAAA,uBAAuB,OAAA"}
@@ -0,0 +1,11 @@
1
+ import type { XMLDocument } from '@xml-tools/ast';
2
+ import type { MetadataElement } from '@sap-ux/odata-annotation-core-types';
3
+ /**
4
+ * Traverses the XML document and collects metadata element definitions.
5
+ *
6
+ * @param uri Uri of the document.
7
+ * @param document XML document containing metadata.
8
+ * @returns an array of MetadataElements extracted from the XML document.
9
+ */
10
+ export declare function convertMetadataDocument(uri: string, document: XMLDocument): MetadataElement[];
11
+ //# sourceMappingURL=metadata.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"metadata.d.ts","sourceRoot":"","sources":["../../src/parser/metadata.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAc,MAAM,gBAAgB,CAAC;AAE9D,OAAO,KAAK,EAA6B,eAAe,EAAE,MAAM,qCAAqC,CAAC;AAkEtG;;;;;;GAMG;AACH,wBAAgB,uBAAuB,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,WAAW,GAAG,eAAe,EAAE,CAa7F"}