All files / src/objects web_mime.ts

91.25% Statements 73/80
72.72% Branches 32/44
87.5% Functions 7/8
91.25% Lines 73/80

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 811x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 55x 55x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 4x 4x 4x 1x 1x 9x 9x 9x 1x 1x 1x 1x 1x 1x 1x 17x 17x 17x 1x 1x               1x 1x 20x 13x 13x 7x 7x 7x 7x 7x 7x 7x 20x 3x 3x 4x 20x 20x 20x 5x 1x 1x 4x 4x 4x 4x 4x 4x 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)) {
      if (typeof param?.NAME !== "string") {
        continue;
      }
      this.parsedXML.params[param.NAME.toLowerCase()] = param.VALUE;
    }
 
    const end = Date.now();
    return {updated: true, runtime: end - start};
  }
}