Skip to content

Commit d21408f

Browse files
committed
fix(compiler) restore old copy behaviour, with new ignore option
1 parent 86a36b4 commit d21408f

File tree

2 files changed

+33
-18
lines changed

2 files changed

+33
-18
lines changed

src/sys/node/node-copy-tasks.ts

Lines changed: 32 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { buildError, catchError, flatOne, isGlob, normalizePath } from '@utils';
2-
import { glob, type GlobOptions } from 'glob';
2+
import { glob } from 'glob';
33
import path from 'path';
44

55
import 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+
4768
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, {
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

163173
const 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
}

test/copy-task/stencil.config.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ export const config: Config = {
77
type: 'dist-custom-elements',
88
copy: [
99
{
10-
src: './utils',
10+
src: './utils/**',
1111
dest: './dist/utilsExtra',
1212
},
1313
],

0 commit comments

Comments
 (0)