apply formatting rules
This commit is contained in:
@@ -20,7 +20,11 @@
|
|||||||
"type": "string"
|
"type": "string"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"required": ["title", "pubDate", "tags"],
|
"required": [
|
||||||
|
"title",
|
||||||
|
"pubDate",
|
||||||
|
"tags"
|
||||||
|
],
|
||||||
"additionalProperties": false
|
"additionalProperties": false
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -1,37 +1,10 @@
|
|||||||
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_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_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_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_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([
|
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";
|
||||||
"src/assets/blog/my-ai-portrait.jpg?astroContentImageFlag=&importer=src%2Fcontent%2Fblog%2F2022%2Fcreating-a-dating-profile-with-ai.md",
|
import __ASTRO_IMAGE_IMPORT_FYQiW from "src/assets/blog/gunpla/final.jpg?astroContentImageFlag=&importer=src%2Fcontent%2Fblog%2F2023%2Fmy-gunpla-adventure.md";
|
||||||
__ASTRO_IMAGE_IMPORT_3KcDr,
|
export default new Map([["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/my-ai-portrait.jpg?astroContentImageFlag=&importer=src%2Fcontent%2Fblog%2F2022%2Fcreating-a-dating-profile-with-ai.md", __ASTRO_IMAGE_IMPORT_3KcDr], ["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]]);
|
||||||
],
|
|
||||||
[
|
|
||||||
"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/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,
|
|
||||||
],
|
|
||||||
]);
|
|
||||||
Vendored
+51
-85
@@ -1,22 +1,22 @@
|
|||||||
declare module "astro:content" {
|
declare module 'astro:content' {
|
||||||
interface Render {
|
interface Render {
|
||||||
".mdx": Promise<{
|
'.mdx': Promise<{
|
||||||
Content: import("astro").MarkdownInstance<{}>["Content"];
|
Content: import('astro').MarkdownInstance<{}>['Content'];
|
||||||
headings: import("astro").MarkdownHeading[];
|
headings: import('astro').MarkdownHeading[];
|
||||||
remarkPluginFrontmatter: Record<string, any>;
|
remarkPluginFrontmatter: Record<string, any>;
|
||||||
components: import("astro").MDXInstance<{}>["components"];
|
components: import('astro').MDXInstance<{}>['components'];
|
||||||
}>;
|
}>;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
declare module "astro:content" {
|
declare module 'astro:content' {
|
||||||
export interface RenderResult {
|
export interface RenderResult {
|
||||||
Content: import("astro/runtime/server/index.js").AstroComponentFactory;
|
Content: import('astro/runtime/server/index.js').AstroComponentFactory;
|
||||||
headings: import("astro").MarkdownHeading[];
|
headings: import('astro').MarkdownHeading[];
|
||||||
remarkPluginFrontmatter: Record<string, any>;
|
remarkPluginFrontmatter: Record<string, any>;
|
||||||
}
|
}
|
||||||
interface Render {
|
interface Render {
|
||||||
".md": Promise<RenderResult>;
|
'.md': Promise<RenderResult>;
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface RenderedContent {
|
export interface RenderedContent {
|
||||||
@@ -28,13 +28,11 @@ declare module "astro:content" {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
declare module "astro:content" {
|
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 AnyEntryMap;
|
||||||
export type CollectionEntry<C extends CollectionKey> = Flatten<
|
export type CollectionEntry<C extends CollectionKey> = Flatten<AnyEntryMap[C]>;
|
||||||
AnyEntryMap[C]
|
|
||||||
>;
|
|
||||||
|
|
||||||
export type ContentCollectionKey = keyof ContentEntryMap;
|
export type ContentCollectionKey = keyof ContentEntryMap;
|
||||||
export type DataCollectionKey = keyof DataEntryMap;
|
export type DataCollectionKey = keyof DataEntryMap;
|
||||||
@@ -42,7 +40,7 @@ declare module "astro:content" {
|
|||||||
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<
|
type ValidContentEntrySlug<C extends keyof ContentEntryMap> = AllValuesOf<
|
||||||
ContentEntryMap[C]
|
ContentEntryMap[C]
|
||||||
>["slug"];
|
>['slug'];
|
||||||
|
|
||||||
export type ReferenceDataEntry<
|
export type ReferenceDataEntry<
|
||||||
C extends CollectionKey,
|
C extends CollectionKey,
|
||||||
@@ -58,9 +56,7 @@ declare module "astro:content" {
|
|||||||
collection: C;
|
collection: C;
|
||||||
slug: E;
|
slug: E;
|
||||||
};
|
};
|
||||||
export type ReferenceLiveEntry<
|
export type ReferenceLiveEntry<C extends keyof LiveContentConfig['collections']> = {
|
||||||
C extends keyof LiveContentConfig["collections"],
|
|
||||||
> = {
|
|
||||||
collection: C;
|
collection: C;
|
||||||
id: string;
|
id: string;
|
||||||
};
|
};
|
||||||
@@ -78,15 +74,12 @@ declare module "astro:content" {
|
|||||||
: Promise<CollectionEntry<C> | undefined>;
|
: Promise<CollectionEntry<C> | undefined>;
|
||||||
|
|
||||||
/** @deprecated Use `getEntry` instead. */
|
/** @deprecated Use `getEntry` instead. */
|
||||||
export function getDataEntryById<
|
export function getDataEntryById<C extends keyof DataEntryMap, E extends keyof DataEntryMap[C]>(
|
||||||
C extends keyof DataEntryMap,
|
collection: C,
|
||||||
E extends keyof DataEntryMap[C],
|
entryId: E,
|
||||||
>(collection: C, entryId: E): Promise<CollectionEntry<C>>;
|
): Promise<CollectionEntry<C>>;
|
||||||
|
|
||||||
export function getCollection<
|
export function getCollection<C extends keyof AnyEntryMap, E extends CollectionEntry<C>>(
|
||||||
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[]>;
|
||||||
@@ -95,16 +88,11 @@ declare module "astro:content" {
|
|||||||
filter?: (entry: CollectionEntry<C>) => unknown,
|
filter?: (entry: CollectionEntry<C>) => unknown,
|
||||||
): Promise<CollectionEntry<C>[]>;
|
): Promise<CollectionEntry<C>[]>;
|
||||||
|
|
||||||
export function getLiveCollection<
|
export function getLiveCollection<C extends keyof LiveContentConfig['collections']>(
|
||||||
C extends keyof LiveContentConfig["collections"],
|
|
||||||
>(
|
|
||||||
collection: C,
|
collection: C,
|
||||||
filter?: LiveLoaderCollectionFilterType<C>,
|
filter?: LiveLoaderCollectionFilterType<C>,
|
||||||
): Promise<
|
): Promise<
|
||||||
import("astro").LiveDataCollectionResult<
|
import('astro').LiveDataCollectionResult<LiveLoaderDataType<C>, LiveLoaderErrorType<C>>
|
||||||
LiveLoaderDataType<C>,
|
|
||||||
LiveLoaderErrorType<C>
|
|
||||||
>
|
|
||||||
>;
|
>;
|
||||||
|
|
||||||
export function getEntry<
|
export function getEntry<
|
||||||
@@ -143,17 +131,10 @@ declare module "astro:content" {
|
|||||||
? Promise<DataEntryMap[C][E]> | undefined
|
? Promise<DataEntryMap[C][E]> | undefined
|
||||||
: Promise<DataEntryMap[C][E]>
|
: Promise<DataEntryMap[C][E]>
|
||||||
: Promise<CollectionEntry<C> | undefined>;
|
: Promise<CollectionEntry<C> | undefined>;
|
||||||
export function getLiveEntry<
|
export function getLiveEntry<C extends keyof LiveContentConfig['collections']>(
|
||||||
C extends keyof LiveContentConfig["collections"],
|
|
||||||
>(
|
|
||||||
collection: C,
|
collection: C,
|
||||||
filter: string | LiveLoaderEntryFilterType<C>,
|
filter: string | LiveLoaderEntryFilterType<C>,
|
||||||
): Promise<
|
): Promise<import('astro').LiveDataEntryResult<LiveLoaderDataType<C>, LiveLoaderErrorType<C>>>;
|
||||||
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>(
|
export function getEntries<C extends keyof ContentEntryMap>(
|
||||||
@@ -169,8 +150,8 @@ declare module "astro:content" {
|
|||||||
|
|
||||||
export function reference<C extends keyof AnyEntryMap>(
|
export function reference<C extends keyof AnyEntryMap>(
|
||||||
collection: C,
|
collection: C,
|
||||||
): import("astro/zod").ZodEffects<
|
): import('astro/zod').ZodEffects<
|
||||||
import("astro/zod").ZodString,
|
import('astro/zod').ZodString,
|
||||||
C extends keyof ContentEntryMap
|
C extends keyof ContentEntryMap
|
||||||
? ReferenceContentEntry<C, ValidContentEntrySlug<C>>
|
? ReferenceContentEntry<C, ValidContentEntrySlug<C>>
|
||||||
: ReferenceDataEntry<C, keyof DataEntryMap[C]>
|
: ReferenceDataEntry<C, keyof DataEntryMap[C]>
|
||||||
@@ -180,72 +161,57 @@ declare module "astro:content" {
|
|||||||
// Invalid collection names will be caught at build time.
|
// Invalid collection names will be caught at build time.
|
||||||
export function reference<C extends string>(
|
export function reference<C extends string>(
|
||||||
collection: C,
|
collection: C,
|
||||||
): import("astro/zod").ZodEffects<import("astro/zod").ZodString, never>;
|
): 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> =
|
type InferEntrySchema<C extends keyof AnyEntryMap> = import('astro/zod').infer<
|
||||||
import("astro/zod").infer<
|
ReturnTypeOrOriginal<Required<ContentConfig['collections'][C]>['schema']>
|
||||||
ReturnTypeOrOriginal<Required<ContentConfig["collections"][C]>["schema"]>
|
|
||||||
>;
|
>;
|
||||||
|
|
||||||
type ContentEntryMap = {};
|
type ContentEntryMap = {
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
type DataEntryMap = {
|
type DataEntryMap = {
|
||||||
blog: Record<
|
"blog": Record<string, {
|
||||||
string,
|
|
||||||
{
|
|
||||||
id: string;
|
id: string;
|
||||||
body?: string;
|
body?: string;
|
||||||
collection: "blog";
|
collection: "blog";
|
||||||
data: InferEntrySchema<"blog">;
|
data: InferEntrySchema<"blog">;
|
||||||
rendered?: RenderedContent;
|
rendered?: RenderedContent;
|
||||||
filePath?: string;
|
filePath?: string;
|
||||||
}
|
}>;
|
||||||
>;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
type AnyEntryMap = ContentEntryMap & DataEntryMap;
|
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,
|
||||||
infer TCollectionFilter,
|
infer TCollectionFilter,
|
||||||
infer TError
|
infer TError
|
||||||
>
|
>
|
||||||
? {
|
? { data: TData; entryFilter: TEntryFilter; collectionFilter: TCollectionFilter; error: TError }
|
||||||
data: TData;
|
: { data: never; entryFilter: never; collectionFilter: never; error: never };
|
||||||
entryFilter: TEntryFilter;
|
type ExtractDataType<T> = ExtractLoaderTypes<T>['data'];
|
||||||
collectionFilter: TCollectionFilter;
|
type ExtractEntryFilterType<T> = ExtractLoaderTypes<T>['entryFilter'];
|
||||||
error: TError;
|
type ExtractCollectionFilterType<T> = ExtractLoaderTypes<T>['collectionFilter'];
|
||||||
}
|
type ExtractErrorType<T> = ExtractLoaderTypes<T>['error'];
|
||||||
: {
|
|
||||||
data: never;
|
|
||||||
entryFilter: never;
|
|
||||||
collectionFilter: never;
|
|
||||||
error: never;
|
|
||||||
};
|
|
||||||
type ExtractDataType<T> = ExtractLoaderTypes<T>["data"];
|
|
||||||
type ExtractEntryFilterType<T> = ExtractLoaderTypes<T>["entryFilter"];
|
|
||||||
type ExtractCollectionFilterType<T> =
|
|
||||||
ExtractLoaderTypes<T>["collectionFilter"];
|
|
||||||
type ExtractErrorType<T> = ExtractLoaderTypes<T>["error"];
|
|
||||||
|
|
||||||
type LiveLoaderDataType<C extends keyof LiveContentConfig["collections"]> =
|
type LiveLoaderDataType<C extends keyof LiveContentConfig['collections']> =
|
||||||
LiveContentConfig["collections"][C]["schema"] extends undefined
|
LiveContentConfig['collections'][C]['schema'] extends undefined
|
||||||
? ExtractDataType<LiveContentConfig["collections"][C]["loader"]>
|
? ExtractDataType<LiveContentConfig['collections'][C]['loader']>
|
||||||
: import("astro/zod").infer<
|
: import('astro/zod').infer<
|
||||||
Exclude<LiveContentConfig["collections"][C]["schema"], undefined>
|
Exclude<LiveContentConfig['collections'][C]['schema'], undefined>
|
||||||
>;
|
>;
|
||||||
type LiveLoaderEntryFilterType<
|
type LiveLoaderEntryFilterType<C extends keyof LiveContentConfig['collections']> =
|
||||||
C extends keyof LiveContentConfig["collections"],
|
ExtractEntryFilterType<LiveContentConfig['collections'][C]['loader']>;
|
||||||
> = ExtractEntryFilterType<LiveContentConfig["collections"][C]["loader"]>;
|
type LiveLoaderCollectionFilterType<C extends keyof LiveContentConfig['collections']> =
|
||||||
type LiveLoaderCollectionFilterType<
|
ExtractCollectionFilterType<LiveContentConfig['collections'][C]['loader']>;
|
||||||
C extends keyof LiveContentConfig["collections"],
|
type LiveLoaderErrorType<C extends keyof LiveContentConfig['collections']> = ExtractErrorType<
|
||||||
> = ExtractCollectionFilterType<
|
LiveContentConfig['collections'][C]['loader']
|
||||||
LiveContentConfig["collections"][C]["loader"]
|
|
||||||
>;
|
>;
|
||||||
type LiveLoaderErrorType<C extends keyof LiveContentConfig["collections"]> =
|
|
||||||
ExtractErrorType<LiveContentConfig["collections"][C]["loader"]>;
|
|
||||||
|
|
||||||
export type ContentConfig = typeof import("../src/content.config.js");
|
export type ContentConfig = typeof import("../src/content.config.js");
|
||||||
export type LiveContentConfig = never;
|
export type LiveContentConfig = never;
|
||||||
|
|||||||
+1
-2087
File diff suppressed because one or more lines are too long
@@ -1,5 +1,4 @@
|
|||||||
---
|
---
|
||||||
|
|
||||||
import { Image } from "astro:assets";
|
import { Image } from "astro:assets";
|
||||||
|
|
||||||
import portrait from "../assets/portrait.jpg";
|
import portrait from "../assets/portrait.jpg";
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
---
|
---
|
||||||
|
|
||||||
import { add, format } from "date-fns";
|
import { add, format } from "date-fns";
|
||||||
|
|
||||||
import CalendarIcon from "../assets/svg/calendar.svg";
|
import CalendarIcon from "../assets/svg/calendar.svg";
|
||||||
@@ -17,7 +16,7 @@ const { title, date, slug } = Astro.props;
|
|||||||
{slug ? <a href={`/blog/${slug}`}>{title}</a> : <h1>{title}</h1>}
|
{slug ? <a href={`/blog/${slug}`}>{title}</a> : <h1>{title}</h1>}
|
||||||
<div>
|
<div>
|
||||||
<CalendarIcon class="calendar-icon" width={24} height={24} />
|
<CalendarIcon class="calendar-icon" width={24} height={24} />
|
||||||
<strong>{format(add(new Date(date), { hours: 6 }), 'MMM do, y')}</strong>
|
<strong>{format(add(new Date(date), { hours: 6 }), "MMM do, y")}</strong>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
---
|
---
|
||||||
|
|
||||||
interface Props {
|
interface Props {
|
||||||
title?: string;
|
title?: string;
|
||||||
image?: ImageMetadata;
|
image?: ImageMetadata;
|
||||||
@@ -23,7 +22,7 @@ const { title, image, links } = Astro.props;
|
|||||||
links.map((link) => (
|
links.map((link) => (
|
||||||
<a
|
<a
|
||||||
href={link.href}
|
href={link.href}
|
||||||
target={link.newWindow ? '_blank' : '_self'}
|
target={link.newWindow ? "_blank" : "_self"}
|
||||||
rel="noopener noreferrer"
|
rel="noopener noreferrer"
|
||||||
>
|
>
|
||||||
{link.label}
|
{link.label}
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
---
|
---
|
||||||
|
|
||||||
import MastodonIcon from "../assets/svg/mastodon.svg";
|
import MastodonIcon from "../assets/svg/mastodon.svg";
|
||||||
import RssIcon from "../assets/svg/rss.svg";
|
import RssIcon from "../assets/svg/rss.svg";
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
---
|
---
|
||||||
|
|
||||||
import BarsIcon from "../../assets/svg/bars.svg";
|
import BarsIcon from "../../assets/svg/bars.svg";
|
||||||
import CloseIcon from "../../assets/svg/xmark.svg";
|
import CloseIcon from "../../assets/svg/xmark.svg";
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
---
|
---
|
||||||
|
|
||||||
import Drawer from "./Drawer.astro";
|
import Drawer from "./Drawer.astro";
|
||||||
import Nav from "./Nav.astro";
|
import Nav from "./Nav.astro";
|
||||||
---
|
---
|
||||||
|
|||||||
@@ -1,10 +1,9 @@
|
|||||||
---
|
---
|
||||||
|
import { navLinks } from "../../data/nav-links";
|
||||||
import { navLinks } from '../../data/nav-links';
|
|
||||||
|
|
||||||
const { pathname } = Astro.url;
|
const { pathname } = Astro.url;
|
||||||
|
|
||||||
const pathComponents = pathname.split('/').slice(1);
|
const pathComponents = pathname.split("/").slice(1);
|
||||||
---
|
---
|
||||||
|
|
||||||
<nav>
|
<nav>
|
||||||
@@ -13,7 +12,7 @@ const pathComponents = pathname.split('/').slice(1);
|
|||||||
<li>
|
<li>
|
||||||
<a
|
<a
|
||||||
href={`/${link.path}`}
|
href={`/${link.path}`}
|
||||||
class={pathComponents[0] === link.path ? 'selected' : null}
|
class={pathComponents[0] === link.path ? "selected" : null}
|
||||||
>
|
>
|
||||||
{link.label}
|
{link.label}
|
||||||
</a>
|
</a>
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
---
|
---
|
||||||
|
|
||||||
import type { CollectionEntry } from "astro:content";
|
import type { CollectionEntry } from "astro:content";
|
||||||
import BlogHeader from "@components/BlogHeader.astro";
|
import BlogHeader from "@components/BlogHeader.astro";
|
||||||
import Tags from "@components/Tags.astro";
|
import Tags from "@components/Tags.astro";
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
---
|
---
|
||||||
|
|
||||||
interface Props {
|
interface Props {
|
||||||
tags: string[];
|
tags: string[];
|
||||||
}
|
}
|
||||||
@@ -14,7 +13,7 @@ const { tags } = Astro.props;
|
|||||||
<a class="tag" href={`/blog/tag/${tag}`}>
|
<a class="tag" href={`/blog/tag/${tag}`}>
|
||||||
{tag}
|
{tag}
|
||||||
</a>
|
</a>
|
||||||
{index < tags.length - 1 ? ' | ' : ''}
|
{index < tags.length - 1 ? " | " : ""}
|
||||||
</>
|
</>
|
||||||
))
|
))
|
||||||
}
|
}
|
||||||
|
|||||||
-2241
File diff suppressed because it is too large
Load Diff
@@ -1,5 +1,4 @@
|
|||||||
---
|
---
|
||||||
|
|
||||||
import { ClientRouter } from "astro:transitions";
|
import { ClientRouter } from "astro:transitions";
|
||||||
|
|
||||||
import "../global.css";
|
import "../global.css";
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
---
|
---
|
||||||
|
|
||||||
import { Image } from "astro:assets";
|
import { Image } from "astro:assets";
|
||||||
import Layout from "@layouts/Layout.astro";
|
import Layout from "@layouts/Layout.astro";
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
---
|
---
|
||||||
|
|
||||||
import { getCollection, render } from "astro:content";
|
import { getCollection, render } from "astro:content";
|
||||||
import BlogHeader from "@components/BlogHeader.astro";
|
import BlogHeader from "@components/BlogHeader.astro";
|
||||||
import Tags from "@components/Tags.astro";
|
import Tags from "@components/Tags.astro";
|
||||||
@@ -21,7 +20,6 @@ const { Content } = await render(post);
|
|||||||
---
|
---
|
||||||
|
|
||||||
<Layout title={data.title}>
|
<Layout title={data.title}>
|
||||||
<h1></h1>
|
|
||||||
<article>
|
<article>
|
||||||
<BlogHeader title={data.title} date={data.pubDate} />
|
<BlogHeader title={data.title} date={data.pubDate} />
|
||||||
<Content />
|
<Content />
|
||||||
|
|||||||
@@ -1,24 +1,23 @@
|
|||||||
---
|
---
|
||||||
|
import { type CollectionEntry, getCollection } from "astro:content";
|
||||||
|
import PostPreview from "@components/PostPreview.astro";
|
||||||
|
|
||||||
import { type CollectionEntry, getCollection } from 'astro:content';
|
import Layout from "@layouts/Layout.astro";
|
||||||
import PostPreview from '@components/PostPreview.astro';
|
import type { Page } from "astro";
|
||||||
|
|
||||||
import Layout from '@layouts/Layout.astro';
|
|
||||||
import type { Page } from 'astro';
|
|
||||||
|
|
||||||
export async function getStaticPaths({ paginate }) {
|
export async function getStaticPaths({ paginate }) {
|
||||||
const allPosts = await getCollection('blog');
|
const allPosts = await getCollection("blog");
|
||||||
|
|
||||||
allPosts.sort(
|
allPosts.sort(
|
||||||
(a, b) =>
|
(a, b) =>
|
||||||
Date.parse(String(b.data.pubDate)) - Date.parse(String(a.data.pubDate))
|
Date.parse(String(b.data.pubDate)) - Date.parse(String(a.data.pubDate)),
|
||||||
);
|
);
|
||||||
|
|
||||||
return paginate(allPosts, { pageSize: 10 });
|
return paginate(allPosts, { pageSize: 10 });
|
||||||
}
|
}
|
||||||
|
|
||||||
interface Props {
|
interface Props {
|
||||||
page: Page<CollectionEntry<'blog'>>;
|
page: Page<CollectionEntry<"blog">>;
|
||||||
}
|
}
|
||||||
|
|
||||||
const { page } = Astro.props;
|
const { page } = Astro.props;
|
||||||
|
|||||||
@@ -1,13 +1,12 @@
|
|||||||
---
|
---
|
||||||
|
import { getCollection } from "astro:content";
|
||||||
import { getCollection } from 'astro:content';
|
import Layout from "@layouts/Layout.astro";
|
||||||
import Layout from '@layouts/Layout.astro';
|
import { add, format } from "date-fns";
|
||||||
import { add, format } from 'date-fns';
|
|
||||||
|
|
||||||
export async function getStaticPaths() {
|
export async function getStaticPaths() {
|
||||||
const posts = await getCollection('blog');
|
const posts = await getCollection("blog");
|
||||||
|
|
||||||
const tags = ['all'];
|
const tags = ["all"];
|
||||||
|
|
||||||
posts.forEach((post) => {
|
posts.forEach((post) => {
|
||||||
post.data.tags.forEach((tag) => {
|
post.data.tags.forEach((tag) => {
|
||||||
@@ -25,12 +24,12 @@ export async function getStaticPaths() {
|
|||||||
|
|
||||||
const { tag }: { tag?: string } = Astro.params;
|
const { tag }: { tag?: string } = Astro.params;
|
||||||
|
|
||||||
const posts = await getCollection('blog', ({ data }) => {
|
const posts = await getCollection("blog", ({ data }) => {
|
||||||
if (!tag) {
|
if (!tag) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (tag === 'all') {
|
if (tag === "all") {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -38,12 +37,12 @@ const posts = await getCollection('blog', ({ data }) => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
if (posts.length === 0) {
|
if (posts.length === 0) {
|
||||||
return Astro.redirect('/404');
|
return Astro.redirect("/404");
|
||||||
}
|
}
|
||||||
|
|
||||||
posts.sort(
|
posts.sort(
|
||||||
(a, b) =>
|
(a, b) =>
|
||||||
Date.parse(String(b.data.pubDate)) - Date.parse(String(a.data.pubDate))
|
Date.parse(String(b.data.pubDate)) - Date.parse(String(a.data.pubDate)),
|
||||||
);
|
);
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -57,7 +56,7 @@ posts.sort(
|
|||||||
<span>
|
<span>
|
||||||
{format(
|
{format(
|
||||||
add(new Date(post.data.pubDate), { hours: 6 }),
|
add(new Date(post.data.pubDate), { hours: 6 }),
|
||||||
'MMM do, y'
|
"MMM do, y",
|
||||||
)}
|
)}
|
||||||
</span>
|
</span>
|
||||||
</li>
|
</li>
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
---
|
---
|
||||||
|
|
||||||
export const prerender = true;
|
export const prerender = true;
|
||||||
|
|
||||||
import { getCollection } from "astro:content";
|
import { getCollection } from "astro:content";
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
---
|
---
|
||||||
|
|
||||||
import Card from "@components/Card.astro";
|
import Card from "@components/Card.astro";
|
||||||
import { projects } from "@data/projects";
|
import { projects } from "@data/projects";
|
||||||
import Layout from "@layouts/Layout.astro";
|
import Layout from "@layouts/Layout.astro";
|
||||||
@@ -17,7 +16,7 @@ const title = "Projects";
|
|||||||
image={project.image}
|
image={project.image}
|
||||||
links={[
|
links={[
|
||||||
{
|
{
|
||||||
label: 'More...',
|
label: "More...",
|
||||||
href: project.link,
|
href: project.link,
|
||||||
newWindow: true,
|
newWindow: true,
|
||||||
},
|
},
|
||||||
|
|||||||
Reference in New Issue
Block a user