From e6b5306a7de779ce495d0ff076d302de0aa57eaf Mon Sep 17 00:00:00 2001 From: Chris Swithinbank Date: Wed, 7 Feb 2024 14:58:11 +0100 Subject: [PATCH] Move `astro:content` types declaration to manual ambient module (#10013) * Move `astro:content` types declaration to manual ambient module * Add changeset --------- Co-authored-by: bluwy --- .changeset/slimy-ravens-stare.md | 5 ++ packages/astro/client.d.ts | 5 +- packages/astro/src/virtual-modules/content.ts | 76 ------------------- packages/astro/types/content.d.ts | 75 ++++++++++++++++++ 4 files changed, 81 insertions(+), 80 deletions(-) create mode 100644 .changeset/slimy-ravens-stare.md delete mode 100644 packages/astro/src/virtual-modules/content.ts create mode 100644 packages/astro/types/content.d.ts diff --git a/.changeset/slimy-ravens-stare.md b/.changeset/slimy-ravens-stare.md new file mode 100644 index 000000000000..b1655b200720 --- /dev/null +++ b/.changeset/slimy-ravens-stare.md @@ -0,0 +1,5 @@ +--- +"astro": patch +--- + +Fixes a regression in content collection types diff --git a/packages/astro/client.d.ts b/packages/astro/client.d.ts index 37df3b5d372e..e3a19add3cfd 100644 --- a/packages/astro/client.d.ts +++ b/packages/astro/client.d.ts @@ -1,4 +1,5 @@ /// +/// // eslint-disable-next-line @typescript-eslint/no-namespace declare namespace App { @@ -160,10 +161,6 @@ declare module 'astro:components' { export * from 'astro/components'; } -declare module 'astro:content' { - export * from 'astro/virtual-modules/content.js'; -} - type MD = import('./dist/@types/astro.js').MarkdownInstance>; interface ExportedMarkdownModuleEntities { frontmatter: MD['frontmatter']; diff --git a/packages/astro/src/virtual-modules/content.ts b/packages/astro/src/virtual-modules/content.ts deleted file mode 100644 index 8424f3b06ca2..000000000000 --- a/packages/astro/src/virtual-modules/content.ts +++ /dev/null @@ -1,76 +0,0 @@ -import { defineCollection as _defineCollection } from '../content/runtime.js'; -import { z } from 'zod'; - -export { z }; - -// This needs to be in sync with ImageMetadata -export type ImageFunction = () => z.ZodObject<{ - src: z.ZodString; - width: z.ZodNumber; - height: z.ZodNumber; - format: z.ZodUnion< - [ - z.ZodLiteral<'png'>, - z.ZodLiteral<'jpg'>, - z.ZodLiteral<'jpeg'>, - z.ZodLiteral<'tiff'>, - z.ZodLiteral<'webp'>, - z.ZodLiteral<'gif'>, - z.ZodLiteral<'svg'>, - z.ZodLiteral<'avif'>, - ] - >; -}>; - -type BaseSchemaWithoutEffects = - | z.AnyZodObject - | z.ZodUnion<[BaseSchemaWithoutEffects, ...BaseSchemaWithoutEffects[]]> - | z.ZodDiscriminatedUnion - | z.ZodIntersection; - -type BaseSchema = BaseSchemaWithoutEffects | z.ZodEffects; - -export type SchemaContext = { image: ImageFunction }; - -type DataCollectionConfig = { - type: 'data'; - schema?: S | ((context: SchemaContext) => S); -}; - -type ContentCollectionConfig = { - type?: 'content'; - schema?: S | ((context: SchemaContext) => S); -}; - -type CollectionConfig = ContentCollectionConfig | DataCollectionConfig; - -export function defineCollection( - input: CollectionConfig -): CollectionConfig { - return _defineCollection(input); -} - -const noop: (...args: any[]) => any = () => {}; -/** Run `astro sync` to generate high fidelity types */ -export const getEntryBySlug = noop; -/** Run `astro sync` to generate high fidelity types */ -export const getDataEntryById = noop; -/** Run `astro sync` to generate high fidelity types */ -export const getCollection = noop; -/** Run `astro sync` to generate high fidelity types */ -export const getEntry = noop; -/** Run `astro sync` to generate high fidelity types */ -export const getEntries = noop; -/** Run `astro sync` to generate high fidelity types */ -export const reference = noop; -/** Run `astro sync` to generate high fidelity types */ -export type CollectionKey = any; -/** Run `astro sync` to generate high fidelity types */ -// eslint-disable-next-line @typescript-eslint/no-unused-vars -export type CollectionEntry = any; -/** Run `astro sync` to generate high fidelity types */ -export type ContentCollectionKey = any; -/** Run `astro sync` to generate high fidelity types */ -export type DataCollectionKey = any; -/** Run `astro sync` to generate high fidelity types */ -export type ContentConfig = any; diff --git a/packages/astro/types/content.d.ts b/packages/astro/types/content.d.ts new file mode 100644 index 000000000000..45f0d4af79b2 --- /dev/null +++ b/packages/astro/types/content.d.ts @@ -0,0 +1,75 @@ +declare module 'astro:content' { + export { z } from 'astro/zod'; + + // This needs to be in sync with ImageMetadata + export type ImageFunction = () => import('astro/zod').ZodObject<{ + src: import('astro/zod').ZodString; + width: import('astro/zod').ZodNumber; + height: import('astro/zod').ZodNumber; + format: import('astro/zod').ZodUnion< + [ + import('astro/zod').ZodLiteral<'png'>, + import('astro/zod').ZodLiteral<'jpg'>, + import('astro/zod').ZodLiteral<'jpeg'>, + import('astro/zod').ZodLiteral<'tiff'>, + import('astro/zod').ZodLiteral<'webp'>, + import('astro/zod').ZodLiteral<'gif'>, + import('astro/zod').ZodLiteral<'svg'>, + import('astro/zod').ZodLiteral<'avif'>, + ] + >; + }>; + + type BaseSchemaWithoutEffects = + | import('astro/zod').AnyZodObject + | import('astro/zod').ZodUnion<[BaseSchemaWithoutEffects, ...BaseSchemaWithoutEffects[]]> + | import('astro/zod').ZodDiscriminatedUnion + | import('astro/zod').ZodIntersection; + + type BaseSchema = + | BaseSchemaWithoutEffects + | import('astro/zod').ZodEffects; + + export type SchemaContext = { image: ImageFunction }; + + type DataCollectionConfig = { + type: 'data'; + schema?: S | ((context: SchemaContext) => S); + }; + + type ContentCollectionConfig = { + type?: 'content'; + schema?: S | ((context: SchemaContext) => S); + }; + + type CollectionConfig = + | ContentCollectionConfig + | DataCollectionConfig; + + export function defineCollection( + input: CollectionConfig + ): CollectionConfig; + + /** Run `astro sync` to generate high fidelity types */ + export const getEntryBySlug: (...args: any[]) => any; + /** Run `astro sync` to generate high fidelity types */ + export const getDataEntryById: (...args: any[]) => any; + /** Run `astro sync` to generate high fidelity types */ + export const getCollection: (...args: any[]) => any; + /** Run `astro sync` to generate high fidelity types */ + export const getEntry: (...args: any[]) => any; + /** Run `astro sync` to generate high fidelity types */ + export const getEntries: (...args: any[]) => any; + /** Run `astro sync` to generate high fidelity types */ + export const reference: (...args: any[]) => any; + /** Run `astro sync` to generate high fidelity types */ + export type CollectionKey = any; + /** Run `astro sync` to generate high fidelity types */ + export type CollectionEntry = any; + /** Run `astro sync` to generate high fidelity types */ + export type ContentCollectionKey = any; + /** Run `astro sync` to generate high fidelity types */ + export type DataCollectionKey = any; + /** Run `astro sync` to generate high fidelity types */ + export type ContentConfig = any; +}