@abaplint/core 2.91.36 → 2.91.39
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/build/abaplint.d.ts +18 -1
- package/build/src/abap/2_statements/expressions/sql_target.js +2 -1
- package/build/src/abap/5_syntax/expressions/method_call_param.js +7 -2
- package/build/src/cds/cds_parser.js +3 -0
- package/build/src/cds/expressions/cds_aggregate.js +2 -1
- package/build/src/cds/expressions/cds_define_abstract.js +1 -1
- package/build/src/cds/expressions/cds_define_projection.js +13 -0
- package/build/src/cds/expressions/index.js +1 -0
- package/build/src/objects/api_release_state.js +21 -0
- package/build/src/objects/index.js +1 -0
- package/build/src/registry.js +43 -11
- package/build/src/rules/rfc_error_handling.js +1 -1
- package/package.json +3 -3
package/build/abaplint.d.ts
CHANGED
|
@@ -150,6 +150,15 @@ declare class AnyType extends AbstractType {
|
|
|
150
150
|
toCDS(): string;
|
|
151
151
|
}
|
|
152
152
|
|
|
153
|
+
declare class APIReleaseState extends AbstractObject {
|
|
154
|
+
getType(): string;
|
|
155
|
+
getAllowedNaming(): {
|
|
156
|
+
maxLength: number;
|
|
157
|
+
allowNamespace: boolean;
|
|
158
|
+
};
|
|
159
|
+
getDescription(): string | undefined;
|
|
160
|
+
}
|
|
161
|
+
|
|
153
162
|
declare class Append implements IStatement {
|
|
154
163
|
getMatcher(): IStatementRunnable;
|
|
155
164
|
}
|
|
@@ -615,6 +624,10 @@ declare class CDSDefineAbstract extends Expression {
|
|
|
615
624
|
getRunnable(): IStatementRunnable;
|
|
616
625
|
}
|
|
617
626
|
|
|
627
|
+
declare class CDSDefineProjection extends Expression {
|
|
628
|
+
getRunnable(): IStatementRunnable;
|
|
629
|
+
}
|
|
630
|
+
|
|
618
631
|
declare class CDSDefineView extends Expression {
|
|
619
632
|
getRunnable(): IStatementRunnable;
|
|
620
633
|
}
|
|
@@ -2014,6 +2027,7 @@ declare namespace ExpressionsCDS {
|
|
|
2014
2027
|
CDSComposition,
|
|
2015
2028
|
CDSCondition,
|
|
2016
2029
|
CDSDefineAbstract,
|
|
2030
|
+
CDSDefineProjection,
|
|
2017
2031
|
CDSDefineView,
|
|
2018
2032
|
CDSElement,
|
|
2019
2033
|
CDSFunction,
|
|
@@ -3208,6 +3222,7 @@ export declare interface IRegistry {
|
|
|
3208
3222
|
parseAsync(input?: IRunInput): Promise<IRegistry>;
|
|
3209
3223
|
addDependencies(files: readonly IFile[]): IRegistry;
|
|
3210
3224
|
addDependency(file: IFile): IRegistry;
|
|
3225
|
+
removeDependency(obj: IObject): void;
|
|
3211
3226
|
isDependency(obj: IObject): boolean;
|
|
3212
3227
|
isFileDependency(filename: string): boolean;
|
|
3213
3228
|
findIssues(input?: IRunInput): readonly Issue[];
|
|
@@ -3953,6 +3968,7 @@ declare class ObjectReferenceType extends AbstractType {
|
|
|
3953
3968
|
declare namespace Objects {
|
|
3954
3969
|
export {
|
|
3955
3970
|
ActivationVariant,
|
|
3971
|
+
APIReleaseState,
|
|
3956
3972
|
AssignmentServiceToAuthorizationGroup,
|
|
3957
3973
|
AuthorizationCheckField,
|
|
3958
3974
|
AuthorizationGroup,
|
|
@@ -4450,7 +4466,6 @@ declare class RefreshControl implements IStatement {
|
|
|
4450
4466
|
export declare class Registry implements IRegistry {
|
|
4451
4467
|
private readonly objects;
|
|
4452
4468
|
private readonly objectsByType;
|
|
4453
|
-
/** object containing filenames of dependencies */
|
|
4454
4469
|
private readonly dependencies;
|
|
4455
4470
|
private readonly references;
|
|
4456
4471
|
private conf;
|
|
@@ -4471,9 +4486,11 @@ export declare class Registry implements IRegistry {
|
|
|
4471
4486
|
addFile(file: IFile): IRegistry;
|
|
4472
4487
|
updateFile(file: IFile): IRegistry;
|
|
4473
4488
|
removeFile(file: IFile): IRegistry;
|
|
4489
|
+
private _addFiles;
|
|
4474
4490
|
addFiles(files: readonly IFile[]): IRegistry;
|
|
4475
4491
|
addDependencies(files: readonly IFile[]): IRegistry;
|
|
4476
4492
|
addDependency(file: IFile): IRegistry;
|
|
4493
|
+
removeDependency(obj: IObject): void;
|
|
4477
4494
|
isDependency(obj: IObject): boolean;
|
|
4478
4495
|
isFileDependency(filename: string): boolean;
|
|
4479
4496
|
findObjectForFile(file: IFile): IObject | undefined;
|
|
@@ -7,7 +7,8 @@ const tokens_1 = require("../../1_lexer/tokens");
|
|
|
7
7
|
const _1 = require(".");
|
|
8
8
|
class SQLTarget extends combi_1.Expression {
|
|
9
9
|
getRunnable() {
|
|
10
|
-
const
|
|
10
|
+
const n = (0, combi_1.ver)(version_1.Version.v754, "NEW");
|
|
11
|
+
const at = (0, combi_1.ver)(version_1.Version.v740sp05, (0, combi_1.seq)((0, combi_1.opt)(n), (0, combi_1.altPrio)((0, combi_1.tok)(tokens_1.WAt), (0, combi_1.tok)(tokens_1.At)), _1.Target));
|
|
11
12
|
return (0, combi_1.altPrio)(at, _1.Target);
|
|
12
13
|
}
|
|
13
14
|
}
|
|
@@ -26,7 +26,9 @@ class MethodCallParam {
|
|
|
26
26
|
}
|
|
27
27
|
}
|
|
28
28
|
}
|
|
29
|
-
else if (child instanceof nodes_1.ExpressionNode
|
|
29
|
+
else if (child instanceof nodes_1.ExpressionNode
|
|
30
|
+
&& (child.get() instanceof Expressions.Source
|
|
31
|
+
|| child.get() instanceof Expressions.ConstantString)) {
|
|
30
32
|
if (!(method instanceof basic_1.VoidType) && method.getParameters().getImporting().length === 0) {
|
|
31
33
|
throw new Error("Method \"" + method.getName() + "\" has no importing parameters");
|
|
32
34
|
}
|
|
@@ -46,7 +48,10 @@ class MethodCallParam {
|
|
|
46
48
|
else {
|
|
47
49
|
targetType = method;
|
|
48
50
|
}
|
|
49
|
-
|
|
51
|
+
let sourceType = new basic_1.StringType();
|
|
52
|
+
if (child.get() instanceof Expressions.Source) {
|
|
53
|
+
sourceType = new source_1.Source().runSyntax(child, scope, filename, targetType);
|
|
54
|
+
}
|
|
50
55
|
if (sourceType === undefined) {
|
|
51
56
|
throw new Error("No source type determined, method source");
|
|
52
57
|
}
|
|
@@ -18,6 +18,9 @@ class CDSParser {
|
|
|
18
18
|
if (res === undefined || !(res[0] instanceof nodes_1.ExpressionNode)) {
|
|
19
19
|
res = combi_1.Combi.run(new Expressions.CDSDefineAbstract(), tokens, version_1.defaultVersion);
|
|
20
20
|
}
|
|
21
|
+
if (res === undefined || !(res[0] instanceof nodes_1.ExpressionNode)) {
|
|
22
|
+
res = combi_1.Combi.run(new Expressions.CDSDefineProjection(), tokens, version_1.defaultVersion);
|
|
23
|
+
}
|
|
21
24
|
if (res === undefined || !(res[0] instanceof nodes_1.ExpressionNode)) {
|
|
22
25
|
return undefined;
|
|
23
26
|
}
|
|
@@ -5,7 +5,8 @@ const _1 = require(".");
|
|
|
5
5
|
const combi_1 = require("../../abap/2_statements/combi");
|
|
6
6
|
class CDSAggregate extends combi_1.Expression {
|
|
7
7
|
getRunnable() {
|
|
8
|
-
const
|
|
8
|
+
const name = (0, combi_1.seq)(_1.CDSName, (0, combi_1.opt)((0, combi_1.seq)(".", _1.CDSName)));
|
|
9
|
+
const value = (0, combi_1.alt)(name, _1.CDSCast, _1.CDSCase);
|
|
9
10
|
return (0, combi_1.seq)((0, combi_1.alt)("MAX", "MIN", "SUM", "AVG", "COUNT"), "(", (0, combi_1.opt)("DISTINCT"), value, ")");
|
|
10
11
|
}
|
|
11
12
|
}
|
|
@@ -6,7 +6,7 @@ const combi_1 = require("../../abap/2_statements/combi");
|
|
|
6
6
|
const cds_name_1 = require("./cds_name");
|
|
7
7
|
class CDSDefineAbstract extends combi_1.Expression {
|
|
8
8
|
getRunnable() {
|
|
9
|
-
const field = (0, combi_1.seq)((0, combi_1.star)(_1.CDSAnnotation), (0, combi_1.str)("KEY"), cds_name_1.CDSName, ":",
|
|
9
|
+
const field = (0, combi_1.seq)((0, combi_1.star)(_1.CDSAnnotation), (0, combi_1.opt)((0, combi_1.str)("KEY")), cds_name_1.CDSName, ":", _1.CDSType, ";");
|
|
10
10
|
return (0, combi_1.seq)((0, combi_1.star)(_1.CDSAnnotation), (0, combi_1.str)("DEFINE ABSTRACT ENTITY"), cds_name_1.CDSName, (0, combi_1.str)("{"), (0, combi_1.plus)(field), (0, combi_1.str)("}"), (0, combi_1.opt)(";"));
|
|
11
11
|
}
|
|
12
12
|
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.CDSDefineProjection = void 0;
|
|
4
|
+
const _1 = require(".");
|
|
5
|
+
const __1 = require("../..");
|
|
6
|
+
const combi_1 = require("../../abap/2_statements/combi");
|
|
7
|
+
class CDSDefineProjection extends combi_1.Expression {
|
|
8
|
+
getRunnable() {
|
|
9
|
+
return (0, combi_1.seq)((0, combi_1.star)(_1.CDSAnnotation), "DEFINE", (0, combi_1.opt)("ROOT"), "VIEW", (0, combi_1.ver)(__1.Version.v755, (0, combi_1.opt)("ENTITY")), _1.CDSName, "PROVIDER CONTRACT", _1.CDSName, "AS PROJECTION ON", _1.CDSName, (0, combi_1.str)("{"), (0, combi_1.plus)(_1.CDSElement), (0, combi_1.star)((0, combi_1.seq)(",", _1.CDSElement)), (0, combi_1.str)("}"), (0, combi_1.opt)(";"));
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
exports.CDSDefineProjection = CDSDefineProjection;
|
|
13
|
+
//# sourceMappingURL=cds_define_projection.js.map
|
|
@@ -29,6 +29,7 @@ __exportStar(require("./cds_cast"), exports);
|
|
|
29
29
|
__exportStar(require("./cds_composition"), exports);
|
|
30
30
|
__exportStar(require("./cds_condition"), exports);
|
|
31
31
|
__exportStar(require("./cds_define_abstract"), exports);
|
|
32
|
+
__exportStar(require("./cds_define_projection"), exports);
|
|
32
33
|
__exportStar(require("./cds_define_view"), exports);
|
|
33
34
|
__exportStar(require("./cds_element"), exports);
|
|
34
35
|
__exportStar(require("./cds_function"), exports);
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.APIReleaseState = void 0;
|
|
4
|
+
const _abstract_object_1 = require("./_abstract_object");
|
|
5
|
+
class APIReleaseState extends _abstract_object_1.AbstractObject {
|
|
6
|
+
getType() {
|
|
7
|
+
return "APIS";
|
|
8
|
+
}
|
|
9
|
+
getAllowedNaming() {
|
|
10
|
+
return {
|
|
11
|
+
maxLength: 200,
|
|
12
|
+
allowNamespace: true,
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
getDescription() {
|
|
16
|
+
// todo
|
|
17
|
+
return undefined;
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
exports.APIReleaseState = APIReleaseState;
|
|
21
|
+
//# sourceMappingURL=api_release_state.js.map
|
|
@@ -15,6 +15,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
15
15
|
};
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
17
|
__exportStar(require("./activation_variant"), exports);
|
|
18
|
+
__exportStar(require("./api_release_state"), exports);
|
|
18
19
|
__exportStar(require("./assignment_service_to_authorization_group"), exports);
|
|
19
20
|
__exportStar(require("./authorization_check_field"), exports);
|
|
20
21
|
__exportStar(require("./authorization_group"), exports);
|
package/build/src/registry.js
CHANGED
|
@@ -60,7 +60,6 @@ class Registry {
|
|
|
60
60
|
constructor(conf) {
|
|
61
61
|
this.objects = {};
|
|
62
62
|
this.objectsByType = {};
|
|
63
|
-
/** object containing filenames of dependencies */
|
|
64
63
|
this.dependencies = {};
|
|
65
64
|
this.issues = [];
|
|
66
65
|
this.conf = conf ? conf : config_1.Config.getDefault();
|
|
@@ -68,7 +67,7 @@ class Registry {
|
|
|
68
67
|
}
|
|
69
68
|
static abaplintVersion() {
|
|
70
69
|
// magic, see build script "version.sh"
|
|
71
|
-
return "2.91.
|
|
70
|
+
return "2.91.39";
|
|
72
71
|
}
|
|
73
72
|
getDDICReferences() {
|
|
74
73
|
return this.references;
|
|
@@ -143,6 +142,7 @@ class Registry {
|
|
|
143
142
|
return this;
|
|
144
143
|
}
|
|
145
144
|
inErrorNamespace(name) {
|
|
145
|
+
// todo: performance? cache regexp?
|
|
146
146
|
const reg = new RegExp(this.getConfig().getSyntaxSetttings().errorNamespace, "i");
|
|
147
147
|
return reg.test(name);
|
|
148
148
|
}
|
|
@@ -163,7 +163,7 @@ class Registry {
|
|
|
163
163
|
}
|
|
164
164
|
return this;
|
|
165
165
|
}
|
|
166
|
-
|
|
166
|
+
_addFiles(files, dependency) {
|
|
167
167
|
var _a;
|
|
168
168
|
const globalExclude = ((_a = this.conf.getGlobal().exclude) !== null && _a !== void 0 ? _a : [])
|
|
169
169
|
.map(pattern => new RegExp(pattern, "i"));
|
|
@@ -173,28 +173,60 @@ class Registry {
|
|
|
173
173
|
if (isNotAbapgitFile || excludeHelper_1.ExcludeHelper.isExcluded(filename, globalExclude)) {
|
|
174
174
|
continue;
|
|
175
175
|
}
|
|
176
|
-
|
|
176
|
+
let found = this.findOrCreate(f.getObjectName(), f.getObjectType());
|
|
177
|
+
if (dependency === false && found && this.isDependency(found)) {
|
|
178
|
+
this.removeDependency(found);
|
|
179
|
+
found = this.findOrCreate(f.getObjectName(), f.getObjectType());
|
|
180
|
+
}
|
|
177
181
|
found.addFile(f);
|
|
178
182
|
}
|
|
179
183
|
return this;
|
|
180
184
|
}
|
|
185
|
+
addFiles(files) {
|
|
186
|
+
this._addFiles(files, false);
|
|
187
|
+
return this;
|
|
188
|
+
}
|
|
181
189
|
addDependencies(files) {
|
|
182
190
|
for (const f of files) {
|
|
183
|
-
this.
|
|
191
|
+
this.addDependency(f);
|
|
184
192
|
}
|
|
185
|
-
return this
|
|
193
|
+
return this;
|
|
186
194
|
}
|
|
187
195
|
addDependency(file) {
|
|
188
|
-
|
|
189
|
-
|
|
196
|
+
var _a;
|
|
197
|
+
const type = (_a = file.getObjectType()) === null || _a === void 0 ? void 0 : _a.toUpperCase();
|
|
198
|
+
if (type === undefined) {
|
|
199
|
+
return this;
|
|
200
|
+
}
|
|
201
|
+
const name = file.getObjectName().toUpperCase();
|
|
202
|
+
if (this.dependencies[type] === undefined) {
|
|
203
|
+
this.dependencies[type] = {};
|
|
204
|
+
}
|
|
205
|
+
this.dependencies[type][name] = true;
|
|
206
|
+
this._addFiles([file], true);
|
|
190
207
|
return this;
|
|
191
208
|
}
|
|
209
|
+
removeDependency(obj) {
|
|
210
|
+
var _a;
|
|
211
|
+
(_a = this.dependencies[obj.getType()]) === null || _a === void 0 ? true : delete _a[obj.getName()];
|
|
212
|
+
this.removeObject(obj);
|
|
213
|
+
}
|
|
192
214
|
isDependency(obj) {
|
|
193
|
-
|
|
194
|
-
return this.dependencies[
|
|
215
|
+
var _a;
|
|
216
|
+
return ((_a = this.dependencies[obj.getType()]) === null || _a === void 0 ? void 0 : _a[obj.getName()]) === true;
|
|
195
217
|
}
|
|
196
218
|
isFileDependency(filename) {
|
|
197
|
-
|
|
219
|
+
var _a, _b;
|
|
220
|
+
const f = this.getFileByName(filename);
|
|
221
|
+
if (f === undefined) {
|
|
222
|
+
return false;
|
|
223
|
+
}
|
|
224
|
+
const type = (_a = f.getObjectType()) === null || _a === void 0 ? void 0 : _a.toUpperCase();
|
|
225
|
+
if (type === undefined) {
|
|
226
|
+
return false;
|
|
227
|
+
}
|
|
228
|
+
const name = f.getObjectName().toUpperCase();
|
|
229
|
+
return ((_b = this.dependencies[type]) === null || _b === void 0 ? void 0 : _b[name]) === true;
|
|
198
230
|
}
|
|
199
231
|
// assumption: the file is already in the registry
|
|
200
232
|
findObjectForFile(file) {
|
|
@@ -36,7 +36,7 @@ CALL FUNCTION 'ZRFC'
|
|
|
36
36
|
};
|
|
37
37
|
}
|
|
38
38
|
getMessage() {
|
|
39
|
-
return "RFC error handling: At least one unhandled exception from SYSTEM_FAILURE, COMMUNICATION_FAILURE, RESOURCE_FAILURE
|
|
39
|
+
return "RFC error handling: At least one unhandled exception from SYSTEM_FAILURE, COMMUNICATION_FAILURE, RESOURCE_FAILURE";
|
|
40
40
|
}
|
|
41
41
|
getConfig() {
|
|
42
42
|
return this.conf;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@abaplint/core",
|
|
3
|
-
"version": "2.91.
|
|
3
|
+
"version": "2.91.39",
|
|
4
4
|
"description": "abaplint - Core API",
|
|
5
5
|
"main": "build/src/index.js",
|
|
6
6
|
"typings": "build/abaplint.d.ts",
|
|
@@ -45,10 +45,10 @@
|
|
|
45
45
|
},
|
|
46
46
|
"homepage": "https://abaplint.org",
|
|
47
47
|
"devDependencies": {
|
|
48
|
-
"@microsoft/api-extractor": "^7.29.
|
|
48
|
+
"@microsoft/api-extractor": "^7.29.5",
|
|
49
49
|
"@types/chai": "^4.3.3",
|
|
50
50
|
"@types/mocha": "^9.1.1",
|
|
51
|
-
"@types/node": "^18.7.
|
|
51
|
+
"@types/node": "^18.7.13",
|
|
52
52
|
"chai": "^4.3.6",
|
|
53
53
|
"eslint": "^8.22.0",
|
|
54
54
|
"mocha": "^10.0.0",
|