Poindexter scans a folder for HTML files and indexes each file's content by its relative filename. The full index is output to poindexter.bundle.js
, which can be imported and searched with poindexter or flexsearch.
npx poindexter [HTML folder] -o [output path]
import { client } from "poindexter/runtime";
// loads the poindexter.bundle.json.
// for custom path: `client.init({ path: '/path/to/poindexter.bundle.js' })`
client.init()
// search the index.
client.index.search(query)
To avoid indexing navbars and widgets, Poindexter provide the following options.
contentSelectors An array of selectors. Poindexter tries each selector untill a match is found. Only the content of the first match is indexed. If no match is found, the page is skipped.
IgnoreSelectors An array of selectors. Poindexter removes any elements matching these selectors.
Please refer to the scrape function for more info. Alternatively you can use your own scrape function.
Please refer to the defaults for now.
Thanks to Configent Poindexter can be configured here
- poindexter.config.js
- package.json (create a poindexter field)
- environment
- .env
- command line
- API
Poindexter assumes that title, meta description and meta keywords are available in your HTML. Please refer to defaults If this is not the case, you can create your own resolvers.
Custom resolvers
{
title: $ => 'my website',
description: $ => $('.description') || 'no description',
keywords: $ => $('meta[name=keywords]').attr('content').split(',')
}
Poindexter requires a static site. If you have a SPA, have a look at Spank.
Poindexter can be served from the client, your own backend or a serverless function.
A site like routify.dev with 65 pages, generates a 65 kb bundle after brotli compression.