datastore-api 1.0.2 → 1.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.
@@ -2,59 +2,54 @@
2
2
  /*
3
3
  * dstore-api.test.ts
4
4
  *
5
- * Created by Dr. Maximillian Dornseif 2021-12-10 in huwawi3backend 11.10.0
6
- * Copyright (c) 2021 HUDORA GmbH
5
+ * Created by Dr. Maximilian Dornseif 2021-12-10 in huwawi3backend 11.10.0
6
+ * Copyright (c) 2021 Dr. Maximilian Dornseif
7
7
  */
8
8
  var __importDefault = (this && this.__importDefault) || function (mod) {
9
9
  return (mod && mod.__esModule) ? mod : { "default": mod };
10
10
  };
11
11
  Object.defineProperty(exports, "__esModule", { value: true });
12
12
  const datastore_1 = require("@google-cloud/datastore");
13
- // import { assertIsObject, isNumber } from 'assertate';
14
13
  const ava_1 = __importDefault(require("ava"));
14
+ const google_datastore_emulator_1 = __importDefault(require("google-datastore-emulator"));
15
15
  const dstore_api_1 = require("./dstore-api");
16
+ process.env.GCLOUD_PROJECT = 'project-id'; // Set the datastore project Id globally
17
+ let emulator;
18
+ ava_1.default.before(async (_t) => {
19
+ emulator = new google_datastore_emulator_1.default({ useDocker: false, debug: false });
20
+ await emulator.start();
21
+ });
22
+ ava_1.default.after('cleanup', async (_t) => {
23
+ await emulator.stop();
24
+ });
16
25
  function getDstore(projectId) {
17
26
  return new dstore_api_1.Dstore(new datastore_1.Datastore({ projectId }));
18
27
  }
