2015-01-13 00:45:30 +08:00
/ *
MIT License http : //www.opensource.org/licenses/mit-license.php
Author Tobias Koppers @ sokra
* /
2018-07-30 23:08:51 +08:00
2017-01-05 02:50:35 +08:00
"use strict" ;
2018-04-04 15:17:10 +08:00
2020-04-23 02:31:26 +08:00
const Dependency = require ( "../Dependency" ) ;
2021-01-27 20:32:09 +08:00
const {
getDependencyUsedByExportsCondition
} = require ( "../optimize/InnerGraph" ) ;
2018-10-09 20:30:59 +08:00
const makeSerializable = require ( "../util/makeSerializable" ) ;
2020-09-11 15:41:54 +08:00
const propertyAccess = require ( "../util/propertyAccess" ) ;
2017-08-08 15:32:43 +08:00
const HarmonyImportDependency = require ( "./HarmonyImportDependency" ) ;
2015-01-13 00:45:30 +08:00
2018-07-23 23:33:29 +08:00
/** @typedef {import("webpack-sources").ReplaceSource} ReplaceSource */
2018-08-28 17:50:33 +08:00
/** @typedef {import("../ChunkGraph")} ChunkGraph */
2018-07-30 23:08:51 +08:00
/** @typedef {import("../Dependency").ExportsSpec} ExportsSpec */
2020-05-28 02:34:55 +08:00
/** @typedef {import("../Dependency").ReferencedExport} ReferencedExport */
2020-07-28 00:09:48 +08:00
/** @typedef {import("../Dependency").UpdateHashContext} UpdateHashContext */
2018-07-18 01:38:42 +08:00
/** @typedef {import("../DependencyTemplate").DependencyTemplateContext} DependencyTemplateContext */
2023-06-17 03:44:20 +08:00
/** @typedef {import("../Module")} Module */
/** @typedef {import("../Module").BuildMeta} BuildMeta */
2018-07-17 22:42:05 +08:00
/** @typedef {import("../ModuleGraph")} ModuleGraph */
2020-07-28 00:09:48 +08:00
/** @typedef {import("../ModuleGraphConnection")} ModuleGraphConnection */
2020-10-05 22:57:31 +08:00
/** @typedef {import("../ModuleGraphConnection").ConnectionState} ConnectionState */
2018-07-25 15:33:48 +08:00
/** @typedef {import("../WebpackError")} WebpackError */
2023-05-22 04:31:30 +08:00
/** @typedef {import("../javascript/JavascriptParser").Assertions} Assertions */
/** @typedef {import("../javascript/JavascriptParser").Range} Range */
2023-04-12 03:22:51 +08:00
/** @typedef {import("../serialization/ObjectMiddleware").ObjectDeserializerContext} ObjectDeserializerContext */
/** @typedef {import("../serialization/ObjectMiddleware").ObjectSerializerContext} ObjectSerializerContext */
2019-07-17 22:02:33 +08:00
/** @typedef {import("../util/Hash")} Hash */
2020-07-28 00:09:48 +08:00
/** @typedef {import("../util/runtime").RuntimeSpec} RuntimeSpec */
2018-07-23 23:33:29 +08:00
2019-03-14 19:06:59 +08:00
const idsSymbol = Symbol ( "HarmonyImportSpecifierDependency.ids" ) ;
2018-08-16 20:07:34 +08:00
2021-11-03 01:16:59 +08:00
const { ExportPresenceModes } = HarmonyImportDependency ;
2017-08-08 15:32:43 +08:00
class HarmonyImportSpecifierDependency extends HarmonyImportDependency {
2023-05-22 04:31:30 +08:00
/ * *
* @ param { TODO } request request
* @ param { number } sourceOrder source order
* @ param { string [ ] } ids ids
* @ param { string } name name
* @ param { Range } range range
* @ param { TODO } exportPresenceMode export presence mode
2023-05-24 13:24:20 +08:00
* @ param { Assertions = } assertions assertions
2023-06-03 06:16:53 +08:00
* @ param { Range [ ] = } idRanges ranges for members of ids ; the two arrays are right - aligned
2023-05-22 04:31:30 +08:00
* /
2021-07-17 04:16:06 +08:00
constructor (
request ,
sourceOrder ,
ids ,
name ,
range ,
2021-11-03 01:16:59 +08:00
exportPresenceMode ,
2023-05-31 14:06:15 +08:00
assertions ,
2023-06-03 06:16:53 +08:00
idRanges // TODO webpack 6 make this non-optional. It must always be set to properly trim ids.
2021-07-17 04:16:06 +08:00
) {
super ( request , sourceOrder , assertions ) ;
2019-03-14 19:06:59 +08:00
this . ids = ids ;
2017-01-05 02:50:35 +08:00
this . name = name ;
this . range = range ;
2023-06-03 06:16:53 +08:00
this . idRanges = idRanges ;
2021-11-03 01:16:59 +08:00
this . exportPresenceMode = exportPresenceMode ;
2017-05-21 15:13:33 +08:00
this . namespaceObjectAsContext = false ;
this . call = undefined ;
this . directImport = undefined ;
2018-03-30 08:33:19 +08:00
this . shorthand = undefined ;
2020-08-29 22:00:03 +08:00
this . asiSafe = undefined ;
2023-06-17 03:44:20 +08:00
/** @type {Set<string> | boolean | undefined} */
2019-09-03 20:11:50 +08:00
this . usedByExports = undefined ;
2023-06-17 03:44:20 +08:00
/** @type {Set<string> | undefined} */
2023-04-09 15:44:09 +08:00
this . referencedPropertiesInDestructuring = undefined ;
2017-01-05 02:50:35 +08:00
}
2019-03-14 19:06:59 +08:00
// TODO webpack 6 remove
get id ( ) {
throw new Error ( "id was renamed to ids and type changed to string[]" ) ;
}
// TODO webpack 6 remove
getId ( ) {
throw new Error ( "id was renamed to ids and type changed to string[]" ) ;
}
// TODO webpack 6 remove
setId ( ) {
throw new Error ( "id was renamed to ids and type changed to string[]" ) ;
}
2017-01-05 02:50:35 +08:00
get type ( ) {
return "harmony import specifier" ;
}
2018-07-24 23:35:36 +08:00
/ * *
* @ param { ModuleGraph } moduleGraph the module graph
2019-03-14 19:06:59 +08:00
* @ returns { string [ ] } the imported ids
2018-07-24 23:35:36 +08:00
* /
2019-03-14 19:06:59 +08:00
getIds ( moduleGraph ) {
2021-01-27 20:19:37 +08:00
const meta = moduleGraph . getMetaIfExisting ( this ) ;
if ( meta === undefined ) return this . ids ;
const ids = meta [ idsSymbol ] ;
return ids !== undefined ? ids : this . ids ;
2018-08-16 20:07:34 +08:00
}
/ * *
* @ param { ModuleGraph } moduleGraph the module graph
2019-03-14 19:06:59 +08:00
* @ param { string [ ] } ids the imported ids
2018-08-16 20:07:34 +08:00
* @ returns { void }
* /
2019-03-14 19:06:59 +08:00
setIds ( moduleGraph , ids ) {
moduleGraph . getMeta ( this ) [ idsSymbol ] = ids ;
2018-05-27 05:07:02 +08:00
}
2019-10-30 04:37:59 +08:00
/ * *
* @ param { ModuleGraph } moduleGraph module graph
2021-01-27 20:32:09 +08:00
* @ returns { null | false | function ( ModuleGraphConnection , RuntimeSpec ) : ConnectionState } function to determine if the connection is active
2019-10-30 04:37:59 +08:00
* /
getCondition ( moduleGraph ) {
2021-01-27 20:32:09 +08:00
return getDependencyUsedByExportsCondition (
this ,
this . usedByExports ,
moduleGraph
) ;
2019-10-30 04:37:59 +08:00
}
2020-11-29 00:30:32 +08:00
/ * *
* @ param { ModuleGraph } moduleGraph the module graph
* @ returns { ConnectionState } how this dependency connects the module to referencing modules
* /
getModuleEvaluationSideEffectsState ( moduleGraph ) {
return false ;
}
2019-09-06 20:49:05 +08:00
/ * *
2019-10-30 05:28:42 +08:00
* Returns list of exports referenced by this dependency
2019-09-06 20:49:05 +08:00
* @ param { ModuleGraph } moduleGraph module graph
2020-07-28 00:09:48 +08:00
* @ param { RuntimeSpec } runtime the runtime for which the module is analysed
2020-05-28 02:34:55 +08:00
* @ returns { ( string [ ] | ReferencedExport ) [ ] } referenced exports
2019-09-06 20:49:05 +08:00
* /
2020-07-28 00:09:48 +08:00
getReferencedExports ( moduleGraph , runtime ) {
2020-04-23 02:31:26 +08:00
let ids = this . getIds ( moduleGraph ) ;
2023-04-09 15:44:09 +08:00
if ( ids . length === 0 ) return this . _getReferencedExportsInDestructuring ( ) ;
2021-02-07 23:35:04 +08:00
let namespaceObjectAsContext = this . namespaceObjectAsContext ;
if ( ids [ 0 ] === "default" ) {
2020-04-23 02:31:26 +08:00
const selfModule = moduleGraph . getParentModule ( this ) ;
2023-06-17 03:44:20 +08:00
const importedModule =
/** @type {Module} */
( moduleGraph . getModule ( this ) ) ;
2020-04-23 02:31:26 +08:00
switch (
2020-08-18 03:32:47 +08:00
importedModule . getExportsType (
moduleGraph ,
2023-06-17 03:44:20 +08:00
/** @type {BuildMeta} */
( selfModule . buildMeta ) . strictHarmonyModule
2020-08-18 03:32:47 +08:00
)
2020-04-23 02:31:26 +08:00
) {
case "default-only" :
case "default-with-named" :
2023-04-09 15:44:09 +08:00
if ( ids . length === 1 )
return this . _getReferencedExportsInDestructuring ( ) ;
2020-04-23 02:31:26 +08:00
ids = ids . slice ( 1 ) ;
2021-02-07 23:35:04 +08:00
namespaceObjectAsContext = true ;
2020-04-23 02:31:26 +08:00
break ;
case "dynamic" :
return Dependency . EXPORTS _OBJECT _REFERENCED ;
}
}
2021-02-07 23:35:04 +08:00
if (
this . call &&
! this . directImport &&
( namespaceObjectAsContext || ids . length > 1 )
) {
2020-04-23 02:31:26 +08:00
if ( ids . length === 1 ) return Dependency . EXPORTS _OBJECT _REFERENCED ;
ids = ids . slice ( 0 , - 1 ) ;
}
2023-04-09 15:44:09 +08:00
return this . _getReferencedExportsInDestructuring ( ids ) ;
2023-04-09 05:23:15 +08:00
}
/ * *
* @ param { string [ ] = } ids ids
* @ returns { ( string [ ] | ReferencedExport ) [ ] } referenced exports
* /
2023-04-09 15:44:09 +08:00
_getReferencedExportsInDestructuring ( ids ) {
if ( this . referencedPropertiesInDestructuring ) {
2023-04-09 05:23:15 +08:00
/** @type {ReferencedExport[]} */
const refs = [ ] ;
2023-04-09 15:44:09 +08:00
for ( const key of this . referencedPropertiesInDestructuring ) {
2023-04-09 05:23:15 +08:00
refs . push ( {
name : ids ? ids . concat ( [ key ] ) : [ key ] ,
canMangle : false
} ) ;
}
return refs ;
} else {
return ids ? [ ids ] : Dependency . EXPORTS _OBJECT _REFERENCED ;
}
2017-01-05 02:50:35 +08:00
}
2021-11-03 01:16:59 +08:00
/ * *
* @ param { ModuleGraph } moduleGraph module graph
* @ returns { number } effective mode
* /
_getEffectiveExportPresenceLevel ( moduleGraph ) {
if ( this . exportPresenceMode !== ExportPresenceModes . AUTO )
return this . exportPresenceMode ;
2023-06-17 03:44:20 +08:00
const buildMeta = /** @type {BuildMeta} */ (
moduleGraph . getParentModule ( this ) . buildMeta
) ;
return buildMeta . strictHarmonyModule
2021-11-03 01:16:59 +08:00
? ExportPresenceModes . ERROR
: ExportPresenceModes . WARN ;
}
2018-07-25 15:33:48 +08:00
/ * *
* Returns warnings
2018-07-24 23:35:36 +08:00
* @ param { ModuleGraph } moduleGraph module graph
2023-06-17 02:24:34 +08:00
* @ returns { WebpackError [ ] | null | undefined } warnings
2018-07-25 15:33:48 +08:00
* /
2018-07-24 23:35:36 +08:00
getWarnings ( moduleGraph ) {
2021-11-06 08:01:21 +08:00
const exportsPresence = this . _getEffectiveExportPresenceLevel ( moduleGraph ) ;
if ( exportsPresence === ExportPresenceModes . WARN ) {
2021-11-03 01:16:59 +08:00
return this . _getErrors ( moduleGraph ) ;
2017-02-23 05:31:46 +08:00
}
2021-11-03 01:16:59 +08:00
return null ;
2017-02-23 05:31:46 +08:00
}
2018-07-25 15:33:48 +08:00
/ * *
* Returns errors
2018-07-24 23:35:36 +08:00
* @ param { ModuleGraph } moduleGraph module graph
2023-06-17 02:24:34 +08:00
* @ returns { WebpackError [ ] | null | undefined } errors
2018-07-25 15:33:48 +08:00
* /
2018-07-24 23:35:36 +08:00
getErrors ( moduleGraph ) {
2021-11-06 08:01:21 +08:00
const exportsPresence = this . _getEffectiveExportPresenceLevel ( moduleGraph ) ;
if ( exportsPresence === ExportPresenceModes . ERROR ) {
2018-07-24 23:35:36 +08:00
return this . _getErrors ( moduleGraph ) ;
2017-02-23 05:31:46 +08:00
}
2019-08-07 18:00:50 +08:00
return null ;
2017-02-23 05:31:46 +08:00
}
2018-12-30 16:03:42 +08:00
/ * *
* @ param { ModuleGraph } moduleGraph module graph
* @ returns { WebpackError [ ] | undefined } errors
* /
2018-07-24 23:35:36 +08:00
_getErrors ( moduleGraph ) {
2019-03-14 19:06:59 +08:00
const ids = this . getIds ( moduleGraph ) ;
2019-06-12 20:31:36 +08:00
return this . getLinkingErrors (
moduleGraph ,
ids ,
` (imported as ' ${ this . name } ') `
) ;
2017-01-05 02:50:35 +08:00
}
2018-07-20 22:13:22 +08:00
/ * *
* implement this method to allow the occurrence order plugin to count correctly
* @ returns { number } count how often the id is used in this dependency
* /
2017-08-08 15:32:43 +08:00
getNumberOfIdOccurrences ( ) {
return 0 ;
}
2023-04-12 03:22:51 +08:00
/ * *
* @ param { ObjectSerializerContext } context context
* /
2018-10-09 20:30:59 +08:00
serialize ( context ) {
const { write } = context ;
2019-03-14 19:06:59 +08:00
write ( this . ids ) ;
2018-10-09 20:30:59 +08:00
write ( this . name ) ;
write ( this . range ) ;
2023-06-03 06:16:53 +08:00
write ( this . idRanges ) ;
2021-11-03 18:34:26 +08:00
write ( this . exportPresenceMode ) ;
2018-10-09 20:30:59 +08:00
write ( this . namespaceObjectAsContext ) ;
write ( this . call ) ;
write ( this . directImport ) ;
write ( this . shorthand ) ;
2019-08-23 05:03:38 +08:00
write ( this . asiSafe ) ;
2019-09-03 20:11:50 +08:00
write ( this . usedByExports ) ;
2023-04-09 15:44:09 +08:00
write ( this . referencedPropertiesInDestructuring ) ;
2018-10-09 20:30:59 +08:00
super . serialize ( context ) ;
}
2023-04-12 03:22:51 +08:00
/ * *
* @ param { ObjectDeserializerContext } context context
* /
2018-10-09 20:30:59 +08:00
deserialize ( context ) {
const { read } = context ;
2019-03-14 19:06:59 +08:00
this . ids = read ( ) ;
2018-10-09 20:30:59 +08:00
this . name = read ( ) ;
this . range = read ( ) ;
2023-06-03 06:16:53 +08:00
this . idRanges = read ( ) ;
2021-11-03 18:34:26 +08:00
this . exportPresenceMode = read ( ) ;
2018-10-09 20:30:59 +08:00
this . namespaceObjectAsContext = read ( ) ;
this . call = read ( ) ;
this . directImport = read ( ) ;
this . shorthand = read ( ) ;
2019-08-23 05:03:38 +08:00
this . asiSafe = read ( ) ;
2019-09-03 20:11:50 +08:00
this . usedByExports = read ( ) ;
2023-04-09 16:33:49 +08:00
this . referencedPropertiesInDestructuring = read ( ) ;
2018-10-09 20:30:59 +08:00
super . deserialize ( context ) ;
}
2017-01-05 02:50:35 +08:00
}
2018-10-09 20:30:59 +08:00
makeSerializable (
HarmonyImportSpecifierDependency ,
"webpack/lib/dependencies/HarmonyImportSpecifierDependency"
) ;
2020-11-26 17:52:55 +08:00
HarmonyImportSpecifierDependency . Template = class HarmonyImportSpecifierDependencyTemplate extends (
HarmonyImportDependency . Template
) {
2018-07-23 23:33:29 +08:00
/ * *
* @ param { Dependency } dependency the dependency for which the template should be applied
* @ param { ReplaceSource } source the current replace source which can be modified
2018-07-18 01:38:42 +08:00
* @ param { DependencyTemplateContext } templateContext the context object
2018-07-23 23:33:29 +08:00
* @ returns { void }
* /
2018-07-18 01:38:42 +08:00
apply ( dependency , source , templateContext ) {
2018-07-23 23:33:29 +08:00
const dep = /** @type {HarmonyImportSpecifierDependency} */ ( dependency ) ;
2022-03-04 16:38:39 +08:00
const { moduleGraph , runtime } = templateContext ;
2019-10-30 04:37:59 +08:00
const connection = moduleGraph . getConnection ( dep ) ;
2019-09-06 20:49:05 +08:00
// Skip rendering depending when dependency is conditional
2020-10-07 15:10:29 +08:00
if ( connection && ! connection . isTargetActive ( runtime ) ) return ;
2019-09-06 20:49:05 +08:00
2023-05-24 06:29:25 +08:00
const ids = dep . getIds ( moduleGraph ) ; // determine minimal set of IDs.
2023-05-31 14:06:15 +08:00
let trimmedIds = this . _trimIdsToThoseImported ( ids , moduleGraph , dep ) ;
2023-05-24 06:29:25 +08:00
let [ rangeStart , rangeEnd ] = dep . range ;
if ( trimmedIds . length !== ids . length ) {
2023-06-03 06:16:53 +08:00
// The array returned from dep.idRanges is right-aligned with the array returned from dep.getIds.
2023-05-24 11:03:49 +08:00
// Meaning, the two arrays may not always have the same number of elements, but the last element of
2023-06-03 06:16:53 +08:00
// dep.idRanges corresponds to [the expression fragment to the left of] the last element of dep.getIds.
// Use this to find the correct replacement range based on the number of ids that were trimmed.
2023-05-31 23:14:40 +08:00
const idx =
2023-06-03 06:16:53 +08:00
dep . idRanges === undefined
2023-05-31 23:14:40 +08:00
? - 1 /* trigger failure case below */
2023-06-03 06:16:53 +08:00
: dep . idRanges . length + ( trimmedIds . length - ids . length ) ;
if ( idx < 0 || idx >= dep . idRanges . length ) {
2023-05-31 14:06:15 +08:00
// cspell:ignore minifiers
// Should not happen but we can't throw an error here because of backward compatibility with
// external plugins in wp5. Instead, we just disable trimming for now. This may break some minifiers.
trimmedIds = ids ;
// TODO webpack 6 remove the "trimmedIds = ids" above and uncomment the following line instead.
// throw new Error("Missing range starts data for id replacement trimming.");
} else {
2023-06-03 06:16:53 +08:00
[ rangeStart , rangeEnd ] = dep . idRanges [ idx ] ;
2023-05-27 03:04:57 +08:00
}
2023-05-24 06:29:25 +08:00
}
2023-05-31 14:06:15 +08:00
const exportExpr = this . _getCodeForIds (
dep ,
source ,
templateContext ,
trimmedIds
) ;
2022-03-08 15:01:52 +08:00
if ( dep . shorthand ) {
2023-05-24 06:29:25 +08:00
source . insert ( rangeEnd , ` : ${ exportExpr } ` ) ;
2022-03-08 15:01:52 +08:00
} else {
2023-05-24 06:29:25 +08:00
source . replace ( rangeStart , rangeEnd - 1 , exportExpr ) ;
}
}
/ * *
* @ summary Determine which IDs in the id chain are actually referring to namespaces or imports ,
* and which are deeper member accessors on the imported object . Only the former should be re - rendered .
* @ param { string [ ] } ids ids
* @ param { ModuleGraph } moduleGraph moduleGraph
* @ param { HarmonyImportSpecifierDependency } dependency dependency
* @ returns { string [ ] } generated code
* /
_trimIdsToThoseImported ( ids , moduleGraph , dependency ) {
2023-06-17 03:44:20 +08:00
/** @type {string[]} */
2023-05-27 03:04:57 +08:00
let trimmedIds = [ ] ;
2023-05-24 06:29:25 +08:00
const exportsInfo = moduleGraph . getExportsInfo (
2023-06-17 03:44:20 +08:00
/** @type {Module} */ ( moduleGraph . getModule ( dependency ) )
2023-05-24 06:29:25 +08:00
) ;
let currentExportsInfo = /** @type {ExportsInfo=} */ exportsInfo ;
for ( let i = 0 ; i < ids . length ; i ++ ) {
if ( i === 0 && ids [ i ] === "default" ) {
continue ; // ExportInfo for the next level under default is still at the root ExportsInfo, so don't advance currentExportsInfo
}
const exportInfo = currentExportsInfo . getExportInfo ( ids [ i ] ) ;
2023-05-27 03:04:57 +08:00
if ( exportInfo . provided === false ) {
// json imports have nested ExportInfo for elements that things that are not actually exported, so check .provided
trimmedIds = ids . slice ( 0 , i ) ;
break ;
}
2023-05-24 06:29:25 +08:00
const nestedInfo = exportInfo . getNestedExportsInfo ( ) ;
if ( ! nestedInfo ) {
// once all nested exports are traversed, the next item is the actual import so stop there
2023-05-27 03:04:57 +08:00
trimmedIds = ids . slice ( 0 , i + 1 ) ;
break ;
2023-05-24 06:29:25 +08:00
}
currentExportsInfo = nestedInfo ;
2022-03-08 15:01:52 +08:00
}
2023-05-27 03:04:57 +08:00
// Never trim to nothing. This can happen for invalid imports (e.g. import { notThere } from "./module", or import { anything } from "./missingModule")
return trimmedIds . length ? trimmedIds : ids ;
2022-03-04 16:38:39 +08:00
}
2019-10-30 04:37:59 +08:00
2022-03-08 15:01:52 +08:00
/ * *
* @ param { HarmonyImportSpecifierDependency } dep dependency
* @ param { ReplaceSource } source source
* @ param { DependencyTemplateContext } templateContext context
* @ param { string [ ] } ids ids
* @ returns { string } generated code
* /
_getCodeForIds ( dep , source , templateContext , ids ) {
2022-03-04 16:38:39 +08:00
const { moduleGraph , module , runtime , concatenationScope } =
templateContext ;
const connection = moduleGraph . getConnection ( dep ) ;
2020-09-11 15:41:54 +08:00
let exportExpr ;
if (
2020-09-22 22:46:49 +08:00
connection &&
2020-09-11 15:41:54 +08:00
concatenationScope &&
concatenationScope . isModuleInScope ( connection . module )
) {
if ( ids . length === 0 ) {
exportExpr = concatenationScope . createModuleReference (
connection . module ,
{
asiSafe : dep . asiSafe
}
) ;
} else if ( dep . namespaceObjectAsContext && ids . length === 1 ) {
exportExpr =
concatenationScope . createModuleReference ( connection . module , {
asiSafe : dep . asiSafe
} ) + propertyAccess ( ids ) ;
} else {
exportExpr = concatenationScope . createModuleReference (
connection . module ,
{
ids ,
call : dep . call ,
directImport : dep . directImport ,
asiSafe : dep . asiSafe
}
) ;
}
} else {
2022-03-08 15:01:52 +08:00
super . apply ( dep , source , templateContext ) ;
2019-11-05 04:05:17 +08:00
2021-05-11 15:31:46 +08:00
const { runtimeTemplate , initFragments , runtimeRequirements } =
templateContext ;
2020-09-11 15:41:54 +08:00
exportExpr = runtimeTemplate . exportFromImport ( {
moduleGraph ,
2023-06-17 03:44:20 +08:00
module : /** @type {Module} */ ( moduleGraph . getModule ( dep ) ) ,
2020-09-11 15:41:54 +08:00
request : dep . request ,
exportName : ids ,
originModule : module ,
asiSafe : dep . shorthand ? true : dep . asiSafe ,
isCall : dep . call ,
callContext : ! dep . directImport ,
defaultInterop : true ,
importVar : dep . getImportVar ( moduleGraph ) ,
initFragments ,
runtime ,
runtimeRequirements
} ) ;
}
2022-03-08 15:01:52 +08:00
return exportExpr ;
2016-06-04 21:22:47 +08:00
}
2017-01-11 17:51:58 +08:00
} ;
2017-01-05 02:50:35 +08:00
module . exports = HarmonyImportSpecifierDependency ;