diff --git a/.changeset/cyan-crews-cross.md b/.changeset/cyan-crews-cross.md new file mode 100644 index 000000000000..387e73e30529 --- /dev/null +++ b/.changeset/cyan-crews-cross.md @@ -0,0 +1,19 @@ +--- +'astro': major +--- + +Removes the old `app.render()` signature (Adapter API) + +In Astro 4.0, the `app.render()` signature that allowed passing `routeData` and `locals` as optional arguments was deprecated in favor of a single optional `renderOptions` argument. + +Astro 6.0 removes this signature entirely. Attempting to pass these separate arguments will now cause an error in your project. + +#### What should I do? + +Review your `app.render` calls and pass `routeData` and `locals` as properties of an object instead of as multiple independent arguments: + +```diff +// my-adapter/entrypoint.ts +-app.render(request, routeData, locals) ++app.render(request, { routeData, locals }) +``` diff --git a/.changeset/dull-mangos-travel.md b/.changeset/dull-mangos-travel.md new file mode 100644 index 000000000000..7c33a7a2eba0 --- /dev/null +++ b/.changeset/dull-mangos-travel.md @@ -0,0 +1,20 @@ +--- +'astro': major +--- + +Removes `prefetch()` `with` option + +In Astro 4.8.4, the `with` option of the programmatic `prefetch()` function was deprecated in favor of a more sensible default behavior that no longer required specifying the priority of prefetching for each page. + +Astro 6.0 removes this option entirely and it is no longer possible to configure the priority of prefetching by passing the `with` option. Attempting to do so will now cause errors. + +By default, Astro's prefetching now uses an automatic approach that will always try to use ` + +- ++ + + + + + +``` diff --git a/packages/astro/components/ClientRouter.astro b/packages/astro/components/ClientRouter.astro index df7a37da3d79..87d3892da2a2 100644 --- a/packages/astro/components/ClientRouter.astro +++ b/packages/astro/components/ClientRouter.astro @@ -3,11 +3,6 @@ type Fallback = 'none' | 'animate' | 'swap'; export interface Props { fallback?: Fallback; - /** @deprecated handleForms is enabled by default in Astro 4.0 - * - * Set `data-astro-reload` on your form to opt-out of the default behavior. - */ - handleForms?: boolean; } const { fallback = 'animate' } = Astro.props; diff --git a/packages/astro/e2e/fixtures/prefetch/src/pages/index.astro b/packages/astro/e2e/fixtures/prefetch/src/pages/index.astro index 63a30031ea8a..eb6cddf94e36 100644 --- a/packages/astro/e2e/fixtures/prefetch/src/pages/index.astro +++ b/packages/astro/e2e/fixtures/prefetch/src/pages/index.astro @@ -27,7 +27,7 @@ // @ts-nocheck import { prefetch } from 'astro:prefetch' document.getElementById('prefetch-manual').addEventListener('click', () => { - prefetch('/prefetch-manual', { with: 'link' }) + prefetch('/prefetch-manual') }) diff --git a/packages/astro/src/content/data-store.ts b/packages/astro/src/content/data-store.ts index 82875b1ecdd2..57df3d521596 100644 --- a/packages/astro/src/content/data-store.ts +++ b/packages/astro/src/content/data-store.ts @@ -34,8 +34,6 @@ export interface DataEntry = Record; - /** @deprecated */ - legacyId?: string; } /** diff --git a/packages/astro/src/content/mutable-data-store.ts b/packages/astro/src/content/mutable-data-store.ts index b17960a00c7a..2dd68eb49bcb 100644 --- a/packages/astro/src/content/mutable-data-store.ts +++ b/packages/astro/src/content/mutable-data-store.ts @@ -291,17 +291,7 @@ export default new Map([\n${lines.join(',\n')}]); entries: () => this.entries(collectionName), values: () => this.values(collectionName), keys: () => this.keys(collectionName), - set: ({ - id: key, - data, - body, - filePath, - deferredRender, - digest, - rendered, - assetImports, - legacyId, - }) => { + set: ({ id: key, data, body, filePath, deferredRender, digest, rendered, assetImports }) => { if (!key) { throw new Error(`ID must be a non-empty string`); } @@ -348,9 +338,6 @@ export default new Map([\n${lines.join(',\n')}]); if (rendered) { entry.rendered = rendered; } - if (legacyId) { - entry.legacyId = legacyId; - } if (deferredRender) { entry.deferredRender = deferredRender; if (filePath) { diff --git a/packages/astro/src/core/app/index.ts b/packages/astro/src/core/app/index.ts index bd0ca485079c..122868affe9f 100644 --- a/packages/astro/src/core/app/index.ts +++ b/packages/astro/src/core/app/index.ts @@ -320,14 +320,18 @@ export class App { return pathname; } - async render(request: Request, renderOptions?: RenderOptions): Promise { - let routeData: RouteData | undefined; - let locals: object | undefined; - let clientAddress: string | undefined; - let addCookieHeader: boolean | undefined; + async render( + request: Request, + { + addCookieHeader, + clientAddress = Reflect.get(request, clientAddressSymbol), + locals, + prerenderedErrorPageFetch = fetch, + routeData, + }: RenderOptions = {}, + ): Promise { const url = new URL(request.url); const redirect = this.#redirectTrailingSlash(url.pathname); - const prerenderedErrorPageFetch = renderOptions?.prerenderedErrorPageFetch ?? fetch; if (redirect !== url.pathname) { const status = request.method === 'GET' ? 301 : 308; @@ -347,11 +351,6 @@ export class App { ); } - addCookieHeader = renderOptions?.addCookieHeader; - clientAddress = renderOptions?.clientAddress ?? Reflect.get(request, clientAddressSymbol); - routeData = renderOptions?.routeData; - locals = renderOptions?.locals; - if (routeData) { this.#logger.debug( 'router', diff --git a/packages/astro/src/core/app/node.ts b/packages/astro/src/core/app/node.ts index 78e0a95f4089..bfc2a5da74af 100644 --- a/packages/astro/src/core/app/node.ts +++ b/packages/astro/src/core/app/node.ts @@ -2,7 +2,6 @@ import fs from 'node:fs'; import type { IncomingMessage, ServerResponse } from 'node:http'; import { Http2ServerResponse } from 'node:http2'; import type { Socket } from 'node:net'; -import type { RouteData } from '../../types/public/internal.js'; import { clientAddressSymbol, nodeRequestAbortControllerCleanupSymbol } from '../constants.js'; import { deserializeManifest } from './common.js'; import { createOutgoingHttpHeaders } from './createOutgoingHttpHeaders.js'; @@ -33,22 +32,12 @@ export class NodeApp extends App { } return super.match(req, allowPrerenderedRoutes); } - render(request: NodeRequest | Request, options?: RenderOptions): Promise; - /** - * @deprecated Instead of passing `RouteData` and locals individually, pass an object with `routeData` and `locals` properties. - * See https://github.com/withastro/astro/pull/9199 for more information. - */ - render(request: NodeRequest | Request, routeData?: RouteData, locals?: object): Promise; - render( - req: NodeRequest | Request, - routeDataOrOptions?: RouteData | RenderOptions, - maybeLocals?: object, - ) { - if (!(req instanceof Request)) { - req = NodeApp.createRequest(req); + + render(request: NodeRequest | Request, options?: RenderOptions): Promise { + if (!(request instanceof Request)) { + request = NodeApp.createRequest(request); } - // @ts-expect-error The call would have succeeded against the implementation, but implementation signatures of overloads are not externally visible. - return super.render(req, routeDataOrOptions, maybeLocals); + return super.render(request, options); } /** diff --git a/packages/astro/src/prefetch/index.ts b/packages/astro/src/prefetch/index.ts index 34d3b5363998..6dc003221159 100644 --- a/packages/astro/src/prefetch/index.ts +++ b/packages/astro/src/prefetch/index.ts @@ -186,16 +186,6 @@ function initLoadStrategy() { } export interface PrefetchOptions { - /** - * How the prefetch should prioritize the URL. (default `'link'`) - * - `'link'`: use ``. - * - `'fetch'`: use `fetch()`. - * - * @deprecated It is recommended to not use this option, and let prefetch use `'link'` whenever it's supported, - * or otherwise fall back to `'fetch'`. `'link'` works better if the URL doesn't set an appropriate cache header, - * as the browser will continue to cache it as long as it's used subsequently. - */ - with?: 'link' | 'fetch'; /** * Should prefetch even on data saver mode or slow connection. (default `false`) */ @@ -236,10 +226,7 @@ export function prefetch(url: string, opts?: PrefetchOptions) { appendSpeculationRules(url, opts?.eagerness ?? 'immediate'); } // Prefetch with link if supported - else if ( - document.createElement('link').relList?.supports?.('prefetch') && - opts?.with !== 'fetch' - ) { + else if (document.createElement('link').relList?.supports?.('prefetch')) { debug?.(`[astro] Prefetching ${url} with `); const link = document.createElement('link'); link.rel = 'prefetch';