@sap-ux/fiori-annotation-api 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +201 -0
- package/Readme.md +35 -0
- package/dist/avt/annotations.d.ts +72 -0
- package/dist/avt/annotations.d.ts.map +1 -0
- package/dist/avt/annotations.js +508 -0
- package/dist/avt/annotations.js.map +1 -0
- package/dist/avt/expressions.d.ts +13 -0
- package/dist/avt/expressions.d.ts.map +1 -0
- package/dist/avt/expressions.js +34 -0
- package/dist/avt/expressions.js.map +1 -0
- package/dist/avt/find.d.ts +39 -0
- package/dist/avt/find.d.ts.map +1 -0
- package/dist/avt/find.js +130 -0
- package/dist/avt/find.js.map +1 -0
- package/dist/avt/index.d.ts +9 -0
- package/dist/avt/index.d.ts.map +1 -0
- package/dist/avt/index.js +32 -0
- package/dist/avt/index.js.map +1 -0
- package/dist/avt/metadata.d.ts +10 -0
- package/dist/avt/metadata.d.ts.map +1 -0
- package/dist/avt/metadata.js +346 -0
- package/dist/avt/metadata.js.map +1 -0
- package/dist/avt/pointer.d.ts +12 -0
- package/dist/avt/pointer.d.ts.map +1 -0
- package/dist/avt/pointer.js +188 -0
- package/dist/avt/pointer.js.map +1 -0
- package/dist/avt/to-internal.d.ts +81 -0
- package/dist/avt/to-internal.d.ts.map +1 -0
- package/dist/avt/to-internal.js +340 -0
- package/dist/avt/to-internal.js.map +1 -0
- package/dist/avt/types.d.ts +3 -0
- package/dist/avt/types.d.ts.map +1 -0
- package/dist/avt/types.js +3 -0
- package/dist/avt/types.js.map +1 -0
- package/dist/avt/utils.d.ts +61 -0
- package/dist/avt/utils.d.ts.map +1 -0
- package/dist/avt/utils.js +87 -0
- package/dist/avt/utils.js.map +1 -0
- package/dist/cds/adapter.d.ts +112 -0
- package/dist/cds/adapter.d.ts.map +1 -0
- package/dist/cds/adapter.js +703 -0
- package/dist/cds/adapter.js.map +1 -0
- package/dist/cds/cds-compiler-tokens.d.ts +30 -0
- package/dist/cds/cds-compiler-tokens.d.ts.map +1 -0
- package/dist/cds/cds-compiler-tokens.js +57 -0
- package/dist/cds/cds-compiler-tokens.js.map +1 -0
- package/dist/cds/change.d.ts +347 -0
- package/dist/cds/change.d.ts.map +1 -0
- package/dist/cds/change.js +232 -0
- package/dist/cds/change.js.map +1 -0
- package/dist/cds/comments.d.ts +15 -0
- package/dist/cds/comments.d.ts.map +1 -0
- package/dist/cds/comments.js +56 -0
- package/dist/cds/comments.js.map +1 -0
- package/dist/cds/deletion.d.ts +59 -0
- package/dist/cds/deletion.d.ts.map +1 -0
- package/dist/cds/deletion.js +821 -0
- package/dist/cds/deletion.js.map +1 -0
- package/dist/cds/document.d.ts +52 -0
- package/dist/cds/document.d.ts.map +1 -0
- package/dist/cds/document.js +98 -0
- package/dist/cds/document.js.map +1 -0
- package/dist/cds/indent.d.ts +20 -0
- package/dist/cds/indent.d.ts.map +1 -0
- package/dist/cds/indent.js +86 -0
- package/dist/cds/indent.js.map +1 -0
- package/dist/cds/index.d.ts +3 -0
- package/dist/cds/index.d.ts.map +1 -0
- package/dist/cds/index.js +21 -0
- package/dist/cds/index.js.map +1 -0
- package/dist/cds/pointer.d.ts +23 -0
- package/dist/cds/pointer.d.ts.map +1 -0
- package/dist/cds/pointer.js +438 -0
- package/dist/cds/pointer.js.map +1 -0
- package/dist/cds/preprocessor.d.ts +12 -0
- package/dist/cds/preprocessor.d.ts.map +1 -0
- package/dist/cds/preprocessor.js +338 -0
- package/dist/cds/preprocessor.js.map +1 -0
- package/dist/cds/references.d.ts +35 -0
- package/dist/cds/references.d.ts.map +1 -0
- package/dist/cds/references.js +413 -0
- package/dist/cds/references.js.map +1 -0
- package/dist/cds/service.d.ts +11 -0
- package/dist/cds/service.d.ts.map +1 -0
- package/dist/cds/service.js +37 -0
- package/dist/cds/service.js.map +1 -0
- package/dist/cds/utils.d.ts +35 -0
- package/dist/cds/utils.d.ts.map +1 -0
- package/dist/cds/utils.js +75 -0
- package/dist/cds/utils.js.map +1 -0
- package/dist/cds/writer.d.ts +104 -0
- package/dist/cds/writer.d.ts.map +1 -0
- package/dist/cds/writer.js +1086 -0
- package/dist/cds/writer.js.map +1 -0
- package/dist/change-converter.d.ts +54 -0
- package/dist/change-converter.d.ts.map +1 -0
- package/dist/change-converter.js +639 -0
- package/dist/change-converter.js.map +1 -0
- package/dist/error.d.ts +35 -0
- package/dist/error.d.ts.map +1 -0
- package/dist/error.js +64 -0
- package/dist/error.js.map +1 -0
- package/dist/fiori-service.d.ts +130 -0
- package/dist/fiori-service.d.ts.map +1 -0
- package/dist/fiori-service.js +362 -0
- package/dist/fiori-service.js.map +1 -0
- package/dist/index.d.ts +5 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +25 -0
- package/dist/index.js.map +1 -0
- package/dist/protected.d.ts +3 -0
- package/dist/protected.d.ts.map +1 -0
- package/dist/protected.js +11 -0
- package/dist/protected.js.map +1 -0
- package/dist/types/adapter.d.ts +46 -0
- package/dist/types/adapter.d.ts.map +1 -0
- package/dist/types/adapter.js +3 -0
- package/dist/types/adapter.js.map +1 -0
- package/dist/types/change.d.ts +187 -0
- package/dist/types/change.d.ts.map +1 -0
- package/dist/types/change.js +52 -0
- package/dist/types/change.js.map +1 -0
- package/dist/types/index.d.ts +7 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +33 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/internal-change.d.ts +98 -0
- package/dist/types/internal-change.d.ts.map +1 -0
- package/dist/types/internal-change.js +18 -0
- package/dist/types/internal-change.js.map +1 -0
- package/dist/types/project-info.d.ts +6 -0
- package/dist/types/project-info.d.ts.map +1 -0
- package/dist/types/project-info.js +3 -0
- package/dist/types/project-info.js.map +1 -0
- package/dist/types/service.d.ts +27 -0
- package/dist/types/service.d.ts.map +1 -0
- package/dist/types/service.js +3 -0
- package/dist/types/service.js.map +1 -0
- package/dist/types/text-file.d.ts +12 -0
- package/dist/types/text-file.d.ts.map +1 -0
- package/dist/types/text-file.js +3 -0
- package/dist/types/text-file.js.map +1 -0
- package/dist/utils/constants.d.ts +2 -0
- package/dist/utils/constants.d.ts.map +1 -0
- package/dist/utils/constants.js +24 -0
- package/dist/utils/constants.js.map +1 -0
- package/dist/utils/indent.d.ts +10 -0
- package/dist/utils/indent.d.ts.map +1 -0
- package/dist/utils/indent.js +36 -0
- package/dist/utils/indent.js.map +1 -0
- package/dist/utils/index.d.ts +7 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +16 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/path.d.ts +8 -0
- package/dist/utils/path.d.ts.map +1 -0
- package/dist/utils/path.js +31 -0
- package/dist/utils/path.js.map +1 -0
- package/dist/utils/pointer.d.ts +11 -0
- package/dist/utils/pointer.d.ts.map +1 -0
- package/dist/utils/pointer.js +26 -0
- package/dist/utils/pointer.js.map +1 -0
- package/dist/utils/reference.d.ts +10 -0
- package/dist/utils/reference.d.ts.map +1 -0
- package/dist/utils/reference.js +20 -0
- package/dist/utils/reference.js.map +1 -0
- package/dist/utils/text-edits.d.ts +12 -0
- package/dist/utils/text-edits.d.ts.map +1 -0
- package/dist/utils/text-edits.js +29 -0
- package/dist/utils/text-edits.js.map +1 -0
- package/dist/vocabularies.d.ts +11 -0
- package/dist/vocabularies.d.ts.map +1 -0
- package/dist/vocabularies.js +26 -0
- package/dist/vocabularies.js.map +1 -0
- package/dist/xml/adapter.d.ts +85 -0
- package/dist/xml/adapter.d.ts.map +1 -0
- package/dist/xml/adapter.js +579 -0
- package/dist/xml/adapter.js.map +1 -0
- package/dist/xml/changes.d.ts +117 -0
- package/dist/xml/changes.d.ts.map +1 -0
- package/dist/xml/changes.js +34 -0
- package/dist/xml/changes.js.map +1 -0
- package/dist/xml/comments.d.ts +17 -0
- package/dist/xml/comments.d.ts.map +1 -0
- package/dist/xml/comments.js +49 -0
- package/dist/xml/comments.js.map +1 -0
- package/dist/xml/document.d.ts +11 -0
- package/dist/xml/document.d.ts.map +1 -0
- package/dist/xml/document.js +3 -0
- package/dist/xml/document.js.map +1 -0
- package/dist/xml/index.d.ts +3 -0
- package/dist/xml/index.d.ts.map +1 -0
- package/dist/xml/index.js +8 -0
- package/dist/xml/index.js.map +1 -0
- package/dist/xml/pointer.d.ts +10 -0
- package/dist/xml/pointer.d.ts.map +1 -0
- package/dist/xml/pointer.js +29 -0
- package/dist/xml/pointer.js.map +1 -0
- package/dist/xml/references.d.ts +9 -0
- package/dist/xml/references.d.ts.map +1 -0
- package/dist/xml/references.js +87 -0
- package/dist/xml/references.js.map +1 -0
- package/dist/xml/service.d.ts +12 -0
- package/dist/xml/service.d.ts.map +1 -0
- package/dist/xml/service.js +55 -0
- package/dist/xml/service.js.map +1 -0
- package/dist/xml/writer.d.ts +39 -0
- package/dist/xml/writer.d.ts.map +1 -0
- package/dist/xml/writer.js +855 -0
- package/dist/xml/writer.js.map +1 -0
- package/package.json +47 -0
|
@@ -0,0 +1,413 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getMissingRefs = exports.resolvePath = exports.isAvailable = void 0;
|
|
4
|
+
const url_1 = require("url");
|
|
5
|
+
const path_1 = require("path");
|
|
6
|
+
const os_1 = require("os");
|
|
7
|
+
const odata_annotation_core_types_1 = require("@sap-ux/odata-annotation-core-types");
|
|
8
|
+
const odata_annotation_core_1 = require("@sap-ux/odata-annotation-core");
|
|
9
|
+
const error_1 = require("../error");
|
|
10
|
+
const utils_1 = require("./utils");
|
|
11
|
+
function buildDefinitionIndex(metadataService, files) {
|
|
12
|
+
/**
|
|
13
|
+
* Mapping annotation path to file uri where the annotation is defined
|
|
14
|
+
*/
|
|
15
|
+
const definitionIndex = new Map();
|
|
16
|
+
const virtualProperties = new Map();
|
|
17
|
+
for (const file of files) {
|
|
18
|
+
for (const target of file.targets) {
|
|
19
|
+
const metadataElement = metadataService.getMetadataElement(target.name);
|
|
20
|
+
if (!metadataElement) {
|
|
21
|
+
continue;
|
|
22
|
+
}
|
|
23
|
+
buildDefinitionIndexForTarget(definitionIndex, virtualProperties, metadataElement, target, file.uri);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
return { definitionIndex, virtualProperties };
|
|
27
|
+
}
|
|
28
|
+
function buildDefinitionIndexForTarget(definitionIndex, virtualProperties, metadataElement, target, fileUri) {
|
|
29
|
+
var _a;
|
|
30
|
+
for (const annotation of target.terms) {
|
|
31
|
+
const qualifier = (_a = annotation.attributes["Qualifier" /* Edm.Qualifier */]) === null || _a === void 0 ? void 0 : _a.value;
|
|
32
|
+
const termName = annotation.attributes["Term" /* Edm.Term */].value;
|
|
33
|
+
const suffix = qualifier ? `#${qualifier}` : '';
|
|
34
|
+
const path = `${metadataElement.path}/@${termName}${suffix}`;
|
|
35
|
+
if (annotation.range) {
|
|
36
|
+
// only consider previously existing annotations
|
|
37
|
+
registerReference(definitionIndex, fileUri, path);
|
|
38
|
+
collectAnnotations(definitionIndex, fileUri, path, annotation);
|
|
39
|
+
if (termName === 'Analytics.AggregatedProperties') {
|
|
40
|
+
const collection = annotation.content.find((element) => element.type === odata_annotation_core_types_1.ELEMENT_TYPE && element.name === "Collection" /* Edm.Collection */);
|
|
41
|
+
if (!collection) {
|
|
42
|
+
continue;
|
|
43
|
+
}
|
|
44
|
+
collectVirtualProperties(virtualProperties, fileUri, metadataElement, collection);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
function collectVirtualProperties(virtualProperties, fileUri, metadataElement, collection) {
|
|
50
|
+
for (const record of collection.content) {
|
|
51
|
+
if (record.type === odata_annotation_core_types_1.ELEMENT_TYPE && record.name === "Record" /* Edm.Record */) {
|
|
52
|
+
const nameElement = record.content.find((element) => {
|
|
53
|
+
var _a;
|
|
54
|
+
return element.type === odata_annotation_core_types_1.ELEMENT_TYPE &&
|
|
55
|
+
element.name === "PropertyValue" /* Edm.PropertyValue */ &&
|
|
56
|
+
((_a = element.attributes["Property" /* Edm.Property */]) === null || _a === void 0 ? void 0 : _a.value) === 'Name';
|
|
57
|
+
});
|
|
58
|
+
if (nameElement) {
|
|
59
|
+
const valueElement = nameElement.content.find((element) => element.type === odata_annotation_core_types_1.ELEMENT_TYPE && element.name === "String" /* Edm.String */);
|
|
60
|
+
if (valueElement) {
|
|
61
|
+
const textNode = valueElement.content.find((element) => element.type === odata_annotation_core_types_1.TEXT_TYPE);
|
|
62
|
+
virtualProperties.set(`${metadataElement.path}/${textNode === null || textNode === void 0 ? void 0 : textNode.text}`, fileUri);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
function collectAnnotations(definitionIndex, fileUri, prefix, element) {
|
|
69
|
+
for (const child of element.content) {
|
|
70
|
+
if (child.type !== 'element') {
|
|
71
|
+
continue;
|
|
72
|
+
}
|
|
73
|
+
if (child.name === "Annotation" /* Edm.Annotation */) {
|
|
74
|
+
traverseAnnotation(definitionIndex, fileUri, prefix, child);
|
|
75
|
+
}
|
|
76
|
+
else if (child.name === "Record" /* Edm.Record */) {
|
|
77
|
+
traverseRecord(definitionIndex, fileUri, prefix, child);
|
|
78
|
+
}
|
|
79
|
+
else if (child.name === "Collection" /* Edm.Collection */) {
|
|
80
|
+
traverseCollection(definitionIndex, fileUri, prefix, child);
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
function traverseCollection(definitionIndex, fileUri, prefix, collection) {
|
|
85
|
+
const elements = collection.content.filter((node) => node.type === odata_annotation_core_types_1.ELEMENT_TYPE);
|
|
86
|
+
for (let i = 0; i < elements.length; i++) {
|
|
87
|
+
const element = elements[i];
|
|
88
|
+
const path = `${prefix}/${i.toString()}`;
|
|
89
|
+
if (element.range) {
|
|
90
|
+
// only consider previously existing annotations
|
|
91
|
+
registerReference(definitionIndex, fileUri, path);
|
|
92
|
+
for (const grandChild of element.content) {
|
|
93
|
+
if (grandChild.type === 'element') {
|
|
94
|
+
collectAnnotations(definitionIndex, fileUri, path, grandChild);
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
function traverseRecord(definitionIndex, fileUri, prefix, element) {
|
|
101
|
+
var _a;
|
|
102
|
+
for (const property of element.content) {
|
|
103
|
+
if (property.type !== 'element' || property.name !== "PropertyValue" /* Edm.PropertyValue */) {
|
|
104
|
+
continue;
|
|
105
|
+
}
|
|
106
|
+
const name = (_a = property.attributes["Property" /* Edm.Property */]) === null || _a === void 0 ? void 0 : _a.value;
|
|
107
|
+
const suffix = name !== null && name !== void 0 ? name : '';
|
|
108
|
+
const path = `${prefix}/${suffix}`;
|
|
109
|
+
if (element.range) {
|
|
110
|
+
// only consider previously existing annotations
|
|
111
|
+
registerReference(definitionIndex, fileUri, path);
|
|
112
|
+
for (const grandChild of property.content) {
|
|
113
|
+
if (grandChild.type === 'element') {
|
|
114
|
+
collectAnnotations(definitionIndex, fileUri, path, grandChild);
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
function traverseAnnotation(definitionIndex, fileUri, prefix, element) {
|
|
121
|
+
var _a;
|
|
122
|
+
const qualifier = (_a = element.attributes["Qualifier" /* Edm.Qualifier */]) === null || _a === void 0 ? void 0 : _a.value;
|
|
123
|
+
const suffix = qualifier ? `#${qualifier}` : '';
|
|
124
|
+
const path = `${prefix}@${element.attributes["Term" /* Edm.Term */].value}${suffix}`;
|
|
125
|
+
if (element.range) {
|
|
126
|
+
// only consider previously existing annotations
|
|
127
|
+
registerReference(definitionIndex, fileUri, path);
|
|
128
|
+
collectAnnotations(definitionIndex, fileUri, path, element);
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
function registerReference(definitionIndex, fileUri, path) {
|
|
132
|
+
const entry = definitionIndex.get(path);
|
|
133
|
+
// We can't point to ghost files, we need to use the real url
|
|
134
|
+
const normalizedUri = fileUri.startsWith(odata_annotation_core_types_1.GHOST_FILENAME_PREFIX) ? fileUri.substring(1) : fileUri;
|
|
135
|
+
if (entry) {
|
|
136
|
+
entry.push(normalizedUri);
|
|
137
|
+
}
|
|
138
|
+
else {
|
|
139
|
+
definitionIndex.set(path, [normalizedUri]);
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
function getPathsInElement(element, basePath) {
|
|
143
|
+
const paths = [];
|
|
144
|
+
// add all paths in attributes
|
|
145
|
+
Object.keys(element.attributes || {}).forEach((attrName) => {
|
|
146
|
+
if (attrName.indexOf('Path') >= 0) {
|
|
147
|
+
let path = element.attributes[attrName].value;
|
|
148
|
+
if (!path.startsWith('/')) {
|
|
149
|
+
path = basePath + '/' + path;
|
|
150
|
+
}
|
|
151
|
+
paths.push({ path });
|
|
152
|
+
}
|
|
153
|
+
});
|
|
154
|
+
// add all paths from content
|
|
155
|
+
(element.content || []).forEach((entry) => {
|
|
156
|
+
if (entry.type === 'text' && element.name.indexOf('Path') >= 0) {
|
|
157
|
+
let path = entry.text;
|
|
158
|
+
if (!path.startsWith('/')) {
|
|
159
|
+
path = basePath + '/' + path;
|
|
160
|
+
}
|
|
161
|
+
paths.push({ path });
|
|
162
|
+
}
|
|
163
|
+
else if (entry.type === 'element') {
|
|
164
|
+
paths.push(...getPathsInElement(entry, basePath));
|
|
165
|
+
}
|
|
166
|
+
});
|
|
167
|
+
return paths;
|
|
168
|
+
}
|
|
169
|
+
function getPathsInTarget(target, metadata, aliasInfo) {
|
|
170
|
+
var _a;
|
|
171
|
+
const paths = [];
|
|
172
|
+
paths.push({ path: target.name });
|
|
173
|
+
// find base path (for relative paths in annotation value) for target
|
|
174
|
+
const pathBaseMdElement = (0, odata_annotation_core_1.getPathBaseMetadataElement)(metadata, target.name, aliasInfo);
|
|
175
|
+
const pathBase = (_a = pathBaseMdElement === null || pathBaseMdElement === void 0 ? void 0 : pathBaseMdElement.path) !== null && _a !== void 0 ? _a : target.name;
|
|
176
|
+
target.terms.forEach((term) => {
|
|
177
|
+
getPathsInAnnotation(term, paths, target.name, pathBase);
|
|
178
|
+
});
|
|
179
|
+
return paths;
|
|
180
|
+
}
|
|
181
|
+
function getPathsInAnnotation(element, paths, targetName, pathBase) {
|
|
182
|
+
// new target term qualifier combination in this file ? then avoid duplicates in unrelated layers!
|
|
183
|
+
const termName = (0, odata_annotation_core_1.getElementAttributeValue)(element, "Term" /* Edm.Term */);
|
|
184
|
+
const qualifier = (0, odata_annotation_core_1.getElementAttributeValue)(element, "Qualifier" /* Edm.Qualifier */);
|
|
185
|
+
// new target/term/qualifier: add path pointing to this term, then using statement will be created if this combination exists elsewhere
|
|
186
|
+
paths.push({
|
|
187
|
+
path: targetName + '/@' + termName + (qualifier ? '#' + qualifier : ''),
|
|
188
|
+
forOverriding: true
|
|
189
|
+
});
|
|
190
|
+
paths.push(...getPathsInElement(element, pathBase));
|
|
191
|
+
}
|
|
192
|
+
function addAvailableNamespaces(fileUri, namespaceMap, projectRoot, documents, fileUrisDone = new Set()) {
|
|
193
|
+
var _a;
|
|
194
|
+
if (!fileUrisDone.has(fileUri)) {
|
|
195
|
+
fileUrisDone.add(fileUri);
|
|
196
|
+
let filePath = (0, url_1.pathToFileURL)((0, path_1.join)(projectRoot, fileUri)).toString();
|
|
197
|
+
if ((0, os_1.platform)() === 'win32' && !documents.has(filePath)) {
|
|
198
|
+
// we can't find the document by uri, it is likely that the drive letter case does not match
|
|
199
|
+
// temporary workaround, this should not be needed once URIs are used everywhere
|
|
200
|
+
let driveLetter = filePath[8];
|
|
201
|
+
if (driveLetter === driveLetter.toLowerCase()) {
|
|
202
|
+
driveLetter = driveLetter.toUpperCase();
|
|
203
|
+
}
|
|
204
|
+
else {
|
|
205
|
+
driveLetter = driveLetter.toLowerCase();
|
|
206
|
+
}
|
|
207
|
+
filePath = filePath.slice(0, 8) + driveLetter + filePath.slice(9);
|
|
208
|
+
}
|
|
209
|
+
const annotationFileInternal = (_a = documents.get(filePath)) === null || _a === void 0 ? void 0 : _a.annotationFile;
|
|
210
|
+
if (annotationFileInternal) {
|
|
211
|
+
const references = annotationFileInternal.references;
|
|
212
|
+
references
|
|
213
|
+
.filter((reference) => !!(reference === null || reference === void 0 ? void 0 : reference.uri))
|
|
214
|
+
.forEach((reference) => {
|
|
215
|
+
const refUri = reference === null || reference === void 0 ? void 0 : reference.uri;
|
|
216
|
+
if (refUri) {
|
|
217
|
+
const relativeString = (0, path_1.relative)(projectRoot, refUri);
|
|
218
|
+
namespaceMap.set(reference.name + '|' + relativeString, {
|
|
219
|
+
uri: refUri,
|
|
220
|
+
name: reference.name,
|
|
221
|
+
type: 'reference'
|
|
222
|
+
});
|
|
223
|
+
addAvailableNamespaces(relativeString, namespaceMap, projectRoot, documents, fileUrisDone);
|
|
224
|
+
}
|
|
225
|
+
});
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
/**
|
|
230
|
+
*
|
|
231
|
+
* @param projectRoot - Absolute path to the projects root.
|
|
232
|
+
* @param references - Reference objects.
|
|
233
|
+
* @param relativePath - Relative file path to be checked.
|
|
234
|
+
* @param name - Name of the imported object.
|
|
235
|
+
* @returns If the given reference is available in the document.
|
|
236
|
+
*/
|
|
237
|
+
const isAvailable = (projectRoot, references, relativePath, name) => {
|
|
238
|
+
const matchedReferences = references.filter((reference) => {
|
|
239
|
+
let absoluteUri = (0, path_1.join)(projectRoot, relativePath !== null && relativePath !== void 0 ? relativePath : '');
|
|
240
|
+
if (absoluteUri && process.platform === 'win32') {
|
|
241
|
+
absoluteUri = absoluteUri.charAt(0).toUpperCase() + absoluteUri.slice(1);
|
|
242
|
+
}
|
|
243
|
+
if (!reference.uri || reference.uri !== absoluteUri) {
|
|
244
|
+
return false; // different file
|
|
245
|
+
}
|
|
246
|
+
else if (reference.name && name && !name.startsWith(reference.name)) {
|
|
247
|
+
return false; // imported namespace does not include requested name
|
|
248
|
+
}
|
|
249
|
+
else {
|
|
250
|
+
return true;
|
|
251
|
+
}
|
|
252
|
+
});
|
|
253
|
+
return matchedReferences.length > 0;
|
|
254
|
+
};
|
|
255
|
+
exports.isAvailable = isAvailable;
|
|
256
|
+
/**
|
|
257
|
+
* Converts path to namespace qualified path.
|
|
258
|
+
*
|
|
259
|
+
* @param path - Input path value.
|
|
260
|
+
* @param aliasInfo - Documents alias information.
|
|
261
|
+
* @returns Namespace qualified path.
|
|
262
|
+
*/
|
|
263
|
+
function resolvePath(path, aliasInfo) {
|
|
264
|
+
const segments = path.split('/');
|
|
265
|
+
const segmentsNoAlias = segments.map((segment) => (0, odata_annotation_core_1.getSegmentWithoutAlias)(aliasInfo, segment));
|
|
266
|
+
return segmentsNoAlias.join('/');
|
|
267
|
+
}
|
|
268
|
+
exports.resolvePath = resolvePath;
|
|
269
|
+
function checkSegments(fileUri, references, missingReferences, segments, metadataService, projectRoot) {
|
|
270
|
+
var _a;
|
|
271
|
+
let currentMdElementPath;
|
|
272
|
+
for (const segment of segments) {
|
|
273
|
+
let metadataElement = metadataService.getMetadataElement(segment);
|
|
274
|
+
if (currentMdElementPath) {
|
|
275
|
+
metadataElement = metadataService.getMetadataElement(currentMdElementPath + '/' + segment);
|
|
276
|
+
}
|
|
277
|
+
if (!metadataElement) {
|
|
278
|
+
break;
|
|
279
|
+
}
|
|
280
|
+
currentMdElementPath = metadataElement.path;
|
|
281
|
+
const importUri = metadataElement.importUri;
|
|
282
|
+
if (![fileUri, undefined].includes(importUri) &&
|
|
283
|
+
!(0, exports.isAvailable)(projectRoot, references, metadataElement === null || metadataElement === void 0 ? void 0 : metadataElement.importUri, metadataElement.originalName)) {
|
|
284
|
+
missingReferences.add(importUri);
|
|
285
|
+
}
|
|
286
|
+
if (metadataService.getEdmTargetKinds(currentMdElementPath).includes('NavigationProperty')) {
|
|
287
|
+
// navigation property : continue with target entity
|
|
288
|
+
const structuredType = metadataElement === null || metadataElement === void 0 ? void 0 : metadataElement.structuredType;
|
|
289
|
+
currentMdElementPath = structuredType ? (_a = metadataService.getMetadataElement(structuredType)) === null || _a === void 0 ? void 0 : _a.path : '';
|
|
290
|
+
}
|
|
291
|
+
}
|
|
292
|
+
return currentMdElementPath;
|
|
293
|
+
}
|
|
294
|
+
function checkMetadataDefinitions(fileUri, aliasInfo, references, missingReferences, virtualProperties, entry, metadataService, projectRoot) {
|
|
295
|
+
const atIndex = entry.path.indexOf('@');
|
|
296
|
+
// check path segments involving only metadata
|
|
297
|
+
const metadataPath = atIndex >= 0 ? entry.path.substring(0, Math.max(0, atIndex - 1)) : entry.path;
|
|
298
|
+
const fullyQualifiedPath = resolvePath(metadataPath, aliasInfo);
|
|
299
|
+
const metadataSegments = fullyQualifiedPath.split('/');
|
|
300
|
+
const virtualPropertyUri = virtualProperties.get(fullyQualifiedPath);
|
|
301
|
+
if (virtualPropertyUri &&
|
|
302
|
+
!(0, exports.isAvailable)(projectRoot, references, (0, path_1.relative)(projectRoot, (0, url_1.fileURLToPath)(virtualPropertyUri)), fullyQualifiedPath)) {
|
|
303
|
+
missingReferences.add(virtualPropertyUri);
|
|
304
|
+
}
|
|
305
|
+
const currentMdElementPath = checkSegments(fileUri, references, missingReferences, metadataSegments, metadataService, projectRoot);
|
|
306
|
+
let result;
|
|
307
|
+
if (atIndex !== -1) {
|
|
308
|
+
const termCast = entry.path.slice(atIndex - 1);
|
|
309
|
+
const target = entry.forOverriding ? fullyQualifiedPath : currentMdElementPath;
|
|
310
|
+
result = `${target}${termCast}`;
|
|
311
|
+
}
|
|
312
|
+
return result;
|
|
313
|
+
}
|
|
314
|
+
/**
|
|
315
|
+
* Get all missing references for target and its annotations.
|
|
316
|
+
*
|
|
317
|
+
* @param documents - URI to Document map.
|
|
318
|
+
* @param fileUri - Identification of current file (relative to project root).
|
|
319
|
+
* @param targetName - Annotation target name.
|
|
320
|
+
* @param targetOrElement - Internal representation of the target or subtree element.
|
|
321
|
+
* @param aliasInfo - Alias information for the document.
|
|
322
|
+
* @param metadataService - Metadata service.
|
|
323
|
+
* @param projectInfo - Data about applications in the project.
|
|
324
|
+
* @returns A set of missing references in the document.
|
|
325
|
+
*/
|
|
326
|
+
function getMissingRefs(documents, fileUri, targetName, targetOrElement, aliasInfo, metadataService, projectInfo) {
|
|
327
|
+
var _a;
|
|
328
|
+
const relativePath = (0, path_1.relative)(projectInfo.projectRoot, (0, url_1.fileURLToPath)(fileUri));
|
|
329
|
+
const { appName, apps, projectRoot } = projectInfo;
|
|
330
|
+
const missingReferences = new Set();
|
|
331
|
+
// get all paths contained in target and its annotations
|
|
332
|
+
let paths = [];
|
|
333
|
+
if (targetOrElement.type === 'target') {
|
|
334
|
+
paths = getPathsInTarget(targetOrElement, metadataService, aliasInfo);
|
|
335
|
+
}
|
|
336
|
+
else {
|
|
337
|
+
const pathBaseMdElement = (0, odata_annotation_core_1.getPathBaseMetadataElement)(metadataService, targetName, aliasInfo);
|
|
338
|
+
const pathBase = (_a = pathBaseMdElement === null || pathBaseMdElement === void 0 ? void 0 : pathBaseMdElement.path) !== null && _a !== void 0 ? _a : targetName;
|
|
339
|
+
if (targetOrElement.name === "Annotation" /* Edm.Annotation */) {
|
|
340
|
+
getPathsInAnnotation(targetOrElement, paths, targetName, pathBase);
|
|
341
|
+
}
|
|
342
|
+
else {
|
|
343
|
+
paths = getPathsInElement(targetOrElement, pathBase);
|
|
344
|
+
}
|
|
345
|
+
}
|
|
346
|
+
// get all namespaces available for current file
|
|
347
|
+
const nameSpacesMap = new Map();
|
|
348
|
+
addAvailableNamespaces(relativePath, nameSpacesMap, projectRoot, documents);
|
|
349
|
+
const references = [...nameSpacesMap.values()];
|
|
350
|
+
const annotationFiles = [...documents].map(([, document]) => document.annotationFile).reverse();
|
|
351
|
+
const { definitionIndex, virtualProperties } = buildDefinitionIndex(metadataService, annotationFiles);
|
|
352
|
+
for (const entry of paths) {
|
|
353
|
+
const annotationPath = checkMetadataDefinitions(relativePath, aliasInfo, references, missingReferences, virtualProperties, entry, metadataService, projectRoot);
|
|
354
|
+
const uris = findDefinitionForEntry(projectRoot, definitionIndex, annotationPath);
|
|
355
|
+
const addToMissing = hasMissingUri(uris, relativePath, references, projectRoot);
|
|
356
|
+
// if not: collect as missing using statement
|
|
357
|
+
if (!addToMissing) {
|
|
358
|
+
continue;
|
|
359
|
+
}
|
|
360
|
+
const missingUri = uris[0];
|
|
361
|
+
const unifiedMissingUri = (0, utils_1.toUnifiedUri)(missingUri);
|
|
362
|
+
const crossAppFolder = getCrossAppFolder(unifiedMissingUri, appName, apps);
|
|
363
|
+
if (crossAppFolder && entry.forOverriding) {
|
|
364
|
+
// cross app using statement needed for overriding annotation: this will most likely cause cds compiler error -> throw exception
|
|
365
|
+
const message = `Aborted to avoid cross app using statement in '${relativePath}' pointing to '${crossAppFolder}'`;
|
|
366
|
+
throw new error_1.ApiError(message, error_1.ApiErrorCode.General);
|
|
367
|
+
}
|
|
368
|
+
if (!crossAppFolder) {
|
|
369
|
+
// no cross app using statements allowed - ignore missing reference required for referenced path in annotation (we tolerate potential warning message)
|
|
370
|
+
missingReferences.add(missingUri);
|
|
371
|
+
}
|
|
372
|
+
}
|
|
373
|
+
return missingReferences;
|
|
374
|
+
}
|
|
375
|
+
exports.getMissingRefs = getMissingRefs;
|
|
376
|
+
function findDefinitionForEntry(projectRoot, definitionIndex, annotationPath) {
|
|
377
|
+
const uris = [];
|
|
378
|
+
if (annotationPath) {
|
|
379
|
+
const references = definitionIndex.get(annotationPath);
|
|
380
|
+
if (references) {
|
|
381
|
+
const relativePath = (0, path_1.relative)(projectRoot, (0, url_1.fileURLToPath)(references[0]));
|
|
382
|
+
uris.push(relativePath);
|
|
383
|
+
}
|
|
384
|
+
}
|
|
385
|
+
return uris;
|
|
386
|
+
}
|
|
387
|
+
function getCrossAppFolder(uri, appName, apps) {
|
|
388
|
+
let crossAppFolder = '';
|
|
389
|
+
if (!isSubDirectory((0, utils_1.toUnifiedUri)(`${appName}/`), uri)) {
|
|
390
|
+
(apps || []).forEach((appFolder) => {
|
|
391
|
+
if (isSubDirectory((0, utils_1.toUnifiedUri)(`${appFolder}/`), uri)) {
|
|
392
|
+
crossAppFolder = appFolder;
|
|
393
|
+
}
|
|
394
|
+
});
|
|
395
|
+
}
|
|
396
|
+
return crossAppFolder;
|
|
397
|
+
}
|
|
398
|
+
function isSubDirectory(parent, child) {
|
|
399
|
+
const relativePath = (0, path_1.relative)(parent, child);
|
|
400
|
+
return !!(relativePath && !relativePath.startsWith('..') && !(0, path_1.isAbsolute)(relativePath));
|
|
401
|
+
}
|
|
402
|
+
function hasMissingUri(uris, fileUri, references, projectRoot) {
|
|
403
|
+
if (uris.length === 0) {
|
|
404
|
+
return false;
|
|
405
|
+
}
|
|
406
|
+
for (const uri of uris) {
|
|
407
|
+
if (uri === fileUri || (0, exports.isAvailable)(projectRoot, references, uri)) {
|
|
408
|
+
return false;
|
|
409
|
+
}
|
|
410
|
+
}
|
|
411
|
+
return true;
|
|
412
|
+
}
|
|
413
|
+
//# sourceMappingURL=references.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"references.js","sourceRoot":"","sources":["../../src/cds/references.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { CDSService } from '../types';
|
|
2
|
+
/**
|
|
3
|
+
* Creates CDS service structure.
|
|
4
|
+
*
|
|
5
|
+
* @param projectRoot - Absolute path of the project.
|
|
6
|
+
* @param serviceName - Name of the CDS service.
|
|
7
|
+
* @param clearCache - Flag indicating if the CDS file resolution cache should be cleared.
|
|
8
|
+
* @returns CDS service structure.
|
|
9
|
+
*/
|
|
10
|
+
export declare function getCDSService(projectRoot: string, serviceName: string, clearCache?: boolean): Promise<CDSService>;
|
|
11
|
+
//# sourceMappingURL=service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../../src/cds/service.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,UAAU,EAAY,MAAM,UAAU,CAAC;AAErD;;;;;;;GAOG;AACH,wBAAsB,aAAa,CAAC,WAAW,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,UAAU,UAAQ,GAAG,OAAO,CAAC,UAAU,CAAC,CAUrH"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.getCDSService = void 0;
|
|
13
|
+
const url_1 = require("url");
|
|
14
|
+
const ux_cds_compiler_facade_1 = require("@sap/ux-cds-compiler-facade");
|
|
15
|
+
/**
|
|
16
|
+
* Creates CDS service structure.
|
|
17
|
+
*
|
|
18
|
+
* @param projectRoot - Absolute path of the project.
|
|
19
|
+
* @param serviceName - Name of the CDS service.
|
|
20
|
+
* @param clearCache - Flag indicating if the CDS file resolution cache should be cleared.
|
|
21
|
+
* @returns CDS service structure.
|
|
22
|
+
*/
|
|
23
|
+
function getCDSService(projectRoot, serviceName, clearCache = false) {
|
|
24
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
25
|
+
const files = yield (0, ux_cds_compiler_facade_1.getCdsFiles)(projectRoot, clearCache);
|
|
26
|
+
const serviceFiles = files.map((uri) => {
|
|
27
|
+
return { uri: (0, url_1.pathToFileURL)(uri).toString(), isReadOnly: uri.indexOf('node_modules') !== -1 };
|
|
28
|
+
});
|
|
29
|
+
return {
|
|
30
|
+
type: 'cap-cds',
|
|
31
|
+
serviceName,
|
|
32
|
+
serviceFiles: serviceFiles
|
|
33
|
+
};
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
exports.getCDSService = getCDSService;
|
|
37
|
+
//# sourceMappingURL=service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"service.js","sourceRoot":"","sources":["../../src/cds/service.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,6BAAoC;AAEpC,wEAA0D;AAI1D;;;;;;;GAOG;AACH,SAAsB,aAAa,CAAC,WAAmB,EAAE,WAAmB,EAAE,UAAU,GAAG,KAAK;;QAC5F,MAAM,KAAK,GAAG,MAAM,IAAA,oCAAW,EAAC,WAAW,EAAE,UAAU,CAAC,CAAC;QACzD,MAAM,YAAY,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAY,EAAE;YAC7C,OAAO,EAAE,GAAG,EAAE,IAAA,mBAAa,EAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,UAAU,EAAE,GAAG,CAAC,OAAO,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;QAClG,CAAC,CAAC,CAAC;QACH,OAAO;YACH,IAAI,EAAE,SAAS;YACf,WAAW;YACX,YAAY,EAAE,YAAY;SAC7B,CAAC;IACN,CAAC;CAAA;AAVD,sCAUC"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import type { CdsCompilerFacade } from '@sap/ux-cds-compiler-facade';
|
|
2
|
+
import type { Range } from '@sap-ux/odata-annotation-core-types';
|
|
3
|
+
import type { Annotation } from '@sap-ux/cds-annotation-parser';
|
|
4
|
+
import type { AstNode } from './document';
|
|
5
|
+
import type { CompilerToken } from './cds-compiler-tokens';
|
|
6
|
+
/**
|
|
7
|
+
* Normalizes URI.
|
|
8
|
+
*
|
|
9
|
+
* @param fileUri - URI as a string.
|
|
10
|
+
* @param removeGhostFilePrefix - Flag indicating if the ghost file prefix should be removed from the uri.
|
|
11
|
+
* @returns Normalized file URI.
|
|
12
|
+
*/
|
|
13
|
+
export declare function toUnifiedUri(fileUri: string | undefined, removeGhostFilePrefix?: boolean): string;
|
|
14
|
+
/**
|
|
15
|
+
* Get token indices for the corresponding range.
|
|
16
|
+
*
|
|
17
|
+
* @param tokens - All tokens in the document.
|
|
18
|
+
* @param range - Range for which tokens will be matched.
|
|
19
|
+
* @returns Start and end token indices for the range.
|
|
20
|
+
*/
|
|
21
|
+
export declare function getTokenRange(tokens: CompilerToken[], range: Range): {
|
|
22
|
+
start: number;
|
|
23
|
+
end: number;
|
|
24
|
+
};
|
|
25
|
+
/**
|
|
26
|
+
* Finds annotation in assignment based on AST node.
|
|
27
|
+
*
|
|
28
|
+
* @param facade - CDS compiler facade instance.
|
|
29
|
+
* @param node - AST node.
|
|
30
|
+
* @param parent - Parent AST node.
|
|
31
|
+
* @param greatGrandParent - Great grand parent node.
|
|
32
|
+
* @returns Annotation node and EDMX path.
|
|
33
|
+
*/
|
|
34
|
+
export declare function getAnnotationFromAssignment(facade: CdsCompilerFacade, node: AstNode, parent?: AstNode, greatGrandParent?: AstNode): [Annotation, string];
|
|
35
|
+
//# sourceMappingURL=utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/cds/utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAGrE,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,qCAAqC,CAAC;AAGjE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAMhE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAE3D;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,EAAE,qBAAqB,UAAO,GAAG,MAAM,CAG9F;AAED;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,aAAa,EAAE,EAAE,KAAK,EAAE,KAAK,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,CAgBnG;AAED;;;;;;;;GAQG;AACH,wBAAgB,2BAA2B,CACvC,MAAM,EAAE,iBAAiB,EACzB,IAAI,EAAE,OAAO,EACb,MAAM,CAAC,EAAE,OAAO,EAChB,gBAAgB,CAAC,EAAE,OAAO,GAC3B,CAAC,UAAU,EAAE,MAAM,CAAC,CAStB"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getAnnotationFromAssignment = exports.getTokenRange = exports.toUnifiedUri = void 0;
|
|
4
|
+
const ux_cds_compiler_facade_1 = require("@sap/ux-cds-compiler-facade");
|
|
5
|
+
const odata_annotation_core_types_1 = require("@sap-ux/odata-annotation-core-types");
|
|
6
|
+
const cds_annotation_parser_1 = require("@sap-ux/cds-annotation-parser");
|
|
7
|
+
const cds_odata_annotation_converter_1 = require("@sap-ux/cds-odata-annotation-converter");
|
|
8
|
+
const error_1 = require("../error");
|
|
9
|
+
/**
|
|
10
|
+
* Normalizes URI.
|
|
11
|
+
*
|
|
12
|
+
* @param fileUri - URI as a string.
|
|
13
|
+
* @param removeGhostFilePrefix - Flag indicating if the ghost file prefix should be removed from the uri.
|
|
14
|
+
* @returns Normalized file URI.
|
|
15
|
+
*/
|
|
16
|
+
function toUnifiedUri(fileUri, removeGhostFilePrefix = true) {
|
|
17
|
+
const unifiedUri = (fileUri !== null && fileUri !== void 0 ? fileUri : '').replace(/\\/g, '/').replace(/\/\//g, '/');
|
|
18
|
+
return removeGhostFilePrefix ? unifiedUri.replace(odata_annotation_core_types_1.GHOST_FILENAME_PREFIX, '') : unifiedUri;
|
|
19
|
+
}
|
|
20
|
+
exports.toUnifiedUri = toUnifiedUri;
|
|
21
|
+
/**
|
|
22
|
+
* Get token indices for the corresponding range.
|
|
23
|
+
*
|
|
24
|
+
* @param tokens - All tokens in the document.
|
|
25
|
+
* @param range - Range for which tokens will be matched.
|
|
26
|
+
* @returns Start and end token indices for the range.
|
|
27
|
+
*/
|
|
28
|
+
function getTokenRange(tokens, range) {
|
|
29
|
+
const start = tokens.findIndex((token) => token.line === range.start.line + 1 && token.column === range.start.character);
|
|
30
|
+
let end = -1;
|
|
31
|
+
if (start > -1) {
|
|
32
|
+
end = tokens
|
|
33
|
+
.slice(start)
|
|
34
|
+
.findIndex((token) => token.line > range.end.line + 1 ||
|
|
35
|
+
(token.line === range.end.line + 1 && token.column >= range.end.character));
|
|
36
|
+
end = start + end - 1;
|
|
37
|
+
}
|
|
38
|
+
return { start, end };
|
|
39
|
+
}
|
|
40
|
+
exports.getTokenRange = getTokenRange;
|
|
41
|
+
/**
|
|
42
|
+
* Finds annotation in assignment based on AST node.
|
|
43
|
+
*
|
|
44
|
+
* @param facade - CDS compiler facade instance.
|
|
45
|
+
* @param node - AST node.
|
|
46
|
+
* @param parent - Parent AST node.
|
|
47
|
+
* @param greatGrandParent - Great grand parent node.
|
|
48
|
+
* @returns Annotation node and EDMX path.
|
|
49
|
+
*/
|
|
50
|
+
function getAnnotationFromAssignment(facade, node, parent, greatGrandParent) {
|
|
51
|
+
const [annotation, target] = findAnnotation(node, parent, greatGrandParent);
|
|
52
|
+
const { edmxPath } = facade.collectMetadataForAbsolutePath(target.name, target.kind, (0, ux_cds_compiler_facade_1.createMetadataCollector)(new Map(), facade));
|
|
53
|
+
return [annotation, edmxPath];
|
|
54
|
+
}
|
|
55
|
+
exports.getAnnotationFromAssignment = getAnnotationFromAssignment;
|
|
56
|
+
function findAnnotation(node, parent, greatGrandParent) {
|
|
57
|
+
if (node.type === cds_odata_annotation_converter_1.TARGET_TYPE) {
|
|
58
|
+
// if no assignment is specified we default to the first one
|
|
59
|
+
const assignment = node.assignments[0];
|
|
60
|
+
if (assignment) {
|
|
61
|
+
const annotation = (assignment === null || assignment === void 0 ? void 0 : assignment.type) === 'annotation-group' ? assignment.items.items[0] : assignment;
|
|
62
|
+
return [annotation, node];
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
else if ((node === null || node === void 0 ? void 0 : node.type) === cds_annotation_parser_1.ANNOTATION_TYPE) {
|
|
66
|
+
if ((parent === null || parent === void 0 ? void 0 : parent.type) === cds_odata_annotation_converter_1.TARGET_TYPE) {
|
|
67
|
+
return [node, parent];
|
|
68
|
+
}
|
|
69
|
+
else if ((greatGrandParent === null || greatGrandParent === void 0 ? void 0 : greatGrandParent.type) === cds_odata_annotation_converter_1.TARGET_TYPE && (parent === null || parent === void 0 ? void 0 : parent.type) === cds_annotation_parser_1.ANNOTATION_GROUP_ITEMS_TYPE) {
|
|
70
|
+
return [node, greatGrandParent];
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
throw new error_1.ApiError(`Could not find annotation in node of type ${node.type}.`, error_1.ApiErrorCode.General);
|
|
74
|
+
}
|
|
75
|
+
//# sourceMappingURL=utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/cds/utils.ts"],"names":[],"mappings":"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"}
|