mirror of
https://github.com/cupcakearmy/nicco.io.git
synced 2025-04-13 21:12:58 +00:00
54 lines
1.2 KiB
TypeScript
54 lines
1.2 KiB
TypeScript
import lunr from 'lunr'
|
|
import type { RequestHandler } from '@sveltejs/kit'
|
|
import { BaseAttributes, Call, gql, Page } from '$lib/api'
|
|
|
|
function removeHTML(s: string) {
|
|
return s.replace(/<.*?>|\s+|&#\d+;/g, ' ').trim()
|
|
}
|
|
|
|
function convertForIdx(type: string, items: Page[]) {
|
|
const keys: (keyof Page)[] = ['title', 'content', 'slug']
|
|
return items.map((item) => ({
|
|
url: `${type}/${item.slug}`,
|
|
data: keys.map((field) => removeHTML(item[field] ?? '')).join(' '),
|
|
}))
|
|
}
|
|
|
|
async function getAll() {
|
|
const all = await Call<Record<'posts' | 'projects' | 'works', { nodes: Page[] }>>(gql`
|
|
query {
|
|
posts(first: 1000) {
|
|
nodes {
|
|
${BaseAttributes}
|
|
}
|
|
}
|
|
projects(first: 1000) {
|
|
nodes {
|
|
${BaseAttributes}
|
|
}
|
|
}
|
|
works(first: 1000) {
|
|
nodes {
|
|
${BaseAttributes}
|
|
}
|
|
}
|
|
}
|
|
`)
|
|
return all
|
|
}
|
|
|
|
export const get: RequestHandler = async () => {
|
|
const all = await getAll()
|
|
const converted = Object.entries(all)
|
|
.map(([type, data]) => convertForIdx(type, data.nodes))
|
|
.flat()
|
|
|
|
const idx = lunr(function () {
|
|
this.ref('url')
|
|
this.field('data')
|
|
converted.forEach((doc) => this.add(doc))
|
|
})
|
|
|
|
return { body: idx }
|
|
}
|