diff options
22 files changed, 96 insertions, 77 deletions
diff --git a/packages/integrations/cloudflare/CHANGELOG.md b/packages/integrations/cloudflare/CHANGELOG.md index 368a78a11..f9443cd25 100644 --- a/packages/integrations/cloudflare/CHANGELOG.md +++ b/packages/integrations/cloudflare/CHANGELOG.md @@ -1,5 +1,53 @@ # @astrojs/cloudflare +## 12.0.0-beta.0 + +### Major Changes + +- [#367](https://github.com/withastro/adapters/pull/367) [`e02b54a`](https://github.com/withastro/adapters/commit/e02b54ad864ea25cb972f6196496b5aee36a47a3) Thanks [@alexanderniebuhr](https://github.com/alexanderniebuhr)! - Removed support for the Squoosh image service. As the underlying library `libsquoosh` is no longer maintained, and the image service sees very little usage we have decided to remove it from Astro. + + Our recommendation is to use the base Sharp image service, which is more powerful, faster, and more actively maintained. + + ```diff + - import { squooshImageService } from "astro/config"; + import { defineConfig } from "astro/config"; + + export default defineConfig({ + - image: { + - service: squooshImageService() + - } + }); + ``` + + If you are using this service, and cannot migrate to the base Sharp image service, a third-party extraction of the previous service is available here: https://github.com/Princesseuh/astro-image-service-squoosh + +- [#367](https://github.com/withastro/adapters/pull/367) [`e02b54a`](https://github.com/withastro/adapters/commit/e02b54ad864ea25cb972f6196496b5aee36a47a3) Thanks [@alexanderniebuhr](https://github.com/alexanderniebuhr)! - Deprecates the `functionPerRoute` option + + This option is now deprecated, and will be removed entirely in Astro v5.0. We suggest removing this option from your configuration as soon as you are able to: + + ```diff + import { defineConfig } from 'astro/config'; + import vercel from '@astrojs/vercel/serverless'; + + export default defineConfig({ + // ... + output: 'server', + adapter: vercel({ + - functionPerRoute: true, + }), + }); + ``` + +- [#375](https://github.com/withastro/adapters/pull/375) [`e7881f7`](https://github.com/withastro/adapters/commit/e7881f7928c6ca62d43c763033f9ed065a907f3b) Thanks [@Princesseuh](https://github.com/Princesseuh)! - Updates internal code to works with Astro 5 changes to hybrid rendering. No changes are necessary to your project, apart from using Astro 5 + +- [#397](https://github.com/withastro/adapters/pull/397) [`776a266`](https://github.com/withastro/adapters/commit/776a26670cf483e37ec0e6eba27a0bde09db0146) Thanks [@Princesseuh](https://github.com/Princesseuh)! - Welcome to the Astro 5 beta! This release has no changes from the latest alpha of this package, but it does bring us one step closer to the final, stable release. + + Starting from this release, no breaking changes will be introduced unless absolutely necessary. + + To learn how to upgrade, check out the [Astro v5.0 upgrade guide in our beta docs site](https://5-0-0-beta.docs.astro.build/en/guides/upgrade-to/v5/). + +- [#392](https://github.com/withastro/adapters/pull/392) [`3a49eb7`](https://github.com/withastro/adapters/commit/3a49eb7802c44212ccfab06034b7dc5f2b060e94) Thanks [@Princesseuh](https://github.com/Princesseuh)! - Updates internal code for Astro 5 changes. No changes is required to your project, apart from using Astro 5 + ## 11.2.0 ### Minor Changes diff --git a/packages/integrations/cloudflare/package.json b/packages/integrations/cloudflare/package.json index f5f56e07d..5cd4b6564 100644 --- a/packages/integrations/cloudflare/package.json +++ b/packages/integrations/cloudflare/package.json @@ -1,7 +1,7 @@ { "name": "@astrojs/cloudflare", "description": "Deploy your site to Cloudflare Workers/Pages", - "version": "11.2.0", + "version": "12.0.0-beta.0", "type": "module", "types": "./dist/index.d.ts", "author": "withastro", @@ -29,9 +29,9 @@ }, "dependencies": { "@astrojs/internal-helpers": "0.4.1", - "@astrojs/underscore-redirects": "^0.3.4", + "@astrojs/underscore-redirects": "^0.4.0-alpha.0", "@cloudflare/workers-types": "^4.20241022.0", - "esbuild": "^0.21.5", + "esbuild": "^0.23.1", "estree-walker": "^3.0.3", "magic-string": "^0.30.12", "miniflare": "^3.20241022.0", @@ -40,11 +40,11 @@ "@inox-tools/astro-when": "^0.2.4" }, "peerDependencies": { - "astro": "^4.10.3" + "astro": "^5.0.0-alpha.8" }, "devDependencies": { "@astrojs/test-utils": "workspace:*", - "astro": "^4.16.8", + "astro": "^5.0.0-alpha.8", "astro-scripts": "workspace:*", "cheerio": "1.0.0", "execa": "^8.0.1", diff --git a/packages/integrations/cloudflare/src/entrypoints/image-service.ts b/packages/integrations/cloudflare/src/entrypoints/image-service.ts index 08a638d97..0c573510f 100644 --- a/packages/integrations/cloudflare/src/entrypoints/image-service.ts +++ b/packages/integrations/cloudflare/src/entrypoints/image-service.ts @@ -25,7 +25,6 @@ const service: ExternalImageService = { } const imageEndpoint = joinPaths( - // @ts-expect-error - Property 'env' does not exist on type 'ImportMeta'.ts(2339) import.meta.env.BASE_URL, '/cdn-cgi/image', resizingParams.join(','), diff --git a/packages/integrations/cloudflare/src/entrypoints/middleware.ts b/packages/integrations/cloudflare/src/entrypoints/middleware.ts index 60a940855..b5073cd0e 100644 --- a/packages/integrations/cloudflare/src/entrypoints/middleware.ts +++ b/packages/integrations/cloudflare/src/entrypoints/middleware.ts @@ -8,7 +8,9 @@ const middlewares: Record<When, MiddlewareHandler> = { [When.DevServer]: (_, next) => next(), [When.Server]: (_, next) => next(), [When.Prerender]: (ctx, next) => { + // @ts-expect-error if (ctx.locals.runtime === undefined) { + // @ts-expect-error ctx.locals.runtime = { env: process.env, }; diff --git a/packages/integrations/cloudflare/src/index.ts b/packages/integrations/cloudflare/src/index.ts index 4facef327..0acd86fd8 100644 --- a/packages/integrations/cloudflare/src/index.ts +++ b/packages/integrations/cloudflare/src/index.ts @@ -1,4 +1,4 @@ -import type { AstroConfig, AstroIntegration, RouteData } from 'astro'; +import type { AstroConfig, AstroIntegration, IntegrationRouteData } from 'astro'; import type { PluginOption } from 'vite'; import { createReadStream } from 'node:fs'; @@ -81,8 +81,8 @@ function wrapWithSlashes(path: string): string { function setProcessEnv(config: AstroConfig, env: Record<string, unknown>) { const getEnv = createGetEnv(env); - if (config.experimental.env?.schema) { - for (const key of Object.keys(config.experimental.env.schema)) { + if (config.env?.schema) { + for (const key of Object.keys(config.env.schema)) { const value = getEnv(key); if (value !== undefined) { process.env[key] = value; @@ -151,10 +151,10 @@ export default function createIntegration(args?: Options): AstroIntegration { order: 'pre', }); }, - 'astro:config:done': ({ setAdapter, config }) => { - if (config.output === 'static') { - throw new AstroError( - '[@astrojs/cloudflare] `output: "server"` or `output: "hybrid"` is required to use this adapter. Otherwise, this adapter is not necessary to deploy a static site to Cloudflare.' + 'astro:config:done': ({ setAdapter, config, buildOutput, logger }) => { + if (buildOutput === 'static') { + logger.warn( + '[@astrojs/cloudflare] This adapter is intended to be used with server rendered pages, which this project does not contain any of. As such, this adapter is unnecessary.' ); } @@ -165,19 +165,15 @@ export default function createIntegration(args?: Options): AstroIntegration { serverEntrypoint: '@astrojs/cloudflare/entrypoints/server.js', exports: ['default'], adapterFeatures: { - functionPerRoute: false, edgeMiddleware: false, + buildOutput: 'server', }, supportedAstroFeatures: { serverOutput: 'stable', hybridOutput: 'stable', staticOutput: 'unsupported', i18nDomains: 'experimental', - assets: { - supportKind: 'stable', - isSharpCompatible: false, - isSquooshCompatible: false, - }, + sharpImageService: 'limited', envGetSecret: 'experimental', }, }); @@ -309,7 +305,7 @@ export default function createIntegration(args?: Options): AstroIntegration { redirectsExists = false; } - const redirects: RouteData['segments'][] = []; + const redirects: IntegrationRouteData['segments'][] = []; if (redirectsExists) { const rl = createInterface({ input: createReadStream(new URL('./_redirects', _config.outDir)), @@ -356,7 +352,7 @@ export default function createIntegration(args?: Options): AstroIntegration { ); } - const redirectRoutes: [RouteData, string][] = []; + const redirectRoutes: [IntegrationRouteData, string][] = []; for (const route of routes) { if (route.type === 'redirect') redirectRoutes.push([route, '']); } diff --git a/packages/integrations/cloudflare/src/utils/generate-routes-json.ts b/packages/integrations/cloudflare/src/utils/generate-routes-json.ts index fee44638a..3d7f8a643 100644 --- a/packages/integrations/cloudflare/src/utils/generate-routes-json.ts +++ b/packages/integrations/cloudflare/src/utils/generate-routes-json.ts @@ -1,4 +1,4 @@ -import type { AstroConfig, AstroIntegrationLogger, RouteData, RoutePart } from 'astro'; +import type { AstroConfig, AstroIntegrationLogger, IntegrationRouteData, RoutePart } from 'astro'; import { existsSync } from 'node:fs'; import { writeFile } from 'node:fs/promises'; @@ -63,7 +63,7 @@ async function writeRoutesFileToOutDir( } } -function segmentsToCfSyntax(segments: RouteData['segments'], _config: AstroConfig) { +function segmentsToCfSyntax(segments: IntegrationRouteData['segments'], _config: AstroConfig) { const pathSegments = []; if (removeLeadingForwardSlash(removeTrailingForwardSlash(_config.base)).length > 0) { pathSegments.push(removeLeadingForwardSlash(removeTrailingForwardSlash(_config.base))); @@ -163,11 +163,11 @@ class PathTrie { export async function createRoutesFile( _config: AstroConfig, logger: AstroIntegrationLogger, - routes: RouteData[], + routes: IntegrationRouteData[], pages: { pathname: string; }[], - redirects: RouteData['segments'][], + redirects: IntegrationRouteData['segments'][], includeExtends: | { pattern: string; diff --git a/packages/integrations/cloudflare/src/utils/image-config.ts b/packages/integrations/cloudflare/src/utils/image-config.ts index 21d9ec733..58e0f76a0 100644 --- a/packages/integrations/cloudflare/src/utils/image-config.ts +++ b/packages/integrations/cloudflare/src/utils/image-config.ts @@ -24,17 +24,16 @@ export function setImageConfig( return { ...config, service: sharpImageService(), - endpoint: command === 'dev' ? undefined : '@astrojs/cloudflare/image-endpoint', + endpoint: { + entrypoint: command === 'dev' ? undefined : '@astrojs/cloudflare/image-endpoint', + }, }; case 'custom': return { ...config }; default: - if ( - config.service.entrypoint === 'astro/assets/services/sharp' || - config.service.entrypoint === 'astro/assets/services/squoosh' - ) { + if (config.service.entrypoint === 'astro/assets/services/sharp') { logger.warn( `The current configuration does not support image optimization. To allow your project to build with the original, unoptimized images, the image service has been automatically switched to the 'noop' option. See https://docs.astro.build/en/reference/configuration-reference/#imageservice` ); diff --git a/packages/integrations/cloudflare/test/fixtures/astro-dev-platform/package.json b/packages/integrations/cloudflare/test/fixtures/astro-dev-platform/package.json index 1d43dd35a..12ae29808 100644 --- a/packages/integrations/cloudflare/test/fixtures/astro-dev-platform/package.json +++ b/packages/integrations/cloudflare/test/fixtures/astro-dev-platform/package.json @@ -4,7 +4,7 @@ "private": true, "dependencies": { "@astrojs/cloudflare": "workspace:*", - "astro": "^4.16.8" + "astro": "^5.0.0-alpha.8" }, "devDependencies": { "wrangler": "^3.84.0" diff --git a/packages/integrations/cloudflare/test/fixtures/astro-env/astro.config.ts b/packages/integrations/cloudflare/test/fixtures/astro-env/astro.config.ts index 8017c0b6d..b7d556b3b 100644 --- a/packages/integrations/cloudflare/test/fixtures/astro-env/astro.config.ts +++ b/packages/integrations/cloudflare/test/fixtures/astro-env/astro.config.ts @@ -2,13 +2,11 @@ import cloudflare from '@astrojs/cloudflare'; import { defineConfig, envField } from 'astro/config'; export default defineConfig({ - experimental: { - env: { - schema: { - API_URL: envField.string({ context: 'client', access: 'public', optional: true }), - PORT: envField.number({ context: 'server', access: 'public', default: 4321 }), - API_SECRET: envField.string({ context: 'server', access: 'secret' }), - }, + env: { + schema: { + API_URL: envField.string({ context: 'client', access: 'public', optional: true }), + PORT: envField.number({ context: 'server', access: 'public', default: 4321 }), + API_SECRET: envField.string({ context: 'server', access: 'secret' }), }, }, adapter: cloudflare(), diff --git a/packages/integrations/cloudflare/test/fixtures/astro-env/package.json b/packages/integrations/cloudflare/test/fixtures/astro-env/package.json index dbdf4d129..e4e8e0fa9 100644 --- a/packages/integrations/cloudflare/test/fixtures/astro-env/package.json +++ b/packages/integrations/cloudflare/test/fixtures/astro-env/package.json @@ -4,7 +4,7 @@ "private": true, "dependencies": { "@astrojs/cloudflare": "workspace:*", - "astro": "^4.16.8" + "astro": "^5.0.0-alpha.8" }, "devDependencies": { "wrangler": "^3.84.0" diff --git a/packages/integrations/cloudflare/test/fixtures/compile-image-service/astro.config.mjs b/packages/integrations/cloudflare/test/fixtures/compile-image-service/astro.config.mjs index 7c569595e..7c98bbb98 100644 --- a/packages/integrations/cloudflare/test/fixtures/compile-image-service/astro.config.mjs +++ b/packages/integrations/cloudflare/test/fixtures/compile-image-service/astro.config.mjs @@ -5,5 +5,5 @@ export default defineConfig({ adapter: cloudflare({ imageService: 'compile', }), - output: 'hybrid', + output: 'static', }); diff --git a/packages/integrations/cloudflare/test/fixtures/compile-image-service/package.json b/packages/integrations/cloudflare/test/fixtures/compile-image-service/package.json index 64a281c14..08a8fbb11 100644 --- a/packages/integrations/cloudflare/test/fixtures/compile-image-service/package.json +++ b/packages/integrations/cloudflare/test/fixtures/compile-image-service/package.json @@ -4,6 +4,6 @@ "private": true, "dependencies": { "@astrojs/cloudflare": "workspace:*", - "astro": "^4.16.8" + "astro": "^5.0.0-alpha.8" } } diff --git a/packages/integrations/cloudflare/test/fixtures/external-image-service/package.json b/packages/integrations/cloudflare/test/fixtures/external-image-service/package.json index 1fb4f7242..d536aee0a 100644 --- a/packages/integrations/cloudflare/test/fixtures/external-image-service/package.json +++ b/packages/integrations/cloudflare/test/fixtures/external-image-service/package.json @@ -4,6 +4,6 @@ "private": true, "dependencies": { "@astrojs/cloudflare": "workspace:*", - "astro": "^4.16.8" + "astro": "^5.0.0-alpha.8" } } diff --git a/packages/integrations/cloudflare/test/fixtures/module-loader/astro.config.mjs b/packages/integrations/cloudflare/test/fixtures/module-loader/astro.config.mjs index dd2af8bc2..38365a374 100644 --- a/packages/integrations/cloudflare/test/fixtures/module-loader/astro.config.mjs +++ b/packages/integrations/cloudflare/test/fixtures/module-loader/astro.config.mjs @@ -3,5 +3,5 @@ import { defineConfig } from 'astro/config'; export default defineConfig({ adapter: cloudflare({}), - output: 'hybrid' + output: 'static' }); diff --git a/packages/integrations/cloudflare/test/fixtures/module-loader/package.json b/packages/integrations/cloudflare/test/fixtures/module-loader/package.json index 2d6e56598..03790d2ee 100644 --- a/packages/integrations/cloudflare/test/fixtures/module-loader/package.json +++ b/packages/integrations/cloudflare/test/fixtures/module-loader/package.json @@ -4,6 +4,6 @@ "private": true, "dependencies": { "@astrojs/cloudflare": "workspace:*", - "astro": "^4.16.8" + "astro": "^5.0.0-alpha.8" } } diff --git a/packages/integrations/cloudflare/test/fixtures/no-output/package.json b/packages/integrations/cloudflare/test/fixtures/no-output/package.json index 72ca4db18..36c5019ef 100644 --- a/packages/integrations/cloudflare/test/fixtures/no-output/package.json +++ b/packages/integrations/cloudflare/test/fixtures/no-output/package.json @@ -4,6 +4,6 @@ "private": true, "dependencies": { "@astrojs/cloudflare": "workspace:*", - "astro": "^4.16.8" + "astro": "^5.0.0-alpha.8" } } diff --git a/packages/integrations/cloudflare/test/fixtures/routes-json/astro.config.mjs b/packages/integrations/cloudflare/test/fixtures/routes-json/astro.config.mjs index 6fa5ec5d3..3aaa37d9a 100644 --- a/packages/integrations/cloudflare/test/fixtures/routes-json/astro.config.mjs +++ b/packages/integrations/cloudflare/test/fixtures/routes-json/astro.config.mjs @@ -1,7 +1,7 @@ import { defineConfig } from 'astro/config'; export default defineConfig({ - output: 'hybrid', + output: 'static', redirects: { '/a/redirect': '/', }, diff --git a/packages/integrations/cloudflare/test/fixtures/routes-json/package.json b/packages/integrations/cloudflare/test/fixtures/routes-json/package.json index 90407d19e..eeb5bfbec 100644 --- a/packages/integrations/cloudflare/test/fixtures/routes-json/package.json +++ b/packages/integrations/cloudflare/test/fixtures/routes-json/package.json @@ -4,6 +4,6 @@ "private": true, "dependencies": { "@astrojs/cloudflare": "workspace:*", - "astro": "^4.16.8" + "astro": "^5.0.0-alpha.8" } } diff --git a/packages/integrations/cloudflare/test/fixtures/with-solid-js/package.json b/packages/integrations/cloudflare/test/fixtures/with-solid-js/package.json index 53d01a653..8f3a34596 100644 --- a/packages/integrations/cloudflare/test/fixtures/with-solid-js/package.json +++ b/packages/integrations/cloudflare/test/fixtures/with-solid-js/package.json @@ -5,7 +5,7 @@ "dependencies": { "@astrojs/cloudflare": "workspace:*", "@astrojs/solid-js": "^4.4.2", - "astro": "^4.16.8", + "astro": "^5.0.0-alpha.8", "solid-js": "^1.9.3" } } diff --git a/packages/integrations/cloudflare/test/fixtures/wrangler-preview-platform/package.json b/packages/integrations/cloudflare/test/fixtures/wrangler-preview-platform/package.json index 01713d9ca..a65c1ba46 100644 --- a/packages/integrations/cloudflare/test/fixtures/wrangler-preview-platform/package.json +++ b/packages/integrations/cloudflare/test/fixtures/wrangler-preview-platform/package.json @@ -4,6 +4,6 @@ "private": true, "dependencies": { "@astrojs/cloudflare": "workspace:*", - "astro": "^4.16.8" + "astro": "^5.0.0-alpha.8" } } diff --git a/packages/integrations/cloudflare/test/no-output.test.js b/packages/integrations/cloudflare/test/no-output.test.js deleted file mode 100644 index bf5321491..000000000 --- a/packages/integrations/cloudflare/test/no-output.test.js +++ /dev/null @@ -1,23 +0,0 @@ -import * as assert from 'node:assert/strict'; -import { describe, it } from 'node:test'; -import { fileURLToPath } from 'node:url'; -import { astroCli } from './_test-utils.js'; - -const root = new URL('./fixtures/no-output/', import.meta.url); - -describe('MissingOutputConfig', () => { - it('throws during the build', async () => { - let error = undefined; - try { - await astroCli(fileURLToPath(root), 'build'); - } catch (err) { - error = err; - } - assert.notEqual(error, undefined); - assert.ok( - error.message.includes( - '[@astrojs/cloudflare] `output: "server"` or `output: "hybrid"` is required to use this adapter.' - ) - ); - }); -}); diff --git a/packages/integrations/cloudflare/test/routes-json.test.js b/packages/integrations/cloudflare/test/routes-json.test.js index b7494b1c5..ee788721d 100644 --- a/packages/integrations/cloudflare/test/routes-json.test.js +++ b/packages/integrations/cloudflare/test/routes-json.test.js @@ -23,7 +23,7 @@ describe('_routes.json generation', () => { assert.deepEqual(routes, { version: 1, - include: ['/_image', '/a/*'], + include: ['/a/*', '/_image'], exclude: ['/_astro/*', '/redirectme', '/public.txt', '/a', '/a/redirect', '/404', '/b'], }); }); @@ -71,7 +71,7 @@ describe('_routes.json generation', () => { assert.deepEqual(routes, { version: 1, - include: ['/_image'], + include: [], exclude: [], }); }); @@ -101,7 +101,7 @@ describe('_routes.json generation', () => { assert.deepEqual(routes, { version: 1, - include: ['/_image', '/a/*', '/another'], + include: ['/a/*', '/_image', '/another'], exclude: ['/_astro/*', '/redirectme', '/public.txt', '/a', '/a/redirect', '/404', '/b'], }); }); @@ -131,7 +131,7 @@ describe('_routes.json generation', () => { assert.deepEqual(routes, { version: 1, - include: ['/_image', '/a/*'], + include: ['/a/*', '/_image'], exclude: [ '/_astro/*', '/redirectme', @@ -167,10 +167,10 @@ describe('_routes.json generation', () => { version: 1, include: [ '/', - '/_image', '/dynamicPages/*', '/mixedPages/dynamic', '/mixedPages/subfolder/dynamic', + '/_image', ], exclude: [ '/_astro/*', |