1
1
import { buildError , catchError , flatOne , isGlob , normalizePath } from '@utils' ;
2
- import { glob , type GlobOptions } from 'glob' ;
2
+ import { glob } from 'glob' ;
3
3
import path from 'path' ;
4
4
5
5
import type * as d from '../../declarations' ;
@@ -13,7 +13,7 @@ export async function nodeCopyTasks(copyTasks: Required<d.CopyTask>[], srcDir: s
13
13
} ;
14
14
15
15
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 ) ) ) ) ;
17
17
18
18
const allCopyTasks : d . CopyTask [ ] = [ ] ;
19
19
@@ -44,21 +44,31 @@ export async function nodeCopyTasks(copyTasks: Required<d.CopyTask>[], srcDir: s
44
44
return results ;
45
45
}
46
46
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
+
47
68
async 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 , {
59
70
cwd : srcDir ,
60
71
nodir : true ,
61
- absolute : false ,
62
72
ignore : copyTask . ignore ,
63
73
} ) ;
64
74
return files . map ( ( globRelPath ) => createGlobCopyTask ( copyTask , srcDir , globRelPath ) ) ;
@@ -89,7 +99,7 @@ async function processCopyTask(results: d.CopyResults, allCopyTasks: d.CopyTask[
89
99
}
90
100
91
101
await processCopyTaskDirectory ( results , allCopyTasks , copyTask ) ;
92
- } else {
102
+ } else if ( ! shouldIgnore ( copyTask ) ) {
93
103
// this is a file we should copy
94
104
if ( ! results . filePaths . includes ( copyTask . dest ) ) {
95
105
results . filePaths . push ( copyTask . dest ) ;
@@ -162,6 +172,11 @@ function addMkDir(mkDirs: string[], destDir: string) {
162
172
163
173
const ROOT_DIR = normalizePath ( path . resolve ( '/' ) ) ;
164
174
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 ) ;
167
182
}
0 commit comments