datastore-api 1.0.2

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.
@@ -0,0 +1,482 @@
1
+ /*
2
+ * dstore-api.test.ts
3
+ *
4
+ * Created by Dr. Maximillian Dornseif 2021-12-10 in huwawi3backend 11.10.0
5
+ * Copyright (c) 2021 HUDORA GmbH
6
+ */
7
+ import { Datastore } from '@google-cloud/datastore';
8
+ // import { assertIsObject, isNumber } from 'assertate';
9
+ import test from 'ava';
10
+ import { Dstore } from './dstore-api';
11
+ function getDstore(projectId) {
12
+ return new Dstore(new Datastore({ projectId }));
13
+ }
14
+ test('keySerialize', async (t) => {
15
+ const kvStore = getDstore('huwawi3Datastore');
16
+ t.deepEqual(kvStore.key(['testYodel', 123]), {
17
+ id: 123,
18
+ kind: 'testYodel',
19
+ namespace: undefined,
20
+ path: ['testYodel', 123],
21
+ });
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
+ const ser = kvStore.keySerialize(kvStore.key(['testYodel', 123]));
34
+ t.deepEqual(ser, 'agdodXdhd2kzcg8LEgl0ZXN0WW9kZWwYewyiAQR0ZXN0');
35
+ t.deepEqual(kvStore.keyFromSerialized(ser), {
36
+ id: '123',
37
+ kind: 'testYodel',
38
+ namespace: 'undefined',
39
+ path: ['testYodel', '123'],
40
+ });
41
+ });
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 () => {
51
+ // expect.assertions(10);
52
+ // const kvStore = getDstore("huwawi3Datastore");
53
+ // const entity = { key: kvStore.key(["testYodel", 2]), data: { foo: "bar" } };
54
+ // const entity2 = { key: kvStore.key(["testYodel", 3]), data: { foo: "bar" } };
55
+ // const commitResponse = await kvStore.save([entity, entity2]);
56
+ // expect(isNumber(commitResponse?.[0]?.indexUpdates)).toBeTruthy();
57
+ // // expect(commitResponse).toMatchInlineSnapshot(`
58
+ // // Array [
59
+ // // Object {
60
+ // // "indexUpdates": 0,
61
+ // // "mutationResults": Array [
62
+ // // Object {
63
+ // // "conflictDetected": false,
64
+ // // "key": null,
65
+ // // "version": "1234567890123456",
66
+ // // },
67
+ // // ],
68
+ // // },
69
+ // // ]
70
+ // // `);
71
+ // expect(entity).toMatchInlineSnapshot(`
72
+ // Object {
73
+ // "data": Object {
74
+ // "foo": "bar",
75
+ // },
76
+ // "key": Key {
77
+ // "id": 2,
78
+ // "kind": "testYodel",
79
+ // "namespace": "test",
80
+ // "path": Array [
81
+ // "testYodel",
82
+ // 2,
83
+ // ],
84
+ // },
85
+ // }
86
+ // `);
87
+ // const result = await kvStore.get(entity.key);
88
+ // // get returns a single Entity
89
+ // expect(Array.isArray(result)).toBeFalsy();
90
+ // expect(result).toMatchInlineSnapshot(`
91
+ // Object {
92
+ // "_keyStr": "agdodXdhd2kzcg8LEgl0ZXN0WW9kZWwYAgyiAQR0ZXN0",
93
+ // "foo": "bar",
94
+ // Symbol(KEY): Key {
95
+ // "id": "2",
96
+ // "kind": "testYodel",
97
+ // "namespace": "test",
98
+ // "path": Array [
99
+ // "testYodel",
100
+ // "2",
101
+ // ],
102
+ // },
103
+ // }
104
+ // `);
105
+ // assertIsObject(result);
106
+ // expect(kvStore.readKey(result)).toBeInstanceOf(Key);
107
+ // const result2 = await kvStore.getMulti([entity.key]);
108
+ // // getMulti returns a Array even foir single keys
109
+ // expect(result2).toMatchInlineSnapshot(`
110
+ // Array [
111
+ // Object {
112
+ // "_keyStr": "agdodXdhd2kzcg8LEgl0ZXN0WW9kZWwYAgyiAQR0ZXN0",
113
+ // "foo": "bar",
114
+ // Symbol(KEY): Key {
115
+ // "id": "2",
116
+ // "kind": "testYodel",
117
+ // "namespace": "test",
118
+ // "path": Array [
119
+ // "testYodel",
120
+ // "2",
121
+ // ],
122
+ // },
123
+ // },
124
+ // ]
125
+ // `);
126
+ // const result3 = await kvStore.getMulti([entity.key, kvStore.key(["testYodel", 3])]);
127
+ // // getMulti returns a Array with multiple keys
128
+ // // expect(Array.isArray(result)).toBeTruthy();
129
+ // expect(result3).toMatchInlineSnapshot(`
130
+ // Array [
131
+ // Object {
132
+ // "_keyStr": "agdodXdhd2kzcg8LEgl0ZXN0WW9kZWwYAgyiAQR0ZXN0",
133
+ // "foo": "bar",
134
+ // Symbol(KEY): Key {
135
+ // "id": "2",
136
+ // "kind": "testYodel",
137
+ // "namespace": "test",
138
+ // "path": Array [
139
+ // "testYodel",
140
+ // "2",
141
+ // ],
142
+ // },
143
+ // },
144
+ // Object {
145
+ // "_keyStr": "agdodXdhd2kzcg8LEgl0ZXN0WW9kZWwYAwyiAQR0ZXN0",
146
+ // "foo": "bar",
147
+ // Symbol(KEY): Key {
148
+ // "id": "3",
149
+ // "kind": "testYodel",
150
+ // "namespace": "test",
151
+ // "path": Array [
152
+ // "testYodel",
153
+ // "3",
154
+ // ],
155
+ // },
156
+ // },
157
+ // ]
158
+ // `);
159
+ // const result4 = await kvStore.getMulti([entity.key, entity.key]);
160
+ // // getMulti returns a Array but collapses duplicate keys
161
+ // // expect(Array.isArray(result)).toBeTruthy();
162
+ // // Firestore in Datastore returns the entity once
163
+ // // Datastore Emulator returns the Entity twice
164
+ // // kvStore should normalize that.
165
+ // expect(result4).toMatchInlineSnapshot(`
166
+ // Array [
167
+ // Object {
168
+ // "_keyStr": "agdodXdhd2kzcg8LEgl0ZXN0WW9kZWwYAgyiAQR0ZXN0",
169
+ // "foo": "bar",
170
+ // Symbol(KEY): Key {
171
+ // "id": "2",
172
+ // "kind": "testYodel",
173
+ // "namespace": "test",
174
+ // "path": Array [
175
+ // "testYodel",
176
+ // "2",
177
+ // ],
178
+ // },
179
+ // },
180
+ // Object {
181
+ // "_keyStr": "agdodXdhd2kzcg8LEgl0ZXN0WW9kZWwYAgyiAQR0ZXN0",
182
+ // "foo": "bar",
183
+ // Symbol(KEY): Key {
184
+ // "id": "2",
185
+ // "kind": "testYodel",
186
+ // "namespace": "test",
187
+ // "path": Array [
188
+ // "testYodel",
189
+ // "2",
190
+ // ],
191
+ // },
192
+ // },
193
+ // ]
194
+ // `);
195
+ // const result5 = await kvStore.getMulti([entity.key, kvStore.key(["YodelGibtEsNicht", 3])]);
196
+ // // getMulti returns a Array but obmits unknown keys
197
+ // // expect(Array.isArray(result)).toBeTruthy();
198
+ // expect(result5).toMatchInlineSnapshot(`
199
+ // Array [
200
+ // Object {
201
+ // "_keyStr": "agdodXdhd2kzcg8LEgl0ZXN0WW9kZWwYAgyiAQR0ZXN0",
202
+ // "foo": "bar",
203
+ // Symbol(KEY): Key {
204
+ // "id": "2",
205
+ // "kind": "testYodel",
206
+ // "namespace": "test",
207
+ // "path": Array [
208
+ // "testYodel",
209
+ // "2",
210
+ // ],
211
+ // },
212
+ // },
213
+ // ]
214
+ // `);
215
+ // const result6 = await kvStore.getMulti([]);
216
+ // // getMulti returns a empty Array for an empty array
217
+ // // expect(Array.isArray(result)).toBeTruthy();
218
+ // expect(result6).toMatchInlineSnapshot(`Array []`);
219
+ // });
220
+ // it("get name", async () => {
221
+ // expect.assertions(3);
222
+ // const kvStore = getDstore("huwawi3Datastore");
223
+ // const entity = { key: kvStore.key(["testYodel", "zwei"]), data: { foo: "bar" } };
224
+ // const commitResponse = await kvStore.save([entity]);
225
+ // expect(commitResponse?.[0]?.indexUpdates).toBe(3);
226
+ // // expect(commitResponse).toMatchInlineSnapshot(`
227
+ // // Array [
228
+ // // Object {
229
+ // // "indexUpdates": 0,
230
+ // // "mutationResults": Array [
231
+ // // Object {
232
+ // // "conflictDetected": false,
233
+ // // "key": null,
234
+ // // "version": "1234567890123456",
235
+ // // },
236
+ // // ],
237
+ // // },
238
+ // // ]
239
+ // // `);
240
+ // expect(entity).toMatchInlineSnapshot(`
241
+ // Object {
242
+ // "data": Object {
243
+ // "foo": "bar",
244
+ // },
245
+ // "key": Key {
246
+ // "kind": "testYodel",
247
+ // "name": "zwei",
248
+ // "namespace": "test",
249
+ // "path": Array [
250
+ // "testYodel",
251
+ // "zwei",
252
+ // ],
253
+ // },
254
+ // }
255
+ // `);
256
+ // const result = await kvStore.get(entity.key);
257
+ // expect(result).toMatchInlineSnapshot(`
258
+ // Object {
259
+ // "_keyStr": "agdodXdhd2kzchMLEgl0ZXN0WW9kZWwiBHp3ZWkMogEEdGVzdA",
260
+ // "foo": "bar",
261
+ // Symbol(KEY): Key {
262
+ // "kind": "testYodel",
263
+ // "name": "zwei",
264
+ // "namespace": "test",
265
+ // "path": Array [
266
+ // "testYodel",
267
+ // "zwei",
268
+ // ],
269
+ // },
270
+ // }
271
+ // `);
272
+ // });
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
+ // });
328
+ // describe("Writing", () => {
329
+ // it("save / upsert", async () => {
330
+ // expect.assertions(2);
331
+ // const kvStore = getDstore("huwawi3Datastore");
332
+ // const entity = { key: kvStore.key(["testYodel", 3]), data: { foo: "bar" } };
333
+ // const result = await kvStore.save([entity]);
334
+ // // const result2 = await kvStore.upsert([entity]);
335
+ // expect(result?.[0]?.mutationResults?.[0]?.conflictDetected).toMatchInlineSnapshot(`false`);
336
+ // // expect(result).toMatchInlineSnapshot(`
337
+ // // Array [
338
+ // // Object {
339
+ // // "indexUpdates": 3
340
+ // // "mutationResults": Array [
341
+ // // Object {
342
+ // // "conflictDetected": false,
343
+ // // "key": null,
344
+ // // "version": "1234567890123456",
345
+ // // },
346
+ // // ],
347
+ // // },
348
+ // // ]
349
+ // // `);
350
+ // expect(entity.data[Datastore.KEY]).toMatchInlineSnapshot(`undefined`);
351
+ // });
352
+ // it("update", async () => {
353
+ // expect.assertions(3);
354
+ // const kvStore = getDstore("huwawi3Datastore");
355
+ // const keyname = `4insert${Math.random()}`;
356
+ // const entity = { key: kvStore.key(["testYodel", keyname]), data: { foo: "bar" } };
357
+ // // const request = kvStore.update([entity]);
358
+ // // await expect(request).rejects.toThrowError(Error);
359
+ // const commitResponse = await kvStore.save([entity]);
360
+ // // @ts-expect-error
361
+ // commitResponse[0].mutationResults[0].version = 2;
362
+ // expect(commitResponse?.[0]).toMatchInlineSnapshot(
363
+ // { indexUpdates: expect.any(Number) },
364
+ // `
365
+ // Object {
366
+ // "indexUpdates": Any<Number>,
367
+ // "mutationResults": Array [
368
+ // Object {
369
+ // "conflictDetected": false,
370
+ // "key": null,
371
+ // "version": 2,
372
+ // },
373
+ // ],
374
+ // }
375
+ // `
376
+ // );
377
+ // const commitResponse2 = await kvStore.update([entity]);
378
+ // if (commitResponse2?.[0]?.mutationResults?.[0]?.version) {
379
+ // commitResponse2[0].mutationResults[0].version = 2;
380
+ // }
381
+ // expect(commitResponse2).toMatchInlineSnapshot(`
382
+ // Array [
383
+ // Object {
384
+ // "indexUpdates": 0,
385
+ // "mutationResults": Array [
386
+ // Object {
387
+ // "conflictDetected": false,
388
+ // "key": null,
389
+ // "version": 2,
390
+ // },
391
+ // ],
392
+ // },
393
+ // ]
394
+ // `);
395
+ // expect(entity.data[Datastore.KEY]).toMatchInlineSnapshot(`undefined`);
396
+ // });
397
+ // it("insert", async () => {
398
+ // expect.assertions(4);
399
+ // const kvStore = getDstore("huwawi3Datastore");
400
+ // const keyname = `3insert${Math.random()}`;
401
+ // const entity = { key: kvStore.key(["testYodel", keyname]), data: { foo: "bar" } };
402
+ // const commitResponse = await kvStore.insert([entity]);
403
+ // if (commitResponse?.[0]?.mutationResults?.[0]?.version) {
404
+ // commitResponse[0].mutationResults[0].version = 2;
405
+ // }
406
+ // expect(commitResponse?.[0]).toMatchInlineSnapshot(
407
+ // { indexUpdates: expect.any(Number) },
408
+ // `
409
+ // Object {
410
+ // "indexUpdates": Any<Number>,
411
+ // "mutationResults": Array [
412
+ // Object {
413
+ // "conflictDetected": false,
414
+ // "key": null,
415
+ // "version": 2,
416
+ // },
417
+ // ],
418
+ // }
419
+ // `
420
+ // );
421
+ // expect(entity.key.name).toMatch(keyname);
422
+ // expect(entity.key.kind).toMatchInlineSnapshot(`"testYodel"`);
423
+ // const request = kvStore.insert([entity]);
424
+ // await expect(request).rejects.toThrowError(Error);
425
+ // // 6 ALREADY_EXISTS: entity already exists: app: "h~huwawi3"
426
+ // // name_space: "test"
427
+ // // path <
428
+ // // Element {
429
+ // // type: "testYodel"
430
+ // // id: 5
431
+ // // }
432
+ // // >
433
+ // });
434
+ // });
435
+ // describe("Transactions", () => {
436
+ // it("simple", async () => {
437
+ // expect.assertions(2);
438
+ // const kvStore = getDstore("huwawi3Datastore");
439
+ // const outerResult = await kvStore.runInTransaction<any>(async () => {
440
+ // // write inside the transaction
441
+ // const entity = { key: kvStore.key(["testYodel", 6]), data: { foo: "foobar" } };
442
+ // const innerResult = await kvStore.save([entity]);
443
+ // // save does not return anything within transactions
444
+ // expect(innerResult).toMatchInlineSnapshot(`undefined`);
445
+ // return 123;
446
+ // });
447
+ // expect(outerResult).toMatchInlineSnapshot(`123`);
448
+ // // this fails in the Datastore Emulator
449
+ // const entitiey = await kvStore.get(kvStore.key(["testYodel", 6]));
450
+ // // expect(entitiey).toMatchInlineSnapshot(`
451
+ // // Object {
452
+ // // "foo": "foobar",
453
+ // // Symbol(KEY): Key {
454
+ // // "id": "6",
455
+ // // "kind": "testYodel",
456
+ // // "namespace": "test",
457
+ // // "path": Array [
458
+ // // "testYodel",
459
+ // // "6",
460
+ // // ],
461
+ // // },
462
+ // // }
463
+ // // `);
464
+ // });
465
+ // it("throws", async () => {
466
+ // expect.assertions(1);
467
+ // const kvStore = getDstore("huwawi3Datastore");
468
+ // const request = kvStore.runInTransaction<any>(async () => {
469
+ // throw new DstoreError("TestError", undefined);
470
+ // });
471
+ // await expect(request).rejects.toThrowError(DstoreError);
472
+ // });
473
+ // });
474
+ // describe("Exceptions", () => {
475
+ // it("simple", async () => {
476
+ // const t = () => {
477
+ // throw new DstoreError("bla", undefined);
478
+ // };
479
+ // expect(t).toThrow(DstoreError);
480
+ // });
481
+ // });
482
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHN0b3JlLWFwaS5zcGVjLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9kc3RvcmUtYXBpLnNwZWMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7O0dBS0c7QUFFSCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDcEQsd0RBQXdEO0FBQ3hELE9BQU8sSUFBSSxNQUFNLEtBQUssQ0FBQztBQUV2QixPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBRXRDLFNBQVMsU0FBUyxDQUFDLFNBQVM7SUFDMUIsT0FBTyxJQUFJLE1BQU0sQ0FBQyxJQUFJLFNBQVMsQ0FBQyxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUNsRCxDQUFDO0FBRUQsSUFBSSxDQUFDLGNBQWMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLEVBQUU7SUFDL0IsTUFBTSxPQUFPLEdBQUcsU0FBUyxDQUFDLGtCQUFrQixDQUFDLENBQUM7SUFDOUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsV0FBVyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUU7UUFDM0MsRUFBRSxFQUFFLEdBQVU7UUFDZCxJQUFJLEVBQUUsV0FBVztRQUNqQixTQUFTLEVBQUUsU0FBUztRQUNwQixJQUFJLEVBQUUsQ0FBQyxXQUFXLEVBQUUsR0FBRyxDQUFDO0tBQ2xCLENBQUMsQ0FBQztJQUNWLENBQUMsQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFdBQVcsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLFdBQVcsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ3RFLENBQUMsQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFdBQVcsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLFVBQVUsRUFBRTtRQUN0RCxT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
package/package.json ADDED
@@ -0,0 +1,115 @@
1
+ {
2
+ "name": "datastore-api",
3
+ "version": "1.0.2",
4
+ "description": "Simplified, more consitent API for Google Cloud Datastore",
5
+ "main": "build/main/index.js",
6
+ "typings": "build/main/index.d.ts",
7
+ "module": "build/module/index.js",
8
+ "repository": "https://github.com/mdornseif/datastore-api",
9
+ "license": "MIT",
10
+ "keywords": [
11
+ "datastore"
12
+ ],
13
+ "scripts": {
14
+ "build": "run-p build:*",
15
+ "build:main": "tsc -p tsconfig.json",
16
+ "build:module": "tsc -p tsconfig.module.json",
17
+ "fix": "run-s fix:*",
18
+ "fix:prettier": "prettier \"src/**/*.ts\" --write",
19
+ "fix:lint": "eslint src --ext .ts --fix",
20
+ "test": "run-s build test:*",
21
+ "test:lint": "eslint src --ext .ts",
22
+ "test:prettier": "prettier \"src/**/*.ts\" --list-different",
23
+ "test:spelling": "cspell \"{README.md,.github/*.md,src/**/*.ts}\"",
24
+ "test:unit": "nyc --silent ava",
25
+ "check-cli": "run-s test diff-integration-tests check-integration-tests",
26
+ "check-integration-tests": "run-s check-integration-test:*",
27
+ "diff-integration-tests": "mkdir -p diff && rm -rf diff/test && cp -r test diff/test && rm -rf diff/test/test-*/.git && cd diff && git init --quiet && git add -A && git commit --quiet --no-verify --allow-empty -m 'WIP' && echo '\\n\\nCommitted most recent integration test output in the \"diff\" directory. Review the changes with \"cd diff && git diff HEAD\" or your preferred git diff viewer.'",
28
+ "watch:build": "tsc -p tsconfig.json -w",
29
+ "watch:test": "nyc --silent ava --watch",
30
+ "cov": "run-s build test:unit cov:html cov:lcov && open-cli coverage/index.html",
31
+ "cov:html": "nyc report --reporter=html",
32
+ "cov:lcov": "nyc report --reporter=lcov",
33
+ "cov:send": "run-s cov:lcov && codecov",
34
+ "cov:check": "nyc report && nyc check-coverage --lines 100 --functions 100 --branches 100",
35
+ "doc": "run-s doc:html && open-cli build/docs/index.html",
36
+ "doc:html": "typedoc src/ --exclude **/*.spec.ts --out build/docs",
37
+ "doc:json": "typedoc src/ --exclude **/*.spec.ts --json build/docs/typedoc.json",
38
+ "doc:publish": "gh-pages -m \"[ci skip] Updates\" -d build/docs",
39
+ "version": "standard-version",
40
+ "reset-hard": "git clean -dfx && git reset --hard && yarn",
41
+ "prepare-release": "run-s reset-hard test cov:check doc:html version doc:publish"
42
+ },
43
+ "engines": {
44
+ "node": ">=10"
45
+ },
46
+ "dependencies": {
47
+ "assertate": "^2.4.0"
48
+ },
49
+ "devDependencies": {
50
+ "@ava/typescript": "^1.1.1",
51
+ "@google-cloud/datastore": "^6.6.2",
52
+ "@istanbuljs/nyc-config-typescript": "^1.0.1",
53
+ "@types/node": "^17.0.0",
54
+ "@typescript-eslint/eslint-plugin": "^4.0.1",
55
+ "@typescript-eslint/parser": "^4.0.1",
56
+ "ava": "^3.15.0",
57
+ "codecov": "^3.5.0",
58
+ "cspell": "^4.1.0",
59
+ "cz-conventional-changelog": "^3.3.0",
60
+ "debug": "^4.3.3",
61
+ "eslint": "^7.8.0",
62
+ "eslint-config-prettier": "^6.11.0",
63
+ "eslint-plugin-eslint-comments": "^3.2.0",
64
+ "eslint-plugin-import": "^2.22.0",
65
+ "gh-pages": "^3.1.0",
66
+ "npm-run-all": "^4.1.5",
67
+ "nyc": "^15.1.0",
68
+ "open-cli": "^6.0.1",
69
+ "prettier": "^2.1.1",
70
+ "standard-version": "^9.0.0",
71
+ "ts-essentials": "^9.0.0",
72
+ "ts-node": "^10.4.0",
73
+ "typedoc": "^0.22.10",
74
+ "typescript": "^4.0.2"
75
+ },
76
+ "files": [
77
+ "build/main",
78
+ "build/module",
79
+ "!**/*.spec.*",
80
+ "!**/*.json",
81
+ "CHANGELOG.md",
82
+ "LICENSE",
83
+ "README.md"
84
+ ],
85
+ "ava": {
86
+ "failFast": true,
87
+ "timeout": "60s",
88
+ "typescript": {
89
+ "rewritePaths": {
90
+ "src/": "build/main/"
91
+ }
92
+ },
93
+ "files": [
94
+ "!build/module/**"
95
+ ]
96
+ },
97
+ "config": {
98
+ "commitizen": {
99
+ "path": "cz-conventional-changelog"
100
+ }
101
+ },
102
+ "prettier": {
103
+ "singleQuote": true
104
+ },
105
+ "nyc": {
106
+ "extends": "@istanbuljs/nyc-config-typescript",
107
+ "exclude": [
108
+ "**/*.spec.js"
109
+ ]
110
+ },
111
+ "peerDependencies": {
112
+ "@google-cloud/datastore": "^6.6.2",
113
+ "debug": "^4.3.3"
114
+ }
115
+ }