From e1da6eb880117e0cc583f2560b56b11faa60af15 Mon Sep 17 00:00:00 2001 From: ThatGuySam Date: Sun, 15 Mar 2026 13:42:07 -0500 Subject: [PATCH] feat(search): add pagefind provider support Add Pagefind indexing and browser search adapters behind a provider switch. This lets prebuild generate either Stork or Pagefind search artifacts and lets the existing search UI run against Pagefind while preserving scoped filters, excerpts, and result metadata. --- .gitignore | 1 + build-lists.js | 18 +++- components/search-stork.vue | 170 +++++++++++++++++++----------- helpers/pagefind/browser.js | 168 +++++++++++++++++++++++++++++ helpers/pagefind/config.js | 5 + helpers/pagefind/index.js | 181 ++++++++++++++++++++++++++++++++ helpers/search/config.js | 18 ++++ package.json | 5 +- pnpm-lock.yaml | 64 +++++++++++ scripts/build-pagefind-index.js | 43 ++++++++ scripts/build-search-index.js | 18 ++++ test/prebuild/pagefind.test.js | 64 +++++++++++ 12 files changed, 690 insertions(+), 65 deletions(-) create mode 100644 helpers/pagefind/browser.js create mode 100644 helpers/pagefind/config.js create mode 100644 helpers/pagefind/index.js create mode 100644 helpers/search/config.js create mode 100644 scripts/build-pagefind-index.js create mode 100644 scripts/build-search-index.js create mode 100644 test/prebuild/pagefind.test.js diff --git a/.gitignore b/.gitignore index 0db839a..1d4390d 100644 --- a/.gitignore +++ b/.gitignore @@ -92,6 +92,7 @@ dist /static/**/*.json /static/**/*.toml /static/**/*.st +/static/pagefind/ /commits-data.json /static/tailwind.css diff --git a/build-lists.js b/build-lists.js index dfce245..bcc6b27 100644 --- a/build-lists.js +++ b/build-lists.js @@ -41,6 +41,12 @@ import { makeSearchableList } from '~/helpers/searchable-list.js' import { writeStorkToml } from '~/helpers/stork/toml.js' +import { + writePagefindIndex +} from '~/helpers/pagefind/index.js' +import { + getSearchProvider +} from '~/helpers/search/config.js' import { KindListMemoized as KindList } from '~/helpers/api/kind.js' @@ -735,9 +741,15 @@ class BuildLists { console.log('Building XML Sitemap') await saveSitemap( sitemapEndpoints.map( ({ route }) => route ) ) - // Save stork toml index - console.log('Building Stork toml index') - await writeStorkToml( sitemapEndpoints ) + const searchProvider = getSearchProvider( process.env.PUBLIC_SEARCH_PROVIDER ) + + if ( searchProvider === 'stork' ) { + console.log('Building Stork toml index') + await writeStorkToml( sitemapEndpoints ) + } else { + console.log('Building Pagefind index') + await writePagefindIndex( sitemapEndpoints ) + } console.log('Total Nuxt Endpoints', this.endpointMaps.nuxt.size ) console.log('Total Eleventy Endpoints', this.endpointMaps.eleventy.size ) diff --git a/components/search-stork.vue b/components/search-stork.vue index 7306e0d..2915f43 100644 --- a/components/search-stork.vue +++ b/components/search-stork.vue @@ -39,7 +39,7 @@ hasActiveFilter( button.query ) ? 'border-opacity-50 bg-darkest' : 'border-opacity-0 neumorphic-shadow-inner' ]" :aria-label="`Filter list by ${button.label}`" - @click="toggleFilter(button.query); queryResults(query)" + @click="toggleFilter(button.query); queryResults()" >{{ button.label }} @@ -151,21 +151,15 @@
-
-
+ v-html="excerptMarkup" + />