All files / src/objects web_mime.ts

87.01% Statements 67/77
88.23% Branches 15/17
75% Functions 6/8
87.01% Lines 67/77

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 781x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 44x 44x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 2x 2x 2x 1x 1x 9x 9x 9x 1x 1x       1x 1x 14x 14x 14x 1x 1x               1x 1x 15x 11x 11x 4x 4x 4x 4x 4x 4x 4x 15x 1x 1x 3x 3x 3x 15x 4x 4x 3x 3x 3x 3x 1x  
import {IFile} from "../files/_ifile";
import {xmlToArray} from "../xml_utils";
import {AbstractObject} from "./_abstract_object";
import {IAllowedNaming} from "./_iobject";
 
export class WebMIME extends AbstractObject {
  private parsedXML: {
    description?: string,
    params: {[key: string]: string},
  } | undefined;
 
  public getType(): string {
    return "W3MI";
  }
 
  public getAllowedNaming(): IAllowedNaming {
    return {
      maxLength: 40,
      allowNamespace: true,
      customRegex: new RegExp(/^[A-Z_-\d/<> ]+$/i),
    };
  }
 
  public getDescription(): string | undefined {
    this.parse();
    return this.parsedXML?.description;
  }
 
  public getParameter(name: string): string | undefined {
    this.parse();
    return this.parsedXML?.params[name.toLowerCase()];
  }
 
  public getParameters(): {[key: string]: string} {
    this.parse();
    return this.parsedXML?.params ?? {};
  }
 
  public setDirty(): void {
    this.parsedXML = undefined;
    super.setDirty();
  }
 
  public getDataFile(): IFile | undefined {
    for (const f of this.getFiles()) {
      if (f.getFilename().includes(".data.")) {
        return f;
      }
    }
    return undefined;
  }
 
  public parse() {
    if (this.parsedXML) {
      return {updated: false, runtime: 0};
    }
 
    const start = Date.now();
    this.parsedXML = {params: {}};
    const parsed = super.parseRaw2();
 
    if (parsed === undefined
        || parsed.abapGit === undefined
        || parsed.abapGit["asx:abap"]["asx:values"] === undefined) {
      return {updated: false, runtime: 0};
    }
 
    this.parsedXML.description = parsed.abapGit["asx:abap"]["asx:values"].TEXT;
 
    for (const param of xmlToArray(parsed.abapGit["asx:abap"]["asx:values"].PARAMS?.WWWPARAMS)) {
      this.parsedXML.params[param.NAME.toLowerCase()] = param.VALUE;
    }
 
    const end = Date.now();
    return {updated: true, runtime: end - start};
  }
}