@@ -36,15 +36,37 @@ export interface CopyEntry {
3636export type CopyOptions = Arrayable < string | CopyEntry >
3737export type CopyOptionsFn = ( options : ResolvedConfig ) => Awaitable < CopyOptions >
3838
39+ type ResolvedCopyEntry = CopyEntry & { from : string ; to : string }
40+
3941export async function copy ( options : ResolvedConfig ) : Promise < void > {
4042 if ( ! options . copy ) return
4143
44+ const resolved = await resolveCopyEntries ( options )
45+ await Promise . all (
46+ resolved . map ( ( { from, to, verbose } ) => {
47+ if ( verbose ) {
48+ options . logger . info (
49+ options . nameLabel ,
50+ `Copying files from ${ path . relative ( options . cwd , from ) } to ${ path . relative (
51+ options . cwd ,
52+ to ,
53+ ) } `,
54+ )
55+ }
56+ return fsCopy ( from , to )
57+ } ) ,
58+ )
59+ }
60+
61+ export async function resolveCopyEntries (
62+ options : ResolvedConfig ,
63+ ) : Promise < ResolvedCopyEntry [ ] > {
4264 const copy = toArray (
4365 typeof options . copy === 'function'
4466 ? await options . copy ( options )
4567 : options . copy ,
4668 )
47- if ( ! copy . length ) return
69+ if ( ! copy . length ) return [ ]
4870
4971 const resolved = (
5072 await Promise . all (
@@ -63,52 +85,44 @@ export async function copy(options: ResolvedConfig): Promise<void> {
6385 } )
6486 }
6587
66- return from . map ( ( file ) => resolveCopyEntry ( { ...entry , from : file } ) )
88+ return from . map ( ( file ) =>
89+ resolveCopyEntry (
90+ { ...entry , from : file } ,
91+ options . cwd ,
92+ options . outDir ,
93+ ) ,
94+ )
6795 } ) ,
6896 )
6997 ) . flat ( )
7098
7199 if ( ! resolved . length ) {
72100 options . logger . warn ( options . nameLabel , `No files matched for copying.` )
73- return
74101 }
75102
76- await Promise . all (
77- resolved . map ( ( { from, to, verbose } ) => {
78- if ( verbose ) {
79- options . logger . info (
80- options . nameLabel ,
81- `Copying files from ${ path . relative ( options . cwd , from ) } to ${ path . relative (
82- options . cwd ,
83- to ,
84- ) } `,
85- )
86- }
87- return fsCopy ( from , to )
88- } ) ,
89- )
103+ return resolved
104+ }
90105
91- // https://github.com/vladshcherbin/rollup-plugin-copy/blob/master/src/index.js
92- // MIT License
93- function resolveCopyEntry (
94- entry : CopyEntry & { from : string } ,
95- ) : CopyEntry & { from : string ; to : string } {
96- const { flatten = true , rename } = entry
97- const from = path . resolve ( options . cwd , entry . from )
98- const to = entry . to ? path . resolve ( options . cwd , entry . to ) : options . outDir
106+ // https://github.com/vladshcherbin/rollup-plugin-copy/blob/master/src/index.js
107+ // MIT License
108+ function resolveCopyEntry (
109+ entry : CopyEntry & { from : string } ,
110+ cwd : string ,
111+ outDir : string ,
112+ ) : CopyEntry & { from : string ; to : string } {
113+ const { flatten = true , rename } = entry
114+ const from = path . resolve ( cwd , entry . from )
115+ const to = entry . to ? path . resolve ( cwd , entry . to ) : outDir
99116
100- const { base, dir } = path . parse ( path . relative ( options . cwd , from ) )
101- const destFolder =
102- flatten || ( ! flatten && ! dir )
103- ? to
104- : dir . replace ( dir . split ( path . sep ) [ 0 ] , to )
105- const dest = path . join (
106- destFolder ,
107- rename ? renameTarget ( base , rename , from ) : base ,
108- )
117+ const { base, dir } = path . parse ( path . relative ( cwd , from ) )
118+ const destFolder =
119+ flatten || ( ! flatten && ! dir ) ? to : dir . replace ( dir . split ( path . sep ) [ 0 ] , to )
120+ const dest = path . join (
121+ destFolder ,
122+ rename ? renameTarget ( base , rename , from ) : base ,
123+ )
109124
110- return { ...entry , from, to : dest }
111- }
125+ return { ...entry , from, to : dest }
112126}
113127
114128function renameTarget (
0 commit comments