reploy/make-search-index.js
2023-06-17 22:53:10 +02:00

40 lines
1.1 KiB
JavaScript

/*
* make-search-index.js
*
* This converts a "search data" file produced by the haskell site builder into
* a lunr.js index and saves it in JSON. Metadata for rendering search output
* (currently titles and tags) are stored separately in an extra file.
*
* Installing dependencies:
* yarnpkg add lunr
*
* Usage:
* site ....some args.... --search-data-output tmp/search-raw.json
* node make-search-index.js tmp/search-raw.json _site/search-index.json _site/search-meta.json
*/
lunr = require("lunr")
fs = require("fs")
if(process.argv.length !== 5) {
console.error('Needs exactly 3 arguments (input json, output index).');
process.exit(1);
}
documents = JSON.parse(fs.readFileSync(process.argv[2], {encoding: 'utf8'}))
var idx = lunr(function () {
this.ref('link')
this.field('title', {boost: 10})
this.field('text')
documents.forEach(function (doc) {
this.add(doc)
}, this)
})
fs.writeFileSync(process.argv[3], JSON.stringify(idx), {encoding: 'utf8'})
fs.writeFileSync(process.argv[4], JSON.stringify(
Object.fromEntries(documents.map(x => [x.link, {"title": x.title, "tags": x.tags}]))
), {encoding: 'utf8'})