summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Erika <3019731+Princesseuh@users.noreply.github.com> 2023-08-02 20:28:58 +0200
committerGravatar Emanuele Stoppa <my.burning@gmail.com> 2023-08-08 11:02:51 +0100
commit7511a4980fd36536464c317de33a5190427f430a (patch)
treefbb3a3169a88fa32506140f29e786f82cffbbe4e
parent997a0db8a4e3851edd69384cf5eadbb969e1d547 (diff)
downloadastro-7511a4980fd36536464c317de33a5190427f430a.tar.gz
astro-7511a4980fd36536464c317de33a5190427f430a.tar.zst
astro-7511a4980fd36536464c317de33a5190427f430a.zip
feat: add noop service and make integrations that needs it use it (#7903)
Co-authored-by: Nate Moore <natemoo-re@users.noreply.github.com>
-rw-r--r--.changeset/heavy-walls-arrive.md8
-rw-r--r--packages/astro/package.json1
-rw-r--r--packages/astro/src/assets/services/noop.ts17
-rw-r--r--packages/astro/src/integrations/astroFeaturesValidation.ts11
-rw-r--r--packages/astro/src/integrations/index.ts13
5 files changed, 41 insertions, 9 deletions
diff --git a/.changeset/heavy-walls-arrive.md b/.changeset/heavy-walls-arrive.md
new file mode 100644
index 000000000..68f64dacb
--- /dev/null
+++ b/.changeset/heavy-walls-arrive.md
@@ -0,0 +1,8 @@
+---
+'@astrojs/cloudflare': major
+'@astrojs/netlify': major
+'@astrojs/vercel': major
+'astro': major
+---
+
+When using an adapter that supports neither Squoosh or Sharp, Astro will now automatically use an image service that does not support processing, but still provides the other benefits of `astro:assets` such as enforcing `alt`, no CLS etc to users
diff --git a/packages/astro/package.json b/packages/astro/package.json
index 9618d49e4..e66ef5802 100644
--- a/packages/astro/package.json
+++ b/packages/astro/package.json
@@ -56,6 +56,7 @@
"./assets/image-endpoint": "./dist/assets/image-endpoint.js",
"./assets/services/sharp": "./dist/assets/services/sharp.js",
"./assets/services/squoosh": "./dist/assets/services/squoosh.js",
+ "./assets/services/noop": "./dist/assets/services/noop.js",
"./content/runtime": "./dist/content/runtime.js",
"./content/runtime-assets": "./dist/content/runtime-assets.js",
"./debug": "./components/Debug.astro",
diff --git a/packages/astro/src/assets/services/noop.ts b/packages/astro/src/assets/services/noop.ts
new file mode 100644
index 000000000..d57ffeb27
--- /dev/null
+++ b/packages/astro/src/assets/services/noop.ts
@@ -0,0 +1,17 @@
+import { baseService, type LocalImageService } from './service.js';
+
+// Empty service used for platforms that neither support Squoosh or Sharp.
+const noopService: LocalImageService = {
+ validateOptions: baseService.validateOptions,
+ getURL: baseService.getURL,
+ parseURL: baseService.parseURL,
+ getHTMLAttributes: baseService.getHTMLAttributes,
+ async transform(inputBuffer, transformOptions) {
+ return {
+ data: inputBuffer,
+ format: transformOptions.format,
+ };
+ },
+};
+
+export default noopService;
diff --git a/packages/astro/src/integrations/astroFeaturesValidation.ts b/packages/astro/src/integrations/astroFeaturesValidation.ts
index 6b92813c5..c494b35f4 100644
--- a/packages/astro/src/integrations/astroFeaturesValidation.ts
+++ b/packages/astro/src/integrations/astroFeaturesValidation.ts
@@ -4,8 +4,7 @@ import type {
AstroFeatureMap,
SupportsKind,
} from '../@types/astro';
-import { error, type LogOptions, warn } from '../core/logger/core.js';
-import { bold } from 'kleur/colors';
+import { error, warn, type LogOptions } from '../core/logger/core.js';
const STABLE = 'stable';
const DEPRECATED = 'deprecated';
@@ -140,9 +139,7 @@ function validateAssetsFeature(
error(
logging,
'astro',
- `The currently selected adapter \`${adapterName}\` is not compatible with the service "Sharp". ${bold(
- 'Your project will NOT be able to build.'
- )}`
+ `The currently selected adapter \`${adapterName}\` is not compatible with the image service "Sharp".`
);
return false;
}
@@ -151,9 +148,7 @@ function validateAssetsFeature(
error(
logging,
'astro',
- `The currently selected adapter \`${adapterName}\` is not compatible with the service "Squoosh". ${bold(
- 'Your project will NOT be able to build.'
- )}`
+ `The currently selected adapter \`${adapterName}\` is not compatible with the image service "Squoosh".`
);
return false;
}
diff --git a/packages/astro/src/integrations/index.ts b/packages/astro/src/integrations/index.ts
index 75971fa53..71c5a5e63 100644
--- a/packages/astro/src/integrations/index.ts
+++ b/packages/astro/src/integrations/index.ts
@@ -18,7 +18,7 @@ import type { SerializedSSRManifest } from '../core/app/types';
import type { PageBuildData } from '../core/build/types';
import { buildClientDirectiveEntrypoint } from '../core/client-directive/index.js';
import { mergeConfig } from '../core/config/index.js';
-import { info, warn, error, type LogOptions, AstroIntegrationLogger } from '../core/logger/core.js';
+import { AstroIntegrationLogger, error, info, warn, type LogOptions } from '../core/logger/core.js';
import { isServerLikeOutput } from '../prerender/utils.js';
import { validateSupportedFeatures } from './astroFeaturesValidation.js';
@@ -221,6 +221,17 @@ export async function runHookConfigDone({
);
}
}
+ if (!validationResult.assets) {
+ info(
+ logging,
+ 'astro',
+ `The selected adapter ${adapter.name} does not support Sharp or Squoosh for image processing. To ensure your project is still able to build, image processing has been disabled.`
+ );
+ settings.config.image.service = {
+ entrypoint: 'astro/assets/services/noop',
+ config: {},
+ };
+ }
}
settings.adapter = adapter;
},