86 lines
3.0 KiB
JavaScript
86 lines
3.0 KiB
JavaScript
|
import { dirname, join, default as pathModule } from 'path';
|
||
|
import { fileURLToPath } from 'url';
|
||
|
import loadNAPI from 'node-gyp-build-optional-packages';
|
||
|
export let Env, Txn, Dbi, Compression, Cursor, getAddress, getBufferAddress, createBufferForAddress, clearKeptObjects, globalBuffer, setGlobalBuffer, arch, fs, os, onExit, tmpdir, lmdbError, path, EventEmitter, orderedBinary, MsgpackrEncoder, WeakLRUCache, setEnvMap, getEnvMap, getByBinary, detachBuffer, startRead, setReadCallback, write, position, iterate, prefetch, resetTxn, getCurrentValue, getCurrentShared, getStringByBinary, getSharedByBinary, getSharedBuffer, compress;
|
||
|
path = pathModule;
|
||
|
let dirName = dirname(fileURLToPath(import.meta.url)).replace(/dist$/, '');
|
||
|
export let nativeAddon = loadNAPI(dirName);
|
||
|
|
||
|
if (process.isBun && false) {
|
||
|
const { linkSymbols, FFIType } = require('bun:ffi');
|
||
|
let lmdbLib = linkSymbols({
|
||
|
getByBinary: {
|
||
|
args: [FFIType.f64, FFIType.u32],
|
||
|
returns: FFIType.u32,
|
||
|
ptr: nativeAddon.getByBinaryPtr
|
||
|
},
|
||
|
iterate: {
|
||
|
args: [FFIType.f64],
|
||
|
returns: FFIType.i32,
|
||
|
ptr: nativeAddon.iteratePtr,
|
||
|
},
|
||
|
position: {
|
||
|
args: [FFIType.f64, FFIType.u32, FFIType.u32, FFIType.u32, FFIType.f64],
|
||
|
returns: FFIType.i32,
|
||
|
ptr: nativeAddon.positionPtr,
|
||
|
},
|
||
|
write: {
|
||
|
args: [FFIType.f64, FFIType.f64],
|
||
|
returns: FFIType.i32,
|
||
|
ptr: nativeAddon.writePtr,
|
||
|
},
|
||
|
resetTxn: {
|
||
|
args: [FFIType.f64],
|
||
|
returns: FFIType.void,
|
||
|
ptr: nativeAddon.resetTxnPtr,
|
||
|
}
|
||
|
});
|
||
|
for (let key in lmdbLib.symbols) {
|
||
|
nativeAddon[key] = lmdbLib.symbols[key].native;
|
||
|
}
|
||
|
}
|
||
|
setNativeFunctions(nativeAddon);
|
||
|
|
||
|
export function setNativeFunctions(externals) {
|
||
|
Env = externals.Env;
|
||
|
Txn = externals.Txn;
|
||
|
Dbi = externals.Dbi;
|
||
|
Compression = externals.Compression;
|
||
|
getAddress = externals.getAddress;
|
||
|
getBufferAddress = externals.getBufferAddress;
|
||
|
createBufferForAddress = externals.createBufferForAddress;
|
||
|
clearKeptObjects = externals.clearKeptObjects || function() {};
|
||
|
getByBinary = externals.getByBinary;
|
||
|
detachBuffer = externals.detachBuffer;
|
||
|
startRead = externals.startRead;
|
||
|
setReadCallback = externals.setReadCallback;
|
||
|
setGlobalBuffer = externals.setGlobalBuffer;
|
||
|
globalBuffer = externals.globalBuffer;
|
||
|
getSharedBuffer = externals.getSharedBuffer;
|
||
|
prefetch = externals.prefetch;
|
||
|
iterate = externals.iterate;
|
||
|
position = externals.position;
|
||
|
resetTxn = externals.resetTxn;
|
||
|
getCurrentValue = externals.getCurrentValue;
|
||
|
getCurrentShared = externals.getCurrentShared;
|
||
|
getStringByBinary = externals.getStringByBinary;
|
||
|
getSharedByBinary = externals.getSharedByBinary;
|
||
|
write = externals.write;
|
||
|
compress = externals.compress;
|
||
|
Cursor = externals.Cursor;
|
||
|
lmdbError = externals.lmdbError;
|
||
|
if (externals.tmpdir)
|
||
|
tmpdir = externals.tmpdir
|
||
|
}
|
||
|
export function setExternals(externals) {
|
||
|
arch = externals.arch;
|
||
|
fs = externals.fs;
|
||
|
EventEmitter = externals.EventEmitter;
|
||
|
orderedBinary = externals.orderedBinary;
|
||
|
MsgpackrEncoder = externals.MsgpackrEncoder;
|
||
|
WeakLRUCache = externals.WeakLRUCache;
|
||
|
tmpdir = externals.tmpdir;
|
||
|
os = externals.os;
|
||
|
onExit = externals.onExit;
|
||
|
}
|