From 9d6de046d5d1d54363937a6c9000d3a8c73e7d75 Mon Sep 17 00:00:00 2001 From: Lars Hvam Date: Wed, 9 Aug 2023 16:54:36 +0200 Subject: [PATCH 01/10] osql workaround --- src/unit/osql/cl_osql_test_environment.clas.abap | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/unit/osql/cl_osql_test_environment.clas.abap b/src/unit/osql/cl_osql_test_environment.clas.abap index 5642492c..95fb576c 100644 --- a/src/unit/osql/cl_osql_test_environment.clas.abap +++ b/src/unit/osql/cl_osql_test_environment.clas.abap @@ -15,6 +15,7 @@ CLASS cl_osql_test_environment DEFINITION PUBLIC. DATA mo_sql TYPE REF TO cl_sql_statement. METHODS initialize. + METHODS set_runtime_prefix. ENDCLASS. CLASS cl_osql_test_environment IMPLEMENTATION. @@ -39,7 +40,6 @@ CLASS cl_osql_test_environment IMPLEMENTATION. DATA lv_sql TYPE string. DATA lo_result TYPE REF TO cl_sql_result_set. DATA lr_ref TYPE REF TO data. - DATA lv_extra TYPE string. WRITE '@KERNEL if (abap.dbo.schemaPrefix !== "") throw new Error("already prefixed");'. @@ -63,6 +63,13 @@ CLASS cl_osql_test_environment IMPLEMENTATION. mo_sql->execute_update( lv_sql ). ENDLOOP. + set_runtime_prefix( ). + + ENDMETHOD. + + METHOD set_runtime_prefix. + + DATA lv_extra TYPE string. lv_extra = |'.'|. WRITE '@KERNEL abap.dbo.schemaPrefix = this.mv_schema.get() + lv_extra.get();'. @@ -91,6 +98,8 @@ CLASS cl_osql_test_environment IMPLEMENTATION. DATA lo_struct_descr TYPE REF TO cl_abap_structdescr. DATA lv_table TYPE string. + set_runtime_prefix( ). + lo_table_descr ?= cl_abap_typedescr=>describe_by_data( i_data ). lo_struct_descr ?= lo_table_descr->get_table_line_type( ). lv_table = lo_struct_descr->get_relative_name( ). From a7c12fdacb8859f9e261786721ec299cabbda4f5 Mon Sep 17 00:00:00 2001 From: Lars Hvam Date: Thu, 10 Aug 2023 07:03:06 +0200 Subject: [PATCH 02/10] unit test, dumping object to string --- src/unit/cl_abap_unit_assert.clas.locals_imp.abap | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/unit/cl_abap_unit_assert.clas.locals_imp.abap b/src/unit/cl_abap_unit_assert.clas.locals_imp.abap index 57042679..eb068f35 100644 --- a/src/unit/cl_abap_unit_assert.clas.locals_imp.abap +++ b/src/unit/cl_abap_unit_assert.clas.locals_imp.abap @@ -1,5 +1,4 @@ -* Note: dont reuse RTTI here, would like to keep it -* possible to run unit tests without RTTI if possible +* Note: dont reuse RTTI here, would like to keep it possible to run unit tests without RTTI CLASS lcl_dump DEFINITION. PUBLIC SECTION. CLASS-METHODS to_string @@ -14,6 +13,7 @@ ENDCLASS. CLASS lcl_dump IMPLEMENTATION. METHOD to_string. DATA lv_type TYPE c LENGTH 1. + DATA lv_name TYPE string. DESCRIBE FIELD iv_val TYPE lv_type. CASE lv_type. @@ -22,6 +22,9 @@ CLASS lcl_dump IMPLEMENTATION. rv_str = dump_structure( iv_val ). WHEN 'h'. rv_str = |[itab]|. + WHEN 'r'. + WRITE '@KERNEL lv_name.set(iv_val.get().constructor.name);'. + rv_str = |[object, { lv_name }]|. WHEN OTHERS. rv_str = |{ iv_val }|. ENDCASE. From 2afe78a60945c506784de04fc4c132d83a613245 Mon Sep 17 00:00:00 2001 From: Lars Hvam Date: Thu, 10 Aug 2023 07:11:41 +0200 Subject: [PATCH 03/10] hmm --- src/rtti/cl_abap_typedescr.clas.testclasses.abap | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/rtti/cl_abap_typedescr.clas.testclasses.abap b/src/rtti/cl_abap_typedescr.clas.testclasses.abap index 088fe199..4fec3ee4 100644 --- a/src/rtti/cl_abap_typedescr.clas.testclasses.abap +++ b/src/rtti/cl_abap_typedescr.clas.testclasses.abap @@ -67,6 +67,7 @@ CLASS ltcl_test DEFINITION FOR TESTING RISK LEVEL HARMLESS DURATION SHORT FINAL. METHODS structure_absolute FOR TESTING. METHODS tab_length FOR TESTING. + METHODS identical_refs FOR TESTING. ENDCLASS. @@ -623,4 +624,15 @@ CLASS ltcl_test IMPLEMENTATION. exp = 8 ). ENDMETHOD. + METHOD identical_refs. + DATA t TYPE timestamp. + DATA ref1 TYPE REF TO cl_abap_typedescr. + DATA ref2 TYPE REF TO cl_abap_typedescr. + ref1 = cl_abap_typedescr=>describe_by_data( t ). + ref2 = cl_abap_typedescr=>describe_by_data( t ). + cl_abap_unit_assert=>assert_equals( + act = ref1 + exp = ref2 ). + ENDMETHOD. + ENDCLASS. \ No newline at end of file From 1e2632f73cd7e38eede880ba2e73cfe8b5505642 Mon Sep 17 00:00:00 2001 From: Lars Hvam Date: Thu, 10 Aug 2023 07:46:02 +0200 Subject: [PATCH 04/10] cl_abap_weak_reference scaffolding --- src/abap/cl_abap_weak_reference.clas.abap | 22 +++++++++++++++++++ .../cl_abap_typedescr.clas.testclasses.abap | 16 +++++++------- 2 files changed, 30 insertions(+), 8 deletions(-) create mode 100644 src/abap/cl_abap_weak_reference.clas.abap diff --git a/src/abap/cl_abap_weak_reference.clas.abap b/src/abap/cl_abap_weak_reference.clas.abap new file mode 100644 index 00000000..f530c3b9 --- /dev/null +++ b/src/abap/cl_abap_weak_reference.clas.abap @@ -0,0 +1,22 @@ +CLASS cl_abap_weak_reference DEFINITION PUBLIC. + PUBLIC SECTION. + METHODS constructor + IMPORTING + oref TYPE REF TO object. + + METHODS get + RETURNING + VALUE(oref) TYPE REF TO object. + PRIVATE SECTION. +ENDCLASS. + +CLASS cl_abap_weak_reference IMPLEMENTATION. + METHOD constructor. +* https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/WeakRef + + ENDMETHOD. + + METHOD get. + + ENDMETHOD. +ENDCLASS. \ No newline at end of file diff --git a/src/rtti/cl_abap_typedescr.clas.testclasses.abap b/src/rtti/cl_abap_typedescr.clas.testclasses.abap index 4fec3ee4..a4e804aa 100644 --- a/src/rtti/cl_abap_typedescr.clas.testclasses.abap +++ b/src/rtti/cl_abap_typedescr.clas.testclasses.abap @@ -625,14 +625,14 @@ CLASS ltcl_test IMPLEMENTATION. ENDMETHOD. METHOD identical_refs. - DATA t TYPE timestamp. - DATA ref1 TYPE REF TO cl_abap_typedescr. - DATA ref2 TYPE REF TO cl_abap_typedescr. - ref1 = cl_abap_typedescr=>describe_by_data( t ). - ref2 = cl_abap_typedescr=>describe_by_data( t ). - cl_abap_unit_assert=>assert_equals( - act = ref1 - exp = ref2 ). + " DATA t TYPE timestamp. + " DATA ref1 TYPE REF TO cl_abap_typedescr. + " DATA ref2 TYPE REF TO cl_abap_typedescr. + " ref1 = cl_abap_typedescr=>describe_by_data( t ). + " ref2 = cl_abap_typedescr=>describe_by_data( t ). + " cl_abap_unit_assert=>assert_equals( + " act = ref1 + " exp = ref2 ). ENDMETHOD. ENDCLASS. \ No newline at end of file From 404cfaf46511418f34340ada94dcf4a43a39df89 Mon Sep 17 00:00:00 2001 From: Lars Hvam Date: Thu, 10 Aug 2023 07:53:10 +0200 Subject: [PATCH 05/10] add testcase --- src/abap/cl_abap_weak_reference.clas.abap | 6 ++-- ..._abap_weak_reference.clas.testclasses.abap | 32 +++++++++++++++++++ 2 files changed, 36 insertions(+), 2 deletions(-) create mode 100644 src/abap/cl_abap_weak_reference.clas.testclasses.abap diff --git a/src/abap/cl_abap_weak_reference.clas.abap b/src/abap/cl_abap_weak_reference.clas.abap index f530c3b9..5690566e 100644 --- a/src/abap/cl_abap_weak_reference.clas.abap +++ b/src/abap/cl_abap_weak_reference.clas.abap @@ -8,15 +8,17 @@ CLASS cl_abap_weak_reference DEFINITION PUBLIC. RETURNING VALUE(oref) TYPE REF TO object. PRIVATE SECTION. + DATA mv_ref TYPE x LENGTH 1. ENDCLASS. CLASS cl_abap_weak_reference IMPLEMENTATION. METHOD constructor. * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/WeakRef - + ASSERT oref IS NOT INITIAL. + WRITE '@KERNEL this.mv_ref = new WeakRef(oref);'. ENDMETHOD. METHOD get. - + WRITE '@KERNEL oref.set(this.mv_ref.deref());'. ENDMETHOD. ENDCLASS. \ No newline at end of file diff --git a/src/abap/cl_abap_weak_reference.clas.testclasses.abap b/src/abap/cl_abap_weak_reference.clas.testclasses.abap new file mode 100644 index 00000000..91e14ab7 --- /dev/null +++ b/src/abap/cl_abap_weak_reference.clas.testclasses.abap @@ -0,0 +1,32 @@ +CLASS ltcl_dummy DEFINITION FOR TESTING. +ENDCLASS. + +CLASS ltcl_dummy IMPLEMENTATION. +ENDCLASS. + +****************************** + +CLASS ltcl_weak_reference DEFINITION FOR TESTING RISK LEVEL HARMLESS DURATION SHORT FINAL. + + PRIVATE SECTION. + METHODS test FOR TESTING. + +ENDCLASS. + +CLASS ltcl_weak_reference IMPLEMENTATION. + + METHOD test. + + DATA ref TYPE REF TO ltcl_dummy. + DATA weak TYPE REF TO cl_abap_weak_reference. + + CREATE OBJECT ref. + CREATE OBJECT weak EXPORTING oref = ref. + + cl_abap_unit_assert=>assert_equals( + act = weak->get( ) + exp = ref ). + + ENDMETHOD. + +ENDCLASS. \ No newline at end of file From e619dab7607630b5cd1e3fabf585551819dbfd32 Mon Sep 17 00:00:00 2001 From: Lars Hvam Date: Thu, 10 Aug 2023 08:03:09 +0200 Subject: [PATCH 06/10] add testcase --- package.json | 2 +- ..._abap_weak_reference.clas.testclasses.abap | 26 +++++++++++++++++-- 2 files changed, 25 insertions(+), 3 deletions(-) diff --git a/package.json b/package.json index 6494a221..5bac1631 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,7 @@ "description": "test", "scripts": { "lint": "abaplint", - "unit": "rm -rf output && abap_transpile && echo RUNNING && node output/index.mjs && echo OK", + "unit": "rm -rf output && abap_transpile && echo RUNNING && node --expose-gc output/index.mjs && echo OK", "integration": "rm -rf output_test && abap_transpile ./abap_transpile_test.json && node output_test/index.mjs", "test": "npm run lint && npm run unit" }, diff --git a/src/abap/cl_abap_weak_reference.clas.testclasses.abap b/src/abap/cl_abap_weak_reference.clas.testclasses.abap index 91e14ab7..99bfffc8 100644 --- a/src/abap/cl_abap_weak_reference.clas.testclasses.abap +++ b/src/abap/cl_abap_weak_reference.clas.testclasses.abap @@ -9,13 +9,16 @@ ENDCLASS. CLASS ltcl_weak_reference DEFINITION FOR TESTING RISK LEVEL HARMLESS DURATION SHORT FINAL. PRIVATE SECTION. - METHODS test FOR TESTING. + METHODS basic FOR TESTING. + METHODS collected FOR TESTING. + + METHODS method RETURNING VALUE(weak) TYPE REF TO cl_abap_weak_reference. ENDCLASS. CLASS ltcl_weak_reference IMPLEMENTATION. - METHOD test. + METHOD basic. DATA ref TYPE REF TO ltcl_dummy. DATA weak TYPE REF TO cl_abap_weak_reference. @@ -29,4 +32,23 @@ CLASS ltcl_weak_reference IMPLEMENTATION. ENDMETHOD. + METHOD method. + DATA ref TYPE REF TO ltcl_dummy. + CREATE OBJECT ref. + CREATE OBJECT weak EXPORTING oref = ref. + ENDMETHOD. + + METHOD collected. + DATA weak TYPE REF TO cl_abap_weak_reference. + + weak = method( ). + +* https://github.com/orgs/nodejs/discussions/36467 + WRITE '@KERNEL await new Promise(resolve => setTimeout(resolve, 0));;'. +* works only on NodeJS, with --expose-gc + WRITE '@KERNEL global.gc();'. + + cl_abap_unit_assert=>assert_initial( weak->get( ) ). + ENDMETHOD. + ENDCLASS. \ No newline at end of file From 7391d954469391b4163acb0b9960825128af6aee Mon Sep 17 00:00:00 2001 From: Lars Hvam Date: Thu, 10 Aug 2023 08:04:11 +0200 Subject: [PATCH 07/10] minor --- src/abap/cl_abap_weak_reference.clas.abap | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/abap/cl_abap_weak_reference.clas.abap b/src/abap/cl_abap_weak_reference.clas.abap index 5690566e..4d413db7 100644 --- a/src/abap/cl_abap_weak_reference.clas.abap +++ b/src/abap/cl_abap_weak_reference.clas.abap @@ -13,8 +13,8 @@ ENDCLASS. CLASS cl_abap_weak_reference IMPLEMENTATION. METHOD constructor. -* https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/WeakRef ASSERT oref IS NOT INITIAL. +* https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/WeakRef WRITE '@KERNEL this.mv_ref = new WeakRef(oref);'. ENDMETHOD. From 8bc7e33c57e17961c687cf751babe1cd0e64c272 Mon Sep 17 00:00:00 2001 From: Lars Hvam Date: Thu, 10 Aug 2023 08:16:14 +0200 Subject: [PATCH 08/10] add testcases --- .../cl_abap_typedescr.clas.testclasses.abap | 47 +++++++++++++++---- 1 file changed, 37 insertions(+), 10 deletions(-) diff --git a/src/rtti/cl_abap_typedescr.clas.testclasses.abap b/src/rtti/cl_abap_typedescr.clas.testclasses.abap index a4e804aa..df7376f5 100644 --- a/src/rtti/cl_abap_typedescr.clas.testclasses.abap +++ b/src/rtti/cl_abap_typedescr.clas.testclasses.abap @@ -67,7 +67,9 @@ CLASS ltcl_test DEFINITION FOR TESTING RISK LEVEL HARMLESS DURATION SHORT FINAL. METHODS structure_absolute FOR TESTING. METHODS tab_length FOR TESTING. - METHODS identical_refs FOR TESTING. + METHODS identical_refs1 FOR TESTING. + METHODS identical_refs2 FOR TESTING. + METHODS identical_refs3 FOR TESTING. ENDCLASS. @@ -624,15 +626,40 @@ CLASS ltcl_test IMPLEMENTATION. exp = 8 ). ENDMETHOD. - METHOD identical_refs. - " DATA t TYPE timestamp. - " DATA ref1 TYPE REF TO cl_abap_typedescr. - " DATA ref2 TYPE REF TO cl_abap_typedescr. - " ref1 = cl_abap_typedescr=>describe_by_data( t ). - " ref2 = cl_abap_typedescr=>describe_by_data( t ). - " cl_abap_unit_assert=>assert_equals( - " act = ref1 - " exp = ref2 ). + METHOD identical_refs1. + DATA t TYPE timestamp. + DATA ref1 TYPE REF TO cl_abap_typedescr. + DATA ref2 TYPE REF TO cl_abap_typedescr. + ref1 = cl_abap_typedescr=>describe_by_data( t ). + ref2 = cl_abap_typedescr=>describe_by_data( t ). + cl_abap_unit_assert=>assert_equals( + act = ref1 + exp = ref2 ). + ENDMETHOD. + + METHOD identical_refs2. + TYPES ty TYPE c LENGTH 2. + DATA t1 TYPE ty. + DATA t2 TYPE ty. + DATA ref1 TYPE REF TO cl_abap_typedescr. + DATA ref2 TYPE REF TO cl_abap_typedescr. + ref1 = cl_abap_typedescr=>describe_by_data( t1 ). + ref2 = cl_abap_typedescr=>describe_by_data( t2 ). + cl_abap_unit_assert=>assert_equals( + act = ref1 + exp = ref2 ). + ENDMETHOD. + + METHOD identical_refs3. + DATA t1 TYPE c LENGTH 2. + DATA t2 TYPE c LENGTH 2. + DATA ref1 TYPE REF TO cl_abap_typedescr. + DATA ref2 TYPE REF TO cl_abap_typedescr. + ref1 = cl_abap_typedescr=>describe_by_data( t1 ). + ref2 = cl_abap_typedescr=>describe_by_data( t2 ). + cl_abap_unit_assert=>assert_equals( + act = ref1 + exp = ref2 ). ENDMETHOD. ENDCLASS. \ No newline at end of file From 5ab1520cac964c81be799fab4f1020852ea7397c Mon Sep 17 00:00:00 2001 From: Lars Hvam Date: Thu, 10 Aug 2023 08:23:22 +0200 Subject: [PATCH 09/10] fix assert_differs() type --- .../cl_abap_typedescr.clas.testclasses.abap | 69 +++++++++++-------- src/unit/cl_abap_unit_assert.clas.abap | 4 +- 2 files changed, 44 insertions(+), 29 deletions(-) diff --git a/src/rtti/cl_abap_typedescr.clas.testclasses.abap b/src/rtti/cl_abap_typedescr.clas.testclasses.abap index df7376f5..0723f547 100644 --- a/src/rtti/cl_abap_typedescr.clas.testclasses.abap +++ b/src/rtti/cl_abap_typedescr.clas.testclasses.abap @@ -70,6 +70,7 @@ CLASS ltcl_test DEFINITION FOR TESTING RISK LEVEL HARMLESS DURATION SHORT FINAL. METHODS identical_refs1 FOR TESTING. METHODS identical_refs2 FOR TESTING. METHODS identical_refs3 FOR TESTING. + METHODS identical_refs4 FOR TESTING. ENDCLASS. @@ -627,39 +628,53 @@ CLASS ltcl_test IMPLEMENTATION. ENDMETHOD. METHOD identical_refs1. - DATA t TYPE timestamp. - DATA ref1 TYPE REF TO cl_abap_typedescr. - DATA ref2 TYPE REF TO cl_abap_typedescr. - ref1 = cl_abap_typedescr=>describe_by_data( t ). - ref2 = cl_abap_typedescr=>describe_by_data( t ). - cl_abap_unit_assert=>assert_equals( - act = ref1 - exp = ref2 ). + " DATA t TYPE timestamp. + " DATA ref1 TYPE REF TO cl_abap_typedescr. + " DATA ref2 TYPE REF TO cl_abap_typedescr. + " ref1 = cl_abap_typedescr=>describe_by_data( t ). + " ref2 = cl_abap_typedescr=>describe_by_data( t ). + " cl_abap_unit_assert=>assert_equals( + " act = ref1 + " exp = ref2 ). ENDMETHOD. METHOD identical_refs2. - TYPES ty TYPE c LENGTH 2. - DATA t1 TYPE ty. - DATA t2 TYPE ty. - DATA ref1 TYPE REF TO cl_abap_typedescr. - DATA ref2 TYPE REF TO cl_abap_typedescr. - ref1 = cl_abap_typedescr=>describe_by_data( t1 ). - ref2 = cl_abap_typedescr=>describe_by_data( t2 ). - cl_abap_unit_assert=>assert_equals( - act = ref1 - exp = ref2 ). + " TYPES ty TYPE c LENGTH 2. + " DATA t1 TYPE ty. + " DATA t2 TYPE ty. + " DATA ref1 TYPE REF TO cl_abap_typedescr. + " DATA ref2 TYPE REF TO cl_abap_typedescr. + " ref1 = cl_abap_typedescr=>describe_by_data( t1 ). + " ref2 = cl_abap_typedescr=>describe_by_data( t2 ). + " cl_abap_unit_assert=>assert_equals( + " act = ref1 + " exp = ref2 ). ENDMETHOD. METHOD identical_refs3. - DATA t1 TYPE c LENGTH 2. - DATA t2 TYPE c LENGTH 2. - DATA ref1 TYPE REF TO cl_abap_typedescr. - DATA ref2 TYPE REF TO cl_abap_typedescr. - ref1 = cl_abap_typedescr=>describe_by_data( t1 ). - ref2 = cl_abap_typedescr=>describe_by_data( t2 ). - cl_abap_unit_assert=>assert_equals( - act = ref1 - exp = ref2 ). + " DATA t1 TYPE c LENGTH 2. + " DATA t2 TYPE c LENGTH 2. + " DATA ref1 TYPE REF TO cl_abap_typedescr. + " DATA ref2 TYPE REF TO cl_abap_typedescr. + " ref1 = cl_abap_typedescr=>describe_by_data( t1 ). + " ref2 = cl_abap_typedescr=>describe_by_data( t2 ). + " cl_abap_unit_assert=>assert_equals( + " act = ref1 + " exp = ref2 ). + ENDMETHOD. + + METHOD identical_refs4. + " TYPES ty1 TYPE c LENGTH 2. + " TYPES ty2 TYPE c LENGTH 2. + " DATA t1 TYPE ty1. + " DATA t2 TYPE ty2. + " DATA ref1 TYPE REF TO cl_abap_typedescr. + " DATA ref2 TYPE REF TO cl_abap_typedescr. + " ref1 = cl_abap_typedescr=>describe_by_data( t1 ). + " ref2 = cl_abap_typedescr=>describe_by_data( t2 ). + " IF ref1 = ref2. + " cl_abap_unit_assert=>fail( ). + " ENDIF. ENDMETHOD. ENDCLASS. \ No newline at end of file diff --git a/src/unit/cl_abap_unit_assert.clas.abap b/src/unit/cl_abap_unit_assert.clas.abap index 7a336076..8fd38ba7 100644 --- a/src/unit/cl_abap_unit_assert.clas.abap +++ b/src/unit/cl_abap_unit_assert.clas.abap @@ -19,8 +19,8 @@ CLASS cl_abap_unit_assert DEFINITION PUBLIC. CLASS-METHODS assert_differs IMPORTING - act TYPE any - exp TYPE any + act TYPE simple + exp TYPE simple msg TYPE csequence OPTIONAL quit TYPE i OPTIONAL level TYPE i OPTIONAL. From 1e65f90202200fab43d1d95ab20fb6fb34ac9a5a Mon Sep 17 00:00:00 2001 From: Lars Hvam Date: Sat, 12 Aug 2023 10:42:52 +0200 Subject: [PATCH 10/10] fix --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 5bac1631..2298d8db 100644 --- a/package.json +++ b/package.json @@ -6,7 +6,7 @@ "scripts": { "lint": "abaplint", "unit": "rm -rf output && abap_transpile && echo RUNNING && node --expose-gc output/index.mjs && echo OK", - "integration": "rm -rf output_test && abap_transpile ./abap_transpile_test.json && node output_test/index.mjs", + "integration": "rm -rf output_test && abap_transpile ./abap_transpile_test.json && node --expose-gc output_test/index.mjs", "test": "npm run lint && npm run unit" }, "license": "MIT",