Skip to content

Commit 0ec657c

Browse files
authored
Merge pull request #12 from htmlhint/dev/coliff/switch-to-astro-build
Initial Astro project setup and cleanup
2 parents 2af721d + 9fa96b4 commit 0ec657c

File tree

153 files changed

+8867
-9847
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

153 files changed

+8867
-9847
lines changed

.astro/content-assets.mjs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
export default new Map();

.astro/content-modules.mjs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
export default new Map();

.astro/content.d.ts

Lines changed: 199 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,199 @@
1+
declare module 'astro:content' {
2+
export interface RenderResult {
3+
Content: import('astro/runtime/server/index.js').AstroComponentFactory;
4+
headings: import('astro').MarkdownHeading[];
5+
remarkPluginFrontmatter: Record<string, any>;
6+
}
7+
interface Render {
8+
'.md': Promise<RenderResult>;
9+
}
10+
11+
export interface RenderedContent {
12+
html: string;
13+
metadata?: {
14+
imagePaths: Array<string>;
15+
[key: string]: unknown;
16+
};
17+
}
18+
}
19+
20+
declare module 'astro:content' {
21+
type Flatten<T> = T extends { [K: string]: infer U } ? U : never;
22+
23+
export type CollectionKey = keyof AnyEntryMap;
24+
export type CollectionEntry<C extends CollectionKey> = Flatten<AnyEntryMap[C]>;
25+
26+
export type ContentCollectionKey = keyof ContentEntryMap;
27+
export type DataCollectionKey = keyof DataEntryMap;
28+
29+
type AllValuesOf<T> = T extends any ? T[keyof T] : never;
30+
type ValidContentEntrySlug<C extends keyof ContentEntryMap> = AllValuesOf<
31+
ContentEntryMap[C]
32+
>['slug'];
33+
34+
export type ReferenceDataEntry<
35+
C extends CollectionKey,
36+
E extends keyof DataEntryMap[C] = string,
37+
> = {
38+
collection: C;
39+
id: E;
40+
};
41+
export type ReferenceContentEntry<
42+
C extends keyof ContentEntryMap,
43+
E extends ValidContentEntrySlug<C> | (string & {}) = string,
44+
> = {
45+
collection: C;
46+
slug: E;
47+
};
48+
export type ReferenceLiveEntry<C extends keyof LiveContentConfig['collections']> = {
49+
collection: C;
50+
id: string;
51+
};
52+
53+
/** @deprecated Use `getEntry` instead. */
54+
export function getEntryBySlug<
55+
C extends keyof ContentEntryMap,
56+
E extends ValidContentEntrySlug<C> | (string & {}),
57+
>(
58+
collection: C,
59+
// Note that this has to accept a regular string too, for SSR
60+
entrySlug: E,
61+
): E extends ValidContentEntrySlug<C>
62+
? Promise<CollectionEntry<C>>
63+
: Promise<CollectionEntry<C> | undefined>;
64+
65+
/** @deprecated Use `getEntry` instead. */
66+
export function getDataEntryById<C extends keyof DataEntryMap, E extends keyof DataEntryMap[C]>(
67+
collection: C,
68+
entryId: E,
69+
): Promise<CollectionEntry<C>>;
70+
71+
export function getCollection<C extends keyof AnyEntryMap, E extends CollectionEntry<C>>(
72+
collection: C,
73+
filter?: (entry: CollectionEntry<C>) => entry is E,
74+
): Promise<E[]>;
75+
export function getCollection<C extends keyof AnyEntryMap>(
76+
collection: C,
77+
filter?: (entry: CollectionEntry<C>) => unknown,
78+
): Promise<CollectionEntry<C>[]>;
79+
80+
export function getLiveCollection<C extends keyof LiveContentConfig['collections']>(
81+
collection: C,
82+
filter?: LiveLoaderCollectionFilterType<C>,
83+
): Promise<
84+
import('astro').LiveDataCollectionResult<LiveLoaderDataType<C>, LiveLoaderErrorType<C>>
85+
>;
86+
87+
export function getEntry<
88+
C extends keyof ContentEntryMap,
89+
E extends ValidContentEntrySlug<C> | (string & {}),
90+
>(
91+
entry: ReferenceContentEntry<C, E>,
92+
): E extends ValidContentEntrySlug<C>
93+
? Promise<CollectionEntry<C>>
94+
: Promise<CollectionEntry<C> | undefined>;
95+
export function getEntry<
96+
C extends keyof DataEntryMap,
97+
E extends keyof DataEntryMap[C] | (string & {}),
98+
>(
99+
entry: ReferenceDataEntry<C, E>,
100+
): E extends keyof DataEntryMap[C]
101+
? Promise<DataEntryMap[C][E]>
102+
: Promise<CollectionEntry<C> | undefined>;
103+
export function getEntry<
104+
C extends keyof ContentEntryMap,
105+
E extends ValidContentEntrySlug<C> | (string & {}),
106+
>(
107+
collection: C,
108+
slug: E,
109+
): E extends ValidContentEntrySlug<C>
110+
? Promise<CollectionEntry<C>>
111+
: Promise<CollectionEntry<C> | undefined>;
112+
export function getEntry<
113+
C extends keyof DataEntryMap,
114+
E extends keyof DataEntryMap[C] | (string & {}),
115+
>(
116+
collection: C,
117+
id: E,
118+
): E extends keyof DataEntryMap[C]
119+
? string extends keyof DataEntryMap[C]
120+
? Promise<DataEntryMap[C][E]> | undefined
121+
: Promise<DataEntryMap[C][E]>
122+
: Promise<CollectionEntry<C> | undefined>;
123+
export function getLiveEntry<C extends keyof LiveContentConfig['collections']>(
124+
collection: C,
125+
filter: string | LiveLoaderEntryFilterType<C>,
126+
): Promise<import('astro').LiveDataEntryResult<LiveLoaderDataType<C>, LiveLoaderErrorType<C>>>;
127+
128+
/** Resolve an array of entry references from the same collection */
129+
export function getEntries<C extends keyof ContentEntryMap>(
130+
entries: ReferenceContentEntry<C, ValidContentEntrySlug<C>>[],
131+
): Promise<CollectionEntry<C>[]>;
132+
export function getEntries<C extends keyof DataEntryMap>(
133+
entries: ReferenceDataEntry<C, keyof DataEntryMap[C]>[],
134+
): Promise<CollectionEntry<C>[]>;
135+
136+
export function render<C extends keyof AnyEntryMap>(
137+
entry: AnyEntryMap[C][string],
138+
): Promise<RenderResult>;
139+
140+
export function reference<C extends keyof AnyEntryMap>(
141+
collection: C,
142+
): import('astro/zod').ZodEffects<
143+
import('astro/zod').ZodString,
144+
C extends keyof ContentEntryMap
145+
? ReferenceContentEntry<C, ValidContentEntrySlug<C>>
146+
: ReferenceDataEntry<C, keyof DataEntryMap[C]>
147+
>;
148+
// Allow generic `string` to avoid excessive type errors in the config
149+
// if `dev` is not running to update as you edit.
150+
// Invalid collection names will be caught at build time.
151+
export function reference<C extends string>(
152+
collection: C,
153+
): import('astro/zod').ZodEffects<import('astro/zod').ZodString, never>;
154+
155+
type ReturnTypeOrOriginal<T> = T extends (...args: any[]) => infer R ? R : T;
156+
type InferEntrySchema<C extends keyof AnyEntryMap> = import('astro/zod').infer<
157+
ReturnTypeOrOriginal<Required<ContentConfig['collections'][C]>['schema']>
158+
>;
159+
160+
type ContentEntryMap = {
161+
162+
};
163+
164+
type DataEntryMap = {
165+
166+
};
167+
168+
type AnyEntryMap = ContentEntryMap & DataEntryMap;
169+
170+
type ExtractLoaderTypes<T> = T extends import('astro/loaders').LiveLoader<
171+
infer TData,
172+
infer TEntryFilter,
173+
infer TCollectionFilter,
174+
infer TError
175+
>
176+
? { data: TData; entryFilter: TEntryFilter; collectionFilter: TCollectionFilter; error: TError }
177+
: { data: never; entryFilter: never; collectionFilter: never; error: never };
178+
type ExtractDataType<T> = ExtractLoaderTypes<T>['data'];
179+
type ExtractEntryFilterType<T> = ExtractLoaderTypes<T>['entryFilter'];
180+
type ExtractCollectionFilterType<T> = ExtractLoaderTypes<T>['collectionFilter'];
181+
type ExtractErrorType<T> = ExtractLoaderTypes<T>['error'];
182+
183+
type LiveLoaderDataType<C extends keyof LiveContentConfig['collections']> =
184+
LiveContentConfig['collections'][C]['schema'] extends undefined
185+
? ExtractDataType<LiveContentConfig['collections'][C]['loader']>
186+
: import('astro/zod').infer<
187+
Exclude<LiveContentConfig['collections'][C]['schema'], undefined>
188+
>;
189+
type LiveLoaderEntryFilterType<C extends keyof LiveContentConfig['collections']> =
190+
ExtractEntryFilterType<LiveContentConfig['collections'][C]['loader']>;
191+
type LiveLoaderCollectionFilterType<C extends keyof LiveContentConfig['collections']> =
192+
ExtractCollectionFilterType<LiveContentConfig['collections'][C]['loader']>;
193+
type LiveLoaderErrorType<C extends keyof LiveContentConfig['collections']> = ExtractErrorType<
194+
LiveContentConfig['collections'][C]['loader']
195+
>;
196+
197+
export type ContentConfig = typeof import("./../src/content.config.mjs");
198+
export type LiveContentConfig = never;
199+
}

