This commit is contained in:
2026-04-30 11:34:09 -04:00
parent 9ac6efc55a
commit 7d76d2bb03
6 changed files with 605 additions and 785 deletions
+22 -28
View File
@@ -1,32 +1,26 @@
{ {
"$ref": "#/definitions/blog", "$schema": "https://json-schema.org/draft/2020-12/schema",
"definitions": { "type": "object",
"blog": { "properties": {
"type": "object", "title": {
"properties": { "type": "string"
"title": { },
"type": "string" "pubDate": {
}, "type": "string"
"pubDate": { },
"type": "string" "tags": {
}, "type": "array",
"tags": { "items": {
"type": "array", "type": "string"
"items": { }
"type": "string" },
} "$schema": {
}, "type": "string"
"$schema": {
"type": "string"
}
},
"required": [
"title",
"pubDate",
"tags"
],
"additionalProperties": false
} }
}, },
"$schema": "http://json-schema.org/draft-07/schema#" "required": [
"title",
"pubDate",
"tags"
]
} }
+6 -6
View File
@@ -1,11 +1,11 @@
import __ASTRO_IMAGE_IMPORT_3KcDr from "src/assets/blog/my-ai-portrait.jpg?astroContentImageFlag=&importer=src%2Fcontent%2Fblog%2F2022%2Fcreating-a-dating-profile-with-ai.md";
import __ASTRO_IMAGE_IMPORT_1G57ng from "src/assets/blog/ileopard/mac-os-10-1.png?astroContentImageFlag=&importer=src%2Fcontent%2Fblog%2F2022%2Fileopard-a-retrospective.md";
import __ASTRO_IMAGE_IMPORT_Z1ESWoO from "src/assets/blog/ileopard/itunes-7.gif?astroContentImageFlag=&importer=src%2Fcontent%2Fblog%2F2022%2Fileopard-a-retrospective.md";
import __ASTRO_IMAGE_IMPORT_rrnp from "src/assets/blog/ileopard/ileopard-2-0-1.png?astroContentImageFlag=&importer=src%2Fcontent%2Fblog%2F2022%2Fileopard-a-retrospective.md";
import __ASTRO_IMAGE_IMPORT_1mhYTO from "src/assets/blog/gifs/destroy-taskmaster.gif?astroContentImageFlag=&importer=src%2Fcontent%2Fblog%2F2026%2Fmy-favorite-things-of-2025.md"; import __ASTRO_IMAGE_IMPORT_1mhYTO from "src/assets/blog/gifs/destroy-taskmaster.gif?astroContentImageFlag=&importer=src%2Fcontent%2Fblog%2F2026%2Fmy-favorite-things-of-2025.md";
import __ASTRO_IMAGE_IMPORT_Zi2DqH from "src/assets/blog/gunpla/box.jpg?astroContentImageFlag=&importer=src%2Fcontent%2Fblog%2F2023%2Fmy-gunpla-adventure.md";
import __ASTRO_IMAGE_IMPORT_1OkzEl from "src/assets/blog/gunpla/all-the-parts.jpg?astroContentImageFlag=&importer=src%2Fcontent%2Fblog%2F2023%2Fmy-gunpla-adventure.md"; import __ASTRO_IMAGE_IMPORT_1OkzEl from "src/assets/blog/gunpla/all-the-parts.jpg?astroContentImageFlag=&importer=src%2Fcontent%2Fblog%2F2023%2Fmy-gunpla-adventure.md";
import __ASTRO_IMAGE_IMPORT_Zi2DqH from "src/assets/blog/gunpla/box.jpg?astroContentImageFlag=&importer=src%2Fcontent%2Fblog%2F2023%2Fmy-gunpla-adventure.md";
import __ASTRO_IMAGE_IMPORT_FYQiW from "src/assets/blog/gunpla/final.jpg?astroContentImageFlag=&importer=src%2Fcontent%2Fblog%2F2023%2Fmy-gunpla-adventure.md"; import __ASTRO_IMAGE_IMPORT_FYQiW from "src/assets/blog/gunpla/final.jpg?astroContentImageFlag=&importer=src%2Fcontent%2Fblog%2F2023%2Fmy-gunpla-adventure.md";
export default new Map([["src/assets/blog/my-ai-portrait.jpg?astroContentImageFlag=&importer=src%2Fcontent%2Fblog%2F2022%2Fcreating-a-dating-profile-with-ai.md", __ASTRO_IMAGE_IMPORT_3KcDr], ["src/assets/blog/ileopard/mac-os-10-1.png?astroContentImageFlag=&importer=src%2Fcontent%2Fblog%2F2022%2Fileopard-a-retrospective.md", __ASTRO_IMAGE_IMPORT_1G57ng], ["src/assets/blog/ileopard/itunes-7.gif?astroContentImageFlag=&importer=src%2Fcontent%2Fblog%2F2022%2Fileopard-a-retrospective.md", __ASTRO_IMAGE_IMPORT_Z1ESWoO], ["src/assets/blog/ileopard/ileopard-2-0-1.png?astroContentImageFlag=&importer=src%2Fcontent%2Fblog%2F2022%2Fileopard-a-retrospective.md", __ASTRO_IMAGE_IMPORT_rrnp], ["src/assets/blog/gifs/destroy-taskmaster.gif?astroContentImageFlag=&importer=src%2Fcontent%2Fblog%2F2026%2Fmy-favorite-things-of-2025.md", __ASTRO_IMAGE_IMPORT_1mhYTO], ["src/assets/blog/gunpla/box.jpg?astroContentImageFlag=&importer=src%2Fcontent%2Fblog%2F2023%2Fmy-gunpla-adventure.md", __ASTRO_IMAGE_IMPORT_Zi2DqH], ["src/assets/blog/gunpla/all-the-parts.jpg?astroContentImageFlag=&importer=src%2Fcontent%2Fblog%2F2023%2Fmy-gunpla-adventure.md", __ASTRO_IMAGE_IMPORT_1OkzEl], ["src/assets/blog/gunpla/final.jpg?astroContentImageFlag=&importer=src%2Fcontent%2Fblog%2F2023%2Fmy-gunpla-adventure.md", __ASTRO_IMAGE_IMPORT_FYQiW]]); import __ASTRO_IMAGE_IMPORT_rrnp from "src/assets/blog/ileopard/ileopard-2-0-1.png?astroContentImageFlag=&importer=src%2Fcontent%2Fblog%2F2022%2Fileopard-a-retrospective.md";
import __ASTRO_IMAGE_IMPORT_Z1ESWoO from "src/assets/blog/ileopard/itunes-7.gif?astroContentImageFlag=&importer=src%2Fcontent%2Fblog%2F2022%2Fileopard-a-retrospective.md";
import __ASTRO_IMAGE_IMPORT_1G57ng from "src/assets/blog/ileopard/mac-os-10-1.png?astroContentImageFlag=&importer=src%2Fcontent%2Fblog%2F2022%2Fileopard-a-retrospective.md";
import __ASTRO_IMAGE_IMPORT_3KcDr from "src/assets/blog/my-ai-portrait.jpg?astroContentImageFlag=&importer=src%2Fcontent%2Fblog%2F2022%2Fcreating-a-dating-profile-with-ai.md";
export default new Map([["src/assets/blog/gifs/destroy-taskmaster.gif?astroContentImageFlag=&importer=src%2Fcontent%2Fblog%2F2026%2Fmy-favorite-things-of-2025.md", __ASTRO_IMAGE_IMPORT_1mhYTO], ["src/assets/blog/gunpla/all-the-parts.jpg?astroContentImageFlag=&importer=src%2Fcontent%2Fblog%2F2023%2Fmy-gunpla-adventure.md", __ASTRO_IMAGE_IMPORT_1OkzEl], ["src/assets/blog/gunpla/box.jpg?astroContentImageFlag=&importer=src%2Fcontent%2Fblog%2F2023%2Fmy-gunpla-adventure.md", __ASTRO_IMAGE_IMPORT_Zi2DqH], ["src/assets/blog/gunpla/final.jpg?astroContentImageFlag=&importer=src%2Fcontent%2Fblog%2F2023%2Fmy-gunpla-adventure.md", __ASTRO_IMAGE_IMPORT_FYQiW], ["src/assets/blog/ileopard/ileopard-2-0-1.png?astroContentImageFlag=&importer=src%2Fcontent%2Fblog%2F2022%2Fileopard-a-retrospective.md", __ASTRO_IMAGE_IMPORT_rrnp], ["src/assets/blog/ileopard/itunes-7.gif?astroContentImageFlag=&importer=src%2Fcontent%2Fblog%2F2022%2Fileopard-a-retrospective.md", __ASTRO_IMAGE_IMPORT_Z1ESWoO], ["src/assets/blog/ileopard/mac-os-10-1.png?astroContentImageFlag=&importer=src%2Fcontent%2Fblog%2F2022%2Fileopard-a-retrospective.md", __ASTRO_IMAGE_IMPORT_1G57ng], ["src/assets/blog/my-ai-portrait.jpg?astroContentImageFlag=&importer=src%2Fcontent%2Fblog%2F2022%2Fcreating-a-dating-profile-with-ai.md", __ASTRO_IMAGE_IMPORT_3KcDr]]);
+33 -78
View File
@@ -26,21 +26,13 @@ declare module 'astro:content' {
[key: string]: unknown; [key: string]: unknown;
}; };
} }
}
declare module 'astro:content' {
type Flatten<T> = T extends { [K: string]: infer U } ? U : never; type Flatten<T> = T extends { [K: string]: infer U } ? U : never;
export type CollectionKey = keyof AnyEntryMap; export type CollectionKey = keyof DataEntryMap;
export type CollectionEntry<C extends CollectionKey> = Flatten<AnyEntryMap[C]>; export type CollectionEntry<C extends CollectionKey> = Flatten<DataEntryMap[C]>;
export type ContentCollectionKey = keyof ContentEntryMap;
export type DataCollectionKey = keyof DataEntryMap;
type AllValuesOf<T> = T extends any ? T[keyof T] : never; type AllValuesOf<T> = T extends any ? T[keyof T] : never;
type ValidContentEntrySlug<C extends keyof ContentEntryMap> = AllValuesOf<
ContentEntryMap[C]
>['slug'];
export type ReferenceDataEntry< export type ReferenceDataEntry<
C extends CollectionKey, C extends CollectionKey,
@@ -49,41 +41,17 @@ declare module 'astro:content' {
collection: C; collection: C;
id: E; id: E;
}; };
export type ReferenceContentEntry<
C extends keyof ContentEntryMap,
E extends ValidContentEntrySlug<C> | (string & {}) = string,
> = {
collection: C;
slug: E;
};
export type ReferenceLiveEntry<C extends keyof LiveContentConfig['collections']> = { export type ReferenceLiveEntry<C extends keyof LiveContentConfig['collections']> = {
collection: C; collection: C;
id: string; id: string;
}; };
/** @deprecated Use `getEntry` instead. */ export function getCollection<C extends keyof DataEntryMap, E extends CollectionEntry<C>>(
export function getEntryBySlug<
C extends keyof ContentEntryMap,
E extends ValidContentEntrySlug<C> | (string & {}),
>(
collection: C,
// Note that this has to accept a regular string too, for SSR
entrySlug: E,
): E extends ValidContentEntrySlug<C>
? Promise<CollectionEntry<C>>
: Promise<CollectionEntry<C> | undefined>;
/** @deprecated Use `getEntry` instead. */
export function getDataEntryById<C extends keyof DataEntryMap, E extends keyof DataEntryMap[C]>(
collection: C,
entryId: E,
): Promise<CollectionEntry<C>>;
export function getCollection<C extends keyof AnyEntryMap, E extends CollectionEntry<C>>(
collection: C, collection: C,
filter?: (entry: CollectionEntry<C>) => entry is E, filter?: (entry: CollectionEntry<C>) => entry is E,
): Promise<E[]>; ): Promise<E[]>;
export function getCollection<C extends keyof AnyEntryMap>( export function getCollection<C extends keyof DataEntryMap>(
collection: C, collection: C,
filter?: (entry: CollectionEntry<C>) => unknown, filter?: (entry: CollectionEntry<C>) => unknown,
): Promise<CollectionEntry<C>[]>; ): Promise<CollectionEntry<C>[]>;
@@ -95,14 +63,6 @@ declare module 'astro:content' {
import('astro').LiveDataCollectionResult<LiveLoaderDataType<C>, LiveLoaderErrorType<C>> import('astro').LiveDataCollectionResult<LiveLoaderDataType<C>, LiveLoaderErrorType<C>>
>; >;
export function getEntry<
C extends keyof ContentEntryMap,
E extends ValidContentEntrySlug<C> | (string & {}),
>(
entry: ReferenceContentEntry<C, E>,
): E extends ValidContentEntrySlug<C>
? Promise<CollectionEntry<C>>
: Promise<CollectionEntry<C> | undefined>;
export function getEntry< export function getEntry<
C extends keyof DataEntryMap, C extends keyof DataEntryMap,
E extends keyof DataEntryMap[C] | (string & {}), E extends keyof DataEntryMap[C] | (string & {}),
@@ -111,15 +71,6 @@ declare module 'astro:content' {
): E extends keyof DataEntryMap[C] ): E extends keyof DataEntryMap[C]
? Promise<DataEntryMap[C][E]> ? Promise<DataEntryMap[C][E]>
: Promise<CollectionEntry<C> | undefined>; : Promise<CollectionEntry<C> | undefined>;
export function getEntry<
C extends keyof ContentEntryMap,
E extends ValidContentEntrySlug<C> | (string & {}),
>(
collection: C,
slug: E,
): E extends ValidContentEntrySlug<C>
? Promise<CollectionEntry<C>>
: Promise<CollectionEntry<C> | undefined>;
export function getEntry< export function getEntry<
C extends keyof DataEntryMap, C extends keyof DataEntryMap,
E extends keyof DataEntryMap[C] | (string & {}), E extends keyof DataEntryMap[C] | (string & {}),
@@ -137,40 +88,47 @@ declare module 'astro:content' {
): Promise<import('astro').LiveDataEntryResult<LiveLoaderDataType<C>, LiveLoaderErrorType<C>>>; ): Promise<import('astro').LiveDataEntryResult<LiveLoaderDataType<C>, LiveLoaderErrorType<C>>>;
/** Resolve an array of entry references from the same collection */ /** Resolve an array of entry references from the same collection */
export function getEntries<C extends keyof ContentEntryMap>(
entries: ReferenceContentEntry<C, ValidContentEntrySlug<C>>[],
): Promise<CollectionEntry<C>[]>;
export function getEntries<C extends keyof DataEntryMap>( export function getEntries<C extends keyof DataEntryMap>(
entries: ReferenceDataEntry<C, keyof DataEntryMap[C]>[], entries: ReferenceDataEntry<C, keyof DataEntryMap[C]>[],
): Promise<CollectionEntry<C>[]>; ): Promise<CollectionEntry<C>[]>;
export function render<C extends keyof AnyEntryMap>( export function render<C extends keyof DataEntryMap>(
entry: AnyEntryMap[C][string], entry: DataEntryMap[C][string],
): Promise<RenderResult>; ): Promise<RenderResult>;
export function reference<C extends keyof AnyEntryMap>( export function reference<
C extends
| keyof DataEntryMap
// Allow generic `string` to avoid excessive type errors in the config
// if `dev` is not running to update as you edit.
// Invalid collection names will be caught at build time.
| (string & {}),
>(
collection: C, collection: C,
): import('astro/zod').ZodEffects< ): import('astro/zod').ZodPipe<
import('astro/zod').ZodString, import('astro/zod').ZodString,
C extends keyof ContentEntryMap import('astro/zod').ZodTransform<
? ReferenceContentEntry<C, ValidContentEntrySlug<C>> C extends keyof DataEntryMap
: ReferenceDataEntry<C, keyof DataEntryMap[C]> ? {
collection: C;
id: string;
}
: never,
string
>
>; >;
// Allow generic `string` to avoid excessive type errors in the config
// if `dev` is not running to update as you edit.
// Invalid collection names will be caught at build time.
export function reference<C extends string>(
collection: C,
): import('astro/zod').ZodEffects<import('astro/zod').ZodString, never>;
type ReturnTypeOrOriginal<T> = T extends (...args: any[]) => infer R ? R : T; type ReturnTypeOrOriginal<T> = T extends (...args: any[]) => infer R ? R : T;
type InferEntrySchema<C extends keyof AnyEntryMap> = import('astro/zod').infer< type InferEntrySchema<C extends keyof DataEntryMap> = import('astro/zod').infer<
ReturnTypeOrOriginal<Required<ContentConfig['collections'][C]>['schema']> ReturnTypeOrOriginal<Required<ContentConfig['collections'][C]>['schema']>
>; >;
type ExtractLoaderConfig<T> = T extends { loader: infer L } ? L : never;
type ContentEntryMap = { type InferLoaderSchema<
C extends keyof DataEntryMap,
}; L = ExtractLoaderConfig<ContentConfig['collections'][C]>,
> = L extends { schema: import('astro/zod').ZodSchema }
? import('astro/zod').infer<L['schema']>
: any;
type DataEntryMap = { type DataEntryMap = {
"blog": Record<string, { "blog": Record<string, {
@@ -184,8 +142,6 @@ declare module 'astro:content' {
}; };
type AnyEntryMap = ContentEntryMap & DataEntryMap;
type ExtractLoaderTypes<T> = T extends import('astro/loaders').LiveLoader< type ExtractLoaderTypes<T> = T extends import('astro/loaders').LiveLoader<
infer TData, infer TData,
infer TEntryFilter, infer TEntryFilter,
@@ -194,7 +150,6 @@ declare module 'astro:content' {
> >
? { data: TData; entryFilter: TEntryFilter; collectionFilter: TCollectionFilter; error: TError } ? { data: TData; entryFilter: TEntryFilter; collectionFilter: TCollectionFilter; error: TError }
: { data: never; entryFilter: never; collectionFilter: never; error: never }; : { data: never; entryFilter: never; collectionFilter: never; error: never };
type ExtractDataType<T> = ExtractLoaderTypes<T>['data'];
type ExtractEntryFilterType<T> = ExtractLoaderTypes<T>['entryFilter']; type ExtractEntryFilterType<T> = ExtractLoaderTypes<T>['entryFilter'];
type ExtractCollectionFilterType<T> = ExtractLoaderTypes<T>['collectionFilter']; type ExtractCollectionFilterType<T> = ExtractLoaderTypes<T>['collectionFilter'];
type ExtractErrorType<T> = ExtractLoaderTypes<T>['error']; type ExtractErrorType<T> = ExtractLoaderTypes<T>['error'];
File diff suppressed because one or more lines are too long
+5 -5
View File
@@ -15,13 +15,13 @@
}, },
"dependencies": { "dependencies": {
"@alpinejs/persist": "^3.15.1", "@alpinejs/persist": "^3.15.1",
"@astrojs/alpinejs": "^0.4.9", "@astrojs/alpinejs": "^0.5.0",
"@astrojs/mdx": "^4.3.13", "@astrojs/mdx": "^5.0.4",
"@astrojs/rss": "^4.0.15", "@astrojs/rss": "^4.0.18",
"@types/alpinejs": "^3.13.11", "@types/alpinejs": "^3.13.11",
"@types/markdown-it": "^14.1.2", "@types/markdown-it": "^14.1.2",
"alpinejs": "^3.15.0", "alpinejs": "^3.15.0",
"astro": "^5.16.11", "astro": "^6.2.1",
"astro-pagefind": "^1.8.5", "astro-pagefind": "^1.8.5",
"date-fns": "^4.1.0", "date-fns": "^4.1.0",
"markdown-it": "^14.1.0", "markdown-it": "^14.1.0",
@@ -30,7 +30,7 @@
"sharp": "^0.34.4" "sharp": "^0.34.4"
}, },
"devDependencies": { "devDependencies": {
"@astrojs/ts-plugin": "1.10.6", "@astrojs/ts-plugin": "1.10.7",
"@eslint/js": "^9.39.2", "@eslint/js": "^9.39.2",
"@types/alpinejs__persist": "^3.13.4", "@types/alpinejs__persist": "^3.13.4",
"bun-types": "1.3.0", "bun-types": "1.3.0",
+538 -667
View File
File diff suppressed because it is too large Load Diff