1 |
|
2 |
|
3 |
|
4 |
|
5 |
|
6 | "use strict";
|
7 |
|
8 | const makeSerializable = require("../util/makeSerializable");
|
9 | const HarmonyImportSpecifierDependency = require("./HarmonyImportSpecifierDependency");
|
10 |
|
11 |
|
12 |
|
13 |
|
14 |
|
15 |
|
16 |
|
17 |
|
18 |
|
19 |
|
20 |
|
21 |
|
22 |
|
23 | class HarmonyEvaluatedImportSpecifierDependency extends HarmonyImportSpecifierDependency {
|
24 | constructor(request, sourceOrder, ids, name, range, assertions, operator) {
|
25 | super(request, sourceOrder, ids, name, range, false, assertions);
|
26 | this.operator = operator;
|
27 | }
|
28 |
|
29 | get type() {
|
30 | return `evaluated X ${this.operator} harmony import specifier`;
|
31 | }
|
32 |
|
33 | serialize(context) {
|
34 | super.serialize(context);
|
35 | const { write } = context;
|
36 | write(this.operator);
|
37 | }
|
38 |
|
39 | deserialize(context) {
|
40 | super.deserialize(context);
|
41 | const { read } = context;
|
42 | this.operator = read();
|
43 | }
|
44 | }
|
45 |
|
46 | makeSerializable(
|
47 | HarmonyEvaluatedImportSpecifierDependency,
|
48 | "webpack/lib/dependencies/HarmonyEvaluatedImportSpecifierDependency"
|
49 | );
|
50 |
|
51 | HarmonyEvaluatedImportSpecifierDependency.Template = class HarmonyEvaluatedImportSpecifierDependencyTemplate extends (
|
52 | HarmonyImportSpecifierDependency.Template
|
53 | ) {
|
54 | |
55 |
|
56 |
|
57 |
|
58 |
|
59 |
|
60 | apply(dependency, source, templateContext) {
|
61 | const dep = (
|
62 | dependency
|
63 | );
|
64 | const { moduleGraph, runtime } = templateContext;
|
65 | const connection = moduleGraph.getConnection(dep);
|
66 |
|
67 | if (connection && !connection.isTargetActive(runtime)) return;
|
68 |
|
69 | const exportsInfo = moduleGraph.getExportsInfo(connection.module);
|
70 | const ids = dep.getIds(moduleGraph);
|
71 | const value = exportsInfo.isExportProvided(ids);
|
72 |
|
73 | if (typeof value === "boolean") {
|
74 | source.replace(dep.range[0], dep.range[1] - 1, `${value}`);
|
75 | } else {
|
76 | const usedName = exportsInfo.getUsedName(ids, runtime);
|
77 |
|
78 | const code = this._getCodeForIds(
|
79 | dep,
|
80 | source,
|
81 | templateContext,
|
82 | ids.slice(0, -1)
|
83 | );
|
84 | source.replace(
|
85 | dep.range[0],
|
86 | dep.range[1] - 1,
|
87 | `${
|
88 | usedName ? JSON.stringify(usedName[usedName.length - 1]) : '""'
|
89 | } in ${code}`
|
90 | );
|
91 | }
|
92 | }
|
93 | };
|
94 |
|
95 | module.exports = HarmonyEvaluatedImportSpecifierDependency;
|