Son CV dans un terminal web en Javascript! https://terminal-cv.gregandev.fr
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

1 lines
171 KiB

{"version":3,"file":"index.cjs","sources":["../external.js","../util/when.js","../write.js","../level.js","../caching.js","../util/RangeIterable.js","../keys.js","../read.js","../open.js","../node-index.js"],"sourcesContent":["export let Env, Compression, Cursor, getAddress, clearKeptObjects, setGlobalBuffer,\r\n\trequire, arch, fs, os, onExit, tmpdir, lmdbError, path, EventEmitter, orderedBinary, MsgpackrEncoder, WeakLRUCache, isWorkerThread;\r\nexport function setNativeFunctions(externals) {\r\n\tEnv = externals.Env;\r\n\tCompression = externals.Compression;\r\n\tgetAddress = externals.getAddress;\r\n\tclearKeptObjects = externals.clearKeptObjects;\r\n\tsetGlobalBuffer = externals.setGlobalBuffer;\r\n\tCursor = externals.Cursor;\r\n\tlmdbError = externals.lmdbError;\r\n\tif (externals.tmpdir)\r\n tmpdir = externals.tmpdir\r\n}\r\nexport function setExternals(externals) {\r\n\trequire = externals.require;\r\n\tarch = externals.arch;\r\n\tfs = externals.fs;\r\n\tpath = externals.path;\r\n\tEventEmitter = externals.EventEmitter;\r\n\torderedBinary = externals.orderedBinary;\r\n\tMsgpackrEncoder = externals.MsgpackrEncoder;\r\n\tWeakLRUCache = externals.WeakLRUCache;\r\n\ttmpdir = externals.tmpdir;\r\n os = externals.os;\r\n\tonExit = externals.onExit;\r\n\tisWorkerThread = externals.isWorkerThread;\r\n}\r\n","export function when(promise, callback, errback) {\r\n if (promise && promise.then) {\r\n return errback ?\r\n promise.then(callback, errback) :\r\n promise.then(callback);\r\n }\r\n return callback(promise);\r\n}\r\n","import { getAddress, onExit } from './external.js';\r\nimport { when } from './util/when.js';\r\nvar backpressureArray;\r\n\r\nconst WAITING_OPERATION = 0x2000000;\r\nconst BACKPRESSURE_THRESHOLD = 100000;\r\nconst TXN_DELIMITER = 0x8000000;\r\nconst TXN_COMMITTED = 0x10000000;\r\nconst TXN_FLUSHED = 0x20000000;\r\nconst TXN_FAILED = 0x40000000;\r\nexport const FAILED_CONDITION = 0x4000000;\r\nconst REUSE_BUFFER_MODE = 512;\r\nconst RESET_BUFFER_MODE = 1024;\r\n\r\nconst SYNC_PROMISE_SUCCESS = Promise.resolve(true);\r\nconst SYNC_PROMISE_FAIL = Promise.resolve(false);\r\nSYNC_PROMISE_SUCCESS.isSync = true;\r\nSYNC_PROMISE_FAIL.isSync = true;\r\nconst PROMISE_SUCCESS = Promise.resolve(true);\r\nexport const ABORT = {};\r\nexport const IF_EXISTS = 3.542694326329068e-103;\r\nconst CALLBACK_THREW = {};\r\nconst LocalSharedArrayBuffer = typeof Deno != 'undefined' ? ArrayBuffer : SharedArrayBuffer; // Deno can't handle SharedArrayBuffer as an FFI argument due to https://github.com/denoland/deno/issues/12678\r\nconst ByteArray = typeof Buffer != 'undefined' ? Buffer.from : Uint8Array;\r\nconst queueTask = typeof setImmediate != 'undefined' ? setImmediate : setTimeout; // TODO: Or queueMicrotask?\r\n//let debugLog = []\r\nconst WRITE_BUFFER_SIZE = 0x10000;\r\nvar log = [];\r\nexport function addWriteMethods(LMDBStore, { env, fixedBuffer, resetReadTxn, useWritemap, maxKeySize,\r\n\teventTurnBatching, txnStartThreshold, batchStartThreshold, overlappingSync, commitDelay, separateFlushed, maxFlushDelay }) {\r\n\t// stands for write instructions\r\n\tvar dynamicBytes;\r\n\tfunction allocateInstructionBuffer() {\r\n\t\t// Must use a shared buffer on older node in order to use Atomics, and it is also more correct since we are \r\n\t\t// indeed accessing and modifying it from another thread (in C). However, Deno can't handle it for\r\n\t\t// FFI so aliased above\r\n\t\tlet buffer = new LocalSharedArrayBuffer(WRITE_BUFFER_SIZE);\r\n\t\tdynamicBytes = new ByteArray(buffer);\r\n\t\tlet uint32 = dynamicBytes.uint32 = new Uint32Array(buffer, 0, WRITE_BUFFER_SIZE >> 2);\r\n\t\tuint32[0] = 0;\r\n\t\tdynamicBytes.float64 = new Float64Array(buffer, 0, WRITE_BUFFER_SIZE >> 3);\r\n\t\tbuffer.address = getAddress(dynamicBytes);\r\n\t\tuint32.address = buffer.address + uint32.byteOffset;\r\n\t\tdynamicBytes.position = 0;\r\n\t\treturn dynamicBytes;\r\n\t}\r\n\tvar newBufferThreshold = (WRITE_BUFFER_SIZE - maxKeySize - 64) >> 3; // need to reserve more room if we do inline values\r\n\tvar outstandingWriteCount = 0;\r\n\tvar startAddress = 0;\r\n\tvar writeTxn = null;\r\n\tvar committed;\r\n\tvar abortedNonChildTransactionWarn;\r\n\tvar nextTxnCallbacks = [];\r\n\tvar commitPromise, flushPromise, flushResolvers = [];\r\n\tcommitDelay = commitDelay || 0;\r\n\teventTurnBatching = eventTurnBatching === false ? false : true;\r\n\tvar enqueuedCommit;\r\n\tvar afterCommitCallbacks = [];\r\n\tvar beforeCommitCallbacks = [];\r\n\tvar enqueuedEventTurnBatch;\r\n\tvar batchDepth = 0;\r\n\tvar lastWritePromise;\r\n\tvar writeBatchStart, outstandingBatchCount;\r\n\ttxnStartThreshold = txnStartThreshold || 5;\r\n\tbatchStartThreshold = batchStartThreshold || 1000;\r\n\tmaxFlushDelay = maxFlushDelay || 250;\r\n\r\n\tallocateInstructionBuffer();\r\n\tdynamicBytes.uint32[0] = TXN_DELIMITER | TXN_COMMITTED | TXN_FLUSHED;\r\n\tvar txnResolution, lastQueuedResolution, nextResolution = { uint32: dynamicBytes.uint32, flagPosition: 0, };\r\n\tvar uncommittedResolution = { next: nextResolution };\r\n\tvar unwrittenResolution = nextResolution;\r\n\tlet needToRegisterOnExit = overlappingSync;\r\n\tfunction writeInstructions(flags, store, key, value, version, ifVersion) {\r\n\t\tif (needToRegisterOnExit) {\r\n\t\t\tneedToRegisterOnExit = false;\r\n\t\t\tif (onExit) {\r\n\t\t\t\tonExit(() => {\r\n\t\t\t\t\tif (env.sync) // if we have already closed the env, this will be null\r\n\t\t\t\t\t\tenv.sync();\r\n\t\t\t\t})\r\n\t\t\t}\r\n\t\t}\r\n\t\tlet writeStatus;\r\n\t\tlet targetBytes, position, encoder;\r\n\t\tlet valueBuffer, valueSize, valueBufferStart;\r\n\t\tif (flags & 2) {\r\n\t\t\t// encode first in case we have to write a shared structure\r\n\t\t\tencoder = store.encoder;\r\n\t\t\tif (value && value['\\x10binary-data\\x02'])\r\n\t\t\t\tvalueBuffer = value['\\x10binary-data\\x02'];\r\n\t\t\telse if (encoder) {\r\n\t\t\t\tif (encoder.copyBuffers) // use this as indicator for support buffer reuse for now\r\n\t\t\t\t\tvalueBuffer = encoder.encode(value, REUSE_BUFFER_MODE | (writeTxn ? RESET_BUFFER_MODE : 0)); // in addition, if we are writing sync, after using, we can immediately reset the encoder's position to reuse that space, which can improve performance\r\n\t\t\t\telse { // various other encoders, including JSON.stringify, that might serialize to a string\r\n\t\t\t\t\tvalueBuffer = encoder.encode(value);\r\n\t\t\t\t\tif (typeof valueBuffer == 'string')\r\n\t\t\t\t\t\tvalueBuffer = Buffer.from(valueBuffer); // TODO: Would be nice to write strings inline in the instructions\r\n\t\t\t\t}\r\n\t\t\t} else if (typeof value == 'string') {\r\n\t\t\t\tvalueBuffer = Buffer.from(value); // TODO: Would be nice to write strings inline in the instructions\r\n\t\t\t} else if (value instanceof Uint8Array)\r\n\t\t\t\tvalueBuffer = value;\r\n\t\t\telse\r\n\t\t\t\tthrow new Error('Invalid value to put in database ' + value + ' (' + (typeof value) +'), consider using encoder');\r\n\t\t\tvalueBufferStart = valueBuffer.start;\r\n\t\t\tif (valueBufferStart > -1) // if we have buffers with start/end position\r\n\t\t\t\tvalueSize = valueBuffer.end - valueBufferStart; // size\r\n\t\t\telse\r\n\t\t\t\tvalueSize = valueBuffer.length;\r\n\t\t\tif (store.dupSort && valueSize > maxKeySize)\r\n\t\t\t\tthrow new Error('The value is larger than the maximum size (' + maxKeySize + ') for a value in a dupSort database');\r\n\t\t} else\r\n\t\t\tvalueSize = 0;\r\n\t\tif (writeTxn) {\r\n\t\t\ttargetBytes = fixedBuffer;\r\n\t\t\tposition = 0;\r\n\t\t} else {\r\n\t\t\tif (eventTurnBatching && !enqueuedEventTurnBatch && batchDepth == 0) {\r\n\t\t\t\tenqueuedEventTurnBatch = queueTask(() => {\r\n\t\t\t\t\ttry {\r\n\t\t\t\t\t\tfor (let i = 0, l = beforeCommitCallbacks.length; i < l; i++) {\r\n\t\t\t\t\t\t\tbeforeCommitCallbacks[i]();\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t} catch(error) {\r\n\t\t\t\t\t\tconsole.error(error);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tenqueuedEventTurnBatch = null;\r\n\t\t\t\t\tbatchDepth--;\r\n\t\t\t\t\tfinishBatch();\r\n\t\t\t\t\tif (writeBatchStart)\r\n\t\t\t\t\t\twriteBatchStart(); // TODO: When we support delay start of batch, optionally don't delay this\r\n\t\t\t\t});\r\n\t\t\t\tcommitPromise = null; // reset the commit promise, can't know if it is really a new transaction prior to finishWrite being called\r\n\t\t\t\tflushPromise = null;\r\n\t\t\t\twriteBatchStart = writeInstructions(1, store);\r\n\t\t\t\toutstandingBatchCount = 0;\r\n\t\t\t\tbatchDepth++;\r\n\t\t\t}\r\n\t\t\ttargetBytes = dynamicBytes;\r\n\t\t\tposition = targetBytes.position;\r\n\t\t}\r\n\t\tlet uint32 = targetBytes.uint32, float64 = targetBytes.float64;\r\n\t\tlet flagPosition = position << 1; // flagPosition is the 32-bit word starting position\r\n\r\n\t\t// don't increment position until we are sure we don't have any key writing errors\r\n\t\tif (!uint32) {\r\n\t\t\tthrow new Error('Internal buffers have been corrupted');\r\n\t\t}\r\n\t\tuint32[flagPosition + 1] = store.db.dbi;\r\n\t\tif (flags & 4) {\r\n\t\t\tlet keyStartPosition = (position << 3) + 12;\r\n\t\t\tlet endPosition;\r\n\t\t\ttry {\r\n\t\t\t\tendPosition = store.writeKey(key, targetBytes, keyStartPosition);\r\n\t\t\t\tif (!(keyStartPosition < endPosition) && (flags & 0xf) != 12)\r\n\t\t\t\t\tthrow new Error('Invalid key or zero length key is not allowed in LMDB')\r\n\t\t\t} catch(error) {\r\n\t\t\t\ttargetBytes.fill(0, keyStartPosition);\r\n\t\t\t\tif (error.name == 'RangeError')\r\n\t\t\t\t\terror = new Error('Key size is larger than the maximum key size (' + maxKeySize + ')');\r\n\t\t\t\tthrow error;\r\n\t\t\t}\r\n\t\t\tlet keySize = endPosition - keyStartPosition;\r\n\t\t\tif (keySize > maxKeySize) {\r\n\t\t\t\ttargetBytes.fill(0, keyStartPosition); // restore zeros\r\n\t\t\t\tthrow new Error('Key size is larger than the maximum key size (' + maxKeySize + ')');\r\n\t\t\t}\r\n\t\t\tuint32[flagPosition + 2] = keySize;\r\n\t\t\tposition = (endPosition + 16) >> 3;\r\n\t\t\tif (flags & 2) {\r\n\t\t\t\tlet mustCompress;\r\n\t\t\t\tif (valueBufferStart > -1) { // if we have buffers with start/end position\r\n\t\t\t\t\t// record pointer to value buffer\r\n\t\t\t\t\tfloat64[position] = (valueBuffer.address ||\r\n\t\t\t\t\t\t(valueBuffer.address = getAddress(valueBuffer))) + valueBufferStart;\r\n\t\t\t\t\tmustCompress = valueBuffer[valueBufferStart] >= 250; // this is the compression indicator, so we must compress\r\n\t\t\t\t} else {\r\n\t\t\t\t\tlet valueArrayBuffer = valueBuffer.buffer;\r\n\t\t\t\t\t// record pointer to value buffer\r\n\t\t\t\t\tfloat64[position] = (valueArrayBuffer.address ||\r\n\t\t\t\t\t\t(valueArrayBuffer.address = (getAddress(valueBuffer) - valueBuffer.byteOffset)))\r\n\t\t\t\t\t\t\t+ valueBuffer.byteOffset;\r\n\t\t\t\t\tmustCompress = valueBuffer[0] >= 250; // this is the compression indicator, so we must compress\r\n\t\t\t\t}\r\n\t\t\t\tuint32[(position++ << 1) - 1] = valueSize;\r\n\t\t\t\tif (store.compression && (valueSize >= store.compression.threshold || mustCompress)) {\r\n\t\t\t\t\tflags |= 0x100000;\r\n\t\t\t\t\tfloat64[position] = store.compression.address;\r\n\t\t\t\t\tif (!writeTxn)\r\n\t\t\t\t\t\tenv.compress(uint32.address + (position << 3), () => {\r\n\t\t\t\t\t\t\t// this is never actually called in NodeJS, just use to pin the buffer in memory until it is finished\r\n\t\t\t\t\t\t\t// and is a no-op in Deno\r\n\t\t\t\t\t\t\tif (!float64)\r\n\t\t\t\t\t\t\t\tthrow new Error('No float64 available');\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\tposition++;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tif (ifVersion !== undefined) {\r\n\t\t\t\tif (ifVersion === null)\r\n\t\t\t\t\tflags |= 0x10; // if it does not exist, MDB_NOOVERWRITE\r\n\t\t\t\telse {\r\n\t\t\t\t\tflags |= 0x100;\r\n\t\t\t\t\tfloat64[position++] = ifVersion;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tif (version !== undefined) {\r\n\t\t\t\tflags |= 0x200;\r\n\t\t\t\tfloat64[position++] = version || 0;\r\n\t\t\t}\r\n\t\t} else\r\n\t\t\tposition++;\r\n\t\ttargetBytes.position = position;\r\n\t\tif (writeTxn) {\r\n\t\t\tuint32[0] = flags;\r\n\t\t\tenv.write(uint32.address);\r\n\t\t\treturn () => (uint32[0] & FAILED_CONDITION) ? SYNC_PROMISE_FAIL : SYNC_PROMISE_SUCCESS;\r\n\t\t}\r\n\t\t// if we ever use buffers that haven't been zero'ed, need to clear out the next slot like this:\r\n\t\t// uint32[position << 1] = 0 // clear out the next slot\r\n\t\tlet nextUint32;\r\n\t\tif (position > newBufferThreshold) {\r\n\t\t\t// make new buffer and make pointer to it\r\n\t\t\tlet lastPosition = position;\r\n\t\t\ttargetBytes = allocateInstructionBuffer();\r\n\t\t\tposition = targetBytes.position;\r\n\t\t\tfloat64[lastPosition + 1] = targetBytes.uint32.address + position;\r\n\t\t\tuint32[lastPosition << 1] = 3; // pointer instruction\r\n\t\t\tnextUint32 = targetBytes.uint32;\r\n\t\t} else\r\n\t\t\tnextUint32 = uint32;\r\n\t\tlet resolution = nextResolution;\r\n\t\t// create the placeholder next resolution\r\n\t\tnextResolution = resolution.next = store.cache ?\r\n\t\t{\r\n\t\t\tuint32: nextUint32,\r\n\t\t\tflagPosition: position << 1,\r\n\t\t\tflag: 0, // TODO: eventually eliminate this, as we can probably signify success by zeroing the flagPosition\r\n\t\t\tvalueBuffer: fixedBuffer, // these are all just placeholders so that we have the right hidden class initially allocated\r\n\t\t\tnext: null,\r\n\t\t\tkey,\r\n\t\t\tstore,\r\n\t\t\tvalueSize,\r\n\t\t} :\r\n\t\t{\r\n\t\t\tuint32: nextUint32,\r\n\t\t\tflagPosition: position << 1,\r\n\t\t\tflag: 0, // TODO: eventually eliminate this, as we can probably signify success by zeroing the flagPosition\r\n\t\t\tvalueBuffer: fixedBuffer, // these are all just placeholders so that we have the right hidden class initially allocated\r\n\t\t\tnext: null,\r\n\t\t};\r\n\t\tlet writtenBatchDepth = batchDepth;\r\n\r\n\t\treturn (callback) => {\r\n\t\t\tif (writtenBatchDepth) {\r\n\t\t\t\t// if we are in a batch, the transaction can't close, so we do the faster,\r\n\t\t\t\t// but non-deterministic updates, knowing that the write thread can\r\n\t\t\t\t// just poll for the status change if we miss a status update\r\n\t\t\t\twriteStatus = uint32[flagPosition];\r\n\t\t\t\tuint32[flagPosition] = flags;\r\n\t\t\t\t//writeStatus = Atomics.or(uint32, flagPosition, flags)\r\n\t\t\t\tif (writeBatchStart && !writeStatus) {\r\n\t\t\t\t\toutstandingBatchCount += 1 + (valueSize >> 12);\r\n\t\t\t\t\tif (outstandingBatchCount > batchStartThreshold) {\r\n\t\t\t\t\t\toutstandingBatchCount = 0;\r\n\t\t\t\t\t\twriteBatchStart();\r\n\t\t\t\t\t\twriteBatchStart = null;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t} else // otherwise the transaction could end at any time and we need to know the\r\n\t\t\t\t// deterministically if it is ending, so we can reset the commit promise\r\n\t\t\t\t// so we use the slower atomic operation\r\n\t\t\t\twriteStatus = Atomics.or(uint32, flagPosition, flags);\r\n\t\r\n\t\t\toutstandingWriteCount++;\r\n\t\t\tif (writeStatus & TXN_DELIMITER) {\r\n\t\t\t\tcommitPromise = null; // TODO: Don't reset these if this comes from the batch start operation on an event turn batch\r\n\t\t\t\tflushPromise = null;\r\n\t\t\t\tqueueCommitResolution(resolution);\r\n\t\t\t\tif (!startAddress) {\r\n\t\t\t\t\tstartAddress = uint32.address + (flagPosition << 2);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tif (!flushPromise && overlappingSync)\r\n\t\t\t\tflushPromise = new Promise(resolve => flushResolvers.push(resolve));\r\n\t\t\tif (writeStatus & WAITING_OPERATION) { // write thread is waiting\r\n\t\t\t\tenv.write(0);\r\n\t\t\t}\r\n\t\t\tif (outstandingWriteCount > BACKPRESSURE_THRESHOLD && !writeBatchStart) {\r\n\t\t\t\tif (!backpressureArray)\r\n\t\t\t\t\tbackpressureArray = new Int32Array(new SharedArrayBuffer(4), 0, 1);\r\n\t\t\t\tAtomics.wait(backpressureArray, 0, 0, Math.round(outstandingWriteCount / BACKPRESSURE_THRESHOLD));\r\n\t\t\t}\r\n\t\t\tif (startAddress) {\r\n\t\t\t\tif (eventTurnBatching)\r\n\t\t\t\t\tstartWriting(); // start writing immediately because this has already been batched/queued\r\n\t\t\t\telse if (!enqueuedCommit && txnStartThreshold) {\r\n\t\t\t\t\tenqueuedCommit = (commitDelay == 0 && typeof setImmediate != 'undefined') ? setImmediate(() => startWriting()) : setTimeout(() => startWriting(), commitDelay);\r\n\t\t\t\t} else if (outstandingWriteCount > txnStartThreshold)\r\n\t\t\t\t\tstartWriting();\r\n\t\t\t}\r\n\r\n\t\t\tif ((outstandingWriteCount & 7) === 0)\r\n\t\t\t\tresolveWrites();\r\n\t\t\t\r\n\t\t\tif (store.cache) {\r\n\t\t\t\tresolution.key = key;\r\n\t\t\t\tresolution.store = store;\r\n\t\t\t\tresolution.valueSize = valueBuffer ? valueBuffer.length : 0;\r\n\t\t\t}\r\n\t\t\tresolution.valueBuffer = valueBuffer;\r\n\t\t\tlastQueuedResolution = resolution;\r\n\r\n\t\t\tif (callback) {\r\n\t\t\t\tif (callback === IF_EXISTS)\r\n\t\t\t\t\tifVersion = IF_EXISTS;\r\n\t\t\t\telse {\r\n\t\t\t\t\tresolution.reject = callback;\r\n\t\t\t\t\tresolution.resolve = (value) => callback(null, value);\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tif (ifVersion === undefined) {\r\n\t\t\t\tif (writtenBatchDepth > 1)\r\n\t\t\t\t\treturn PROMISE_SUCCESS; // or return undefined?\r\n\t\t\t\tif (!commitPromise) {\r\n\t\t\t\t\tcommitPromise = new Promise((resolve, reject) => {\r\n\t\t\t\t\t\tresolution.resolve = resolve;\r\n\t\t\t\t\t\tresolve.unconditional = true;\r\n\t\t\t\t\t\tresolution.reject = reject;\r\n\t\t\t\t\t});\r\n\t\t\t\t\tif (separateFlushed)\r\n\t\t\t\t\t\tcommitPromise.flushed = overlappingSync ? flushPromise : commitPromise;\r\n\t\t\t\t}\r\n\t\t\t\treturn commitPromise;\r\n\t\t\t}\r\n\t\t\tlastWritePromise = new Promise((resolve, reject) => {\r\n\t\t\t\tresolution.resolve = resolve;\r\n\t\t\t\tresolution.reject = reject;\r\n\t\t\t});\r\n\t\t\tif (separateFlushed)\r\n\t\t\t\tlastWritePromise.flushed = overlappingSync ? flushPromise : lastWritePromise;\r\n\t\t\treturn lastWritePromise;\r\n\t\t};\r\n\t}\r\n\tlet committedFlushResolvers, lastSync = Promise.resolve()\r\n\tfunction startWriting() {\r\n\t\tif (enqueuedCommit) {\r\n\t\t\tclearImmediate(enqueuedCommit);\r\n\t\t\tenqueuedCommit = null;\r\n\t\t}\r\n\t\tlet resolvers = flushResolvers;\r\n\t\tflushResolvers = [];\r\n\t\tlet start = Date.now();\r\n\t\tenv.startWriting(startAddress, (status) => {\r\n\t\t\tif (dynamicBytes.uint32[dynamicBytes.position << 1] & TXN_DELIMITER)\r\n\t\t\t\tqueueCommitResolution(nextResolution);\r\n\r\n\t\t\tresolveWrites(true);\r\n\t\t\tswitch (status) {\r\n\t\t\t\tcase 0:\r\n\t\t\t\t\tif (resolvers.length > 0) {\r\n\t\t\t\t\t\tif (committedFlushResolvers)\r\n\t\t\t\t\t\t\tcommittedFlushResolvers.push(...resolvers)\r\n\t\t\t\t\t\telse {\r\n\t\t\t\t\t\t\tcommittedFlushResolvers = resolvers\r\n\t\t\t\t\t\t\tscheduleFlush(Math.min(Date.now() - start, maxFlushDelay))\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\tcase 1:\r\n\t\t\t\tbreak;\r\n\t\t\t\tcase 2:\r\n\t\t\t\t\texecuteTxnCallbacks();\r\n\t\t\t\tbreak;\r\n\t\t\t\tdefault:\r\n\t\t\t\tconsole.error(status);\r\n\t\t\t\tif (commitRejectPromise) {\r\n\t\t\t\t\tcommitRejectPromise.reject(status);\r\n\t\t\t\t\tcommitRejectPromise = null;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\t\tstartAddress = 0;\r\n\t}\r\n\tfunction scheduleFlush(delay) {\r\n\t\tsetTimeout(() => lastSync.then(() => {\r\n\t\t\tlet resolvers = committedFlushResolvers || []\r\n\t\t\tcommittedFlushResolvers = null\r\n\t\t\tlastSync = new Promise((resolve) => {\r\n\t\t\t\tenv.sync(() => {\r\n\t\t\t\t\tfor (let i = 0; i < resolvers.length; i++)\r\n\t\t\t\t\t\tresolvers[i]();\r\n\t\t\t\t\tresolve();\r\n\t\t\t\t});\r\n\t\t\t});\r\n\t\t}), delay || 0);\r\n\t}\r\n\r\n\tfunction queueCommitResolution(resolution) {\r\n\t\tif (!resolution.isTxn) {\r\n\t\t\tresolution.isTxn = true;\r\n\t\t\tif (txnResolution) {\r\n\t\t\t\ttxnResolution.nextTxn = resolution;\r\n\t\t\t\t//outstandingWriteCount = 0\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t\ttxnResolution = resolution;\r\n\t\t}\r\n\t}\r\n\tvar TXN_DONE = TXN_COMMITTED | TXN_FAILED;\r\n\tfunction resolveWrites(async) {\r\n\t\t// clean up finished instructions\r\n\t\tlet instructionStatus;\r\n\t\twhile ((instructionStatus = unwrittenResolution.uint32[unwrittenResolution.flagPosition])\r\n\t\t\t\t& 0x1000000) {\r\n\t\t\tif (unwrittenResolution.callbacks) {\r\n\t\t\t\tnextTxnCallbacks.push(unwrittenResolution.callbacks);\r\n\t\t\t\tunwrittenResolution.callbacks = null;\r\n\t\t\t}\r\n\t\t\tif (!unwrittenResolution.isTxn)\r\n\t\t\t\tunwrittenResolution.uint32 = null;\r\n\t\t\tunwrittenResolution.valueBuffer = null;\r\n\t\t\tunwrittenResolution.flag = instructionStatus;\r\n\t\t\toutstandingWriteCount--;\r\n\t\t\tunwrittenResolution = unwrittenResolution.next;\r\n\t\t}\r\n\t\twhile (txnResolution &&\r\n\t\t\t(instructionStatus = txnResolution.uint32[txnResolution.flagPosition] & TXN_DONE)) {\r\n\t\t\tif (instructionStatus & TXN_FAILED)\r\n\t\t\t\trejectCommit();\r\n\t\t\telse\r\n\t\t\t\tresolveCommit(async);\r\n\t\t}\r\n\t}\r\n\r\n\tfunction resolveCommit(async) {\r\n\t\tafterCommit();\r\n\t\tif (async)\r\n\t\t\tresetReadTxn();\r\n\t\telse\r\n\t\t\tqueueMicrotask(resetReadTxn); // TODO: only do this if there are actually committed writes?\r\n\t\tdo {\r\n\t\t\tif (uncommittedResolution.resolve) {\r\n\t\t\t\tlet resolve = uncommittedResolution.resolve;\r\n\t\t\t\tif (uncommittedResolution.flag & FAILED_CONDITION && !resolve.unconditional)\r\n\t\t\t\t\tresolve(false);\r\n\t\t\t\telse\r\n\t\t\t\t\tresolve(true);\r\n\t\t\t}\r\n\t\t} while((uncommittedResolution = uncommittedResolution.next) && uncommittedResolution != txnResolution)\r\n\t\ttxnResolution = txnResolution.nextTxn;\r\n\t}\r\n\tvar commitRejectPromise;\r\n\tfunction rejectCommit() {\r\n\t\tafterCommit();\r\n\t\tif (!commitRejectPromise) {\r\n\t\t\tlet rejectFunction;\r\n\t\t\tcommitRejectPromise = new Promise((resolve, reject) => rejectFunction = reject);\r\n\t\t\tcommitRejectPromise.reject = rejectFunction;\r\n\t\t}\r\n\t\tdo {\r\n\t\t\tif (uncommittedResolution.reject) {\r\n\t\t\t\tlet flag = uncommittedResolution.flag & 0xf;\r\n\t\t\t\tlet error = new Error(\"Commit failed (see commitError for details)\");\r\n\t\t\t\terror.commitError = commitRejectPromise;\r\n\t\t\t\tuncommittedResolution.reject(error);\r\n\t\t\t}\r\n\t\t} while((uncommittedResolution = uncommittedResolution.next) && uncommittedResolution != txnResolution)\r\n\t\ttxnResolution = txnResolution.nextTxn;\r\n\t}\r\n\tfunction atomicStatus(uint32, flagPosition, newStatus) {\r\n\t\tif (batchDepth) {\r\n\t\t\t// if we are in a batch, the transaction can't close, so we do the faster,\r\n\t\t\t// but non-deterministic updates, knowing that the write thread can\r\n\t\t\t// just poll for the status change if we miss a status update\r\n\t\t\tlet writeStatus = uint32[flagPosition];\r\n\t\t\tuint32[flagPosition] = newStatus;\r\n\t\t\treturn writeStatus;\r\n\t\t\t//return Atomics.or(uint32, flagPosition, newStatus)\r\n\t\t} else // otherwise the transaction could end at any time and we need to know the\r\n\t\t\t// deterministically if it is ending, so we can reset the commit promise\r\n\t\t\t// so we use the slower atomic operation\r\n\t\t\treturn Atomics.or(uint32, flagPosition, newStatus);\r\n\t}\r\n\tfunction afterCommit() {\r\n\t\tfor (let i = 0, l = afterCommitCallbacks.length; i < l; i++) {\r\n\t\t\tafterCommitCallbacks[i]({ next: uncommittedResolution, last: unwrittenResolution});\r\n\t\t}\r\n\t}\r\n\tasync function executeTxnCallbacks() {\r\n\t\tenv.writeTxn = writeTxn = { write: true };\r\n\t\tlet promises;\r\n\t\tlet txnCallbacks;\r\n\t\tfor (let i = 0, l = nextTxnCallbacks.length; i < l; i++) {\r\n\t\t\ttxnCallbacks = nextTxnCallbacks[i];\r\n\t\t\tfor (let i = 0, l = txnCallbacks.length; i < l; i++) {\r\n\t\t\t\tlet userTxnCallback = txnCallbacks[i];\r\n\t\t\t\tlet asChild = userTxnCallback.asChild;\r\n\t\t\t\tif (asChild) {\r\n\t\t\t\t\tif (promises) {\r\n\t\t\t\t\t\t// must complete any outstanding transactions before proceeding\r\n\t\t\t\t\t\tawait Promise.all(promises);\r\n\t\t\t\t\t\tpromises = null;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tenv.beginTxn(1); // abortable\r\n\t\t\t\t\tlet parentTxn = writeTxn;\r\n\t\t\t\t\tenv.writeTxn = writeTxn = { write: true };\r\n\t\t\t\t\ttry {\r\n\t\t\t\t\t\tlet result = userTxnCallback.callback();\r\n\t\t\t\t\t\tif (result && result.then) {\r\n\t\t\t\t\t\t\tawait result;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tif (result === ABORT)\r\n\t\t\t\t\t\t\tenv.abortTxn();\r\n\t\t\t\t\t\telse\r\n\t\t\t\t\t\t\tenv.commitTxn();\r\n\t\t\t\t\t\tclearWriteTxn(parentTxn);\r\n\t\t\t\t\t\ttxnCallbacks[i] = result;\r\n\t\t\t\t\t} catch(error) {\r\n\t\t\t\t\t\tclearWriteTxn(parentTxn);\r\n\t\t\t\t\t\tenv.abortTxn();\r\n\t\t\t\t\t\ttxnError(error, i);\r\n\t\t\t\t\t}\r\n\t\t\t\t} else {\r\n\t\t\t\t\ttry {\r\n\t\t\t\t\t\tlet result = userTxnCallback();\r\n\t\t\t\t\t\ttxnCallbacks[i] = result;\r\n\t\t\t\t\t\tif (result && result.then) {\r\n\t\t\t\t\t\t\tif (!promises)\r\n\t\t\t\t\t\t\t\tpromises = [];\r\n\t\t\t\t\t\t\tpromises.push(result.catch(() => {}));\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t} catch(error) {\r\n\t\t\t\t\t\ttxnError(error, i);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\tnextTxnCallbacks = [];\r\n\t\tif (promises) { // finish any outstanding commit functions\r\n\t\t\tawait Promise.all(promises);\r\n\t\t}\r\n\t\tclearWriteTxn(null);\r\n\t\tfunction txnError(error, i) {\r\n\t\t\t(txnCallbacks.errors || (txnCallbacks.errors = []))[i] = error;\r\n\t\t\ttxnCallbacks[i] = CALLBACK_THREW;\r\n\t\t}\r\n\t}\r\n\tfunction finishBatch() {\r\n\t\tdynamicBytes.uint32[(dynamicBytes.position + 1) << 1] = 0; // clear out the next slot\r\n\t\tlet writeStatus = atomicStatus(dynamicBytes.uint32, (dynamicBytes.position++) << 1, 2); // atomically write the end block\r\n\t\tnextResolution.flagPosition += 2;\r\n\t\tif (writeStatus & WAITING_OPERATION) {\r\n\t\t\tenv.write(0);\r\n\t\t}\r\n\t}\r\n\tfunction clearWriteTxn(parentTxn) {\r\n\t\t// TODO: We might actually want to track cursors in a write txn and manually\r\n\t\t// close them.\r\n\t\tif (writeTxn.cursorCount > 0)\r\n\t\t\twriteTxn.isDone = true;\r\n\t\tenv.writeTxn = writeTxn = parentTxn || null;\r\n\t}\r\n\tObject.assign(LMDBStore.prototype, {\r\n\t\tput(key, value, versionOrOptions, ifVersion) {\r\n\t\t\tlet callback, flags = 15, type = typeof versionOrOptions;\r\n\t\t\tif (type == 'object') {\r\n\t\t\t\tif (versionOrOptions.noOverwrite)\r\n\t\t\t\t\tflags |= 0x10;\r\n\t\t\t\tif (versionOrOptions.noDupData)\r\n\t\t\t\t\tflags |= 0x20;\r\n\t\t\t\tif (versionOrOptions.append)\r\n\t\t\t\t\tflags |= 0x20000;\r\n\t\t\t\tif (versionOrOptions.ifVersion != undefined)\r\n\t\t\t\t\tifVersion = versionsOrOptions.ifVersion;\r\n\t\t\t\tversionOrOptions = versionOrOptions.version;\r\n\t\t\t\tif (typeof ifVersion == 'function')\r\n\t\t\t\t\tcallback = ifVersion;\r\n\t\t\t} else if (type == 'function') {\r\n\t\t\t\tcallback = versionOrOptions;\r\n\t\t\t}\r\n\t\t\treturn writeInstructions(flags, this, key, value, this.useVersions ? versionOrOptions || 0 : undefined, ifVersion)(callback);\r\n\t\t},\r\n\t\tremove(key, ifVersionOrValue, callback) {\r\n\t\t\tlet flags = 13;\r\n\t\t\tlet ifVersion, value;\r\n\t\t\tif (ifVersionOrValue !== undefined) {\r\n\t\t\t\tif (typeof ifVersionOrValue == 'function')\r\n\t\t\t\t\tcallback = ifVersionOrValue;\r\n\t\t\t\telse if (ifVersionOrValue === IF_EXISTS && !callback)\r\n\t\t\t\t\t// we have a handler for IF_EXISTS in the callback handler for remove\r\n\t\t\t\t\tcallback = ifVersionOrValue;\r\n\t\t\t\telse if (this.useVersions)\r\n\t\t\t\t\tifVersion = ifVersionOrValue;\r\n\t\t\t\telse {\r\n\t\t\t\t\tflags = 14;\r\n\t\t\t\t\tvalue = ifVersionOrValue;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn writeInstructions(flags, this, key, value, undefined, ifVersion)(callback);\r\n\t\t},\r\n\t\tdel(key, options, callback) {\r\n\t\t\treturn this.remove(key, options, callback);\r\n\t\t},\r\n\t\tifNoExists(key, callback) {\r\n\t\t\treturn this.ifVersion(key, null, callback);\r\n\t\t},\r\n\r\n\t\tifVersion(key, version, callback) {\r\n\t\t\tif (!callback) {\r\n\t\t\t\treturn new Batch((operations, callback) => {\r\n\t\t\t\t\tlet promise = this.ifVersion(key, version, operations);\r\n\t\t\t\t\tif (callback)\r\n\t\t\t\t\t\tpromise.then(callback);\r\n\t\t\t\t\treturn promise;\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t\tif (writeTxn) {\r\n\t\t\t\tif (version === undefined || this.doesExist(key, version)) {\r\n\t\t\t\t\tcallback();\r\n\t\t\t\t\treturn SYNC_PROMISE_SUCCESS;\r\n\t\t\t\t}\r\n\t\t\t\treturn SYNC_PROMISE_FAIL;\r\n\t\t\t}\r\n\t\t\tlet finishStartWrite = writeInstructions(key === undefined || version === undefined ? 1 : 4, this, key, undefined, undefined, version);\r\n\t\t\tlet promise;\r\n\t\t\tbatchDepth += 2;\r\n\t\t\tif (batchDepth > 2)\r\n\t\t\t\tpromise = finishStartWrite();\r\n\t\t\telse {\r\n\t\t\t\twriteBatchStart = () => {\r\n\t\t\t\t\tpromise = finishStartWrite();\r\n\t\t\t\t};\r\n\t\t\t\toutstandingBatchCount = 0;\r\n\t\t\t}\r\n\t\t\ttry {\r\n\t\t\t\tif (typeof callback === 'function') {\r\n\t\t\t\t\tcallback();\r\n\t\t\t\t} else {\r\n\t\t\t\t\tfor (let i = 0, l = callback.length; i < l; i++) {\r\n\t\t\t\t\t\tlet operation = callback[i];\r\n\t\t\t\t\t\tthis[operation.type](operation.key, operation.value);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t} finally {\r\n\t\t\t\tif (!promise) {\r\n\t\t\t\t\tfinishBatch();\r\n\t\t\t\t\tbatchDepth -= 2;\r\n\t\t\t\t\tpromise = finishStartWrite(); // finish write once all the operations have been written (and it hasn't been written prematurely)\r\n\t\t\t\t\twriteBatchStart = null;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tbatchDepth -= 2;\r\n\t\t\t\t\tfinishBatch();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn promise;\r\n\t\t},\r\n\t\tbatch(callbackOrOperations) {\r\n\t\t\treturn this.ifVersion(undefined, undefined, callbackOrOperations);\r\n\t\t},\r\n\t\tdrop(callback) {\r\n\t\t\treturn writeInstructions(1024 + 12, this, undefined, undefined, undefined, undefined)(callback);\r\n\t\t},\r\n\t\tclearAsync(callback) {\r\n\t\t\tif (this.encoder) {\r\n\t\t\t\tif (this.encoder.clearSharedData)\r\n\t\t\t\t\tthis.encoder.clearSharedData()\r\n\t\t\t\telse if (this.encoder.structures)\r\n\t\t\t\t\tthis.encoder.structures = []\r\n\t\t\t}\r\n\t\t\treturn writeInstructions(12, this, undefined, undefined, undefined, undefined)(callback);\r\n\t\t},\r\n\t\t_triggerError() {\r\n\t\t\tfinishBatch();\r\n\t\t},\r\n\r\n\t\tputSync(key, value, versionOrOptions, ifVersion) {\r\n\t\t\tif (writeTxn)\r\n\t\t\t\treturn this.put(key, value, versionOrOptions, ifVersion);\r\n\t\t\telse\r\n\t\t\t\treturn this.transactionSync(() =>\r\n\t\t\t\t\tthis.put(key, value, versionOrOptions, ifVersion) == SYNC_PROMISE_SUCCESS, 2);\r\n\t\t},\r\n\t\tremoveSync(key, ifVersionOrValue) {\r\n\t\t\tif (writeTxn)\r\n\t\t\t\treturn this.remove(key, ifVersionOrValue);\r\n\t\t\telse\r\n\t\t\t\treturn this.transactionSync(() =>\r\n\t\t\t\t\tthis.remove(key, ifVersionOrValue) == SYNC_PROMISE_SUCCESS, 2);\r\n\t\t},\r\n\t\ttransaction(callback) {\r\n\t\t\tif (writeTxn) {\r\n\t\t\t\t// already nested in a transaction, just execute and return\r\n\t\t\t\treturn callback();\r\n\t\t\t}\r\n\t\t\treturn this.transactionAsync(callback);\r\n\t\t},\r\n\t\tchildTransaction(callback) {\r\n\t\t\tif (useWritemap)\r\n\t\t\t\tthrow new Error('Child transactions are not supported in writemap mode');\r\n\t\t\tif (writeTxn) {\r\n\t\t\t\tlet parentTxn = writeTxn;\r\n\t\t\t\tenv.writeTxn = writeTxn = { write: true };\r\n\t\t\t\tenv.beginTxn(1); // abortable\r\n\t\t\t\ttry {\r\n\t\t\t\t\treturn when(callback(), (result) => {\r\n\t\t\t\t\t\tif (result === ABORT)\r\n\t\t\t\t\t\t\tenv.abortTxn();\r\n\t\t\t\t\t\telse\r\n\t\t\t\t\t\t\tenv.commitTxn();\r\n\t\t\t\t\t\tclearWriteTxn(parentTxn);\r\n\t\t\t\t\t\treturn result;\r\n\t\t\t\t\t}, (error) => {\r\n\t\t\t\t\t\tenv.abortTxn();\r\n\t\t\t\t\t\tclearWriteTxn(parentTxn);\r\n\t\t\t\t\t\tthrow error;\r\n\t\t\t\t\t});\r\n\t\t\t\t} catch(error) {\r\n\t\t\t\t\tenv.abortTxn();\r\n\t\t\t\t\tclearWriteTxn(parentTxn);\r\n\t\t\t\t\tthrow error;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn this.transactionAsync(callback, true);\r\n\t\t},\r\n\t\ttransactionAsync(callback, asChild) {\r\n\t\t\tlet txnIndex;\r\n\t\t\tlet txnCallbacks;\r\n\t\t\tif (!nextResolution.callbacks) {\r\n\t\t\t\ttxnCallbacks = [asChild ? { callback, asChild } : callback];\r\n\t\t\t\tnextResolution.callbacks = txnCallbacks;\r\n\t\t\t\ttxnCallbacks.results = writeInstructions(8 | (this.strictAsyncOrder ? 0x100000 : 0), this)();\r\n\t\t\t\ttxnIndex = 0;\r\n\t\t\t} else {\r\n\t\t\t\ttxnCallbacks = lastQueuedResolution.callbacks;\r\n\t\t\t\ttxnIndex = txnCallbacks.push(asChild ? { callback, asChild } : callback) - 1;\r\n\t\t\t}\r\n\t\t\treturn txnCallbacks.results.then((results) => {\r\n\t\t\t\tlet result = txnCallbacks[txnIndex];\r\n\t\t\t\tif (result === CALLBACK_THREW)\r\n\t\t\t\t\tthrow txnCallbacks.errors[txnIndex];\r\n\t\t\t\treturn result;\r\n\t\t\t});\r\n\t\t},\r\n\t\ttransactionSync(callback, flags) {\r\n\t\t\tif (writeTxn) {\r\n\t\t\t\tif (!useWritemap && !this.isCaching) // can't use child transactions in write maps or caching stores\r\n\t\t\t\t\t// already nested in a transaction, execute as child transaction (if possible) and return\r\n\t\t\t\t\treturn this.childTransaction(callback);\r\n\t\t\t\tlet result = callback(); // else just run in current transaction\r\n\t\t\t\tif (result == ABORT && !abortedNonChildTransactionWarn) {\r\n\t\t\t\t\tconsole.warn('Can not abort a transaction inside another transaction with ' + (this.cache ? 'caching enabled' : 'useWritemap enabled'));\r\n\t\t\t\t\tabortedNonChildTransactionWarn = true;\r\n\t\t\t\t}\r\n\t\t\t\treturn result;\r\n\t\t\t}\r\n\t\t\ttry {\r\n\t\t\t\tthis.transactions++;\r\n\t\t\t\tenv.beginTxn(flags == undefined ? 3 : flags);\r\n\t\t\t\twriteTxn = env.writeTxn = { write: true };\r\n\t\t\t\treturn when(callback(), (result) => {\r\n\t\t\t\t\ttry {\r\n\t\t\t\t\t\tif (result === ABORT)\r\n\t\t\t\t\t\t\tenv.abortTxn();\r\n\t\t\t\t\t\telse {\r\n\t\t\t\t\t\t\tenv.commitTxn();\r\n\t\t\t\t\t\t\tresetReadTxn();\r\n\t\t\t\t\t\t\tif ((flags & 0x10000) && overlappingSync) // if it is no-sync in overlapping-sync mode, need to schedule flush for it to be marked as persisted\r\n\t\t\t\t\t\t\t\tscheduleFlush()\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\treturn result;\r\n\t\t\t\t\t} finally {\r\n\t\t\t\t\t\tclearWriteTxn(null);\r\n\t\t\t\t\t}\r\n\t\t\t\t}, (error) => {\r\n\t\t\t\t\ttry { env.abortTxn(); } catch(e) {}\r\n\t\t\t\t\tclearWriteTxn(null);\r\n\t\t\t\t\tthrow error;\r\n\t\t\t\t});\r\n\t\t\t} catch(error) {\r\n\t\t\t\ttry { env.abortTxn(); } catch(e) {}\r\n\t\t\t\tclearWriteTxn(null);\r\n\t\t\t\tthrow error;\r\n\t\t\t}\r\n\t\t},\r\n\t\ttransactionSyncStart(callback) {\r\n\t\t\treturn this.transactionSync(callback, 0);\r\n\t\t},\r\n\t\t// make the db a thenable/promise-like for when the last commit is committed\r\n\t\tcommitted: committed = {\r\n\t\t\tthen(onfulfilled, onrejected) {\r\n\t\t\t\tif (commitPromise)\r\n\t\t\t\t\treturn commitPromise.then(onfulfilled, onrejected);\r\n\t\t\t\tif (lastWritePromise) // always resolve to true\r\n\t\t\t\t\treturn lastWritePromise.then(() => onfulfilled(true), onrejected);\r\n\t\t\t\treturn SYNC_PROMISE_SUCCESS.then(onfulfilled, onrejected);\r\n\t\t\t}\r\n\t\t},\r\n\t\tflushed: {\r\n\t\t\t// make this a thenable for when the commit is flushed to disk\r\n\t\t\tthen(onfulfilled, onrejected) {\r\n\t\t\t\tif (flushPromise)\r\n\t\t\t\t\treturn flushPromise.then(onfulfilled, onrejected);\r\n\t\t\t\treturn committed.then(onfulfilled, onrejected);\r\n\t\t\t}\r\n\t\t},\r\n\t\t_endWrites(resolvedPromise) {\r\n\t\t\tthis.put = this.remove = this.del = this.batch = this.removeSync = this.putSync = this.transactionAsync = this.drop = this.clearAsync = () => { throw new Error('Database is closed') };\r\n\t\t\t// wait for all txns to finish, checking again after the current txn is done\r\n\t\t\tlet finalPromise = flushPromise || commitPromise || lastWritePromise;\r\n\t\t\tif (finalPromise && resolvedPromise != finalPromise) {\r\n\t\t\t\treturn finalPromise.then(() => this._endWrites(finalPromise), () => this._endWrites(finalPromise));\r\n\t\t\t}\r\n\t\t\tenv.sync = null;\r\n\t\t},\r\n\t\ton(event, callback) {\r\n\t\t\tif (event == 'beforecommit') {\r\n\t\t\t\teventTurnBatching = true;\r\n\t\t\t\tbeforeCommitCallbacks.push(callback);\r\n\t\t\t} else if (event == 'aftercommit')\r\n\t\t\t\tafterCommitCallbacks.push(callback);\r\n\t\t}\r\n\t});\r\n}\r\n\r\nclass Batch extends Array {\r\n\tconstructor(callback) {\r\n\t\tsuper();\r\n\t\tthis.callback = callback;\r\n\t}\r\n\tput(key, value) {\r\n\t\tthis.push({ type: 'put', key, value });\r\n\t}\r\n\tdel(key) {\r\n\t\tthis.push({ type: 'del', key });\r\n\t}\r\n\tclear() {\r\n\t\tthis.splice(0, this.length);\r\n\t}\r\n\twrite(callback) {\r\n\t\treturn this.callback(this, callback);\r\n\t}\r\n}\r\nexport function asBinary(buffer) {\r\n\treturn {\r\n\t\t['\\x10binary-data\\x02']: buffer\r\n\t};\r\n}\r\n","export function levelup(store) {\r\n\treturn Object.assign(Object.create(store), {\r\n\t\tget(key, options, callback) {\r\n\t\t\tlet result = store.get(key);\r\n\t\t\tif (typeof options == 'function')\r\n\t\t\t\tcallback = options;\r\n\t\t\tif (callback) {\r\n\t\t\t\tif (result === undefined)\r\n\t\t\t\t\tcallback(new NotFoundError());\r\n\t\t\t\telse\r\n\t\t\t\t\tcallback(null, result);\r\n\t\t\t} else {\r\n\t\t\t\tif (result === undefined)\r\n\t\t\t\t\treturn Promise.reject(new NotFoundError());\r\n\t\t\t\telse\r\n\t\t\t\t\treturn Promise.resolve(result);\r\n\t\t\t}\r\n\t\t},\r\n\t});\r\n}\r\nclass NotFoundError extends Error {\r\n\tconstructor(message) {\r\n\t\tsuper(message);\r\n\t\tthis.name = 'NotFoundError';\r\n\t\tthis.notFound = true;\r\n\t}\r\n}","import { WeakLRUCache, clearKeptObjects } from './external.js';\r\nimport { FAILED_CONDITION } from './write.js';\r\nlet getLastVersion;\r\nconst mapGet = Map.prototype.get;\r\nexport const CachingStore = Store => class extends Store {\r\n\tconstructor(dbName, options) {\r\n\t\tsuper(dbName, options);\r\n\t\tif (!this.env.cacheCommitter) {\r\n\t\t\tthis.env.cacheCommitter = true;\r\n\t\t\tthis.on('aftercommit', ({ next, last }) => {\r\n\t\t\t\tdo {\r\n\t\t\t\t\tlet store = next.store;\r\n\t\t\t\t\tif (store) {\r\n\t\t\t\t\t\tif (next.flag & FAILED_CONDITION)\r\n\t\t\t\t\t\t\tnext.store.cache.delete(next.key); // just delete it from the map\r\n\t\t\t\t\t\telse {\r\n\t\t\t\t\t\t\tlet expirationPriority = next.valueSize >> 10;\r\n\t\t\t\t\t\t\tlet cache = next.store.cache;\r\n\t\t\t\t\t\t\tlet entry = mapGet.call(cache, next.key);\r\n\t\t\t\t\t\t\tif (entry)\r\n\t\t\t\t\t\t\t\tcache.used(entry, expirationPriority + 4); // this will enter it into the LRFU (with a little lower priority than a read)\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t} while (next != last && (next = next.next))\r\n\t\t\t});\r\n\t\t}\r\n\t\tthis.db.cachingDb = this;\r\n\t\tif (options.cache.clearKeptInterval)\r\n\t\t\toptions.cache.clearKeptObjects = clearKeptObjects;\r\n\t\tthis.cache = new WeakLRUCache(options.cache);\r\n\t}\r\n\tget isCaching() {\r\n\t\treturn true\r\n\t}\r\n\tget(id, cacheMode) {\r\n\t\tlet value = this.cache.getValue(id);\r\n\t\tif (value !== undefined)\r\n\t\t\treturn value;\r\n\t\tvalue = super.get(id);\r\n\t\tif (value && typeof value === 'object' && !cacheMode && typeof id !== 'object') {\r\n\t\t\tlet entry = this.cache.setValue(id, value, this.lastSize >> 10);\r\n\t\t\tif (this.useVersions) {\r\n\t\t\t\tentry.version = getLastVersion();\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn value;\r\n\t}\r\n\tgetEntry(id, cacheMode) {\r\n\t\tlet entry = this.cache.get(id);\r\n\t\tif (entry)\r\n\t\t\treturn entry;\r\n\t\tlet value = super.get(id);\r\n\t\tif (value === undefined)\r\n\t\t\treturn;\r\n\t\tif (value && typeof value === 'object' && !cacheMode && typeof id !== 'object') {\r\n\t\t\tentry = this.cache.setValue(id, value, this.lastSize >> 10);\r\n\t\t} else {\r\n\t\t\tentry = { value };\r\n\t\t}\r\n\t\tif (this.useVersions) {\r\n\t\t\tentry.version = getLastVersion();\r\n\t\t}\r\n\t\treturn entry;\r\n\t}\r\n\tputEntry(id, entry, ifVersion) {\r\n\t\tlet result = super.put(id, entry.value, entry.version, ifVersion);\r\n\t\tif (typeof id === 'object')\r\n\t\t\treturn result;\r\n\t\tif (result && result.then)\r\n\t\t\tthis.cache.setManually(id, entry); // set manually so we can keep it pinned in memory until it is committed\r\n\t\telse // sync operation, immediately add to cache\r\n\t\t\tthis.cache.set(id, entry);\r\n\t}\r\n\tput(id, value, version, ifVersion) {\r\n\t\tlet result = super.put(id, value, version, ifVersion);\r\n\t\tif (typeof id !== 'object') {\r\n\t\t\tif (value && value['\\x10binary-data\\x02']) {\r\n\t\t\t\t// don't cache binary data, since it will be decoded on get\r\n\t\t\t\tthis.cache.delete(id);\r\n\t\t\t\treturn result;\r\n\t\t\t}\t\r\n\t\t\t// sync operation, immediately add to cache, otherwise keep it pinned in memory until it is committed\r\n\t\t\tlet entry = this.cache.setValue(id, value, !result || result.isSync ? 0 : -1);\r\n\t\t\tif (version !== undefined)\r\n\t\t\t\tentry.version = typeof version === 'object' ? version.version : version;\r\n\t\t}\r\n\t\treturn result;\r\n\t}\r\n\tputSync(id, value, version, ifVersion) {\r\n\t\tif (id !== 'object') {\r\n\t\t\t// sync operation, immediately add to cache, otherwise keep it pinned in memory until it is committed\r\n\t\t\tif (value && typeof value === 'object') {\r\n\t\t\t\tlet entry = this.cache.setValue(id, value);\r\n\t\t\t\tif (version !== undefined) {\r\n\t\t\t\t\tentry.version = typeof version === 'object' ? version.version : version;\r\n\t\t\t\t}\r\n\t\t\t} else // it is possible that a value used to exist here\r\n\t\t\t\tthis.cache.delete(id);\r\n\t\t}\r\n\t\treturn super.putSync(id, value, version, ifVersion);\r\n\t}\r\n\tremove(id, ifVersion) {\r\n\t\tthis.cache.delete(id);\r\n\t\treturn super.remove(id, ifVersion);\r\n\t}\r\n\tremoveSync(id, ifVersion) {\r\n\t\tthis.cache.delete(id);\r\n\t\treturn super.removeSync(id, ifVersion);\r\n\t}\r\n\tclearAsync(callback) {\r\n\t\tthis.cache.clear();\r\n\t\treturn super.clearAsync(callback);\r\n\t}\r\n\tclearSync() {\r\n\t\tthis.cache.clear();\r\n\t\tsuper.clearSync();\r\n\t}\r\n\tchildTransaction(execute) {\r\n\t\tthrow new Error('Child transactions are not supported in caching stores');\r\n\t}\r\n};\r\nexport function setGetLastVersion(get) {\r\n\tgetLastVersion = get;\r\n}\r\n","const SKIP = {};\r\nif (!Symbol.asyncIterator) {\r\n\tSymbol.asyncIterator = Symbol.for('Symbol.asyncIterator');\r\n}\r\n\r\nexport class RangeIterable {\r\n\tconstructor(sourceArray) {\r\n\t\tif (sourceArray) {\r\n\t\t\tthis.iterate = sourceArray[Symbol.iterator].bind(sourceArray);\r\n\t\t}\r\n\t}\r\n\tmap(func) {\r\n\t\tlet source = this;\r\n\t\tlet result = new RangeIterable();\r\n\t\tresult.iterate = (async) => {\r\n\t\t\tlet iterator = source[Symbol.iterator](async);\r\n\t\t\treturn {\r\n\t\t\t\tnext(resolvedResult) {\r\n\t\t\t\t\tlet result;\r\n\t\t\t\t\tdo {\r\n\t\t\t\t\t\tlet iteratorResult;\r\n\t\t\t\t\t\tif (resolvedResult) {\r\n\t\t\t\t\t\t\titeratorResult = resolvedResult;\r\n\t\t\t\t\t\t\tresolvedResult = null; // don't go in this branch on next iteration\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\titeratorResult = iterator.next();\r\n\t\t\t\t\t\t\tif (iteratorResult.then) {\r\n\t\t\t\t\t\t\t\treturn iteratorResult.then(iteratorResult => this.next(iteratorResult));\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tif (iteratorResult.done === true) {\r\n\t\t\t\t\t\t\tthis.done = true;\r\n\t\t\t\t\t\t\treturn iteratorResult;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tresult = func(iteratorResult.value);\r\n\t\t\t\t\t\tif (result && result.then) {\r\n\t\t\t\t\t\t\treturn result.then(result =>\r\n\t\t\t\t\t\t\t\tresult == SKIP ?\r\n\t\t\t\t\t\t\t\t\tthis.next() :\r\n\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\tvalue: result\r\n\t\t\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t} while(result == SKIP)\r\n\t\t\t\t\treturn {\r\n\t\t\t\t\t\tvalue: result\r\n\t\t\t\t\t};\r\n\t\t\t\t},\r\n\t\t\t\treturn() {\r\n\t\t\t\t\treturn iterator.return();\r\n\t\t\t\t},\r\n\t\t\t\tthrow() {\r\n\t\t\t\t\treturn iterator.throw();\r\n\t\t\t\t}\r\n\t\t\t};\r\n\t\t};\r\n\t\treturn result;\r\n\t}\r\n\t[Symbol.asyncIterator]() {\r\n\t\treturn this.iterator = this.iterate();\r\n\t}\r\n\t[Symbol.iterator]() {\r\n\t\treturn this.iterator = this.iterate();\r\n\t}\r\n\tfilter(func) {\r\n\t\treturn this.map(element => func(element) ? element : SKIP);\r\n\t}\r\n\r\n\tforEach(callback) {\r\n\t\tlet iterator = this.iterator = this.iterate();\r\n\t\tlet result;\r\n\t\twhile ((result = iterator.next()).done !== true) {\r\n\t\t\tcallback(result.value);\r\n\t\t}\r\n\t}\r\n\tconcat(secondIterable) {\r\n\t\tlet concatIterable = new RangeIterable();\r\n\t\tconcatIterable.iterate = (async) => {\r\n\t\t\tlet iterator = this.iterator = this.iterate();\r\n\t\t\tlet isFirst = true;\r\n\t\t\tlet concatIterator = {\r\n\t\t\t\tnext() {\r\n\t\t\t\t\tlet result = iterator.next();\r\n\t\t\t\t\tif (isFirst && result.done) {\r\n\t\t\t\t\t\tisFirst = false;\r\n\t\t\t\t\t\titerator = secondIterable[Symbol.iterator](async);\r\n\t\t\t\t\t\treturn iterator.next();\r\n\t\t\t\t\t}\r\n\t\t\t\t\treturn result;\r\n\t\t\t\t},\r\n\t\t\t\treturn() {\r\n\t\t\t\t\treturn iterator.return();\r\n\t\t\t\t},\r\n\t\t\t\tthrow() {\r\n\t\t\t\t\treturn iterator.throw();\r\n\t\t\t\t}\r\n\t\t\t};\r\n\t\t\treturn concatIterator;\r\n\t\t};\r\n\t\treturn concatIterable;\r\n\t}\r\n\tnext() {\r\n\t\tif (!this.iterator)\r\n\t\t\tthis.iterator = this.iterate();\r\n\t\treturn this.iterator.next();\r\n\t}\r\n\ttoJSON() {\r\n\t\tif (this.asArray && this.asArray.forEach) {\r\n\t\t\treturn this.asArray;\r\n\t\t}\r\n\t\tthrow new Error('Can not serialize async iteratables without first calling resolveJSON');\r\n\t\t//return Array.from(this)\r\n\t}\r\n\tget asArray() {\r\n\t\tif (this._asArray)\r\n\t\t\treturn this._asArray;\r\n\t\tlet promise = new Promise((resolve, reject) => {\r\n\t\t\tlet iterator = this.iterate();\r\n\t\t\tlet array = [];\r\n\t\t\tlet iterable = this;\r\n\t\t\tfunction next(result) {\r\n\t\t\t\twhile (result.done !== true) {\r\n\t\t\t\t\tif (result.then) {\r\n\t\t\t\t\t\treturn result.then(next);\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tarray.push(result.value);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tresult = iterator.next();\r\n\t\t\t\t}\r\n\t\t\t\tarray.iterable = iterable;\r\n\t\t\t\tresolve(iterable._asArray = array);\r\n\t\t\t}\r\n\t\t\tnext(iterator.next());\r\n\t\t});\r\n\t\tpromise.iterable = this;\r\n\t\treturn this._asArray || (this._asArray = promise);\r\n\t}\r\n\tresolveData() {\r\n\t\treturn this.asArray;\r\n\t}\r\n}\r\n","import { getAddress, orderedBinary } from './external.js';\r\n\r\nconst writeUint32Key = (key, target, start) => {\r\n\t(target.dataView || (target.dataView = new DataView(target.buffer, 0, target.length))).setUint32(start, key, true);\r\n\treturn start + 4;\r\n};\r\nconst readUint32Key = (target, start) => {\r\n\treturn (target.dataView || (target.dataView = new DataView(target.buffer, 0, target.length))).getUint32(start, true);\r\n};\r\nconst writeBufferKey = (key, target, start) => {\r\n\ttarget.set(key, start);\r\n\treturn key.length + start;\r\n};\r\nconst Uint8ArraySlice = Uint8Array.prototype.slice;\r\nconst readBufferKey = (target, start, end) => {\r\n\treturn Uint8ArraySlice.call(target, start, end);\r\n};\r\n\r\nexport function applyKeyHandling(store) {\r\n \tif (store.encoding == 'ordered-binary') {\r\n\t\tstore.encoder = store.decoder = {\r\n\t\t\twriteKey: orderedBinary.writeKey,\r\n\t\t\treadKey: orderedBinary.readKey,\r\n\t\t};\r\n\t}\r\n\tif (store.encoder && store.encoder.writeKey && !store.encoder.encode) {\r\n\t\tstore.encoder.encode = function(value) {\r\n\t\t\treturn saveKey(value, this.writeKey, false, store.maxKeySize);\r\n\t\t};\r\n\t}\r\n\tif (store.decoder && store.decoder.readKey && !store.decoder.decode)\r\n\t\tstore.decoder.decode = function(buffer) { return this.readKey(buffer, 0, buffer.length); };\r\n\tif (store.keyIsUint32 || store.keyEncoding == 'uint32') {\r\n\t\tstore.writeKey = writeUint32Key;\r\n\t\tstore.readKey = readUint32Key;\r\n\t} else if (store.keyIsBuffer || store.keyEncoding == 'binary') {\r\n\t\tstore.writeKey = writeBufferKey;\r\n\t\tstore.readKey = readBufferKey;\r\n\t} else if (store.keyEncoder) {\r\n\t\tstore.writeKey = store.keyEncoder.writeKey;\r\n\t\tstore.readKey = store.keyEncoder.readKey;\r\n\t} else {\r\n\t\tstore.writeKey = orderedBinary.writeKey;\r\n\t\tstore.readKey = orderedBinary.readKey;\r\n\t}\r\n}\r\n\r\nlet saveBuffer, saveDataView = { setFloat64() {}, setUint32() {} }, saveDataAddress;\r\nlet savePosition = 8000;\r\nlet DYNAMIC_KEY_BUFFER_SIZE = 8192;\r\nfunction allocateSaveBuffer() {\r\n\tsaveBuffer = typeof Buffer != 'undefined' ? Buffer.alloc(DYNAMIC_KEY_BUFFER_SIZE) : new Uint8Array(DYNAMIC_KEY_BUFFER_SIZE);\r\n\tsaveBuffer.buffer.address = getAddress(saveBuffer);\r\n\tsaveDataAddress = saveBuffer.buffer.address;\r\n\t// TODO: Conditionally only do this for key sequences?\r\n\tsaveDataView.setUint32(savePosition, 0xffffffff);\r\n\tsaveDataView.setFloat64(savePosition + 4, saveDataAddress, true); // save a pointer from the old buffer to the new address for the sake of the prefetch sequences\r\n\tsaveBuffer.dataView = saveDataView = new DataView(saveBuffer.buffer, saveBuffer.byteOffset, saveBuffer.byteLength);\r\n\tsavePosition = 0;\r\n}\r\nexport function saveKey(key, writeKey, saveTo, maxKeySize) {\r\n\tif (savePosition > 7800) {\r\n\t\tallocateSaveBuffer();\r\n\t}\r\n\tlet start = savePosition;\r\n\ttry {\r\n\t\tsavePosition = key === undefined ? start + 4 :\r\n\t\t\twriteKey(key, saveBuffer, start + 4);\r\n\t} catch (error) {\r\n\t\tsaveBuffer.fill(0, start + 4); // restore zeros\r\n\t\tif (error.name == 'RangeError') {\r\n\t\t\tif (8180 - start < maxKeySize) {\r\n\t\t\t\tallocateSaveBuffer(); // try again:\r\n\t\t\t\treturn saveKey(key, writeKey, saveTo, maxKeySize);\r\n\t\t\t}\r\n\t\t\tthrow new Error('Key was too large, max key size is ' + maxKeySize);\r\n\t\t} else\r\n\t\t\tthrow error;\r\n\t}\r\n\tlet length = savePosition - start - 4;\r\n\tif (length > maxKeySize) {\r\n\t\tthrow new Error('Key of size ' + length + ' was too large, max key size is ' + maxKeySize);\r\n\t}\r\n\tif (savePosition >= 8160) { // need to reserve enough room at the end for pointers\r\n\t\tsavePosition = start // reset position\r\n\t\tallocateSaveBuffer(); // try again:\r\n\t\treturn saveKey(key, writeKey, saveTo, maxKeySize);\r\n\t}\r\n\tif (saveTo) {\r\n\t\tsaveDataView.setUint32(start, length, true); // save the length\r\n\t\tsaveTo.saveBuffer = saveBuffer;\r\n\t\tsavePosition = (savePosition + 12) & 0xfffffc;\r\n\t\treturn start + saveDataAddress;\r\n\t} else {\r\n\t\tsaveBuffer.start = start + 4;\r\n\t\tsaveBuffer.end = savePosition;\r\n\t\tsavePosition = (savePosition + 7) & 0xfffff8; // full 64-bit word alignment since these are usually copied\r\n\t\treturn saveBuffer;\r\n\t}\r\n}\r\n","import { RangeIterable } from './util/RangeIterable.js';\r\nimport { getAddress, Cursor, setGlobalBuffer, orderedBinary, lmdbError } from './external.js';\r\nimport { saveKey } from './keys.js';\r\nconst ITERATOR_DONE = { done: true, value: undefined };\r\nconst Uint8ArraySlice = Uint8Array.prototype.slice;\r\nconst Uint8A = typeof Buffer != 'undefined' ? Buffer.allocUnsafeSlow : Uint8Array\r\nlet getValueBytes = makeReusableBuffer(0);\r\nconst START_ADDRESS_POSITION = 4064;\r\nconst NEW_BUFFER_THRESHOLD = 0x10000;\r\n\r\nexport function addReadMethods(LMDBStore, {\r\n\tmaxKeySize, env, keyBytes, keyBytesView, getLastVersion\r\n}) {\r\n\tlet readTxn, readTxnRenewed, returnNullWhenBig = false;\r\n\tlet renewId = 1;\r\n\tObject.assign(LMDBStore.prototype, {\r\n\t\tgetString(id) {\r\n\t\t\t(env.writeTxn || (readTxnRenewed ? readTxn : renewReadTxn()));\r\n\t\t\tlet string = this.db.getStringByBinary(this.writeKey(id, keyBytes, 0));\r\n\t\t\tif (typeof string === 'number') { // indicates the buffer wasn't large enough\r\n\t\t\t\tthis._allocateGetBuffer(string);\r\n\t\t\t\t// and then try again\r\n\t\t\t\tstring = this.db.getStringByBinary(this.writeKey(id, keyBytes, 0));\r\n\t\t\t}\r\n\t\t\tif (string)\r\n\t\t\t\tthis.lastSize = string.length;\r\n\t\t\treturn string;\r\n\t\t},\r\n\t\tgetBinaryFast(id) {\r\n\t\t\t(env.writeTxn || (readTxnRenewed ? readTxn : renewReadTxn()));\r\n\t\t\ttry {\r\n\t\t\t\tthis.lastSize = this.db.getByBinary(this.writeKey(id, keyBytes, 0));\r\n\t\t\t} catch (error) {\r\n\t\t\t\tif (error.message.startsWith('MDB_BAD_VALSIZE') && this.writeKey(id, keyBytes, 0) == 0)\r\n\t\t\t\t\terror = new Error(id === undefined ?\r\n\t\t\t\t\t\t'A key is required for get, but is undefined' :\r\n\t\t\t\t\t\t'Zero length key is not allowed in LMDB')\r\n\t\t\t\tthrow error\r\n\t\t\t}\r\n\t\t\tlet compression = this.compression;\r\n\t\t\tlet bytes = compression ? compression.getValueBytes : getValueBytes;\r\n\t\t\tif (this.lastSize > bytes.maxLength) {\r\n\t\t\t\t// this means we the target buffer wasn't big enough, so the get failed to copy all the data from the database, need to either grow or use special buffer\r\n\t\t\t\tif (this.lastSize === 0xffffffff)\r\n\t\t\t\t\treturn;\r\n\t\t\t\tif (returnNullWhenBig && this.lastSize > NEW_BUFFER_THRESHOLD)\r\n\t\t\t\t\t // used by getBinary to indicate it should create a dedicated buffer to receive this\r\n\t\t\t\t\treturn null;\r\n\t\t\t\tif (this.lastSize > NEW_BUFFER_THRESHOLD && !compression && this.db.getSharedByBinary) {\r\n\t\t\t\t\t// for large binary objects, cheaper to make a buffer that directly points at the shared LMDB memory to avoid copying a large amount of memory, but only for large data since there is significant overhead to instantiating the buffer\r\n\t\t\t\t\tif (this.lastShared) // we have to detach the last one, or else could crash due to two buffers pointing at same location\r\n\t\t\t\t\t\tenv.detachBuffer(this.lastShared.buffer)\r\n\t\t\t\t\treturn this.lastShared = this.db.getSharedByBinary(this.writeKey(id, keyBytes, 0));\r\n\t\t\t\t}\r\n\t\t\t\t// grow our shared/static buffer to accomodate the size of the data\r\n\t\t\t\tbytes = this._allocateGetBuffer(this.lastSize);\r\n\t\t\t\t// and try again\r\n\t\t\t\tthis.lastSize = this.db.getByBinary(this.writeKey(id, keyBytes, 0));\r\n\t\t\t}\r\n\t\t\tbytes.length = this.lastSize;\r\n\t\t\treturn bytes;\r\n\t\t},\r\n\t\t_allocateGetBuffer(lastSize) {\r\n\t\t\tlet newLength = Math.min(Math.max(lastSize * 2, 0x1000), 0xfffffff8);\r\n\t\t\tlet bytes;\r\n\t\t\tif (this.compression) {\r\n\t\t\t\tlet dictionary = this.compression.dictionary || new Uint8A(0);\r\n\t\t\t\tlet dictLength = (dictionary.length >> 3) << 3;// make sure it is word-aligned\r\n\t\t\t\tbytes = new Uint8A(newLength + dictLength);\r\n\t\t\t\tbytes.set(dictionary) // copy dictionary into start\r\n\t\t\t\t// the section after the dictionary is the target area for get values\r\n\t\t\t\tbytes = bytes.subarray(dictLength);\r\n\t\t\t\tthis.compression.setBuffer(bytes, newLength, dictionary, dictLength);\r\n\t\t\t\tbytes.maxLength = newLength;\r\n\t\t\t\tObject.defineProperty(bytes, 'length', { value: newLength, writable: true, configurable: true });\r\n\t\t\t\tthis.compression.getValueBytes = bytes;\r\n\t\t\t} else {\r\n\t\t\t\tbytes = makeReusableBuffer(newLength);\r\n\t\t\t\tsetGlobalBuffer(getValueBytes = bytes);\r\n\t\t\t}\r\n\t\t\treturn bytes;\r\n\t\t},\r\n\t\tgetBinary(id) {\r\n\t\t\tlet bytesToRestore;\r\n\t\t\ttry {\r\n\t\t\t\treturnNullWhenBig = true;\r\n\t\t\t\tlet fastBuffer = this.getBinaryFast(id);\r\n\t\t\t\tif (fastBuffer === null) {\r\n\t\t\t\t\tif (this.compression) {\r\n\t\t\t\t\t\tbytesToRestore = this.compression.getValueBytes;\r\n\t\t\t\t\t\tlet dictionary = this.compression.dictionary || [];\r\n\t\t\t\t\t\tlet dictLength = (dictionary.length >> 3) << 3;// make sure it is word-aligned\r\n\t\t\t\t\t\tlet bytes = makeReusableBuffer(this.lastSize);\r\n\t\t\t\t\t\tthis.compression.setBuffer(bytes, this.lastSize, dictionary, dictLength);\r\n\t\t\t\t\t\tthis.compression.getValueBytes = bytes;\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tbytesToRestore = getValueBytes;\r\n\t\t\t\t\t\tsetGlobalBuffer(getValueBytes = makeReusableBuffer(this.lastSize));\r\n\t\t\t\t\t}\r\n\t\t\t\t\treturn this.getBinaryFast(id);\r\n\t\t\t\t}\r\n\t\t\t\treturn fastBuffer && Uint8ArraySlice.call(fastBuffer, 0, this.lastSize);\r\n\t\t\t} finally {\r\n\t\t\t\treturnNullWhenBig = false;\r\n\t\t\t\tif (bytesToRestore) {\r\n\t\t\t\t\tif (this.compression) {\r\n\t\t\t\t\t\tlet compression = this.compression;\r\n\t\t\t\t\t\tlet dictLength = (compression.dictionary.length >> 3) << 3;\r\n\t\t\t\t\t\tcompression.setBuffer(bytesToRestore, bytesToRestore.maxLength, compression.dictionary, dictLength);\r\n\t\t\t\t\t\tcompression.getValueBytes = bytesToRestore;\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tsetGlobalBuffer(bytesToRestore);\r\n\t\t\t\t\t\tgetValueBytes = bytesToRestore;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\t\tget(id) {\r\n\t\t\tif (this.decoder) {\r\n\t\t\t\tlet bytes = this.getBinaryFast(id);\r\n\t\t\t\treturn bytes && this.decoder.decode(bytes);\r\n\t\t\t}\r\n\t\t\tif (this.encoding == 'binary')\r\n\t\t\t\treturn this.getBinary(id);\r\n\r\n\t\t\tlet result = this.getString(id);\r\n\t\t\tif (result) {\r\n\t\t\t\tif (this.encoding == 'json')\r\n\t\t\t\t\treturn JSON.parse(result);\r\n\t\t\t}\r\n\t\t\treturn result;\r\n\t\t},\r\n\t\tgetEntry(id) {\r\n\t\t\tlet value = this.get(id);\r\n\t\t\tif (value !== undefined) {\r\n\t\t\t\tif (this.useVersions)\r\n\t\t\t\t\treturn {\r\n\t\t\t\t\t\tvalue,\r\n\t\t\t\t\t\tversion: getLastVersion(),\r\n\t\t\t\t\t\t//size: this.lastSize\r\n\t\t\t\t\t};\r\n\t\t\t\telse\r\n\t\t\t\t\treturn {\r\n\t\t\t\t\t\tvalue,\r\n\t\t\t\t\t\t//size: this.lastSize\r\n\t\t\t\t\t};\r\n\t\t\t}\r\n\t\t},\r\n\t\tresetReadTxn() {\r\n\t\t\tresetReadTxn();\r\n\t\t},\r\n\t\t_commitReadTxn() {\r\n\t\t\tif (readTxn)\r\n\t\t\t\treadTxn.commit();\r\n\t\t\treadTxnRenewed = null;\r\n\t\t\treadTxn = null;\r\n\t\t},\r\n\t\tensureReadTxn() {\r\n\t\t\tif (!env.writeTxn && !readTxnRenewed)\r\n\t\t\t\trenewReadTxn();\r\n\t\t},\r\n\t\tdoesExist(key, versionOrValue) {\r\n\t\t\tif (!env.writeTxn)\r\n\t\t\t\treadTxnRenewed ? readTxn : renewReadTxn();\r\n\t\t\tif (versionOrValue == null) {\r\n\t\t\t\tthis.getBinaryFast(key);\r\n\t\t\t\t// undefined means the entry exists, null is used specifically to check for the entry *not* existing\r\n\t\t\t\treturn (this.lastSize === 0xffffffff) == (versionOrValue === null);\r\n\t\t\t}\r\n\t\t\telse if (this.useVersions) {\r\n\t\t\t\tthis.getBinaryFast(key);\r\n\t\t\t\treturn this.lastSize !== 0xffffffff && getLastVersion() === versionOrValue;\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tif (versionOrValue && versionOrValue['\\x10binary-data\\x02'])\r\n\t\t\t\t\tversionOrValue = versionOrValue['\\x10binary-data\\x02'];\r\n\t\t\t\telse if (this.encoder)\r\n\t\t\t\t\tversionOrValue = this.encoder.encode(versionOrValue);\r\n\t\t\t\tif (typeof versionOrValue == 'string')\r\n\t\t\t\t\tversionOrValue = Buffer.from(versionOrValue);\r\n\t\t\t\treturn this.getValuesCount(key, { start: versionOrValue, exactMatch: true}) > 0;\r\n\t\t\t}\r\n\t\t},\r\n\t\tgetValues(key, options) {\r\n\t\t\tlet defaultOptions = {\r\n\t\t\t\tkey,\r\n\t\t\t\tvaluesForKey: true\r\n\t\t\t};\r\n\t\t\tif (options && options.snapshot === false)\r\n\t\t\t\tthrow new Error('Can not disable snapshots for getValues');\r\n\t\t\treturn this.getRange(options ? Object.assign(defaultOptions, options) : defaultOptions);\r\n\t\t},\r\n\t\tgetKeys(options) {\r\n\t\t\tif (!options)\r\n\t\t\t\toptions = {};\r\n\t\t\toptions.values = false;\r\n\t\t\treturn this.getRange(options);\r\n\t\t},\r\n\t\tgetCount(options) {\r\n\t\t\tif (!options)\r\n\t\t\t\toptions = {};\r\n\t\t\toptions.onlyCount = true;\r\n\t\t\treturn this.getRange(options).iterate();\r\n\t\t},\r\n\t\tgetKeysCount(options) {\r\n\t\t\tif (!options)\r\n\t\t\t\toptions = {};\r\n\t\t\toptions.onlyCount = true;\r\n\t\t\toptions.values = false;\r\n\t\t\treturn this.getRange(options).iterate();\r\n\t\t},\r\n\t\tgetValuesCount(key, options) {\r\n\t\t\tif (!options)\r\n\t\t\t\toptions = {};\r\n\t\t\toptions.key = key;\r\n\t\t\toptions.valuesForKey = true;\r\n\t\t\toptions.onlyCount = true;\r\n\t\t\treturn this.getRange(options).iterate();\r\n\t\t},\r\n\t\tgetRange(options) {\r\n\t\t\tlet iterable = new RangeIterable();\r\n\t\t\tif (!options)\r\n\t\t\t\toptions = {};\r\n\t\t\tlet includeValues = options.values !== false;\r\n\t\t\tlet includeVersions = options.versions;\r\n\t\t\tlet valuesForKey = options.valuesForKey;\r\n\t\t\tlet limit = options.limit;\r\n\t\t\tlet db = this.db;\r\n\t\t\tlet snapshot = options.snapshot;\r\n\t\t\tlet compression = this.compression;\r\n\t\t\titerable.iterate = () => {\r\n\t\t\t\tlet currentKey = valuesForKey ? options.key : options.start;\r\n\t\t\t\tconst reverse = options.reverse;\r\n\t\t\t\tlet count = 0;\r\n\t\t\t\tlet cursor, cursorRenewId;\r\n\t\t\t\tlet txn;\r\n\t\t\t\tlet flags = (includeValues ? 0x100 : 0) | (reverse ? 0x400 : 0) |\r\n\t\t\t\t\t(valuesForKey ? 0x800 : 0) | (options.exactMatch ? 0x4000 : 0);\r\n\t\t\t\tfunction resetCursor() {\r\n\t\t\t\t\ttry {\r\n\t\t\t\t\t\tif (cursor)\r\n\t\t\t\t\t\t\tfinishCursor();\r\n\t\t\t\t\t\tlet writeTxn = env.writeTxn;\r\n\t\t\t\t\t\tif (writeTxn)\r\n\t\t\t\t\t\t\tsnapshot = false;\r\n\t\t\t\t\t\ttxn = writeTxn || (readTxnRenewed ? readTxn : renewReadTxn());\r\n\t\t\t\t\t\tcursor = !writeTxn && db.availableCursor;\r\n\t\t\t\t\t\tif (cursor) {\r\n\t\t\t\t\t\t\tdb.availableCursor = null;\r\n\t\t\t\t\t\t\tflags |= 0x2000;\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\tcursor = new Cursor(db);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\ttxn.cursorCount = (txn.cursorCount || 0) + 1; // track transaction so we always use the same one\r\n\t\t\t\t\t\tif (snapshot === false) {\r\n\t\t\t\t\t\t\tcursorRenewId = renewId; // use shared read transaction\r\n\t\t\t\t\t\t\ttxn.renewingCursorCount = (txn.renewingCursorCount || 0) + 1; // need to know how many are renewing cursors\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t} catch(error) {\r\n\t\t\t\t\t\tif (cursor) {\r\n\t\t\t\t\t\t\ttry {\r\n\t\t\t\t\t\t\t\tcursor.close();\r\n\t\t\t\t\t\t\t} catch(error) { }\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tthrow error;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tresetCursor();\r\n\t\t\t\tlet store = this;\r\n\t\t\t\tif (options.onlyCount) {\r\n\t\t\t\t\tflags |= 0x1000;\r\n\t\t\t\t\tlet count = position(options.offset);\r\n\t\t\t\t\tif (count < 0)\r\n\t\t\t\t\t\tlmdbError(count);\r\n\t\t\t\t\tfinishCursor();\r\n\t\t\t\t\treturn count;\r\n\t\t\t\t}\r\n\t\t\t\tfunction position(offset) {\r\n\t\t\t\t\tlet keySize = currentKey === undefined ? 0 : store.writeKey(currentKey, keyBytes, 0);\r\n\t\t\t\t\tlet endAddress;\r\n\t\t\t\t\tif (valuesForKey) {\r\n\t\t\t\t\t\tif (options.start === undefined && options.end === undefined)\r\n\t\t\t\t\t\t\tendAddress = 0;\r\n\t\t\t\t\t\telse {\r\n\t\t\t\t\t\t\tlet startAddress;\r\n\t\t\t\t\t\t\tif (store.encoder.writeKey) {\r\n\t\t\t\t\t\t\t\tstartAddress = saveKey(options.start, store.encoder.writeKey, iterable, maxKeySize);\r\n\t\t\t\t\t\t\t\tkeyBytesView.setFloat64(START_ADDRESS_POSITION, startAddress, true);\r\n\t\t\t\t\t\t\t\tendAddress = saveKey(options.end, store.encoder.writeKey, iterable, maxKeySize);\r\n\t\t\t\t\t\t\t} else if ((!options.start || options.start instanceof Uint8Array) && (!options.end || options.end instanceof Uint8Array)) {\r\n\t\t\t\t\t\t\t\tstartAddress = saveKey(options.start, orderedBinary.writeKey, iterable, maxKeySize);\r\n\t\t\t\t\t\t\t\tkeyBytesView.setFloat64(START_ADDRESS_POSITION, startAddress, true);\r\n\t\t\t\t\t\t\t\tendAddress = saveKey(options.end, orderedBinary.writeKey, iterable, maxKeySize);\r\n\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\tthrow new Error('Only key-based encoding is supported for start/end values');\r\n\t\t\t\t\t\t\t\tlet encoded = store.encoder.encode(options.start);\r\n\t\t\t\t\t\t\t\tlet bufferAddress = encoded.buffer.address || (encoded.buffer.address = getAddress(encoded) - encoded.byteOffset);\r\n\t\t\t\t\t\t\t\tstartAddress = bufferAddress + encoded.byteOffset;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t} else\r\n\t\t\t\t\t\tendAddress = saveKey(options.end, store.writeKey, iterable, maxKeySize);\r\n\t\t\t\t\treturn cursor.position(flags, offset || 0, keySize, endAddress);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tfunction finishCursor() {\r\n\t\t\t\t\tif (txn.isDone)\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\tif (cursorRenewId)\r\n\t\t\t\t\t\ttxn.renewingCursorCount--;\r\n\t\t\t\t\tif (--txn.cursorCount <= 0 && txn.onlyCursor) {\r\n\t\t\t\t\t\tcursor.close();\r\n\t\t\t\t\t\ttxn.abort(); // this is no longer main read txn, abort it now that we are done\r\n\t\t\t\t\t\ttxn.isDone = true;\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tif (db.availableCursor || txn != readTxn) {\r\n\t\t\t\t\t\t\tcursor.close();\r\n\t\t\t\t\t\t} else { // try to reuse it\r\n\t\t\t\t\t\t\tdb.availableCursor = cursor;\r\n\t\t\t\t\t\t\tdb.cursorTxn = txn;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn {\r\n\t\t\t\t\tnext() {\r\n\t\t\t\t\t\tlet keySize, lastSize;\r\n\t\t\t\t\t\tif (cursorRenewId && (cursorRenewId != renewId || txn.isDone)) {\r\n\t\t\t\t\t\t\tresetCursor();\r\n\t\t\t\t\t\t\tkeySize = position(0);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tif (count === 0) { // && includeValues) // on first entry, get current value if we need to\r\n\t\t\t\t\t\t\tkeySize = position(options.offset);\r\n\t\t\t\t\t\t} else\r\n\t\t\t\t\t\t\tkeySize = cursor.iterate();\r\n\t\t\t\t\t\tif (keySize <= 0 ||\r\n\t\t\t\t\t\t\t\t(count++ >= limit)) {\r\n\t\t\t\t\t\t\tif (count < 0)\r\n\t\t\t\t\t\t\t\tlmdbError(count);\t\t\t\t\r\n\t\t\t\t\t\t\tfinishCursor();\r\n\t\t\t\t\t\t\treturn ITERATOR_DONE;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tif (!valuesForKey || snapshot === false) {\r\n\t\t\t\t\t\t\tif (keySize > 20000) {\r\n\t\t\t\t\t\t\t\tif (keySize > 0x1000000)\r\n\t\t\t\t\t\t\t\t\tlmdbError(keySize - 0x100000000)\r\n\t\t\t\t\t\t\t\tthrow new Error('Invalid key size ' + keySize.toString(16))\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tcurrentKey = store.readKey(keyBytes, 32, keySize + 32);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tif (includeValues) {\r\n\t\t\t\t\t\t\tlet value;\r\n\t\t\t\t\t\t\tlastSize = keyBytesView.getUint32(0, true);\r\n\t\t\t\t\t\t\tlet bytes = compression ? compression.getValueBytes : getValueBytes;\r\n\t\t\t\t\t\t\tif (lastSize > bytes.maxLength) {\r\n\t\t\t\t\t\t\t\tbytes = store._allocateGetBuffer(lastSize);\r\n\t\t\t\t\t\t\t\tlet rc = cursor.getCurrentValue();\r\n\t\t\t\t\t\t\t\tif (rc < 0)\r\n\t\t\t\t\t\t\t\t\tlmdbError(count);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tbytes.length = lastSize;\r\n\t\t\t\t\t\t\tif (store.decoder) {\r\n\t\t\t\t\t\t\t\tvalue = store.decoder.decode(bytes, lastSize);\r\n\t\t\t\t\t\t\t} else if (store.encoding == 'binary')\r\n\t\t\t\t\t\t\t\tvalue = Uint8ArraySlice.call(bytes, 0, lastSize);\r\n\t\t\t\t\t\t\telse {\r\n\t\t\t\t\t\t\t\tvalue = bytes.toString('utf8', 0, lastSize);\r\n\t\t\t\t\t\t\t\tif (store.encoding == 'json' && value)\r\n\t\t\t\t\t\t\t\t\tvalue = JSON.parse(value);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tif (includeVersions)\r\n\t\t\t\t\t\t\t\treturn {\r\n\t\t\t\t\t\t\t\t\tvalue: {\r\n\t\t\t\t\t\t\t\t\t\tkey: currentKey,\r\n\t\t\t\t\t\t\t\t\t\tvalue,\r\n\t\t\t\t\t\t\t\t\t\tversion: getLastVersion()\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t};\r\n \t\t\t\t\t\t\telse if (valuesForKey)\r\n\t\t\t\t\t\t\t\treturn {\r\n\t\t\t\t\t\t\t\t\tvalue\r\n\t\t\t\t\t\t\t\t};\r\n\t\t\t\t\t\t\telse\r\n\t\t\t\t\t\t\t\treturn {\r\n\t\t\t\t\t\t\t\t\tvalue: {\r\n\t\t\t\t\t\t\t\t\t\tkey: currentKey,\r\n\t\t\t\t\t\t\t\t\t\tvalue,\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t};\r\n\t\t\t\t\t\t} else if (includeVersions) {\r\n\t\t\t\t\t\t\treturn {\r\n\t\t\t\t\t\t\t\tvalue: {\r\n\t\t\t\t\t\t\t\t\tkey: currentKey,\r\n\t\t\t\t\t\t\t\t\tversion: getLastVersion()\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t};\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\treturn {\r\n\t\t\t\t\t\t\t\tvalue: currentKey\r\n\t\t\t\t\t\t\t};\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t},\r\n\t\t\t\t\treturn() {\r\n\t\t\t\t\t\tfinishCursor();\r\n\t\t\t\t\t\treturn ITERATOR_DONE;\r\n\t\t\t\t\t},\r\n\t\t\t\t\tthrow() {\r\n\t\t\t\t\t\tfinishCursor();\r\n\t\t\t\t\t\treturn ITERATOR_DONE;\r\n\t\t\t\t\t}\r\n\t\t\t\t};\r\n\t\t\t};\r\n\t\t\treturn iterable;\r\n\t\t},\r\n\r\n\t\tgetMany(keys, callback) {\r\n\t\t\t// this is an asynchronous get for multiple keys. It actually works by prefetching asynchronously,\r\n\t\t\t// allowing a separate to absorb the potentially largest cost: hard page faults (and disk I/O).\r\n\t\t\t// And then we just do standard sync gets (to deserialized data) to fulfil the callback/promise\r\n\t\t\t// once the prefetch occurs\r\n\t\t\tlet promise = callback ? undefined : new Promise(resolve => callback = (error, results) => resolve(results));\r\n\t\t\tthis.prefetch(keys, () => {\r\n\t\t\t\tlet results = new Array(keys.length);\r\n\t\t\t\tfor (let i = 0, l = keys.length; i < l; i++) {\r\n\t\t\t\t\tresults[i] = get.call(this, keys[i]);\r\n\t\t\t\t}\r\n\t\t\t\tcallback(null, results);\r\n\t\t\t});\r\n\t\t\treturn promise;\r\n\t\t},\r\n\t\tgetSharedBufferForGet(id) {\r\n\t\t\tlet txn = (env.writeTxn || (readTxnRenewed ? readTxn : renewReadTxn()));\r\n\t\t\tthis.lastSize = this.keyIsCompatibility ? txn.getBinaryShared(id) : this.db.get(this.writeKey(id, keyBytes, 0));\r\n\t\t\tif (this.lastSize === 0xffffffff) { // not found code\r\n\t\t\t\treturn; //undefined\r\n\t\t\t}\r\n\t\t\treturn this.lastSize;\r\n\t\t\tthis.lastSize = keyBytesView.getUint32(0, true);\r\n\t\t\tlet bufferIndex = keyBytesView.getUint32(12, true);\r\n\t\t\tlastOffset = keyBytesView.getUint32(8, true);\r\n\t\t\tlet buffer = buffers[bufferIndex];\r\n\t\t\tlet startOffset;\r\n\t\t\tif (!buffer || lastOffset < (startOffset = buffer.startOffset) || (lastOffset + this.lastSize > startOffset + 0x100000000)) {\r\n\t\t\t\tif (buffer)\r\n\t\t\t\t\tenv.detachBuffer(buffer.buffer);\r\n\t\t\t\tstartOffset = (lastOffset >>> 16) * 0x10000;\r\n\t\t\t\tconsole.log('make buffer for address', bufferIndex * 0x100000000 + startOffset);\r\n\t\t\t\tbuffer = buffers[bufferIndex] = Buffer.from(getBufferForAddress(bufferIndex * 0x100000000 + startOffset));\r\n\t\t\t\tbuffer.startOffset = startOffset;\r\n\t\t\t}\r\n\t\t\tlastOffset -= startOffset;\r\n\t\t\treturn buffer;\r\n\t\t\treturn buffer.slice(lastOffset, lastOffset + this.lastSize);/*Uint8ArraySlice.call(buffer, lastOffset, lastOffset + this.lastSize)*/\r\n\t\t},\r\n\t\tprefetch(keys, callback) {\r\n\t\t\tif (!keys)\r\n\t\t\t\tthrow new Error('An array of keys must be provided');\r\n\t\t\tif (!keys.length) {\r\n\t\t\t\tif (callback) {\r\n\t\t\t\t\tcallback(null);\r\n\t\t\t\t\treturn;\r\n\t\t\t\t} else\r\n\t\t\t\t\treturn Promise.resolve();\r\n\t\t\t}\r\n\t\t\tlet buffers = [];\r\n\t\t\tlet startPosition;\r\n\t\t\tlet bufferHolder = {};\r\n\t\t\tlet lastBuffer;\r\n\t\t\tfor (let key of keys) {\r\n\t\t\t\tlet position = saveKey(key, this.writeKey, bufferHolder, maxKeySize);\r\n\t\t\t\tif (!startPosition)\r\n\t\t\t\t\tstartPosition = position;\r\n\t\t\t\tif (bufferHolder.saveBuffer != lastBuffer) {\r\n\t\t\t\t\tbuffers.push(bufferHolder);\r\n\t\t\t\t\tlastBuffer = bufferHolder.saveBuffer;\r\n\t\t\t\t\tbufferHolder = { saveBuffer: lastBuffer };\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tsaveKey(undefined, this.writeKey, bufferHolder, maxKeySize);\r\n\t\t\tthis.db.prefetch(startPosition, (error) => {\r\n\t\t\t\tif (error)\r\n\t\t\t\t\tconsole.error('Error with prefetch', buffers, bufferHolder); // partly exists to keep the buffers pinned in memory\r\n\t\t\t\telse\r\n\t\t\t\t\tcallback(null);\r\n\t\t\t});\r\n\t\t\tif (!callback)\r\n\t\t\t\treturn new Promise(resolve => callback = resolve);\r\n\t\t},\r\n\t\tclose(callback) {\r\n\t\t\tthis.status = 'closing';\r\n\t\t\tif (this.isRoot) {\r\n\t\t\t\tif (readTxn) {\r\n\t\t\t\t\ttry {\r\n\t\t\t\t\t\treadTxn.abort();\r\n\t\t\t\t\t} catch(error) {}\r\n\t\t\t\t}\r\n\t\t\t\treadTxn = {\r\n\t\t\t\t\trenew() {\r\n\t\t\t\t\t\tthrow new Error('Can not read from a closed database');\r\n\t\t\t\t\t}\r\n\t\t\t\t};\r\n\t\t\t\treadTxnRenewed = null;\r\n\t\t\t}\r\n\t\t\tlet txnPromise = this._endWrites();\r\n\t\t\tconst doClose = () => {\r\n\t\t\t\tthis.db.close();\r\n\t\t\t\tif (this.isRoot) {\r\n\t\t\t\t\tenv.close();\r\n\t\t\t\t}\r\n\t\t\t\tthis.status = 'closed';\r\n\t\t\t\tif (callback)\r\n\t\t\t\t\tcallback();\r\n\t\t\t}\r\n\t\t\tif (txnPromise)\r\n\t\t\t\treturn txnPromise.then(doClose);\r\n\t\t\telse {\r\n\t\t\t\tdoClose();\r\n\t\t\t\treturn Promise.resolve();\r\n\t\t\t}\r\n\t\t},\r\n\t\tgetStats() {\r\n\t\t\treadTxnRenewed ? readTxn : renewReadTxn();\r\n\t\t\treturn this.db.stat();\r\n\t\t}\r\n\t});\r\n\tlet get = LMDBStore.prototype.get;\r\n\tfunction renewReadTxn() {\r\n\t\tif (!readTxn) {\r\n\t\t\tlet retries = 0;\r\n\t\t\tlet waitArray;\r\n\t\t\tdo {\r\n\t\t\t\ttry {\r\n\t\t\t\t\treadTxn = env.beginTxn(0x20000);\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t} catch (error) {\r\n\t\t\t\t\tif (error.message.includes('temporarily')) {\r\n\t\t\t\t\t\tif (!waitArray)\r\n\t\t\t\t\t\t\twaitArray = new Int32Array(new SharedArrayBuffer(4), 0, 1);\r\n\t\t\t\t\t\tAtomics.wait(waitArray, 0, 0, retries * 2);\r\n\t\t\t\t\t} else\r\n\t\t\t\t\t\tthrow error;\r\n\t\t\t\t}\r\n\t\t\t} while (retries++ < 100);\r\n\t\t}\r\n\t\treadTxnRenewed = setTimeout(resetReadTxn, 0);\r\n\t\treturn readTxn;\r\n\t}\r\n\tfunction resetReadTxn(hardReset) {\r\n\t\trenewId++;\r\n\t\tif (readTxnRenewed) {\r\n\t\t\treadTxnRenewed = null;\r\n\t\t\tif (readTxn.cursorCount - (readTxn.renewingCursorCount || 0) > 0) {\r\n\t\t\t\treadTxn.onlyCursor = true;\r\n\t\t\t\treadTxn = null;\r\n\t\t\t} else\r\n\t\t\t\treadTxn.reset();\r\n\t\t}\r\n\t}\r\n}\r\nexport function makeReusableBuffer(size) {\r\n\tlet bytes = typeof Buffer != 'undefined' ? Buffer.alloc(size) : new Uint8Array(size);\r\n\tbytes.maxLength = size;\r\n\tObject.defineProperty(bytes, 'length', { value: size, writable: true, configurable: true });\r\n\treturn bytes;\r\n}\r\n","import { Compression, getAddress, require, arch, fs, path as pathModule, lmdbError, EventEmitter, MsgpackrEncoder, Env, tmpdir, os, isWorkerThread } from './external.js';\r\nimport { CachingStore, setGetLastVersion } from './caching.js';\r\nimport { addReadMethods, makeReusableBuffer } from './read.js';\r\nimport { addWriteMethods } from './write.js';\r\nimport { applyKeyHandling } from './keys.js';\r\nsetGetLastVersion(getLastVersion);\r\nlet keyBytes, keyBytesView;\r\nconst buffers = [];\r\n\r\n\r\n// this is hard coded as an upper limit because it is important assumption of the fixed buffers in writing instructions\r\n// this corresponds to the max key size for 8KB pages, which is currently the default\r\nconst MAX_KEY_SIZE = 4026;\r\nconst DEFAULT_COMMIT_DELAY = 0;\r\n\r\nexport const allDbs = new Map();\r\nlet defaultCompression;\r\nlet lastSize, lastOffset, lastVersion;\r\nlet abortedNonChildTransactionWarn;\r\nexport function open(path, options) {\r\n\tif (!keyBytes) // TODO: Consolidate get buffer and key buffer (don't think we need both)\r\n\t\tallocateFixedBuffer();\r\n\tlet committingWrites;\r\n\tlet scheduledTransactions;\r\n\tlet scheduledOperations;\r\n\tlet asyncTransactionAfter = true, asyncTransactionStrictOrder;\r\n\tlet transactionWarned;\r\n\tif (typeof path == 'object' && !options) {\r\n\t\toptions = path;\r\n\t\tpath = options.path;\r\n\t}\r\n\tif (!path) {\r\n\t\tif (!options)\r\n\t\t\toptions = {};\r\n\t\toptions.deleteOnClose = true;\r\n\t\toptions.noSync = true;\r\n\t\tpath = tmpdir() + '/' + Math.floor(Math.random() * 2821109907455).toString(36) + '.mdb'\r\n\t}\r\n\tlet extension = pathModule.extname(path);\r\n\tlet name = pathModule.basename(path, extension);\r\n\tlet is32Bit = arch().endsWith('32');\r\n\tlet remapChunks = (options && options.remapChunks) || ((options && options.mapSize) ?\r\n\t\t(is32Bit && options.mapSize > 0x100000000) : // larger than fits in address space, must use dynamic maps\r\n\t\tis32Bit); // without a known map size, we default to being able to handle large data correctly/well*/\r\n\toptions = Object.assign({\r\n\t\tpath,\r\n\t\tnoSubdir: Boolean(extension),\r\n\t\tisRoot: true,\r\n\t\tmaxDbs: 12,\r\n\t\tremapChunks,\r\n\t\tkeyBytes,\r\n\t\tpageSize: 4096,\r\n\t\toverlappingSync: (options && (options.noSync || options.readOnly)) ? false : (os != 'win32' && !isWorkerThread),\r\n\t\t// default map size limit of 4 exabytes when using remapChunks, since it is not preallocated and we can\r\n\t\t// make it super huge.\r\n\t\tmapSize: remapChunks ? 0x10000000000000 :\r\n\t\t\t0x20000, // Otherwise we start small with 128KB\r\n\t}, options);\r\n\tif (options.asyncTransactionOrder == 'before') {\r\n\t\tconsole.warn('asyncTransactionOrder: \"before\" is deprecated');\r\n\t\tasyncTransactionAfter = false;\r\n\t} else if (options.asyncTransactionOrder == 'strict') {\r\n\t\tasyncTransactionStrictOrder = true;\r\n\t\tasyncTransactionAfter = false;\r\n\t}\r\n\r\n\tif (!exists(options.noSubdir ? pathModule.dirname(path) : path))\r\n\t\tfs.mkdirSync(options.noSubdir ? pathModule.dirname(path) : path, { recursive: true }\r\n\t\t);\r\n\tfunction makeCompression(compressionOptions) {\r\n\t\tif (compressionOptions instanceof Compression)\r\n\t\t\treturn compressionOptions;\r\n\t\tlet useDefault = typeof compressionOptions != 'object';\r\n\t\tif (useDefault && defaultCompression)\r\n\t\t\treturn defaultCompression;\r\n\t\tcompressionOptions = Object.assign({\r\n\t\t\tthreshold: 1000,\r\n\t\t\tdictionary: fs.readFileSync(new URL('./dict/dict.txt', import.meta.url.replace(/dist[\\\\\\/]index.cjs$/, ''))),\r\n\t\t\tgetValueBytes: makeReusableBuffer(0),\r\n\t\t}, compressionOptions);\r\n\t\tlet compression = Object.assign(new Compression(compressionOptions), compressionOptions);\r\n\t\tif (useDefault)\r\n\t\t\tdefaultCompression = compression;\r\n\t\treturn compression;\r\n\t}\r\n\r\n\tif (options.compression)\r\n\t\toptions.compression = makeCompression(options.compression);\r\n\tlet flags =\r\n\t\t(options.overlappingSync ? 0x1000 : 0) |\r\n\t\t(options.noSubdir ? 0x4000 : 0) |\r\n\t\t(options.noSync ? 0x10000 : 0) |\r\n\t\t(options.readOnly ? 0x20000 : 0) |\r\n\t\t(options.noMetaSync ? 0x40000 : 0) |\r\n\t\t(options.useWritemap ? 0x80000 : 0) |\r\n\t\t(options.mapAsync ? 0x100000 : 0) |\r\n\t\t(options.noReadAhead ? 0x800000 : 0) |\r\n\t\t(options.noMemInit ? 0x1000000 : 0) |\r\n\t\t(options.usePreviousSnapshot ? 0x2000000 : 0) |\r\n\t\t(options.remapChunks ? 0x4000000 : 0);\r\n\r\n\tlet env = new Env();\r\n\tlet jsFlags = (options.separateFlushed ? 1 : 0) |\r\n\t\t(options.deleteOnClose ? 2 : 0)\r\n\tlet rc = env.open(options, flags, jsFlags);\r\n if (rc)\r\n\t\tlmdbError(rc);\r\n\tlet maxKeySize = env.getMaxKeySize();\r\n\tmaxKeySize = Math.min(maxKeySize, MAX_KEY_SIZE);\r\n\tenv.readerCheck(); // clear out any stale entries\r\n\tlet stores = [];\r\n\tclass LMDBStore extends EventEmitter {\r\n\t\tconstructor(dbName, dbOptions) {\r\n\t\t\tsuper();\r\n\t\t\tif (dbName === undefined)\r\n\t\t\t\tthrow new Error('Database name must be supplied in name property (may be null for root database)');\r\n\r\n\t\t\tif (options.compression && dbOptions.compression !== false && typeof dbOptions.compression != 'object')\r\n\t\t\t\tdbOptions.compression = options.compression; // use the parent compression if available\r\n\t\t\telse if (dbOptions.compression)\r\n\t\t\t\tdbOptions.compression = makeCompression(dbOptions.compression);\r\n\r\n\t\t\tif (dbOptions.dupSort && (dbOptions.useVersions || dbOptions.cache)) {\r\n\t\t\t\tthrow new Error('The dupSort flag can not be combined with versions or caching');\r\n\t\t\t}\r\n\t\t\t// make sure we are using a fresh read txn, so we don't want to share with a cursor txn\r\n\t\t\tthis.resetReadTxn();\r\n\t\t\tthis.ensureReadTxn();\r\n\t\t\tlet keyIsBuffer = dbOptions.keyIsBuffer\r\n\t\t\tif (dbOptions.keyEncoding == 'uint32') {\r\n\t\t\t\tdbOptions.keyIsUint32 = true;\r\n\t\t\t} else if (dbOptions.keyEncoder) {\r\n\t\t\t\tif (dbOptions.keyEncoder.enableNullTermination) {\r\n\t\t\t\t\tdbOptions.keyEncoder.enableNullTermination()\r\n\t\t\t\t} else\r\n\t\t\t\t\tkeyIsBuffer = true;\r\n\t\t\t} else if (dbOptions.keyEncoding == 'binary') {\r\n\t\t\t\tkeyIsBuffer = true;\r\n\t\t\t}\r\n\t\t\tlet flags = (dbOptions.reverseKey ? 0x02 : 0) |\r\n\t\t\t\t(dbOptions.dupSort ? 0x04 : 0) |\r\n\t\t\t\t(dbOptions.dupFixed ? 0x10 : 0) |\r\n\t\t\t\t(dbOptions.integerDup ? 0x20 : 0) |\r\n\t\t\t\t(dbOptions.reverseDup ? 0x40 : 0) |\r\n\t\t\t\t(dbOptions.useVersions ? 0x1000 : 0);\r\n\t\t\tlet keyType = (dbOptions.keyIsUint32 || dbOptions.keyEncoding == 'uint32') ? 2 : keyIsBuffer ? 3 : 0;\r\n\t\t\tif (keyType == 2)\r\n\t\t\t\tflags |= 0x08; // integer key\r\n\t\t\tif (!((flags & 0xff) && !dbName)) // if there are any dupsort options on the main db, skip as we have to use a write txn below\r\n\t\t\t\tthis.db = env.openDbi(flags, dbName, keyType, dbOptions.compression);\r\n\t\t\tthis._commitReadTxn(); // current read transaction becomes invalid after opening another db\r\n\t\t\tif (!this.db) {// not found\r\n\t\t\t\tif (dbOptions.create !== false && !options.readOnly) {\r\n\t\t\t\t\tflags |= 0x40000; // add create flag\r\n\t\t\t\t\tthis.transactionSync(() => {\r\n\t\t\t\t\t\tthis.db = env.openDbi(flags, dbName, keyType, dbOptions.compression);\r\n\t\t\t\t\t}, options.overlappingSync ? 0x10002 : 2); // no flush-sync, but synchronously commit\r\n\t\t\t\t} else {\r\n\t\t\t\t\treturn; // return undefined to indicate it could not be found\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tthis.db.name = dbName || null;\r\n\t\t\tthis.name = dbName;\r\n\t\t\tthis.status = 'open';\r\n\t\t\tthis.env = env;\r\n\t\t\tthis.reads = 0;\r\n\t\t\tthis.writes = 0;\r\n\t\t\tthis.transactions = 0;\r\n\t\t\tthis.averageTransactionTime = 5;\r\n\t\t\tif (dbOptions.syncBatchThreshold)\r\n\t\t\t\tconsole.warn('syncBatchThreshold is no longer supported');\r\n\t\t\tif (dbOptions.immediateBatchThreshold)\r\n\t\t\t\tconsole.warn('immediateBatchThreshold is no longer supported');\r\n\t\t\tthis.commitDelay = DEFAULT_COMMIT_DELAY;\r\n\t\t\tObject.assign(this, { // these are the options that are inherited\r\n\t\t\t\tpath: options.path,\r\n\t\t\t\tencoding: options.encoding,\r\n\t\t\t\tstrictAsyncOrder: options.strictAsyncOrder,\r\n\t\t\t}, dbOptions);\r\n\t\t\tlet Encoder;\r\n\t\t\tif (this.encoder && this.encoder.Encoder) {\r\n\t\t\t\tEncoder = this.encoder.Encoder;\r\n\t\t\t\tthis.encoder = null; // don't copy everything from the module\r\n\t\t\t}\r\n\t\t\tif (!Encoder && !(this.encoder && this.encoder.encode) && (!this.encoding || this.encoding == 'msgpack' || this.encoding == 'cbor')) {\r\n\t\t\t\tEncoder = (this.encoding == 'cbor' ? require('cbor-x').Encoder : MsgpackrEncoder);\r\n\t\t\t}\r\n\t\t\tif (Encoder) {\r\n\t\t\t\tthis.encoder = new Encoder(Object.assign(\r\n\t\t\t\t\tassignConstrainedProperties(['copyBuffers', 'getStructures', 'saveStructures', 'useFloat32', 'useRecords', 'structuredClone', 'variableMapSize', 'useTimestamp32', 'largeBigIntToFloat', 'encodeUndefinedAsNil', 'int64AsNumber', 'onInvalidDate', 'mapsAsObjects', 'useTag259ForMaps', 'pack', 'maxSharedStructures', 'shouldShareStructure'],\r\n\t\t\t\t\tthis.sharedStructuresKey ? this.setupSharedStructures() : {\r\n\t\t\t\t\t\tcopyBuffers: true, // need to copy any embedded buffers that are found since we use unsafe buffers\r\n\t\t\t\t\t}, options, dbOptions), this.encoder));\r\n\t\t\t}\r\n\t\t\tif (this.encoding == 'json') {\r\n\t\t\t\tthis.encoder = {\r\n\t\t\t\t\tencode: JSON.stringify,\r\n\t\t\t\t};\r\n\t\t\t} else if (this.encoder) {\r\n\t\t\t\tthis.decoder = this.encoder;\r\n\t\t\t}\r\n\t\t\tthis.maxKeySize = maxKeySize;\r\n\t\t\tapplyKeyHandling(this);\r\n\t\t\tallDbs.set(dbName ? name + '-' + dbName : name, this);\r\n\t\t\tstores.push(this);\r\n\t\t}\r\n\t\topenDB(dbName, dbOptions) {\r\n\t\t\tif (this.dupSort && this.name == null)\r\n\t\t\t\tthrow new Error('Can not open named databases if the main database is dupSort')\r\n\t\t\tif (typeof dbName == 'object' && !dbOptions) {\r\n\t\t\t\tdbOptions = dbName;\r\n\t\t\t\tdbName = dbOptions.name;\r\n\t\t\t} else\r\n\t\t\t\tdbOptions = dbOptions || {};\r\n\t\t\ttry {\r\n\t\t\t\treturn dbOptions.cache ?\r\n\t\t\t\t\tnew (CachingStore(LMDBStore))(dbName, dbOptions) :\r\n\t\t\t\t\tnew LMDBStore(dbName, dbOptions);\r\n\t\t\t} catch(error) {\r\n\t\t\t\tif (error.message.indexOf('MDB_DBS_FULL') > -1) {\r\n\t\t\t\t\terror.message += ' (increase your maxDbs option)';\r\n\t\t\t\t}\r\n\t\t\t\tthrow error;\r\n\t\t\t}\r\n\t\t}\r\n\t\topen(dbOptions, callback) {\r\n\t\t\tlet db = this.openDB(dbOptions);\r\n\t\t\tif (callback)\r\n\t\t\t\tcallback(null, db);\r\n\t\t\treturn db;\r\n\t\t}\r\n\t\ttransactionAsync(callback, asChild) {\r\n\t\t\tlet lastOperation;\r\n\t\t\tlet after, strictOrder;\r\n\t\t\tif (scheduledOperations) {\r\n\t\t\t\tlastOperation = asyncTransactionAfter ? scheduledOperations.appendAsyncTxn :\r\n\t\t\t\t\tscheduledOperations[asyncTransactionStrictOrder ? scheduledOperations.length - 1 : 0];\r\n\t\t\t} else {\r\n\t\t\t\tscheduledOperations = [];\r\n\t\t\t\tscheduledOperations.bytes = 0;\r\n\t\t\t}\r\n\t\t\tlet transactionSet;\r\n\t\t\tlet transactionSetIndex;\r\n\t\t\tif (lastOperation === true) { // continue last set of transactions\r\n\t\t\t\ttransactionSetIndex = scheduledTransactions.length - 1;\r\n\t\t\t\ttransactionSet = scheduledTransactions[transactionSetIndex];\r\n\t\t\t} else {\r\n\t\t\t\t// for now we signify transactions as a true\r\n\t\t\t\tif (asyncTransactionAfter) // by default we add a flag to put transactions after other operations\r\n\t\t\t\t\tscheduledOperations.appendAsyncTxn = true;\r\n\t\t\t\telse if (asyncTransactionStrictOrder)\r\n\t\t\t\t\tscheduledOperations.push(true);\r\n\t\t\t\telse // in before mode, we put all the async transaction at the beginning\r\n\t\t\t\t\tscheduledOperations.unshift(true);\r\n\t\t\t\tif (!scheduledTransactions) {\r\n\t\t\t\t\tscheduledTransactions = [];\r\n\t\t\t\t}\r\n\t\t\t\ttransactionSetIndex = scheduledTransactions.push(transactionSet = []) - 1;\r\n\t\t\t}\r\n\t\t\tlet index = (transactionSet.push(asChild ?\r\n\t\t\t\t{asChild, callback } : callback) - 1) << 1;\r\n\t\t\treturn this.scheduleCommit().results.then((results) => {\r\n\t\t\t\tlet transactionResults = results.transactionResults[transactionSetIndex];\r\n\t\t\t\tlet error = transactionResults[index];\r\n\t\t\t\tif (error)\r\n\t\t\t\t\tthrow error;\r\n\t\t\t\treturn transactionResults[index + 1];\r\n\t\t\t});\r\n\t\t}\r\n\t\tbackup(path) {\r\n\t\t\treturn new Promise((resolve, reject) => env.copy(path, false, (error) => {\r\n\t\t\t\tif (error) {\r\n\t\t\t\t\treject(error);\r\n\t\t\t\t} else {\r\n\t\t\t\t\tresolve();\r\n\t\t\t\t}\r\n\t\t\t}));\r\n\t\t}\r\n\t\tisOperational() {\r\n\t\t\treturn this.status == 'open';\r\n\t\t}\r\n\t\tsync(callback) {\r\n\t\t\treturn env.sync(callback || function(error) {\r\n\t\t\t\tif (error) {\r\n\t\t\t\t\tconsole.error(error);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\t\tdeleteDB() {\r\n\t\t\tconsole.warn('deleteDB() is deprecated, use drop or dropSync instead');\r\n\t\t\treturn this.dropSync();\r\n\t\t}\r\n\t\tdropSync() {\r\n\t\t\tthis.transactionSync(() =>\r\n\t\t\t\tthis.db.drop({\r\n\t\t\t\t\tjustFreePages: false\r\n\t\t\t\t}),\r\n\t\t\t{ abortable: false });\r\n\t\t}\r\n\t\tclear(callback) {\r\n\t\t\tif (typeof callback == 'function')\r\n\t\t\t\treturn this.clearAsync(callback);\r\n\t\t\tconsole.warn('clear() is deprecated, use clearAsync or clearSync instead');\r\n\t\t\tthis.clearSync();\r\n\t\t}\r\n\t\tclearSync() {\r\n\t\t\tif (this.encoder) {\r\n\t\t\t\tif (this.encoder.clearSharedData)\r\n\t\t\t\t\tthis.encoder.clearSharedData()\r\n\t\t\t\telse if (this.encoder.structures)\r\n\t\t\t\t\tthis.encoder.structures = []\r\n\t\t\t}\r\n\t\t\tthis.transactionSync(() =>\r\n\t\t\t\tthis.db.drop({\r\n\t\t\t\t\tjustFreePages: true\r\n\t\t\t\t}),\r\n\t\t\t{ abortable: false });\r\n\t\t}\r\n\t\treaderCheck() {\r\n\t\t\treturn env.readerCheck();\r\n\t\t}\r\n\t\treaderList() {\r\n\t\t\treturn env.readerList().join('');\r\n\t\t}\r\n\t\tsetupSharedStructures() {\r\n\t\t\tconst getStructures = () => {\r\n\t\t\t\tlet lastVersion; // because we are doing a read here, we may need to save and restore the lastVersion from the last read\r\n\t\t\t\tif (this.useVersions)\r\n\t\t\t\t\tlastVersion = getLastVersion();\r\n\t\t\t\tlet buffer = this.getBinary(this.sharedStructuresKey);\r\n\t\t\t\tif (this.useVersions)\r\n\t\t\t\t\tsetLastVersion(lastVersion);\r\n\t\t\t\treturn buffer && this.decoder.decode(buffer);\r\n\t\t\t};\r\n\t\t\treturn {\r\n\t\t\t\tsaveStructures: (structures, isCompatible) => {\r\n\t\t\t\t\treturn this.transactionSyncStart(() => {\r\n\t\t\t\t\t\tlet existingStructuresBuffer = this.getBinary(this.sharedStructuresKey);\r\n\t\t\t\t\t\tlet existingStructures = existingStructuresBuffer && this.decoder.decode(existingStructuresBuffer);\r\n\t\t\t\t\t\tif (typeof isCompatible == 'function' ?\r\n\t\t\t\t\t\t\t\t!isCompatible(existingStructures) :\r\n\t\t\t\t\t\t\t\t(existingStructures && existingStructures.length != isCompatible))\r\n\t\t\t\t\t\t\treturn false; // it changed, we need to indicate that we couldn't update\r\n\t\t\t\t\t\tthis.put(this.sharedStructuresKey, structures);\r\n\t\t\t\t\t});\r\n\t\t\t\t},\r\n\t\t\t\tgetStructures,\r\n\t\t\t\tcopyBuffers: true, // need to copy any embedded buffers that are found since we use unsafe buffers\r\n\t\t\t};\r\n\t\t}\r\n\t}\r\n\t// if caching class overrides putSync, don't want to double call the caching code\r\n\tconst putSync = LMDBStore.prototype.putSync;\r\n\tconst removeSync = LMDBStore.prototype.removeSync;\r\n\taddReadMethods(LMDBStore, { env, maxKeySize, keyBytes, keyBytesView, getLastVersion });\r\n\tif (!options.readOnly)\r\n\t\taddWriteMethods(LMDBStore, { env, maxKeySize, fixedBuffer: keyBytes,\r\n\t\t\tresetReadTxn: LMDBStore.prototype.resetReadTxn, ...options });\r\n\tLMDBStore.prototype.supports = {\r\n\t\tpermanence: true,\r\n\t\tbufferKeys: true,\r\n\t\tpromises: true,\r\n\t\tsnapshots: true,\r\n\t\tclear: true,\r\n\t\tstatus: true,\r\n\t\tdeferredOpen: true,\r\n\t\topenCallback: true,\t\r\n\t};\r\n\treturn options.cache ?\r\n\t\tnew (CachingStore(LMDBStore))(options.name || null, options) :\r\n\t\tnew LMDBStore(options.name || null, options);\r\n}\r\n\r\n\r\nexport function getLastEntrySize() {\r\n\treturn lastSize;\r\n}\r\nexport function getLastVersion() {\r\n\treturn keyBytesView.getFloat64(16, true);\r\n}\r\n\r\nexport function setLastVersion(version) {\r\n\treturn keyBytesView.setFloat64(16, version, true);\r\n}\r\n\r\nconst KEY_BUFFER_SIZE = 4096;\r\nfunction allocateFixedBuffer() {\r\n\tkeyBytes = typeof Buffer != 'undefined' ? Buffer.allocUnsafeSlow(KEY_BUFFER_SIZE) : new Uint8Array(KEY_BUFFER_SIZE);\r\n\tconst keyBuffer = keyBytes.buffer;\r\n\tkeyBytesView = keyBytes.dataView = new DataView(keyBytes.buffer, 0, KEY_BUFFER_SIZE); // max key size is actually 4026\r\n\tkeyBytes.uint32 = new Uint32Array(keyBuffer, 0, KEY_BUFFER_SIZE >> 2);\r\n\tkeyBytes.float64 = new Float64Array(keyBuffer, 0, KEY_BUFFER_SIZE >> 3);\r\n\tkeyBytes.uint32.address = keyBytes.address = keyBuffer.address = getAddress(keyBytes);\r\n}\r\n\r\nfunction exists(path) {\r\n\tif (fs.existsSync)\r\n\t\treturn fs.existsSync(path);\r\n\ttry {\r\n\t\treturn fs.statSync(path);\r\n\t} catch (error) {\r\n//\t\tif (error.name == 'NotFound')\r\n\t\t\treturn false\r\n//\t\tthrow error\r\n\t}\r\n}\r\n\r\nfunction assignConstrainedProperties(allowedProperties, target) {\r\n\tfor (let i = 2; i < arguments.length; i++) {\r\n\t\tlet source = arguments[i];\r\n\t\tfor (let key in source) {\r\n\t\t\tif (allowedProperties.includes(key))\r\n\t\t\t\ttarget[key] = source[key];\r\n\t\t}\r\n\t}\r\n\treturn target;\r\n}","import { createRequire } from 'module';\r\nconst require = createRequire(import.meta.url);\r\nimport { fileURLToPath } from 'url';\r\nimport { dirname, default as path } from 'path';\r\nimport EventEmitter from 'events';\r\nimport { setExternals, setNativeFunctions } from './external.js';\r\nimport { arch, tmpdir, platform } from 'os';\r\nimport fs from 'fs';\r\nimport { Encoder as MsgpackrEncoder } from 'msgpackr';\r\nimport { WeakLRUCache } from 'weak-lru-cache';\r\nimport * as orderedBinary from 'ordered-binary';\r\nimport { isMainThread } from 'worker_threads';\r\norderedBinary.enableNullTermination();\r\n\r\nlet dirName = dirname(fileURLToPath(import.meta.url)).replace(/dist$/, '');\r\n\r\nsetNativeFunctions(require('node-gyp-build')(dirName));\r\nsetExternals({\r\n\trequire, arch, fs, tmpdir, path, MsgpackrEncoder, WeakLRUCache, orderedBinary,\r\n\tEventEmitter, os: platform(), onExit(callback) {\r\n\t\tif (process.getMaxListeners() < process.listenerCount('exit') + 8)\r\n\t\t\tprocess.setMaxListeners(process.listenerCount('exit') + 8);\r\n\t\tprocess.on('exit', callback);\r\n\t},\r\n\tisWorkerThread: !isMainThread,\r\n});\r\nexport { toBufferKey as keyValueToBuffer, compareKeys, compareKeys as compareKey, fromBufferKey as bufferToKeyValue } from 'ordered-binary';\r\nexport { ABORT, IF_EXISTS, asBinary } from './write.js';\r\nexport { levelup } from './level.js';\r\nexport { clearKeptObjects } from './external.js';\r\nexport { open, getLastVersion, getLastEntrySize, setLastVersion, allDbs } from './open.js';\r\nimport { toBufferKey as keyValueToBuffer, compareKeys as compareKey, fromBufferKey as bufferToKeyValue } from 'ordered-binary';\r\nimport { open, getLastVersion } from './open.js';\r\nexport default {\r\n\topen, getLastVersion, compareKey, keyValueToBuffer, bufferToKeyValue, path, EventEmitter\r\n};\r\n"],"names":["clearKeptObjects","require","getLastVersion","Uint8ArraySlice","path","pathModule","createRequire","orderedBinary","dirname","fileURLToPath","arch","fs","tmpdir","MsgpackrEncoder","WeakLRUCache","EventEmitter","platform","isMainThread","compareKey","keyValueToBuffer","bufferToKeyValue"],"mappings":"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"}