UNPKG

html-bundler-webpack-plugin

Version:

Generates complete single-page or multi-page website from source assets. Built-in support for Markdown, Eta, EJS, Handlebars, Nunjucks, Pug. Alternative to html-webpack-plugin.

54 lines (45 loc) 1.54 kB
const vm = require('vm'); const { transformToCommonJS } = require('./Utils'); const { executeFunctionException } = require('../Plugin/Messages/Exception'); class VMScript { context = null; /** * * @param {Object} context The context object. * @param {string} name The function name compiled in the VM context. */ constructor(context, name = '') { this.context = vm.createContext(context); this.name = name; } /** * Execute the source code. * * @param {Buffer | string} code The source code. * @param {string} filename The filename is used in error stack traces produced by this script. * @param {{}?} data The data passed in the compiled function. * @param {boolean?} esModule Whether the source code is an ES module. * @return {string} */ exec(code, { filename, data = {}, esModule = false }) { if (Buffer.isBuffer(code)) { code = code.toString(); } // transform the code to CommonJS if (esModule === true) { code = transformToCommonJS(code); } try { const script = new vm.Script(code, { filename }); let result = script.runInContext(this.context); // if the code returns nothing but creates a named definition in the context if (!result && this.name && this.name in this.context) { result = this.context[this.name]; } return typeof result === 'function' ? result(data) : result || ''; } catch (error) { executeFunctionException(error, filename); } } } module.exports = VMScript;