.astro/data-store.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
[["Map",1,2],"meta::meta",["Map",3,4,5,6],"astro-version","5.12.0","astro-config-digest","{\"root\":{},\"srcDir\":{},\"publicDir\":{},\"outDir\":{},\"cacheDir\":{},\"site\":\"https://playground.htmlhint.com\",\"compressHTML\":true,\"base\":\"/\",\"trailingSlash\":\"ignore\",\"output\":\"static\",\"scopedStyleStrategy\":\"attribute\",\"build\":{\"format\":\"directory\",\"client\":{},\"server\":{},\"assets\":\"_astro\",\"serverEntry\":\"entry.mjs\",\"redirects\":true,\"inlineStylesheets\":\"auto\",\"concurrency\":1},\"server\":{\"open\":false,\"host\":false,\"port\":4321,\"streaming\":true,\"allowedHosts\":[]},\"redirects\":{},\"image\":{\"endpoint\":{\"route\":\"/_image\"},\"service\":{\"entrypoint\":\"astro/assets/services/sharp\",\"config\":{}},\"domains\":[],\"remotePatterns\":[],\"responsiveStyles\":false},\"devToolbar\":{\"enabled\":true},\"markdown\":{\"syntaxHighlight\":{\"type\":\"shiki\",\"excludeLangs\":[\"math\"]},\"shikiConfig\":{\"langs\":[],\"langAlias\":{},\"theme\":\"github-dark\",\"themes\":{},\"wrap\":false,\"transformers\":[]},\"remarkPlugins\":[],\"rehypePlugins\":[],\"remarkRehype\":{},\"gfm\":true,\"smartypants\":true},\"security\":{\"checkOrigin\":true},\"env\":{\"schema\":{},\"validateSecrets\":false},\"experimental\":{\"clientPrerender\":false,\"contentIntellisense\":false,\"headingIdCompat\":false,\"preserveScriptOrder\":false,\"liveContentCollections\":false,\"csp\":false,\"rawEnvValues\":false},\"legacy\":{\"collections\":false}}"]

