mirror of https://github.com/webpack/webpack.git
				
				
				
			
		
			
				
	
	
		
			35 lines
		
	
	
		
			1004 B
		
	
	
	
		
			JavaScript
		
	
	
	
			
		
		
	
	
			35 lines
		
	
	
		
			1004 B
		
	
	
	
		
			JavaScript
		
	
	
	
"use strict";
 | 
						|
 | 
						|
const vm = require("vm");
 | 
						|
 | 
						|
const SYNTHETIC_MODULES_STORE = "__SYNTHETIC_MODULES_STORE";
 | 
						|
const [major] = process.versions.node.split(".").map(Number);
 | 
						|
 | 
						|
module.exports = async (something, context, unlinked) => {
 | 
						|
	if (
 | 
						|
		something instanceof (vm.Module || /* node.js 10 */ vm.SourceTextModule)
 | 
						|
	) {
 | 
						|
		return something;
 | 
						|
	}
 | 
						|
	context[SYNTHETIC_MODULES_STORE] = context[SYNTHETIC_MODULES_STORE] || [];
 | 
						|
	const i = context[SYNTHETIC_MODULES_STORE].length;
 | 
						|
	context[SYNTHETIC_MODULES_STORE].push(something);
 | 
						|
	const code = [...new Set(["default", ...Object.keys(something)])]
 | 
						|
		.map(
 | 
						|
			(name) =>
 | 
						|
				`const _${name} = ${SYNTHETIC_MODULES_STORE}[${i}]${
 | 
						|
					name === "default" ? "" : `[${JSON.stringify(name)}]`
 | 
						|
				}; export { _${name} as ${name}};`
 | 
						|
		)
 | 
						|
		.join("\n");
 | 
						|
	const m = new vm.SourceTextModule(code, {
 | 
						|
		context
 | 
						|
	});
 | 
						|
	if (unlinked) return m;
 | 
						|
	await m.link(() => {});
 | 
						|
	// node.js 10 needs instantiate
 | 
						|
	if (major === 10 && m.instantiate) m.instantiate();
 | 
						|
	await m.evaluate();
 | 
						|
	return m;
 | 
						|
};
 |