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.
@@ -6,19 +6,24 @@
6
6
  * In future https://github.com/graphql/dataloader might be used for batching.
7
7
  *
8
8
  * Created by Dr. Maximillian Dornseif 2021-12-05 in huwawi3backend 11.10.0
9
- * Copyright (c) Dr. Maximillian Dornseif
9
+ * Copyright (c) 2021 Dr. Maximillian Dornseif
10
10
  */
11
11
  import { AsyncLocalStorage } from 'async_hooks';
12
12
  import { Datastore, } from '@google-cloud/datastore';
13
13
  import { entity } from '@google-cloud/datastore/build/src/entity';
14
14
  import { assert, assertIsArray, assertIsDefined, assertIsNumber, assertIsObject, assertIsString, } from 'assertate';
15
- // import Debug from 'debug';
15
+ import Debug from 'debug';
16
16
  /** @ignore */
17
17
  export { Datastore, Key, Query, Transaction, } from '@google-cloud/datastore';
18
18
  /** @ignore */
19
- // const debug = Debug('h3:dstore');
19
+ const debug = Debug('ds:api');
20
20
  /** @ignore */
21
+ /** Use instead of Datastore.KEY
22
+ *
23
+ * Even better: use `_key` instead.
24
+ */
21
25
  const transactionAsyncLocalStorage = new AsyncLocalStorage();
