66
77const SetVarMainTemplatePlugin = require ( "./SetVarMainTemplatePlugin" ) ;
88
9+ /** @typedef {import("./Compiler") } Compiler */
10+
11+ /**
12+ * @param {string[] } accessor the accessor to convert to path
13+ * @returns {string } the path
14+ */
915const 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 ( "" ) ;
1517} ;
1618
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 ;
2533 if ( idx === 0 && typeof base === "undefined" )
2634 return `${ a } = typeof ${ a } === "object" ? ${ a } : {}` ;
2735 return `${ a } = ${ a } || {}` ;
2836 } )
29- . join ( joinWith || "; " ) ;
37+ . join ( joinWith ) ;
3038} ;
3139
3240class 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+ */
3348 constructor ( name , target , umdNamedDefine , auxiliaryComment , exportProperty ) {
3449 this . name = name ;
3550 this . target = target ;
@@ -38,77 +53,95 @@ class LibraryTemplatePlugin {
3853 this . exportProperty = exportProperty ;
3954 }
4055
56+ /**
57+ * @param {Compiler } compiler the compiler instance
58+ * @returns {void }
59+ */
4160 apply ( compiler ) {
4261 compiler . hooks . thisCompilation . tap ( "LibraryTemplatePlugin" , compilation => {
4362 if ( this . exportProperty ) {
44- var ExportPropertyMainTemplatePlugin = require ( "./ExportPropertyMainTemplatePlugin" ) ;
63+ const ExportPropertyMainTemplatePlugin = require ( "./ExportPropertyMainTemplatePlugin" ) ;
4564 new ExportPropertyMainTemplatePlugin ( this . exportProperty ) . apply (
4665 compilation
4766 ) ;
4867 }
4968 switch ( this . target ) {
5069 case "var" :
5170 new SetVarMainTemplatePlugin (
52- `var ${ accessorAccess ( false , this . name ) } `
71+ `var ${ accessorAccess ( undefined , this . name ) } ` ,
72+ false
5373 ) . apply ( compilation ) ;
5474 break ;
5575 case "assign" :
5676 new SetVarMainTemplatePlugin (
57- accessorAccess ( undefined , this . name )
77+ accessorAccess ( undefined , this . name ) ,
78+ false
5879 ) . apply ( compilation ) ;
5980 break ;
6081 case "this" :
6182 case "self" :
6283 case "window" :
63- if ( this . name )
84+ if ( this . name ) {
6485 new SetVarMainTemplatePlugin (
65- accessorAccess ( this . target , this . name )
86+ accessorAccess ( this . target , this . name ) ,
87+ false
6688 ) . apply ( compilation ) ;
67- else
89+ } else {
6890 new SetVarMainTemplatePlugin ( this . target , true ) . apply ( compilation ) ;
91+ }
6992 break ;
7093 case "global" :
71- if ( this . name )
94+ if ( this . name ) {
7295 new SetVarMainTemplatePlugin (
7396 accessorAccess (
7497 compilation . runtimeTemplate . outputOptions . globalObject ,
7598 this . name
76- )
99+ ) ,
100+ false
77101 ) . apply ( compilation ) ;
78- else
102+ } else {
79103 new SetVarMainTemplatePlugin (
80104 compilation . runtimeTemplate . outputOptions . globalObject ,
81105 true
82106 ) . apply ( compilation ) ;
107+ }
83108 break ;
84109 case "commonjs" :
85- if ( this . name )
110+ if ( this . name ) {
86111 new SetVarMainTemplatePlugin (
87- accessorAccess ( "exports" , this . name )
112+ accessorAccess ( "exports" , this . name ) ,
113+ false
88114 ) . apply ( compilation ) ;
89- else new SetVarMainTemplatePlugin ( "exports" , true ) . apply ( compilation ) ;
115+ } else {
116+ new SetVarMainTemplatePlugin ( "exports" , true ) . apply ( compilation ) ;
117+ }
90118 break ;
91119 case "commonjs2" :
92120 case "commonjs-module" :
93- new SetVarMainTemplatePlugin ( "module.exports" ) . apply ( compilation ) ;
121+ new SetVarMainTemplatePlugin ( "module.exports" , false ) . apply (
122+ compilation
123+ ) ;
94124 break ;
95- case "amd" :
96- var AmdMainTemplatePlugin = require ( "./AmdMainTemplatePlugin" ) ;
125+ case "amd" : {
126+ const AmdMainTemplatePlugin = require ( "./AmdMainTemplatePlugin" ) ;
97127 new AmdMainTemplatePlugin ( this . name ) . apply ( compilation ) ;
98128 break ;
129+ }
99130 case "umd" :
100- case "umd2" :
101- var UmdMainTemplatePlugin = require ( "./UmdMainTemplatePlugin" ) ;
131+ case "umd2" : {
132+ const UmdMainTemplatePlugin = require ( "./UmdMainTemplatePlugin" ) ;
102133 new UmdMainTemplatePlugin ( this . name , {
103134 optionalAmdExternalAsGlobal : this . target === "umd2" ,
104135 namedDefine : this . umdNamedDefine ,
105136 auxiliaryComment : this . auxiliaryComment
106137 } ) . apply ( compilation ) ;
107138 break ;
108- case "jsonp" :
109- var JsonpExportMainTemplatePlugin = require ( "./web/JsonpExportMainTemplatePlugin" ) ;
139+ }
140+ case "jsonp" : {
141+ const JsonpExportMainTemplatePlugin = require ( "./web/JsonpExportMainTemplatePlugin" ) ;
110142 new JsonpExportMainTemplatePlugin ( this . name ) . apply ( compilation ) ;
111143 break ;
144+ }
112145 default :
113146 throw new Error ( `${ this . target } is not a valid Library target` ) ;
114147 }
0 commit comments