19
28
  (0, ava_1.default)('keySerialize', async (t) => {
20
- const kvStore = getDstore('huwawi3Datastore');
21
- t.deepEqual(kvStore.key(['testYodel', 123]), {
29
+ const kvStore = getDstore('test');
30
+ t.deepEqual(kvStore.key(['testYodel', 123]).path, ['testYodel', 123]);
31
+ t.deepEqual(JSON.parse(JSON.stringify(kvStore.key(['testYodel', 123]))), {
22
32
  id: 123,
23
33
  kind: 'testYodel',
24
- namespace: undefined,
25
34
  path: ['testYodel', 123],
26
35
  });
27
- t.deepEqual(kvStore.key(['testYodel', 123]).path, ['testYodel', 123]);
28
- t.deepEqual(kvStore.key(['testYodel', 123]).serialized, {
29
- namespace: 'undefined',
30
- path: [
31
- 'testYodel',
32
- {
33
- type: 'DatastoreInt',
34
- value: '123',
35
- },
36
- ],
37
- });
38
36
  const ser = kvStore.keySerialize(kvStore.key(['testYodel', 123]));
39
- t.deepEqual(ser, 'agdodXdhd2kzcg8LEgl0ZXN0WW9kZWwYewyiAQR0ZXN0');
40
- t.deepEqual(kvStore.keyFromSerialized(ser), {
37
+ t.deepEqual(ser, 'agByDwsSCXRlc3RZb2RlbBh7DA');
38
+ t.deepEqual(JSON.parse(JSON.stringify(kvStore.keyFromSerialized(ser))), {
41
39
  id: '123',
42
40
  kind: 'testYodel',
43
- namespace: 'undefined',
44
41
  path: ['testYodel', '123'],
45
42
  });
46
43
  });
47
- // it("allocation", async () => {
48
- // expect.assertions(1);
49
- // const kvStore = getDstore("huwawi3Datastore");
50
- // const id = await kvStore.allocateOneId();
51
- // expect(id).toMatch(/\d+/);
52
- // });
53
- // });
54
- // describe("Lesen", () => {
55
- // it("get numid", async () => {
44
+ (0, ava_1.default)('allocation', async (t) => {
45
+ const kvStore = getDstore('test');
46
+ const id = await kvStore.allocateOneId();
47
+ t.regex(id, /\d+/);
48
+ });
49
+ // describe("Read", () => {
50
+ // it("get num_id", async () => {
56
51
  // expect.assertions(10);
57
- // const kvStore = getDstore("huwawi3Datastore");
52
+ // const kvStore = getDstore("test");
58
53
  // const entity = { key: kvStore.key(["testYodel", 2]), data: { foo: "bar" } };
59
54
  // const entity2 = { key: kvStore.key(["testYodel", 3]), data: { foo: "bar" } };
60
55
  // const commitResponse = await kvStore.save([entity, entity2]);
@@ -110,7 +105,7 @@ function getDstore(projectId) {
110
105
  // assertIsObject(result);
111
106
  // expect(kvStore.readKey(result)).toBeInstanceOf(Key);
112
107
  // const result2 = await kvStore.getMulti([entity.key]);
113
- // // getMulti returns a Array even foir single keys
108
+ // // getMulti returns a Array even for single keys
114
109
  // expect(result2).toMatchInlineSnapshot(`
115
110
  // Array [
116
111
  // Object {
@@ -197,8 +192,8 @@ function getDstore(projectId) {
197
192
  // },
198
193
  // ]
199
194
  // `);
200
- // const result5 = await kvStore.getMulti([entity.key, kvStore.key(["YodelGibtEsNicht", 3])]);
201
- // // getMulti returns a Array but obmits unknown keys
195
+ // const result5 = await kvStore.getMulti([entity.key, kvStore.key(["YodelNotThere", 3])]);
196
+ // // getMulti returns a Array but omits unknown keys
202
197
  // // expect(Array.isArray(result)).toBeTruthy();
203
198
  // expect(result5).toMatchInlineSnapshot(`
204
199
  // Array [
@@ -225,7 +220,7 @@ function getDstore(projectId) {
225
220
  // it("get name", async () => {
226
221
  // expect.assertions(3);
227
222
  // const kvStore = getDstore("huwawi3Datastore");
228
- // const entity = { key: kvStore.key(["testYodel", "zwei"]), data: { foo: "bar" } };
223
+ // const entity = { key: kvStore.key(["testYodel", "two"]), data: { foo: "bar" } };
229
224
  // const commitResponse = await kvStore.save([entity]);
230
225
  // expect(commitResponse?.[0]?.indexUpdates).toBe(3);
231
226
  // // expect(commitResponse).toMatchInlineSnapshot(`
@@ -249,11 +244,11 @@ function getDstore(projectId) {
249
244
  // },
250
245
  // "key": Key {
251
246
  // "kind": "testYodel",
252
- // "name": "zwei",
247
+ // "name": "two",
253
248
  // "namespace": "test",
254
249
  // "path": Array [
255
250
  // "testYodel",
256
- // "zwei",
251
+ // "two",
257
252
  // ],
258
253
  // },
259
254
  // }
@@ -265,71 +260,42 @@ function getDstore(projectId) {
265
260
  // "foo": "bar",
266
261
  // Symbol(KEY): Key {
267
262
  // "kind": "testYodel",
268
- // "name": "zwei",
263
+ // "name": "two",
269
264
  // "namespace": "test",
270
265
  // "path": Array [
271
266
  // "testYodel",
272
- // "zwei",
267
+ // "two",
273
268
  // ],
274
269
  // },
275
270
  // }
276
271
  // `);
277
272
  // });
278
- // it("query", async () => {
279
- // expect.assertions(5);
280
- // const kvStore = getDstore("huwawi3Datastore");
281
- // const entity = { key: kvStore.key(["testYodel", 3]), data: { foo: "bar" } };
282
- // const data = await kvStore.save([entity]);
283
- // const query = kvStore.createQuery("testYodel");
284
- // query.limit(1);
285
- // const [entities, runQueryInfo] = await kvStore.runQuery(query);
286
- // expect(entities.length).toBe(1);
287
- // expect(entities?.[0]?.foo).toMatchInlineSnapshot(`"bar"`);
288
- // expect(entities?.[0]?.[Datastore.KEY]?.kind).toMatchInlineSnapshot(`"testYodel"`);
289
- // // expect(entities).toMatchInlineSnapshot(`
290
- // // Array [
291
- // // Object {
292
- // // "foo": "bar",
293
- // // Symbol(KEY): Key {
294
- // // "id": "3",
295
- // // "kind": "testYodel",
296
- // // "namespace": "test",
297
- // // "path": Array [
298
- // // "testYodel",
299
- // // "3",
300
- // // ],
301
- // // },
302
- // // },
303
- // // ]
304
- // // `);
305
- // expect(runQueryInfo).toMatchInlineSnapshot(
306
- // { endCursor: expect.any(String) },
307
- // `
308
- // Object {
309
- // "endCursor": Any<String>,
310
- // "moreResults": "MORE_RESULTS_AFTER_LIMIT",
311
- // }
312
- // `
313
- // );
314
- // const result2 = await kvStore.query("testYodel", [], 1);
315
- // expect(result2[0]).toMatchInlineSnapshot(`
316
- // Array [
317
- // Object {
318
- // "foo": "bar",
319
- // Symbol(KEY): Key {
320
- // "id": "2",
321
- // "kind": "testYodel",
322
- // "namespace": "test",
323
- // "path": Array [
324
- // "testYodel",
325
- // "2",
326
- // ],
327
- // },
328
- // },
329
- // ]
330
- // `);
331
- // });
332
- // });
273
+ (0, ava_1.default)('query', async (t) => {
274
+ var _a, _b, _c;
275
+ const kvStore = getDstore('test');
276
+ const entity = {
277
+ key: kvStore.key(['testYodel', '3']),
278
+ data: { foo: 'bar', baz: 'baz' },
279
+ };
280
+ // legacy interface
281
+ await kvStore.save([entity]);
282
+ const query = kvStore.createQuery('testYodel');
283
+ query.limit(1);
284
+ const [entities, runQueryInfo] = await kvStore.runQuery(query);
285
+ t.is(entities.length, 1);
286
+ t.is((_a = entities === null || entities === void 0 ? void 0 : entities[0]) === null || _a === void 0 ? void 0 : _a.foo, 'bar');
287
+ t.is((_c = (_b = entities === null || entities === void 0 ? void 0 : entities[0]) === null || _b === void 0 ? void 0 : _b[datastore_1.Datastore.KEY]) === null || _c === void 0 ? void 0 : _c.kind, 'testYodel');
288
+ t.is(runQueryInfo === null || runQueryInfo === void 0 ? void 0 : runQueryInfo.moreResults, 'MORE_RESULTS_AFTER_LIMIT');
289
+ // modern interface
290
+ const [result2] = await kvStore.query('testYodel', [], 1, [], ['baz']);
291
+ t.is(result2.length, 1);
292
+ // foo is removed by selection
293
+ t.deepEqual(JSON.parse(JSON.stringify(result2 === null || result2 === void 0 ? void 0 : result2[0])), {
294
+ baz: 'baz',
295
+ });
296
+ const key = kvStore.readKey(result2 === null || result2 === void 0 ? void 0 : result2[0]);
297
+ t.is(key.id, entity.key.id);
298
+ });
333
299
  // describe("Writing", () => {
334
300
  // it("save / upsert", async () => {
335
301
  // expect.assertions(2);
@@ -357,8 +323,8 @@ function getDstore(projectId) {
357
323
  // it("update", async () => {
358
324
  // expect.assertions(3);
359
325
  // const kvStore = getDstore("huwawi3Datastore");
360
- // const keyname = `4insert${Math.random()}`;
361
- // const entity = { key: kvStore.key(["testYodel", keyname]), data: { foo: "bar" } };
326
+ // const keyName = `4insert${Math.random()}`;
327
+ // const entity = { key: kvStore.key(["testYodel", keyName]), data: { foo: "bar" } };
362
328
  // // const request = kvStore.update([entity]);
363
329
  // // await expect(request).rejects.toThrowError(Error);
364
330
  // const commitResponse = await kvStore.save([entity]);
@@ -402,8 +368,8 @@ function getDstore(projectId) {
402
368
  // it("insert", async () => {
403
369
  // expect.assertions(4);
404
370
  // const kvStore = getDstore("huwawi3Datastore");
405
- // const keyname = `3insert${Math.random()}`;
406
- // const entity = { key: kvStore.key(["testYodel", keyname]), data: { foo: "bar" } };
371
+ // const keyName = `3insert${Math.random()}`;
372
+ // const entity = { key: kvStore.key(["testYodel", keyName]), data: { foo: "bar" } };
407
373
  // const commitResponse = await kvStore.insert([entity]);
408
374
  // if (commitResponse?.[0]?.mutationResults?.[0]?.version) {
409
375
  // commitResponse[0].mutationResults[0].version = 2;
@@ -423,7 +389,7 @@ function getDstore(projectId) {
423
389
  // }
424
390
  // `
425
391
  // );
426
- // expect(entity.key.name).toMatch(keyname);
392
+ // expect(entity.key.name).toMatch(keyName);
427
393
  // expect(entity.key.kind).toMatchInlineSnapshot(`"testYodel"`);
428
394
  // const request = kvStore.insert([entity]);
429
395
  // await expect(request).rejects.toThrowError(Error);
@@ -484,4 +450,4 @@ function getDstore(projectId) {
484
450
  // expect(t).toThrow(DstoreError);
485
451
  // });
486
452
  // });
487
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHN0b3JlLWFwaS5zcGVjLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9kc3RvcmUtYXBpLnNwZWMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7OztHQUtHOzs7OztBQUVILHVEQUFvRDtBQUNwRCx3REFBd0Q7QUFDeEQsOENBQXVCO0FBRXZCLDZDQUFzQztBQUV0QyxTQUFTLFNBQVMsQ0FBQyxTQUFTO0lBQzFCLE9BQU8sSUFBSSxtQkFBTSxDQUFDLElBQUkscUJBQVMsQ0FBQyxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUNsRCxDQUFDO0FBRUQsSUFBQSxhQUFJLEVBQUMsY0FBYyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsRUFBRTtJQUMvQixNQUFNLE9BQU8sR0FBRyxTQUFTLENBQUMsa0JBQWtCLENBQUMsQ0FBQztJQUM5QyxDQUFDLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxXQUFXLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRTtRQUMzQyxFQUFFLEVBQUUsR0FBVTtRQUNkLElBQUksRUFBRSxXQUFXO1FBQ2pCLFNBQVMsRUFBRSxTQUFTO1FBQ3BCLElBQUksRUFBRSxDQUFDLFdBQVcsRUFBRSxHQUFHLENBQUM7S0FDbEIsQ0FBQyxDQUFDO0lBQ1YsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsV0FBVyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsV0FBVyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDdEUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsV0FBVyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsVUFBVSxFQUFFO1FBQ3RELFNBQVMsRUFBRSxXQUFXO1FBQ3RCLElBQUksRUFBRTtZQUNKLFdBQVc7WUFDWDtnQkFDRSxJQUFJLEVBQUUsY0FB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
453
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHN0b3JlLWFwaS5zcGVjLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9kc3RvcmUtYXBpLnNwZWMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7OztHQUtHOzs7OztBQUVILHVEQUFvRDtBQUNwRCw4Q0FBdUI7QUFDdkIsMEZBQWlEO0FBRWpELDZDQUFzQztBQUV0QyxPQUFPLENBQUMsR0FBRyxDQUFDLGNBQWMsR0FBRyxZQUFZLENBQUMsQ0FBQyx3Q0FBd0M7QUFDbkYsSUFBSSxRQUFRLENBQUM7QUFFYixhQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxFQUFFLEVBQUUsRUFBRTtJQUN2QixRQUFRLEdBQUcsSUFBSSxtQ0FBUSxDQUFDLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztJQUM1RCxNQUFNLFFBQVEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUN6QixDQUFDLENBQUMsQ0FBQztBQUVILGFBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsRUFBRTtJQUNqQyxNQUFNLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQztBQUVILFNBQVMsU0FBUyxDQUFDLFNBQVM7SUFDMUIsT0FBTyxJQUFJLG1CQUFNLENBQUMsSUFBSSxxQkFBUyxDQUFDLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ2xELENBQUM7QUFFRCxJQUFBLGFBQUksRUFBQyxjQUFjLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxFQUFFO0lBQy9CLE1BQU0sT0FBTyxHQUFHLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNsQyxDQUFDLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxXQUFXLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxXQUFX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
@@ -4,53 +4,58 @@ import { Operator, RunQueryResponse } from '@google-cloud/datastore/build/src/qu
4
4
  import { CommitResponse } from '@google-cloud/datastore/build/src/request';
5
5
  /** @ignore */
6
6
  export { Datastore, Key, PathType, Query, Transaction, } from '@google-cloud/datastore';
7
+ export declare const KEYSYM: symbol;
7
8
  export declare type IGqlFilterTypes = boolean | string | number;
8
9
  export declare type IGqlFilterSpec = {
9
10
  readonly eq: IGqlFilterTypes;
10
11
  };
11
- export declare type TGqlFilterList = ReadonlyArray<readonly [string, Operator, DstorePropertyValues]>;
12
+ export declare type TGqlFilterList = Array<[string, Operator, DstorePropertyValues]>;
12
13
  /** Define what can be written into the Datastore */
13
- export declare type DstorePropertyValues = number | string | Date | boolean | null | undefined | Buffer | Key | readonly DstorePropertyValues[] | {
14
- readonly [key: string]: DstorePropertyValues;
14
+ export declare type DstorePropertyValues = number | string | Date | boolean | null | undefined | Buffer | Key | DstorePropertyValues[] | {
15
+ [key: string]: DstorePropertyValues;
15
16
  };
17
+ export interface IDstoreEntryWithoutKey {
18
+ /** All User Data stored in the Datastore */
19
+ [key: string]: DstorePropertyValues;
20
+ }
16
21
  /** Represents what is actually stored inside the Datastore, called "Entity" by Google
17
22
  [@google-cloud/datastore](https://github.com/googleapis/nodejs-datastore#readme) adds `[Datastore.KEY]`. Using ES6 Symbols presents all kinds of hurdles, especially when you try to serialize into a cache. So we add the property _keyStr which contains the encoded code. It is automatically used
18
23
  to reconstruct `[Datastore.KEY]`, if you use [[Dstore.readKey]].
19
24
  */
20
- export declare type DstoreEntry = {
25
+ export interface IDstoreEntry extends IDstoreEntryWithoutKey {
21
26
  readonly [Datastore.KEY]?: Key;
22
27
  /** [Datastore.KEY] key */
23
28
  _keyStr: string;
24
29
  /** All User Data stored in the Datastore */
25
- readonly [key: string]: DstorePropertyValues;
26
- };
30
+ [key: string]: DstorePropertyValues;
31
+ }
27
32
  /** Represents the thing you pass to the save method. Also called "Entity" by Google */
28
33
  export declare type DstoreSaveEntity = {
29
- readonly key: Key;
30
- readonly data: Omit<DstoreEntry, '_keyStr' | Datastore['KEY']>;
31
- readonly method?: 'insert' | 'update' | 'upsert';
32
- readonly excludeLargeProperties?: boolean;
33
- readonly excludeFromIndexes?: readonly string[];
34
+ key: Key;
35
+ data: Omit<IDstoreEntry, '_keyStr' | Datastore['KEY']>;
36
+ method?: 'insert' | 'update' | 'upsert';
37
+ excludeLargeProperties?: boolean;
38
+ excludeFromIndexes?: readonly string[];
34
39
  };
35
40
  declare type IDstore = {
36
41
  /** Accessible by Users of the library. Keep in mind that you will access outside transactions created by [[runInTransaction]]. */
37
42
  readonly datastore: Datastore;
38
- readonly key: (path: ReadonlyArray<PathType>) => Key;
39
- readonly keyFromSerialized: (text: string) => Key;
40
- readonly keySerialize: (key: Key) => string;
41
- readonly readKey: (entry: DstoreEntry) => Key;
42
- readonly get: (key: Key) => Promise<DstoreEntry | null>;
43
- readonly getMulti: (keys: ReadonlyArray<Key>) => Promise<ReadonlyArray<DstoreEntry | undefined>>;
44
- readonly set: (key: Key, entry: DstoreEntry) => Promise<Key>;
45
- readonly save: (entities: readonly DstoreSaveEntity[]) => Promise<CommitResponse | undefined>;
46
- readonly insert: (entities: readonly DstoreSaveEntity[]) => Promise<CommitResponse | undefined>;
47
- readonly update: (entities: readonly DstoreSaveEntity[]) => Promise<CommitResponse | undefined>;
48
- readonly delete: (keys: readonly Key[]) => Promise<CommitResponse | undefined>;
49
- readonly createQuery: (kind: string) => Query;
50
- readonly query: (kind: string, filters?: TGqlFilterList, limit?: number, orders?: readonly string[]) => Promise<RunQueryResponse>;
51
- readonly runQuery: (query: Query | Omit<Query, 'run'>) => Promise<RunQueryResponse>;
52
- readonly allocateOneId: (kindname: string) => Promise<string>;
53
- readonly runInTransaction: <T>(func: {
43
+ key: (path: ReadonlyArray<PathType>) => Key;
44
+ keyFromSerialized: (text: string) => Key;
45
+ keySerialize: (key: Key) => string;
46
+ readKey: (entry: IDstoreEntry) => Key;
47
+ get: (key: Key) => Promise<IDstoreEntry | null>;
48
+ getMulti: (keys: ReadonlyArray<Key>) => Promise<ReadonlyArray<IDstoreEntry | undefined>>;
49
+ set: (key: Key, entry: IDstoreEntry) => Promise<Key>;
50
+ save: (entities: readonly DstoreSaveEntity[]) => Promise<CommitResponse | undefined>;
51
+ insert: (entities: readonly DstoreSaveEntity[]) => Promise<CommitResponse | undefined>;
52
+ update: (entities: readonly DstoreSaveEntity[]) => Promise<CommitResponse | undefined>;
53
+ delete: (keys: readonly Key[]) => Promise<CommitResponse | undefined>;
54
+ createQuery: (kind: string) => Query;
55
+ query: (kind: string, filters?: TGqlFilterList, limit?: number, ordering?: readonly string[], selection?: readonly string[], cursor?: string) => Promise<RunQueryResponse>;
56
+ runQuery: (query: Query | Omit<Query, 'run'>) => Promise<RunQueryResponse>;
57
+ allocateOneId: (kindName: string) => Promise<string>;
58
+ runInTransaction: <T>(func: {
54
59
  (): Promise<T>;
55
60
  (): T;
56
61
  }) => Promise<T>;
@@ -133,7 +138,7 @@ export declare class Dstore implements IDstore {
133
138
  *
134
139
  * @category Additional
135
140
  */
136
- readKey(ent: DstoreEntry): Key;
141
+ readKey(ent: IDstoreEntry): Key;
137
142
  /** `fixKeys()` is called for all [[DstoreEntry]]sa returned from [[Dstore]].
138
143
  *
139
144
  * Is ensures that besides `entity[Datastore.KEY]` there is `_keyStr` to be leveraged by [[readKey]].
@@ -156,7 +161,7 @@ export declare class Dstore implements IDstore {
156
161
  *
157
162
  * @category Datastore Drop-In
158
163
  */
159
- get(key: Key): Promise<DstoreEntry | null>;
164
+ get(key: Key): Promise<IDstoreEntry | null>;
160
165
  /** `getMulti()` reads several [[DstoreEntry]]s from the Datastore.
161
166
  *
162
167
  * It returns a list of [[DstoreEntry]]s or `null` if not found.
@@ -173,7 +178,7 @@ export declare class Dstore implements IDstore {
173
178
  *
174
179
  * @category Datastore Drop-In
175
180
  */
176
- getMulti(keys: readonly Key[]): Promise<ReadonlyArray<DstoreEntry | undefined>>;
181
+ getMulti(keys: readonly Key[]): Promise<Array<IDstoreEntry | undefined>>;
177
182
  /** `set()` is addition to [[Datastore]]. It provides a classic Key-value Interface.
178
183
  *
179
184
  * Instead providing a nested [[DstoreSaveEntity]] to [[save]] you can call set directly as `set( key, value)`.
@@ -190,7 +195,7 @@ export declare class Dstore implements IDstore {
190
195
  *
191
196
  * @category Additional
192
197
  */
193
- set(key: Key, data: DstoreEntry): Promise<Key>;
198
+ set(key: Key, data: IDstoreEntry): Promise<Key>;
194
199
  /** `save()` is compatible to [Datastore.save()](https://cloud.google.com/nodejs/docs/reference/datastore/latest/datastore/datastore#_google_cloud_datastore_Datastore_save_member_1_).
195
200
  *
196
201
  * The single Parameter is a list of [[DstoreSaveEntity]]s.
@@ -262,9 +267,10 @@ export declare class Dstore implements IDstore {
262
267
  * @param kind Name of the [[Datastore]][Kind](https://cloud.google.com/datastore/docs/concepts/entities#kinds_and_identifiers) ("Table") which should be searched.
263
268
  *
264
269
  * @category Datastore Drop-In
265
- */ createQuery(kind: string): Query;
270
+ */
271
+ createQuery(kind: string): Query;
266
272
  runQuery(query: Query | Omit<Query, 'run'>): Promise<RunQueryResponse>;
267
- query(kindName: string, filters?: TGqlFilterList, limit?: number, orders?: readonly string[]): Promise<RunQueryResponse>;
273
+ query(kindName: string, filters?: TGqlFilterList, limit?: number, ordering?: readonly string[], selection?: string[], cursor?: string): Promise<RunQueryResponse>;
268
274
  /** Allocate one ID in the Datastore.
269
275
  *
270
276
  * Currently (late 2021) there is no documentation provided by Google for the underlying node function.
@@ -285,7 +291,7 @@ export declare class Dstore implements IDstore {
285
291
 
286
292
  [[runInTransaction]] is modelled after Python 2.7 [ndb's `@ndb.transactional` feature](https://cloud.google.com/appengine/docs/standard/python/ndb/transactions). This is based on node's [AsyncLocalStorage](https://nodejs.org/docs/latest-v14.x/api/async_hooks.html).
287
293
 
288
- Transactions frequently fail if you try to access the same data via in a transaction. See the [Documentation on Locking](https://cloud.google.com/datastore/docs/concepts/transactions#transaction_locks) for further reference. You are advised to use [p-limit](https://github.com/sindresorhus/p-limit)(1) to seralize transactions touching the same resource. This should work nicely with node's single process model. It is a much bigger problem on shared-nothing approaches, like Python on App Engine.
294
+ Transactions frequently fail if you try to access the same data via in a transaction. See the [Documentation on Locking](https://cloud.google.com/datastore/docs/concepts/transactions#transaction_locks) for further reference. You are advised to use [p-limit](https://github.com/sindresorhus/p-limit)(1) to serialize transactions touching the same resource. This should work nicely with node's single process model. It is a much bigger problem on shared-nothing approaches, like Python on App Engine.
289
295
 
290
296
  Transactions might be wrapped in [p-retry](https://github.com/sindresorhus/p-retry) to implement automatically retrying them with exponential back-off should they fail due to contention.
291
297
  */