26
+ export const KEYSYM = Datastore.KEY;
22
27
  /** Dstore implements a slightly more accessible version of the [Google Cloud Datastore: Node.js Client](https://cloud.google.com/nodejs/docs/reference/datastore/latest)
23
28
 
24
29
  [@google-cloud/datastore](https://github.com/googleapis/nodejs-datastore#readme) is a strange beast: [The documentation is auto generated](https://cloud.google.com/nodejs/docs/reference/datastore/latest) and completely shy of documenting any advanced concepts.
@@ -130,7 +135,7 @@ export class Dstore {
130
135
  if (!!x?.[Datastore.KEY] && x[Datastore.KEY]) {
131
136
  assertIsDefined(x[Datastore.KEY]);
132
137
  assertIsObject(x[Datastore.KEY]);
133
- // Scheinbar stolpert TypesScript über Symbole als Attribut
138
+ // Old TypesScript has problems with symbols as a property
134
139
  x._keyStr = this.keySerialize(x[Datastore.KEY]);
135
140
  }
136
141
  });
@@ -154,8 +159,8 @@ export class Dstore {
154
159
  async get(key) {
155
160
  assertIsObject(key);
156
161
  assert(!Array.isArray(key));
157
- const getresult = await this.getMulti([key]);
158
- return getresult?.[0] || null;
162
+ const result = await this.getMulti([key]);
163
+ return result?.[0] || null;
159
164
  }
160
165
  /** `getMulti()` reads several [[DstoreEntry]]s from the Datastore.
161
166
  *
@@ -232,7 +237,7 @@ export class Dstore {
232
237
  async save(entities) {
233
238
  assertIsArray(entities);
234
239
  try {
235
- // Innerhalb von Transaktionen bekommen wir keine Antwort!
240
+ // Within Transaction we dont get any answer here!
236
241
  // [ { mutationResults: [ [Object], [Object] ], indexUpdates: 51 } ]
237
242
  for (const e of entities) {
238
243
  assertIsObject(e.key);
@@ -332,8 +337,14 @@ export class Dstore {
332
337
  * @param kind Name of the [[Datastore]][Kind](https://cloud.google.com/datastore/docs/concepts/entities#kinds_and_identifiers) ("Table") which should be searched.
333
338
  *
334
339
  * @category Datastore Drop-In
335
- */ createQuery(kind) {
336
- return this.getDoT().createQuery(kind);
340
+ */
341
+ createQuery(kind) {
342
+ try {
343
+ return this.getDoT().createQuery(kind);
344
+ }
345
+ catch (error) {
346
+ throw new DstoreError('datastore.createQuery error', error);
347
+ }
337
348
  }
338
349
  async runQuery(query) {
339
350
  try {
@@ -345,32 +356,35 @@ export class Dstore {
345
356
  // throw process.env.NODE_ENV === 'test' ? error : new KvStoreError('datastore.runQuery error', error)
346
357
  }
347
358
  }
348
- async query(kindName, filters = [], limit = 2500, orders = []) {
359
+ async query(kindName, filters = [], limit = 2500, ordering = [], selection = [], cursor) {
349
360
  assertIsString(kindName);
350
361
  assertIsArray(filters);
351
362
  assertIsNumber(limit);
352
363
  try {
353
364
  const q = this.createQuery(kindName);
354
- for (const fspec of filters) {
355
- q.filter(...fspec);
365
+ for (const filterSpec of filters) {
366
+ q.filter(...filterSpec);
356
367
  }
357
- for (const orderField of orders) {
368
+ for (const orderField of ordering) {
358
369
  q.order(orderField);
359
370
  }
360
371
  if (limit > 0) {
361
372
  q.limit(limit);
362
373
  }
374
+ if (selection.length > 0) {
375
+ q.select(selection);
376
+ }
363
377
  return await this.runQuery(q);
364
378
  }
365
379
  catch (error) {
366
- console.error(error, { kindName, filters, limit, orders });
380
+ console.error(error, { kindName, filters, limit, ordering });
367
381
  throw process.env.NODE_ENV === 'test'
368
382
  ? error
369
383
  : new DstoreError('datastore.query error', error, {
370
384
  kindName,
371
385
  filters,
372
386
  limit,
373
- orders,
387
+ ordering,
374
388
  });
375
389
  }
376
390
  }
@@ -399,7 +413,7 @@ export class Dstore {
399
413
 
400
414
  [[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).
401
415
 
402
- 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.
416
+ 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.
403
417
 
404
418
  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.
405
419
  */
@@ -407,25 +421,15 @@ export class Dstore {
407
421
  let ret;
408
422
  const transaction = this.datastore.transaction();
409
423
  await transactionAsyncLocalStorage.run(transaction, async () => {
410
- const [transactionInfo, _transactionRunApiResponse] = await transaction.run();
424
+ const [transactionInfo, transactionRunApiResponse] = await transaction.run();
411
425
  let commitApiResponse;
412
426
  try {
413
427
  ret = await func();
414
428
  }
415
429
  catch (error) {
416
- const _rollbackInfo = await transaction.rollback();
417
- // logger.info(
418
- // {
419
- // err: error,
420
- // transactionInfo,
421
- // transactionRunApiResponse,
422
- // rollbackInfo,
423
- // ret,
424
- // commitApiResponse,
425
- // },
426
- // 'Transaction failed'
427
- // );
428
- // console.error(error)
430
+ const rollbackInfo = await transaction.rollback();
431
+ debug('Transaction failed, rollback initiated: %O %O %O %O', transactionInfo, transactionRunApiResponse, rollbackInfo, error);
432
+ console.error(error);
429
433
  throw process.env.NODE_ENV === 'test'
430
434
  ? error
431
435
  : new DstoreError('datastore.transaction execution error', error);
@@ -434,17 +438,7 @@ export class Dstore {
434
438
  commitApiResponse = await transaction.commit()[0];
435
439
  }
436
440
  catch (error) {
437
- // logger.info(
438
- // {
439
- // err: error,
440
- // transactionInfo,
441
- // transactionRunApiResponse,
442
- // ret,
443
- // commitApiResponse,
444
- // },
445
- // 'Transaction commit failed'
446
- // );
447
- // console.error(error)
441
+ debug('Transaction commit failed: %O %O %O %O ret: %O', transactionInfo, transactionRunApiResponse, commitApiResponse, error, ret);
448
442
  throw process.env.NODE_ENV === 'test'
449
443
  ? error
450
444
  : new DstoreError('datastore.transaction execution error', error);
@@ -471,4 +465,4 @@ export class DstoreError extends Error {
471
465
  // logger.error({ err: originalError, extensions }, message);
472
466
  }
473
467
  }
474
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHN0b3JlLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvZHN0b3JlLWFwaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7O0dBU0c7QUFFSCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFaEQsT0FBTyxFQUNMLFNBQVMsR0FLVixNQUFNLHlCQUF5QixDQUFDO0FBQ2pDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQU1sRSxPQUFPLEVBQ0wsTUFBTSxFQUNOLGFBQWEsRUFDYixlQUFlLEVBQ2YsY0FBYyxFQUNkLGNBQWMsRUFDZCxjQUFjLEdBQ2YsTUFBTSxXQUFXLENBQUM7QUFHbkIsNkJBQTZCO0FBRTdCLGNBQWM7QUFDZCxPQUFPLEVBQ0wsU0FBUyxFQUNULEdBQUcsRUFFSCxLQUFLLEVBQ0wsV0FBVyxHQUNaLE1BQU0seUJBQXlCLENBQUM7QUFFakMsY0FBYztBQUNkLG9DQUFvQztBQUVwQyxjQUFjO0FBQ2QsTUFBTSw0QkFBNEIsR0FBRyxJQUFJLGlCQUFpQixFQUFFLENBQUM7QUFvRjdEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0VBc0JFO0FBQ0YsTUFBTSxPQUFPLE1BQU07SUFtQk47SUFDQTtJQUNBO0lBcEJNLFVBQVUsR0FBRyxJQUFJLE1BQU0sQ0FBQyxVQUFVLEVBQUUsQ0FBQztJQUV0RDs7Ozs7Ozs7Ozs7Ozs7TUFjRTtJQUNGLFlBQ1csU0FBb0IsRUFDcEIsU0FBa0IsRUFDbEIsTUFBZTtRQUZmLGNBQVMsR0FBVCxTQUFTLENBQVc7UUFDcEIsY0FBUyxHQUFULFNBQVMsQ0FBUztRQUNsQixXQUFNLEdBQU4sTUFBTSxDQUFTO1FBRXhCLGNBQWMsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUM1QixDQUFDO0lBRUQscURBQXFEO0lBQzdDLE1BQU07UUFDWixPQUFPLENBQ0osNEJBQTRCLENBQUMsUUFBUSxFQUFrQixJQUFJLElBQUks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
468
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHN0b3JlLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvZHN0b3JlLWFwaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7O0dBU0c7QUFFSCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFaEQsT0FBTyxFQUNMLFNBQVMsR0FLVixNQUFNLHlCQUF5QixDQUFDO0FBQ2pDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQU1sRSxPQUFPLEVBQ0wsTUFBTSxFQUNOLGFBQWEsRUFDYixlQUFlLEVBQ2YsY0FBYyxFQUNkLGNBQWMsRUFDZCxjQUFjLEdBQ2YsTUFBTSxXQUFXLENBQUM7QUFDbkIsT0FBTyxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBRzFCLGNBQWM7QUFDZCxPQUFPLEVBQ0wsU0FBUyxFQUNULEdBQUcsRUFFSCxLQUFLLEVBQ0wsV0FBVyxHQUNaLE1BQU0seUJBQXlCLENBQUM7QUFFakMsY0FBYztBQUNkLE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUU5QixjQUFjO0FBRWQ7OztHQUdHO0FBQ0gsTUFBTSw0QkFBNEIsR0FBRyxJQUFJLGlCQUFpQixFQUFFLENBQUM7QUFFN0QsTUFBTSxDQUFDLE1BQU0sTUFBTSxHQUFHLFNBQVMsQ0FBQyxHQUFHLENBQUM7QUFxRnBDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0VBc0JFO0FBQ0YsTUFBTSxPQUFPLE1BQU07SUFtQk47SUFDQTtJQUNBO0lBcEJNLFVBQVUsR0FBRyxJQUFJLE1BQU0sQ0FBQyxVQUFVLEVBQUUsQ0FBQztJQUV0RDs7Ozs7Ozs7Ozs7Ozs7TUFjRTtJQUNGLFlBQ1csU0FBb0IsRUFDcEIsU0FBa0IsRUFDbEIsTUFBZTtRQUZmLGNBQVMsR0FBVCxTQUFTLENBQVc7UUFDcEIsY0FBUyxHQUFULFNBQVMsQ0FBUztRQUNsQixXQUFNLEdBQU4sTUFBTSxDQUFT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
@@ -1,55 +1,50 @@
1
1
  /*
2
2
  * dstore-api.test.ts
3
3
  *
4
- * Created by Dr. Maximillian Dornseif 2021-12-10 in huwawi3backend 11.10.0
5
- * Copyright (c) 2021 HUDORA GmbH
4
+ * Created by Dr. Maximilian Dornseif 2021-12-10 in huwawi3backend 11.10.0
5
+ * Copyright (c) 2021 Dr. Maximilian Dornseif
6
6
  */
7
7
  import { Datastore } from '@google-cloud/datastore';
8
- // import { assertIsObject, isNumber } from 'assertate';
9
8
  import test from 'ava';
9
+ import Emulator from 'google-datastore-emulator';
10
10
  import { Dstore } from './dstore-api';
11
+ process.env.GCLOUD_PROJECT = 'project-id'; // Set the datastore project Id globally
12
+ let emulator;
13
+ test.before(async (_t) => {
14
+ emulator = new Emulator({ useDocker: false, debug: false });
15
+ await emulator.start();
16
+ });
17
+ test.after('cleanup', async (_t) => {
18
+ await emulator.stop();
19
+ });
11
20
  function getDstore(projectId) {
12
21
  return new Dstore(new Datastore({ projectId }));
13
22
  }
14
23
  test('keySerialize', async (t) => {
15
- const kvStore = getDstore('huwawi3Datastore');
16
- t.deepEqual(kvStore.key(['testYodel', 123]), {
24
+ const kvStore = getDstore('test');
25
+ t.deepEqual(kvStore.key(['testYodel', 123]).path, ['testYodel', 123]);
26
+ t.deepEqual(JSON.parse(JSON.stringify(kvStore.key(['testYodel', 123]))), {
17
27
  id: 123,
18
28
  kind: 'testYodel',
19
- namespace: undefined,
20
29
  path: ['testYodel', 123],
21
30
  });
22
- t.deepEqual(kvStore.key(['testYodel', 123]).path, ['testYodel', 123]);
23
- t.deepEqual(kvStore.key(['testYodel', 123]).serialized, {
24
- namespace: 'undefined',
25
- path: [
26
- 'testYodel',
27
- {
28
- type: 'DatastoreInt',
29
- value: '123',
30
- },
31
- ],
32
- });
33
31
  const ser = kvStore.keySerialize(kvStore.key(['testYodel', 123]));
34
- t.deepEqual(ser, 'agdodXdhd2kzcg8LEgl0ZXN0WW9kZWwYewyiAQR0ZXN0');
35
- t.deepEqual(kvStore.keyFromSerialized(ser), {
32
+ t.deepEqual(ser, 'agByDwsSCXRlc3RZb2RlbBh7DA');
33
+ t.deepEqual(JSON.parse(JSON.stringify(kvStore.keyFromSerialized(ser))), {
36
34
  id: '123',
37
35
  kind: 'testYodel',
38
- namespace: 'undefined',
39
36
  path: ['testYodel', '123'],
40
37
  });
41
38
  });
42
- // it("allocation", async () => {
43
- // expect.assertions(1);
44
- // const kvStore = getDstore("huwawi3Datastore");
45
- // const id = await kvStore.allocateOneId();
46
- // expect(id).toMatch(/\d+/);
47
- // });
48
- // });
49
- // describe("Lesen", () => {
50
- // it("get numid", async () => {
39
+ test('allocation', async (t) => {
40
+ const kvStore = getDstore('test');
41
+ const id = await kvStore.allocateOneId();
42
+ t.regex(id, /\d+/);
43
+ });
44
+ // describe("Read", () => {
45
+ // it("get num_id", async () => {
51
46
  // expect.assertions(10);
52
- // const kvStore = getDstore("huwawi3Datastore");
47
+ // const kvStore = getDstore("test");
53
48
  // const entity = { key: kvStore.key(["testYodel", 2]), data: { foo: "bar" } };
54
49
  // const entity2 = { key: kvStore.key(["testYodel", 3]), data: { foo: "bar" } };
55
50
  // const commitResponse = await kvStore.save([entity, entity2]);
@@ -105,7 +100,7 @@ test('keySerialize', async (t) => {
105
100
  // assertIsObject(result);
106
101
  // expect(kvStore.readKey(result)).toBeInstanceOf(Key);
107
102
  // const result2 = await kvStore.getMulti([entity.key]);
108
- // // getMulti returns a Array even foir single keys
103
+ // // getMulti returns a Array even for single keys
109
104
  // expect(result2).toMatchInlineSnapshot(`
110
105
  // Array [
111
106
  // Object {
@@ -192,8 +187,8 @@ test('keySerialize', async (t) => {
192
187
  // },
193
188
  // ]
194
189
  // `);
195
- // const result5 = await kvStore.getMulti([entity.key, kvStore.key(["YodelGibtEsNicht", 3])]);
196
- // // getMulti returns a Array but obmits unknown keys
190
+ // const result5 = await kvStore.getMulti([entity.key, kvStore.key(["YodelNotThere", 3])]);
191
+ // // getMulti returns a Array but omits unknown keys
197
192
  // // expect(Array.isArray(result)).toBeTruthy();
198
193
  // expect(result5).toMatchInlineSnapshot(`
199
194
  // Array [
@@ -220,7 +215,7 @@ test('keySerialize', async (t) => {
220
215
  // it("get name", async () => {
221
216
  // expect.assertions(3);
222
217
  // const kvStore = getDstore("huwawi3Datastore");
223
- // const entity = { key: kvStore.key(["testYodel", "zwei"]), data: { foo: "bar" } };
218
+ // const entity = { key: kvStore.key(["testYodel", "two"]), data: { foo: "bar" } };
224
219
  // const commitResponse = await kvStore.save([entity]);
225
220
  // expect(commitResponse?.[0]?.indexUpdates).toBe(3);
226
221
  // // expect(commitResponse).toMatchInlineSnapshot(`
@@ -244,11 +239,11 @@ test('keySerialize', async (t) => {
244
239
  // },
245
240
  // "key": Key {
246
241
  // "kind": "testYodel",
247
- // "name": "zwei",
242
+ // "name": "two",
248
243
  // "namespace": "test",
249
244
  // "path": Array [
250
245
  // "testYodel",
251
- // "zwei",
246
+ // "two",
252
247
  // ],
253
248
  // },
254
249
  // }
@@ -260,71 +255,41 @@ test('keySerialize', async (t) => {
260
255
  // "foo": "bar",
261
256
  // Symbol(KEY): Key {
262
257
  // "kind": "testYodel",
263
- // "name": "zwei",
258
+ // "name": "two",
264
259
  // "namespace": "test",
265
260
  // "path": Array [
266
261
  // "testYodel",
267
- // "zwei",
262
+ // "two",
268
263
  // ],
269
264
  // },
270
265
  // }
271
266
  // `);
272
267
  // });
273
- // it("query", async () => {
274
- // expect.assertions(5);
275
- // const kvStore = getDstore("huwawi3Datastore");
276
- // const entity = { key: kvStore.key(["testYodel", 3]), data: { foo: "bar" } };
277
- // const data = await kvStore.save([entity]);
278
- // const query = kvStore.createQuery("testYodel");
279
- // query.limit(1);
280
- // const [entities, runQueryInfo] = await kvStore.runQuery(query);
281
- // expect(entities.length).toBe(1);
282
- // expect(entities?.[0]?.foo).toMatchInlineSnapshot(`"bar"`);
283
- // expect(entities?.[0]?.[Datastore.KEY]?.kind).toMatchInlineSnapshot(`"testYodel"`);
284
- // // expect(entities).toMatchInlineSnapshot(`
285
- // // Array [
286
- // // Object {
287
- // // "foo": "bar",
288
- // // Symbol(KEY): Key {
289
- // // "id": "3",
290
- // // "kind": "testYodel",
291
- // // "namespace": "test",
292
- // // "path": Array [
293
- // // "testYodel",
294
- // // "3",
295
- // // ],
296
- // // },
297
- // // },
298
- // // ]
299
- // // `);
300
- // expect(runQueryInfo).toMatchInlineSnapshot(
301
- // { endCursor: expect.any(String) },
302
- // `
303
- // Object {
304
- // "endCursor": Any<String>,
305
- // "moreResults": "MORE_RESULTS_AFTER_LIMIT",
306
- // }
307
- // `
308
- // );
309
- // const result2 = await kvStore.query("testYodel", [], 1);
310
- // expect(result2[0]).toMatchInlineSnapshot(`
311
- // Array [
312
- // Object {
313
- // "foo": "bar",
314
- // Symbol(KEY): Key {
315
- // "id": "2",
316
- // "kind": "testYodel",
317
- // "namespace": "test",
318
- // "path": Array [
319
- // "testYodel",
320
- // "2",
321
- // ],
322
- // },
323
- // },
324
- // ]
325
- // `);
326
- // });
327
- // });
268
+ test('query', async (t) => {
269
+ const kvStore = getDstore('test');
270
+ const entity = {
271
+ key: kvStore.key(['testYodel', '3']),
272
+ data: { foo: 'bar', baz: 'baz' },
273
+ };
274
+ // legacy interface
275
+ await kvStore.save([entity]);
276
+ const query = kvStore.createQuery('testYodel');
277
+ query.limit(1);
278
+ const [entities, runQueryInfo] = await kvStore.runQuery(query);
279
+ t.is(entities.length, 1);
280
+ t.is(entities?.[0]?.foo, 'bar');
281
+ t.is(entities?.[0]?.[Datastore.KEY]?.kind, 'testYodel');
282
+ t.is(runQueryInfo?.moreResults, 'MORE_RESULTS_AFTER_LIMIT');
283
+ // modern interface
284
+ const [result2] = await kvStore.query('testYodel', [], 1, [], ['baz']);
285
+ t.is(result2.length, 1);
286
+ // foo is removed by selection
287
+ t.deepEqual(JSON.parse(JSON.stringify(result2?.[0])), {
288
+ baz: 'baz',
289
+ });
290
+ const key = kvStore.readKey(result2?.[0]);
291
+ t.is(key.id, entity.key.id);
292
+ });
328
293
  // describe("Writing", () => {
329
294
  // it("save / upsert", async () => {
330
295
  // expect.assertions(2);
@@ -352,8 +317,8 @@ test('keySerialize', async (t) => {
352
317
  // it("update", async () => {
353
318
  // expect.assertions(3);
354
319
  // const kvStore = getDstore("huwawi3Datastore");
355
- // const keyname = `4insert${Math.random()}`;
356
- // const entity = { key: kvStore.key(["testYodel", keyname]), data: { foo: "bar" } };
320
+ // const keyName = `4insert${Math.random()}`;
321
+ // const entity = { key: kvStore.key(["testYodel", keyName]), data: { foo: "bar" } };
357
322
  // // const request = kvStore.update([entity]);
358
323
  // // await expect(request).rejects.toThrowError(Error);
359
324
  // const commitResponse = await kvStore.save([entity]);
@@ -397,8 +362,8 @@ test('keySerialize', async (t) => {
397
362
  // it("insert", async () => {
398
363
  // expect.assertions(4);
399
364
  // const kvStore = getDstore("huwawi3Datastore");
400
- // const keyname = `3insert${Math.random()}`;
401
- // const entity = { key: kvStore.key(["testYodel", keyname]), data: { foo: "bar" } };
365
+ // const keyName = `3insert${Math.random()}`;
366
+ // const entity = { key: kvStore.key(["testYodel", keyName]), data: { foo: "bar" } };
402
367
  // const commitResponse = await kvStore.insert([entity]);
403
368
  // if (commitResponse?.[0]?.mutationResults?.[0]?.version) {
404
369
  // commitResponse[0].mutationResults[0].version = 2;
@@ -418,7 +383,7 @@ test('keySerialize', async (t) => {
418
383
  // }
419
384
  // `
420
385
  // );
421
- // expect(entity.key.name).toMatch(keyname);
386
+ // expect(entity.key.name).toMatch(keyName);
422
387
  // expect(entity.key.kind).toMatchInlineSnapshot(`"testYodel"`);
423
388
  // const request = kvStore.insert([entity]);
424
389
  // await expect(request).rejects.toThrowError(Error);
@@ -479,4 +444,4 @@ test('keySerialize', async (t) => {
479
444
  // expect(t).toThrow(DstoreError);
480
445
  // });
481
446
  // });
482
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHN0b3JlLWFwaS5zcGVjLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9kc3RvcmUtYXBpLnNwZWMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7O0dBS0c7QUFFSCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDcEQsd0RBQXdEO0FBQ3hELE9BQU8sSUFBSSxNQUFNLEtBQUssQ0FBQztBQUV2QixPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBRXRDLFNBQVMsU0FBUyxDQUFDLFNBQVM7SUFDMUIsT0FBTyxJQUFJLE1BQU0sQ0FBQyxJQUFJLFNBQVMsQ0FBQyxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUNsRCxDQUFDO0FBRUQsSUFBSSxDQUFDLGNBQWMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLEVBQUU7SUFDL0IsTUFBTSxPQUFPLEdBQUcsU0FBUyxDQUFDLGtCQUFrQixDQUFDLENBQUM7SUFDOUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsV0FBVyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUU7UUFDM0MsRUFBRSxFQUFFLEdBQVU7UUFDZCxJQUFJLEVBQUUsV0FBVztRQUNqQixTQUFTLEVBQUUsU0FBUztRQUNwQixJQUFJLEVBQUUsQ0FBQyxXQUFXLEVBQUUsR0FBRyxDQUFDO0tBQ2xCLENBQUMsQ0FBQztJQUNWLENBQUMsQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFdBQVcsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLFdBQVcsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ3RFLENBQUMsQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFdBQVcsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLFVBQVUsRUFBRTtRQUN0RCxT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
447
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHN0b3JlLWFwaS5zcGVjLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9kc3RvcmUtYXBpLnNwZWMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7O0dBS0c7QUFFSCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDcEQsT0FBTyxJQUFJLE1BQU0sS0FBSyxDQUFDO0FBQ3ZCLE9BQU8sUUFBUSxNQUFNLDJCQUEyQixDQUFDO0FBRWpELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFFdEMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxjQUFjLEdBQUcsWUFBWSxDQUFDLENBQUMsd0NBQXdDO0FBQ25GLElBQUksUUFBUSxDQUFDO0FBRWIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsRUFBRSxFQUFFLEVBQUU7SUFDdkIsUUFBUSxHQUFHLElBQUksUUFBUSxDQUFDLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztJQUM1RCxNQUFNLFFBQVEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUN6QixDQUFDLENBQUMsQ0FBQztBQUVILElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsRUFBRTtJQUNqQyxNQUFNLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQztBQUVILFNBQVMsU0FBUyxDQUFDLFNBQVM7SUFDMUIsT0FBTyxJQUFJLE1BQU0sQ0FBQyxJQUFJLFNBQVMsQ0FBQyxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUNsRCxDQUFDO0FBRUQsSUFBSSxDQUFDLGNBQWMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLEVBQUU7SUFDL0IsTUFBTSxPQUFPLEdBQUcsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ2xDLENBQUMsQ0FBQyxT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
package/package.json CHANGED
@@ -1,11 +1,12 @@
1
1
  {
2
2
  "name": "datastore-api",
3
- "version": "1.0.2",
3
+ "version": "1.2.0",
4
4
  "description": "Simplified, more consitent API for Google Cloud Datastore",
5
5
  "main": "build/main/index.js",
6
6
  "typings": "build/main/index.d.ts",
7
7
  "module": "build/module/index.js",
8
8
  "repository": "https://github.com/mdornseif/datastore-api",
9
+ "homepage": "http://mdornseif.io/datastore-api/",
9
10
  "license": "MIT",
10
11
  "keywords": [
11
12
  "datastore"
@@ -31,7 +32,7 @@
31
32
  "cov:html": "nyc report --reporter=html",
32
33
  "cov:lcov": "nyc report --reporter=lcov",
33
34
  "cov:send": "run-s cov:lcov && codecov",
34
- "cov:check": "nyc report && nyc check-coverage --lines 100 --functions 100 --branches 100",
35
+ "cov:check": "nyc report && nyc check-coverage --lines 50 --functions 20 --branches 20",
35
36
  "doc": "run-s doc:html && open-cli build/docs/index.html",
36
37
  "doc:html": "typedoc src/ --exclude **/*.spec.ts --out build/docs",
37
38
  "doc:json": "typedoc src/ --exclude **/*.spec.ts --json build/docs/typedoc.json",
@@ -44,7 +45,8 @@
44
45
  "node": ">=10"
45
46
  },
46
47
  "dependencies": {
47
- "assertate": "^2.4.0"
48
+ "assertate": "^2.4.0",
49
+ "google-datastore-emulator": "^5.1.0"
48
50
  },
49
51
  "devDependencies": {
50
52
  "@ava/typescript": "^1.1.1",