Welcome to mirror list, hosted at ThFree Co, Russian Federation.

evaluate_module_from_source.js « helpers « config - gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
blob: b55bbb82b63c0a415c8631da37d4f22dfb2b7d96 (plain)
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
const vm = require('vm');

/**
 * This function uses Node's `vm` modules to evaluate the `module.exports` of a given source string
 *
 * Example:
 *
 * ```javascript
 * const { exports: moduleExports } = evaluateModuleFromSource("const foo = 7;\n module.exports.bar = 10 + foo;");
 *
 * assert(moduleExports.bar === 17);
 * ```
 *
 * @param {String} source to be evaluated using Node's `vm` modules
 * @param {{ require: Function }} options used in the context during evaluation of the Node module
 * @returns {{ exports: any }} exports added to the script's `module.exports` context
 */
const evaluateModuleFromSource = (source, { require } = {}) => {
  const context = {
    module: {
      exports: {},
    },
    require,
  };

  try {
    const script = new vm.Script(source);
    script.runInNewContext(context);
  } catch (e) {
    console.error(e);
    throw e;
  }

  return context.module;
};

module.exports = { evaluateModuleFromSource };