aboutsummaryrefslogtreecommitdiff
path: root/node_modules/webpack/lib/dependencies/HarmonyImportSpecifierDependency.js
diff options
context:
space:
mode:
Diffstat (limited to 'node_modules/webpack/lib/dependencies/HarmonyImportSpecifierDependency.js')
-rw-r--r--node_modules/webpack/lib/dependencies/HarmonyImportSpecifierDependency.js167
1 files changed, 167 insertions, 0 deletions
diff --git a/node_modules/webpack/lib/dependencies/HarmonyImportSpecifierDependency.js b/node_modules/webpack/lib/dependencies/HarmonyImportSpecifierDependency.js
new file mode 100644
index 00000000..76971193
--- /dev/null
+++ b/node_modules/webpack/lib/dependencies/HarmonyImportSpecifierDependency.js
@@ -0,0 +1,167 @@
+/*
+ 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 !== "default"
+ ) {
+ // In strict harmony modules we only support the default export
+ const exportName = this._id
+ ? `the named export '${this._id}'`
+ : "the namespace object";
+ return [
+ new HarmonyLinkingError(
+ `Can't import ${exportName} 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;