@moltendb-web/query 0.1.0 → 0.3.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 +45 -22
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.esm.js +23 -7
- package/dist/index.js +10 -3
- package/dist/index.js.map +1 -1
- package/package.json +5 -1
- package/src/index.ts +11 -1
package/README.md
CHANGED
|
@@ -4,6 +4,10 @@ Type-safe, chainable query builder for [MoltenDB](https://github.com/maximilian2
|
|
|
4
4
|
|
|
5
5
|
Works in vanilla JavaScript and TypeScript. Compiles as an npm module (CJS + ESM + `.d.ts`).
|
|
6
6
|
|
|
7
|
+
### 🌋 Explore the Full Functionality
|
|
8
|
+
|
|
9
|
+
The best way to experience the MoltenDB query builder is through our **[Interactive Demo on StackBlitz](https://stackblitz.com/~/github.com/maximilian27/moltendb-wasm-demo?file=package.json)**. It contains a complete, live environment where you can test query builder expressions, perform mutations, and see real-time events without any local setup.
|
|
10
|
+
|
|
7
11
|
---
|
|
8
12
|
|
|
9
13
|
## Installation
|
|
@@ -17,14 +21,26 @@ npm install @moltendb-web/query
|
|
|
17
21
|
## Quick start
|
|
18
22
|
|
|
19
23
|
```ts
|
|
24
|
+
import { MoltenDB } from '@moltendb-web/core';
|
|
20
25
|
import { MoltenDBClient, WorkerTransport } from '@moltendb-web/query';
|
|
21
26
|
|
|
22
|
-
//
|
|
23
|
-
const
|
|
24
|
-
const db = new
|
|
27
|
+
// 1. Initialize the Core Engine (boots WASM worker)
|
|
28
|
+
const workerUrl = new URL('@moltendb-web/core/worker', import.meta.url).href;
|
|
29
|
+
const db = new MoltenDB('moltendb_demo', { syncEnabled: false, workerUrl });
|
|
30
|
+
await db.init();
|
|
31
|
+
|
|
32
|
+
// 2. Connect the Query Builder to the worker
|
|
33
|
+
const client = new MoltenDBClient(new WorkerTransport(db.worker, 10000));
|
|
34
|
+
// SET — insert / upsert
|
|
35
|
+
await client.collection('laptops')
|
|
36
|
+
.set({
|
|
37
|
+
lp1: { brand: 'Lenovo', model: 'ThinkPad X1', price: 1499, in_stock: true },
|
|
38
|
+
lp2: { brand: 'Apple', model: 'MacBook Pro', price: 3499, in_stock: true },
|
|
39
|
+
})
|
|
40
|
+
.exec();
|
|
25
41
|
|
|
26
42
|
// GET — query with WHERE, field projection, sort and pagination
|
|
27
|
-
const results = await
|
|
43
|
+
const results = await client.collection('laptops')
|
|
28
44
|
.get()
|
|
29
45
|
.where({ brand: 'Apple' })
|
|
30
46
|
.fields(['brand', 'model', 'price'])
|
|
@@ -32,27 +48,19 @@ const results = await db.collection('laptops')
|
|
|
32
48
|
.count(5)
|
|
33
49
|
.exec();
|
|
34
50
|
|
|
35
|
-
// SET — insert / upsert
|
|
36
|
-
await db.collection('laptops')
|
|
37
|
-
.set({
|
|
38
|
-
lp1: { brand: 'Lenovo', model: 'ThinkPad X1', price: 1499, in_stock: true },
|
|
39
|
-
lp2: { brand: 'Apple', model: 'MacBook Pro', price: 3499, in_stock: true },
|
|
40
|
-
})
|
|
41
|
-
.exec();
|
|
42
|
-
|
|
43
51
|
// UPDATE — partial patch (only listed fields are changed)
|
|
44
|
-
await
|
|
45
|
-
.update({
|
|
52
|
+
await client.collection('laptops')
|
|
53
|
+
.update({ lp1: { price: 1749, in_stock: false } })
|
|
46
54
|
.exec();
|
|
47
55
|
|
|
48
56
|
// DELETE — single key
|
|
49
|
-
await
|
|
57
|
+
await client.collection('laptops').delete().keys('lp1').exec();
|
|
50
58
|
|
|
51
59
|
// DELETE — batch
|
|
52
|
-
await
|
|
60
|
+
await client.collection('laptops').delete().keys(['lp1', 'lp2']).exec();
|
|
53
61
|
|
|
54
62
|
// DELETE — drop entire collection
|
|
55
|
-
await
|
|
63
|
+
await client.collection('laptops').delete().drop().exec();
|
|
56
64
|
```
|
|
57
65
|
|
|
58
66
|
---
|
|
@@ -67,7 +75,7 @@ combinations are caught at compile time by TypeScript.
|
|
|
67
75
|
| Method | Description |
|
|
68
76
|
|---|---|
|
|
69
77
|
| `.keys(key \| key[])` | Fetch one or more documents by key |
|
|
70
|
-
| `.where(clause)` | Filter with operators: `$eq $ne $gt $gte $lt $lte $in $nin $contains` |
|
|
78
|
+
| `.where(clause)` | Filter with operators: `$eq $ne $gt $gte $lt $lte $in $nin $contains` (and aliases) |
|
|
71
79
|
| `.fields(string[])` | Return only these fields (dot-notation supported) |
|
|
72
80
|
| `.excludedFields(string[])` | Return everything except these fields |
|
|
73
81
|
| `.joins(JoinSpec[])` | Embed related documents from other collections |
|
|
@@ -110,22 +118,29 @@ Only the fields present in each patch object are updated — all other fields ar
|
|
|
110
118
|
## WHERE operators
|
|
111
119
|
|
|
112
120
|
```ts
|
|
113
|
-
// Exact equality (implicit)
|
|
121
|
+
// Exact equality (implicit or explicit)
|
|
114
122
|
.where({ brand: 'Apple' })
|
|
123
|
+
.where({ brand: { $eq: 'Apple' } })
|
|
124
|
+
.where({ brand: { $equals: 'Apple' } }) // alias
|
|
115
125
|
|
|
116
126
|
// Comparison
|
|
117
127
|
.where({ price: { $gt: 1000, $lt: 3000 } })
|
|
128
|
+
.where({ price: { $greaterThan: 1000, $lessThan: 3000 } }) // aliases
|
|
118
129
|
.where({ 'specs.cpu.cores': { $gte: 12 } })
|
|
119
130
|
|
|
120
131
|
// Not equal
|
|
121
132
|
.where({ 'specs.cpu.brand': { $ne: 'Intel' } })
|
|
133
|
+
.where({ 'specs.cpu.brand': { $notEquals: 'Intel' } }) // alias
|
|
122
134
|
|
|
123
135
|
// In / not-in list
|
|
124
136
|
.where({ brand: { $in: ['Apple', 'Dell'] } })
|
|
137
|
+
.where({ brand: { $oneOf: ['Apple', 'Dell'] } }) // alias
|
|
125
138
|
.where({ brand: { $nin: ['Framework'] } })
|
|
139
|
+
.where({ brand: { $notIn: ['Framework'] } }) // alias
|
|
126
140
|
|
|
127
141
|
// Contains (string substring or array element)
|
|
128
142
|
.where({ model: { $contains: 'Pro' } })
|
|
143
|
+
.where({ model: { $ct: 'Pro' } }) // alias
|
|
129
144
|
.where({ tags: { $contains: 'gaming' } })
|
|
130
145
|
|
|
131
146
|
// Multiple conditions (implicit AND)
|
|
@@ -137,7 +152,7 @@ Only the fields present in each patch object are updated — all other fields ar
|
|
|
137
152
|
## Joins
|
|
138
153
|
|
|
139
154
|
```ts
|
|
140
|
-
const results = await
|
|
155
|
+
const results = await client.collection('laptops')
|
|
141
156
|
.get()
|
|
142
157
|
.fields(['brand', 'model', 'price'])
|
|
143
158
|
.joins([
|
|
@@ -153,7 +168,7 @@ const results = await db.collection('laptops')
|
|
|
153
168
|
## Extends (snapshot embedding at insert time)
|
|
154
169
|
|
|
155
170
|
```ts
|
|
156
|
-
await
|
|
171
|
+
await client.collection('laptops')
|
|
157
172
|
.set({
|
|
158
173
|
lp7: {
|
|
159
174
|
brand: 'MSI', model: 'Titan GT77', price: 3299,
|
|
@@ -165,6 +180,15 @@ await db.collection('laptops')
|
|
|
165
180
|
// lp7 is stored with the full mem4 and dsp3 documents embedded inline.
|
|
166
181
|
```
|
|
167
182
|
|
|
183
|
+
**When to use `extends` vs `joins`:**
|
|
184
|
+
|
|
185
|
+
| | `extends` | `joins` |
|
|
186
|
+
|---|---|---|
|
|
187
|
+
| Resolved at | Insert time (once) | Query time (every request) |
|
|
188
|
+
| Data freshness | Snapshot — may become stale | Always live |
|
|
189
|
+
| Read cost | O(1) — data already embedded | O(1) per join per document |
|
|
190
|
+
| Use when | Data rarely changes, fast reads matter | Data changes frequently, freshness matters |
|
|
191
|
+
|
|
168
192
|
---
|
|
169
193
|
|
|
170
194
|
## Custom transport
|
|
@@ -198,7 +222,6 @@ const db = new MoltenDBClient(new FetchTransport('https://localhost:1538', myTok
|
|
|
198
222
|
## Build
|
|
199
223
|
|
|
200
224
|
```bash
|
|
201
|
-
npm run build # emit dist/index.js (CJS), dist/index.esm.js (ESM), dist/index.d.ts
|
|
202
225
|
npm run typecheck # type-check without emitting
|
|
203
226
|
```
|
|
204
227
|
|
package/dist/index.d.ts
CHANGED
|
@@ -75,6 +75,7 @@ export declare class WorkerTransport implements MoltenTransport {
|
|
|
75
75
|
private worker;
|
|
76
76
|
private messageId;
|
|
77
77
|
private pending;
|
|
78
|
+
onEvent?: (event: any) => void;
|
|
78
79
|
constructor(worker: Worker, startId?: number);
|
|
79
80
|
send(action: 'get' | 'set' | 'update' | 'delete', payload: Document): Promise<JsonValue>;
|
|
80
81
|
}
|
|
@@ -346,7 +347,7 @@ export declare class CollectionHandle {
|
|
|
346
347
|
* .count(5)
|
|
347
348
|
* .exec();
|
|
348
349
|
*/
|
|
349
|
-
export declare class
|
|
350
|
+
export declare class MoltenDBClient {
|
|
350
351
|
private transport;
|
|
351
352
|
constructor(transport: MoltenTransport);
|
|
352
353
|
/**
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AA4CA,uCAAuC;AACvC,MAAM,MAAM,SAAS,GACjB,MAAM,GACN,MAAM,GACN,OAAO,GACP,IAAI,GACJ,SAAS,EAAE,GACX;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,CAAA;CAAE,CAAC;AAEjC,mEAAmE;AACnE,MAAM,MAAM,QAAQ,GAAG;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,CAAA;CAAE,CAAC;AAEpD,yEAAyE;AACzE,MAAM,MAAM,OAAO,GAAG;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,QAAQ,CAAA;CAAE,CAAC;AAIlD,wDAAwD;AACxD,MAAM,WAAW,cAAc;IAC7B,GAAG,CAAC,EAAE,SAAS,CAAC;IAChB,GAAG,CAAC,EAAE,SAAS,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,SAAS,EAAE,CAAC;IAClB,IAAI,CAAC,EAAE,SAAS,EAAE,CAAC;IACnB,SAAS,CAAC,EAAE,SAAS,CAAC;CACvB;AAED;;;GAGG;AACH,MAAM,MAAM,WAAW,GAAG;IACxB,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,cAAc,CAAC;CAC7C,CAAC;AAIF,mCAAmC;AACnC,MAAM,WAAW,QAAQ;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC;CACxB;AAID,mCAAmC;AACnC,MAAM,WAAW,QAAQ;IACvB,6DAA6D;IAC7D,KAAK,EAAE,MAAM,CAAC;IACd,mCAAmC;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,uDAAuD;IACvD,EAAE,EAAE,MAAM,CAAC;IACX,wDAAwD;IACxD,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;CACnB;AAID;;;;GAIG;AACH,MAAM,MAAM,UAAU,GAAG;IAAE,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAAA;CAAE,CAAC;AAIrD;;;;;;;GAOG;AACH,MAAM,WAAW,eAAe;IAC9B,IAAI,CAAC,MAAM,EAAE,KAAK,GAAG,KAAK,GAAG,QAAQ,GAAG,QAAQ,EAAE,OAAO,EAAE,QAAQ,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;CAC1F;AAID;;;;;;GAMG;AACH,qBAAa,eAAgB,YAAW,eAAe;IACrD,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,OAAO,CAAsF;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AA4CA,uCAAuC;AACvC,MAAM,MAAM,SAAS,GACjB,MAAM,GACN,MAAM,GACN,OAAO,GACP,IAAI,GACJ,SAAS,EAAE,GACX;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,CAAA;CAAE,CAAC;AAEjC,mEAAmE;AACnE,MAAM,MAAM,QAAQ,GAAG;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,CAAA;CAAE,CAAC;AAEpD,yEAAyE;AACzE,MAAM,MAAM,OAAO,GAAG;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,QAAQ,CAAA;CAAE,CAAC;AAIlD,wDAAwD;AACxD,MAAM,WAAW,cAAc;IAC7B,GAAG,CAAC,EAAE,SAAS,CAAC;IAChB,GAAG,CAAC,EAAE,SAAS,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,SAAS,EAAE,CAAC;IAClB,IAAI,CAAC,EAAE,SAAS,EAAE,CAAC;IACnB,SAAS,CAAC,EAAE,SAAS,CAAC;CACvB;AAED;;;GAGG;AACH,MAAM,MAAM,WAAW,GAAG;IACxB,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,cAAc,CAAC;CAC7C,CAAC;AAIF,mCAAmC;AACnC,MAAM,WAAW,QAAQ;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC;CACxB;AAID,mCAAmC;AACnC,MAAM,WAAW,QAAQ;IACvB,6DAA6D;IAC7D,KAAK,EAAE,MAAM,CAAC;IACd,mCAAmC;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,uDAAuD;IACvD,EAAE,EAAE,MAAM,CAAC;IACX,wDAAwD;IACxD,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;CACnB;AAID;;;;GAIG;AACH,MAAM,MAAM,UAAU,GAAG;IAAE,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAAA;CAAE,CAAC;AAIrD;;;;;;;GAOG;AACH,MAAM,WAAW,eAAe;IAC9B,IAAI,CAAC,MAAM,EAAE,KAAK,GAAG,KAAK,GAAG,QAAQ,GAAG,QAAQ,EAAE,OAAO,EAAE,QAAQ,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;CAC1F;AAID;;;;;;GAMG;AACH,qBAAa,eAAgB,YAAW,eAAe;IACrD,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,OAAO,CAAsF;IAC9F,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,KAAK,IAAI,CAAC;gBAE1B,MAAM,EAAE,MAAM,EAAE,OAAO,SAAI;IAqBvC,IAAI,CAAC,MAAM,EAAE,KAAK,GAAG,KAAK,GAAG,QAAQ,GAAG,QAAQ,EAAE,OAAO,EAAE,QAAQ,GAAG,OAAO,CAAC,SAAS,CAAC;CAOzF;AAID;;;;;;;;;;;;;;GAcG;AACH,qBAAa,QAAQ;IACnB,OAAO,CAAC,OAAO,CAAW;IAC1B,OAAO,CAAC,SAAS,CAAkB;IAEnC,gBAAgB;gBACJ,SAAS,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM;IAK1D;;;;;;;;;;OAUG;IACH,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,IAAI;IAKnC;;;;;;;;;;;OAWG;IACH,KAAK,CAAC,MAAM,EAAE,WAAW,GAAG,IAAI;IAKhC;;;;;;OAMG;IACH,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI;IAK9B;;;;;;OAMG;IACH,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI;IAKtC;;;;;;;;;OASG;IACH,KAAK,CAAC,KAAK,EAAE,QAAQ,EAAE,GAAG,IAAI;IAO9B;;;;;;;OAOG;IACH,IAAI,CAAC,KAAK,EAAE,QAAQ,EAAE,GAAG,IAAI;IAK7B;;;;;OAKG;IACH,KAAK,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI;IAKtB;;;;;OAKG;IACH,MAAM,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI;IAKvB;;;OAGG;IACH,KAAK,IAAI,QAAQ;IAIjB;;;OAGG;IACH,IAAI,IAAI,OAAO,CAAC,SAAS,CAAC;CAG3B;AAID;;;;;;;;;;;;GAYG;AACH,qBAAa,QAAQ;IACnB,OAAO,CAAC,OAAO,CAAW;IAC1B,OAAO,CAAC,SAAS,CAAkB;IAEnC,gBAAgB;gBACJ,SAAS,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,QAAQ,EAAE;IAKtF;;;;;;;;OAQG;IACH,OAAO,CAAC,GAAG,EAAE,UAAU,GAAG,IAAI;IAqB9B,gEAAgE;IAChE,KAAK,IAAI,QAAQ;IAIjB,gEAAgE;IAChE,IAAI,IAAI,OAAO,CAAC,SAAS,CAAC;CAG3B;AAID;;;;;;;;;;;;GAYG;AACH,qBAAa,WAAW;IACtB,OAAO,CAAC,OAAO,CAAW;IAC1B,OAAO,CAAC,SAAS,CAAkB;IAEnC,gBAAgB;gBACJ,SAAS,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO;IAKzE,gEAAgE;IAChE,KAAK,IAAI,QAAQ;IAIjB,wDAAwD;IACxD,IAAI,IAAI,OAAO,CAAC,SAAS,CAAC;CAG3B;AAID;;;;;;;;;;;;;;GAcG;AACH,qBAAa,WAAW;IACtB,OAAO,CAAC,OAAO,CAAW;IAC1B,OAAO,CAAC,SAAS,CAAkB;IAEnC,gBAAgB;gBACJ,SAAS,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM;IAK1D;;;;;;OAMG;IACH,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,IAAI;IAKnC;;;;;;OAMG;IACH,IAAI,IAAI,IAAI;IAKZ,gEAAgE;IAChE,KAAK,IAAI,QAAQ;IAIjB,yDAAyD;IACzD,IAAI,IAAI,OAAO,CAAC,SAAS,CAAC;CAG3B;AAID;;;;GAIG;AACH,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,SAAS,CAAkB;IACnC,OAAO,CAAC,cAAc,CAAS;IAE/B,gBAAgB;gBACJ,SAAS,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM;IAK9D;;;;;OAKG;IACH,GAAG,IAAI,QAAQ;IAIf;;;;;;;;OAQG;IACH,GAAG,CAAC,IAAI,EAAE,OAAO,GAAG,QAAQ,EAAE,GAAG,QAAQ;IAIzC;;;;;;;OAOG;IACH,MAAM,CAAC,IAAI,EAAE,OAAO,GAAG,WAAW;IAIlC;;;;;;OAMG;IACH,MAAM,IAAI,WAAW;CAGtB;AAID;;;;;;;;;;;;;;;;;;;GAmBG;AACH,qBAAa,cAAc;IACzB,OAAO,CAAC,SAAS,CAAkB;gBAEvB,SAAS,EAAE,eAAe;IAItC;;;;;OAKG;IACH,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,gBAAgB;CAG3C"}
|
package/dist/index.esm.js
CHANGED
|
@@ -39,6 +39,7 @@
|
|
|
39
39
|
// await db.collection('laptops').delete().keys(['lp4', 'lp5']).exec();
|
|
40
40
|
// await db.collection('laptops').delete().drop().exec();
|
|
41
41
|
// ─────────────────────────────────────────────────────────────────────────────
|
|
42
|
+
|
|
42
43
|
// ─── WorkerTransport ──────────────────────────────────────────────────────────
|
|
43
44
|
/**
|
|
44
45
|
* Default transport that communicates with a MoltenDB Web Worker.
|
|
@@ -47,12 +48,19 @@
|
|
|
47
48
|
* postMessage({ id, action, ...payload })
|
|
48
49
|
* onmessage → { id, result } | { id, error }
|
|
49
50
|
*/
|
|
50
|
-
|
|
51
|
+
class WorkerTransport {
|
|
51
52
|
constructor(worker, startId = 0) {
|
|
52
53
|
this.pending = new Map();
|
|
53
54
|
this.messageId = startId;
|
|
54
55
|
this.worker = worker;
|
|
55
56
|
this.worker.addEventListener('message', (event) => {
|
|
57
|
+
// 1. Intercept unsolicited broadcast events from the Rust core
|
|
58
|
+
if (event.data && event.data.type === 'event') {
|
|
59
|
+
if (this.onEvent)
|
|
60
|
+
this.onEvent(event.data);
|
|
61
|
+
return; // Don't try to process this as a promise resolution
|
|
62
|
+
}
|
|
63
|
+
// 2. Standard request/response routing
|
|
56
64
|
const { id, result, error } = event.data;
|
|
57
65
|
const p = this.pending.get(id);
|
|
58
66
|
if (!p)
|
|
@@ -72,6 +80,7 @@ export class WorkerTransport {
|
|
|
72
80
|
});
|
|
73
81
|
}
|
|
74
82
|
}
|
|
83
|
+
export { WorkerTransport as WorkerTransport };
|
|
75
84
|
// ─── GetQuery ─────────────────────────────────────────────────────────────────
|
|
76
85
|
/**
|
|
77
86
|
* Builder for GET (read/query) operations.
|
|
@@ -88,7 +97,7 @@ export class WorkerTransport {
|
|
|
88
97
|
* .count(5)
|
|
89
98
|
* .exec();
|
|
90
99
|
*/
|
|
91
|
-
|
|
100
|
+
class GetQuery {
|
|
92
101
|
/** @internal */
|
|
93
102
|
constructor(transport, collection) {
|
|
94
103
|
this.transport = transport;
|
|
@@ -210,6 +219,7 @@ export class GetQuery {
|
|
|
210
219
|
return this.transport.send('get', this.payload);
|
|
211
220
|
}
|
|
212
221
|
}
|
|
222
|
+
export { GetQuery as GetQuery };
|
|
213
223
|
// ─── SetQuery ─────────────────────────────────────────────────────────────────
|
|
214
224
|
/**
|
|
215
225
|
* Builder for SET (insert / upsert) operations.
|
|
@@ -224,7 +234,7 @@ export class GetQuery {
|
|
|
224
234
|
* })
|
|
225
235
|
* .exec();
|
|
226
236
|
*/
|
|
227
|
-
|
|
237
|
+
class SetQuery {
|
|
228
238
|
/** @internal */
|
|
229
239
|
constructor(transport, collection, data) {
|
|
230
240
|
this.transport = transport;
|
|
@@ -269,6 +279,7 @@ export class SetQuery {
|
|
|
269
279
|
return this.transport.send('set', this.payload);
|
|
270
280
|
}
|
|
271
281
|
}
|
|
282
|
+
export { SetQuery as SetQuery };
|
|
272
283
|
// ─── UpdateQuery ──────────────────────────────────────────────────────────────
|
|
273
284
|
/**
|
|
274
285
|
* Builder for UPDATE (partial patch / merge) operations.
|
|
@@ -283,7 +294,7 @@ export class SetQuery {
|
|
|
283
294
|
* .update({ lp4: { price: 1749, in_stock: true } })
|
|
284
295
|
* .exec();
|
|
285
296
|
*/
|
|
286
|
-
|
|
297
|
+
class UpdateQuery {
|
|
287
298
|
/** @internal */
|
|
288
299
|
constructor(transport, collection, data) {
|
|
289
300
|
this.transport = transport;
|
|
@@ -298,6 +309,7 @@ export class UpdateQuery {
|
|
|
298
309
|
return this.transport.send('update', this.payload);
|
|
299
310
|
}
|
|
300
311
|
}
|
|
312
|
+
export { UpdateQuery as UpdateQuery };
|
|
301
313
|
// ─── DeleteQuery ──────────────────────────────────────────────────────────────
|
|
302
314
|
/**
|
|
303
315
|
* Builder for DELETE operations.
|
|
@@ -314,7 +326,7 @@ export class UpdateQuery {
|
|
|
314
326
|
* // Drop the entire collection
|
|
315
327
|
* await db.collection('laptops').delete().drop().exec();
|
|
316
328
|
*/
|
|
317
|
-
|
|
329
|
+
class DeleteQuery {
|
|
318
330
|
/** @internal */
|
|
319
331
|
constructor(transport, collection) {
|
|
320
332
|
this.transport = transport;
|
|
@@ -351,13 +363,14 @@ export class DeleteQuery {
|
|
|
351
363
|
return this.transport.send('delete', this.payload);
|
|
352
364
|
}
|
|
353
365
|
}
|
|
366
|
+
export { DeleteQuery as DeleteQuery };
|
|
354
367
|
// ─── CollectionHandle ─────────────────────────────────────────────────────────
|
|
355
368
|
/**
|
|
356
369
|
* A handle to a specific collection.
|
|
357
370
|
* Returned by `MoltenDBClient.collection(name)`.
|
|
358
371
|
* Use it to start any of the four operation builders.
|
|
359
372
|
*/
|
|
360
|
-
|
|
373
|
+
class CollectionHandle {
|
|
361
374
|
/** @internal */
|
|
362
375
|
constructor(transport, collectionName) {
|
|
363
376
|
this.transport = transport;
|
|
@@ -406,6 +419,7 @@ export class CollectionHandle {
|
|
|
406
419
|
return new DeleteQuery(this.transport, this.collectionName);
|
|
407
420
|
}
|
|
408
421
|
}
|
|
422
|
+
export { CollectionHandle as CollectionHandle };
|
|
409
423
|
// ─── MoltenDBClient ───────────────────────────────────────────────────────────
|
|
410
424
|
/**
|
|
411
425
|
* The main entry point for the MoltenDB query builder.
|
|
@@ -427,7 +441,7 @@ export class CollectionHandle {
|
|
|
427
441
|
* .count(5)
|
|
428
442
|
* .exec();
|
|
429
443
|
*/
|
|
430
|
-
|
|
444
|
+
class MoltenDBClient {
|
|
431
445
|
constructor(transport) {
|
|
432
446
|
this.transport = transport;
|
|
433
447
|
}
|
|
@@ -441,3 +455,5 @@ export class MoltenDBClient {
|
|
|
441
455
|
return new CollectionHandle(this.transport, name);
|
|
442
456
|
}
|
|
443
457
|
}
|
|
458
|
+
export { MoltenDBClient as MoltenDBClient };
|
|
459
|
+
//# sourceMappingURL=index.js.map
|
package/dist/index.js
CHANGED
|
@@ -41,7 +41,7 @@
|
|
|
41
41
|
// await db.collection('laptops').delete().drop().exec();
|
|
42
42
|
// ─────────────────────────────────────────────────────────────────────────────
|
|
43
43
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
44
|
-
exports.
|
|
44
|
+
exports.MoltenDBClient = exports.CollectionHandle = exports.DeleteQuery = exports.UpdateQuery = exports.SetQuery = exports.GetQuery = exports.WorkerTransport = void 0;
|
|
45
45
|
// ─── WorkerTransport ──────────────────────────────────────────────────────────
|
|
46
46
|
/**
|
|
47
47
|
* Default transport that communicates with a MoltenDB Web Worker.
|
|
@@ -56,6 +56,13 @@ class WorkerTransport {
|
|
|
56
56
|
this.messageId = startId;
|
|
57
57
|
this.worker = worker;
|
|
58
58
|
this.worker.addEventListener('message', (event) => {
|
|
59
|
+
// 1. Intercept unsolicited broadcast events from the Rust core
|
|
60
|
+
if (event.data && event.data.type === 'event') {
|
|
61
|
+
if (this.onEvent)
|
|
62
|
+
this.onEvent(event.data);
|
|
63
|
+
return; // Don't try to process this as a promise resolution
|
|
64
|
+
}
|
|
65
|
+
// 2. Standard request/response routing
|
|
59
66
|
const { id, result, error } = event.data;
|
|
60
67
|
const p = this.pending.get(id);
|
|
61
68
|
if (!p)
|
|
@@ -436,7 +443,7 @@ exports.CollectionHandle = CollectionHandle;
|
|
|
436
443
|
* .count(5)
|
|
437
444
|
* .exec();
|
|
438
445
|
*/
|
|
439
|
-
class
|
|
446
|
+
class MoltenDBClient {
|
|
440
447
|
constructor(transport) {
|
|
441
448
|
this.transport = transport;
|
|
442
449
|
}
|
|
@@ -450,5 +457,5 @@ class MoltenDBQueryBuilder {
|
|
|
450
457
|
return new CollectionHandle(this.transport, name);
|
|
451
458
|
}
|
|
452
459
|
}
|
|
453
|
-
exports.
|
|
460
|
+
exports.MoltenDBClient = MoltenDBClient;
|
|
454
461
|
//# 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":";AAAA,iFAAiF;AACjF,mDAAmD;AACnD,EAAE;AACF,yEAAyE;AACzE,6EAA6E;AAC7E,iBAAiB;AACjB,EAAE;AACF,qEAAqE;AACrE,+CAA+C;AAC/C,8CAA8C;AAC9C,qCAAqC;AACrC,2CAA2C;AAC3C,EAAE;AACF,oCAAoC;AACpC,EAAE;AACF,2CAA2C;AAC3C,EAAE;AACF,6BAA6B;AAC7B,mDAAmD;AACnD,aAAa;AACb,iCAAiC;AACjC,2CAA2C;AAC3C,gDAAgD;AAChD,iBAAiB;AACjB,eAAe;AACf,EAAE;AACF,2BAA2B;AAC3B,mCAAmC;AACnC,sDAAsD;AACtD,eAAe;AACf,EAAE;AACF,8BAA8B;AAC9B,mCAAmC;AACnC,wDAAwD;AACxD,eAAe;AACf,EAAE;AACF,2CAA2C;AAC3C,gEAAgE;AAChE,yEAAyE;AACzE,2DAA2D;AAC3D,gFAAgF;;;AAuFhF,iFAAiF;AAEjF;;;;;;GAMG;AACH,MAAa,eAAe;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,10 +1,14 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@moltendb-web/query",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.3.0",
|
|
4
4
|
"description": "Type-safe query builder for MoltenDB — chainable API for get, set, update and delete operations.",
|
|
5
5
|
"main": "./dist/index.js",
|
|
6
6
|
"module": "./dist/index.esm.js",
|
|
7
7
|
"types": "./dist/index.d.ts",
|
|
8
|
+
"repository": {
|
|
9
|
+
"type": "git",
|
|
10
|
+
"url": "https://github.com/maximilian27/moltendb-web/tree/master/packages/query"
|
|
11
|
+
},
|
|
8
12
|
"exports": {
|
|
9
13
|
".": {
|
|
10
14
|
"import": "./dist/index.esm.js",
|
package/src/index.ts
CHANGED
|
@@ -138,14 +138,23 @@ export class WorkerTransport implements MoltenTransport {
|
|
|
138
138
|
private worker: Worker;
|
|
139
139
|
private messageId: number;
|
|
140
140
|
private pending = new Map<number, { resolve: (v: JsonValue) => void; reject: (e: Error) => void }>();
|
|
141
|
+
public onEvent?: (event: any) => void;
|
|
141
142
|
|
|
142
143
|
constructor(worker: Worker, startId = 0) {
|
|
143
144
|
this.messageId = startId;
|
|
144
145
|
this.worker = worker;
|
|
145
146
|
this.worker.addEventListener('message', (event: MessageEvent) => {
|
|
147
|
+
// 1. Intercept unsolicited broadcast events from the Rust core
|
|
148
|
+
if (event.data && event.data.type === 'event') {
|
|
149
|
+
if (this.onEvent) this.onEvent(event.data);
|
|
150
|
+
return; // Don't try to process this as a promise resolution
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
// 2. Standard request/response routing
|
|
146
154
|
const { id, result, error } = event.data as { id: number; result?: JsonValue; error?: string };
|
|
147
155
|
const p = this.pending.get(id);
|
|
148
156
|
if (!p) return;
|
|
157
|
+
|
|
149
158
|
this.pending.delete(id);
|
|
150
159
|
if (error) p.reject(new Error(error));
|
|
151
160
|
else p.resolve(result ?? null);
|
|
@@ -564,7 +573,7 @@ export class CollectionHandle {
|
|
|
564
573
|
* .count(5)
|
|
565
574
|
* .exec();
|
|
566
575
|
*/
|
|
567
|
-
export class
|
|
576
|
+
export class MoltenDBClient {
|
|
568
577
|
private transport: MoltenTransport;
|
|
569
578
|
|
|
570
579
|
constructor(transport: MoltenTransport) {
|
|
@@ -581,3 +590,4 @@ export class MoltenDBQueryBuilder {
|
|
|
581
590
|
return new CollectionHandle(this.transport, name);
|
|
582
591
|
}
|
|
583
592
|
}
|
|
593
|
+
|