This is the Node.js binding to the libzim. Read and write ZIM files easily in Javascript.
This package relies on node-addon-api / n-api.
On GNU/Linux & macOS, the package will download a libzim
binary. On
other OSes you will need to install libzim
separately (see
here).
npm i @openzim/libzim
// write.js
import { Creator, StringItem } from "@openzim/libzim";
(async () => {
console.info('Starting');
const outFile = "./test.zim";
const creator = new Creator()
.configNbWorkers(1)
.configIndexing(true, "en")
.configClusterSize(2048)
.startZimCreation(outFile);
for (let i = 0; i < 100; i++) {
const item = new StringItem(
`file${i}`, // path url
"text/plain", // content-type
`Title ${i}`, // title
{FRONT_ARTICLE: 1, COMPRESS: 1}, // hint option flags
`<h1>Content / Data ${i}</h1>` // content
);
await creator.addItem(item);
}
creator.setMainPath("file0");
await creator.finishZimCreation();
console.log('Done Writing');
})();
// read.js
import { Archive, SuggestionSearcher, Searcher } from "@openzim/libzim";
(async () => {
const outFile = "./test.zim";
const archive = new Archive(outFile);
console.log(`Archive opened: main entry path - ${archive.mainEntry.path}`);
for (const entry of archive.iterByPath()) {
console.log(`entry: ${entry.path} - ${entry.title}`);
}
const suggestionSearcher = new SuggestionSearcher(archive);
const suggestion = suggestionSearcher.suggest('laborum');
let results = suggestion.getResults(0, 10);
console.log("Suggestion results:");
for(const entry of results) {
console.log(`\t- ${entry.path} - ${entry.title}`);
}
const searcher = new Searcher(archive);
const search = searcher.search(new Query('rem'));
results = search.getResults(0, 10);
console.log("Search results:");
for(const entry of results) {
console.log(`\t- ${entry.path} - ${entry.title}`);
}
const entry = await archive.getEntryByPath("A/laborum");
const item = entry.item;
const blob = item.data;
console.info(`Entry by url (laborum):`, blob.data);
delete archive;
})();