Skip to contentView the source on GitHub

require-fetch-default-export

Require a default export from Astro 7 advanced-routing entrypoints.

Best Practiceswarning by default Project auditrecommended audit

astro-doctor/require-fetch-default-export

Why it matters

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.

See the difference

Incorrect

Reserved file contains only a named utility export

typescriptIncorrect example
// src/fetch.ts
export const fetchJson = async (url: string) => {
  const response = await fetch(url)
  return response.json()
}

Correct

Export an advanced-routing handler

typescriptCorrect example
// 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 Fetchable

Configure this check

Project audits are configured in doctor.config.ts:

typescriptdoctor.config.ts
export default {
  rules: {
    'astro-doctor/require-fetch-default-export': 'error',
  },
}

Use 'error', 'warn', or 'off'. The configuration guide covers presets and per-file overrides.

Keep exploring best practices

Browse every rule and project audit