# All files express.ts

100% Statements 25/25
100% Branches 9/9
100% Functions 1/1
100% Lines 23/23

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
    445x
    5x
    5x

    5x

    5x
    10x
    10x
    10x
    10x
    7x
    7x
    7x

    8x
    8x
    8x
    8x
    8x

    8x

    8x

    8x
    5x

    2x
    1x

     import { outputHTML } from "./";
    import path from "path";
    import fs from "fs";

    const scopedEval = eval;
    /**
     * Use JSONX for express view rendering
     * @param {string} filePath - path to jsonx express view
     * @param {object} options - property used for express view {locals}
     * @param {object} options.__boundConfig - property used to bind this object for JSONX, can be used to add custom components
     * @param {string} [options.__DOCTYPE="<!DOCTYPE html>"] - html doctype string
     * @param {*} callback
     */
    export function __express(filePath?: string, options?: any, callback?: any) {
      try {
        let jsonxModule = options?.__jsonx;
        let isJSON = false;
        if (filePath) {
          isJSON = (path.extname(filePath)===".json")
          const jsFile = fs.readFileSync(filePath).toString();
          jsonxModule = (isJSON)
            ? scopedEval(`(${jsFile})`)
            : scopedEval(jsFile);
        }
        const resources = Object.assign({}, options);
        delete resources.__boundConfig;
        delete resources.__DOCTYPE;
        delete resources.__jsonx;
        const context = Object.assign({disableRenderIndexKey:false}, options?.__boundConfig);
        // if (isJSON) context.useJSON = true;
        const jsonxRenderedString = outputHTML.call(context, {
          jsonx: jsonxModule,
          resources
        });
        const template = `${options?.__DOCTYPE || "<!DOCTYPE html>"}
    ${jsonxRenderedString}`;
        if (typeof callback === "function") callback(null, template);
        else return template;
      } catch (e) {
        if (typeof callback === "function") callback(e);
        else throw e;
      }
    }