@bodil/bdb 0.1.2 → 0.2.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 +76 -0
- package/dist/backend.d.ts +40 -0
- package/dist/backend.js +31 -0
- package/dist/backend.js.map +1 -1
- package/dist/index.d.ts +80 -9
- package/dist/index.js +22 -17
- package/dist/index.js.map +1 -1
- package/dist/index.test.js +62 -14
- package/dist/index.test.js.map +1 -1
- package/dist/indices.d.ts +6 -0
- package/dist/indices.js +6 -0
- package/dist/indices.js.map +1 -1
- package/dist/query.d.ts +30 -24
- package/dist/query.js +35 -23
- package/dist/query.js.map +1 -1
- package/dist/table.d.ts +152 -31
- package/dist/table.js +147 -15
- package/dist/table.js.map +1 -1
- package/dist/types.d.ts +1 -1
- package/package.json +3 -3
- package/src/backend.ts +40 -0
- package/src/index.test.ts +84 -16
- package/src/index.ts +112 -45
- package/src/indices.ts +11 -6
- package/src/query.ts +88 -73
- package/src/table.ts +226 -66
- package/src/types.ts +1 -1
package/README.md
ADDED
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
# bdb
|
|
2
|
+
|
|
3
|
+
An easy to use and well typed reactive database for client side web apps. As web
|
|
4
|
+
scale as it gets.
|
|
5
|
+
|
|
6
|
+
## API Docs
|
|
7
|
+
|
|
8
|
+
Find the API docs here:
|
|
9
|
+
|
|
10
|
+
* [https://js.bodil.lol/projects/bdb/](https://js.bodil.lol/projects/bdb/en/stable/modules.html)
|
|
11
|
+
|
|
12
|
+
## Overview
|
|
13
|
+
|
|
14
|
+
Big ideas:
|
|
15
|
+
|
|
16
|
+
* In-memory database with optional syncing to permanent storage (usually
|
|
17
|
+
[IndexedDB](https://developer.mozilla.org/en-US/docs/Glossary/IndexedDB)). All
|
|
18
|
+
operations are synchronous, storage happens automatically in the background,
|
|
19
|
+
and it syncs automatically with other browser tabs using the same storage.
|
|
20
|
+
Suitable for managing your application state as well as persistent settings.
|
|
21
|
+
|
|
22
|
+
* Leverages the type system to ensure indices are valid and queries don't use
|
|
23
|
+
indices that don't exist. If you're unsure whether your code is using an
|
|
24
|
+
index, you can remove it, and if the code still type checks, you're good.
|
|
25
|
+
|
|
26
|
+
* Leans on [signals](https://github.com/tc39/proposal-signals) to build reactive
|
|
27
|
+
queries, letting you easily build complex relational queries with live
|
|
28
|
+
results, and, more importantly, makes it easy to reflect your application
|
|
29
|
+
state in your web UI, assuming your web framework understands signals.
|
|
30
|
+
|
|
31
|
+
## Example
|
|
32
|
+
|
|
33
|
+
```ts
|
|
34
|
+
import { createTable } from "@bodil/bdb";
|
|
35
|
+
|
|
36
|
+
type MovieStar = {
|
|
37
|
+
name: string;
|
|
38
|
+
powerLevel: number;
|
|
39
|
+
};
|
|
40
|
+
|
|
41
|
+
// Make a table of entries of type `MovieStar` with primary key `name`
|
|
42
|
+
const movieStars = createTable<MovieStar>()
|
|
43
|
+
// with `name` as the primary key
|
|
44
|
+
.withPrimaryIndex(index<MovieStar>().key("name"))
|
|
45
|
+
// and with an additional searchable index for `powerLevel`.
|
|
46
|
+
.withIndex(index<MovieStar>().key("powerLevel"));
|
|
47
|
+
|
|
48
|
+
// Add some movie stars to the table.
|
|
49
|
+
table.add(
|
|
50
|
+
{ name: "Joe", powerLevel: 25 },
|
|
51
|
+
{ name: "Mike", powerLevel: 15 },
|
|
52
|
+
{ name: "Robert", powerLevel: 9001 },
|
|
53
|
+
);
|
|
54
|
+
|
|
55
|
+
// Lookup a movie star by primary key.
|
|
56
|
+
table.get("Joe"); // => { name: "Joe", powerLevel: 25 }
|
|
57
|
+
|
|
58
|
+
// Get all movie stars with `powerLevel` below 9000.
|
|
59
|
+
const query = table.where("powerLevel").below(9000);
|
|
60
|
+
query.toArray().map((i) => i.name); // => ["Joe", "Mike"]
|
|
61
|
+
|
|
62
|
+
// A live query of Robert's power level.
|
|
63
|
+
const robertsPowerLevel = table.signal("Robert")?.map((i) => i.powerLevel);
|
|
64
|
+
robertsPowerLevel.get(); // => 9001
|
|
65
|
+
// He gets more powerful as he fixes the bug!
|
|
66
|
+
table.update("Robert", (robert) => robert.powerLevel++);
|
|
67
|
+
robertsPowerLevel.get(); // => 9002
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
## Licence
|
|
71
|
+
|
|
72
|
+
Copyright 2025 Bodil Stokke
|
|
73
|
+
|
|
74
|
+
Licensed under the [European Union Public
|
|
75
|
+
Licence](https://interoperable-europe.ec.europa.eu/collection/eupl/eupl-text-eupl-12)
|
|
76
|
+
version 1.2 or later.
|
package/dist/backend.d.ts
CHANGED
|
@@ -4,11 +4,23 @@ export type DatabaseBroadcast = {
|
|
|
4
4
|
table: string;
|
|
5
5
|
key: unknown;
|
|
6
6
|
};
|
|
7
|
+
/**
|
|
8
|
+
* Configuration for IndexedDB backends.
|
|
9
|
+
*/
|
|
7
10
|
export type IndexedDBBackendConfig = {
|
|
11
|
+
/** Name of the IndexedDB database to connect to. */
|
|
8
12
|
name: string;
|
|
13
|
+
/** Version number of the database. */
|
|
9
14
|
version: number;
|
|
15
|
+
/**
|
|
16
|
+
* Name of the IndexedDB database table to store our database in. Defaults
|
|
17
|
+
* to `"store"`.
|
|
18
|
+
*/
|
|
10
19
|
table?: string;
|
|
11
20
|
};
|
|
21
|
+
/**
|
|
22
|
+
* Base class for storage backends.
|
|
23
|
+
*/
|
|
12
24
|
export declare abstract class StorageBackend {
|
|
13
25
|
readonly name: string;
|
|
14
26
|
abstract get<A = unknown>(table: string, key: unknown): Promise<A>;
|
|
@@ -19,16 +31,44 @@ export declare abstract class StorageBackend {
|
|
|
19
31
|
protected constructor(name: string);
|
|
20
32
|
onBroadcast(callback: (message: DatabaseBroadcast) => void): Disposable | undefined;
|
|
21
33
|
}
|
|
34
|
+
/**
|
|
35
|
+
* Storage backend using an IndexedDB database.
|
|
36
|
+
*
|
|
37
|
+
* Use {@link IndexedDBBackend.open} to obtain a storage backend connected to
|
|
38
|
+
* the specified IndexedDB database.
|
|
39
|
+
*
|
|
40
|
+
* @example
|
|
41
|
+
* // Connect to the IndexedDB database.
|
|
42
|
+
* const storage = await IndexedDBBackend.open("my-docs", 1);
|
|
43
|
+
* // Declare a document type.
|
|
44
|
+
* type Document = { id: string; value: number };
|
|
45
|
+
* // Create the table.
|
|
46
|
+
* const docs = Table.create<Document>()
|
|
47
|
+
* .withPrimaryKey(index<Document>().key("id"))
|
|
48
|
+
* // Connect the table to our storage.
|
|
49
|
+
* .withStorage(storage);
|
|
50
|
+
* // Wait until the table has finished syncing with the storage.
|
|
51
|
+
* await docs.ready;
|
|
52
|
+
* // Ready for use!
|
|
53
|
+
* docs.add({ id: "Robert", value: 9001 });
|
|
54
|
+
*/
|
|
22
55
|
export declare class IndexedDBBackend extends StorageBackend {
|
|
23
56
|
private db?;
|
|
24
57
|
readonly version: number;
|
|
25
58
|
readonly table: string;
|
|
59
|
+
/**
|
|
60
|
+
* Connect to an IndexedDB database.
|
|
61
|
+
*/
|
|
26
62
|
static open(config: IndexedDBBackendConfig): Promise<IndexedDBBackend>;
|
|
27
63
|
protected constructor(name: string, version: number, table: string);
|
|
28
64
|
private open;
|
|
29
65
|
private transaction;
|
|
66
|
+
/** @internal */
|
|
30
67
|
get<A = unknown>(table: string, key: unknown): Promise<A>;
|
|
68
|
+
/** @internal */
|
|
31
69
|
getAll<A = unknown>(table: string): Promise<Array<A>>;
|
|
70
|
+
/** @internal */
|
|
32
71
|
update(table: string, key: unknown, value: unknown): Promise<void>;
|
|
72
|
+
/** @internal */
|
|
33
73
|
delete(table: string, key: unknown): Promise<void>;
|
|
34
74
|
}
|
package/dist/backend.js
CHANGED
|
@@ -12,6 +12,9 @@ function request(req) {
|
|
|
12
12
|
function unpackRecord(record) {
|
|
13
13
|
return deserialise(record.value);
|
|
14
14
|
}
|
|
15
|
+
/**
|
|
16
|
+
* Base class for storage backends.
|
|
17
|
+
*/
|
|
15
18
|
export class StorageBackend {
|
|
16
19
|
constructor(name) {
|
|
17
20
|
this.name = name;
|
|
@@ -23,7 +26,31 @@ export class StorageBackend {
|
|
|
23
26
|
return this.broadcast?.on(callback);
|
|
24
27
|
}
|
|
25
28
|
}
|
|
29
|
+
/**
|
|
30
|
+
* Storage backend using an IndexedDB database.
|
|
31
|
+
*
|
|
32
|
+
* Use {@link IndexedDBBackend.open} to obtain a storage backend connected to
|
|
33
|
+
* the specified IndexedDB database.
|
|
34
|
+
*
|
|
35
|
+
* @example
|
|
36
|
+
* // Connect to the IndexedDB database.
|
|
37
|
+
* const storage = await IndexedDBBackend.open("my-docs", 1);
|
|
38
|
+
* // Declare a document type.
|
|
39
|
+
* type Document = { id: string; value: number };
|
|
40
|
+
* // Create the table.
|
|
41
|
+
* const docs = Table.create<Document>()
|
|
42
|
+
* .withPrimaryKey(index<Document>().key("id"))
|
|
43
|
+
* // Connect the table to our storage.
|
|
44
|
+
* .withStorage(storage);
|
|
45
|
+
* // Wait until the table has finished syncing with the storage.
|
|
46
|
+
* await docs.ready;
|
|
47
|
+
* // Ready for use!
|
|
48
|
+
* docs.add({ id: "Robert", value: 9001 });
|
|
49
|
+
*/
|
|
26
50
|
export class IndexedDBBackend extends StorageBackend {
|
|
51
|
+
/**
|
|
52
|
+
* Connect to an IndexedDB database.
|
|
53
|
+
*/
|
|
27
54
|
static async open(config) {
|
|
28
55
|
const c = { ...backendConfigDefaults, ...config };
|
|
29
56
|
const storage = new IndexedDBBackend(c.name, c.version, c.table);
|
|
@@ -69,24 +96,28 @@ export class IndexedDBBackend extends StorageBackend {
|
|
|
69
96
|
const result = job(tx.objectStore(this.table)).catch(reject);
|
|
70
97
|
});
|
|
71
98
|
}
|
|
99
|
+
/** @internal */
|
|
72
100
|
async get(table, key) {
|
|
73
101
|
const value = await this.transaction("readonly", (store) => {
|
|
74
102
|
return request(store.get([table, key]));
|
|
75
103
|
});
|
|
76
104
|
return unpackRecord(value);
|
|
77
105
|
}
|
|
106
|
+
/** @internal */
|
|
78
107
|
async getAll(table) {
|
|
79
108
|
const values = await this.transaction("readonly", (store) => {
|
|
80
109
|
return request(store.index("table").getAll(table));
|
|
81
110
|
});
|
|
82
111
|
return values.map((unpackRecord));
|
|
83
112
|
}
|
|
113
|
+
/** @internal */
|
|
84
114
|
async update(table, key, value) {
|
|
85
115
|
await this.transaction("readwrite", (store) => {
|
|
86
116
|
return request(store.put({ table, key, value: serialise(value) }));
|
|
87
117
|
});
|
|
88
118
|
this.broadcast?.send({ event: "update", table, key });
|
|
89
119
|
}
|
|
120
|
+
/** @internal */
|
|
90
121
|
async delete(table, key) {
|
|
91
122
|
await this.transaction("readwrite", (store) => {
|
|
92
123
|
return request(store.delete([table, key]));
|
package/dist/backend.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"backend.js","sourceRoot":"","sources":["../src/backend.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,WAAW,EAAE,SAAS,EAAmB,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"backend.js","sourceRoot":"","sources":["../src/backend.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,17 +1,88 @@
|
|
|
1
1
|
import type { OrderFn } from "@bodil/core/order";
|
|
2
|
-
import { ArrayIndex, CompoundIndex, CustomIndex, PrimitiveIndex
|
|
3
|
-
import { Table } from "./table";
|
|
2
|
+
import { ArrayIndex, CompoundIndex, CustomIndex, PrimitiveIndex } from "./indices";
|
|
4
3
|
import type { ArrayIndexablesOf, CustomIndexablesOf, PrimitiveIndexablesOf } from "./types";
|
|
5
4
|
export type { Index, ArrayIndex, CompoundIndex, CustomIndex, PrimitiveIndex, UnitIndex, } from "./indices";
|
|
6
5
|
export type { IndexablePrimitive, ArrayIndexablesOf, CustomIndexablesOf, PrimitiveIndexablesOf, } from "./types";
|
|
7
|
-
export
|
|
6
|
+
export { Table, type TableEvent } from "./table";
|
|
8
7
|
export type { IndexQuery, ArrayQuery, ChainQuery } from "./query";
|
|
9
8
|
export type { Broadcaster } from "./broadcast";
|
|
10
9
|
export type { IndexedDBBackendConfig, DatabaseBroadcast } from "./backend";
|
|
11
10
|
export { StorageBackend, IndexedDBBackend } from "./backend";
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
export
|
|
17
|
-
|
|
11
|
+
/**
|
|
12
|
+
* Constructor functions for creating an {@link index}.
|
|
13
|
+
* @interface
|
|
14
|
+
*/
|
|
15
|
+
export type IndexConstructor<Document extends object> = {
|
|
16
|
+
/**
|
|
17
|
+
* Create an index for a single property on a document.
|
|
18
|
+
*
|
|
19
|
+
* The type of the property needs to match {@link IndexablePrimitive}, ie.
|
|
20
|
+
* it needs to be a string, a number or a bigint. If you need an index for a
|
|
21
|
+
* different value type, use {@link IndexConstructor.custom}.
|
|
22
|
+
*
|
|
23
|
+
* @example
|
|
24
|
+
* type Document = { id: string; value: number };
|
|
25
|
+
* const index = index<Document>().key("id");
|
|
26
|
+
*/
|
|
27
|
+
key: <I extends PrimitiveIndexablesOf<Document>>(key: I) => PrimitiveIndex<Document, I>;
|
|
28
|
+
/**
|
|
29
|
+
* Create a compound index for a pair of properties on a document.
|
|
30
|
+
*
|
|
31
|
+
* The types of the properties need to match {@link IndexablePrimitive}, ie.
|
|
32
|
+
* they need to be strings, numbers or bigints.
|
|
33
|
+
*
|
|
34
|
+
* This index matches documents where both properties match the provided
|
|
35
|
+
* pair of values. Partial matches do not count.
|
|
36
|
+
*
|
|
37
|
+
* Whemn a compound index is used as a primary index, the unique key is the
|
|
38
|
+
* value pair, not either of the individual values, so you can have multiple
|
|
39
|
+
* documents with either one of the properties having identical values, but
|
|
40
|
+
* only one document matching any one given value pair.
|
|
41
|
+
*
|
|
42
|
+
* @example
|
|
43
|
+
* type Document = { id: string; value: number };
|
|
44
|
+
* const compoundIndex = index<Document>().keys("id", "value");
|
|
45
|
+
*/
|
|
46
|
+
keys: <I extends PrimitiveIndexablesOf<Document>, J extends Exclude<PrimitiveIndexablesOf<Document>, I>>(leftKey: I, rightKey: J) => CompoundIndex<Document, I, J>;
|
|
47
|
+
/**
|
|
48
|
+
* Create an array index for a property on a document.
|
|
49
|
+
*
|
|
50
|
+
* This index works on a property with an array of
|
|
51
|
+
* {@link IndexablePrimitive}s. It will match documents where the lookup
|
|
52
|
+
* value is a member of the array.
|
|
53
|
+
*
|
|
54
|
+
* @example
|
|
55
|
+
* type Document = { id: string; flags: Array<string> };
|
|
56
|
+
* const arrayIndex = index<Document>().array("flags");
|
|
57
|
+
*/
|
|
58
|
+
array: <I extends ArrayIndexablesOf<Document>, L extends Document[I] & Array<unknown>>(key: I) => ArrayIndex<Document, I, L>;
|
|
59
|
+
/**
|
|
60
|
+
* Create an index for a {@link Temporal.Instant} property on a document.
|
|
61
|
+
*
|
|
62
|
+
* This works exactly like {@link IndexConstructor.key}, except that it
|
|
63
|
+
* takes a {@link Temporal.Instant} instead of a primitive value.
|
|
64
|
+
*/
|
|
65
|
+
time: <I extends CustomIndexablesOf<Document, Temporal.Instant>>(key: I) => CustomIndex<Document, Temporal.Instant, I>;
|
|
66
|
+
/**
|
|
67
|
+
* Create an index with a custom ordering function for a property on a
|
|
68
|
+
* document.
|
|
69
|
+
*
|
|
70
|
+
* This works like {@link IndexConstructor.key}, except that it takes any
|
|
71
|
+
* value rather than just a primitive, as long as you provide an
|
|
72
|
+
* {@link OrderFn | ordering function} for it.
|
|
73
|
+
*/
|
|
74
|
+
custom: <T, I extends CustomIndexablesOf<Document, T>>(key: I, orderFn: OrderFn<T>) => CustomIndex<Document, T, I>;
|
|
75
|
+
};
|
|
76
|
+
/**
|
|
77
|
+
* Create an index.
|
|
78
|
+
*
|
|
79
|
+
* This function takes a document type as its type argument, and returns an
|
|
80
|
+
* object with a selection of {@link IndexConstructor}s which allow you to
|
|
81
|
+
* create an index for the given document type.
|
|
82
|
+
*
|
|
83
|
+
* @example
|
|
84
|
+
* type Document = { id: string; timestamp: Temporal.Instant };
|
|
85
|
+
* const idIndex = index<Document>().key("id");
|
|
86
|
+
* const timeIndex = index<Document>().time("timestamp");
|
|
87
|
+
*/
|
|
88
|
+
export declare function index<Document extends object>(): IndexConstructor<Document>;
|
package/dist/index.js
CHANGED
|
@@ -1,23 +1,28 @@
|
|
|
1
1
|
import BTree from "sorted-btree";
|
|
2
2
|
import { ArrayIndex, CompoundIndex, CustomIndex, PrimitiveIndex } from "./indices";
|
|
3
|
-
|
|
3
|
+
export { Table } from "./table";
|
|
4
4
|
export { StorageBackend, IndexedDBBackend } from "./backend";
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
5
|
+
const indexConstructor = Symbol("indexConstructor");
|
|
6
|
+
/**
|
|
7
|
+
* Create an index.
|
|
8
|
+
*
|
|
9
|
+
* This function takes a document type as its type argument, and returns an
|
|
10
|
+
* object with a selection of {@link IndexConstructor}s which allow you to
|
|
11
|
+
* create an index for the given document type.
|
|
12
|
+
*
|
|
13
|
+
* @example
|
|
14
|
+
* type Document = { id: string; timestamp: Temporal.Instant };
|
|
15
|
+
* const idIndex = index<Document>().key("id");
|
|
16
|
+
* const timeIndex = index<Document>().time("timestamp");
|
|
17
|
+
*/
|
|
8
18
|
export function index() {
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
export function compoundIndex() {
|
|
18
|
-
return (leftKey, rightKey) => new CompoundIndex(leftKey, rightKey);
|
|
19
|
-
}
|
|
20
|
-
export function customIndex() {
|
|
21
|
-
return (key, orderFn) => new CustomIndex(key, () => new BTree(undefined, orderFn));
|
|
19
|
+
index[indexConstructor] ??= {
|
|
20
|
+
key: (key) => new PrimitiveIndex(key),
|
|
21
|
+
keys: (leftKey, rightKey) => new CompoundIndex(leftKey, rightKey),
|
|
22
|
+
array: (key) => new ArrayIndex(key),
|
|
23
|
+
time: (key) => new CustomIndex(key, () => new BTree(undefined, Temporal.Instant.compare)),
|
|
24
|
+
custom: (key, orderFn) => new CustomIndex(key, () => new BTree(undefined, orderFn)),
|
|
25
|
+
};
|
|
26
|
+
return index[indexConstructor];
|
|
22
27
|
}
|
|
23
28
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,cAAc,CAAC;AAEjC,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,WAAW,EAAE,cAAc,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,cAAc,CAAC;AAEjC,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAiBnF,OAAO,EAAE,KAAK,EAAmB,MAAM,SAAS,CAAC;AAKjD,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAqF7D,MAAM,gBAAgB,GAAG,MAAM,CAAC,kBAAkB,CAAC,CAAC;AAEpD;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,KAAK;IAChB,KAAa,CAAC,gBAAgB,CAAC,KAAK;QACjC,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,cAAc,CAAC,GAAG,CAAC;QACrC,IAAI,EAAE,CAAC,OAAO,EAAE,QAAQ,EAAE,EAAE,CAAC,IAAI,aAAa,CAAC,OAAO,EAAE,QAAQ,CAAC;QACjE,KAAK,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,UAAU,CAAC,GAAG,CAAC;QACnC,IAAI,EAAE,CAAC,GAAG,EAAE,EAAE,CACV,IAAI,WAAW,CACX,GAAG,EACH,GAAG,EAAE,CACD,IAAI,KAAK,CAAC,SAAS,EAAE,QAAQ,CAAC,OAAO,CAAC,OAAwC,CAAC,CACtF;QACL,MAAM,EAAE,CAAC,GAAG,EAAE,OAAO,EAAE,EAAE,CACrB,IAAI,WAAW,CACX,GAAG,EACH,GAAG,EAAE,CAAC,IAAI,KAAK,CAAC,SAAS,EAAE,OAAwC,CAAC,CACvE;KACsB,CAAC;IAChC,OAAQ,KAAa,CAAC,gBAAgB,CAA+B,CAAC;AAC1E,CAAC"}
|
package/dist/index.test.js
CHANGED
|
@@ -4,17 +4,18 @@ import { time } from "@bodil/core";
|
|
|
4
4
|
import { sleep } from "@bodil/core/async";
|
|
5
5
|
import { Signal } from "@bodil/signal";
|
|
6
6
|
import { expect, expectTypeOf, test } from "vitest";
|
|
7
|
-
import {
|
|
7
|
+
import { index, Table } from ".";
|
|
8
8
|
import { IndexedDBBackend } from "./backend";
|
|
9
9
|
test("indexable", () => {
|
|
10
10
|
expectTypeOf().toEqualTypeOf();
|
|
11
11
|
});
|
|
12
12
|
test("memdb basics", () => {
|
|
13
|
-
const table =
|
|
14
|
-
.
|
|
15
|
-
.withIndex(index()("
|
|
16
|
-
.withIndex(
|
|
17
|
-
.withIndex(
|
|
13
|
+
const table = Table.create()
|
|
14
|
+
.withPrimaryIndex(index().key("id"))
|
|
15
|
+
.withIndex(index().time("created"))
|
|
16
|
+
.withIndex(index().key("uri"))
|
|
17
|
+
.withIndex(index().array("tags"))
|
|
18
|
+
.withIndex(index().keys("id", "uri"));
|
|
18
19
|
const now = time.now();
|
|
19
20
|
const [welp, wolp, wulp, wilp] = [
|
|
20
21
|
{
|
|
@@ -80,7 +81,9 @@ test("memdb basics", () => {
|
|
|
80
81
|
expectTypeOf().toEqualTypeOf();
|
|
81
82
|
});
|
|
82
83
|
test("memdb index dupes", () => {
|
|
83
|
-
const accounts =
|
|
84
|
+
const accounts = Table.create()
|
|
85
|
+
.withPrimaryIndex(index().key("id"))
|
|
86
|
+
.withIndex(index().key("order"));
|
|
84
87
|
const account = { id: "test@test.com", order: 1 };
|
|
85
88
|
accounts.add({ ...account });
|
|
86
89
|
expect(accounts.orderBy("order").toArray()).length(1);
|
|
@@ -88,8 +91,8 @@ test("memdb index dupes", () => {
|
|
|
88
91
|
expect(accounts.orderBy("order").toArray()).length(1);
|
|
89
92
|
});
|
|
90
93
|
test("memdb signals", () => {
|
|
91
|
-
const things =
|
|
92
|
-
const thingMaps =
|
|
94
|
+
const things = Table.create().withPrimaryIndex(index().key("name"));
|
|
95
|
+
const thingMaps = Table.create().withPrimaryIndex(index().key("id"));
|
|
93
96
|
thingMaps.add({ id: 1, name: "Mike" }, { id: 2, name: "Robert" });
|
|
94
97
|
const joe = things.signal("Joe");
|
|
95
98
|
expect(joe.value).toBeUndefined();
|
|
@@ -112,7 +115,7 @@ test("memdb signals", () => {
|
|
|
112
115
|
expect(mappedCounter.value).toBeUndefined();
|
|
113
116
|
});
|
|
114
117
|
test("failed update shouldn't change anything", () => {
|
|
115
|
-
const things =
|
|
118
|
+
const things = Table.create().withPrimaryIndex(index().key("name"));
|
|
116
119
|
things.add({ name: "Joe", counter: 321 });
|
|
117
120
|
expect(() => things.update("Joe", (item) => {
|
|
118
121
|
item.counter = 123;
|
|
@@ -125,8 +128,9 @@ test("IndexedDB", async () => {
|
|
|
125
128
|
const before = now.subtract(time.seconds(25));
|
|
126
129
|
{
|
|
127
130
|
const store = await IndexedDBBackend.open({ name: "test", version: 1 });
|
|
128
|
-
const things =
|
|
129
|
-
.
|
|
131
|
+
const things = Table.create()
|
|
132
|
+
.withPrimaryIndex(index().key("key"))
|
|
133
|
+
.withIndex(index().time("time"))
|
|
130
134
|
.withStorage(store, "things");
|
|
131
135
|
await things.ready;
|
|
132
136
|
things.add({ key: "Joe", value: "Armstrong", time: now }, { key: "Robert", value: "Virding", time: before }, { key: "Mike", value: "Williams", time: now });
|
|
@@ -139,8 +143,9 @@ test("IndexedDB", async () => {
|
|
|
139
143
|
}
|
|
140
144
|
{
|
|
141
145
|
const store = await IndexedDBBackend.open({ name: "test", version: 1 });
|
|
142
|
-
const things =
|
|
143
|
-
.
|
|
146
|
+
const things = Table.create()
|
|
147
|
+
.withPrimaryIndex(index().key("key"))
|
|
148
|
+
.withIndex(index().time("time"))
|
|
144
149
|
.withStorage(store, "things");
|
|
145
150
|
await things.ready;
|
|
146
151
|
expect(things.get("Joe")).deep.equal({ key: "Joe", value: "Armstrong", time: now });
|
|
@@ -150,4 +155,47 @@ test("IndexedDB", async () => {
|
|
|
150
155
|
]);
|
|
151
156
|
}
|
|
152
157
|
});
|
|
158
|
+
test("query.below/query.above", () => {
|
|
159
|
+
const table = Table.create()
|
|
160
|
+
.withPrimaryIndex(index().key("id"))
|
|
161
|
+
.withIndex(index().key("value"));
|
|
162
|
+
table.add({ id: "1", value: 1 }, { id: "2", value: 2 }, { id: "3", value: 3 }, { id: "4", value: 4 }, { id: "5", value: 5 });
|
|
163
|
+
expect(table
|
|
164
|
+
.where("value")
|
|
165
|
+
.below(3)
|
|
166
|
+
.toArray()
|
|
167
|
+
.map((i) => i.value)).toEqual([2, 1]);
|
|
168
|
+
expect(table
|
|
169
|
+
.where("value")
|
|
170
|
+
.below(3)
|
|
171
|
+
.inclusive()
|
|
172
|
+
.toArray()
|
|
173
|
+
.map((i) => i.value)).toEqual([3, 2, 1]);
|
|
174
|
+
expect(table
|
|
175
|
+
.where("value")
|
|
176
|
+
.above(3)
|
|
177
|
+
.toArray()
|
|
178
|
+
.map((i) => i.value)).toEqual([4, 5]);
|
|
179
|
+
expect(table
|
|
180
|
+
.where("value")
|
|
181
|
+
.above(3)
|
|
182
|
+
.inclusive()
|
|
183
|
+
.toArray()
|
|
184
|
+
.map((i) => i.value)).toEqual([3, 4, 5]);
|
|
185
|
+
});
|
|
186
|
+
test("query.delete()", () => {
|
|
187
|
+
const table = Table.create().withPrimaryIndex(index().key("id"));
|
|
188
|
+
for (let id = 0; id < 10; id++) {
|
|
189
|
+
table.add({ id });
|
|
190
|
+
}
|
|
191
|
+
const ids = table
|
|
192
|
+
.where("id")
|
|
193
|
+
.signal()
|
|
194
|
+
.map((docs) => docs.map((doc) => doc.id));
|
|
195
|
+
expect(ids.get()).toEqual([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]);
|
|
196
|
+
expect(table.where("id").above(5).delete()).toEqual(4);
|
|
197
|
+
expect(Iterator.from(table)
|
|
198
|
+
.map((doc) => doc.id)
|
|
199
|
+
.toArray()).toEqual([0, 1, 2, 3, 4, 5]);
|
|
200
|
+
});
|
|
153
201
|
//# sourceMappingURL=index.test.js.map
|
package/dist/index.test.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.test.js","sourceRoot":"","sources":["../src/index.test.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.test.js","sourceRoot":"","sources":["../src/index.test.ts"],"names":[],"mappings":"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"}
|
package/dist/indices.d.ts
CHANGED
|
@@ -1,14 +1,17 @@
|
|
|
1
1
|
import type BTree from "sorted-btree";
|
|
2
2
|
import type { ArrayIndexablesOf, CustomIndexablesOf, PrimitiveIndexablesOf } from "./types";
|
|
3
|
+
/** @internal */
|
|
3
4
|
export declare abstract class Index<A extends object> {
|
|
4
5
|
readonly name: string;
|
|
5
6
|
readonly keyType: unknown;
|
|
6
7
|
readonly record: object;
|
|
7
8
|
abstract extractKeys(value: A): Array<typeof this.keyType>;
|
|
8
9
|
}
|
|
10
|
+
/** @internal */
|
|
9
11
|
export declare abstract class UnitIndex<A extends object> extends Index<A> {
|
|
10
12
|
abstract extractKey(value: A): typeof this.keyType;
|
|
11
13
|
}
|
|
14
|
+
/** @internal */
|
|
12
15
|
export declare class CustomIndex<A extends object, T, I extends CustomIndexablesOf<A, T>> implements Index<A>, UnitIndex<A> {
|
|
13
16
|
readonly index: I;
|
|
14
17
|
readonly makeIndex: () => BTree<A[I], Array<A>>;
|
|
@@ -21,6 +24,7 @@ export declare class CustomIndex<A extends object, T, I extends CustomIndexables
|
|
|
21
24
|
extractKey(value: A): A[I];
|
|
22
25
|
extractKeys(value: A): Array<A[I]>;
|
|
23
26
|
}
|
|
27
|
+
/** @internal */
|
|
24
28
|
export declare class PrimitiveIndex<A extends object, I extends PrimitiveIndexablesOf<A>> implements Index<A>, UnitIndex<A> {
|
|
25
29
|
readonly index: I;
|
|
26
30
|
readonly keyType: A[I];
|
|
@@ -32,6 +36,7 @@ export declare class PrimitiveIndex<A extends object, I extends PrimitiveIndexab
|
|
|
32
36
|
extractKey(value: A): A[I];
|
|
33
37
|
extractKeys(value: A): Array<A[I]>;
|
|
34
38
|
}
|
|
39
|
+
/** @internal */
|
|
35
40
|
export declare class ArrayIndex<A extends object, I extends ArrayIndexablesOf<A>, L extends A[I] & Array<unknown>> implements Index<A> {
|
|
36
41
|
readonly index: I;
|
|
37
42
|
readonly name: `*${I}`;
|
|
@@ -42,6 +47,7 @@ export declare class ArrayIndex<A extends object, I extends ArrayIndexablesOf<A>
|
|
|
42
47
|
constructor(index: I);
|
|
43
48
|
extractKeys(value: A): L;
|
|
44
49
|
}
|
|
50
|
+
/** @internal */
|
|
45
51
|
export declare class CompoundIndex<A extends object, I extends PrimitiveIndexablesOf<A>, J extends Exclude<PrimitiveIndexablesOf<A>, I>> implements Index<A>, UnitIndex<A> {
|
|
46
52
|
readonly leftIndex: I;
|
|
47
53
|
readonly rightIndex: J;
|
package/dist/indices.js
CHANGED
|
@@ -1,7 +1,10 @@
|
|
|
1
|
+
/** @internal */
|
|
1
2
|
export class Index {
|
|
2
3
|
}
|
|
4
|
+
/** @internal */
|
|
3
5
|
export class UnitIndex extends Index {
|
|
4
6
|
}
|
|
7
|
+
/** @internal */
|
|
5
8
|
export class CustomIndex {
|
|
6
9
|
constructor(index, makeIndex) {
|
|
7
10
|
this.index = index;
|
|
@@ -17,6 +20,7 @@ export class CustomIndex {
|
|
|
17
20
|
return [value[this.index]];
|
|
18
21
|
}
|
|
19
22
|
}
|
|
23
|
+
/** @internal */
|
|
20
24
|
export class PrimitiveIndex {
|
|
21
25
|
constructor(index) {
|
|
22
26
|
this.index = index;
|
|
@@ -31,6 +35,7 @@ export class PrimitiveIndex {
|
|
|
31
35
|
return [value[this.index]];
|
|
32
36
|
}
|
|
33
37
|
}
|
|
38
|
+
/** @internal */
|
|
34
39
|
export class ArrayIndex {
|
|
35
40
|
constructor(index) {
|
|
36
41
|
this.index = index;
|
|
@@ -40,6 +45,7 @@ export class ArrayIndex {
|
|
|
40
45
|
return value[this.index];
|
|
41
46
|
}
|
|
42
47
|
}
|
|
48
|
+
/** @internal */
|
|
43
49
|
export class CompoundIndex {
|
|
44
50
|
constructor(leftIndex, rightIndex) {
|
|
45
51
|
this.leftIndex = leftIndex;
|
package/dist/indices.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"indices.js","sourceRoot":"","sources":["../src/indices.ts"],"names":[],"mappings":"AAIA,MAAM,OAAgB,KAAK;CAK1B;AAED,MAAM,OAAgB,SAA4B,SAAQ,KAAQ;CAEjE;AAED,MAAM,OAAO,WAAW;IAMpB,YACoB,KAAQ,EACR,SAAsC;QADtC,UAAK,GAAL,KAAK,CAAG;QACR,cAAS,GAAT,SAAS,CAA6B;IACvD,CAAC;IAEJ,IAAI,IAAI;QACJ,OAAO,IAAI,CAAC,KAAK,CAAC;IACtB,CAAC;IAED,UAAU,CAAC,KAAQ;QACf,OAAO,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC7B,CAAC;IAED,WAAW,CAAC,KAAQ;QAChB,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;IAC/B,CAAC;CACJ;AAED,MAAM,OAAO,cAAc;IAMvB,YAA4B,KAAQ;QAAR,UAAK,GAAL,KAAK,CAAG;IAAG,CAAC;IAExC,IAAI,IAAI;QACJ,OAAO,IAAI,CAAC,KAAK,CAAC;IACtB,CAAC;IAED,UAAU,CAAC,KAAQ;QACf,OAAO,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC7B,CAAC;IAED,WAAW,CAAC,KAAQ;QAChB,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;IAC/B,CAAC;CACJ;AAED,MAAM,OAAO,UAAU;
|
|
1
|
+
{"version":3,"file":"indices.js","sourceRoot":"","sources":["../src/indices.ts"],"names":[],"mappings":"AAIA,gBAAgB;AAChB,MAAM,OAAgB,KAAK;CAK1B;AAED,gBAAgB;AAChB,MAAM,OAAgB,SAA4B,SAAQ,KAAQ;CAEjE;AAED,gBAAgB;AAChB,MAAM,OAAO,WAAW;IAMpB,YACoB,KAAQ,EACR,SAAsC;QADtC,UAAK,GAAL,KAAK,CAAG;QACR,cAAS,GAAT,SAAS,CAA6B;IACvD,CAAC;IAEJ,IAAI,IAAI;QACJ,OAAO,IAAI,CAAC,KAAK,CAAC;IACtB,CAAC;IAED,UAAU,CAAC,KAAQ;QACf,OAAO,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC7B,CAAC;IAED,WAAW,CAAC,KAAQ;QAChB,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;IAC/B,CAAC;CACJ;AAED,gBAAgB;AAChB,MAAM,OAAO,cAAc;IAMvB,YAA4B,KAAQ;QAAR,UAAK,GAAL,KAAK,CAAG;IAAG,CAAC;IAExC,IAAI,IAAI;QACJ,OAAO,IAAI,CAAC,KAAK,CAAC;IACtB,CAAC;IAED,UAAU,CAAC,KAAQ;QACf,OAAO,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC7B,CAAC;IAED,WAAW,CAAC,KAAQ;QAChB,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;IAC/B,CAAC;CACJ;AAED,gBAAgB;AAChB,MAAM,OAAO,UAAU;IAUnB,YAAY,KAAQ;QAChB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,IAAI,GAAG,IAAI,KAAK,EAAE,CAAC;IAC5B,CAAC;IAED,WAAW,CAAC,KAAQ;QAChB,OAAO,KAAK,CAAC,IAAI,CAAC,KAAK,CAAM,CAAC;IAClC,CAAC;CACJ;AAED,gBAAgB;AAChB,MAAM,OAAO,aAAa;IAatB,YAAY,SAAY,EAAE,UAAa;QACnC,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,IAAI,CAAC,IAAI,GAAG,GAAG,SAAS,IAAI,UAAU,EAAE,CAAC;IAC7C,CAAC;IAED,UAAU,CAAC,KAAQ;QACf,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;IAC3D,CAAC;IAED,WAAW,CAAC,KAAQ;QAChB,OAAO,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;IAC7D,CAAC;CACJ"}
|