html-render-webpack-plugin
Version:
webpack plugin for rendering static HTML in a multi-config webpack build
45 lines • 2.28 kB
JavaScript
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
const path_1 = __importDefault(require("path"));
const eval_1 = __importDefault(require("eval"));
const logging_1 = require("./logging");
function getFromSourceModules(specifier, fsModule, rootDir) {
const sourceModuleSpecifier = specifier.replace(/^\.\//, "");
if (!fsModule.existsSync(path_1.default.resolve(rootDir, sourceModuleSpecifier))) {
logging_1.log(`Unable to find file specifier ${sourceModuleSpecifier}. Root: ${rootDir}.`);
return undefined;
}
return fsModule.readFileSync(path_1.default.resolve(rootDir, sourceModuleSpecifier));
}
function evaluateFromFileSystem(specifier, fsModule, rootDir, extraGlobals) {
logging_1.log(`Evaluating source for ${specifier}". From root directory: "${rootDir}".`);
let source;
try {
source = getFromSourceModules(specifier, fsModule, rootDir);
}
catch (error) {
throw new Error(`An error reading "${specifier}". Error: ${error}`);
}
return eval_1.default(source,
/* filename: */ specifier, Object.assign(Object.assign({ console,
process }, (extraGlobals || {})), { require: createLinker(specifier, fsModule, rootDir, extraGlobals) }),
/* includeGlobals: */ true);
}
function createLinker(parentModulePath, fsModule, rootDir, extraGlobals) {
logging_1.log("Creating linker for", parentModulePath);
return function linker(specifier) {
const absPath = path_1.default.join(path_1.default.dirname(parentModulePath), specifier);
if (!getFromSourceModules(specifier, fsModule, rootDir)) {
logging_1.log(`Using external require for ${specifier} from ${parentModulePath}`);
const resolvedPath = require.resolve(specifier, { paths: [rootDir] });
logging_1.log(`Resolved ${specifier} as external package to ${resolvedPath}`);
return require(resolvedPath);
}
logging_1.log(`Linking ${parentModulePath} to asset ${specifier}`);
return evaluateFromFileSystem(absPath, fsModule, rootDir, extraGlobals);
};
}
module.exports = evaluateFromFileSystem;
//# sourceMappingURL=evaluateFromFileSystem.js.map
;