All files / output zcl_abapgit_data_serializer.clas.mjs

88.32% Statements 121/137
50% Branches 14/28
46.15% Functions 6/13
88.32% Lines 121/137

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 1371x 1x 1x 1x 1x 1x 1x 1x 1x 1x 3x 3x 3x 3x 3x 3x 3x 3x 3x 1x 3x 3x 3x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x     1x 1x               1x 1x 1x 1x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 1x 2x     2x 1x 1x 1x       1x 1x 2x     1x 2x 1x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 2x 1x 3x 1x 1x 2x 2x 2x 2x 2x 3x 1x 1x 1x 1x 1x
const {cx_root} = await import("./cx_root.clas.mjs");
// zcl_abapgit_data_serializer.clas.abap
class zcl_abapgit_data_serializer {
  static INTERNAL_TYPE = 'CLAS';
  static INTERNAL_NAME = 'ZCL_ABAPGIT_DATA_SERIALIZER';
  static IMPLEMENTED_INTERFACES = ["ZIF_ABAPGIT_DATA_SERIALIZER"];
  static ATTRIBUTES = {"C_MAX_RECORDS": {"type": () => {return new abap.types.Integer({qualifiedName: "I"});}, "visibility": "I", "is_constant": "X", "is_class": "X"}};
  static METHODS = {"CONVERT_ITAB_TO_JSON": {"visibility": "I", "parameters": {"RV_DATA": {"type": () => {return new abap.types.XString({qualifiedName: "XSTRING"});}, "is_optional": " "}, "IR_DATA": {"type": () => {return new abap.types.DataReference(new abap.types.Character(4));}, "is_optional": " "}, "IV_SKIP_INITIAL": {"type": () => {return new abap.types.Character(1, {"qualifiedName":"ABAP_BOOL","ddicName":"ABAP_BOOL"});}, "is_optional": " "}}},
  "READ_DATABASE_TABLE": {"visibility": "I", "parameters": {"RR_DATA": {"type": () => {return new abap.types.DataReference(new abap.types.Character(4));}, "is_optional": " "}, "IV_NAME": {"type": () => {return new abap.types.Character(40, {});}, "is_optional": " "}, "IT_WHERE": {"type": () => {return abap.types.TableFactory.construct(new abap.types.String({qualifiedName: "STRING"}), {"withHeader":false,"keyType":"DEFAULT","primaryKey":{"isUnique":false,"type":"STANDARD","keyFields":[],"name":"primary_key"},"secondary":[]}, "STRING_TABLE");}, "is_optional": " "}}}};
  constructor() {
    this.me = new abap.types.ABAPObject();
    this.me.set(this);
    this.INTERNAL_ID = abap.internalIdCounter++;
    this.FRIENDS_ACCESS_INSTANCE = {
      "convert_itab_to_json": this.#convert_itab_to_json.bind(this),
      "read_database_table": this.#read_database_table.bind(this),
    };
    this.c_max_records = zcl_abapgit_data_serializer.c_max_records;
  }
  async constructor_(INPUT) {
    if (super.constructor_) { await super.constructor_(INPUT); }
    return this;
  }
  async #convert_itab_to_json(INPUT) {
    let rv_data = new abap.types.XString({qualifiedName: "XSTRING"});
    let ir_data = INPUT?.ir_data;
    if (ir_data === undefined) { ir_data = new abap.types.DataReference(new abap.types.Character(4)).set(INPUT.ir_data); }
    let iv_skip_initial = INPUT?.iv_skip_initial;
    if (iv_skip_initial?.getQualifiedName === undefined || iv_skip_initial.getQualifiedName() !== "ABAP_BOOL") { iv_skip_initial = undefined; }
    if (iv_skip_initial === undefined) { iv_skip_initial = new abap.types.Character(1, {"qualifiedName":"ABAP_BOOL","ddicName":"ABAP_BOOL"}).set(INPUT.iv_skip_initial); }
    let lo_ajson = new abap.types.ABAPObject({qualifiedName: "ZCL_ABAPGIT_AJSON", RTTIName: "\\CLASS=ZCL_ABAPGIT_AJSON"});
    let lv_string = new abap.types.String({qualifiedName: "STRING"});
    let lx_ajson = new abap.types.ABAPObject({qualifiedName: "ZCX_ABAPGIT_AJSON_ERROR", RTTIName: "\\CLASS=ZCX_ABAPGIT_AJSON_ERROR"});
    let fs_lg_tab_ = new abap.types.FieldSymbol(abap.types.TableFactory.construct(new abap.types.Character(4), {"withHeader":false,"keyType":"DEFAULT"}));
    abap.statements.assign({target: fs_lg_tab_, source: ir_data.dereference()});
    try {
      lo_ajson.set((await abap.Classes['ZCL_ABAPGIT_AJSON'].create_empty()));
      await lo_ajson.get().zif_abapgit_ajson$keep_item_order();
      await lo_ajson.get().zif_abapgit_ajson$set({iv_path: abap.CharacterFactory.get(1, '/'), iv_val: fs_lg_tab_});
      if (abap.compare.eq(iv_skip_initial, abap.builtin.abap_true)) {
        lo_ajson.set((await abap.Classes['ZCL_ABAPGIT_AJSON'].create_from({ii_source_json: lo_ajson, ii_filter: (await abap.Classes['ZCL_ABAPGIT_AJSON_FILTER_LIB'].create_empty_filter())})));
      }
      lv_string.set((await lo_ajson.get().zif_abapgit_ajson$stringify({iv_indent: abap.IntegerFactory.get(2)})));
    } catch (e) {
      if ((abap.Classes['ZCX_ABAPGIT_AJSON_ERROR'] && e instanceof abap.Classes['ZCX_ABAPGIT_AJSON_ERROR'])) {
        lx_ajson.set(e);
        await abap.Classes['ZCX_ABAPGIT_EXCEPTION'].raise({iv_text: (await lx_ajson.get().if_message$get_text())});
      } else {
        throw e;
      }
    }
    rv_data.set((await abap.Classes['ZCL_ABAPGIT_CONVERT'].string_to_xstring_utf8({iv_string: lv_string})));
    return rv_data;
  }
  async #read_database_table(INPUT) {
    let rr_data = new abap.types.DataReference(new abap.types.Character(4));
    let iv_name = INPUT?.iv_name;
    if (iv_name === undefined) { iv_name = new abap.types.Character(40, {}).set(INPUT.iv_name); }
    let it_where = INPUT?.it_where;
    if (it_where?.getQualifiedName === undefined || it_where.getQualifiedName() !== "STRING_TABLE") { it_where = undefined; }
    if (it_where === undefined) { it_where = abap.types.TableFactory.construct(new abap.types.String({qualifiedName: "STRING"}), {"withHeader":false,"keyType":"DEFAULT","primaryKey":{"isUnique":false,"type":"STANDARD","keyFields":[],"name":"primary_key"},"secondary":[]}, "STRING_TABLE").set(INPUT.it_where); }
    let lv_records = new abap.types.Integer({qualifiedName: "I"});
    let lv_where = new abap.types.String({qualifiedName: "STRING"});
    let lx_sql = new abap.types.ABAPObject({qualifiedName: "CX_SY_SQL_ERROR", RTTIName: "\\CLASS=CX_SY_SQL_ERROR"});
    let fs_lg_tab_ = new abap.types.FieldSymbol(abap.types.TableFactory.construct(new abap.types.Character(4), {"withHeader":false,"keyType":"DEFAULT"}));
    rr_data.set((await abap.Classes['ZCL_ABAPGIT_DATA_UTILS'].build_table_itab({iv_name: iv_name})));
    abap.statements.assign({target: fs_lg_tab_, source: rr_data.dereference()});
    try {
      for await (const unique68 of abap.statements.loop(it_where)) {
        lv_where.set(unique68);
        await abap.statements.select(fs_lg_tab_, {select: "SELECT * FROM " + abap.buildDbTableName(iv_name.get().trimEnd().toLowerCase()) + " WHERE " + abap.expandDynamic(lv_where.get(), (name) => {try { return eval(name);} catch {}}) + " ORDER BY PRIMARY KEY"}, {appending: true});
      }
      if (abap.compare.eq(abap.builtin.lines({val: it_where}), abap.IntegerFactory.get(0))) {
        await abap.statements.select(fs_lg_tab_, {select: "SELECT * FROM " + abap.buildDbTableName(iv_name.get().trimEnd().toLowerCase()) + " ORDER BY PRIMARY KEY"});
      }
    } catch (e) {
      if ((abap.Classes['CX_SY_SQL_ERROR'] && e instanceof abap.Classes['CX_SY_SQL_ERROR'])) {
        lx_sql.set(e);
        await abap.Classes['ZCX_ABAPGIT_EXCEPTION'].raise({iv_text: (await lx_sql.get().if_message$get_text()), ix_previous: lx_sql});
      } else {
        throw e;
      }
    }
    lv_records.set(abap.builtin.lines({val: fs_lg_tab_}));
    if (abap.compare.gt(lv_records, zcl_abapgit_data_serializer.c_max_records)) {
      await abap.Classes['ZCX_ABAPGIT_EXCEPTION'].raise({iv_text: new abap.types.String().set(`Too many records selected from table ${abap.templateFormatting(iv_name)} (selected ${abap.templateFormatting(lv_records)}, max ${abap.templateFormatting(zcl_abapgit_data_serializer.c_max_records)})`)});
    }
    return rr_data;
  }
  async zif_abapgit_data_serializer$serialize(INPUT) {
    let rt_files = abap.types.TableFactory.construct(new abap.types.Structure({
    "path": new abap.types.String({qualifiedName: "ZIF_ABAPGIT_GIT_DEFINITIONS=>TY_FILE_SIGNATURE-PATH"}),
    "filename": new abap.types.String({qualifiedName: "ZIF_ABAPGIT_GIT_DEFINITIONS=>TY_FILE_SIGNATURE-FILENAME"}),
    "sha1": new abap.types.Character(40, {"qualifiedName":"zif_abapgit_git_definitions=>ty_sha1"}),
    "data": new abap.types.XString({qualifiedName: "ZIF_ABAPGIT_GIT_DEFINITIONS=>TY_FILE-DATA"})}, "zif_abapgit_git_definitions=>ty_file", undefined, {}, {}), {"withHeader":false,"keyType":"DEFAULT","primaryKey":{"name":"primary_key","type":"STANDARD","isUnique":false,"keyFields":[]},"secondary":[{"name":"file_path","type":"SORTED","isUnique":true,"keyFields":["PATH","FILENAME"]},{"name":"file","type":"SORTED","isUnique":false,"keyFields":["FILENAME"]}]}, "zif_abapgit_git_definitions=>ty_files_tt");
    let ii_config = INPUT?.ii_config;
    if (ii_config?.getQualifiedName === undefined || ii_config.getQualifiedName() !== "ZIF_ABAPGIT_DATA_CONFIG") { ii_config = undefined; }
    if (ii_config === undefined) { ii_config = new abap.types.ABAPObject({qualifiedName: "ZIF_ABAPGIT_DATA_CONFIG", RTTIName: "\\INTERFACE=ZIF_ABAPGIT_DATA_CONFIG"}).set(INPUT.ii_config); }
    let lt_configs = abap.types.TableFactory.construct(new abap.types.Structure({
    "type": new abap.types.Character(4, {"qualifiedName":"zif_abapgit_data_config=>ty_data_type"}),
    "name": new abap.types.Character(40, {}),
    "skip_initial": new abap.types.Character(1, {"qualifiedName":"ABAP_BOOL","ddicName":"ABAP_BOOL"}),
    "where": abap.types.TableFactory.construct(new abap.types.String({qualifiedName: "STRING"}), {"withHeader":false,"keyType":"DEFAULT","primaryKey":{"isUnique":false,"type":"STANDARD","keyFields":[],"name":"primary_key"},"secondary":[]}, "STRING_TABLE")}, "zif_abapgit_data_config=>ty_config", undefined, {}, {}), {"withHeader":false,"keyType":"USER","primaryKey":{"name":"primary_key","type":"SORTED","isUnique":true,"keyFields":["TYPE","NAME"]},"secondary":[]}, "zif_abapgit_data_config=>ty_config_tt");
    let ls_config = new abap.types.Structure({
    "type": new abap.types.Character(4, {"qualifiedName":"zif_abapgit_data_config=>ty_data_type"}),
    "name": new abap.types.Character(40, {}),
    "skip_initial": new abap.types.Character(1, {"qualifiedName":"ABAP_BOOL","ddicName":"ABAP_BOOL"}),
    "where": abap.types.TableFactory.construct(new abap.types.String({qualifiedName: "STRING"}), {"withHeader":false,"keyType":"DEFAULT","primaryKey":{"isUnique":false,"type":"STANDARD","keyFields":[],"name":"primary_key"},"secondary":[]}, "STRING_TABLE")}, "zif_abapgit_data_config=>ty_config", undefined, {}, {});
    let ls_file = new abap.types.Structure({
    "path": new abap.types.String({qualifiedName: "ZIF_ABAPGIT_GIT_DEFINITIONS=>TY_FILE_SIGNATURE-PATH"}),
    "filename": new abap.types.String({qualifiedName: "ZIF_ABAPGIT_GIT_DEFINITIONS=>TY_FILE_SIGNATURE-FILENAME"}),
    "sha1": new abap.types.Character(40, {"qualifiedName":"zif_abapgit_git_definitions=>ty_sha1"}),
    "data": new abap.types.XString({qualifiedName: "ZIF_ABAPGIT_GIT_DEFINITIONS=>TY_FILE-DATA"})}, "zif_abapgit_git_definitions=>ty_file", undefined, {}, {});
    let lr_data = new abap.types.DataReference(new abap.types.Character(4));
    ls_file.get().path.set(abap.Classes['ZIF_ABAPGIT_DATA_CONFIG'].zif_abapgit_data_config$c_default_path);
    lt_configs.set((await ii_config.get().zif_abapgit_data_config$get_configs()));
    for await (const unique69 of abap.statements.loop(lt_configs)) {
      ls_config.set(unique69);
      abap.statements.assert(abap.compare.eq(ls_config.get().type, abap.Classes['ZIF_ABAPGIT_DATA_CONFIG'].zif_abapgit_data_config$c_data_type.get().tabu));
      abap.statements.assert(abap.compare.initial(ls_config.get().name) === false);
      if (abap.compare.eq((await abap.Classes['ZCL_ABAPGIT_DATA_UTILS'].does_table_exist({iv_name: ls_config.get().name})), abap.builtin.abap_true)) {
        lr_data.set((await this.#read_database_table({iv_name: ls_config.get().name, it_where: ls_config.get().where})));
        ls_file.get().data.set((await this.#convert_itab_to_json({ir_data: lr_data, iv_skip_initial: ls_config.get().skip_initial})));
      } else {
        ls_file.get().data.set((await abap.Classes['ZCL_ABAPGIT_CONVERT'].string_to_xstring_utf8({iv_string: abap.CharacterFactory.get(2, '[]')})));
      }
      ls_file.get().filename.set((await abap.Classes['ZCL_ABAPGIT_DATA_UTILS'].build_data_filename({is_config: ls_config})));
      ls_file.get().sha1.set((await abap.Classes['ZCL_ABAPGIT_HASH'].sha1_blob({iv_data: ls_file.get().data})));
      abap.statements.append({source: ls_file, target: rt_files});
    }
    return rt_files;
  }
}
abap.Classes['ZCL_ABAPGIT_DATA_SERIALIZER'] = zcl_abapgit_data_serializer;
zcl_abapgit_data_serializer.c_max_records = new abap.types.Integer({qualifiedName: "I"});
zcl_abapgit_data_serializer.c_max_records.set(20000);
export {zcl_abapgit_data_serializer};