@kubun/db 0.3.5 → 0.3.7
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/lib/db.d.ts +2 -0
- package/lib/db.d.ts.map +1 -1
- package/lib/db.js +29 -5
- package/package.json +6 -5
package/lib/db.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { EventEmitter } from '@enkaku/event';
|
|
2
2
|
import type { Adapter, AdapterTypes } from '@kubun/db-adapter';
|
|
3
3
|
import { type DocumentID, DocumentModelID } from '@kubun/id';
|
|
4
|
+
import { type Logger } from '@kubun/logger';
|
|
4
5
|
import type { DocumentModel, DocumentModelsRecord, DocumentNode } from '@kubun/protocol';
|
|
5
6
|
import { Kysely, type Migration, type Transaction } from 'kysely';
|
|
6
7
|
import type { Database, DocumentData, GraphModel, InsertDocumentAttachment, ListDocumentsParams, QueryDocumentsParams, QueryDocumentsResult } from './types.js';
|
|
@@ -22,6 +23,7 @@ export type DBEvents = {
|
|
|
22
23
|
};
|
|
23
24
|
export type DBParams<T extends AdapterTypes = AdapterTypes> = {
|
|
24
25
|
adapter: Adapter<T>;
|
|
26
|
+
logger?: Logger;
|
|
25
27
|
};
|
|
26
28
|
export type GraphModelWithRecord = GraphModel & {
|
|
27
29
|
record: DocumentModelsRecord;
|
package/lib/db.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"db.d.ts","sourceRoot":"","sources":["../src/db.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAA;AAC5C,OAAO,KAAK,EAAmB,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAC/E,OAAO,EAAE,KAAK,UAAU,EAAE,eAAe,EAAE,MAAM,WAAW,CAAA;AAC5D,OAAO,KAAK,EAAE,aAAa,EAAE,oBAAoB,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AACxF,OAAO,EAAE,MAAM,EAAE,KAAK,SAAS,EAAoC,KAAK,WAAW,EAAE,MAAM,QAAQ,CAAA;AAKnG,OAAO,KAAK,EACV,QAAQ,EAER,YAAY,EAEZ,UAAU,EACV,wBAAwB,EAExB,mBAAmB,EACnB,oBAAoB,EACpB,oBAAoB,EACrB,MAAM,YAAY,CAAA;AAiDnB,MAAM,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAA;AAElD,MAAM,MAAM,oBAAoB,GAAG;IACjC,IAAI,EAAE,QAAQ,CAAA;IACd,QAAQ,EAAE,YAAY,CAAA;IACtB,SAAS,EAAE,MAAM,MAAM,CAAA;CACxB,CAAA;AACD,MAAM,MAAM,oBAAoB,GAAG;IACjC,IAAI,EAAE,QAAQ,CAAA;IACd,QAAQ,EAAE,YAAY,CAAA;IACtB,QAAQ,EAAE,YAAY,CAAA;IACtB,SAAS,EAAE,MAAM,MAAM,CAAA;CACxB,CAAA;AACD,MAAM,MAAM,kBAAkB,GAAG,oBAAoB,GAAG,oBAAoB,CAAA;AAE5E,MAAM,MAAM,QAAQ,GAAG;IACrB,gBAAgB,EAAE,kBAAkB,CAAA;CACrC,CAAA;AAED,MAAM,MAAM,QAAQ,CAAC,CAAC,SAAS,YAAY,GAAG,YAAY,IAAI;IAC5D,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,CAAA;
|
|
1
|
+
{"version":3,"file":"db.d.ts","sourceRoot":"","sources":["../src/db.ts"],"names":[],"mappings":"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"}
|
package/lib/db.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { EventEmitter } from '@enkaku/event';
|
|
2
2
|
import { DocumentModelID } from '@kubun/id';
|
|
3
|
+
import { getKubunLogger } from '@kubun/logger';
|
|
3
4
|
import { Kysely, Migrator, ParseJSONResultsPlugin } from 'kysely';
|
|
4
5
|
import { serializeCursor } from './cursor.js';
|
|
5
6
|
import { getMigrations } from './migrations/migrations.js';
|
|
@@ -48,6 +49,7 @@ export class KubunDB {
|
|
|
48
49
|
#adapter;
|
|
49
50
|
#db;
|
|
50
51
|
#events = new EventEmitter();
|
|
52
|
+
#logger;
|
|
51
53
|
#ready;
|
|
52
54
|
constructor(params){
|
|
53
55
|
this.#adapter = params.adapter;
|
|
@@ -57,6 +59,7 @@ export class KubunDB {
|
|
|
57
59
|
new ParseJSONResultsPlugin()
|
|
58
60
|
]
|
|
59
61
|
});
|
|
62
|
+
this.#logger = params.logger ?? getKubunLogger('db');
|
|
60
63
|
this.#ready = this.#runMigrations();
|
|
61
64
|
}
|
|
62
65
|
/** @internal */ get adapter() {
|
|
@@ -79,12 +82,14 @@ export class KubunDB {
|
|
|
79
82
|
if (result.error != null) {
|
|
80
83
|
throw result.error;
|
|
81
84
|
}
|
|
85
|
+
this.#logger.info('ready');
|
|
82
86
|
}
|
|
83
87
|
getMigrations() {
|
|
84
88
|
return getMigrations(this.#adapter);
|
|
85
89
|
}
|
|
86
90
|
async close() {
|
|
87
91
|
await this.#db.destroy();
|
|
92
|
+
this.#logger.info('closed');
|
|
88
93
|
}
|
|
89
94
|
async listGraphs() {
|
|
90
95
|
await this.#ready;
|
|
@@ -94,7 +99,7 @@ export class KubunDB {
|
|
|
94
99
|
await this.#ready;
|
|
95
100
|
const graphModelID = params.id ?? globalThis.crypto.randomUUID();
|
|
96
101
|
const name = params.name ?? graphModelID;
|
|
97
|
-
|
|
102
|
+
await this.#db.transaction().setIsolationLevel('read committed').execute(async (trx)=>{
|
|
98
103
|
await trx.insertInto('kubun_graph_models').values({
|
|
99
104
|
aliases: JSON.stringify(params.aliases ?? {}),
|
|
100
105
|
id: graphModelID,
|
|
@@ -120,8 +125,11 @@ export class KubunDB {
|
|
|
120
125
|
added.add(id);
|
|
121
126
|
}));
|
|
122
127
|
}
|
|
123
|
-
return graphModelID;
|
|
124
128
|
});
|
|
129
|
+
this.#logger.debug('created graph {id}', {
|
|
130
|
+
id: graphModelID
|
|
131
|
+
});
|
|
132
|
+
return graphModelID;
|
|
125
133
|
}
|
|
126
134
|
async #addDocumentModel(params) {
|
|
127
135
|
const { id, graphModelID, model, transaction } = params;
|
|
@@ -204,15 +212,24 @@ export class KubunDB {
|
|
|
204
212
|
await this.#ready;
|
|
205
213
|
const [first, ...rest] = modelIDs;
|
|
206
214
|
let query = this.#db.selectFrom(`k_${first}`).selectAll();
|
|
207
|
-
for (const model of rest){
|
|
208
|
-
query = query.unionAll((eb)=>eb.selectFrom(`k_${model}`).selectAll());
|
|
209
|
-
}
|
|
210
215
|
if (owner != null) {
|
|
211
216
|
query = query.where('owner', '=', owner);
|
|
212
217
|
}
|
|
213
218
|
if (filter != null) {
|
|
214
219
|
query = query.where((eb)=>applyDocumentFilter(eb, filter));
|
|
215
220
|
}
|
|
221
|
+
for (const model of rest){
|
|
222
|
+
query = query.unionAll((eb)=>{
|
|
223
|
+
let q = eb.selectFrom(`k_${model}`).selectAll();
|
|
224
|
+
if (owner != null) {
|
|
225
|
+
q = q.where('owner', '=', owner);
|
|
226
|
+
}
|
|
227
|
+
if (filter != null) {
|
|
228
|
+
q = q.where((eb)=>applyDocumentFilter(eb, filter));
|
|
229
|
+
}
|
|
230
|
+
return q;
|
|
231
|
+
});
|
|
232
|
+
}
|
|
216
233
|
const [orderedQuery, orderedFieldsPaths] = applyDocumentOrderBy(query, orderBy, isReverse);
|
|
217
234
|
const [paginatedQuery, limit] = applyPagination(orderedQuery, pagination, orderBy);
|
|
218
235
|
const results = await paginatedQuery.execute();
|
|
@@ -283,6 +300,10 @@ export class KubunDB {
|
|
|
283
300
|
ts: +doc.created_at
|
|
284
301
|
})
|
|
285
302
|
});
|
|
303
|
+
this.#logger.debug('created document {id} with model {model}', {
|
|
304
|
+
id,
|
|
305
|
+
model
|
|
306
|
+
});
|
|
286
307
|
return document;
|
|
287
308
|
}
|
|
288
309
|
async saveDocument(params) {
|
|
@@ -308,6 +329,9 @@ export class KubunDB {
|
|
|
308
329
|
ts: +doc.created_at
|
|
309
330
|
})
|
|
310
331
|
});
|
|
332
|
+
this.#logger.debug('updated document {id}', {
|
|
333
|
+
id
|
|
334
|
+
});
|
|
311
335
|
return document;
|
|
312
336
|
}
|
|
313
337
|
async addAttachments(attachments) {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@kubun/db",
|
|
3
|
-
"version": "0.3.
|
|
3
|
+
"version": "0.3.7",
|
|
4
4
|
"license": "see LICENSE.md",
|
|
5
5
|
"keywords": [],
|
|
6
6
|
"type": "module",
|
|
@@ -17,12 +17,13 @@
|
|
|
17
17
|
"dependencies": {
|
|
18
18
|
"@enkaku/codec": "^0.12.0",
|
|
19
19
|
"@enkaku/event": "^0.12.1",
|
|
20
|
-
"kysely": "^0.28.
|
|
20
|
+
"kysely": "^0.28.9",
|
|
21
|
+
"@kubun/logger": "^0.3.0"
|
|
21
22
|
},
|
|
22
23
|
"devDependencies": {
|
|
23
24
|
"@kubun/db-adapter": "^0.3.2",
|
|
24
25
|
"@kubun/id": "^0.3.1",
|
|
25
|
-
"@kubun/protocol": "^0.3.
|
|
26
|
+
"@kubun/protocol": "^0.3.10"
|
|
26
27
|
},
|
|
27
28
|
"scripts": {
|
|
28
29
|
"build:clean": "del lib",
|
|
@@ -31,8 +32,8 @@
|
|
|
31
32
|
"build:types:ci": "tsc --emitDeclarationOnly --declarationMap false",
|
|
32
33
|
"build": "pnpm run build:clean && pnpm run build:js && pnpm run build:types",
|
|
33
34
|
"test:types": "tsc --noEmit --skipLibCheck",
|
|
34
|
-
"test:
|
|
35
|
-
"test:unit": "pnpm rebuild && pnpm run test:
|
|
35
|
+
"test:vitest": "vitest run",
|
|
36
|
+
"test:unit": "pnpm rebuild && pnpm run test:vitest",
|
|
36
37
|
"test": "pnpm run test:types && pnpm run test:unit"
|
|
37
38
|
}
|
|
38
39
|
}
|