diff --git a/.changeset/seven-feet-juggle.md b/.changeset/seven-feet-juggle.md new file mode 100644 index 0000000000..59bc3caded --- /dev/null +++ b/.changeset/seven-feet-juggle.md @@ -0,0 +1,5 @@ +--- +'astro': patch +--- + +Modified compileAstro to reflect the settings in viteConfig.esbuild diff --git a/packages/astro/src/vite-plugin-astro/compile.ts b/packages/astro/src/vite-plugin-astro/compile.ts index 78d6c416f0..5000b42b70 100644 --- a/packages/astro/src/vite-plugin-astro/compile.ts +++ b/packages/astro/src/vite-plugin-astro/compile.ts @@ -37,8 +37,8 @@ export async function compileAstro({ // Compile all TypeScript to JavaScript. // Also, catches invalid JS/TS in the compiled output before returning. esbuildResult = await transformWithEsbuild(transformResult.code, compileProps.filename, { + ...compileProps.viteConfig.esbuild, loader: 'ts', - target: 'esnext', sourcemap: 'external', tsconfigRaw: { compilerOptions: { diff --git a/packages/astro/test/units/vite-plugin-astro/compile.test.js b/packages/astro/test/units/vite-plugin-astro/compile.test.js index 25ffdcfe77..ab4fe9d348 100644 --- a/packages/astro/test/units/vite-plugin-astro/compile.test.js +++ b/packages/astro/test/units/vite-plugin-astro/compile.test.js @@ -1,17 +1,17 @@ import * as assert from 'node:assert/strict'; -import { describe, it } from 'node:test'; +import { describe, it, before } from 'node:test'; import { pathToFileURL } from 'node:url'; import { init, parse } from 'es-module-lexer'; import { resolveConfig } from 'vite'; import { compileAstro } from '../../../dist/vite-plugin-astro/compile.js'; -const viteConfig = await resolveConfig({ configFile: false }, 'serve'); - +let inlineConfig; /** * @param {string} source * @param {string} id */ async function compile(source, id) { + const viteConfig = await resolveConfig({ configFile: false, ...inlineConfig }, 'serve'); return await compileAstro({ compileProps: { astroConfig: { root: pathToFileURL('/'), base: '/', experimental: {} }, @@ -24,6 +24,10 @@ async function compile(source, id) { } describe('astro full compile', () => { + before(() => { + inlineConfig = {}; + }) + it('should compile a single file', async () => { const result = await compile(`

Hello World

`, '/src/components/index.astro'); assert.ok(result.code); @@ -69,4 +73,25 @@ const name = 'world assert.equal(names.includes('file'), true); assert.equal(names.includes('url'), true); }); + + describe('when the code contains syntax that is transformed by esbuild', () => { + let code = `\ +--- +using x = {} +---`; + + it('should not transform the syntax by default', async () => { + const result = await compile(code, '/src/components/index.astro'); + assert.equal(result.code.includes('using x = {}'), true); + }); + + it('should transform the syntax by esbuild.target', async () => { + inlineConfig = { + esbuild: { target: 'es2018' }, + } + const result = await compile(code, '/src/components/index.astro'); + assert.equal(result.code.includes('using x = {}'), false); + }); + }); + });