11import { buildError , catchError , flatOne , isGlob , normalizePath } from '@utils' ;
2- import { glob , type GlobOptions } from 'glob' ;
2+ import { glob } from 'glob' ;
33import path from 'path' ;
44
55import type * as d from '../../declarations' ;
@@ -13,7 +13,7 @@ export async function nodeCopyTasks(copyTasks: Required<d.CopyTask>[], srcDir: s
1313 } ;
1414
1515 try {
16- copyTasks = flatOne ( await Promise . all ( copyTasks . map ( ( task ) => processGlobTask ( task , srcDir ) ) ) ) ;
16+ copyTasks = flatOne ( await Promise . all ( copyTasks . map ( ( task ) => processGlobs ( task , srcDir ) ) ) ) ;
1717
1818 const allCopyTasks : d . CopyTask [ ] = [ ] ;
1919
@@ -44,21 +44,31 @@ export async function nodeCopyTasks(copyTasks: Required<d.CopyTask>[], srcDir: s
4444 return results ;
4545}
4646
47+ async function processGlobs ( copyTask : Required < d . CopyTask > , srcDir : string ) : Promise < Required < d . CopyTask > [ ] > {
48+ return isGlob ( copyTask . src )
49+ ? await processGlobTask ( copyTask , srcDir )
50+ : [
51+ {
52+ src : getSrcAbsPath ( srcDir , copyTask . src ) ,
53+ dest : copyTask . keepDirStructure ? path . join ( copyTask . dest , copyTask . src ) : copyTask . dest ,
54+ warn : copyTask . warn ,
55+ ignore : copyTask . ignore ,
56+ keepDirStructure : copyTask . keepDirStructure ,
57+ } ,
58+ ] ;
59+ }
60+
61+ function getSrcAbsPath ( srcDir : string , src : string ) {
62+ if ( path . isAbsolute ( src ) ) {
63+ return src ;
64+ }
65+ return path . join ( srcDir , src ) ;
66+ }
67+
4768async function processGlobTask ( copyTask : Required < d . CopyTask > , srcDir : string ) : Promise < Required < d . CopyTask > [ ] > {
48- /**
49- * To properly match all files within a certain directory we have to ensure to attach a `/**` to
50- * the end of the pattern. However we only want to do this if the `src` entry is not a glob pattern
51- * already or a file with an extension.
52- */
53- const pattern =
54- isGlob ( copyTask . src ) || path . extname ( copyTask . src ) . length > 0
55- ? copyTask . src
56- : './' + path . relative ( srcDir , path . join ( path . resolve ( srcDir , copyTask . src ) , '**' ) ) . replaceAll ( path . sep , '/' ) ;
57-
58- const files = await asyncGlob ( pattern , {
69+ const files = await asyncGlob ( copyTask . src , {
5970 cwd : srcDir ,
6071 nodir : true ,
61- absolute : false ,
6272 ignore : copyTask . ignore ,
6373 } ) ;
6474 return files . map ( ( globRelPath ) => createGlobCopyTask ( copyTask , srcDir , globRelPath ) ) ;
@@ -89,7 +99,7 @@ async function processCopyTask(results: d.CopyResults, allCopyTasks: d.CopyTask[
8999 }
90100
91101 await processCopyTaskDirectory ( results , allCopyTasks , copyTask ) ;
92- } else {
102+ } else if ( ! shouldIgnore ( copyTask ) ) {
93103 // this is a file we should copy
94104 if ( ! results . filePaths . includes ( copyTask . dest ) ) {
95105 results . filePaths . push ( copyTask . dest ) ;
@@ -162,6 +172,11 @@ function addMkDir(mkDirs: string[], destDir: string) {
162172
163173const ROOT_DIR = normalizePath ( path . resolve ( '/' ) ) ;
164174
165- export async function asyncGlob ( pattern : string , opts : GlobOptions ) : Promise < string [ ] > {
166- return glob ( pattern , { ...opts , withFileTypes : false } ) ;
175+ function shouldIgnore ( { src, ignore = [ ] } : d . CopyTask ) {
176+ const filePath = src . trim ( ) . toLowerCase ( ) ;
177+ return ignore . some ( ( ignoreFile ) => filePath . endsWith ( ignoreFile ) ) ;
178+ }
179+
180+ export function asyncGlob ( pattern : string , opts : any ) {
181+ return glob ( pattern , opts ) ;
167182}
0 commit comments