@abaplint/transpiler 2.10.83 → 2.11.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/build/src/chunk.js +2 -1
- package/build/src/db/index.js +1 -0
- package/build/src/db/schema_generation/pg_database_schema.js +1 -0
- package/build/src/db/schema_generation/snowflake_database_schema.js +1 -0
- package/build/src/db/schema_generation/sqlite_database_schema.js +1 -0
- package/build/src/expressions/component_chain_simple.js +1 -1
- package/build/src/expressions/constant.js +1 -0
- package/build/src/expressions/database_table.js +1 -0
- package/build/src/expressions/field_chain.js +2 -0
- package/build/src/expressions/method_call_body.js +1 -0
- package/build/src/expressions/method_call_param.js +1 -0
- package/build/src/expressions/method_source.js +1 -0
- package/build/src/expressions/simple_source3.js +1 -0
- package/build/src/expressions/source.js +1 -0
- package/build/src/handlers/handle_abap.js +1 -0
- package/build/src/handlers/handle_fugr.js +1 -0
- package/build/src/index.js +1 -0
- package/build/src/requires.js +1 -0
- package/build/src/statements/do.js +1 -0
- package/build/src/statements/end_do.js +1 -0
- package/build/src/statements/end_while.js +1 -0
- package/build/src/statements/loop.js +3 -3
- package/build/src/statements/raise_event.js +10 -2
- package/build/src/statements/set_handler.d.ts +1 -0
- package/build/src/statements/set_handler.js +47 -5
- package/build/src/statements/when.js +1 -0
- package/build/src/statements/while.js +1 -0
- package/build/src/traversal.d.ts +1 -0
- package/build/src/traversal.js +28 -1
- package/build/src/unique_identifier.js +2 -2
- package/build/src/validation.js +1 -0
- package/package.json +2 -2
package/build/src/chunk.js
CHANGED
package/build/src/db/index.js
CHANGED
|
@@ -11,6 +11,7 @@ const snowflake_database_schema_1 = require("./schema_generation/snowflake_datab
|
|
|
11
11
|
// Postgres is case sensitive, so all column names should be lower case
|
|
12
12
|
// Sqlite escapes field names with single qoute, postgres with double
|
|
13
13
|
class DatabaseSetup {
|
|
14
|
+
reg;
|
|
14
15
|
constructor(reg) {
|
|
15
16
|
this.reg = reg;
|
|
16
17
|
}
|
|
@@ -7,8 +7,8 @@ const traversal_1 = require("../traversal");
|
|
|
7
7
|
const field_length_1 = require("./field_length");
|
|
8
8
|
const field_offset_1 = require("./field_offset");
|
|
9
9
|
class ComponentChainSimpleTranspiler {
|
|
10
|
+
prefix = "";
|
|
10
11
|
constructor(prefix = "") {
|
|
11
|
-
this.prefix = "";
|
|
12
12
|
this.prefix = prefix;
|
|
13
13
|
}
|
|
14
14
|
transpile(node, traversal) {
|
|
@@ -9,6 +9,8 @@ const field_symbol_1 = require("./field_symbol");
|
|
|
9
9
|
const chunk_1 = require("../chunk");
|
|
10
10
|
const feature_flags_1 = require("../feature_flags");
|
|
11
11
|
class FieldChainTranspiler {
|
|
12
|
+
addGet;
|
|
13
|
+
addGetOffset;
|
|
12
14
|
constructor(addGet = false) {
|
|
13
15
|
this.addGet = addGet;
|
|
14
16
|
}
|
package/build/src/index.js
CHANGED
|
@@ -22,6 +22,7 @@ const handle_oa2p_1 = require("./handlers/handle_oa2p");
|
|
|
22
22
|
const handle_fugr_1 = require("./handlers/handle_fugr");
|
|
23
23
|
const initialization_1 = require("./initialization");
|
|
24
24
|
class Transpiler {
|
|
25
|
+
options;
|
|
25
26
|
constructor(options) {
|
|
26
27
|
this.options = options;
|
|
27
28
|
if (this.options === undefined) {
|
package/build/src/requires.js
CHANGED
|
@@ -6,10 +6,10 @@ const unique_identifier_1 = require("../unique_identifier");
|
|
|
6
6
|
const expressions_1 = require("../expressions");
|
|
7
7
|
const chunk_1 = require("../chunk");
|
|
8
8
|
class LoopTranspiler {
|
|
9
|
+
unique = "";
|
|
10
|
+
injectFrom = undefined;
|
|
11
|
+
skipInto = undefined;
|
|
9
12
|
constructor(options) {
|
|
10
|
-
this.unique = "";
|
|
11
|
-
this.injectFrom = undefined;
|
|
12
|
-
this.skipInto = undefined;
|
|
13
13
|
this.injectFrom = options?.injectFrom;
|
|
14
14
|
this.skipInto = options?.skipInto;
|
|
15
15
|
}
|
|
@@ -1,11 +1,19 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.RaiseEventTranspiler = void 0;
|
|
4
|
+
const abaplint = require("@abaplint/core");
|
|
5
|
+
const traversal_1 = require("../traversal");
|
|
4
6
|
const chunk_1 = require("../chunk");
|
|
7
|
+
const expressions_1 = require("../expressions");
|
|
5
8
|
class RaiseEventTranspiler {
|
|
6
9
|
transpile(node, traversal) {
|
|
7
|
-
|
|
8
|
-
|
|
10
|
+
const eventName = traversal_1.Traversal.escapeNamespace(node.findFirstExpression(abaplint.Expressions.EventName)?.concatTokens())?.toLowerCase().replace("~", "$");
|
|
11
|
+
const parameters = node.findFirstExpression(abaplint.Expressions.ParameterListS);
|
|
12
|
+
let extra = "";
|
|
13
|
+
if (parameters) {
|
|
14
|
+
extra = "," + new expressions_1.ParameterListSTranspiler().transpile(parameters, traversal).getCode();
|
|
15
|
+
}
|
|
16
|
+
return new chunk_1.Chunk().append(`await abap.statements.raiseEvent(this.${eventName}, this.me${extra});`, node, traversal);
|
|
9
17
|
}
|
|
10
18
|
}
|
|
11
19
|
exports.RaiseEventTranspiler = RaiseEventTranspiler;
|
|
@@ -7,20 +7,62 @@ const expressions_1 = require("../expressions");
|
|
|
7
7
|
class SetHandlerTranspiler {
|
|
8
8
|
transpile(node, traversal) {
|
|
9
9
|
const methods = [];
|
|
10
|
+
let className = undefined;
|
|
11
|
+
let eventName = undefined;
|
|
10
12
|
for (const m of node.findDirectExpressions(abaplint.Expressions.MethodSource)) {
|
|
11
|
-
methods.push(new expressions_1.MethodSourceTranspiler().transpile(m, traversal).getCode());
|
|
13
|
+
methods.push(new expressions_1.MethodSourceTranspiler().transpile(m, traversal).getCode().replace("await ", ""));
|
|
14
|
+
if (className === undefined) {
|
|
15
|
+
const nameToken = m.getFirstToken();
|
|
16
|
+
const scope = traversal.findCurrentScopeByToken(nameToken);
|
|
17
|
+
const method = traversal.findMethodReference(nameToken, scope);
|
|
18
|
+
if (method?.def.isEventHandler() !== true) {
|
|
19
|
+
throw new Error(`SetHandlerTranspiler: Method "${nameToken.getStr()}" is not an event handler`);
|
|
20
|
+
}
|
|
21
|
+
const def = traversal.findClassDefinition(method.def.getClassName(), scope);
|
|
22
|
+
if (def === undefined) {
|
|
23
|
+
throw new Error(`SetHandlerTranspiler: Class "${method.def.getClassName()}" not found`);
|
|
24
|
+
}
|
|
25
|
+
eventName = method.def.getEventName();
|
|
26
|
+
className = this.findEventClass(def, eventName, traversal, scope);
|
|
27
|
+
}
|
|
12
28
|
}
|
|
13
29
|
let f = undefined;
|
|
14
30
|
const forExpression = node.findExpressionAfterToken("FOR");
|
|
15
|
-
if (forExpression) {
|
|
31
|
+
if (forExpression instanceof abaplint.Expressions.Source) {
|
|
16
32
|
f = new expressions_1.SourceTranspiler().transpile(forExpression, traversal).getCode();
|
|
17
33
|
}
|
|
18
|
-
|
|
34
|
+
else {
|
|
35
|
+
f = `"ALL"`;
|
|
36
|
+
}
|
|
37
|
+
let activation = "";
|
|
19
38
|
const activationExpression = node.findExpressionAfterToken("ACTIVATION");
|
|
20
39
|
if (activationExpression) {
|
|
21
|
-
activation = new expressions_1.SourceTranspiler().transpile(activationExpression, traversal).getCode();
|
|
40
|
+
activation = ", " + new expressions_1.SourceTranspiler().transpile(activationExpression, traversal).getCode();
|
|
41
|
+
}
|
|
42
|
+
return new chunk_1.Chunk().append(`abap.statements.setHandler({EVENT_NAME: "${eventName}", EVENT_CLASS: "${className}"}, [${methods.join(",")}], ${f}${activation});`, node, traversal);
|
|
43
|
+
}
|
|
44
|
+
findEventClass(def, eventName, traversal, scope) {
|
|
45
|
+
let current = def;
|
|
46
|
+
while (current !== undefined) {
|
|
47
|
+
for (const event of current.getEvents()) {
|
|
48
|
+
if (event.getName().toUpperCase() === eventName?.toUpperCase()) {
|
|
49
|
+
return traversal.buildInternalName(current.getName(), current);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
for (const implementing of current.getImplementing()) {
|
|
53
|
+
const idef = traversal.findInterfaceDefinition(implementing.name, scope);
|
|
54
|
+
if (idef === undefined) {
|
|
55
|
+
continue;
|
|
56
|
+
}
|
|
57
|
+
for (const event of idef.getEvents()) {
|
|
58
|
+
if (event.getName().toUpperCase() === eventName?.toUpperCase()) {
|
|
59
|
+
return traversal.buildInternalName(idef.getName(), idef);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
current = traversal.findClassDefinition(current.getSuperClass(), scope);
|
|
22
64
|
}
|
|
23
|
-
|
|
65
|
+
throw new Error(`Transpiler: Event "${eventName}" not found in class "${def.getName()}"`);
|
|
24
66
|
}
|
|
25
67
|
}
|
|
26
68
|
exports.SetHandlerTranspiler = SetHandlerTranspiler;
|
|
@@ -6,6 +6,7 @@ const expressions_1 = require("../expressions");
|
|
|
6
6
|
const chunk_1 = require("../chunk");
|
|
7
7
|
const unique_identifier_1 = require("../unique_identifier");
|
|
8
8
|
class WhileTranspiler {
|
|
9
|
+
syIndexBackup;
|
|
9
10
|
constructor(syIndexBackup) {
|
|
10
11
|
this.syIndexBackup = syIndexBackup;
|
|
11
12
|
}
|
package/build/src/traversal.d.ts
CHANGED
|
@@ -42,6 +42,7 @@ export declare class Traversal {
|
|
|
42
42
|
private buildThisAttributes;
|
|
43
43
|
private buildFriendsAccess;
|
|
44
44
|
buildConstructorContents(scope: abaplint.ISpaghettiScopeNode | undefined, def: abaplint.IClassDefinition): string;
|
|
45
|
+
private eventsFromInterfaces;
|
|
45
46
|
findInterfaceDefinition(name: string, scope: abaplint.ISpaghettiScopeNode | undefined): abaplint.IInterfaceDefinition | undefined;
|
|
46
47
|
findTable(name: string): abaplint.Objects.Table | undefined;
|
|
47
48
|
findClassDefinition(name: string | undefined, scope: abaplint.ISpaghettiScopeNode | undefined): abaplint.IClassDefinition | undefined;
|
package/build/src/traversal.js
CHANGED
|
@@ -11,8 +11,12 @@ const expressions_1 = require("./expressions");
|
|
|
11
11
|
const keywords_1 = require("./keywords");
|
|
12
12
|
const feature_flags_1 = require("./feature_flags");
|
|
13
13
|
class Traversal {
|
|
14
|
+
spaghetti;
|
|
15
|
+
file;
|
|
16
|
+
obj;
|
|
17
|
+
reg;
|
|
18
|
+
options;
|
|
14
19
|
constructor(spaghetti, file, obj, reg, options) {
|
|
15
|
-
this.scopeCache = undefined;
|
|
16
20
|
this.spaghetti = spaghetti;
|
|
17
21
|
this.file = file;
|
|
18
22
|
this.obj = obj;
|
|
@@ -68,6 +72,7 @@ class Traversal {
|
|
|
68
72
|
}
|
|
69
73
|
return undefined;
|
|
70
74
|
}
|
|
75
|
+
scopeCache = undefined;
|
|
71
76
|
findCurrentScopeByToken(token) {
|
|
72
77
|
const filename = this.file.getFilename();
|
|
73
78
|
if (this.scopeCache
|
|
@@ -472,6 +477,7 @@ this.INTERNAL_ID = abap.internalIdCounter++;\n`;
|
|
|
472
477
|
for (const i of def.getImplementing()) {
|
|
473
478
|
ret += this.dataFromInterfaces(i.name, scope, cName);
|
|
474
479
|
ret += this.aliasesFromInterfaces(i.name, scope, cName);
|
|
480
|
+
ret += this.eventsFromInterfaces(i.name, scope);
|
|
475
481
|
}
|
|
476
482
|
// handle aliases after initialization of carrier variables
|
|
477
483
|
for (const a of def.getAliases() || []) {
|
|
@@ -481,6 +487,27 @@ this.INTERNAL_ID = abap.internalIdCounter++;\n`;
|
|
|
481
487
|
for (const c of def.getAttributes()?.getConstants() || []) {
|
|
482
488
|
ret += "this." + Traversal.escapeNamespace(c.getName().toLowerCase()) + " = " + cName + "." + Traversal.escapeNamespace(c.getName().toLowerCase()) + ";\n";
|
|
483
489
|
}
|
|
490
|
+
for (const e of def.getEvents() || []) {
|
|
491
|
+
const name = this.buildInternalName(def.getName(), def);
|
|
492
|
+
ret += "this." + Traversal.escapeNamespace(e.getName().toLowerCase()) + " = {\"EVENT_NAME\": \"" + e.getName().toUpperCase() + "\", \"EVENT_CLASS\": \"" + name + "\"};\n";
|
|
493
|
+
}
|
|
494
|
+
return ret;
|
|
495
|
+
}
|
|
496
|
+
eventsFromInterfaces(name, scope) {
|
|
497
|
+
let ret = "";
|
|
498
|
+
const intf = this.findInterfaceDefinition(name, scope);
|
|
499
|
+
if (intf === undefined) {
|
|
500
|
+
return ret;
|
|
501
|
+
}
|
|
502
|
+
for (const e of intf.getEvents() || []) {
|
|
503
|
+
const fname = Traversal.escapeNamespace(e.getName().toLowerCase());
|
|
504
|
+
const iname = Traversal.escapeNamespace(intf?.getName().toLowerCase());
|
|
505
|
+
const name = this.buildInternalName(intf.getName(), intf);
|
|
506
|
+
ret += "this." + iname + "$" + fname + " = {\"EVENT_NAME\": \"" + e.getName().toUpperCase() + "\", \"EVENT_CLASS\": \"" + name + "\"};\n";
|
|
507
|
+
}
|
|
508
|
+
for (const i of intf.getImplementing() || []) {
|
|
509
|
+
ret += this.eventsFromInterfaces(i.name, scope);
|
|
510
|
+
}
|
|
484
511
|
return ret;
|
|
485
512
|
}
|
|
486
513
|
findInterfaceDefinition(name, scope) {
|
|
@@ -2,6 +2,8 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.UniqueIdentifier = void 0;
|
|
4
4
|
class UniqueIdentifier {
|
|
5
|
+
static counter = 0;
|
|
6
|
+
static indexBackup = 0;
|
|
5
7
|
static reset() {
|
|
6
8
|
this.counter = 0;
|
|
7
9
|
}
|
|
@@ -23,6 +25,4 @@ class UniqueIdentifier {
|
|
|
23
25
|
}
|
|
24
26
|
}
|
|
25
27
|
exports.UniqueIdentifier = UniqueIdentifier;
|
|
26
|
-
UniqueIdentifier.counter = 0;
|
|
27
|
-
UniqueIdentifier.indexBackup = 0;
|
|
28
28
|
//# sourceMappingURL=unique_identifier.js.map
|
package/build/src/validation.js
CHANGED
|
@@ -105,6 +105,7 @@ exports.config = {
|
|
|
105
105
|
// todo, make sure nothing is overloaded, eg "lines()", there is a rule for this in abaplint now
|
|
106
106
|
// hmm this ^ is okay? since lines will be prefixed with "abap.builtin"?
|
|
107
107
|
class Validation {
|
|
108
|
+
options;
|
|
108
109
|
constructor(options) {
|
|
109
110
|
this.options = options;
|
|
110
111
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@abaplint/transpiler",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.11.1",
|
|
4
4
|
"description": "Transpiler",
|
|
5
5
|
"main": "build/src/index.js",
|
|
6
6
|
"typings": "build/src/index.d.ts",
|
|
@@ -29,7 +29,7 @@
|
|
|
29
29
|
"author": "abaplint",
|
|
30
30
|
"license": "MIT",
|
|
31
31
|
"dependencies": {
|
|
32
|
-
"@abaplint/core": "^2.113.
|
|
32
|
+
"@abaplint/core": "^2.113.151",
|
|
33
33
|
"source-map": "^0.7.6"
|
|
34
34
|
},
|
|
35
35
|
"devDependencies": {
|