6
6
7
7
const SetVarMainTemplatePlugin = require ( "./SetVarMainTemplatePlugin" ) ;
8
8
9
+ /** @typedef {import("./Compiler") } Compiler */
10
+
11
+ /**
12
+ * @param {string[] } accessor the accessor to convert to path
13
+ * @returns {string } the path
14
+ */
9
15
const accessorToObjectAccess = accessor => {
10
- return accessor
11
- . map ( a => {
12
- return `[${ JSON . stringify ( a ) } ]` ;
13
- } )
14
- . join ( "" ) ;
16
+ return accessor . map ( a => `[${ JSON . stringify ( a ) } ]` ) . join ( "" ) ;
15
17
} ;
16
18
17
- const accessorAccess = ( base , accessor , joinWith ) => {
18
- accessor = [ ] . concat ( accessor ) ;
19
- return accessor
20
- . map ( ( a , idx ) => {
21
- a = base
22
- ? base + accessorToObjectAccess ( accessor . slice ( 0 , idx + 1 ) )
23
- : accessor [ 0 ] + accessorToObjectAccess ( accessor . slice ( 1 , idx + 1 ) ) ;
24
- if ( idx === accessor . length - 1 ) return a ;
19
+ /**
20
+ * @param {string= } base the path prefix
21
+ * @param {string|string[] } accessor the accessor
22
+ * @param {string= } joinWith the element separator
23
+ * @returns {string } the path
24
+ */
25
+ const accessorAccess = ( base , accessor , joinWith = "; " ) => {
26
+ const accessors = Array . isArray ( accessor ) ? accessor : [ accessor ] ;
27
+ return accessors
28
+ . map ( ( _ , idx ) => {
29
+ const a = base
30
+ ? base + accessorToObjectAccess ( accessors . slice ( 0 , idx + 1 ) )
31
+ : accessors [ 0 ] + accessorToObjectAccess ( accessors . slice ( 1 , idx + 1 ) ) ;
32
+ if ( idx === accessors . length - 1 ) return a ;
25
33
if ( idx === 0 && typeof base === "undefined" )
26
34
return `${ a } = typeof ${ a } === "object" ? ${ a } : {}` ;
27
35
return `${ a } = ${ a } || {}` ;
28
36
} )
29
- . join ( joinWith || "; " ) ;
37
+ . join ( joinWith ) ;
30
38
} ;
31
39
32
40
class LibraryTemplatePlugin {
41
+ /**
42
+ * @param {string } name name of library
43
+ * @param {string } target type of library
44
+ * @param {boolean } umdNamedDefine setting this to true will name the UMD module
45
+ * @param {string|TODO } auxiliaryComment comment in the UMD wrapper
46
+ * @param {string|string[] } exportProperty which export should be exposed as library
47
+ */
33
48
constructor ( name , target , umdNamedDefine , auxiliaryComment , exportProperty ) {
34
49
this . name = name ;
35
50
this . target = target ;
@@ -38,77 +53,95 @@ class LibraryTemplatePlugin {
38
53
this . exportProperty = exportProperty ;
39
54
}
40
55
56
+ /**
57
+ * @param {Compiler } compiler the compiler instance
58
+ * @returns {void }
59
+ */
41
60
apply ( compiler ) {
42
61
compiler . hooks . thisCompilation . tap ( "LibraryTemplatePlugin" , compilation => {
43
62
if ( this . exportProperty ) {
44
- var ExportPropertyMainTemplatePlugin = require ( "./ExportPropertyMainTemplatePlugin" ) ;
63
+ const ExportPropertyMainTemplatePlugin = require ( "./ExportPropertyMainTemplatePlugin" ) ;
45
64
new ExportPropertyMainTemplatePlugin ( this . exportProperty ) . apply (
46
65
compilation
47
66
) ;
48
67
}
49
68
switch ( this . target ) {
50
69
case "var" :
51
70
new SetVarMainTemplatePlugin (
52
- `var ${ accessorAccess ( false , this . name ) } `
71
+ `var ${ accessorAccess ( undefined , this . name ) } ` ,
72
+ false
53
73
) . apply ( compilation ) ;
54
74
break ;
55
75
case "assign" :
56
76
new SetVarMainTemplatePlugin (
57
- accessorAccess ( undefined , this . name )
77
+ accessorAccess ( undefined , this . name ) ,
78
+ false
58
79
) . apply ( compilation ) ;
59
80
break ;
60
81
case "this" :
61
82
case "self" :
62
83
case "window" :
63
- if ( this . name )
84
+ if ( this . name ) {
64
85
new SetVarMainTemplatePlugin (
65
- accessorAccess ( this . target , this . name )
86
+ accessorAccess ( this . target , this . name ) ,
87
+ false
66
88
) . apply ( compilation ) ;
67
- else
89
+ } else {
68
90
new SetVarMainTemplatePlugin ( this . target , true ) . apply ( compilation ) ;
91
+ }
69
92
break ;
70
93
case "global" :
71
- if ( this . name )
94
+ if ( this . name ) {
72
95
new SetVarMainTemplatePlugin (
73
96
accessorAccess (
74
97
compilation . runtimeTemplate . outputOptions . globalObject ,
75
98
this . name
76
- )
99
+ ) ,
100
+ false
77
101
) . apply ( compilation ) ;
78
- else
102
+ } else {
79
103
new SetVarMainTemplatePlugin (
80
104
compilation . runtimeTemplate . outputOptions . globalObject ,
81
105
true
82
106
) . apply ( compilation ) ;
107
+ }
83
108
break ;
84
109
case "commonjs" :
85
- if ( this . name )
110
+ if ( this . name ) {
86
111
new SetVarMainTemplatePlugin (
87
- accessorAccess ( "exports" , this . name )
112
+ accessorAccess ( "exports" , this . name ) ,
113
+ false
88
114
) . apply ( compilation ) ;
89
- else new SetVarMainTemplatePlugin ( "exports" , true ) . apply ( compilation ) ;
115
+ } else {
116
+ new SetVarMainTemplatePlugin ( "exports" , true ) . apply ( compilation ) ;
117
+ }
90
118
break ;
91
119
case "commonjs2" :
92
120
case "commonjs-module" :
93
- new SetVarMainTemplatePlugin ( "module.exports" ) . apply ( compilation ) ;
121
+ new SetVarMainTemplatePlugin ( "module.exports" , false ) . apply (
122
+ compilation
123
+ ) ;
94
124
break ;
95
- case "amd" :
96
- var AmdMainTemplatePlugin = require ( "./AmdMainTemplatePlugin" ) ;
125
+ case "amd" : {
126
+ const AmdMainTemplatePlugin = require ( "./AmdMainTemplatePlugin" ) ;
97
127
new AmdMainTemplatePlugin ( this . name ) . apply ( compilation ) ;
98
128
break ;
129
+ }
99
130
case "umd" :
100
- case "umd2" :
101
- var UmdMainTemplatePlugin = require ( "./UmdMainTemplatePlugin" ) ;
131
+ case "umd2" : {
132
+ const UmdMainTemplatePlugin = require ( "./UmdMainTemplatePlugin" ) ;
102
133
new UmdMainTemplatePlugin ( this . name , {
103
134
optionalAmdExternalAsGlobal : this . target === "umd2" ,
104
135
namedDefine : this . umdNamedDefine ,
105
136
auxiliaryComment : this . auxiliaryComment
106
137
} ) . apply ( compilation ) ;
107
138
break ;
108
- case "jsonp" :
109
- var JsonpExportMainTemplatePlugin = require ( "./web/JsonpExportMainTemplatePlugin" ) ;
139
+ }
140
+ case "jsonp" : {
141
+ const JsonpExportMainTemplatePlugin = require ( "./web/JsonpExportMainTemplatePlugin" ) ;
110
142
new JsonpExportMainTemplatePlugin ( this . name ) . apply ( compilation ) ;
111
143
break ;
144
+ }
112
145
default :
113
146
throw new Error ( `${ this . target } is not a valid Library target` ) ;
114
147
}
0 commit comments