64 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			64 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
/*
 | 
						|
	MIT License http://www.opensource.org/licenses/mit-license.php
 | 
						|
	Author Tobias Koppers @sokra
 | 
						|
*/
 | 
						|
 | 
						|
"use strict";
 | 
						|
 | 
						|
const RuntimeGlobals = require("../RuntimeGlobals");
 | 
						|
 | 
						|
/** @typedef {import("../Module")} Module */
 | 
						|
/** @typedef {import("../Module").RuntimeRequirements} RuntimeRequirements */
 | 
						|
/** @typedef {"exports" | "module.exports" | "this" | "Object.defineProperty(exports)" | "Object.defineProperty(module.exports)" | "Object.defineProperty(this)"} CommonJSDependencyBaseKeywords */
 | 
						|
 | 
						|
/**
 | 
						|
 * @param {CommonJSDependencyBaseKeywords} depBase commonjs dependency base
 | 
						|
 * @param {Module} module module
 | 
						|
 * @param {RuntimeRequirements} runtimeRequirements runtime requirements
 | 
						|
 * @returns {[string, string]} type and base
 | 
						|
 */
 | 
						|
module.exports.handleDependencyBase = (
 | 
						|
	depBase,
 | 
						|
	module,
 | 
						|
	runtimeRequirements
 | 
						|
) => {
 | 
						|
	let base;
 | 
						|
	let type;
 | 
						|
	switch (depBase) {
 | 
						|
		case "exports":
 | 
						|
			runtimeRequirements.add(RuntimeGlobals.exports);
 | 
						|
			base = module.exportsArgument;
 | 
						|
			type = "expression";
 | 
						|
			break;
 | 
						|
		case "module.exports":
 | 
						|
			runtimeRequirements.add(RuntimeGlobals.module);
 | 
						|
			base = `${module.moduleArgument}.exports`;
 | 
						|
			type = "expression";
 | 
						|
			break;
 | 
						|
		case "this":
 | 
						|
			runtimeRequirements.add(RuntimeGlobals.thisAsExports);
 | 
						|
			base = "this";
 | 
						|
			type = "expression";
 | 
						|
			break;
 | 
						|
		case "Object.defineProperty(exports)":
 | 
						|
			runtimeRequirements.add(RuntimeGlobals.exports);
 | 
						|
			base = module.exportsArgument;
 | 
						|
			type = "Object.defineProperty";
 | 
						|
			break;
 | 
						|
		case "Object.defineProperty(module.exports)":
 | 
						|
			runtimeRequirements.add(RuntimeGlobals.module);
 | 
						|
			base = `${module.moduleArgument}.exports`;
 | 
						|
			type = "Object.defineProperty";
 | 
						|
			break;
 | 
						|
		case "Object.defineProperty(this)":
 | 
						|
			runtimeRequirements.add(RuntimeGlobals.thisAsExports);
 | 
						|
			base = "this";
 | 
						|
			type = "Object.defineProperty";
 | 
						|
			break;
 | 
						|
		default:
 | 
						|
			throw new Error(`Unsupported base ${depBase}`);
 | 
						|
	}
 | 
						|
 | 
						|
	return [type, base];
 | 
						|
};
 |