Skip to content

Commit

Permalink
fix(astro): ignore query params when matching .astro extension (#11240)
Browse files Browse the repository at this point in the history
* fix: ignore query params when matching .astro extension

* Changeset

* Add test
  • Loading branch information
ascorbic authored Jun 12, 2024
1 parent a8c7cec commit 2851b0a
Show file tree
Hide file tree
Showing 7 changed files with 102 additions and 1 deletion.
5 changes: 5 additions & 0 deletions .changeset/pink-experts-count.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
'astro': patch
---

Ignores query strings in module identifiers when matching ".astro" file extensions in Vite plugin
2 changes: 1 addition & 1 deletion packages/astro/src/vite-plugin-astro/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -202,7 +202,7 @@ export default function astro({ settings, logger }: AstroPluginOptions): vite.Pl
async transform(source, id) {
const parsedId = parseAstroRequest(id);
// ignore astro file sub-requests, e.g. Foo.astro?astro&type=script&index=0&lang.ts
if (!id.endsWith('.astro') || parsedId.query.astro) {
if (!parsedId.filename.endsWith('.astro') || parsedId.query.astro) {
return;
}

Expand Down
24 changes: 24 additions & 0 deletions packages/astro/test/extension-matching.test.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
import assert from 'node:assert/strict';
import { before, describe, it } from 'node:test';
import * as cheerio from 'cheerio';
import { loadFixture } from './test-utils.js';

describe('Matching .astro modules', () => {
let fixture;
/** @type {string} */
let output;

before(async () => {
fixture = await loadFixture({
root: './fixtures/extension-matching/',
});
await fixture.build();
output = await fixture.readFile('./index.html');
});

it('loads virtual modules with .astro in query string', async () => {
const $ = cheerio.load(output);
const title = $('h1').text();
assert.strictEqual(title, 'true');
});
});
38 changes: 38 additions & 0 deletions packages/astro/test/fixtures/extension-matching/astro.config.mjs
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
import { defineConfig } from 'astro/config';

const MODULE_ID = 'virtual:test';
const RESOLVED_MODULE_ID = '\0virtual:test';

export default defineConfig({
integrations: [
{
name: 'astro-test-invalid-transform',
hooks: {
'astro:config:setup': ({ updateConfig }) => {
updateConfig({
vite: {
plugins: [
// -----------------------------------
{
name: 'vite-test-invalid-transform',
resolveId(id) {
if (id === MODULE_ID) {
// Astro tries to transform this import because the query params can end with '.astro'
return `${RESOLVED_MODULE_ID}?importer=index.astro`;
}
},
load(id) {
if (id.startsWith(RESOLVED_MODULE_ID)) {
return `export default 'true';`;
}
},
},
// -----------------------------------
],
},
});
},
},
},
],
});
16 changes: 16 additions & 0 deletions packages/astro/test/fixtures/extension-matching/package.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
{
"name": "@test/extension-matching",
"type": "module",
"version": "0.0.1",
"private": true,
"scripts": {
"dev": "astro dev",
"start": "astro dev",
"build": "astro build",
"preview": "astro preview",
"astro": "astro"
},
"dependencies": {
"astro": "workspace:*"
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
---
let success = 'false'
try {
success = (await import('virtual:test')).default
} catch (e) {
console.error('Failed to load virtual module:', e)
}
console.log('Loaded virtual module:', success)
---
<h1>{String(success)}</h1>
6 changes: 6 additions & 0 deletions pnpm-lock.yaml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

0 comments on commit 2851b0a

Please sign in to comment.