@naturalcycles/datastore-lib 4.18.6 → 4.19.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.d.ts +1 -5
- package/dist/datastore.db.js +4 -4
- package/dist/datastore.model.d.ts +2 -2
- package/dist/datastore.model.js +2 -1
- package/dist/datastoreStreamReadable.js +3 -1
- package/dist/query.util.d.ts +1 -1
- package/dist/query.util.js +1 -0
- package/package.json +2 -1
- package/readme.md +4 -0
- package/src/datastore.db.ts +3 -7
- package/src/datastoreStreamReadable.ts +6 -2
- package/src/query.util.ts +5 -3
package/dist/datastore.db.d.ts
CHANGED
|
@@ -3,7 +3,7 @@ import { Datastore } from '@google-cloud/datastore';
|
|
|
3
3
|
import type { CommonDB, CommonDBOptions, CommonDBReadOptions, CommonDBSaveOptions, CommonDBSupport, CommonDBTransactionOptions, DBQuery, DBTransaction, DBTransactionFn, RunQueryResult } from '@naturalcycles/db-lib';
|
|
4
4
|
import { BaseCommonDB } from '@naturalcycles/db-lib';
|
|
5
5
|
import type { CommonLogger } from '@naturalcycles/js-lib/log';
|
|
6
|
-
import {
|
|
6
|
+
import type { ObjectWithId, StringMap } from '@naturalcycles/js-lib/types';
|
|
7
7
|
import type { JsonSchema } from '@naturalcycles/nodejs-lib/ajv';
|
|
8
8
|
import { Pipeline } from '@naturalcycles/nodejs-lib/stream';
|
|
9
9
|
import type { DatastoreDBCfg, DatastoreDBOptions, DatastoreDBReadOptions, DatastoreDBSaveOptions, DatastoreDBStreamOptions, DatastorePropertyStats, DatastoreStats } from './datastore.model.js';
|
|
@@ -61,10 +61,6 @@ export declare class DatastoreDB extends BaseCommonDB implements CommonDB {
|
|
|
61
61
|
getTables(): Promise<string[]>;
|
|
62
62
|
getTableSchema<ROW extends ObjectWithId>(table: string): Promise<JsonSchema<ROW>>;
|
|
63
63
|
private getPRetryOptions;
|
|
64
|
-
/**
|
|
65
|
-
* Silently rollback the transaction.
|
|
66
|
-
* It may happen that transaction is already committed/rolled back, so we don't want to throw an error here.
|
|
67
|
-
*/
|
|
68
64
|
private rollback;
|
|
69
65
|
}
|
|
70
66
|
/**
|
package/dist/datastore.db.js
CHANGED
|
@@ -8,7 +8,7 @@ import { _omit } from '@naturalcycles/js-lib/object/object.util.js';
|
|
|
8
8
|
import { pMap } from '@naturalcycles/js-lib/promise/pMap.js';
|
|
9
9
|
import { pRetry, pRetryFn } from '@naturalcycles/js-lib/promise/pRetry.js';
|
|
10
10
|
import { pTimeout } from '@naturalcycles/js-lib/promise/pTimeout.js';
|
|
11
|
-
import { _stringMapEntries, _stringMapValues
|
|
11
|
+
import { _stringMapEntries, _stringMapValues } from '@naturalcycles/js-lib/types';
|
|
12
12
|
import { boldWhite } from '@naturalcycles/nodejs-lib/colors';
|
|
13
13
|
import { Pipeline } from '@naturalcycles/nodejs-lib/stream';
|
|
14
14
|
import { DatastoreType } from './datastore.model.js';
|
|
@@ -229,7 +229,7 @@ export class DatastoreDB extends BaseCommonDB {
|
|
|
229
229
|
await save(chunks[0]);
|
|
230
230
|
}
|
|
231
231
|
else {
|
|
232
|
-
await pMap(chunks, async
|
|
232
|
+
await pMap(chunks, async batch => await save(batch), {
|
|
233
233
|
concurrency: DATASTORE_RECOMMENDED_CONCURRENCY,
|
|
234
234
|
});
|
|
235
235
|
}
|
|
@@ -268,7 +268,7 @@ export class DatastoreDB extends BaseCommonDB {
|
|
|
268
268
|
const retryOptions = this.getPRetryOptions(`DatastoreLib.deleteByIds(${table})`);
|
|
269
269
|
await pMap(_chunk(keys, MAX_ITEMS),
|
|
270
270
|
// async batch => await doDelete(batch),
|
|
271
|
-
async
|
|
271
|
+
async batchOfKeys => {
|
|
272
272
|
await pRetry(async () => {
|
|
273
273
|
await (opt.tx?.tx || ds).delete(batchOfKeys);
|
|
274
274
|
}, retryOptions);
|
|
@@ -286,7 +286,7 @@ export class DatastoreDB extends BaseCommonDB {
|
|
|
286
286
|
const retryOptions = this.getPRetryOptions(`DatastoreLib.multiDeleteByIds`);
|
|
287
287
|
await pMap(_chunk(keys, MAX_ITEMS),
|
|
288
288
|
// async batch => await doDelete(batch),
|
|
289
|
-
async
|
|
289
|
+
async batchOfKeys => {
|
|
290
290
|
await pRetry(async () => {
|
|
291
291
|
await (opt.tx?.tx || ds).delete(batchOfKeys);
|
|
292
292
|
}, retryOptions);
|
|
@@ -106,12 +106,12 @@ export interface DatastoreStats {
|
|
|
106
106
|
export declare enum DatastoreType {
|
|
107
107
|
Blob = "Blob",
|
|
108
108
|
Text = "Text",
|
|
109
|
-
String = "String"
|
|
109
|
+
String = "String",
|
|
110
110
|
EmbeddedEntity = "EmbeddedEntity",
|
|
111
111
|
Float = "Float",
|
|
112
112
|
Integer = "Integer",
|
|
113
113
|
DATE_TIME = "Date/Time",
|
|
114
|
-
Boolean = "Boolean"
|
|
114
|
+
Boolean = "Boolean",
|
|
115
115
|
NULL = "NULL"
|
|
116
116
|
}
|
|
117
117
|
export interface DatastorePropertyStats {
|
package/dist/datastore.model.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { Readable } from 'node:stream';
|
|
2
2
|
import { localTime } from '@naturalcycles/js-lib/datetime/localTime.js';
|
|
3
3
|
import { _ms } from '@naturalcycles/js-lib/datetime/time.util.js';
|
|
4
|
+
import { TimeoutError } from '@naturalcycles/js-lib/error';
|
|
4
5
|
import { createCommonLoggerAtLevel } from '@naturalcycles/js-lib/log';
|
|
5
6
|
import { pRetry } from '@naturalcycles/js-lib/promise/pRetry.js';
|
|
6
7
|
import { getRunQueryOptions } from './query.util.js';
|
|
@@ -159,7 +160,8 @@ export class DatastoreStreamReadable extends Readable {
|
|
|
159
160
|
return await q.run(this.dsOpt);
|
|
160
161
|
}, {
|
|
161
162
|
name: `DatastoreStreamReadable.query(${table})`,
|
|
162
|
-
predicate: err =>
|
|
163
|
+
predicate: err => err instanceof TimeoutError ||
|
|
164
|
+
RETRY_ON.some(s => err?.message?.toLowerCase()?.includes(s)),
|
|
163
165
|
maxAttempts: 5,
|
|
164
166
|
delay: 5000,
|
|
165
167
|
delayMultiplier: 2,
|
package/dist/query.util.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import type { Query } from '@google-cloud/datastore';
|
|
2
2
|
import type { RunQueryOptions } from '@google-cloud/datastore/build/src/query.js';
|
|
3
3
|
import type { DBQuery } from '@naturalcycles/db-lib';
|
|
4
4
|
import type { ObjectWithId } from '@naturalcycles/js-lib/types';
|
package/dist/query.util.js
CHANGED
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@naturalcycles/datastore-lib",
|
|
3
3
|
"type": "module",
|
|
4
|
-
"version": "4.
|
|
4
|
+
"version": "4.19.1",
|
|
5
5
|
"description": "Opinionated library to work with Google Datastore, implements CommonDB",
|
|
6
6
|
"dependencies": {
|
|
7
7
|
"@google-cloud/datastore": "^10",
|
|
@@ -11,6 +11,7 @@
|
|
|
11
11
|
},
|
|
12
12
|
"devDependencies": {
|
|
13
13
|
"@types/node": "^25",
|
|
14
|
+
"@typescript/native-preview": "7.0.0-dev.20260201.1",
|
|
14
15
|
"@naturalcycles/dev-lib": "18.4.2"
|
|
15
16
|
},
|
|
16
17
|
"exports": {
|
package/readme.md
CHANGED
package/src/datastore.db.ts
CHANGED
|
@@ -25,12 +25,8 @@ import type { PRetryOptions } from '@naturalcycles/js-lib/promise'
|
|
|
25
25
|
import { pMap } from '@naturalcycles/js-lib/promise/pMap.js'
|
|
26
26
|
import { pRetry, pRetryFn } from '@naturalcycles/js-lib/promise/pRetry.js'
|
|
27
27
|
import { pTimeout } from '@naturalcycles/js-lib/promise/pTimeout.js'
|
|
28
|
-
import {
|
|
29
|
-
|
|
30
|
-
_stringMapValues,
|
|
31
|
-
type ObjectWithId,
|
|
32
|
-
type StringMap,
|
|
33
|
-
} from '@naturalcycles/js-lib/types'
|
|
28
|
+
import { _stringMapEntries, _stringMapValues } from '@naturalcycles/js-lib/types'
|
|
29
|
+
import type { ObjectWithId, StringMap } from '@naturalcycles/js-lib/types'
|
|
34
30
|
import type { JsonSchema } from '@naturalcycles/nodejs-lib/ajv'
|
|
35
31
|
import { boldWhite } from '@naturalcycles/nodejs-lib/colors'
|
|
36
32
|
import { Pipeline } from '@naturalcycles/nodejs-lib/stream'
|
|
@@ -606,7 +602,7 @@ export class DatastoreDB extends BaseCommonDB implements CommonDB {
|
|
|
606
602
|
if (dtype === DatastoreType.Blob) {
|
|
607
603
|
s.properties![name] = {
|
|
608
604
|
instanceof: 'Buffer',
|
|
609
|
-
} as JsonSchema<
|
|
605
|
+
} as JsonSchema<ROW[typeof name]>
|
|
610
606
|
} else if (dtype === DatastoreType.Text || dtype === DatastoreType.String) {
|
|
611
607
|
s.properties![name] = {
|
|
612
608
|
type: 'string',
|
|
@@ -7,7 +7,9 @@ import type {
|
|
|
7
7
|
} from '@google-cloud/datastore/build/src/query.js'
|
|
8
8
|
import { localTime } from '@naturalcycles/js-lib/datetime/localTime.js'
|
|
9
9
|
import { _ms } from '@naturalcycles/js-lib/datetime/time.util.js'
|
|
10
|
-
import {
|
|
10
|
+
import { TimeoutError } from '@naturalcycles/js-lib/error'
|
|
11
|
+
import { createCommonLoggerAtLevel } from '@naturalcycles/js-lib/log'
|
|
12
|
+
import type { CommonLogger } from '@naturalcycles/js-lib/log'
|
|
11
13
|
import { pRetry } from '@naturalcycles/js-lib/promise/pRetry.js'
|
|
12
14
|
import type { UnixTimestampMillis } from '@naturalcycles/js-lib/types'
|
|
13
15
|
import type { ReadableTyped } from '@naturalcycles/nodejs-lib/stream'
|
|
@@ -213,7 +215,9 @@ export class DatastoreStreamReadable<T = any> extends Readable implements Readab
|
|
|
213
215
|
},
|
|
214
216
|
{
|
|
215
217
|
name: `DatastoreStreamReadable.query(${table})`,
|
|
216
|
-
predicate: err =>
|
|
218
|
+
predicate: err =>
|
|
219
|
+
err instanceof TimeoutError ||
|
|
220
|
+
RETRY_ON.some(s => err?.message?.toLowerCase()?.includes(s)),
|
|
217
221
|
maxAttempts: 5,
|
|
218
222
|
delay: 5000,
|
|
219
223
|
delayMultiplier: 2,
|
package/src/query.util.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import { PropertyFilter
|
|
2
|
-
import type {
|
|
1
|
+
import { PropertyFilter } from '@google-cloud/datastore'
|
|
2
|
+
import type { Query } from '@google-cloud/datastore'
|
|
3
|
+
import type { Operator, RunQueryOptions } from '@google-cloud/datastore/build/src/query.js'
|
|
3
4
|
import type { DBQuery, DBQueryFilterOperator } from '@naturalcycles/db-lib'
|
|
4
5
|
import { _round } from '@naturalcycles/js-lib'
|
|
5
6
|
import type { ObjectWithId, StringMap } from '@naturalcycles/js-lib/types'
|
|
@@ -9,7 +10,8 @@ const FNAME_MAP: StringMap = {
|
|
|
9
10
|
id: '__key__',
|
|
10
11
|
}
|
|
11
12
|
|
|
12
|
-
|
|
13
|
+
// export type Operator = '=' | '<' | '>' | '<=' | '>=' | 'HAS_ANCESTOR' | '!=' | 'IN' | 'NOT_IN'
|
|
14
|
+
const OP_MAP: Partial<Record<DBQueryFilterOperator, Operator>> = {
|
|
13
15
|
'==': '=',
|
|
14
16
|
in: 'IN',
|
|
15
17
|
'not-in': 'NOT_IN',
|