mdbxmou 0.2.4 → 0.2.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -132,8 +132,11 @@ const result = await env.query([
132
132
 
133
133
  #### Methods
134
134
 
135
- **createMap(db_name | keyMode, [keyMode | valueMode], [valueMode]) → DBI**
135
+ **createMap([db_name | keyMode], [keyMode | valueMode], [valueMode]) → DBI**
136
136
  ```javascript
137
+ // No arguments - default DB with string keys
138
+ const dbi = txn.createMap();
139
+
137
140
  // One argument - keyMode only
138
141
  const dbi = txn.createMap(MDBX_Param.keyMode.ordinal);
139
142
 
@@ -152,8 +155,11 @@ const namedDbi = txn.createMap("my-table", MDBX_Param.keyMode.ordinal, MDBX_Para
152
155
 
153
156
  > **Note**: Use `createMap` in write transactions - it will create the database if it doesn't exist, or open it if it does. This is safer for new environments.
154
157
 
155
- **openMap(db_name | keyMode, [keyMode]) → DBI**
158
+ **openMap([db_name | keyMode], [keyMode]) → DBI**
156
159
  ```javascript
160
+ // No arguments - default DB with string keys
161
+ const dbi = txn.openMap();
162
+
157
163
  // One argument - keyMode only
158
164
  // Number keyMode - keys returned as numbers
159
165
  const dbi = txn.openMap(MDBX_Param.keyMode.ordinal);
package/build.js CHANGED
@@ -13,14 +13,15 @@ function exec(cmd) {
13
13
  }
14
14
  }
15
15
 
16
- // Create VERSION.json for libmdbx (needed for npm package)
16
+ // Create VERSION.json for libmdbx (needed for npm packages, which don't ship git metadata).
17
+ // In a git checkout/submodule we must NOT create it, since libmdbx rejects multiple version sources.
17
18
  const versionFile = 'deps/libmdbx/VERSION.json';
18
19
  const libmdbxGitMarker = 'deps/libmdbx/.git';
19
- if (!fs.existsSync(versionFile)) {
20
+ if (!fs.existsSync(libmdbxGitMarker) && !fs.existsSync(versionFile)) {
20
21
  console.log('Creating VERSION.json for libmdbx...');
21
22
  const versionJson = {
22
23
  "git_describe": "v0.13.7",
23
- "git_timestamp": "2025-07-30T12:00:00Z",
24
+ "git_timestamp": "2025-07-30T12:00:00Z",
24
25
  "git_tree": "npm-package",
25
26
  "git_commit": "npm-package",
26
27
  "semver": "0.13.7"
@@ -0,0 +1,69 @@
1
+ import type { MDBXDbiStat, MDBXEnvOpenOptions, MDBXKey, MDBXValue } from "./types";
2
+
3
+ export interface MDBXAsyncMapOpenOptions {
4
+ name?: string;
5
+ keyMode?: number;
6
+ valMode?: number;
7
+ flags?: number;
8
+ create?: boolean;
9
+ }
10
+
11
+ export interface MDBXAsyncDbiMeta {
12
+ name: string;
13
+ keyMode: number;
14
+ valMode: number;
15
+ }
16
+
17
+ export interface MDBXAsyncGetBatchResultItem {
18
+ key: MDBXKey;
19
+ value: string | null;
20
+ found: boolean;
21
+ }
22
+
23
+ export interface MDBXAsyncPutBatchResultItem {
24
+ key: MDBXKey;
25
+ success: boolean;
26
+ error?: string;
27
+ }
28
+
29
+ export interface MDBXAsyncDelBatchResultItem {
30
+ key: MDBXKey;
31
+ deleted: boolean;
32
+ error?: string;
33
+ }
34
+
35
+ declare class MDBX_Async_Dbi {
36
+ readonly meta: MDBXAsyncDbiMeta;
37
+
38
+ put(key: MDBXKey, value: MDBXValue, flags?: number): Promise<boolean>;
39
+ get(key: MDBXKey): Promise<string | null | undefined>;
40
+ del(key: MDBXKey): Promise<boolean>;
41
+ stat(): Promise<MDBXDbiStat>;
42
+
43
+ forEach(cb: (key: MDBXKey, value: MDBXValue, index: number) => void): Promise<void>;
44
+
45
+ getBatch(keys: MDBXKey[]): Promise<MDBXAsyncGetBatchResultItem[]>;
46
+ putBatch(items: Array<{ key: MDBXKey; value: MDBXValue }>, flags?: number): Promise<MDBXAsyncPutBatchResultItem[]>;
47
+ delBatch(keys: MDBXKey[]): Promise<MDBXAsyncDelBatchResultItem[]>;
48
+ }
49
+
50
+ declare class MDBX_Async_Txn {
51
+ openMap(opts?: MDBXAsyncMapOpenOptions): Promise<MDBX_Async_Dbi>;
52
+ commit(): Promise<void>;
53
+ abort(): Promise<void>;
54
+ }
55
+
56
+ declare class MDBX_Async_Env {
57
+ constructor(workerCount?: number);
58
+ open(opts: MDBXEnvOpenOptions): Promise<void>;
59
+ close(): Promise<void>;
60
+ terminate(): Promise<void>;
61
+ startWrite(): Promise<MDBX_Async_Txn>;
62
+ startRead(): Promise<MDBX_Async_Txn>;
63
+ }
64
+
65
+ declare const exportsCjs: {
66
+ MDBX_Async_Env: typeof MDBX_Async_Env;
67
+ };
68
+
69
+ export = exportsCjs;
@@ -0,0 +1,65 @@
1
+ import type { MDBXDbiStat, MDBXEnvOpenOptions, MDBXKey, MDBXValue } from "./types.js";
2
+
3
+ export interface MDBXAsyncMapOpenOptions {
4
+ name?: string;
5
+ keyMode?: number;
6
+ valMode?: number;
7
+ flags?: number;
8
+ create?: boolean;
9
+ }
10
+
11
+ export interface MDBXAsyncDbiMeta {
12
+ name: string;
13
+ keyMode: number;
14
+ valMode: number;
15
+ }
16
+
17
+ export interface MDBXAsyncGetBatchResultItem {
18
+ key: MDBXKey;
19
+ value: string | null;
20
+ found: boolean;
21
+ }
22
+
23
+ export interface MDBXAsyncPutBatchResultItem {
24
+ key: MDBXKey;
25
+ success: boolean;
26
+ error?: string;
27
+ }
28
+
29
+ export interface MDBXAsyncDelBatchResultItem {
30
+ key: MDBXKey;
31
+ deleted: boolean;
32
+ error?: string;
33
+ }
34
+
35
+ export declare class MDBX_Async_Dbi {
36
+ readonly meta: MDBXAsyncDbiMeta;
37
+
38
+ put(key: MDBXKey, value: MDBXValue, flags?: number): Promise<boolean>;
39
+ get(key: MDBXKey): Promise<string | null | undefined>;
40
+ del(key: MDBXKey): Promise<boolean>;
41
+ stat(): Promise<MDBXDbiStat>;
42
+
43
+ forEach(cb: (key: MDBXKey, value: MDBXValue, index: number) => void): Promise<void>;
44
+
45
+ getBatch(keys: MDBXKey[]): Promise<MDBXAsyncGetBatchResultItem[]>;
46
+ putBatch(items: Array<{ key: MDBXKey; value: MDBXValue }>, flags?: number): Promise<MDBXAsyncPutBatchResultItem[]>;
47
+ delBatch(keys: MDBXKey[]): Promise<MDBXAsyncDelBatchResultItem[]>;
48
+ }
49
+
50
+ export declare class MDBX_Async_Txn {
51
+ openMap(opts?: MDBXAsyncMapOpenOptions): Promise<MDBX_Async_Dbi>;
52
+ commit(): Promise<void>;
53
+ abort(): Promise<void>;
54
+ }
55
+
56
+ export declare class MDBX_Async_Env {
57
+ constructor(workerCount?: number);
58
+ open(opts: MDBXEnvOpenOptions): Promise<void>;
59
+ close(): Promise<void>;
60
+ terminate(): Promise<void>;
61
+ startWrite(): Promise<MDBX_Async_Txn>;
62
+ startRead(): Promise<MDBX_Async_Txn>;
63
+ }
64
+
65
+ export default MDBX_Async_Env;
@@ -0,0 +1,7 @@
1
+ import type { MDBX_Native } from "./types.js";
2
+
3
+ export * from "./types.js";
4
+ export { MDBX_Async_Env } from "./async.mjs";
5
+
6
+ declare const native: MDBX_Native;
7
+ export default native;
@@ -0,0 +1,4 @@
1
+ import type { MDBX_Native } from "./types";
2
+
3
+ declare const native: MDBX_Native;
4
+ export = native;
@@ -0,0 +1,5 @@
1
+ import type { MDBX_Native } from "./types.js";
2
+
3
+ declare const native: MDBX_Native;
4
+ export default native;
5
+
package/lib/types.d.ts ADDED
@@ -0,0 +1,260 @@
1
+ /// <reference types="node" />
2
+
3
+ export type MDBXKey = Buffer | string | number | bigint;
4
+ export type MDBXValue = Buffer | string;
5
+
6
+ export type MDBXCursorMode =
7
+ | number
8
+ | "first"
9
+ | "last"
10
+ | "next"
11
+ | "prev"
12
+ | "keyLesser"
13
+ | "keyLesserThan"
14
+ | "key_lesser_than"
15
+ | "keyLesserOrEqual"
16
+ | "key_lesser_or_equal"
17
+ | "keyEqual"
18
+ | "key_equal"
19
+ | "keyGreaterOrEqual"
20
+ | "key_greater_or_equal"
21
+ | "keyGreater"
22
+ | "keyGreaterThan"
23
+ | "key_greater_than"
24
+ | "multiExactKeyValueLesserThan"
25
+ | "multi_exactkey_value_lesser_than"
26
+ | "multiExactKeyValueLesserOrEqual"
27
+ | "multi_exactkey_value_lesser_or_equal"
28
+ | "multiExactKeyValueEqual"
29
+ | "multi_exactkey_value_equal"
30
+ | "multiExactKeyValueGreaterOrEqual"
31
+ | "multi_exactkey_value_greater_or_equal"
32
+ | "multiExactKeyValueGreater"
33
+ | "multi_exactkey_value_greater";
34
+
35
+ export interface MDBXEnvGeometryFixed {
36
+ fixedSize: number;
37
+ }
38
+
39
+ export interface MDBXEnvGeometryDynamic {
40
+ dynamicSize: [number, number];
41
+ }
42
+
43
+ export interface MDBXEnvGeometryCustom {
44
+ sizeNow?: number;
45
+ sizeUpper?: number;
46
+ growthStep?: number;
47
+ shrinkThreshold?: number;
48
+ pageSize?: number;
49
+ }
50
+
51
+ export type MDBXEnvGeometry =
52
+ | MDBXEnvGeometryFixed
53
+ | MDBXEnvGeometryDynamic
54
+ | MDBXEnvGeometryCustom;
55
+
56
+ export interface MDBXEnvOpenOptions {
57
+ path: string;
58
+ flags?: number;
59
+ keyFlag?: number;
60
+ valueFlag?: number;
61
+ maxDbi?: number;
62
+ mode?: number;
63
+ geometry?: MDBXEnvGeometry;
64
+ }
65
+
66
+ export interface MDBXDbiStat {
67
+ pageSize: number;
68
+ depth: number;
69
+ branchPages: number;
70
+ leafPages: number;
71
+ overflowPages: number;
72
+ entries: number;
73
+ modTxnId: number;
74
+ }
75
+
76
+ export interface MDBX_Dbi<K extends MDBXKey = MDBXKey, V extends MDBXValue = MDBXValue> {
77
+ readonly id: bigint;
78
+ readonly dbMode: number;
79
+ readonly keyMode: number;
80
+ readonly valueMode: number;
81
+ readonly keyFlag: number;
82
+ readonly valueFlag: number;
83
+
84
+ put(txn: MDBX_Txn, key: K, value: MDBXValue): void;
85
+ get(txn: MDBX_Txn, key: K): V | undefined;
86
+ del(txn: MDBX_Txn, key: K): boolean;
87
+ has(txn: MDBX_Txn, key: K): boolean;
88
+
89
+ forEach(txn: MDBX_Txn, cb: (key: K, value: V, index: number) => boolean | void): number;
90
+ forEach(
91
+ txn: MDBX_Txn,
92
+ fromKey: K,
93
+ cb: (key: K, value: V, index: number) => boolean | void
94
+ ): number;
95
+ forEach(
96
+ txn: MDBX_Txn,
97
+ fromKey: K,
98
+ cursorMode: MDBXCursorMode,
99
+ cb: (key: K, value: V, index: number) => boolean | void
100
+ ): number;
101
+
102
+ stat(txn: MDBX_Txn): MDBXDbiStat;
103
+ keys(txn: MDBX_Txn): K[];
104
+ keysFrom(txn: MDBX_Txn, fromKey: K, limit?: number, cursorMode?: MDBXCursorMode): K[];
105
+ drop(txn: MDBX_Txn, deleteDb?: boolean): void;
106
+ }
107
+
108
+ export interface MDBX_Txn {
109
+ commit(): void;
110
+ abort(): void;
111
+
112
+ openMap(keyMode: number | bigint): MDBX_Dbi;
113
+ openMap(name: string): MDBX_Dbi;
114
+ openMap(name: string, keyMode: number | bigint): MDBX_Dbi;
115
+
116
+ createMap(keyMode: number | bigint): MDBX_Dbi;
117
+ createMap(name: string): MDBX_Dbi;
118
+ createMap(keyMode: number | bigint, valueMode: number): MDBX_Dbi;
119
+ createMap(name: string, keyMode: number | bigint): MDBX_Dbi;
120
+ createMap(name: string, keyMode: number | bigint, valueMode: number): MDBX_Dbi;
121
+
122
+ isActive(): boolean;
123
+ isTopLevel(): boolean;
124
+
125
+ startTransaction?: () => MDBX_Txn;
126
+ getChildrenCount?: () => number;
127
+ }
128
+
129
+ export interface MDBXQueryItem {
130
+ key: MDBXKey;
131
+ value?: MDBXValue;
132
+ }
133
+
134
+ export interface MDBXQueryRequest {
135
+ dbi: MDBX_Dbi;
136
+ mode?: number;
137
+ queryMode?: number;
138
+ item: MDBXQueryItem[];
139
+ }
140
+
141
+ export interface MDBXQueryResultItem {
142
+ key: MDBXKey;
143
+ value?: MDBXValue | null;
144
+ found?: boolean;
145
+ }
146
+
147
+ export type MDBXQueryResult = MDBXQueryResultItem[] | MDBXQueryResultItem[][];
148
+
149
+ export interface MDBXKeysRequestObject {
150
+ dbi: MDBX_Dbi;
151
+ from?: MDBXKey;
152
+ limit?: number;
153
+ cursorMode?: MDBXCursorMode;
154
+ }
155
+
156
+ export type MDBXKeysRequest = MDBX_Dbi | MDBXKeysRequestObject;
157
+ export type MDBXKeysResult = MDBXKey[] | MDBXKey[][];
158
+
159
+ export declare class MDBX_Env {
160
+ constructor();
161
+
162
+ open(options: MDBXEnvOpenOptions): Promise<void>;
163
+ openSync(options: MDBXEnvOpenOptions): void;
164
+
165
+ close(): Promise<void>;
166
+ closeSync(): void;
167
+
168
+ copyTo(path: string, flags?: number): Promise<void>;
169
+ copyToSync(path: string, flags?: number): void;
170
+
171
+ version(): string;
172
+
173
+ startRead(): MDBX_Txn;
174
+ startWrite(): MDBX_Txn;
175
+
176
+ query(request: MDBXQueryRequest | MDBXQueryRequest[], txnMode?: number): Promise<MDBXQueryResult>;
177
+ keys(request: MDBXKeysRequest | MDBXKeysRequest[], txnMode?: number): Promise<MDBXKeysResult>;
178
+ }
179
+
180
+ export interface MDBX_Param {
181
+ readonly envFlag: {
182
+ readonly validation: number;
183
+ readonly rdonly: number;
184
+ readonly exclusive: number;
185
+ readonly accede: number;
186
+ readonly writemap: number;
187
+ readonly nostickythreads: number;
188
+ readonly nordahead: number;
189
+ readonly nomeminit: number;
190
+ readonly liforeclaim: number;
191
+ readonly nometasync: number;
192
+ readonly safeNosync: number;
193
+ readonly utterlyNosync: number;
194
+ };
195
+
196
+ readonly txnMode: {
197
+ readonly ro: number;
198
+ };
199
+
200
+ readonly keyMode: {
201
+ readonly reverse: number;
202
+ readonly ordinal: number;
203
+ };
204
+
205
+ readonly keyFlag: {
206
+ readonly string: number;
207
+ readonly number: number;
208
+ readonly bigint: number;
209
+ };
210
+
211
+ readonly valueMode: {
212
+ readonly multi: number;
213
+ readonly multiReverse: number;
214
+ readonly multiSamelength: number;
215
+ readonly multiOrdinal: number;
216
+ readonly multiReverseSamelength: number;
217
+ };
218
+
219
+ readonly valueFlag: {
220
+ readonly string: number;
221
+ };
222
+
223
+ readonly dbMode: {
224
+ readonly create: number;
225
+ readonly accede: number;
226
+ };
227
+
228
+ readonly queryMode: {
229
+ readonly upsert: number;
230
+ readonly update: number;
231
+ readonly insertUnique: number;
232
+ readonly get: number;
233
+ readonly del: number;
234
+ };
235
+
236
+ readonly cursorMode: {
237
+ readonly first: number;
238
+ readonly last: number;
239
+ readonly next: number;
240
+ readonly prev: number;
241
+ readonly keyLesserThan: number;
242
+ readonly keyLesserOrEqual: number;
243
+ readonly keyEqual: number;
244
+ readonly keyGreaterOrEqual: number;
245
+ readonly keyGreaterThan: number;
246
+ readonly multiExactKeyValueLesserThan: number;
247
+ readonly multiExactKeyValueLesserOrEqual: number;
248
+ readonly multiExactKeyValueEqual: number;
249
+ readonly multiExactKeyValueGreaterOrEqual: number;
250
+ readonly multiExactKeyValueGreater: number;
251
+ };
252
+ }
253
+
254
+ export declare const MDBX_Param: MDBX_Param;
255
+
256
+ export interface MDBX_Native {
257
+ MDBX_Env: typeof MDBX_Env;
258
+ MDBX_Param: MDBX_Param;
259
+ }
260
+
package/package.json CHANGED
@@ -1,15 +1,37 @@
1
1
  {
2
2
  "main": "lib/nativemou.js",
3
+ "types": "./lib/index.d.mts",
3
4
  "exports": {
4
5
  ".": {
5
- "import": "./lib/index.mjs",
6
- "require": "./lib/nativemou.js"
6
+ "import": {
7
+ "types": "./lib/index.d.mts",
8
+ "default": "./lib/index.mjs"
9
+ },
10
+ "require": {
11
+ "types": "./lib/nativemou.d.cts",
12
+ "default": "./lib/nativemou.js"
13
+ }
7
14
  },
8
15
  "./async": {
9
- "import": "./lib/async.mjs",
10
- "require": "./lib/mdbx_evn_async.js"
16
+ "import": {
17
+ "types": "./lib/async.d.mts",
18
+ "default": "./lib/async.mjs"
19
+ },
20
+ "require": {
21
+ "types": "./lib/async.d.cts",
22
+ "default": "./lib/mdbx_evn_async.js"
23
+ }
24
+ },
25
+ "./nativemou": {
26
+ "import": {
27
+ "types": "./lib/nativemou.d.mts",
28
+ "default": "./lib/nativemou.js"
29
+ },
30
+ "require": {
31
+ "types": "./lib/nativemou.d.cts",
32
+ "default": "./lib/nativemou.js"
33
+ }
11
34
  },
12
- "./nativemou": "./lib/nativemou.js",
13
35
  "./package.json": "./package.json"
14
36
  },
15
37
  "files": [
@@ -26,19 +48,24 @@
26
48
  "cmake-js": "^7.3.1",
27
49
  "node-addon-api": "^8.5.0"
28
50
  },
51
+ "devDependencies": {
52
+ "@types/node": "^22.10.2",
53
+ "typescript": "^5.6.3"
54
+ },
29
55
  "scripts": {
30
56
  "e3": "node ./test/e3.js",
31
57
  "e33": "node ./test/e33.js",
32
58
  "e4": "node ./test/e4.js",
33
59
  "e4async": "node ./test/e4async.mjs",
34
60
  "e5": "node ./test/e5.js",
61
+ "test:types": "node ./test/types/run.mjs",
35
62
  "build": "node build.js",
36
63
  "build-dev": "node build-dev.js",
37
64
  "install": "node build.js"
38
65
  },
39
66
  "gypfile": true,
40
67
  "name": "mdbxmou",
41
- "version": "0.2.4",
68
+ "version": "0.2.6",
42
69
  "description": "Node bindings for mdbx",
43
70
  "repository": {
44
71
  "type": "git",