@naturalcycles/datastore-lib 3.32.3 → 3.33.1
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/dist/datastore.db.js
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.DatastoreDBTransaction = exports.DatastoreDB = void 0;
|
|
4
|
-
const node_stream_1 = require("node:stream");
|
|
5
4
|
const datastore_1 = require("@google-cloud/datastore");
|
|
6
5
|
const db_lib_1 = require("@naturalcycles/db-lib");
|
|
7
6
|
const js_lib_1 = require("@naturalcycles/js-lib");
|
|
@@ -135,8 +134,9 @@ class DatastoreDB extends db_lib_1.BaseCommonDB {
|
|
|
135
134
|
}
|
|
136
135
|
async runQueryCount(dbQuery, _opt) {
|
|
137
136
|
const q = (0, query_util_1.dbQueryToDatastoreQuery)(dbQuery.select([]), this.ds().createQuery(dbQuery.table));
|
|
138
|
-
const
|
|
139
|
-
|
|
137
|
+
const aq = this.ds().createAggregationQuery(q).count('count');
|
|
138
|
+
const [entities] = await this.ds().runAggregationQuery(aq);
|
|
139
|
+
return entities[0]?.count;
|
|
140
140
|
}
|
|
141
141
|
async runDatastoreQuery(q) {
|
|
142
142
|
const [entities, queryResult] = await this.ds().runQuery(q);
|
|
@@ -151,17 +151,9 @@ class DatastoreDB extends db_lib_1.BaseCommonDB {
|
|
|
151
151
|
...this.cfg.streamOptions,
|
|
152
152
|
..._opt,
|
|
153
153
|
};
|
|
154
|
-
|
|
154
|
+
return (opt.experimentalCursorStream
|
|
155
155
|
? new DatastoreStreamReadable_1.DatastoreStreamReadable(q, opt, (0, js_lib_1.commonLoggerMinLevel)(this.cfg.logger, opt.debug ? 'log' : 'warn'))
|
|
156
|
-
: this.ds().runQueryStream(q))
|
|
157
|
-
.on('error', err => stream.emit('error', err))
|
|
158
|
-
.pipe(new node_stream_1.Transform({
|
|
159
|
-
objectMode: true,
|
|
160
|
-
transform: (chunk, _enc, cb) => {
|
|
161
|
-
cb(null, this.mapId(chunk));
|
|
162
|
-
},
|
|
163
|
-
}));
|
|
164
|
-
return stream;
|
|
156
|
+
: this.ds().runQueryStream(q)).map(chunk => this.mapId(chunk));
|
|
165
157
|
}
|
|
166
158
|
streamQuery(dbQuery, opt) {
|
|
167
159
|
const q = (0, query_util_1.dbQueryToDatastoreQuery)(dbQuery, this.ds().createQuery(dbQuery.table));
|
|
@@ -369,7 +361,7 @@ class DatastoreDB extends db_lib_1.BaseCommonDB {
|
|
|
369
361
|
return {
|
|
370
362
|
predicate: err => RETRY_ON.some(s => err?.message?.toLowerCase()?.includes(s)),
|
|
371
363
|
name,
|
|
372
|
-
timeout:
|
|
364
|
+
timeout: 20_000,
|
|
373
365
|
maxAttempts: 5,
|
|
374
366
|
delay: 5000,
|
|
375
367
|
delayMultiplier: 1.5,
|
|
@@ -17,5 +17,5 @@ export declare class DatastoreKeyValueDB implements CommonKeyValueDB {
|
|
|
17
17
|
streamIds(table: string, limit?: number): ReadableTyped<string>;
|
|
18
18
|
streamValues(table: string, limit?: number): ReadableTyped<Buffer>;
|
|
19
19
|
streamEntries(table: string, limit?: number): ReadableTyped<KeyValueDBTuple>;
|
|
20
|
-
count(
|
|
20
|
+
count(table: string): Promise<number>;
|
|
21
21
|
}
|
|
@@ -2,8 +2,6 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.DatastoreKeyValueDB = void 0;
|
|
4
4
|
const db_lib_1 = require("@naturalcycles/db-lib");
|
|
5
|
-
const js_lib_1 = require("@naturalcycles/js-lib");
|
|
6
|
-
const nodejs_lib_1 = require("@naturalcycles/nodejs-lib");
|
|
7
5
|
const datastore_db_1 = require("./datastore.db");
|
|
8
6
|
const excludeFromIndexes = ['v'];
|
|
9
7
|
class DatastoreKeyValueDB {
|
|
@@ -30,38 +28,29 @@ class DatastoreKeyValueDB {
|
|
|
30
28
|
const q = db_lib_1.DBQuery.create(table)
|
|
31
29
|
.select(['id'])
|
|
32
30
|
.limit(limit || 0);
|
|
33
|
-
|
|
31
|
+
return (this.db
|
|
34
32
|
.streamQuery(q)
|
|
35
|
-
.on('error', err => stream.emit('error', err))
|
|
36
|
-
.
|
|
37
|
-
errorMode: js_lib_1.ErrorMode.SUPPRESS, // cause .pipe() cannot propagate errors
|
|
38
|
-
}));
|
|
39
|
-
return stream;
|
|
33
|
+
// .on('error', err => stream.emit('error', err))
|
|
34
|
+
.map(r => r.id));
|
|
40
35
|
}
|
|
41
36
|
streamValues(table, limit) {
|
|
42
37
|
// `select v` doesn't work for some reason
|
|
43
38
|
const q = db_lib_1.DBQuery.create(table).limit(limit || 0);
|
|
44
|
-
|
|
39
|
+
return (this.db
|
|
45
40
|
.streamQuery(q)
|
|
46
|
-
.on('error', err => stream.emit('error', err))
|
|
47
|
-
.
|
|
48
|
-
errorMode: js_lib_1.ErrorMode.SUPPRESS, // cause .pipe() cannot propagate errors
|
|
49
|
-
}));
|
|
50
|
-
return stream;
|
|
41
|
+
// .on('error', err => stream.emit('error', err))
|
|
42
|
+
.map(r => r.v));
|
|
51
43
|
}
|
|
52
44
|
streamEntries(table, limit) {
|
|
53
45
|
const q = db_lib_1.DBQuery.create(table).limit(limit || 0);
|
|
54
|
-
|
|
46
|
+
return (this.db
|
|
55
47
|
.streamQuery(q)
|
|
56
|
-
.on('error', err => stream.emit('error', err))
|
|
57
|
-
.
|
|
58
|
-
errorMode: js_lib_1.ErrorMode.SUPPRESS, // cause .pipe() cannot propagate errors
|
|
59
|
-
}));
|
|
60
|
-
return stream;
|
|
48
|
+
// .on('error', err => stream.emit('error', err))
|
|
49
|
+
.map(r => [r.id, r.v]));
|
|
61
50
|
}
|
|
62
|
-
async count(
|
|
63
|
-
|
|
64
|
-
return
|
|
51
|
+
async count(table) {
|
|
52
|
+
const q = db_lib_1.DBQuery.create(table);
|
|
53
|
+
return await this.db.runQueryCount(q);
|
|
65
54
|
}
|
|
66
55
|
}
|
|
67
56
|
exports.DatastoreKeyValueDB = DatastoreKeyValueDB;
|
package/package.json
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@naturalcycles/datastore-lib",
|
|
3
|
-
"version": "3.
|
|
3
|
+
"version": "3.33.1",
|
|
4
4
|
"description": "Opinionated library to work with Google Datastore",
|
|
5
5
|
"scripts": {
|
|
6
|
-
"prepare": "husky
|
|
6
|
+
"prepare": "husky"
|
|
7
7
|
},
|
|
8
8
|
"dependencies": {
|
|
9
9
|
"@google-cloud/datastore": "^8.0.0",
|
package/src/datastore.db.ts
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { Transform } from 'node:stream'
|
|
2
1
|
import { PropertyFilter, Transaction } from '@google-cloud/datastore'
|
|
3
2
|
import type { Datastore, Key, Query } from '@google-cloud/datastore'
|
|
4
3
|
import {
|
|
@@ -228,8 +227,9 @@ export class DatastoreDB extends BaseCommonDB implements CommonDB {
|
|
|
228
227
|
_opt?: DatastoreDBOptions,
|
|
229
228
|
): Promise<number> {
|
|
230
229
|
const q = dbQueryToDatastoreQuery(dbQuery.select([]), this.ds().createQuery(dbQuery.table))
|
|
231
|
-
const
|
|
232
|
-
|
|
230
|
+
const aq = this.ds().createAggregationQuery(q).count('count')
|
|
231
|
+
const [entities] = await this.ds().runAggregationQuery(aq)
|
|
232
|
+
return entities[0]?.count
|
|
233
233
|
}
|
|
234
234
|
|
|
235
235
|
async runDatastoreQuery<ROW extends ObjectWithId>(q: Query): Promise<RunQueryResult<ROW>> {
|
|
@@ -252,26 +252,15 @@ export class DatastoreDB extends BaseCommonDB implements CommonDB {
|
|
|
252
252
|
..._opt,
|
|
253
253
|
}
|
|
254
254
|
|
|
255
|
-
|
|
255
|
+
return (
|
|
256
256
|
opt.experimentalCursorStream
|
|
257
|
-
? new DatastoreStreamReadable(
|
|
257
|
+
? new DatastoreStreamReadable<ROW>(
|
|
258
258
|
q,
|
|
259
259
|
opt,
|
|
260
260
|
commonLoggerMinLevel(this.cfg.logger, opt.debug ? 'log' : 'warn'),
|
|
261
261
|
)
|
|
262
|
-
: this.ds().runQueryStream(q)
|
|
263
|
-
)
|
|
264
|
-
.on('error', err => stream.emit('error', err))
|
|
265
|
-
.pipe(
|
|
266
|
-
new Transform({
|
|
267
|
-
objectMode: true,
|
|
268
|
-
transform: (chunk, _enc, cb) => {
|
|
269
|
-
cb(null, this.mapId(chunk))
|
|
270
|
-
},
|
|
271
|
-
}),
|
|
272
|
-
)
|
|
273
|
-
|
|
274
|
-
return stream
|
|
262
|
+
: (this.ds().runQueryStream(q) as ReadableTyped<ROW>)
|
|
263
|
+
).map(chunk => this.mapId(chunk))
|
|
275
264
|
}
|
|
276
265
|
|
|
277
266
|
override streamQuery<ROW extends ObjectWithId>(
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { CommonKeyValueDB, DBQuery, KeyValueDBTuple } from '@naturalcycles/db-lib'
|
|
2
|
-
import {
|
|
3
|
-
import { ReadableTyped, transformMapSimple } from '@naturalcycles/nodejs-lib'
|
|
2
|
+
import { ReadableTyped } from '@naturalcycles/nodejs-lib'
|
|
4
3
|
import { DatastoreDB } from './datastore.db'
|
|
5
4
|
import { DatastoreDBCfg } from './datastore.model'
|
|
6
5
|
|
|
@@ -49,51 +48,39 @@ export class DatastoreKeyValueDB implements CommonKeyValueDB {
|
|
|
49
48
|
.select(['id'])
|
|
50
49
|
.limit(limit || 0)
|
|
51
50
|
|
|
52
|
-
|
|
53
|
-
.
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
}),
|
|
59
|
-
)
|
|
60
|
-
|
|
61
|
-
return stream
|
|
51
|
+
return (
|
|
52
|
+
this.db
|
|
53
|
+
.streamQuery(q)
|
|
54
|
+
// .on('error', err => stream.emit('error', err))
|
|
55
|
+
.map(r => r.id)
|
|
56
|
+
)
|
|
62
57
|
}
|
|
63
58
|
|
|
64
59
|
streamValues(table: string, limit?: number): ReadableTyped<Buffer> {
|
|
65
60
|
// `select v` doesn't work for some reason
|
|
66
61
|
const q = DBQuery.create<KVObject>(table).limit(limit || 0)
|
|
67
62
|
|
|
68
|
-
|
|
69
|
-
.
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
}),
|
|
75
|
-
)
|
|
76
|
-
|
|
77
|
-
return stream
|
|
63
|
+
return (
|
|
64
|
+
this.db
|
|
65
|
+
.streamQuery(q)
|
|
66
|
+
// .on('error', err => stream.emit('error', err))
|
|
67
|
+
.map(r => r.v)
|
|
68
|
+
)
|
|
78
69
|
}
|
|
79
70
|
|
|
80
71
|
streamEntries(table: string, limit?: number): ReadableTyped<KeyValueDBTuple> {
|
|
81
72
|
const q = DBQuery.create<KVObject>(table).limit(limit || 0)
|
|
82
73
|
|
|
83
|
-
|
|
84
|
-
.
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
}),
|
|
90
|
-
)
|
|
91
|
-
|
|
92
|
-
return stream
|
|
74
|
+
return (
|
|
75
|
+
this.db
|
|
76
|
+
.streamQuery(q)
|
|
77
|
+
// .on('error', err => stream.emit('error', err))
|
|
78
|
+
.map(r => [r.id, r.v] as KeyValueDBTuple)
|
|
79
|
+
)
|
|
93
80
|
}
|
|
94
81
|
|
|
95
|
-
async count(
|
|
96
|
-
|
|
97
|
-
return
|
|
82
|
+
async count(table: string): Promise<number> {
|
|
83
|
+
const q = DBQuery.create<KVObject>(table)
|
|
84
|
+
return await this.db.runQueryCount(q)
|
|
98
85
|
}
|
|
99
86
|
}
|