forked from vercel/next.js
-
Notifications
You must be signed in to change notification settings - Fork 0
/
harmony-import-specifier-template.js
60 lines (51 loc) · 1.53 KB
/
harmony-import-specifier-template.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
export default class HarmonyImportSpecifierDependencyTemplate {
apply (dep, source) {
const content = this.getContent(dep)
source.replace(dep.range[0], dep.range[1] - 1, content)
}
getContent (dep) {
const importedModule = dep.importDependency.module
const defaultImport =
dep.directImport &&
dep.id === 'default' &&
!(
importedModule &&
(!importedModule.meta || importedModule.meta.harmonyModule) &&
!/node_modules/.test(importedModule.resource)
)
const shortHandPrefix = this.getShortHandPrefix(dep)
const { importedVar } = dep
const importedVarSuffix = this.getImportVarSuffix(
dep,
defaultImport,
importedModule
)
if (dep.call && defaultImport) {
return `${shortHandPrefix}${importedVar}_default()`
}
if (dep.call && dep.id) {
return `${shortHandPrefix}Object(${importedVar}${importedVarSuffix})`
}
return `${shortHandPrefix}${importedVar}${importedVarSuffix}`
}
getImportVarSuffix (dep, defaultImport, importedModule) {
if (defaultImport) {
return '_default.a'
}
if (dep.id) {
const used =
importedModule && !/node_modules/.test(importedModule.resource)
? importedModule.isUsed(dep.id)
: dep.id
const optionalComment = dep.id !== used ? ` /* ${dep.id} */` : ''
return `[${JSON.stringify(used)}${optionalComment}]`
}
return ''
}
getShortHandPrefix (dep) {
if (!dep.shorthand) {
return ''
}
return `${dep.name}: `
}
}