Home / File/ content.config.ts — astro Source File

content.config.ts — astro Source File

Architecture documentation for content.config.ts, a typescript file in the astro codebase. 3 imports, 0 dependents.

Entity Profile

Dependency Diagram

graph LR
  e7dce0db_0b3a_afb5_bbd5_09510a54a5df["content.config.ts"]
  48f80d01_e646_3924_78f6_a9d836644746["astro:content"]
  e7dce0db_0b3a_afb5_bbd5_09510a54a5df --> 48f80d01_e646_3924_78f6_a9d836644746
  0f49b6f2_8b44_baf8_7812_a8fa2dd0ca84["zod"]
  e7dce0db_0b3a_afb5_bbd5_09510a54a5df --> 0f49b6f2_8b44_baf8_7812_a8fa2dd0ca84
  d47373dc_6761_5858_3027_a4a6472dd795["loaders"]
  e7dce0db_0b3a_afb5_bbd5_09510a54a5df --> d47373dc_6761_5858_3027_a4a6472dd795
  style e7dce0db_0b3a_afb5_bbd5_09510a54a5df fill:#6366f1,stroke:#818cf8,color:#fff

Relationship Graph

Source Code

import { defineCollection } from 'astro:content';
import { z } from 'astro/zod';
import { glob } from 'astro/loaders';

const withData = defineCollection({
	loader: glob({ pattern: '**/*.{json,yaml,yml}', base: './src/content/with-data' }),
	schema: z.object({
		title: z.string(),
	}),
});

const withCustomSlugs = defineCollection({
	loader: glob({ pattern: '**/*.{md,mdx}', base: './src/content/with-custom-slugs' }),
	// Ensure schema passes even when `slug` is present
	schema: z
		.object({
			slug: z.string().optional(),
		})
		.strict(),
});

const withSchemaConfig = defineCollection({
	loader: glob({
		pattern: [
			'**/*.{md,mdx}', 	// Include all markdown files
			'!**/_*/**', 			// Exclude anything in directories starting with _
			'!**/_*.{md,mdx}',// Exclude files starting with _
		],
		base: './src/content/with-schema-config',
		// Preserve special characters like % in filenames
		generateId: ({ entry }) => entry.replace(/\.(md|mdx)$/, ''),
	}),
	schema: z.object({
		title: z.string(),
		isDraft: z.boolean().default(false),
		lang: z.enum(['en', 'fr', 'es']).default('en'),
		publishedAt: z.date().transform((val) => new Date(val)),
	}),
});

const withUnionSchema = defineCollection({
	loader: glob({ pattern: '**/*.{md,mdx}', base: './src/content/with-union-schema' }),
	schema: z.discriminatedUnion('type', [
		z.object({
			type: z.literal('post'),
			title: z.string(),
			description: z.string(),
		}),
		z.object({
			type: z.literal('newsletter'),
			subject: z.string(),
		}),
	]),
});

const withSymlinkedData = defineCollection({
	loader: glob({ pattern: '**/*.{json,yaml,yml}', base: './src/content/with-symlinked-data' }),
	schema: ({ image }) =>
		z.object({
			alt: z.string(),
			src: image(),
		}),
});

const withSymlinkedContent = defineCollection({
	loader: glob({ pattern: '**/*.{md,mdx}', base: './src/content/with-symlinked-content' }),
	schema: z.object({
		title: z.string(),
		date: z.date(),
	}),
});

const withScripts = defineCollection({
	loader: glob({ pattern: '**/*.{md,mdx}', base: './src/content/with-scripts' }),
});

export const collections = {
	'with-data': withData,
	'with-custom-slugs': withCustomSlugs,
	'with-schema-config': withSchemaConfig,
	'with-union-schema': withUnionSchema,
	'with-symlinked-data': withSymlinkedData,
	'with-symlinked-content': withSymlinkedContent,
	'with-scripts': withScripts,
};

Subdomains

Dependencies

  • astro:content
  • loaders
  • zod

Frequently Asked Questions

What does content.config.ts do?
content.config.ts is a source file in the astro codebase, written in typescript. It belongs to the IntegrationAdapters domain, SsrAdapters subdomain.
What functions are defined in content.config.ts?
content.config.ts defines 1 function(s): withSymlinkedData.schema.
What does content.config.ts depend on?
content.config.ts imports 3 module(s): astro:content, loaders, zod.
Where is content.config.ts in the architecture?
content.config.ts is located at packages/astro/test/fixtures/content-collections/src/content.config.ts (domain: IntegrationAdapters, subdomain: SsrAdapters, directory: packages/astro/test/fixtures/content-collections/src).

Analyze Your Own Codebase

Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.

Try Supermodel Free