Skip to content

Commit 3efd99c

Browse files
committed
chore: fix typecheck
1 parent ab9ed1d commit 3efd99c

File tree

14 files changed

+90
-134
lines changed

14 files changed

+90
-134
lines changed

docs/src/pages/og/[...slug].ts

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,16 @@
11
import { OGImageRoute } from 'astro-og-canvas'
22

3+
// eslint-disable-next-line ts/ban-ts-comment
4+
// @ts-ignore
35
import { paths } from 'node_modules/astro-vitesse/src/utils/routing'
46

5-
const pages = Object.fromEntries(paths.map(({ params: { slug }, props: {
7+
const pages = Object.fromEntries(paths.map(({ params: {
8+
// eslint-disable-next-line ts/ban-ts-comment
9+
// @ts-ignore
10+
slug,
11+
}, props: {
12+
// eslint-disable-next-line ts/ban-ts-comment
13+
// @ts-ignore
614
entry,
715
} }) => {
816
return [!slug ? 'index' : slug, entry?.data]

src/components/ListPosts.astro

Lines changed: 46 additions & 87 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,17 @@
11
---
2-
import { CollectionEntry } from 'astro:content'
2+
import type { InferEntrySchema } from 'astro:content'
33
import { formatDate } from '../logics'
44
import { slugToLocaleData } from '../utils/slugs'
55
import { ensureLeadingSlash, stripLeadingSlash } from '../utils/path'
6-
import { getLocaleRoutes, Route, VitessePagesEntry } from '../utils/routing'
6+
import { getLocaleRoutes, type Route } from '../utils/routing'
77
import { generateVitessePageRouteData } from '../utils/vitesse-page'
88
99
export interface Props {
1010
startsWith?: string
11-
items?: CollectionEntry<'pages'>['data'][]
11+
items?: InferEntrySchema<'pages'>[]
1212
}
1313
14-
let { startsWith = 'posts/', items: pagesProps } = Astro.props
14+
const { startsWith = 'posts/', items: pagesProps } = Astro.props
1515
1616
let pagesCollection: Route[] = []
1717
@@ -23,29 +23,29 @@ if (!pagesProps?.length) {
2323
pagesCollection = routes
2424
}
2525
26-
const newPagePros = [...(pagesProps || [])].map(async (page) => {
27-
const { entry, slug, id, entryMeta, dir, lang, locale } = await generateVitessePageRouteData({
28-
url: Astro.url,
29-
props: {
30-
frontmatter: page,
31-
lang: localeData.locale,
32-
},
33-
})
34-
35-
return {
36-
entry,
37-
slug,
38-
id,
39-
entryMeta,
40-
dir,
41-
lang,
42-
locale,
43-
}
44-
})
45-
46-
pagesProps = await Promise.all(newPagePros)
47-
48-
const pages: Route[] = [...((pagesProps.length ? pagesProps : null) || pagesCollection)]
26+
const newPagePros: Route[] = await Promise.all(
27+
[...(pagesProps || [])].map(async (page) => {
28+
const { entry, slug, id, entryMeta, dir, lang, locale } = await generateVitessePageRouteData({
29+
url: Astro.url,
30+
props: {
31+
frontmatter: page,
32+
lang: localeData.locale,
33+
},
34+
})
35+
36+
return {
37+
entry,
38+
slug,
39+
id,
40+
entryMeta,
41+
dir,
42+
lang,
43+
locale,
44+
}
45+
}),
46+
)
47+
48+
const pages: Route[] = [...((newPagePros?.length ? newPagePros : null) || pagesCollection)]
4949
.sort((a, b) => +new Date(b.entry.data.date!) - +new Date(a.entry.data.date!))
5050
.map((page) => ({
5151
...page,
@@ -61,51 +61,31 @@ const pages: Route[] = [...((pagesProps.length ? pagesProps : null) || pagesColl
6161
const getYear = (a: Date | string | number) => new Date(a).getFullYear()
6262
const isFuture = (a?: Date | string | number) => a && new Date(a) > new Date()
6363
const isSameYear = (a?: Date | string | number, b?: Date | string | number) => a && b && getYear(a) === getYear(b)
64-
function isSameGroup(a: VitessePagesEntry, b?: VitessePagesEntry) {
64+
function isSameGroup(a: InferEntrySchema<'pages'>, b?: InferEntrySchema<'pages'>) {
6565
return isFuture(a.date) === isFuture(b?.date) && isSameYear(a.date, b?.date)
6666
}
6767
68-
function getGroupName(p: VitessePagesEntry) {
68+
function getGroupName(p: InferEntrySchema<'pages'>) {
6969
if (isFuture(p.date)) return 'Upcoming'
7070
return getYear(p.date!)
7171
}
7272
---
7373

7474
<ul>
75-
{
76-
!pages.length && (
77-
<div py2 op50>
78-
{'{ nothing here yet }'}
79-
</div>
80-
)
81-
}
75+
{!pages.length && <div class="py2 op50">{'{ nothing here yet }'}</div>}
8276

8377
{
8478
pages.map(({ entry: { data }, isFallback, entryMeta }, idx) => (
8579
<>
8680
{!isSameGroup(data, pages[idx - 1]?.entry.data) && (
8781
<div
88-
select-none
89-
relative
90-
h20
91-
pointer-events-none
92-
slide-enter
82+
class="select-none relative h20 pointer-events-none slide-enter"
9383
style={{
9484
'--enter-stage': idx - 2,
9585
'--enter-step': '60ms',
9686
}}
9787
>
98-
<span
99-
text-8em
100-
color-transparent
101-
absolute
102-
left--3rem
103-
top--2rem
104-
font-bold
105-
text-stroke-2
106-
text-stroke-hex-aaa
107-
op10
108-
>
88+
<span class="text-8em color-transparent absolute left--3rem top--2rem font-bold text-stroke-2 text-stroke-hex-aaa op10">
10989
{getGroupName(data)}
11090
</span>
11191
</div>
@@ -121,12 +101,12 @@ function getGroupName(p: VitessePagesEntry) {
121101
href={data.path}
122102
class="item block font-normal mb-6 mt-2 no-underline"
123103
{...{
124-
target: data.path.startsWith('http') ? '_blank' : undefined,
125-
rel: data.path.startsWith('http') ? 'noopener noreferrer' : undefined,
104+
target: data.path?.startsWith('http') ? '_blank' : undefined,
105+
rel: data.path?.startsWith('http') ? 'noopener noreferrer' : undefined,
126106
}}
127107
>
128-
<li class="no-underline" flex="~ col md:row gap-2 md:items-center">
129-
<div class="title text-lg leading-1.2em" flex="~ gap-2 wrap">
108+
<li class="no-underline flex:(~ col md:row gap-2 md:items-center)">
109+
<div class="title text-lg leading-1.2em flex:(~ gap-2 wrap)">
130110
{isFallback && (
131111
<span
132112
align-middle
@@ -140,37 +120,20 @@ function getGroupName(p: VitessePagesEntry) {
140120
<span align-middle>{data.title}</span>
141121

142122
{data.redirect && (
143-
<span align-middle op50 flex-none text-xs ml--1.5 i-carbon-arrow-up-right title="External" />
123+
<span class="align-middle op50 flex-none text-xs ml--1.5 i-carbon-arrow-up-right" title="External" />
144124
)}
145125
</div>
146126

147-
<div flex="~ gap-2 items-center">
148-
{data.inperson && <span align-middle op50 flex-none i-ri:group-2-line title="In person" />}
127+
<div class="flex:(~ gap-2 items-center)">
128+
{data.inperson && <span class="align-middle op50 flex-none i-ri:group-2-line" title="In person" />}
149129
{(data.recording || data.video) && (
150-
<span align-middle op50 flex-none i-ri:film-line title="Provided in video" />
151-
)}
152-
{data.radio && <span align-middle op50 flex-none i-ri:radio-line title="Provided in radio" />}
153-
<span text-sm op50 ws-nowrap>
154-
{formatDate(data.date!, true)}
155-
</span>
156-
{data.duration && (
157-
<span text-sm op40 ws-nowrap>
158-
{' '}
159-
· {data.duration}
160-
</span>
161-
)}
162-
{data.platform && (
163-
<span text-sm op40 ws-nowrap>
164-
{' '}
165-
· {data.platform}
166-
</span>
167-
)}
168-
{data.place && (
169-
<span text-sm op40 ws-nowrap md:hidden>
170-
{' '}
171-
· {data.place}
172-
</span>
130+
<span class="align-middle op50 flex-none i-ri:film-line" title="Provided in video" />
173131
)}
132+
{data.radio && <span class="align-middle op50 flex-none i-ri:radio-line" title="Provided in radio" />}
133+
<span class="text-sm op50 ws-nowrap">{formatDate(data.date!, true)}</span>
134+
{data.duration && <span class="text-sm op40 ws-nowrap"> · {data.duration}</span>}
135+
{data.platform && <span class="text-sm op40 ws-nowrap"> · {data.platform}</span>}
136+
{data.place && <span class="text-sm op40 ws-nowrap md:hidden"> · {data.place}</span>}
174137

175138
{isFallback && (
176139
<span
@@ -183,11 +146,7 @@ function getGroupName(p: VitessePagesEntry) {
183146
)}
184147
</div>
185148
</li>
186-
{data.place && (
187-
<div op50 text-sm hidden mt--2 md:block>
188-
{data.place}
189-
</div>
190-
)}
149+
{data.place && <div class="op50 text-sm hidden mt--2 md:block">{data.place}</div>}
191150
</a>
192151
</div>
193152
</>

src/components/ListProjects.astro

Lines changed: 3 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -24,31 +24,15 @@ const { projects } = Astro.props
2424
<div slide-enter style={{ '--enter-stage': cidx + 1 }}>
2525
<div
2626
id={slug(key)}
27-
select-none
28-
relative
29-
h20
30-
pointer-events-none
31-
slide-enter
27+
class="select-none relative h20 pointer-events-none slide-enter"
3228
style={{ '--enter-stage': cidx - 2, '--enter-step': '60ms' }}
3329
>
34-
<span
35-
text-5em
36-
color-transparent
37-
absolute
38-
left--1rem
39-
top-0rem
40-
font-bold
41-
leading-1em
42-
text-stroke-1.5
43-
text-stroke-hex-aaa
44-
op35
45-
dark:op20
46-
>
30+
<span class="text-5em color-transparent absolute left--1rem top-0rem font-bold leading-1em text-stroke-1.5 text-stroke-hex-aaa op35 dark:op20">
4731
{key}
4832
</span>
4933
</div>
5034

51-
<div class="project-grid mx-auto max-w-500 w-max py-2" grid="~ cols-1 md:cols-2 gap-4 lg:cols-3">
35+
<div class="project-grid mx-auto max-w-500 w-max py-2 grid:(~ cols-1 md:cols-2 gap-4 lg:cols-3)">
5236
{projects[key].map((item) => (
5337
<a href={item.link} target="_blank" class="item relative flex items-center" title={item.name}>
5438
<div class="pr-5 pt-2">

src/components/Page.astro

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@ import 'virtual:vitesse/user-css'
1919
---
2020

2121
<script is:inline>
22+
// eslint-disable-next-line ts/ban-ts-comment
23+
// @ts-nocheck
2224
// eslint-disable-next-line ts/explicit-function-return-type
2325
function setDarkMode(document) {
2426
const prefersDark = window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches

src/components/SubNav.astro

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ const subNavBar = getSubNavbarFromConfig(config.subNavBar, url.pathname, localeD
1010
---
1111

1212
<div class="prose m-auto mb-8 select-none animate-none! op100!">
13-
<div mb-0 flex="~ col gap-1 sm:row sm:gap-3 wrap" text-3xl>
13+
<div class="mb-0 flex:(~ col gap-1 sm:row sm:gap-3 wrap) text-3xl">
1414
{
1515
subNavBar.map((subNavLink) => (
1616
<a

src/components/Toc.astro

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
---
2-
import { TocHeading } from '../utils/toc'
2+
import type { TocHeading } from '../utils/toc'
33
import TocItem from './TocItem.astro'
44
55
export interface Props {

src/components/TocItem.astro

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
---
2-
import { TocHeading } from '../utils/toc'
2+
import type { TocHeading } from '../utils/toc'
33
44
export type Props = TocHeading
55

src/routes/static/404.astro

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,12 @@ const fallbackEntry: VitessePagesEntry = {
2727
head: [],
2828
subtitle: t('404.text'),
2929
draft: false,
30+
layoutFullWidth: false,
31+
tocAlwaysOn: false,
32+
inperson: false,
33+
recording: false,
34+
radio: false,
35+
video: false,
3036
},
3137
render: async () => ({
3238
Content: EmptyContent,

src/utils/route-data.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import { getNavBar, type NavBarEntry } from './navigation'
66
import { generateToc, type TocHeading } from './toc'
77

88
export interface PageProps extends Route {
9-
9+
headings: TocHeading[]
1010
}
1111

1212
export interface VitesseRouteData extends Route {

src/utils/routing.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ const pages: VitessePagesEntry[] = (
5353
// In production, filter out drafts.
5454
return import.meta.env.MODE !== 'production' || data.draft === false
5555
})) ?? []
56-
).map(({ slug, ...entry }: { slug: string, [key: string]: any }) => ({
56+
).map(({ slug, ...entry }) => ({
5757
...entry,
5858
slug: normalizeIndexSlug(slug),
5959
}))

src/utils/vitesse-page.ts

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -23,11 +23,12 @@ import { slugToLocaleData, urlToSlug } from './slugs'
2323
* The frontmatter schema for Vitesse pages cannot include some properties which will be omitted
2424
* and some others needs to be refined to a stricter type.
2525
*/
26-
async function VitessePageFrontmatterSchema(context: SchemaContext): Promise<z.ZodEffects<z.ZodObject<any>>> {
26+
// eslint-disable-next-line ts/explicit-function-return-type
27+
async function VitessePageFrontmatterSchema(context: SchemaContext) {
2728
const userPagesSchema = await getUserPagesSchema()
2829
const schema = typeof userPagesSchema === 'function' ? userPagesSchema(context) : userPagesSchema
2930

30-
return schema.transform((frontmatter: any) => {
31+
return schema.transform((frontmatter) => {
3132
/**
3233
* Vitesse pages can only be edited if an edit URL is explicitly provided.
3334
* The `navBar` frontmatter prop only works for pages in an autogenerated links group.
@@ -46,8 +47,7 @@ async function VitessePageFrontmatterSchema(context: SchemaContext): Promise<z.Z
4647
* @see VitessePageFrontmatter
4748
* @see https://github.com/colinhacks/zod#intersections
4849
*/
49-
const { ...others } = frontmatter
50-
return { ...others }
50+
return frontmatter
5151
})
5252
}
5353

@@ -75,9 +75,10 @@ function validateNavBarProp(navBarProp: VitesseUserConfig['navBar']): VitesseCon
7575
export type VitessePageProps = Prettify<
7676
// Remove the index signature from `Route`, omit undesired properties and make the rest optional.
7777
Partial<Omit<RemoveIndexSignature<PageProps>, 'entry' | 'entryMeta' | 'id' | 'locale' | 'slug'>> &
78-
{
78+
// Add the sidebar definitions for a Starlight page.
79+
Partial<Pick<VitesseRouteData, 'hasToc'>> & {
7980
navBar?: VitesseUserConfig['navBar']
80-
// And finally add the Vitesse page frontmatter properties in a `frontmatter` property.
81+
// And finally add the Starlight page frontmatter properties in a `frontmatter` property.
8182
frontmatter: VitessePageFrontmatter
8283
}
8384
>
@@ -119,9 +120,6 @@ export async function generateVitessePageRouteData({
119120
collection: 'pages',
120121
data: {
121122
...pageFrontmatter,
122-
navBar: {
123-
attrs: {},
124-
},
125123
},
126124
}
127125
const entry = pagePagesEntry as unknown as VitessePagesEntry
@@ -140,6 +138,8 @@ export async function generateVitessePageRouteData({
140138
siteTitle: getSiteTitle(localeData.lang),
141139
siteTitleHref: getSiteTitleHref(localeData.locale),
142140
slug,
141+
headins: props.headings ?? [],
142+
hasToc: props.hasToc ?? false,
143143
}
144144
if (isFallback) {
145145
routeData.isFallback = true
@@ -148,7 +148,8 @@ export async function generateVitessePageRouteData({
148148
}
149149

150150
/** Validates the Vitesse page frontmatter properties from the props received by a Vitesse page. */
151-
async function getVitessePageFrontmatter(frontmatter: VitessePageFrontmatter): Promise<z.infer<typeof schema>> {
151+
// eslint-disable-next-line ts/explicit-function-return-type
152+
async function getVitessePageFrontmatter(frontmatter: VitessePageFrontmatter) {
152153
// This needs to be in sync with ImageMetadata.
153154
// https://github.com/withastro/astro/blob/cf993bc263b58502096f00d383266cd179f331af/packages/astro/src/assets/types.ts#L32
154155
const schema = await VitessePageFrontmatterSchema({

0 commit comments

Comments
 (0)