.astro/settings.json

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
{
2+
"_variables": {
3+
"lastUpdateCheck": 1753078438149
4+
}
5+
}

.astro/types.d.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
/// <reference types="astro/client" />

.cursor/rules/general.mdc

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,3 +12,4 @@ alwaysApply: true
1212
- Use latest Astro for building the website.
1313
- Locally host JS/CSS - don't use third-party CDNs.
1414
- All HTML must be accessible.
15+
- Use Bootstrap utility CSS classes for styling rather than custom CSS.

.eslintrc.cjs

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
module.exports = {
2+
extends: [
3+
'eslint:recommended',
4+
'@astrojs/eslint-config',
5+
'@typescript-eslint/recommended'
6+
],
7+
parser: '@typescript-eslint/parser',
8+
plugins: ['@typescript-eslint'],
9+
root: true,
10+
env: {
11+
node: true,
12+
browser: true,
13+
es2022: true
14+
}
15+
};

.github/copilot-instructions.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
- All code should be formatted with Prettier.
66
- Use ESLint v8.57.1 to check for JavaScript errors.
77
- Node v22 is used for development.
8-
- Use Bootstrap v5.3.0 for styling.
8+
- Use Bootstrap v5.3.7 for styling.
99
- Use latest Astro for building the website.
1010
- Locally host JS/CSS - don't use third-party CDNs.
1111
- All HTML must be accessible.

.gitignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1 +1,3 @@
1+
dist/
12
node_modules/
3+
public/

0 commit comments

Comments
 (0)