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.jsimport{Creator,StringItem}from"@openzim/libzim";(async()=>{console.info('Starting');constoutFile="./test.zim";constcreator=newCreator().configNbWorkers(1).configIndexing(true,"en").configClusterSize(2048).startZimCreation(outFile);for(leti=0;i<100;i++){constitem=newStringItem(`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);awaitcreator.addItem(item);}creator.setMainPath("file0");awaitcreator.finishZimCreation();console.log('Done Writing');})();// read.jsimport{Archive,Query,SuggestionSearcher,Searcher}from"@openzim/libzim";(async()=>{constoutFile="./test.zim";constarchive=newArchive(outFile);console.log(`Archive opened: main entry path - ${archive.mainEntry.path}`);for(constentryofarchive.iterByPath()){console.log(`entry: ${entry.path} - ${entry.title}`);}constsuggestionSearcher=newSuggestionSearcher(archive);constsuggestion=suggestionSearcher.suggest('laborum');letresults=suggestion.getResults(0,10);console.log("Suggestion results:");for(constentryofresults){console.log(`\t- ${entry.path} - ${entry.title}`);}constsearcher=newSearcher(archive);constsearch=searcher.search(newQuery('rem'));results=search.getResults(0,10);console.log("Search results:");for(constentryofresults){console.log(`\t- ${entry.path} - ${entry.title}`);}constentry=archive.getEntryByPath("A/laborum");constitem=entry.item;constblob=item.data;console.info(`Entry by url (laborum):`,blob.data);})();.env - Set environment variables for local development. Only LIBZIM_VERSION for now
bindings.gyp - Node-gyp build configuration file
src/ - Source code for the Node.js bindings
test/ - Test cases
git clone git@github.com:openzim/node-libzim.git
cd node-libzim
# Will install dependencies, download libzim binary and build the bindings
npm run install
# Required in order for local binding and tests to work.export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$PWD/download/lib/x86_64-linux-gnuMake your changes in src/ and then run:
node-gyp rebuild --debug -v && npx jest ./test/zim.test.tsTo update the libzim version used, change the LIBZIM_VERSION variable in
.env file to the desired version and run:
npm run installIf you are upgrading libzim from a major version you will need to edit the bundle-libzim.js file
and change the libzim.so* file names to match the new version.