@mieweb/wikigdrive
Version:
Google Drive to MarkDown synchronization
42 lines (33 loc) • 915 B
text/typescript
import lunr from 'lunr';
import stemmerSupport from 'lunr-languages/lunr.stemmer.support.js';
stemmerSupport(lunr);
lunr.tokenizer.separator = /[\s-_@#,.]+/;
export class LunrIndexer {
private lunrBuilder: lunr.Builder;
private store;
constructor() {
this.lunrBuilder = new lunr.Builder();
this.lunrBuilder.ref('path');
this.lunrBuilder.field('id2', { extractor: (doc) => {
return doc['id'] ? doc['id'].replace(/[_-]*/g, '') : undefined;
}});
this.lunrBuilder.field('id');
this.lunrBuilder.field('title');
this.store = {};
}
async addPage(page) {
this.lunrBuilder.add({
path: page.path,
title: page.title,
id: page.id
});
this.store[page.path] = {
title: page.title,
id: page.id
};
}
getJson() {
const lunrIndex = this.lunrBuilder.build();
return { index: lunrIndex.toJSON(), store: this.store };
}
}