| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163 | 
							- /*
 
- 	MIT License http://www.opensource.org/licenses/mit-license.php
 
- 	Author Tobias Koppers @sokra
 
- */
 
- "use strict";
 
- const DependencyReference = require("./DependencyReference");
 
- const HarmonyImportDependency = require("./HarmonyImportDependency");
 
- const HarmonyLinkingError = require("../HarmonyLinkingError");
 
- class HarmonyImportSpecifierDependency extends HarmonyImportDependency {
 
- 	constructor(
 
- 		request,
 
- 		originModule,
 
- 		sourceOrder,
 
- 		parserScope,
 
- 		id,
 
- 		name,
 
- 		range,
 
- 		strictExportPresence
 
- 	) {
 
- 		super(request, originModule, sourceOrder, parserScope);
 
- 		this.id = id === null ? null : `${id}`;
 
- 		this.redirectedId = undefined;
 
- 		this.name = name;
 
- 		this.range = range;
 
- 		this.strictExportPresence = strictExportPresence;
 
- 		this.namespaceObjectAsContext = false;
 
- 		this.callArgs = undefined;
 
- 		this.call = undefined;
 
- 		this.directImport = undefined;
 
- 		this.shorthand = undefined;
 
- 	}
 
- 	get type() {
 
- 		return "harmony import specifier";
 
- 	}
 
- 	get _id() {
 
- 		return this.redirectedId || this.id;
 
- 	}
 
- 	getReference() {
 
- 		if (!this._module) return null;
 
- 		return new DependencyReference(
 
- 			this._module,
 
- 			this._id && !this.namespaceObjectAsContext ? [this._id] : true,
 
- 			false,
 
- 			this.sourceOrder
 
- 		);
 
- 	}
 
- 	getWarnings() {
 
- 		if (
 
- 			this.strictExportPresence ||
 
- 			this.originModule.buildMeta.strictHarmonyModule
 
- 		) {
 
- 			return [];
 
- 		}
 
- 		return this._getErrors();
 
- 	}
 
- 	getErrors() {
 
- 		if (
 
- 			this.strictExportPresence ||
 
- 			this.originModule.buildMeta.strictHarmonyModule
 
- 		) {
 
- 			return this._getErrors();
 
- 		}
 
- 		return [];
 
- 	}
 
- 	_getErrors() {
 
- 		const importedModule = this._module;
 
- 		if (!importedModule) {
 
- 			return;
 
- 		}
 
- 		if (!importedModule.buildMeta || !importedModule.buildMeta.exportsType) {
 
- 			// It's not an harmony module
 
- 			if (
 
- 				this.originModule.buildMeta.strictHarmonyModule &&
 
- 				this._id &&
 
- 				this._id !== "default"
 
- 			) {
 
- 				// In strict harmony modules we only support the default export
 
- 				return [
 
- 					new HarmonyLinkingError(
 
- 						`Can't import the named export '${this._id}' from non EcmaScript module (only default export is available)`
 
- 					)
 
- 				];
 
- 			}
 
- 			return;
 
- 		}
 
- 		if (!this._id) {
 
- 			return;
 
- 		}
 
- 		if (importedModule.isProvided(this._id) !== false) {
 
- 			// It's provided or we are not sure
 
- 			return;
 
- 		}
 
- 		// We are sure that it's not provided
 
- 		const idIsNotNameMessage =
 
- 			this._id !== this.name ? ` (imported as '${this.name}')` : "";
 
- 		const errorMessage = `"export '${this._id}'${idIsNotNameMessage} was not found in '${this.userRequest}'`;
 
- 		return [new HarmonyLinkingError(errorMessage)];
 
- 	}
 
- 	// implement this method to allow the occurrence order plugin to count correctly
 
- 	getNumberOfIdOccurrences() {
 
- 		return 0;
 
- 	}
 
- 	updateHash(hash) {
 
- 		super.updateHash(hash);
 
- 		const importedModule = this._module;
 
- 		hash.update((importedModule && this._id) + "");
 
- 		hash.update(
 
- 			(importedModule && this._id && importedModule.isUsed(this._id)) + ""
 
- 		);
 
- 		hash.update(
 
- 			(importedModule &&
 
- 				(!importedModule.buildMeta || importedModule.buildMeta.exportsType)) +
 
- 				""
 
- 		);
 
- 		hash.update(
 
- 			(importedModule &&
 
- 				importedModule.used + JSON.stringify(importedModule.usedExports)) + ""
 
- 		);
 
- 	}
 
- 	disconnect() {
 
- 		super.disconnect();
 
- 		this.redirectedId = undefined;
 
- 	}
 
- }
 
- HarmonyImportSpecifierDependency.Template = class HarmonyImportSpecifierDependencyTemplate extends HarmonyImportDependency.Template {
 
- 	apply(dep, source, runtime) {
 
- 		super.apply(dep, source, runtime);
 
- 		const content = this.getContent(dep, runtime);
 
- 		source.replace(dep.range[0], dep.range[1] - 1, content);
 
- 	}
 
- 	getContent(dep, runtime) {
 
- 		const exportExpr = runtime.exportFromImport({
 
- 			module: dep._module,
 
- 			request: dep.request,
 
- 			exportName: dep._id,
 
- 			originModule: dep.originModule,
 
- 			asiSafe: dep.shorthand,
 
- 			isCall: dep.call,
 
- 			callContext: !dep.directImport,
 
- 			importVar: dep.getImportVar()
 
- 		});
 
- 		return dep.shorthand ? `${dep.name}: ${exportExpr}` : exportExpr;
 
- 	}
 
- };
 
- module.exports = HarmonyImportSpecifierDependency;
 
 
  |