From 89819ce78dcbd3b0d03626fbd20e396791a5b516 Mon Sep 17 00:00:00 2001 From: hugoalh Date: Sun, 8 Sep 2024 14:31:13 +0800 Subject: [PATCH] Fix glob get files --- _payload.ts | 27 +++++++++++++++++---------- 1 file changed, 17 insertions(+), 10 deletions(-) diff --git a/_payload.ts b/_payload.ts index 2010ff4e..adcf17af 100644 --- a/_payload.ts +++ b/_payload.ts @@ -349,7 +349,7 @@ export function resolveEmbeds(embeds: unknown, truncator?: StringTruncator): JSO } return embedsFmt; } -async function resolveFilesFormData(files: string[]): Promise { +async function resolveFilesFormData(workspace: string, files: string[]): Promise { if (files.length > thresholdFiles) { throw new Error(`Input \`files\` must not have more than ${thresholdFiles} files (current ${files.length})!`); } @@ -362,7 +362,7 @@ async function resolveFilesFormData(files: string[]): Promise { filename: fileBasename, id: index }); - formData.append(`files[${index}]`, new Blob([await Deno.readFile(file)], { type: contentType(pathExtname(file)) }), fileBasename); + formData.append(`files[${index}]`, new Blob([await Deno.readFile(pathJoin(workspace, file))], { type: contentType(pathExtname(file)) }), fileBasename); } formData.append("attachments", JSON.stringify(attachments)); return formData; @@ -377,20 +377,27 @@ export async function resolveFiles(files: string[], glob: boolean): Promise
{ + return globToRegExp(file, { caseInsensitive: true }); + }); + const filesFmt: string[] = (await Array.fromAsync(walkFS(workspace, { includeDirs: false, includeRoot: false, - includeSymlinks: false, - match: files.map((file: string): RegExp => { - return globToRegExp(file, { caseInsensitive: true }); - }) - }), ({ pathRelative }: FSWalkEntry): string => { + includeSymlinks: false + }))).filter(({ + pathAbsolute, + pathRelative + }: FSWalkEntry): boolean => { + return pathAbsolute.startsWith(workspace) && matchers.some((matcher: RegExp): boolean => { + return matcher.test(pathRelative); + }); + }).map(({ pathRelative }: FSWalkEntry): string => { return pathRelative; }); if (filesFmt.length === 0) { return undefined; } - return resolveFilesFormData(filesFmt); + return resolveFilesFormData(workspace, filesFmt); } const filesStatRejected: unknown[] = (await Promise.allSettled(files.map(async (file: string): Promise => { if (pathIsAbsolute(file)) { @@ -408,7 +415,7 @@ export async function resolveFiles(files: string[], glob: boolean): Promise 0) { throw new AggregateError(filesStatRejected, `Unable to process files!`); } - return resolveFilesFormData(files); + return resolveFilesFormData(workspace, files); } export function resolveKey(key: string): string { if (!regexpDiscordWebhookURL.test(key)) {