@@ -57,84 +57,74 @@ export default function copy(options = {}) {
57
57
58
58
return {
59
59
name : 'copy' ,
60
- [ hook ] : async ( ) => {
61
- if ( copyOnce && copied ) {
62
- return
63
- }
64
-
65
- const copyTargets = [ ]
66
-
67
- if ( Array . isArray ( targets ) && targets . length ) {
60
+ buildStart ( ) {
61
+ if ( Array . isArray ( targets ) ) {
68
62
for ( const target of targets ) {
69
63
if ( ! isObject ( target ) ) {
70
- throw new Error ( `${ stringify ( target ) } target must be an object` )
64
+ throw new Error ( `${ stringify ( target ) } target must be an object` ) ;
71
65
}
72
66
73
- const { dest, rename, src, transform, ...restTargetOptions } = target
67
+ const {
68
+ src,
69
+ dest,
70
+ rename,
71
+ ...restTargetOptions
72
+ } = target ;
74
73
75
74
if ( ! src || ! dest ) {
76
- throw new Error ( `${ stringify ( target ) } target must have "src" and "dest" properties` )
75
+ throw new Error ( `${ stringify ( target ) } target must have "src" and "dest" properties` ) ;
77
76
}
78
77
79
78
if ( rename && typeof rename !== 'string' && typeof rename !== 'function' ) {
80
- throw new Error ( `${ stringify ( target ) } target's "rename" property must be a string or a function` )
79
+ throw new Error ( `${ stringify ( target ) } target's "rename" property must be a string or a function` ) ;
81
80
}
82
81
83
- const matchedPaths = await globby ( src , {
82
+ const matchedPaths = globby . sync ( src , {
84
83
expandDirectories : false ,
85
84
onlyFiles : false ,
86
85
...restPluginOptions ,
87
86
...restTargetOptions
88
- } )
87
+ } ) ;
89
88
90
89
if ( matchedPaths . length ) {
91
- for ( const matchedPath of matchedPaths ) {
92
- const generatedCopyTargets = Array . isArray ( dest )
93
- ? await Promise . all ( dest . map ( ( destination ) => generateCopyTarget (
94
- matchedPath ,
95
- destination ,
96
- { flatten, rename, transform }
97
- ) ) )
98
- : [ await generateCopyTarget ( matchedPath , dest , { flatten, rename, transform } ) ]
99
-
100
- copyTargets . push ( ...generatedCopyTargets )
101
- }
90
+ matchedPaths . forEach ( matchedPath => {
91
+ const generatedCopyTargets = Array . isArray ( dest ) ? dest . map ( destination => generateCopyTarget ( matchedPath , destination , rename ) ) : [ generateCopyTarget ( matchedPath , dest , rename ) ] ;
92
+ copyTargets . push ( ...generatedCopyTargets ) ;
93
+ } ) ;
102
94
}
103
95
}
104
96
}
105
97
98
+ const targetSources = copyTargets . map ( ( { src } ) => path . resolve ( src ) ) ;
99
+ targetSources . forEach ( target => {
100
+ this . addWatchFile ( target ) ;
101
+ } ) ;
102
+ } ,
103
+
104
+ [ hook ] : async ( ) => {
105
+ if ( copyOnce && copied ) {
106
+ return ;
107
+ }
108
+
106
109
if ( copyTargets . length ) {
107
110
if ( verbose ) {
108
- console . log ( green ( 'copied:' ) )
111
+ console . log ( green ( 'copied:' ) ) ;
109
112
}
110
113
111
- for ( const copyTarget of copyTargets ) {
112
- const { contents, dest, src, transformed } = copyTarget
113
-
114
- if ( transformed ) {
115
- await fs . outputFile ( dest , contents , restPluginOptions )
116
- } else {
117
- await fs . copy ( src , dest , restPluginOptions )
118
- }
114
+ for ( const {
115
+ src,
116
+ dest
117
+ } of copyTargets ) {
118
+ await fs . copy ( src , dest , restPluginOptions ) ;
119
119
120
120
if ( verbose ) {
121
- let message = green ( ` ${ bold ( src ) } → ${ bold ( dest ) } ` )
122
- const flags = Object . entries ( copyTarget )
123
- . filter ( ( [ key , value ] ) => [ 'renamed' , 'transformed' ] . includes ( key ) && value )
124
- . map ( ( [ key ] ) => key . charAt ( 0 ) . toUpperCase ( ) )
125
-
126
- if ( flags . length ) {
127
- message = `${ message } ${ yellow ( `[${ flags . join ( ', ' ) } ]` ) } `
128
- }
129
-
130
- console . log ( message )
121
+ console . log ( green ( ` ${ bold ( src ) } → ${ bold ( dest ) } ` ) ) ;
131
122
}
132
123
}
133
124
} else if ( verbose ) {
134
- console . log ( yellow ( 'no items to copy' ) )
125
+ console . log ( yellow ( 'no items to copy' ) ) ;
135
126
}
136
127
137
- copied = true
128
+ copied = true ;
138
129
}
139
- }
140
130
}
0 commit comments