UNPKG

afterwriting

Version:

Post-processing tools for Fountain screenplays

75 lines (66 loc) 1.92 kB
var path = require('path'); var Module = require('module'); var process = require('process'); var _require = require; var config = {}; /** * Resolve require.js module name to node.js name */ var resolve_module_name = function(name) { var root = __dirname, fragments = name.split('/'), path_parts = path.isAbsolute(name) ? [name] : (name.startsWith('.') ? [process.cwd()].concat(fragments) : [root, '..'].concat(fragments)), module_path = path.join.apply(null, path_parts); return module_path + '.js'; }; var stack = []; /** * modified require */ require = function() { var name = arguments[0]; // use node require if module is listed if (config.use_node_require && config.use_node_require.indexOf(name) != -1) { return _require(name); } // map module name, if mapped to an object - return else if (config.map[name]) { if (typeof (config.map[name]) === "string") { name = config.map[name]; } else { return config.map[name]; } } var module_path = resolve_module_name(name); if (Module._cache[module_path]) { return Module._cache[module_path].exports; } else { stack.push(module_path); var result = _require.call(this, module_path); stack.pop(); return result; } }.bind(this); /** * config setter * supported options: * map - allows to override module definition or name * use_node_require - list of modules that should keep using node require.js */ require.config = function(value) { config = value; }; /** * modified define */ global.define = function(name, definition) { if (arguments.length === 1) { definition = name; name = null; } var exp = definition(require); var modulePath = stack[stack.length - 1]; Module._cache[modulePath].exports = exp; }; module.exports = require;