summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Vladislav Mamon <norskeld@gmail.com> 2024-11-01 13:49:55 +0300
committerGravatar GitHub <noreply@github.com> 2024-11-01 11:49:55 +0100
commit1fc83d3ba8315c31b2a3aadc77b20b1615d261a0 (patch)
tree09194ba60b0c3d71c40895e8ee87ca5620324ba8
parent20e5a843c86e9328814615edf3e8a6fb5e4696cc (diff)
downloadastro-1fc83d3ba8315c31b2a3aadc77b20b1615d261a0.tar.gz
astro-1fc83d3ba8315c31b2a3aadc77b20b1615d261a0.tar.zst
astro-1fc83d3ba8315c31b2a3aadc77b20b1615d261a0.zip
fix(assets): fix `getImage` options type (#12349)
-rw-r--r--.changeset/long-monkeys-exercise.md5
-rw-r--r--packages/astro/src/assets/types.ts6
-rw-r--r--packages/astro/src/type-utils.ts5
3 files changed, 13 insertions, 3 deletions
diff --git a/.changeset/long-monkeys-exercise.md b/.changeset/long-monkeys-exercise.md
new file mode 100644
index 000000000..f3f88fa14
--- /dev/null
+++ b/.changeset/long-monkeys-exercise.md
@@ -0,0 +1,5 @@
+---
+'astro': patch
+---
+
+Fixes the `getImage` options type so it properly extends `ImageTransform`
diff --git a/packages/astro/src/assets/types.ts b/packages/astro/src/assets/types.ts
index 6de28d43c..7b6b2893a 100644
--- a/packages/astro/src/assets/types.ts
+++ b/packages/astro/src/assets/types.ts
@@ -1,4 +1,4 @@
-import type { WithRequired } from '../type-utils.js';
+import type { OmitPreservingIndexSignature, Simplify, WithRequired } from '../type-utils.js';
import type { VALID_INPUT_FORMATS, VALID_OUTPUT_FORMATS } from './consts.js';
import type { ImageService } from './services/service.js';
@@ -66,10 +66,10 @@ export type SrcSetValue = UnresolvedSrcSetValue & {
/**
* A yet to be resolved image transform. Used by `getImage`
*/
-export type UnresolvedImageTransform = Omit<ImageTransform, 'src'> & {
+export type UnresolvedImageTransform = Simplify<OmitPreservingIndexSignature<ImageTransform, 'src'> & {
src: ImageMetadata | string | Promise<{ default: ImageMetadata }>;
inferSize?: boolean;
-} & {
+}> & {
[isESMImport]?: never;
};
diff --git a/packages/astro/src/type-utils.ts b/packages/astro/src/type-utils.ts
index daf1052e1..cbb112f79 100644
--- a/packages/astro/src/type-utils.ts
+++ b/packages/astro/src/type-utils.ts
@@ -16,6 +16,11 @@ export type OmitIndexSignature<ObjectType> = {
: KeyType]: ObjectType[KeyType];
};
+// This is an alternative `Omit<T, K>` implementation that _doesn't_ remove the index signature of an object.
+export type OmitPreservingIndexSignature<T, K extends PropertyKey> = {
+ [P in keyof T as Exclude<P, K>]: T[P]
+};
+
// Transform a string into its kebab case equivalent (camelCase -> kebab-case). Useful for CSS-in-JS to CSS.
export type Kebab<T extends string, A extends string = ''> = T extends `${infer F}${infer R}`
? Kebab<R, `${A}${F extends Lowercase<F> ? '' : '-'}${Lowercase<F>}`>