Best Practiceswarn by default
recommended preset
astro-doctor/require-fetch-default-exportrequire-fetch-default-export
Require a default export from Astro 7 advanced-routing entrypoints.
Why
Astro 7 reserves src/fetch.ts, src/fetch.js, src/fetch.mjs, and src/fetch.mts for advanced routing. A utility module using one of these names without a default export is loaded as a routing entrypoint and can break development or production startup.
Examples
Incorrect
Reserved file contains only a named utility export
// src/fetch.ts
export const fetchJson = async (url: string) => {
const response = await fetch(url)
return response.json()
}Correct
Export an advanced-routing handler
// src/fetch.ts
import type { Fetchable } from 'astro'
import { astro, FetchState } from 'astro/fetch'
export default {
async fetch(request) {
return astro(new FetchState(request))
},
} satisfies FetchableConfiguration
Project audits are configured in doctor.config.ts:
export default {
rules: {
'astro-doctor/require-fetch-default-export': 'error', // or 'warn' or 'off'
},
}All rules
astro-doctor/no-client-load-overuseastro-doctor/use-astro-imageastro-doctor/require-image-dimensionsastro-doctor/no-missing-altastro-doctor/no-set-htmlastro-doctor/no-public-secret-envastro-doctor/prefer-class-listastro-doctor/no-blocking-scriptastro-doctor/no-unprocessed-script-surprisesastro-doctor/no-missing-langastro-doctor/require-island-fallbackastro-doctor/no-process-envastro-doctor/prefer-content-collectionsastro-doctor/no-disabled-origin-checkastro-doctor/no-insecure-session-cookieastro-doctor/no-open-allowed-domainsastro-doctor/no-legacy-astro-7-experimental-flagsastro-doctor/prefer-env-schemaastro-doctor/prefer-pnpmastro-doctor/require-action-input-schemaastro-doctor/require-client-router-script-lifecycleastro-doctor/require-content-configastro-doctor/require-fetch-default-export(this page)