@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.
- package/LICENSE +201 -0
- package/README.md +55 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +23 -0
- package/dist/index.js.map +1 -0
- package/dist/parser/attribute-getters.d.ts +18 -0
- package/dist/parser/attribute-getters.d.ts.map +1 -0
- package/dist/parser/attribute-getters.js +28 -0
- package/dist/parser/attribute-getters.js.map +1 -0
- package/dist/parser/document.d.ts +11 -0
- package/dist/parser/document.d.ts.map +1 -0
- package/dist/parser/document.js +325 -0
- package/dist/parser/document.js.map +1 -0
- package/dist/parser/element-getters.d.ts +10 -0
- package/dist/parser/element-getters.d.ts.map +1 -0
- package/dist/parser/element-getters.js +15 -0
- package/dist/parser/element-getters.js.map +1 -0
- package/dist/parser/escaping.d.ts +8 -0
- package/dist/parser/escaping.d.ts.map +1 -0
- package/dist/parser/escaping.js +21 -0
- package/dist/parser/escaping.js.map +1 -0
- package/dist/parser/index.d.ts +4 -0
- package/dist/parser/index.d.ts.map +1 -0
- package/dist/parser/index.js +10 -0
- package/dist/parser/index.js.map +1 -0
- package/dist/parser/metadata.d.ts +11 -0
- package/dist/parser/metadata.d.ts.map +1 -0
- package/dist/parser/metadata.js +515 -0
- package/dist/parser/metadata.js.map +1 -0
- package/dist/parser/range.d.ts +37 -0
- package/dist/parser/range.d.ts.map +1 -0
- package/dist/parser/range.js +67 -0
- package/dist/parser/range.js.map +1 -0
- package/dist/printer/builders.d.ts +49 -0
- package/dist/printer/builders.d.ts.map +1 -0
- package/dist/printer/builders.js +138 -0
- package/dist/printer/builders.js.map +1 -0
- package/dist/printer/csdl-to-xml.d.ts +23 -0
- package/dist/printer/csdl-to-xml.d.ts.map +1 -0
- package/dist/printer/csdl-to-xml.js +160 -0
- package/dist/printer/csdl-to-xml.js.map +1 -0
- package/dist/printer/document-modifier.d.ts +6 -0
- package/dist/printer/document-modifier.d.ts.map +1 -0
- package/dist/printer/document-modifier.js +47 -0
- package/dist/printer/document-modifier.js.map +1 -0
- package/dist/printer/index.d.ts +5 -0
- package/dist/printer/index.d.ts.map +1 -0
- package/dist/printer/index.js +31 -0
- package/dist/printer/index.js.map +1 -0
- package/dist/printer/namespaces.d.ts +3 -0
- package/dist/printer/namespaces.d.ts.map +1 -0
- package/dist/printer/namespaces.js +6 -0
- package/dist/printer/namespaces.js.map +1 -0
- package/dist/printer/serializer-edmx.d.ts +46 -0
- package/dist/printer/serializer-edmx.d.ts.map +1 -0
- package/dist/printer/serializer-edmx.js +214 -0
- package/dist/printer/serializer-edmx.js.map +1 -0
- package/package.json +59 -0
|
@@ -0,0 +1,515 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.convertMetadataDocument = void 0;
|
|
4
|
+
const odata_annotation_core_1 = require("@sap-ux/odata-annotation-core");
|
|
5
|
+
const attribute_getters_1 = require("./attribute-getters");
|
|
6
|
+
const range_1 = require("./range");
|
|
7
|
+
const element_getters_1 = require("./element-getters");
|
|
8
|
+
const EDMX_METADATA_ELEMENT_NAMES = new Set([
|
|
9
|
+
"Schema" /* Edm.Schema */,
|
|
10
|
+
"EntityType" /* Edm.EntityType */,
|
|
11
|
+
"ComplexType" /* Edm.ComplexType */,
|
|
12
|
+
"Property" /* Edm.Property */,
|
|
13
|
+
"NavigationProperty" /* Edm.NavigationProperty */,
|
|
14
|
+
"EntityContainer" /* Edm.EntityContainer */,
|
|
15
|
+
"EntitySet" /* Edm.EntitySet */,
|
|
16
|
+
"Singleton" /* Edm.Singleton */,
|
|
17
|
+
"Function" /* Edm.Function */,
|
|
18
|
+
"Action" /* Edm.Action */,
|
|
19
|
+
"FunctionImport" /* Edm.FunctionImport */,
|
|
20
|
+
"ActionImport" /* Edm.ActionImport */,
|
|
21
|
+
"Parameter" /* Edm.Parameter */,
|
|
22
|
+
"ReturnType" /* Edm.ReturnType */
|
|
23
|
+
]);
|
|
24
|
+
const ENTITY_TYPE_NAMES = new Set(["EntityType" /* Edm.EntityType */, "Singleton" /* Edm.Singleton */, "EntitySet" /* Edm.EntitySet */, "NavigationProperty" /* Edm.NavigationProperty */]);
|
|
25
|
+
const STRUCTURED_TYPE_NAMES = new Set([
|
|
26
|
+
"Singleton" /* Edm.Singleton */,
|
|
27
|
+
"EntitySet" /* Edm.EntitySet */,
|
|
28
|
+
"NavigationProperty" /* Edm.NavigationProperty */,
|
|
29
|
+
"ActionImport" /* Edm.ActionImport */,
|
|
30
|
+
"FunctionImport" /* Edm.FunctionImport */
|
|
31
|
+
]);
|
|
32
|
+
const METADATA_ROOT_TYPE_NAMES = new Set([
|
|
33
|
+
"EntityType" /* Edm.EntityType */,
|
|
34
|
+
"ComplexType" /* Edm.ComplexType */,
|
|
35
|
+
"Function" /* Edm.Function */,
|
|
36
|
+
"Action" /* Edm.Action */,
|
|
37
|
+
"EntityContainer" /* Edm.EntityContainer */
|
|
38
|
+
]);
|
|
39
|
+
const PARAMETER_TYPE_NAMES = new Set(["Property" /* Edm.Property */, "ReturnType" /* Edm.ReturnType */, "Parameter" /* Edm.Parameter */]);
|
|
40
|
+
const EDM_ENTITY_TYPE = 'Edm.EntityType';
|
|
41
|
+
const EDM_COMPLEX_TYPE = 'EDM_COMPLEX_TYPE';
|
|
42
|
+
/**
|
|
43
|
+
* Traverses the XML document and collects metadata element definitions.
|
|
44
|
+
*
|
|
45
|
+
* @param uri Uri of the document.
|
|
46
|
+
* @param document XML document containing metadata.
|
|
47
|
+
* @returns an array of MetadataElements extracted from the XML document.
|
|
48
|
+
*/
|
|
49
|
+
function convertMetadataDocument(uri, document) {
|
|
50
|
+
const root = document.rootElement;
|
|
51
|
+
if (!root) {
|
|
52
|
+
return [];
|
|
53
|
+
}
|
|
54
|
+
const aliasMap = getNamespaceMap(root);
|
|
55
|
+
const dataServices = (0, element_getters_1.getElementsWithName)("DataServices" /* Edmx.DataServices */, root);
|
|
56
|
+
const schemas = dataServices.length ? (0, element_getters_1.getElementsWithName)("Schema" /* Edm.Schema */, dataServices[0]) : [];
|
|
57
|
+
const metadataElements = [];
|
|
58
|
+
for (const schema of schemas) {
|
|
59
|
+
convertSchema(schema, aliasMap, uri, metadataElements);
|
|
60
|
+
}
|
|
61
|
+
return metadataElements;
|
|
62
|
+
}
|
|
63
|
+
exports.convertMetadataDocument = convertMetadataDocument;
|
|
64
|
+
/**
|
|
65
|
+
* Collects metadata element definitions from given schema.
|
|
66
|
+
*
|
|
67
|
+
* @param schema schema element
|
|
68
|
+
* @param aliasMap alias map
|
|
69
|
+
* @param uri Uri of the document
|
|
70
|
+
* @param metadataElements metadata element collector array
|
|
71
|
+
*/
|
|
72
|
+
function convertSchema(schema, aliasMap, uri, metadataElements) {
|
|
73
|
+
var _a, _b;
|
|
74
|
+
const namespace = (_a = (0, attribute_getters_1.getElementAttributeByName)('Namespace', schema)) === null || _a === void 0 ? void 0 : _a.value;
|
|
75
|
+
if (!namespace) {
|
|
76
|
+
return;
|
|
77
|
+
}
|
|
78
|
+
const typeMap = {};
|
|
79
|
+
// loop over all direct schema children and collect type information
|
|
80
|
+
const currentNamespace = (0, attribute_getters_1.getAttributeValue)('Namespace', schema);
|
|
81
|
+
for (const element of schema.subElements) {
|
|
82
|
+
const name = (0, attribute_getters_1.getAttributeValue)('Name', element);
|
|
83
|
+
let type = '';
|
|
84
|
+
switch (element.name) {
|
|
85
|
+
case "TypeDefinition" /* Edm.TypeDefinition */:
|
|
86
|
+
case "EnumType" /* Edm.EnumType */:
|
|
87
|
+
type = (0, attribute_getters_1.getAttributeValue)('UnderlyingType', element) || 'Edm.Int32';
|
|
88
|
+
break;
|
|
89
|
+
case "EntityType" /* Edm.EntityType */:
|
|
90
|
+
type = EDM_ENTITY_TYPE;
|
|
91
|
+
break;
|
|
92
|
+
case "ComplexType" /* Edm.ComplexType */:
|
|
93
|
+
type = EDM_COMPLEX_TYPE;
|
|
94
|
+
break;
|
|
95
|
+
}
|
|
96
|
+
if (name && type) {
|
|
97
|
+
typeMap[currentNamespace + '.' + name] = type;
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
const associationMap = {};
|
|
101
|
+
const associations = (_b = (0, element_getters_1.getElementsWithName)('Association', schema)) !== null && _b !== void 0 ? _b : [];
|
|
102
|
+
for (const association of associations) {
|
|
103
|
+
const name = (0, attribute_getters_1.getAttributeValue)('Name', association);
|
|
104
|
+
if (name) {
|
|
105
|
+
associationMap[name] = createAssociation((0, element_getters_1.getElementsWithName)('End', association), aliasMap, namespace);
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
const context = {
|
|
109
|
+
namespace,
|
|
110
|
+
typeMap,
|
|
111
|
+
aliasMap,
|
|
112
|
+
associationMap,
|
|
113
|
+
parentPath: '',
|
|
114
|
+
uri: uri
|
|
115
|
+
};
|
|
116
|
+
for (const child of schema.subElements) {
|
|
117
|
+
const element = convertMetadataElement(context, child);
|
|
118
|
+
if (element) {
|
|
119
|
+
metadataElements.push(element);
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
*
|
|
125
|
+
* @param context Conversion context
|
|
126
|
+
* @param element Source XML element
|
|
127
|
+
* @returns matching MetadataElement if it exists for the given XML element
|
|
128
|
+
*/
|
|
129
|
+
function convertMetadataElement(context, element) {
|
|
130
|
+
var _a;
|
|
131
|
+
if (!element.name || !EDMX_METADATA_ELEMENT_NAMES.has(element.name)) {
|
|
132
|
+
return undefined;
|
|
133
|
+
}
|
|
134
|
+
const metadataElement = createMetadataNode(context, element);
|
|
135
|
+
if (metadataElement) {
|
|
136
|
+
const sortedContentNodes = [...element.subElements].sort((a, b) => a.position.startOffset - b.position.endOffset);
|
|
137
|
+
if (!metadataElement.content) {
|
|
138
|
+
metadataElement.content = [];
|
|
139
|
+
}
|
|
140
|
+
for (const child of sortedContentNodes) {
|
|
141
|
+
const childElement = convertMetadataElement(Object.assign(Object.assign({}, context), { parentPath: context.parentPath !== ''
|
|
142
|
+
? `${context.parentPath}/${metadataElement.name}`
|
|
143
|
+
: metadataElement.name }), child);
|
|
144
|
+
if (childElement) {
|
|
145
|
+
(_a = metadataElement.content) === null || _a === void 0 ? void 0 : _a.push(childElement);
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
return metadataElement;
|
|
150
|
+
}
|
|
151
|
+
/**
|
|
152
|
+
*
|
|
153
|
+
* @param context Conversion context
|
|
154
|
+
* @param element Source XML element
|
|
155
|
+
* @returns matching MetadataElement if it exists for the given XML element
|
|
156
|
+
*/
|
|
157
|
+
function createMetadataNode(context, element) {
|
|
158
|
+
let typeAttrName;
|
|
159
|
+
switch (element.name) {
|
|
160
|
+
case "EntitySet" /* Edm.EntitySet */:
|
|
161
|
+
typeAttrName = 'EntityType';
|
|
162
|
+
break;
|
|
163
|
+
case "FunctionImport" /* Edm.FunctionImport */:
|
|
164
|
+
typeAttrName = 'Function'; // to make FunctionImport reference the Function
|
|
165
|
+
break;
|
|
166
|
+
case "ActionImport" /* Edm.ActionImport */:
|
|
167
|
+
typeAttrName = 'Action'; // to make ActionImport reference the Action
|
|
168
|
+
break;
|
|
169
|
+
default:
|
|
170
|
+
typeAttrName = 'Type';
|
|
171
|
+
}
|
|
172
|
+
let type = attributeValueToFullyQualifiedName(typeAttrName, context.aliasMap, context.namespace, element);
|
|
173
|
+
if (!type) {
|
|
174
|
+
if (element.name === "FunctionImport" /* Edm.FunctionImport */) {
|
|
175
|
+
// OData V2: FunctionImport
|
|
176
|
+
type = (0, attribute_getters_1.getAttributeValue)('ReturnType', element);
|
|
177
|
+
}
|
|
178
|
+
else if (element.name === "NavigationProperty" /* Edm.NavigationProperty */) {
|
|
179
|
+
// OData V2: use association information to determine Type
|
|
180
|
+
type = getTypeForNavigationProperty(context, element);
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
const forAction = element.name === "Action" /* Edm.Action */ || element.name === "Function" /* Edm.Function */;
|
|
184
|
+
return createMetadataElementNodeForType(context, element, type, forAction);
|
|
185
|
+
}
|
|
186
|
+
/**
|
|
187
|
+
* Calculates type for navigation property based on association information.
|
|
188
|
+
*
|
|
189
|
+
* @param context context
|
|
190
|
+
* @param element nav property XML element
|
|
191
|
+
* @returns type or undefined
|
|
192
|
+
*/
|
|
193
|
+
function getTypeForNavigationProperty(context, element) {
|
|
194
|
+
const relationship = attributeValueToFullyQualifiedName('Relationship', context.aliasMap, context.namespace, element);
|
|
195
|
+
if (!relationship) {
|
|
196
|
+
return undefined;
|
|
197
|
+
}
|
|
198
|
+
const associationName = relationship.split('.').pop();
|
|
199
|
+
if (!associationName) {
|
|
200
|
+
return undefined;
|
|
201
|
+
}
|
|
202
|
+
const association = context.associationMap[associationName];
|
|
203
|
+
if (!association) {
|
|
204
|
+
return undefined;
|
|
205
|
+
}
|
|
206
|
+
const toRole = attributeValueToFullyQualifiedName('ToRole', context.aliasMap, context.namespace, element);
|
|
207
|
+
if (!toRole) {
|
|
208
|
+
return undefined;
|
|
209
|
+
}
|
|
210
|
+
const role = association[toRole];
|
|
211
|
+
if (role === null || role === void 0 ? void 0 : role.type) {
|
|
212
|
+
return role.multiplicity === '*' ? `Collection(${role.type})` : role.type;
|
|
213
|
+
}
|
|
214
|
+
return undefined;
|
|
215
|
+
}
|
|
216
|
+
/**
|
|
217
|
+
* @param context Conversion context
|
|
218
|
+
* @param element Source XML element
|
|
219
|
+
* @param type Fully qualified type name
|
|
220
|
+
* @param forAction Indicates if overloads should be checked
|
|
221
|
+
* @returns matching MetadataElement if it exists for the given XML element
|
|
222
|
+
*/
|
|
223
|
+
function createMetadataElementNodeForType(context, element, type, forAction = false) {
|
|
224
|
+
var _a, _b, _c;
|
|
225
|
+
if (element.name === null) {
|
|
226
|
+
return undefined;
|
|
227
|
+
}
|
|
228
|
+
// build metadata element
|
|
229
|
+
const metadataElementProperties = {
|
|
230
|
+
isAnnotatable: true,
|
|
231
|
+
kind: element.name,
|
|
232
|
+
name: getMetadataElementName(context, element, forAction),
|
|
233
|
+
isCollectionValued: !!(type === null || type === void 0 ? void 0 : type.startsWith('Collection(')) || element.name === "EntitySet" /* Edm.EntitySet */,
|
|
234
|
+
isComplexType: element.name === "ComplexType" /* Edm.ComplexType */,
|
|
235
|
+
isEntityType: ENTITY_TYPE_NAMES.has((_a = element.name) !== null && _a !== void 0 ? _a : '')
|
|
236
|
+
};
|
|
237
|
+
if (element.name === "EntityType" /* Edm.EntityType */) {
|
|
238
|
+
const keys = getKeys(element);
|
|
239
|
+
if (keys === null || keys === void 0 ? void 0 : keys.length) {
|
|
240
|
+
metadataElementProperties.keys = keys;
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
// adjust metadata element based on type information
|
|
244
|
+
const functionImportV2Nodes = (_b = adjustMetadataElement(context, element, type, metadataElementProperties)) !== null && _b !== void 0 ? _b : [];
|
|
245
|
+
const v2ActionFor = attributeValueToFullyQualifiedName('sap:action-for', context.aliasMap, context.namespace, element);
|
|
246
|
+
if ("FunctionImport" /* Edm.FunctionImport */ === element.name && v2ActionFor) {
|
|
247
|
+
// generate binding parameter sub node with name '_it'
|
|
248
|
+
const bindingParameterProperties = {
|
|
249
|
+
isAnnotatable: false,
|
|
250
|
+
kind: "Parameter" /* Edm.Parameter */,
|
|
251
|
+
name: '_it',
|
|
252
|
+
isCollectionValued: false,
|
|
253
|
+
isComplexType: false,
|
|
254
|
+
isEntityType: true,
|
|
255
|
+
structuredType: v2ActionFor
|
|
256
|
+
};
|
|
257
|
+
const attributePosition = (_c = (0, attribute_getters_1.getElementAttributeByName)('sap:action-for', element)) === null || _c === void 0 ? void 0 : _c.position;
|
|
258
|
+
const bindingParameterRange = (0, range_1.transformElementRange)(attributePosition !== null && attributePosition !== void 0 ? attributePosition : element.position, element);
|
|
259
|
+
functionImportV2Nodes.push(Object.assign({ path: `${context.parentPath}/${metadataElementProperties.name}/${bindingParameterProperties.name}`, location: bindingParameterRange ? odata_annotation_core_1.Location.create(context.uri, bindingParameterRange) : undefined, content: [] }, bindingParameterProperties));
|
|
260
|
+
}
|
|
261
|
+
const range = (0, range_1.transformElementRange)(element.position, element);
|
|
262
|
+
return Object.assign({ path: context.parentPath
|
|
263
|
+
? `${context.parentPath}/${metadataElementProperties.name}`
|
|
264
|
+
: metadataElementProperties.name, location: range ? odata_annotation_core_1.Location.create(context.uri, range) : undefined, content: functionImportV2Nodes }, metadataElementProperties);
|
|
265
|
+
}
|
|
266
|
+
/**
|
|
267
|
+
* Creates metadata element name.
|
|
268
|
+
*
|
|
269
|
+
* @param context context
|
|
270
|
+
* @param element XML element
|
|
271
|
+
* @param forAction boolen flag indicating processing of action element
|
|
272
|
+
* @returns metadata element name
|
|
273
|
+
*/
|
|
274
|
+
function getMetadataElementName(context, element, forAction) {
|
|
275
|
+
var _a;
|
|
276
|
+
// determine metadata element name
|
|
277
|
+
let metadataElementName = (0, attribute_getters_1.getAttributeValue)('Name', element);
|
|
278
|
+
if (forAction) {
|
|
279
|
+
if (element.name === "Action" /* Edm.Action */ && (0, attribute_getters_1.getAttributeValue)('IsBound', element) !== 'true') {
|
|
280
|
+
metadataElementName += '()'; // unbound actions do not support overloading
|
|
281
|
+
}
|
|
282
|
+
else {
|
|
283
|
+
metadataElementName = getOverloadName(context, element);
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
if (METADATA_ROOT_TYPE_NAMES.has((_a = element.name) !== null && _a !== void 0 ? _a : '') && context.namespace) {
|
|
287
|
+
metadataElementName = context.namespace + '.' + metadataElementName;
|
|
288
|
+
}
|
|
289
|
+
else if (element.name === "ReturnType" /* Edm.ReturnType */) {
|
|
290
|
+
metadataElementName = '$ReturnType';
|
|
291
|
+
}
|
|
292
|
+
return metadataElementName;
|
|
293
|
+
}
|
|
294
|
+
/**
|
|
295
|
+
* Returns primitive type name based on current type and element name.
|
|
296
|
+
*
|
|
297
|
+
* @param typeName type name
|
|
298
|
+
* @param baseTypeName base type name
|
|
299
|
+
* @param elementName element name
|
|
300
|
+
* @returns primitive type name
|
|
301
|
+
*/
|
|
302
|
+
function getPrimitiveTypeName(typeName, baseTypeName, elementName) {
|
|
303
|
+
let edmPrimitiveType = '';
|
|
304
|
+
if (typeName.startsWith('Edm.')) {
|
|
305
|
+
edmPrimitiveType = typeName; // original types namespace is Edm
|
|
306
|
+
}
|
|
307
|
+
else if (baseTypeName !== EDM_COMPLEX_TYPE &&
|
|
308
|
+
baseTypeName !== EDM_ENTITY_TYPE &&
|
|
309
|
+
elementName !== "FunctionImport" /* Edm.FunctionImport */ &&
|
|
310
|
+
elementName !== "ActionImport" /* Edm.ActionImport */) {
|
|
311
|
+
// original type is defined in metadata but based on a primitive type
|
|
312
|
+
edmPrimitiveType = baseTypeName;
|
|
313
|
+
}
|
|
314
|
+
return edmPrimitiveType;
|
|
315
|
+
}
|
|
316
|
+
/**
|
|
317
|
+
* Adjusts medatata element properties and returns V2 function import md nodes (in case of FunctionImport element) or empty array.
|
|
318
|
+
*
|
|
319
|
+
* @param context context
|
|
320
|
+
* @param element element
|
|
321
|
+
* @param type type
|
|
322
|
+
* @param metadataElementProperties md element properties
|
|
323
|
+
* @returns V2 function import md nodes
|
|
324
|
+
*/
|
|
325
|
+
function adjustMetadataElement(context, element, type, metadataElementProperties) {
|
|
326
|
+
var _a;
|
|
327
|
+
/**
|
|
328
|
+
* Converts to singular type name.
|
|
329
|
+
*
|
|
330
|
+
* @param fqTypeName Fully qualified name for a type.
|
|
331
|
+
* @returns singular type name.
|
|
332
|
+
*/
|
|
333
|
+
function getTypeName(fqTypeName) {
|
|
334
|
+
// links always go to entityTypes/complexTypes/functions or actions, which are defined as direct container children
|
|
335
|
+
// --> use fully qualified name as path with single segment (strip Collection())
|
|
336
|
+
return fqTypeName.startsWith('Collection(') ? fqTypeName.slice(11, -1) : fqTypeName;
|
|
337
|
+
}
|
|
338
|
+
if (!type) {
|
|
339
|
+
return undefined;
|
|
340
|
+
}
|
|
341
|
+
const typeName = getTypeName(type);
|
|
342
|
+
const baseTypeName = context.typeMap[typeName] || typeName;
|
|
343
|
+
// primitive type name
|
|
344
|
+
const edmPrimitiveType = getPrimitiveTypeName(typeName, baseTypeName, element.name);
|
|
345
|
+
if (edmPrimitiveType && element.name !== "FunctionImport" /* Edm.FunctionImport */) {
|
|
346
|
+
metadataElementProperties.edmPrimitiveType = edmPrimitiveType;
|
|
347
|
+
}
|
|
348
|
+
// structured type name
|
|
349
|
+
handleStructuredTypeElement(element, typeName, baseTypeName, metadataElementProperties);
|
|
350
|
+
// function import
|
|
351
|
+
if ("FunctionImport" /* Edm.FunctionImport */ === element.name && (0, attribute_getters_1.getAttributeValue)('ReturnType', element)) {
|
|
352
|
+
const functionImportV2Nodes = [];
|
|
353
|
+
const returnTypeProperties = getReturnTypeProperties(baseTypeName, type, typeName, edmPrimitiveType);
|
|
354
|
+
const attributePosition = (_a = (0, attribute_getters_1.getElementAttributeByName)('ReturnType', element)) === null || _a === void 0 ? void 0 : _a.position;
|
|
355
|
+
const returnRange = (0, range_1.transformElementRange)(attributePosition !== null && attributePosition !== void 0 ? attributePosition : element.position, element);
|
|
356
|
+
functionImportV2Nodes.push(Object.assign({ path: `${context.parentPath}/${metadataElementProperties.name}/${returnTypeProperties.name}`, location: returnRange ? odata_annotation_core_1.Location.create(context.uri, returnRange) : undefined, content: [] }, returnTypeProperties));
|
|
357
|
+
return functionImportV2Nodes;
|
|
358
|
+
}
|
|
359
|
+
return undefined;
|
|
360
|
+
}
|
|
361
|
+
/**
|
|
362
|
+
*
|
|
363
|
+
* @param element
|
|
364
|
+
* @param typeName
|
|
365
|
+
* @param baseTypeName
|
|
366
|
+
* @param metadataElementProperties
|
|
367
|
+
*/
|
|
368
|
+
function handleStructuredTypeElement(element, typeName, baseTypeName, metadataElementProperties) {
|
|
369
|
+
var _a, _b;
|
|
370
|
+
if (STRUCTURED_TYPE_NAMES.has((_a = element.name) !== null && _a !== void 0 ? _a : '') &&
|
|
371
|
+
!(0, attribute_getters_1.getAttributeValue)('ReturnType', element) // exclude V2 FunctionImports
|
|
372
|
+
) {
|
|
373
|
+
// type name contains reference to entityType, function or action
|
|
374
|
+
metadataElementProperties.structuredType = typeName;
|
|
375
|
+
}
|
|
376
|
+
else if (PARAMETER_TYPE_NAMES.has((_b = element.name) !== null && _b !== void 0 ? _b : '')) {
|
|
377
|
+
// handle property, parameter or returnType based on entity or complex type
|
|
378
|
+
if (baseTypeName === EDM_COMPLEX_TYPE) {
|
|
379
|
+
metadataElementProperties.isComplexType = true;
|
|
380
|
+
metadataElementProperties.structuredType = typeName;
|
|
381
|
+
}
|
|
382
|
+
else if (baseTypeName === EDM_ENTITY_TYPE) {
|
|
383
|
+
metadataElementProperties.isEntityType = true;
|
|
384
|
+
metadataElementProperties.structuredType = typeName;
|
|
385
|
+
}
|
|
386
|
+
}
|
|
387
|
+
}
|
|
388
|
+
/**
|
|
389
|
+
*
|
|
390
|
+
* @param baseTypeName
|
|
391
|
+
* @param type
|
|
392
|
+
* @param typeName
|
|
393
|
+
* @param edmPrimitiveType
|
|
394
|
+
* @returns
|
|
395
|
+
*/
|
|
396
|
+
function getReturnTypeProperties(baseTypeName, type, typeName, edmPrimitiveType) {
|
|
397
|
+
// FunctionImport in Data V2: type contains ReturnType attribute - build sub node for it
|
|
398
|
+
const returnTypeProperties = {
|
|
399
|
+
isAnnotatable: true,
|
|
400
|
+
kind: "ReturnType" /* Edm.ReturnType */,
|
|
401
|
+
name: '$ReturnType',
|
|
402
|
+
isCollectionValued: type.startsWith('Collection('),
|
|
403
|
+
isComplexType: baseTypeName === EDM_COMPLEX_TYPE,
|
|
404
|
+
isEntityType: baseTypeName === EDM_ENTITY_TYPE
|
|
405
|
+
};
|
|
406
|
+
if (edmPrimitiveType) {
|
|
407
|
+
returnTypeProperties.edmPrimitiveType = edmPrimitiveType;
|
|
408
|
+
}
|
|
409
|
+
if ([EDM_ENTITY_TYPE, EDM_COMPLEX_TYPE].includes(baseTypeName)) {
|
|
410
|
+
returnTypeProperties.structuredType = typeName;
|
|
411
|
+
}
|
|
412
|
+
return returnTypeProperties;
|
|
413
|
+
}
|
|
414
|
+
/**
|
|
415
|
+
* Returns overload name.
|
|
416
|
+
*
|
|
417
|
+
* @param context Conversion context
|
|
418
|
+
* @param element Source XML element
|
|
419
|
+
* @returns matching MetadataElement if it exists for the given XML element
|
|
420
|
+
*/
|
|
421
|
+
function getOverloadName(context, element) {
|
|
422
|
+
// generate overload name MyFunction(MySchema.MyBindingParamType,First.NonBinding.ParamType)
|
|
423
|
+
const name = (0, attribute_getters_1.getAttributeValue)('Name', element);
|
|
424
|
+
let parameterSubElements = element.subElements.filter((subElement) => subElement.name === "Parameter" /* Edm.Parameter */);
|
|
425
|
+
if (element.name === "Action" /* Edm.Action */) {
|
|
426
|
+
parameterSubElements = parameterSubElements.slice(0, 1);
|
|
427
|
+
}
|
|
428
|
+
const parameterTypes = parameterSubElements.map((parameterElement) => attributeValueToFullyQualifiedName('Type', context.aliasMap, context.namespace, parameterElement));
|
|
429
|
+
return name + '(' + parameterTypes.join(',') + ')';
|
|
430
|
+
}
|
|
431
|
+
/**
|
|
432
|
+
* Return names of child key elements.
|
|
433
|
+
*
|
|
434
|
+
* @param element Source XML element
|
|
435
|
+
* @returns an array of PropertyRef names
|
|
436
|
+
*/
|
|
437
|
+
function getKeys(element) {
|
|
438
|
+
// find all PropertyRef sub elements of Key sub element and collect their Name attribute
|
|
439
|
+
// (there should be at most a single 'Key' sub element)
|
|
440
|
+
let keys = [];
|
|
441
|
+
const keyElements = (element.subElements || []).filter((subElement) => subElement.name === 'Key');
|
|
442
|
+
if (keyElements === null || keyElements === void 0 ? void 0 : keyElements.length) {
|
|
443
|
+
keys = keyElements[0].subElements
|
|
444
|
+
.filter((subElement) => subElement.name === 'PropertyRef')
|
|
445
|
+
.map((propRefElement) => (0, attribute_getters_1.getAttributeValue)('Name', propRefElement));
|
|
446
|
+
}
|
|
447
|
+
return keys;
|
|
448
|
+
}
|
|
449
|
+
/**
|
|
450
|
+
* Parses and converts attribute value to fully qualified name.
|
|
451
|
+
*
|
|
452
|
+
* @param attributeName
|
|
453
|
+
* @param namespaceMap
|
|
454
|
+
* @param currentNamespace
|
|
455
|
+
* @param element
|
|
456
|
+
* @returns fully qualified name or undefined
|
|
457
|
+
*/
|
|
458
|
+
function attributeValueToFullyQualifiedName(attributeName, namespaceMap, currentNamespace, element) {
|
|
459
|
+
const attributeValue = (0, attribute_getters_1.getAttributeValue)(attributeName, element);
|
|
460
|
+
if (attributeValue === '') {
|
|
461
|
+
return undefined;
|
|
462
|
+
}
|
|
463
|
+
const parsedIdentifier = (0, odata_annotation_core_1.parseIdentifier)(attributeValue);
|
|
464
|
+
const fullyQualifiedName = (0, odata_annotation_core_1.toFullyQualifiedName)(namespaceMap, currentNamespace, parsedIdentifier);
|
|
465
|
+
return fullyQualifiedName !== null && fullyQualifiedName !== void 0 ? fullyQualifiedName : attributeValue;
|
|
466
|
+
}
|
|
467
|
+
/**
|
|
468
|
+
* Creates namespace map from given container XML element.
|
|
469
|
+
*
|
|
470
|
+
* @param element container XML element
|
|
471
|
+
* @returns namespace map
|
|
472
|
+
*/
|
|
473
|
+
function getNamespaceMap(element) {
|
|
474
|
+
var _a, _b;
|
|
475
|
+
const references = (0, element_getters_1.getElementsWithName)('Reference', element);
|
|
476
|
+
const dataServices = (0, element_getters_1.getElementsWithName)('DataServices', element);
|
|
477
|
+
const schemas = dataServices.length ? (0, element_getters_1.getElementsWithName)('Schema', dataServices[0]) : [];
|
|
478
|
+
const aliasMap = {};
|
|
479
|
+
const includes = references.reduce((acc, reference) => [...acc, ...(0, element_getters_1.getElementsWithName)('Include', reference)], []);
|
|
480
|
+
for (const namespaceElement of [...includes, ...schemas]) {
|
|
481
|
+
const namespace = (_a = (0, attribute_getters_1.getElementAttributeByName)('Namespace', namespaceElement)) === null || _a === void 0 ? void 0 : _a.value;
|
|
482
|
+
const alias = (_b = (0, attribute_getters_1.getElementAttributeByName)('Alias', namespaceElement)) === null || _b === void 0 ? void 0 : _b.value;
|
|
483
|
+
if (namespace) {
|
|
484
|
+
aliasMap[namespace] = namespace;
|
|
485
|
+
if (alias) {
|
|
486
|
+
aliasMap[alias] = namespace;
|
|
487
|
+
}
|
|
488
|
+
}
|
|
489
|
+
}
|
|
490
|
+
return aliasMap;
|
|
491
|
+
}
|
|
492
|
+
/**
|
|
493
|
+
* Creates association data object from given association ends XML elements.
|
|
494
|
+
*
|
|
495
|
+
* @param ends XML elements representing association ends
|
|
496
|
+
* @param aliasMap alias map
|
|
497
|
+
* @param currentNamespace namespace
|
|
498
|
+
* @returns association data object
|
|
499
|
+
*/
|
|
500
|
+
function createAssociation(ends, aliasMap, currentNamespace) {
|
|
501
|
+
const association = {};
|
|
502
|
+
for (const end of ends) {
|
|
503
|
+
const role = attributeValueToFullyQualifiedName('Role', aliasMap, currentNamespace, end);
|
|
504
|
+
const type = attributeValueToFullyQualifiedName('Type', aliasMap, currentNamespace, end);
|
|
505
|
+
const multiplicity = (0, attribute_getters_1.getAttributeValue)('Multiplicity', end);
|
|
506
|
+
if (role && type && multiplicity) {
|
|
507
|
+
association[role] = {
|
|
508
|
+
type,
|
|
509
|
+
multiplicity
|
|
510
|
+
};
|
|
511
|
+
}
|
|
512
|
+
}
|
|
513
|
+
return association;
|
|
514
|
+
}
|
|
515
|
+
//# sourceMappingURL=metadata.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"metadata.js","sourceRoot":"","sources":["../../src/parser/metadata.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import type { XMLElement, SourcePosition } from '@xml-tools/ast';
|
|
2
|
+
import { Range } from '@sap-ux/odata-annotation-core';
|
|
3
|
+
/**
|
|
4
|
+
* Converts @xml-tools/ast ranges where lines and columns start with 1.
|
|
5
|
+
*
|
|
6
|
+
* @param position @xml-tools/ast range.
|
|
7
|
+
* @returns Range where lines and columns start with 0.
|
|
8
|
+
*/
|
|
9
|
+
export declare function transformRange(position: SourcePosition | undefined): Range | undefined;
|
|
10
|
+
/**
|
|
11
|
+
* Converts @xml-tools/ast ranges where lines and columns start with 1.
|
|
12
|
+
* This can only be used with XML element, but it offers more accurate range in case of syntax errors.
|
|
13
|
+
*
|
|
14
|
+
* @param position @xml-tools/ast range.
|
|
15
|
+
* @param element XML element for which the range belongs. Using different position may lead to unexpected behavior.
|
|
16
|
+
* @returns Range where lines and columns start with 0.
|
|
17
|
+
*/
|
|
18
|
+
export declare function transformElementRange(position: SourcePosition | undefined, element: XMLElement): Range | undefined;
|
|
19
|
+
/**
|
|
20
|
+
* Creates a range between two SourcePositions.
|
|
21
|
+
*
|
|
22
|
+
* @param begin SourcePosition from which the end will be used
|
|
23
|
+
* @param end SourcePosition from which the start will be used
|
|
24
|
+
* @returns Range between the begin and end positions
|
|
25
|
+
*/
|
|
26
|
+
export declare function getGapRangeBetween(begin: SourcePosition | undefined, end: SourcePosition | undefined): Range | undefined;
|
|
27
|
+
/**
|
|
28
|
+
* Mutates range by the given parameters.
|
|
29
|
+
*
|
|
30
|
+
* @param range Range object that will be changed.
|
|
31
|
+
* @param startColAdjust Number which will be added to the start positions column.
|
|
32
|
+
* @param endColAdjust Number which will be added to the end position column.
|
|
33
|
+
* @param startLineAdjust Number which will be added to the start position line.
|
|
34
|
+
* @param endLineAdjust Number which will be added to the end position line.
|
|
35
|
+
*/
|
|
36
|
+
export declare function adjustRange(range: Range, startColAdjust: number, endColAdjust: number, startLineAdjust?: number, endLineAdjust?: number): void;
|
|
37
|
+
//# sourceMappingURL=range.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"range.d.ts","sourceRoot":"","sources":["../../src/parser/range.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AACjE,OAAO,EAAE,KAAK,EAAE,MAAM,+BAA+B,CAAC;AAEtD;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,cAAc,GAAG,SAAS,GAAG,KAAK,GAAG,SAAS,CAItF;AAED;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,cAAc,GAAG,SAAS,EAAE,OAAO,EAAE,UAAU,GAAG,KAAK,GAAG,SAAS,CAQlH;AAED;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAC9B,KAAK,EAAE,cAAc,GAAG,SAAS,EACjC,GAAG,EAAE,cAAc,GAAG,SAAS,GAChC,KAAK,GAAG,SAAS,CAKnB;AAED;;;;;;;;GAQG;AACH,wBAAgB,WAAW,CACvB,KAAK,EAAE,KAAK,EACZ,cAAc,EAAE,MAAM,EACtB,YAAY,EAAE,MAAM,EACpB,eAAe,SAAI,EACnB,aAAa,SAAI,GAClB,IAAI,CAON"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.adjustRange = exports.getGapRangeBetween = exports.transformElementRange = exports.transformRange = void 0;
|
|
4
|
+
const odata_annotation_core_1 = require("@sap-ux/odata-annotation-core");
|
|
5
|
+
/**
|
|
6
|
+
* Converts @xml-tools/ast ranges where lines and columns start with 1.
|
|
7
|
+
*
|
|
8
|
+
* @param position @xml-tools/ast range.
|
|
9
|
+
* @returns Range where lines and columns start with 0.
|
|
10
|
+
*/
|
|
11
|
+
function transformRange(position) {
|
|
12
|
+
return position
|
|
13
|
+
? odata_annotation_core_1.Range.create(position.startLine - 1, position.startColumn - 1, position.endLine - 1, position.endColumn)
|
|
14
|
+
: undefined;
|
|
15
|
+
}
|
|
16
|
+
exports.transformRange = transformRange;
|
|
17
|
+
/**
|
|
18
|
+
* Converts @xml-tools/ast ranges where lines and columns start with 1.
|
|
19
|
+
* This can only be used with XML element, but it offers more accurate range in case of syntax errors.
|
|
20
|
+
*
|
|
21
|
+
* @param position @xml-tools/ast range.
|
|
22
|
+
* @param element XML element for which the range belongs. Using different position may lead to unexpected behavior.
|
|
23
|
+
* @returns Range where lines and columns start with 0.
|
|
24
|
+
*/
|
|
25
|
+
function transformElementRange(position, element) {
|
|
26
|
+
const range = transformRange(position);
|
|
27
|
+
if (range && element.syntax.guessedAttributesRange) {
|
|
28
|
+
// guessed attribute range only has offset and we do not know how to resolve them here.
|
|
29
|
+
// heuristic to support code completion for attribute names that are in a tag, which is not closed
|
|
30
|
+
range.end.character++;
|
|
31
|
+
}
|
|
32
|
+
return range;
|
|
33
|
+
}
|
|
34
|
+
exports.transformElementRange = transformElementRange;
|
|
35
|
+
/**
|
|
36
|
+
* Creates a range between two SourcePositions.
|
|
37
|
+
*
|
|
38
|
+
* @param begin SourcePosition from which the end will be used
|
|
39
|
+
* @param end SourcePosition from which the start will be used
|
|
40
|
+
* @returns Range between the begin and end positions
|
|
41
|
+
*/
|
|
42
|
+
function getGapRangeBetween(begin, end) {
|
|
43
|
+
if (begin && end) {
|
|
44
|
+
return odata_annotation_core_1.Range.create(begin.endLine - 1, begin.endColumn, end.startLine - 1, end.startColumn - 3);
|
|
45
|
+
}
|
|
46
|
+
return undefined;
|
|
47
|
+
}
|
|
48
|
+
exports.getGapRangeBetween = getGapRangeBetween;
|
|
49
|
+
/**
|
|
50
|
+
* Mutates range by the given parameters.
|
|
51
|
+
*
|
|
52
|
+
* @param range Range object that will be changed.
|
|
53
|
+
* @param startColAdjust Number which will be added to the start positions column.
|
|
54
|
+
* @param endColAdjust Number which will be added to the end position column.
|
|
55
|
+
* @param startLineAdjust Number which will be added to the start position line.
|
|
56
|
+
* @param endLineAdjust Number which will be added to the end position line.
|
|
57
|
+
*/
|
|
58
|
+
function adjustRange(range, startColAdjust, endColAdjust, startLineAdjust = 0, endLineAdjust = 0) {
|
|
59
|
+
if (range) {
|
|
60
|
+
range.start.line += startLineAdjust;
|
|
61
|
+
range.start.character += startColAdjust;
|
|
62
|
+
range.end.line += endLineAdjust;
|
|
63
|
+
range.end.character += endColAdjust;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
exports.adjustRange = adjustRange;
|
|
67
|
+
//# sourceMappingURL=range.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"range.js","sourceRoot":"","sources":["../../src/parser/range.ts"],"names":[],"mappings":";;;AACA,yEAAsD;AAEtD;;;;;GAKG;AACH,SAAgB,cAAc,CAAC,QAAoC;IAC/D,OAAO,QAAQ;QACX,CAAC,CAAC,6BAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,GAAG,CAAC,EAAE,QAAQ,CAAC,WAAW,GAAG,CAAC,EAAE,QAAQ,CAAC,OAAO,GAAG,CAAC,EAAE,QAAQ,CAAC,SAAS,CAAC;QAC1G,CAAC,CAAC,SAAS,CAAC;AACpB,CAAC;AAJD,wCAIC;AAED;;;;;;;GAOG;AACH,SAAgB,qBAAqB,CAAC,QAAoC,EAAE,OAAmB;IAC3F,MAAM,KAAK,GAAG,cAAc,CAAC,QAAQ,CAAC,CAAC;IACvC,IAAI,KAAK,IAAI,OAAO,CAAC,MAAM,CAAC,sBAAsB,EAAE;QAChD,uFAAuF;QACvF,kGAAkG;QAClG,KAAK,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC;KACzB;IACD,OAAO,KAAK,CAAC;AACjB,CAAC;AARD,sDAQC;AAED;;;;;;GAMG;AACH,SAAgB,kBAAkB,CAC9B,KAAiC,EACjC,GAA+B;IAE/B,IAAI,KAAK,IAAI,GAAG,EAAE;QACd,OAAO,6BAAK,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,GAAG,CAAC,EAAE,KAAK,CAAC,SAAS,EAAE,GAAG,CAAC,SAAS,GAAG,CAAC,EAAE,GAAG,CAAC,WAAW,GAAG,CAAC,CAAC,CAAC;KACnG;IACD,OAAO,SAAS,CAAC;AACrB,CAAC;AARD,gDAQC;AAED;;;;;;;;GAQG;AACH,SAAgB,WAAW,CACvB,KAAY,EACZ,cAAsB,EACtB,YAAoB,EACpB,eAAe,GAAG,CAAC,EACnB,aAAa,GAAG,CAAC;IAEjB,IAAI,KAAK,EAAE;QACP,KAAK,CAAC,KAAK,CAAC,IAAI,IAAI,eAAe,CAAC;QACpC,KAAK,CAAC,KAAK,CAAC,SAAS,IAAI,cAAc,CAAC;QACxC,KAAK,CAAC,GAAG,CAAC,IAAI,IAAI,aAAa,CAAC;QAChC,KAAK,CAAC,GAAG,CAAC,SAAS,IAAI,YAAY,CAAC;KACvC;AACL,CAAC;AAbD,kCAaC"}
|