From 846990f63f4b194e5f9b3e82c687be8f9ede1a65 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Narciso?= Date: Wed, 18 Jun 2025 21:51:59 -0300 Subject: [PATCH] fix(presets): astro prebuild --- .../presets/src/presets/astro/prebuild.ts | 59 ++++++++++++------- 1 file changed, 39 insertions(+), 20 deletions(-) diff --git a/packages/presets/src/presets/astro/prebuild.ts b/packages/presets/src/presets/astro/prebuild.ts index 17633194..16850402 100644 --- a/packages/presets/src/presets/astro/prebuild.ts +++ b/packages/presets/src/presets/astro/prebuild.ts @@ -1,27 +1,46 @@ import { copyDirectory, exec, getPackageManager } from 'azion/utils/node'; -import { readFile } from 'fs/promises'; - -/** - * Runs custom prebuild actions for Astro - */ -async function prebuild() { - const packageManager = await getPackageManager(); - const newOutDir = '.edge/storage'; - let outDir = 'dist'; - - // check if an output path is specified in config file - const configFileContent = await readFile('./astro.config.mjs', 'utf-8'); - const attributeMatch = Array.from(configFileContent.matchAll(/outDir:(.*)\n/g), (match) => match)[0]; - if (attributeMatch) { - outDir = attributeMatch[1].trim(); +import { constants } from 'fs'; +import { access, readFile } from 'fs/promises'; + +const CONFIG_FILES = ['astro.config.ts', 'astro.config.mjs', 'astro.config.js', 'astro.config.cjs'] as const; + +async function getAstroOutDir(): Promise { + for (const configFile of CONFIG_FILES) { + try { + await access(configFile, constants.F_OK); + const configContent = await readFile(configFile, 'utf-8'); + + // Regex supports: outDir: 'path', outDir:"path", outDir: `path` + const outDirMatch = configContent.match(/outDir\s*:\s*['"`]([^'"`]+)['"`]/); + + if (outDirMatch && outDirMatch[1]) { + return outDirMatch[1].trim(); + } + + break; + } catch { + continue; + } } - await exec(`${packageManager} run build`, { - scope: 'Astro', - verbose: true, - }); + return 'dist'; // Default Astro output directory +} + +async function prebuild(): Promise { + try { + const [packageManager, outDir] = await Promise.all([getPackageManager(), getAstroOutDir()]); + + const newOutDir = '.edge/storage'; - copyDirectory(outDir, newOutDir); + await exec(`${packageManager} run build`, { + scope: 'Astro', + verbose: true, + }); + + copyDirectory(outDir, newOutDir); + } catch (error) { + throw new Error(`Erro durante o prebuild do Astro: ${error instanceof Error ? error.message : String(error)}`); + } } export default prebuild;