@incoqnito.io/bajadab 1.3.0 → 1.4.0
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 +8 -8
- package/dist/base.d.ts +6 -5
- package/dist/base.js +2 -2
- package/dist/base.js.map +1 -1
- package/dist/basics.d.ts +4 -1
- package/dist/basics.js +94 -34
- package/dist/basics.js.map +1 -1
- package/dist/fileio.js +40 -9
- package/dist/fileio.js.map +1 -1
- package/package.json +5 -9
- package/src/main/base.ts +6 -5
- package/src/main/basics.ts +112 -36
- package/src/main/fileio.ts +44 -9
package/README.md
CHANGED
|
@@ -20,7 +20,7 @@ A lightweight JSON-file-backed database for small, single-machine setups. No ser
|
|
|
20
20
|
npm install @incoqnito.io/bajadab
|
|
21
21
|
```
|
|
22
22
|
|
|
23
|
-
Requires Node.js `>=
|
|
23
|
+
Requires Node.js `>= 26`.
|
|
24
24
|
|
|
25
25
|
## Quick start
|
|
26
26
|
|
|
@@ -54,7 +54,7 @@ Every collection has an `IBCollectionConfig`. `db.config.defaultCollectionConfig
|
|
|
54
54
|
| `autoIDStrategy` | `AUTO_ID_UUID` (default) / `NO_AUTO_ID` | Generate a `uuidv7` for values with no id, or reject them. |
|
|
55
55
|
| `duplicateIDStrategy` | `OVERWRITE` (default) / `ERROR` / `IGNORE` | What `add()` does when a value's id already exists. |
|
|
56
56
|
| `arrayDeletionStrategy` | `IN_PLACE` (default) / `NEW_ARRAY` | How `delete()` removes matches from an `ARRAY` collection. |
|
|
57
|
-
| `autoFlushStrategy` | `ALWAYS_AUTO_FLUSH` (default) / `NO_AUTO_FLUSH` | Whether every mutation is written to disk immediately, or only on an explicit `flush()`. |
|
|
57
|
+
| `autoFlushStrategy` | `ALWAYS_AUTO_FLUSH` (default) / `NO_AUTO_FLUSH` | Whether every mutation is written to disk immediately, or only on an explicit `flush()`. With `ALWAYS_AUTO_FLUSH`, a failed write rejects the mutating call, but its change stays applied in memory (and is written by the next flush); its handlers don't fire. |
|
|
58
58
|
| `dirtyUnloadStrategy` | `FLUSH` (default) / `ERROR` / `IGNORE` | What `unload()` does with unsaved changes. |
|
|
59
59
|
| `getID` / `setID` | registry key (optional) | Custom id accessors — see below. Omit to use the default, which reads/writes a plain `.id` property. |
|
|
60
60
|
| `indexes` | `{ [indexKey: string]: registry key }` (optional) | Secondary indexes — see below. Omit for no indexes. |
|
|
@@ -138,11 +138,11 @@ Collections are addressed by a stable id, not by name, so a handle to a since-re
|
|
|
138
138
|
|
|
139
139
|
## Concurrency
|
|
140
140
|
|
|
141
|
-
All operations on a database — on any of its collections as well as `create`/`get`/`has`/`dropCollection()`, `snapshot()` and `transaction()` — are serialized within one process by a single lock per database. The lock is reentrant: code that runs while an operation holds it (handlers, predicates, updaters, a transaction's `fn`) can call any other operation on the same database without deadlocking. The flip side is that such code blocks the whole database while it runs, so keep `EBHandlerMode.SYNC` handlers and transaction callbacks short, and don't await anything slow or external inside them. There is no cross-process locking — multiple processes pointed at the same directory can still race on the underlying files.
|
|
141
|
+
All operations on a database — on any of its collections as well as `create`/`get`/`has`/`dropCollection()`, `snapshot()` and `transaction()` — are serialized within one process by a single lock per database. The lock is reentrant: code that runs while an operation holds it (handlers, predicates, updaters, a transaction's `fn`) can call any other operation on the same database without deadlocking. The flip side is that such code blocks the whole database while it runs, so keep `EBHandlerMode.SYNC` handlers and transaction callbacks short, and don't await anything slow or external inside them. `EBHandlerMode.ASYNC` handlers are the exception: they start only once the operation that triggered them has finished, outside its lock, and queue for the lock like any other caller. The same doesn't hold for promises you start yourself without awaiting them inside a handler, predicate, updater or `fn` — those still count as part of the operation holding the lock and run interleaved with it. There is no cross-process locking — multiple processes pointed at the same directory can still race on the underlying files.
|
|
142
142
|
|
|
143
143
|
## Snapshots
|
|
144
144
|
|
|
145
|
-
`db.snapshot(targetDir, options?)` flushes every loaded collection, then copies the whole database directory into a new version folder under `targetDir` (created if it doesn't exist yet). The version folder is named after a sortable timestamp (e.g. `20260904T153012345Z`) and is itself a complete, independent database — open it directly with `getDatabase(versionPath)`.
|
|
145
|
+
`db.snapshot(targetDir, options?)` flushes every loaded collection, then copies the whole database directory into a new version folder under `targetDir` (created if it doesn't exist yet; it must not be inside the database directory). The version folder is named after a sortable timestamp (e.g. `20260904T153012345Z`) and is itself a complete, independent database — open it directly with `getDatabase(versionPath)`.
|
|
146
146
|
|
|
147
147
|
```ts
|
|
148
148
|
const versionPath = await db.snapshot("./backups");
|
|
@@ -159,7 +159,7 @@ const restored = await getDatabase(versionPath);
|
|
|
159
159
|
|
|
160
160
|
Pruning only ever deletes folders matching bajadab's own naming scheme — anything else you keep in `targetDir` is left alone.
|
|
161
161
|
|
|
162
|
-
Version folder names have millisecond resolution.
|
|
162
|
+
Version folder names have millisecond resolution. Each snapshot claims its folder exclusively before copying into it; if the name is already taken (several snapshots within the same millisecond, or another process writing into the same `targetDir`), the timestamp is advanced by a millisecond until a free name is found. A folder name can therefore be a few milliseconds later than the actual snapshot time, but an existing version folder is never written into or removed by a failed copy.
|
|
163
163
|
|
|
164
164
|
`snapshot()` blocks every other operation on the database for as long as the copy takes, to guarantee a consistent point-in-time copy. There's no separate `restoreSnapshot()` — restoring means copying a version folder back over the original `basePath` (while nothing has it open), or just pointing `getDatabase()` at the version folder directly.
|
|
165
165
|
|
|
@@ -179,11 +179,11 @@ await db.transaction(["accounts", "orders"], async (tx) => {
|
|
|
179
179
|
|
|
180
180
|
Every name passed to `transaction()` must be an existing collection; otherwise it rejects before `fn` runs, and nothing is created.
|
|
181
181
|
|
|
182
|
-
If `fn` resolves, every
|
|
182
|
+
If `fn` resolves, every working copy the transaction changed is first written to a temp file; unchanged ones are left alone. If any of these writes fails, all temp files are discarded and nothing is applied. Otherwise the temp files replace the collections' files, every live state is replaced by its working copy, and only then do the `ADD`/`UPDATE`/`DELETE` handlers registered with `on()` fire — so a handler that reads or writes another declared collection already sees its committed state. They fire once per id the transaction touched, typed by the last operation on it, the same way as outside a transaction: `ADD` if the value is new or was last stored via `add()` (including an id-based overwrite), `UPDATE` (pre-transaction value → final value) if it was last changed via `update()`, `DELETE` if it's gone. A value added and later deleted within the same transaction fires nothing, and a value updated twice fires one `UPDATE`. If `fn` throws, nothing is applied, nothing is flushed, and no handler fires — every declared collection stays exactly as it was. This only covers changes made through the working copies' `add()`/`update()`/`delete()`; values mutated in place are shared with the live collection and aren't isolated (see "Values are stored by reference").
|
|
183
183
|
|
|
184
|
-
`tx.getCollection(name)` only accepts names passed to `transaction()`; anything else throws. It mirrors `IBCollection`'s read/write surface (`get`/`has`/`count`/`getByIndex`/`add`/`update`/`delete`) but not `flush`/`reload`/`unload`/`on` — those don't make sense against a working copy that might still be rolled back.
|
|
184
|
+
`tx.getCollection(name)` only accepts names passed to `transaction()`; anything else throws. It mirrors `IBCollection`'s read/write surface (`get`/`has`/`count`/`getByIndex`/`add`/`update`/`delete`) but not `flush`/`reload`/`unload`/`on` — those don't make sense against a working copy that might still be rolled back. Once the transaction has ended, the view rejects every call.
|
|
185
185
|
|
|
186
|
-
Inside `fn`, `add()`/`update()`/`delete()` through a declared collection's regular handle (the one from `db.getCollection()`) reject — those writes would otherwise be overwritten by the commit. Reading through it is fine and shows the pre-transaction state; collections not declared to the transaction stay fully usable, but writes to them aren't part of the transaction. Calling `transaction()` again from inside `fn` rejects as well, whichever collections it names.
|
|
186
|
+
Inside `fn`, `add()`/`update()`/`delete()` through a declared collection's regular handle (the one from `db.getCollection()`) reject — those writes would otherwise be overwritten by the commit — and so does registering a handler on it with `on()`, since it couldn't see the transaction's changes. Reading through it is fine and shows the pre-transaction state; collections not declared to the transaction stay fully usable, but writes to them aren't part of the transaction. Calling `transaction()` again from inside `fn` rejects as well, whichever collections it names.
|
|
187
187
|
|
|
188
188
|
`transaction()` holds the database lock for its whole duration, so every other operation on the database — on any collection — waits until it resolves. Across collections, the final renames at commit still happen one file at a time — a crash, or a rename that keeps failing, between them can leave a transaction partially applied. If a rename fails, the collections renamed so far are applied (on disk and in memory, and their handlers fire), the rest are discarded, and `transaction()` rejects. There's no cross-process locking here either, same as everywhere else in bajadab.
|
|
189
189
|
|
package/dist/base.d.ts
CHANGED
|
@@ -32,7 +32,7 @@ export declare enum EBArrayDeletionStrategy {
|
|
|
32
32
|
export declare enum EBAutoFlushStrategy {
|
|
33
33
|
/** Only on an explicit {@link IBCollection.flush} call. */
|
|
34
34
|
NO_AUTO_FLUSH = "NO_AUTO_FLUSH",
|
|
35
|
-
/** After every mutating call (`add`/`update`/`delete`). */
|
|
35
|
+
/** After every mutating call (`add`/`update`/`delete`). If that write fails, the call rejects, but its change stays applied in memory (written by the next flush) and its handlers don't fire. */
|
|
36
36
|
ALWAYS_AUTO_FLUSH = "ALWAYS_AUTO_FLUSH"
|
|
37
37
|
}
|
|
38
38
|
/** What {@link IBCollection.unload} does with unsaved changes. */
|
|
@@ -92,7 +92,7 @@ export interface IBDatabase {
|
|
|
92
92
|
dropCollection(collectionName: string): Promise<void>;
|
|
93
93
|
/**
|
|
94
94
|
* Flushes every loaded collection, then copies the whole database directory into a new, timestamped
|
|
95
|
-
* version folder under `targetDir` (created if needed). Blocks all other database operations for the
|
|
95
|
+
* version folder under `targetDir` (created if needed; must not be inside the database directory). Blocks all other database operations for the
|
|
96
96
|
* duration. See {@link IBSnapshotOptions} for pruning older versions. Returns the new version folder's path.
|
|
97
97
|
*/
|
|
98
98
|
snapshot(targetDir: string, options?: IBSnapshotOptions): Promise<string>;
|
|
@@ -105,7 +105,8 @@ export interface IBDatabase {
|
|
|
105
105
|
* added and later deleted within the same transaction fires nothing. If `fn` throws, nothing is applied,
|
|
106
106
|
* nothing is flushed, and no handler fires.
|
|
107
107
|
* Only collections named in `collectionNames` can be reached from within `fn`; writing to one of them through
|
|
108
|
-
* its regular {@link IBCollection} handle inside `fn` rejects,
|
|
108
|
+
* its regular {@link IBCollection} handle inside `fn` rejects, as does registering a handler on it via `on()`
|
|
109
|
+
* and a nested `transaction()` call.
|
|
109
110
|
* Values mutated in place are shared with the live collection and are neither isolated nor reverted.
|
|
110
111
|
*/
|
|
111
112
|
transaction(collectionNames: string[], fn: (tx: IBTransaction) => Promise<void>): Promise<void>;
|
|
@@ -134,7 +135,7 @@ export interface IHandlerRegistration {
|
|
|
134
135
|
export declare enum EBHandlerMode {
|
|
135
136
|
/** The triggering `add()`/`update()`/`delete()` call doesn't resolve until this handler has run. Default. */
|
|
136
137
|
SYNC = "SYNC",
|
|
137
|
-
/** The handler runs without the triggering call waiting for it. */
|
|
138
|
+
/** The handler runs without the triggering call waiting for it, once the database operation that triggered it has finished. */
|
|
138
139
|
ASYNC = "ASYNC"
|
|
139
140
|
}
|
|
140
141
|
/** A single collection of values of type `T`. Obtain one via {@link IBDatabase}. */
|
|
@@ -202,7 +203,7 @@ export interface IBTransaction {
|
|
|
202
203
|
/**
|
|
203
204
|
* The transaction-scoped view of `collectionName`. Returns the same instance on repeat calls with the
|
|
204
205
|
* same (canonicalized) name within one transaction. Throws if `collectionName` wasn't declared to
|
|
205
|
-
* {@link IBDatabase.transaction}.
|
|
206
|
+
* {@link IBDatabase.transaction}. The returned view rejects every call once the transaction has ended.
|
|
206
207
|
*/
|
|
207
208
|
getCollection<T = any>(collectionName: string): Promise<IBTransactionCollection<T>>;
|
|
208
209
|
}
|
package/dist/base.js
CHANGED
|
@@ -38,7 +38,7 @@ export var EBAutoFlushStrategy;
|
|
|
38
38
|
(function (EBAutoFlushStrategy) {
|
|
39
39
|
/** Only on an explicit {@link IBCollection.flush} call. */
|
|
40
40
|
EBAutoFlushStrategy["NO_AUTO_FLUSH"] = "NO_AUTO_FLUSH";
|
|
41
|
-
/** After every mutating call (`add`/`update`/`delete`). */
|
|
41
|
+
/** After every mutating call (`add`/`update`/`delete`). If that write fails, the call rejects, but its change stays applied in memory (written by the next flush) and its handlers don't fire. */
|
|
42
42
|
EBAutoFlushStrategy["ALWAYS_AUTO_FLUSH"] = "ALWAYS_AUTO_FLUSH";
|
|
43
43
|
})(EBAutoFlushStrategy || (EBAutoFlushStrategy = {}));
|
|
44
44
|
/** What {@link IBCollection.unload} does with unsaved changes. */
|
|
@@ -66,7 +66,7 @@ export var EBHandlerMode;
|
|
|
66
66
|
(function (EBHandlerMode) {
|
|
67
67
|
/** The triggering `add()`/`update()`/`delete()` call doesn't resolve until this handler has run. Default. */
|
|
68
68
|
EBHandlerMode["SYNC"] = "SYNC";
|
|
69
|
-
/** The handler runs without the triggering call waiting for it. */
|
|
69
|
+
/** The handler runs without the triggering call waiting for it, once the database operation that triggered it has finished. */
|
|
70
70
|
EBHandlerMode["ASYNC"] = "ASYNC";
|
|
71
71
|
})(EBHandlerMode || (EBHandlerMode = {}));
|
|
72
72
|
//# sourceMappingURL=base.js.map
|
package/dist/base.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base.js","sourceRoot":"","sources":["../src/main/base.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,MAAM,CAAN,IAAY,gBAKX;AALD,WAAY,gBAAgB;IACxB,mCAAmC;IACnC,6CAAyB,CAAA;IACzB,mEAAmE;IACnE,iDAA6B,CAAA;AACjC,CAAC,EALW,gBAAgB,KAAhB,gBAAgB,QAK3B;AAED,uDAAuD;AACvD,MAAM,CAAN,IAAY,oBAMX;AAND,WAAY,oBAAoB;IAC5B,oEAAoE;IACpE,mCAAW,CAAA;IACX,+BAA+B;IAC/B,gDAAgD;IAChD,uCAAe,CAAA;AACnB,CAAC,EANW,oBAAoB,KAApB,oBAAoB,QAM/B;AAED,iFAAiF;AACjF,MAAM,CAAN,IAAY,qBAOX;AAPD,WAAY,qBAAqB;IAC7B,kCAAkC;IAClC,gDAAuB,CAAA;IACvB,6BAA6B;IAC7B,wCAAe,CAAA;IACf,iDAAiD;IACjD,0CAAiB,CAAA;AACrB,CAAC,EAPW,qBAAqB,KAArB,qBAAqB,QAOhC;AAED,wFAAwF;AACxF,MAAM,CAAN,IAAY,uBAKX;AALD,WAAY,uBAAuB;IAC/B,wCAAwC;IACxC,kDAAuB,CAAA;IACvB,2CAA2C;IAC3C,gDAAqB,CAAA;AACzB,CAAC,EALW,uBAAuB,KAAvB,uBAAuB,QAKlC;AAED,6DAA6D;AAC7D,MAAM,CAAN,IAAY,mBAKX;AALD,WAAY,mBAAmB;IAC3B,2DAA2D;IAC3D,sDAA+B,CAAA;IAC/B,
|
|
1
|
+
{"version":3,"file":"base.js","sourceRoot":"","sources":["../src/main/base.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,MAAM,CAAN,IAAY,gBAKX;AALD,WAAY,gBAAgB;IACxB,mCAAmC;IACnC,6CAAyB,CAAA;IACzB,mEAAmE;IACnE,iDAA6B,CAAA;AACjC,CAAC,EALW,gBAAgB,KAAhB,gBAAgB,QAK3B;AAED,uDAAuD;AACvD,MAAM,CAAN,IAAY,oBAMX;AAND,WAAY,oBAAoB;IAC5B,oEAAoE;IACpE,mCAAW,CAAA;IACX,+BAA+B;IAC/B,gDAAgD;IAChD,uCAAe,CAAA;AACnB,CAAC,EANW,oBAAoB,KAApB,oBAAoB,QAM/B;AAED,iFAAiF;AACjF,MAAM,CAAN,IAAY,qBAOX;AAPD,WAAY,qBAAqB;IAC7B,kCAAkC;IAClC,gDAAuB,CAAA;IACvB,6BAA6B;IAC7B,wCAAe,CAAA;IACf,iDAAiD;IACjD,0CAAiB,CAAA;AACrB,CAAC,EAPW,qBAAqB,KAArB,qBAAqB,QAOhC;AAED,wFAAwF;AACxF,MAAM,CAAN,IAAY,uBAKX;AALD,WAAY,uBAAuB;IAC/B,wCAAwC;IACxC,kDAAuB,CAAA;IACvB,2CAA2C;IAC3C,gDAAqB,CAAA;AACzB,CAAC,EALW,uBAAuB,KAAvB,uBAAuB,QAKlC;AAED,6DAA6D;AAC7D,MAAM,CAAN,IAAY,mBAKX;AALD,WAAY,mBAAmB;IAC3B,2DAA2D;IAC3D,sDAA+B,CAAA;IAC/B,kMAAkM;IAClM,8DAAuC,CAAA;AAC3C,CAAC,EALW,mBAAmB,KAAnB,mBAAmB,QAK9B;AAED,kEAAkE;AAClE,MAAM,CAAN,IAAY,qBAOX;AAPD,WAAY,qBAAqB;IAC7B,yBAAyB;IACzB,wCAAe,CAAA;IACf,gCAAgC;IAChC,wCAAe,CAAA;IACf,4CAA4C;IAC5C,0CAAiB,CAAA;AACrB,CAAC,EAPW,qBAAqB,KAArB,qBAAqB,QAOhC;AA0ED,4FAA4F;AAC5F,MAAM,CAAN,IAAY,kBAOX;AAPD,WAAY,kBAAkB;IAC1B,uEAAuE;IACvE,iCAAW,CAAA;IACX,0CAA0C;IAC1C,uCAAiB,CAAA;IACjB,yCAAyC;IACzC,uCAAiB,CAAA;AACrB,CAAC,EAPW,kBAAkB,KAAlB,kBAAkB,QAO7B;AAeD,kGAAkG;AAClG,MAAM,CAAN,IAAY,aAKX;AALD,WAAY,aAAa;IACrB,6GAA6G;IAC7G,8BAAa,CAAA;IACb,+HAA+H;IAC/H,gCAAe,CAAA;AACnB,CAAC,EALW,aAAa,KAAb,aAAa,QAKxB"}
|
package/dist/basics.d.ts
CHANGED
|
@@ -20,8 +20,10 @@ export declare class BDatabase implements IBDatabase {
|
|
|
20
20
|
readonly functionRegistry?: IBFunctionRegistry;
|
|
21
21
|
readonly iid: string;
|
|
22
22
|
private readonly transactionScope;
|
|
23
|
+
private readonly mutex;
|
|
23
24
|
constructor(io: IODatabase, config?: IBDatabaseConfig, functionRegistry?: IBFunctionRegistry);
|
|
24
25
|
runExclusive<R>(fn: () => Promise<R>): Promise<R>;
|
|
26
|
+
runDetached(task: () => Promise<void>): void;
|
|
25
27
|
isInTransaction(collectionName: string): boolean;
|
|
26
28
|
addCollection(collection: BCollection): void;
|
|
27
29
|
getCollection<T>(collectionName: string, collectionConfig?: IBCollectionConfig): Promise<IBCollection<T>>;
|
|
@@ -62,6 +64,7 @@ export declare class BCollection<T = any> implements IBCollection<T> {
|
|
|
62
64
|
count(predicate?: (v: T) => boolean): Promise<number>;
|
|
63
65
|
getByIndex(indexKey: string, key: string): Promise<T[]>;
|
|
64
66
|
private invokeHandler;
|
|
67
|
+
private dispatchHandler;
|
|
65
68
|
private fireAdd;
|
|
66
69
|
private fireUpdate;
|
|
67
70
|
private fireDelete;
|
|
@@ -107,7 +110,7 @@ export declare class BCollection<T = any> implements IBCollection<T> {
|
|
|
107
110
|
*/
|
|
108
111
|
cloneForTransaction(): Promise<BCollection<T>>;
|
|
109
112
|
/**
|
|
110
|
-
* Writes `clone`'s state to a temp file (see {@link IPreparedWrite}) and computes the handler events for the
|
|
113
|
+
* Writes `clone`'s state to a temp file (see {@link IPreparedWrite}), unless the transaction left it unchanged, and computes the handler events for the
|
|
111
114
|
* net changes against this collection's current state: one per id the transaction touched, typed by the last
|
|
112
115
|
* operation on it (`DELETE` if gone, `ADD` if new or last stored via `add()`, `UPDATE` otherwise). Nothing is
|
|
113
116
|
* applied until `apply()`; call only while already holding this collection's mutex for the whole transaction.
|
package/dist/basics.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { AsyncLocalStorage } from "node:async_hooks";
|
|
2
2
|
import { uuidv7, } from "uuidv7";
|
|
3
|
-
import {
|
|
3
|
+
import { ReentrantMutex } from "@incoqnito.io/ts-iq-core";
|
|
4
4
|
import { EBArrayDeletionStrategy, EBAutoFlushStrategy, EBAutoIDStrategy, EBDirtyUnloadStrategy, EBDuplicateIDStrategy, EBHandlerMode, EBMemStorageStrategy, EBModificationType, } from "./base.js";
|
|
5
5
|
import { canonicalName } from "./utils.js";
|
|
6
6
|
/** Default {@link TGetIDFunction}: reads `v.id`, `undefined` if absent. */
|
|
@@ -10,19 +10,24 @@ export const DEFAULT_SET_ID = async (v, id) => { v.id = id; };
|
|
|
10
10
|
function normalizeID(id) {
|
|
11
11
|
return id === undefined || id === null || id === "" ? undefined : String(id);
|
|
12
12
|
}
|
|
13
|
+
const UNCHANGED_TRANSACTION_COMMIT = Object.freeze({
|
|
14
|
+
write: Object.freeze({ commit: async () => { }, discard: async () => { } }),
|
|
15
|
+
apply: () => { },
|
|
16
|
+
fire: async () => { },
|
|
17
|
+
});
|
|
13
18
|
/** {@link IBCollectionConfig} used when a collection is created without an explicit one. */
|
|
14
|
-
export const DEFAULT_COLLECTION_CONFIG = {
|
|
19
|
+
export const DEFAULT_COLLECTION_CONFIG = Object.freeze({
|
|
15
20
|
arrayDeletionStrategy: EBArrayDeletionStrategy.IN_PLACE,
|
|
16
21
|
autoIDStrategy: EBAutoIDStrategy.AUTO_ID_UUID,
|
|
17
22
|
duplicateIDStrategy: EBDuplicateIDStrategy.OVERWRITE,
|
|
18
23
|
memStorageStrategy: EBMemStorageStrategy.MAP,
|
|
19
24
|
dirtyUnloadStrategy: EBDirtyUnloadStrategy.FLUSH,
|
|
20
25
|
autoFlushStrategy: EBAutoFlushStrategy.ALWAYS_AUTO_FLUSH,
|
|
21
|
-
};
|
|
26
|
+
});
|
|
22
27
|
/** {@link IBDatabaseConfig} used when `getDatabase()` creates a fresh database. */
|
|
23
|
-
export const DEFAULT_DATABASE_CONFIG = {
|
|
28
|
+
export const DEFAULT_DATABASE_CONFIG = Object.freeze({
|
|
24
29
|
defaultCollectionConfig: DEFAULT_COLLECTION_CONFIG,
|
|
25
|
-
};
|
|
30
|
+
});
|
|
26
31
|
export class BDatabase {
|
|
27
32
|
config;
|
|
28
33
|
collections = new Map();
|
|
@@ -30,13 +35,17 @@ export class BDatabase {
|
|
|
30
35
|
functionRegistry;
|
|
31
36
|
iid = uuidv7();
|
|
32
37
|
transactionScope = new AsyncLocalStorage();
|
|
38
|
+
mutex = new ReentrantMutex(this.iid);
|
|
33
39
|
constructor(io, config, functionRegistry) {
|
|
34
40
|
this.config = { ...(config ?? DEFAULT_DATABASE_CONFIG) };
|
|
35
41
|
this.io = io;
|
|
36
42
|
this.functionRegistry = functionRegistry;
|
|
37
43
|
}
|
|
38
|
-
|
|
39
|
-
return
|
|
44
|
+
runExclusive(fn) {
|
|
45
|
+
return this.mutex.run(fn);
|
|
46
|
+
}
|
|
47
|
+
runDetached(task) {
|
|
48
|
+
this.mutex.runAfterRelease(() => { void this.transactionScope.exit(task); });
|
|
40
49
|
}
|
|
41
50
|
isInTransaction(collectionName) {
|
|
42
51
|
return this.transactionScope.getStore()?.has(collectionName) ?? false;
|
|
@@ -78,8 +87,8 @@ export class BDatabase {
|
|
|
78
87
|
const coll = this.collections.get(cname);
|
|
79
88
|
if (coll) {
|
|
80
89
|
coll.markDropped();
|
|
90
|
+
await this.io.deleteCollection(cname);
|
|
81
91
|
this.collections.delete(cname);
|
|
82
|
-
return this.io.deleteCollection(cname);
|
|
83
92
|
}
|
|
84
93
|
else {
|
|
85
94
|
throw new Error(`no such collection ${collectionName}`);
|
|
@@ -112,13 +121,14 @@ export class BDatabase {
|
|
|
112
121
|
for (const [name, original] of originals) {
|
|
113
122
|
clones.set(name, await original.cloneForTransaction());
|
|
114
123
|
}
|
|
124
|
+
const views = new Map(Array.from(clones, ([name, clone]) => [name, new BTransactionCollection(clone)]));
|
|
115
125
|
const tx = {
|
|
116
126
|
getCollection: async (collectionName) => {
|
|
117
|
-
const
|
|
118
|
-
if (!
|
|
127
|
+
const view = views.get(canonicalName(collectionName));
|
|
128
|
+
if (!view) {
|
|
119
129
|
throw new Error(`collection "${collectionName}" was not declared to this transaction`);
|
|
120
130
|
}
|
|
121
|
-
return
|
|
131
|
+
return view;
|
|
122
132
|
},
|
|
123
133
|
};
|
|
124
134
|
try {
|
|
@@ -150,6 +160,7 @@ export class BDatabase {
|
|
|
150
160
|
}
|
|
151
161
|
}
|
|
152
162
|
finally {
|
|
163
|
+
views.forEach(view => view.end());
|
|
153
164
|
clones.forEach(clone => clone.markDropped());
|
|
154
165
|
}
|
|
155
166
|
});
|
|
@@ -260,38 +271,40 @@ export class BCollection {
|
|
|
260
271
|
console.error(`bajadab: collection "${this.collectionName}" ${modificationType} handler failed`, error);
|
|
261
272
|
}
|
|
262
273
|
}
|
|
274
|
+
async dispatchHandler(fn, modificationType, mode) {
|
|
275
|
+
if (mode === EBHandlerMode.SYNC) {
|
|
276
|
+
await this.invokeHandler(fn, modificationType);
|
|
277
|
+
}
|
|
278
|
+
else {
|
|
279
|
+
this.database.runDetached(() => this.invokeHandler(fn, modificationType));
|
|
280
|
+
}
|
|
281
|
+
}
|
|
263
282
|
async fireAdd(added) {
|
|
264
283
|
for (const v of added) {
|
|
265
284
|
for (const { handler, mode } of this.addHandlers) {
|
|
266
|
-
|
|
267
|
-
if (mode === EBHandlerMode.SYNC) {
|
|
268
|
-
await call;
|
|
269
|
-
}
|
|
285
|
+
await this.dispatchHandler(() => handler(v), EBModificationType.ADD, mode);
|
|
270
286
|
}
|
|
271
287
|
}
|
|
272
288
|
}
|
|
273
289
|
async fireUpdate(pairs) {
|
|
274
290
|
for (const [previous, updated] of pairs) {
|
|
275
291
|
for (const { handler, mode } of this.updateHandlers) {
|
|
276
|
-
|
|
277
|
-
if (mode === EBHandlerMode.SYNC) {
|
|
278
|
-
await call;
|
|
279
|
-
}
|
|
292
|
+
await this.dispatchHandler(() => handler(previous, updated), EBModificationType.UPDATE, mode);
|
|
280
293
|
}
|
|
281
294
|
}
|
|
282
295
|
}
|
|
283
296
|
async fireDelete(deleted) {
|
|
284
297
|
for (const v of deleted) {
|
|
285
298
|
for (const { handler, mode } of this.deleteHandlers) {
|
|
286
|
-
|
|
287
|
-
if (mode === EBHandlerMode.SYNC) {
|
|
288
|
-
await call;
|
|
289
|
-
}
|
|
299
|
+
await this.dispatchHandler(() => handler(v), EBModificationType.DELETE, mode);
|
|
290
300
|
}
|
|
291
301
|
}
|
|
292
302
|
}
|
|
293
303
|
async on(modificationType, handler, mode = EBHandlerMode.SYNC) {
|
|
294
304
|
return this.runProtected(async () => {
|
|
305
|
+
if (this.database.isInTransaction(this.collectionName)) {
|
|
306
|
+
throw new Error(`cannot register a handler on collection "${this.collectionName}" while it is part of a running transaction`);
|
|
307
|
+
}
|
|
295
308
|
switch (modificationType) {
|
|
296
309
|
case EBModificationType.ADD: {
|
|
297
310
|
const h = handler;
|
|
@@ -411,17 +424,15 @@ export class BCollection {
|
|
|
411
424
|
});
|
|
412
425
|
}
|
|
413
426
|
resolveIndexDefinitions() {
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
return;
|
|
417
|
-
}
|
|
418
|
-
for (const [indexKey, registryKey] of Object.entries(this.collectionConfig.indexes)) {
|
|
427
|
+
const ret = new Map();
|
|
428
|
+
for (const [indexKey, registryKey] of Object.entries(this.collectionConfig.indexes ?? {})) {
|
|
419
429
|
const extractor = this.database.functionRegistry?.fetch(registryKey);
|
|
420
430
|
if (!extractor) {
|
|
421
431
|
throw new Error(`index key function "${registryKey}" is not registered`);
|
|
422
432
|
}
|
|
423
|
-
|
|
433
|
+
ret.set(indexKey, extractor);
|
|
424
434
|
}
|
|
435
|
+
return ret;
|
|
425
436
|
}
|
|
426
437
|
async indexKeysFor(v) {
|
|
427
438
|
const result = [];
|
|
@@ -825,6 +836,7 @@ export class BCollection {
|
|
|
825
836
|
}
|
|
826
837
|
async reload() {
|
|
827
838
|
return this.runProtected(async () => {
|
|
839
|
+
const indexDefinitions = this.resolveIndexDefinitions();
|
|
828
840
|
switch (this.collectionConfig.memStorageStrategy) {
|
|
829
841
|
case EBMemStorageStrategy.MAP:
|
|
830
842
|
this.mapData = await this.database.io.loadMapData(this.collectionID);
|
|
@@ -834,10 +846,11 @@ export class BCollection {
|
|
|
834
846
|
this.arrayData = await this.database.io.loadArrayData(this.collectionID);
|
|
835
847
|
break;
|
|
836
848
|
}
|
|
837
|
-
this.
|
|
849
|
+
this.indexDefinitions = indexDefinitions;
|
|
850
|
+
this.dirty = false;
|
|
851
|
+
this.loaded = false;
|
|
838
852
|
await this.rebuildIndexRuntime();
|
|
839
853
|
this.loaded = true;
|
|
840
|
-
this.dirty = false;
|
|
841
854
|
});
|
|
842
855
|
}
|
|
843
856
|
async unload() {
|
|
@@ -888,19 +901,23 @@ export class BCollection {
|
|
|
888
901
|
if (this.addHandlers.length > 0 || this.updateHandlers.length > 0 || this.deleteHandlers.length > 0) {
|
|
889
902
|
clone.txChanges = new Map();
|
|
890
903
|
}
|
|
891
|
-
clone.
|
|
892
|
-
|
|
904
|
+
clone.indexDefinitions = this.indexDefinitions;
|
|
905
|
+
clone.indexRuntime = new Map(Array.from(this.indexRuntime, ([indexKey, byKey]) => [indexKey, new Map(Array.from(byKey, ([key, bucket]) => [key, new Set(bucket)]))]));
|
|
906
|
+
clone.indexedKeys = new Map(this.indexedKeys);
|
|
893
907
|
return clone;
|
|
894
908
|
});
|
|
895
909
|
}
|
|
896
910
|
/**
|
|
897
|
-
* Writes `clone`'s state to a temp file (see {@link IPreparedWrite}) and computes the handler events for the
|
|
911
|
+
* Writes `clone`'s state to a temp file (see {@link IPreparedWrite}), unless the transaction left it unchanged, and computes the handler events for the
|
|
898
912
|
* net changes against this collection's current state: one per id the transaction touched, typed by the last
|
|
899
913
|
* operation on it (`DELETE` if gone, `ADD` if new or last stored via `add()`, `UPDATE` otherwise). Nothing is
|
|
900
914
|
* applied until `apply()`; call only while already holding this collection's mutex for the whole transaction.
|
|
901
915
|
*/
|
|
902
916
|
async prepareTransactionCommit(clone) {
|
|
903
917
|
return this.runProtected(async () => {
|
|
918
|
+
if (!clone.dirty) {
|
|
919
|
+
return UNCHANGED_TRANSACTION_COMMIT;
|
|
920
|
+
}
|
|
904
921
|
await this.checkLoaded();
|
|
905
922
|
const added = [];
|
|
906
923
|
const updated = [];
|
|
@@ -956,4 +973,47 @@ export class BCollection {
|
|
|
956
973
|
});
|
|
957
974
|
}
|
|
958
975
|
}
|
|
976
|
+
class BTransactionCollection {
|
|
977
|
+
clone;
|
|
978
|
+
ended = false;
|
|
979
|
+
constructor(clone) {
|
|
980
|
+
this.clone = clone;
|
|
981
|
+
}
|
|
982
|
+
get collectionName() {
|
|
983
|
+
return this.clone.collectionName;
|
|
984
|
+
}
|
|
985
|
+
get collectionID() {
|
|
986
|
+
return this.clone.collectionID;
|
|
987
|
+
}
|
|
988
|
+
end() {
|
|
989
|
+
this.ended = true;
|
|
990
|
+
}
|
|
991
|
+
active() {
|
|
992
|
+
if (this.ended) {
|
|
993
|
+
throw new Error(`the transaction on collection "${this.clone.collectionName}" has already ended`);
|
|
994
|
+
}
|
|
995
|
+
return this.clone;
|
|
996
|
+
}
|
|
997
|
+
async get(predicate) {
|
|
998
|
+
return this.active().get(predicate);
|
|
999
|
+
}
|
|
1000
|
+
async has(predicate) {
|
|
1001
|
+
return this.active().has(predicate);
|
|
1002
|
+
}
|
|
1003
|
+
async count(predicate) {
|
|
1004
|
+
return this.active().count(predicate);
|
|
1005
|
+
}
|
|
1006
|
+
async getByIndex(indexKey, key) {
|
|
1007
|
+
return this.active().getByIndex(indexKey, key);
|
|
1008
|
+
}
|
|
1009
|
+
async add(...vs) {
|
|
1010
|
+
return this.active().add(...vs);
|
|
1011
|
+
}
|
|
1012
|
+
async update(predicate, updater) {
|
|
1013
|
+
return this.active().update(predicate, updater);
|
|
1014
|
+
}
|
|
1015
|
+
async delete(predicate) {
|
|
1016
|
+
return this.active().delete(predicate);
|
|
1017
|
+
}
|
|
1018
|
+
}
|
|
959
1019
|
//# sourceMappingURL=basics.js.map
|
package/dist/basics.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"basics.js","sourceRoot":"","sources":["../src/main/basics.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"basics.js","sourceRoot":"","sources":["../src/main/basics.ts"],"names":[],"mappings":"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"}
|
package/dist/fileio.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { join } from "node:path";
|
|
1
|
+
import { isAbsolute, join, relative, resolve, sep } from "node:path";
|
|
2
2
|
import { chmod, cp, mkdir, readdir, readFile, rename, rm, stat, writeFile } from "node:fs/promises";
|
|
3
3
|
import { setTimeout } from "node:timers/promises";
|
|
4
4
|
import { uuidv7 } from "uuidv7";
|
|
@@ -12,18 +12,45 @@ const RESTRICTED_DIR_MODE = 0o700;
|
|
|
12
12
|
const SNAPSHOT_VERSION_PATTERN = /^\d{8}T\d{9}Z(_[A-Za-z0-9_-]+)?$/;
|
|
13
13
|
const SNAPSHOT_LABEL_PATTERN = /^[A-Za-z0-9_-]+$/;
|
|
14
14
|
const RENAME_RETRY_DELAYS_MS = [10, 25, 50, 100];
|
|
15
|
+
const SNAPSHOT_NAME_ATTEMPTS = 100;
|
|
15
16
|
var FsErrorCode;
|
|
16
17
|
(function (FsErrorCode) {
|
|
17
18
|
FsErrorCode["ENOENT"] = "ENOENT";
|
|
18
19
|
FsErrorCode["EPERM"] = "EPERM";
|
|
19
20
|
FsErrorCode["EBUSY"] = "EBUSY";
|
|
20
21
|
FsErrorCode["EACCES"] = "EACCES";
|
|
22
|
+
FsErrorCode["EEXIST"] = "EEXIST";
|
|
21
23
|
})(FsErrorCode || (FsErrorCode = {}));
|
|
22
24
|
const RETRYABLE_RENAME_ERRORS = new Set([FsErrorCode.EPERM, FsErrorCode.EBUSY, FsErrorCode.EACCES]);
|
|
23
|
-
function
|
|
24
|
-
const
|
|
25
|
+
function isSameOrInside(path, dir) {
|
|
26
|
+
const rel = relative(resolve(dir), resolve(path));
|
|
27
|
+
return !isAbsolute(rel) && rel !== ".." && !rel.startsWith(".." + sep);
|
|
28
|
+
}
|
|
29
|
+
let lastSnapshotMs = 0;
|
|
30
|
+
// strictly increasing within the process, so consecutive snapshots never share a name
|
|
31
|
+
function nextSnapshotMs() {
|
|
32
|
+
lastSnapshotMs = Math.max(Date.now(), lastSnapshotMs + 1);
|
|
33
|
+
return lastSnapshotMs;
|
|
34
|
+
}
|
|
35
|
+
function snapshotVersionName(ms, label) {
|
|
36
|
+
const timestamp = new Date(ms).toISOString().replace(/[-:.]/g, "");
|
|
25
37
|
return label ? `${timestamp}_${label}` : timestamp;
|
|
26
38
|
}
|
|
39
|
+
// exclusive mkdir claims the name atomically, also against other processes using the same targetDir
|
|
40
|
+
async function createSnapshotVersionDir(targetDir, label) {
|
|
41
|
+
for (let attempt = 1;; attempt++) {
|
|
42
|
+
const versionName = snapshotVersionName(nextSnapshotMs(), label);
|
|
43
|
+
try {
|
|
44
|
+
await mkdir(join(targetDir, versionName), { mode: RESTRICTED_DIR_MODE });
|
|
45
|
+
return versionName;
|
|
46
|
+
}
|
|
47
|
+
catch (err) {
|
|
48
|
+
if (err.code !== FsErrorCode.EEXIST || attempt >= SNAPSHOT_NAME_ATTEMPTS) {
|
|
49
|
+
throw err;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
}
|
|
27
54
|
// re-applies the restricted mode explicitly rather than relying on fs.cp() to have preserved it
|
|
28
55
|
async function restrictPermissions(path) {
|
|
29
56
|
const info = await stat(path);
|
|
@@ -189,8 +216,12 @@ export class IODatabase {
|
|
|
189
216
|
if (options?.label !== undefined && !SNAPSHOT_LABEL_PATTERN.test(options.label)) {
|
|
190
217
|
throw new Error(`snapshot label "${options.label}" must only contain letters, digits, "-" or "_"`);
|
|
191
218
|
}
|
|
219
|
+
if (isSameOrInside(targetDir, this.basePath)) {
|
|
220
|
+
throw new Error(`snapshot target "${targetDir}" must not be inside the database directory "${this.basePath}"`);
|
|
221
|
+
}
|
|
192
222
|
await mkdir(targetDir, { recursive: true, mode: RESTRICTED_DIR_MODE });
|
|
193
|
-
const
|
|
223
|
+
const versionName = await createSnapshotVersionDir(targetDir, options?.label);
|
|
224
|
+
const versionPath = join(targetDir, versionName);
|
|
194
225
|
try {
|
|
195
226
|
await cp(this.basePath, versionPath, { recursive: true });
|
|
196
227
|
await restrictPermissions(versionPath);
|
|
@@ -200,18 +231,18 @@ export class IODatabase {
|
|
|
200
231
|
throw err;
|
|
201
232
|
}
|
|
202
233
|
if (options?.keepLast !== undefined) {
|
|
203
|
-
await this.pruneSnapshots(targetDir, options.keepLast);
|
|
234
|
+
await this.pruneSnapshots(targetDir, versionName, options.keepLast);
|
|
204
235
|
}
|
|
205
236
|
return versionPath;
|
|
206
237
|
}
|
|
207
238
|
// only ever deletes folders matching our own naming scheme, never anything else the caller keeps in targetDir
|
|
208
|
-
async pruneSnapshots(targetDir, keepLast) {
|
|
239
|
+
async pruneSnapshots(targetDir, createdVersionName, keepLast) {
|
|
209
240
|
const entries = await readdir(targetDir, { withFileTypes: true });
|
|
210
|
-
const
|
|
211
|
-
.filter(e => e.isDirectory() && SNAPSHOT_VERSION_PATTERN.test(e.name))
|
|
241
|
+
const olderVersions = entries
|
|
242
|
+
.filter(e => e.isDirectory() && e.name !== createdVersionName && SNAPSHOT_VERSION_PATTERN.test(e.name))
|
|
212
243
|
.map(e => e.name)
|
|
213
244
|
.sort();
|
|
214
|
-
const toDelete =
|
|
245
|
+
const toDelete = olderVersions.slice(0, Math.max(0, olderVersions.length - keepLast));
|
|
215
246
|
await Promise.all(toDelete.map(name => rm(join(targetDir, name), { recursive: true, force: true })));
|
|
216
247
|
}
|
|
217
248
|
}
|
package/dist/fileio.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fileio.js","sourceRoot":"","sources":["../src/main/fileio.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"fileio.js","sourceRoot":"","sources":["../src/main/fileio.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@incoqnito.io/bajadab",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.4.0",
|
|
4
4
|
"description": "a lightweight json-based database for small-scale single-machine setups",
|
|
5
5
|
"homepage": "https://bitbucket.org/incoqnito/bajadab#readme",
|
|
6
6
|
"bugs": {
|
|
@@ -26,22 +26,18 @@
|
|
|
26
26
|
"test": "node --import tsx --test-global-setup ./src/tests/tests.global.ts --test --enable-source-maps --experimental-test-coverage --test-reporter=lcov --test-reporter-destination=lcov.info --test-reporter=spec --test-reporter-destination=stdout ./src/tests/**/*.test.ts"
|
|
27
27
|
},
|
|
28
28
|
"engines": {
|
|
29
|
-
"node": ">=
|
|
29
|
+
"node": ">=26"
|
|
30
30
|
},
|
|
31
31
|
"dependencies": {
|
|
32
|
-
"@incoqnito.io/ts-iq-core": "^
|
|
32
|
+
"@incoqnito.io/ts-iq-core": "^3.1.0",
|
|
33
33
|
"uuidv7": "^1.2.1"
|
|
34
34
|
},
|
|
35
35
|
"devDependencies": {
|
|
36
|
-
"@types/node": "^26.
|
|
36
|
+
"@types/node": "^26.6.4",
|
|
37
37
|
"rimraf": "^6.1.3",
|
|
38
|
-
"tsx": "^4.23.
|
|
38
|
+
"tsx": "^4.23.15",
|
|
39
39
|
"typescript": "^7.0.2"
|
|
40
40
|
},
|
|
41
|
-
"overrides": {
|
|
42
|
-
"minimatch": "^10.2.6",
|
|
43
|
-
"glob": "^13.0.6"
|
|
44
|
-
},
|
|
45
41
|
"files": [
|
|
46
42
|
"dist",
|
|
47
43
|
"src/main"
|
package/src/main/base.ts
CHANGED
|
@@ -37,7 +37,7 @@ export enum EBArrayDeletionStrategy {
|
|
|
37
37
|
export enum EBAutoFlushStrategy {
|
|
38
38
|
/** Only on an explicit {@link IBCollection.flush} call. */
|
|
39
39
|
NO_AUTO_FLUSH = "NO_AUTO_FLUSH",
|
|
40
|
-
/** After every mutating call (`add`/`update`/`delete`). */
|
|
40
|
+
/** After every mutating call (`add`/`update`/`delete`). If that write fails, the call rejects, but its change stays applied in memory (written by the next flush) and its handlers don't fire. */
|
|
41
41
|
ALWAYS_AUTO_FLUSH = "ALWAYS_AUTO_FLUSH",
|
|
42
42
|
}
|
|
43
43
|
|
|
@@ -103,7 +103,7 @@ export interface IBDatabase {
|
|
|
103
103
|
dropCollection(collectionName: string): Promise<void>;
|
|
104
104
|
/**
|
|
105
105
|
* Flushes every loaded collection, then copies the whole database directory into a new, timestamped
|
|
106
|
-
* version folder under `targetDir` (created if needed). Blocks all other database operations for the
|
|
106
|
+
* version folder under `targetDir` (created if needed; must not be inside the database directory). Blocks all other database operations for the
|
|
107
107
|
* duration. See {@link IBSnapshotOptions} for pruning older versions. Returns the new version folder's path.
|
|
108
108
|
*/
|
|
109
109
|
snapshot(targetDir: string, options?: IBSnapshotOptions): Promise<string>;
|
|
@@ -116,7 +116,8 @@ export interface IBDatabase {
|
|
|
116
116
|
* added and later deleted within the same transaction fires nothing. If `fn` throws, nothing is applied,
|
|
117
117
|
* nothing is flushed, and no handler fires.
|
|
118
118
|
* Only collections named in `collectionNames` can be reached from within `fn`; writing to one of them through
|
|
119
|
-
* its regular {@link IBCollection} handle inside `fn` rejects,
|
|
119
|
+
* its regular {@link IBCollection} handle inside `fn` rejects, as does registering a handler on it via `on()`
|
|
120
|
+
* and a nested `transaction()` call.
|
|
120
121
|
* Values mutated in place are shared with the live collection and are neither isolated nor reverted.
|
|
121
122
|
*/
|
|
122
123
|
transaction(collectionNames: string[], fn: (tx: IBTransaction) => Promise<void>): Promise<void>;
|
|
@@ -149,7 +150,7 @@ export interface IHandlerRegistration {
|
|
|
149
150
|
export enum EBHandlerMode {
|
|
150
151
|
/** The triggering `add()`/`update()`/`delete()` call doesn't resolve until this handler has run. Default. */
|
|
151
152
|
SYNC = "SYNC",
|
|
152
|
-
/** The handler runs without the triggering call waiting for it. */
|
|
153
|
+
/** The handler runs without the triggering call waiting for it, once the database operation that triggered it has finished. */
|
|
153
154
|
ASYNC = "ASYNC",
|
|
154
155
|
}
|
|
155
156
|
|
|
@@ -223,7 +224,7 @@ export interface IBTransaction {
|
|
|
223
224
|
/**
|
|
224
225
|
* The transaction-scoped view of `collectionName`. Returns the same instance on repeat calls with the
|
|
225
226
|
* same (canonicalized) name within one transaction. Throws if `collectionName` wasn't declared to
|
|
226
|
-
* {@link IBDatabase.transaction}.
|
|
227
|
+
* {@link IBDatabase.transaction}. The returned view rejects every call once the transaction has ended.
|
|
227
228
|
*/
|
|
228
229
|
getCollection<T = any>(collectionName: string): Promise<IBTransactionCollection<T>>;
|
|
229
230
|
}
|
package/src/main/basics.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { AsyncLocalStorage } from "node:async_hooks";
|
|
2
2
|
import { uuidv7, } from "uuidv7";
|
|
3
|
-
import {
|
|
3
|
+
import { ReentrantMutex } from "@incoqnito.io/ts-iq-core";
|
|
4
4
|
|
|
5
5
|
import type { IODatabase, IPreparedWrite } from "./fileio.js";
|
|
6
6
|
|
|
@@ -46,20 +46,26 @@ export interface IPreparedTransactionCommit {
|
|
|
46
46
|
fire(): Promise<void>;
|
|
47
47
|
}
|
|
48
48
|
|
|
49
|
+
const UNCHANGED_TRANSACTION_COMMIT: IPreparedTransactionCommit = Object.freeze({
|
|
50
|
+
write: Object.freeze({ commit: async () => { }, discard: async () => { } }),
|
|
51
|
+
apply: () => { },
|
|
52
|
+
fire: async () => { },
|
|
53
|
+
});
|
|
54
|
+
|
|
49
55
|
/** {@link IBCollectionConfig} used when a collection is created without an explicit one. */
|
|
50
|
-
export const DEFAULT_COLLECTION_CONFIG: IBCollectionConfig = {
|
|
56
|
+
export const DEFAULT_COLLECTION_CONFIG: IBCollectionConfig = Object.freeze({
|
|
51
57
|
arrayDeletionStrategy: EBArrayDeletionStrategy.IN_PLACE,
|
|
52
58
|
autoIDStrategy: EBAutoIDStrategy.AUTO_ID_UUID,
|
|
53
59
|
duplicateIDStrategy: EBDuplicateIDStrategy.OVERWRITE,
|
|
54
60
|
memStorageStrategy: EBMemStorageStrategy.MAP,
|
|
55
61
|
dirtyUnloadStrategy: EBDirtyUnloadStrategy.FLUSH,
|
|
56
62
|
autoFlushStrategy: EBAutoFlushStrategy.ALWAYS_AUTO_FLUSH,
|
|
57
|
-
};
|
|
63
|
+
});
|
|
58
64
|
|
|
59
65
|
/** {@link IBDatabaseConfig} used when `getDatabase()` creates a fresh database. */
|
|
60
|
-
export const DEFAULT_DATABASE_CONFIG: IBDatabaseConfig = {
|
|
66
|
+
export const DEFAULT_DATABASE_CONFIG: IBDatabaseConfig = Object.freeze({
|
|
61
67
|
defaultCollectionConfig: DEFAULT_COLLECTION_CONFIG,
|
|
62
|
-
};
|
|
68
|
+
});
|
|
63
69
|
|
|
64
70
|
export class BDatabase implements IBDatabase {
|
|
65
71
|
public readonly config: IBDatabaseConfig;
|
|
@@ -68,6 +74,7 @@ export class BDatabase implements IBDatabase {
|
|
|
68
74
|
readonly functionRegistry?: IBFunctionRegistry;
|
|
69
75
|
readonly iid = uuidv7();
|
|
70
76
|
private readonly transactionScope = new AsyncLocalStorage<ReadonlySet<string>>();
|
|
77
|
+
private readonly mutex = new ReentrantMutex(this.iid);
|
|
71
78
|
|
|
72
79
|
public constructor(io: IODatabase, config?: IBDatabaseConfig, functionRegistry?: IBFunctionRegistry) {
|
|
73
80
|
this.config = { ...(config ?? DEFAULT_DATABASE_CONFIG) };
|
|
@@ -75,8 +82,12 @@ export class BDatabase implements IBDatabase {
|
|
|
75
82
|
this.functionRegistry = functionRegistry;
|
|
76
83
|
}
|
|
77
84
|
|
|
78
|
-
public
|
|
79
|
-
return
|
|
85
|
+
public runExclusive<R>(fn: () => Promise<R>): Promise<R> {
|
|
86
|
+
return this.mutex.run(fn);
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
public runDetached(task: () => Promise<void>): void {
|
|
90
|
+
this.mutex.runAfterRelease(() => { void this.transactionScope.exit(task); });
|
|
80
91
|
}
|
|
81
92
|
|
|
82
93
|
public isInTransaction(collectionName: string): boolean {
|
|
@@ -124,8 +135,8 @@ export class BDatabase implements IBDatabase {
|
|
|
124
135
|
const coll: BCollection = this.collections.get(cname) as BCollection;
|
|
125
136
|
if (coll) {
|
|
126
137
|
coll.markDropped();
|
|
138
|
+
await this.io.deleteCollection(cname);
|
|
127
139
|
this.collections.delete(cname);
|
|
128
|
-
return this.io.deleteCollection(cname);
|
|
129
140
|
}
|
|
130
141
|
else {
|
|
131
142
|
throw new Error(`no such collection ${collectionName}`);
|
|
@@ -160,13 +171,14 @@ export class BDatabase implements IBDatabase {
|
|
|
160
171
|
for (const [name, original] of originals) {
|
|
161
172
|
clones.set(name, await original.cloneForTransaction());
|
|
162
173
|
}
|
|
174
|
+
const views = new Map(Array.from(clones, ([name, clone]) => [name, new BTransactionCollection(clone)]));
|
|
163
175
|
const tx: IBTransaction = {
|
|
164
176
|
getCollection: async <T>(collectionName: string): Promise<IBTransactionCollection<T>> => {
|
|
165
|
-
const
|
|
166
|
-
if (!
|
|
177
|
+
const view = views.get(canonicalName(collectionName));
|
|
178
|
+
if (!view) {
|
|
167
179
|
throw new Error(`collection "${collectionName}" was not declared to this transaction`);
|
|
168
180
|
}
|
|
169
|
-
return
|
|
181
|
+
return view as IBTransactionCollection<T>;
|
|
170
182
|
},
|
|
171
183
|
};
|
|
172
184
|
try {
|
|
@@ -198,6 +210,7 @@ export class BDatabase implements IBDatabase {
|
|
|
198
210
|
}
|
|
199
211
|
}
|
|
200
212
|
finally {
|
|
213
|
+
views.forEach(view => view.end());
|
|
201
214
|
clones.forEach(clone => clone.markDropped());
|
|
202
215
|
}
|
|
203
216
|
});
|
|
@@ -324,13 +337,19 @@ export class BCollection<T = any> implements IBCollection<T> {
|
|
|
324
337
|
}
|
|
325
338
|
}
|
|
326
339
|
|
|
340
|
+
private async dispatchHandler(fn: () => void | Promise<void>, modificationType: EBModificationType, mode: EBHandlerMode): Promise<void> {
|
|
341
|
+
if (mode === EBHandlerMode.SYNC) {
|
|
342
|
+
await this.invokeHandler(fn, modificationType);
|
|
343
|
+
}
|
|
344
|
+
else {
|
|
345
|
+
this.database.runDetached(() => this.invokeHandler(fn, modificationType));
|
|
346
|
+
}
|
|
347
|
+
}
|
|
348
|
+
|
|
327
349
|
private async fireAdd(added: T[]): Promise<void> {
|
|
328
350
|
for (const v of added) {
|
|
329
351
|
for (const { handler, mode } of this.addHandlers) {
|
|
330
|
-
|
|
331
|
-
if (mode === EBHandlerMode.SYNC) {
|
|
332
|
-
await call;
|
|
333
|
-
}
|
|
352
|
+
await this.dispatchHandler(() => handler(v), EBModificationType.ADD, mode);
|
|
334
353
|
}
|
|
335
354
|
}
|
|
336
355
|
}
|
|
@@ -338,10 +357,7 @@ export class BCollection<T = any> implements IBCollection<T> {
|
|
|
338
357
|
private async fireUpdate(pairs: Array<[T, T]>): Promise<void> {
|
|
339
358
|
for (const [previous, updated] of pairs) {
|
|
340
359
|
for (const { handler, mode } of this.updateHandlers) {
|
|
341
|
-
|
|
342
|
-
if (mode === EBHandlerMode.SYNC) {
|
|
343
|
-
await call;
|
|
344
|
-
}
|
|
360
|
+
await this.dispatchHandler(() => handler(previous, updated), EBModificationType.UPDATE, mode);
|
|
345
361
|
}
|
|
346
362
|
}
|
|
347
363
|
}
|
|
@@ -349,10 +365,7 @@ export class BCollection<T = any> implements IBCollection<T> {
|
|
|
349
365
|
private async fireDelete(deleted: T[]): Promise<void> {
|
|
350
366
|
for (const v of deleted) {
|
|
351
367
|
for (const { handler, mode } of this.deleteHandlers) {
|
|
352
|
-
|
|
353
|
-
if (mode === EBHandlerMode.SYNC) {
|
|
354
|
-
await call;
|
|
355
|
-
}
|
|
368
|
+
await this.dispatchHandler(() => handler(v), EBModificationType.DELETE, mode);
|
|
356
369
|
}
|
|
357
370
|
}
|
|
358
371
|
}
|
|
@@ -362,6 +375,9 @@ export class BCollection<T = any> implements IBCollection<T> {
|
|
|
362
375
|
public async on(modificationType: EBModificationType.DELETE, handler: TDeleteHandler<T>, mode?: EBHandlerMode): Promise<IHandlerRegistration>;
|
|
363
376
|
public async on(modificationType: EBModificationType, handler: TAddHandler<T> | TUpdateHandler<T> | TDeleteHandler<T>, mode: EBHandlerMode = EBHandlerMode.SYNC): Promise<IHandlerRegistration> {
|
|
364
377
|
return this.runProtected(async () => {
|
|
378
|
+
if (this.database.isInTransaction(this.collectionName)) {
|
|
379
|
+
throw new Error(`cannot register a handler on collection "${this.collectionName}" while it is part of a running transaction`);
|
|
380
|
+
}
|
|
365
381
|
switch (modificationType) {
|
|
366
382
|
case EBModificationType.ADD: {
|
|
367
383
|
const h = handler as TAddHandler<T>;
|
|
@@ -483,18 +499,16 @@ export class BCollection<T = any> implements IBCollection<T> {
|
|
|
483
499
|
});
|
|
484
500
|
}
|
|
485
501
|
|
|
486
|
-
private resolveIndexDefinitions():
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
return;
|
|
490
|
-
}
|
|
491
|
-
for (const [indexKey, registryKey] of Object.entries(this.collectionConfig.indexes)) {
|
|
502
|
+
private resolveIndexDefinitions(): Map<string, TIndexKeyFunction<T>> {
|
|
503
|
+
const ret = new Map<string, TIndexKeyFunction<T>>();
|
|
504
|
+
for (const [indexKey, registryKey] of Object.entries(this.collectionConfig.indexes ?? {})) {
|
|
492
505
|
const extractor = this.database.functionRegistry?.fetch(registryKey) as TIndexKeyFunction<T> | undefined;
|
|
493
506
|
if (!extractor) {
|
|
494
507
|
throw new Error(`index key function "${registryKey}" is not registered`);
|
|
495
508
|
}
|
|
496
|
-
|
|
509
|
+
ret.set(indexKey, extractor);
|
|
497
510
|
}
|
|
511
|
+
return ret;
|
|
498
512
|
}
|
|
499
513
|
|
|
500
514
|
private async indexKeysFor(v: T): Promise<Array<[string, string[]]>> {
|
|
@@ -921,6 +935,7 @@ export class BCollection<T = any> implements IBCollection<T> {
|
|
|
921
935
|
|
|
922
936
|
public async reload(): Promise<void> {
|
|
923
937
|
return this.runProtected(async () => {
|
|
938
|
+
const indexDefinitions = this.resolveIndexDefinitions();
|
|
924
939
|
switch (this.collectionConfig.memStorageStrategy) {
|
|
925
940
|
case EBMemStorageStrategy.MAP:
|
|
926
941
|
this.mapData = await this.database.io.loadMapData<T>(this.collectionID);
|
|
@@ -930,10 +945,11 @@ export class BCollection<T = any> implements IBCollection<T> {
|
|
|
930
945
|
this.arrayData = await this.database.io.loadArrayData<T>(this.collectionID);
|
|
931
946
|
break;
|
|
932
947
|
}
|
|
933
|
-
this.
|
|
948
|
+
this.indexDefinitions = indexDefinitions;
|
|
949
|
+
this.dirty = false;
|
|
950
|
+
this.loaded = false;
|
|
934
951
|
await this.rebuildIndexRuntime();
|
|
935
952
|
this.loaded = true;
|
|
936
|
-
this.dirty = false;
|
|
937
953
|
});
|
|
938
954
|
}
|
|
939
955
|
|
|
@@ -987,20 +1003,25 @@ export class BCollection<T = any> implements IBCollection<T> {
|
|
|
987
1003
|
if (this.addHandlers.length > 0 || this.updateHandlers.length > 0 || this.deleteHandlers.length > 0) {
|
|
988
1004
|
clone.txChanges = new Map();
|
|
989
1005
|
}
|
|
990
|
-
clone.
|
|
991
|
-
|
|
1006
|
+
clone.indexDefinitions = this.indexDefinitions;
|
|
1007
|
+
clone.indexRuntime = new Map(Array.from(this.indexRuntime, ([indexKey, byKey]) =>
|
|
1008
|
+
[indexKey, new Map(Array.from(byKey, ([key, bucket]) => [key, new Set(bucket)]))]));
|
|
1009
|
+
clone.indexedKeys = new Map(this.indexedKeys);
|
|
992
1010
|
return clone;
|
|
993
1011
|
});
|
|
994
1012
|
}
|
|
995
1013
|
|
|
996
1014
|
/**
|
|
997
|
-
* Writes `clone`'s state to a temp file (see {@link IPreparedWrite}) and computes the handler events for the
|
|
1015
|
+
* Writes `clone`'s state to a temp file (see {@link IPreparedWrite}), unless the transaction left it unchanged, and computes the handler events for the
|
|
998
1016
|
* net changes against this collection's current state: one per id the transaction touched, typed by the last
|
|
999
1017
|
* operation on it (`DELETE` if gone, `ADD` if new or last stored via `add()`, `UPDATE` otherwise). Nothing is
|
|
1000
1018
|
* applied until `apply()`; call only while already holding this collection's mutex for the whole transaction.
|
|
1001
1019
|
*/
|
|
1002
1020
|
public async prepareTransactionCommit(clone: BCollection<T>): Promise<IPreparedTransactionCommit> {
|
|
1003
1021
|
return this.runProtected(async () => {
|
|
1022
|
+
if (!clone.dirty) {
|
|
1023
|
+
return UNCHANGED_TRANSACTION_COMMIT;
|
|
1024
|
+
}
|
|
1004
1025
|
await this.checkLoaded();
|
|
1005
1026
|
const added: T[] = [];
|
|
1006
1027
|
const updated: Array<[T, T]> = [];
|
|
@@ -1056,4 +1077,59 @@ export class BCollection<T = any> implements IBCollection<T> {
|
|
|
1056
1077
|
});
|
|
1057
1078
|
}
|
|
1058
1079
|
|
|
1059
|
-
}
|
|
1080
|
+
}
|
|
1081
|
+
class BTransactionCollection<T = any> implements IBTransactionCollection<T> {
|
|
1082
|
+
private readonly clone: BCollection<T>;
|
|
1083
|
+
private ended: boolean = false;
|
|
1084
|
+
|
|
1085
|
+
public constructor(clone: BCollection<T>) {
|
|
1086
|
+
this.clone = clone;
|
|
1087
|
+
}
|
|
1088
|
+
|
|
1089
|
+
public get collectionName(): string {
|
|
1090
|
+
return this.clone.collectionName;
|
|
1091
|
+
}
|
|
1092
|
+
|
|
1093
|
+
public get collectionID(): string {
|
|
1094
|
+
return this.clone.collectionID;
|
|
1095
|
+
}
|
|
1096
|
+
|
|
1097
|
+
public end(): void {
|
|
1098
|
+
this.ended = true;
|
|
1099
|
+
}
|
|
1100
|
+
|
|
1101
|
+
private active(): BCollection<T> {
|
|
1102
|
+
if (this.ended) {
|
|
1103
|
+
throw new Error(`the transaction on collection "${this.clone.collectionName}" has already ended`);
|
|
1104
|
+
}
|
|
1105
|
+
return this.clone;
|
|
1106
|
+
}
|
|
1107
|
+
|
|
1108
|
+
public async get(predicate?: (v: T) => boolean): Promise<T[]> {
|
|
1109
|
+
return this.active().get(predicate);
|
|
1110
|
+
}
|
|
1111
|
+
|
|
1112
|
+
public async has(predicate: (v: T) => boolean): Promise<boolean> {
|
|
1113
|
+
return this.active().has(predicate);
|
|
1114
|
+
}
|
|
1115
|
+
|
|
1116
|
+
public async count(predicate?: (v: T) => boolean): Promise<number> {
|
|
1117
|
+
return this.active().count(predicate);
|
|
1118
|
+
}
|
|
1119
|
+
|
|
1120
|
+
public async getByIndex(indexKey: string, key: string): Promise<T[]> {
|
|
1121
|
+
return this.active().getByIndex(indexKey, key);
|
|
1122
|
+
}
|
|
1123
|
+
|
|
1124
|
+
public async add(...vs: T[]): Promise<number> {
|
|
1125
|
+
return this.active().add(...vs);
|
|
1126
|
+
}
|
|
1127
|
+
|
|
1128
|
+
public async update(predicate: (v: T) => boolean, updater: (v: T) => Promise<T>): Promise<number> {
|
|
1129
|
+
return this.active().update(predicate, updater);
|
|
1130
|
+
}
|
|
1131
|
+
|
|
1132
|
+
public async delete(predicate: (v: T) => boolean): Promise<number> {
|
|
1133
|
+
return this.active().delete(predicate);
|
|
1134
|
+
}
|
|
1135
|
+
}
|
package/src/main/fileio.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { join } from "node:path";
|
|
1
|
+
import { isAbsolute, join, relative, resolve, sep } from "node:path";
|
|
2
2
|
import { chmod, cp, mkdir, readdir, readFile, rename, rm, stat, writeFile } from "node:fs/promises";
|
|
3
3
|
import { setTimeout } from "node:timers/promises";
|
|
4
4
|
import { uuidv7 } from "uuidv7";
|
|
@@ -26,12 +26,14 @@ const RESTRICTED_DIR_MODE = 0o700;
|
|
|
26
26
|
const SNAPSHOT_VERSION_PATTERN = /^\d{8}T\d{9}Z(_[A-Za-z0-9_-]+)?$/;
|
|
27
27
|
const SNAPSHOT_LABEL_PATTERN = /^[A-Za-z0-9_-]+$/;
|
|
28
28
|
const RENAME_RETRY_DELAYS_MS = [10, 25, 50, 100];
|
|
29
|
+
const SNAPSHOT_NAME_ATTEMPTS = 100;
|
|
29
30
|
|
|
30
31
|
enum FsErrorCode {
|
|
31
32
|
ENOENT = "ENOENT",
|
|
32
33
|
EPERM = "EPERM",
|
|
33
34
|
EBUSY = "EBUSY",
|
|
34
35
|
EACCES = "EACCES",
|
|
36
|
+
EEXIST = "EEXIST",
|
|
35
37
|
}
|
|
36
38
|
|
|
37
39
|
const RETRYABLE_RENAME_ERRORS: ReadonlySet<string> =
|
|
@@ -42,11 +44,40 @@ export interface IPreparedWrite {
|
|
|
42
44
|
discard(): Promise<void>;
|
|
43
45
|
}
|
|
44
46
|
|
|
45
|
-
function
|
|
46
|
-
const
|
|
47
|
+
function isSameOrInside(path: string, dir: string): boolean {
|
|
48
|
+
const rel = relative(resolve(dir), resolve(path));
|
|
49
|
+
return !isAbsolute(rel) && rel !== ".." && !rel.startsWith(".." + sep);
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
let lastSnapshotMs = 0;
|
|
53
|
+
|
|
54
|
+
// strictly increasing within the process, so consecutive snapshots never share a name
|
|
55
|
+
function nextSnapshotMs(): number {
|
|
56
|
+
lastSnapshotMs = Math.max(Date.now(), lastSnapshotMs + 1);
|
|
57
|
+
return lastSnapshotMs;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
function snapshotVersionName(ms: number, label?: string): string {
|
|
61
|
+
const timestamp = new Date(ms).toISOString().replace(/[-:.]/g, "");
|
|
47
62
|
return label ? `${timestamp}_${label}` : timestamp;
|
|
48
63
|
}
|
|
49
64
|
|
|
65
|
+
// exclusive mkdir claims the name atomically, also against other processes using the same targetDir
|
|
66
|
+
async function createSnapshotVersionDir(targetDir: string, label?: string): Promise<string> {
|
|
67
|
+
for (let attempt = 1; ; attempt++) {
|
|
68
|
+
const versionName = snapshotVersionName(nextSnapshotMs(), label);
|
|
69
|
+
try {
|
|
70
|
+
await mkdir(join(targetDir, versionName), { mode: RESTRICTED_DIR_MODE });
|
|
71
|
+
return versionName;
|
|
72
|
+
}
|
|
73
|
+
catch (err: any) {
|
|
74
|
+
if (err.code !== FsErrorCode.EEXIST || attempt >= SNAPSHOT_NAME_ATTEMPTS) {
|
|
75
|
+
throw err;
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
|
|
50
81
|
// re-applies the restricted mode explicitly rather than relying on fs.cp() to have preserved it
|
|
51
82
|
async function restrictPermissions(path: string): Promise<void> {
|
|
52
83
|
const info = await stat(path);
|
|
@@ -233,8 +264,12 @@ export class IODatabase {
|
|
|
233
264
|
if (options?.label !== undefined && !SNAPSHOT_LABEL_PATTERN.test(options.label)) {
|
|
234
265
|
throw new Error(`snapshot label "${options.label}" must only contain letters, digits, "-" or "_"`);
|
|
235
266
|
}
|
|
267
|
+
if (isSameOrInside(targetDir, this.basePath)) {
|
|
268
|
+
throw new Error(`snapshot target "${targetDir}" must not be inside the database directory "${this.basePath}"`);
|
|
269
|
+
}
|
|
236
270
|
await mkdir(targetDir, { recursive: true, mode: RESTRICTED_DIR_MODE });
|
|
237
|
-
const
|
|
271
|
+
const versionName = await createSnapshotVersionDir(targetDir, options?.label);
|
|
272
|
+
const versionPath = join(targetDir, versionName);
|
|
238
273
|
try {
|
|
239
274
|
await cp(this.basePath, versionPath, { recursive: true });
|
|
240
275
|
await restrictPermissions(versionPath);
|
|
@@ -244,19 +279,19 @@ export class IODatabase {
|
|
|
244
279
|
throw err;
|
|
245
280
|
}
|
|
246
281
|
if (options?.keepLast !== undefined) {
|
|
247
|
-
await this.pruneSnapshots(targetDir, options.keepLast);
|
|
282
|
+
await this.pruneSnapshots(targetDir, versionName, options.keepLast);
|
|
248
283
|
}
|
|
249
284
|
return versionPath;
|
|
250
285
|
}
|
|
251
286
|
|
|
252
287
|
// only ever deletes folders matching our own naming scheme, never anything else the caller keeps in targetDir
|
|
253
|
-
private async pruneSnapshots(targetDir: string, keepLast: number): Promise<void> {
|
|
288
|
+
private async pruneSnapshots(targetDir: string, createdVersionName: string, keepLast: number): Promise<void> {
|
|
254
289
|
const entries = await readdir(targetDir, { withFileTypes: true });
|
|
255
|
-
const
|
|
256
|
-
.filter(e => e.isDirectory() && SNAPSHOT_VERSION_PATTERN.test(e.name))
|
|
290
|
+
const olderVersions = entries
|
|
291
|
+
.filter(e => e.isDirectory() && e.name !== createdVersionName && SNAPSHOT_VERSION_PATTERN.test(e.name))
|
|
257
292
|
.map(e => e.name)
|
|
258
293
|
.sort();
|
|
259
|
-
const toDelete =
|
|
294
|
+
const toDelete = olderVersions.slice(0, Math.max(0, olderVersions.length - keepLast));
|
|
260
295
|
await Promise.all(toDelete.map(name => rm(join(targetDir, name), { recursive: true, force: true })));
|
|
261
296
|
}
|
|
262
297
|
}
|