@launchdarkly/node-server-sdk-dynamodb 5.0.4 → 5.0.6
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/CHANGELOG.md +20 -0
- package/README.md +4 -3
- package/dist/src/DynamoDBBigSegmentStore.d.ts +1 -1
- package/dist/src/DynamoDBBigSegmentStore.d.ts.map +1 -1
- package/dist/src/DynamoDBBigSegmentStore.js +29 -42
- package/dist/src/DynamoDBBigSegmentStore.js.map +1 -1
- package/dist/src/DynamoDBBigSegmentStoreFactory.d.ts +1 -1
- package/dist/src/DynamoDBBigSegmentStoreFactory.d.ts.map +1 -1
- package/dist/src/DynamoDBBigSegmentStoreFactory.js.map +1 -1
- package/dist/src/DynamoDBClientState.js +45 -67
- package/dist/src/DynamoDBClientState.js.map +1 -1
- package/dist/src/DynamoDBCore.js +82 -103
- package/dist/src/DynamoDBCore.js.map +1 -1
- package/dist/src/DynamoDBFeatureStore.d.ts.map +1 -1
- package/dist/src/DynamoDBFeatureStore.js +1 -1
- package/dist/src/DynamoDBFeatureStore.js.map +1 -1
- package/dist/src/DynamoDBFeatureStoreFactory.d.ts.map +1 -1
- package/dist/src/DynamoDBFeatureStoreFactory.js.map +1 -1
- package/dist/src/LDDynamoDBOptions.d.ts +1 -1
- package/dist/src/LDDynamoDBOptions.d.ts.map +1 -1
- package/package.json +12 -11
package/CHANGELOG.md
CHANGED
|
@@ -18,6 +18,26 @@
|
|
|
18
18
|
* devDependencies
|
|
19
19
|
* @launchdarkly/node-server-sdk bumped from 8.0.2 to 8.1.0
|
|
20
20
|
|
|
21
|
+
### Dependencies
|
|
22
|
+
|
|
23
|
+
* The following workspace dependencies were updated
|
|
24
|
+
* devDependencies
|
|
25
|
+
* @launchdarkly/node-server-sdk bumped from 8.1.0 to 8.1.1
|
|
26
|
+
|
|
27
|
+
## [5.0.6](https://github.com/launchdarkly/js-core/compare/node-server-sdk-dynamodb-v5.0.5...node-server-sdk-dynamodb-v5.0.6) (2023-08-10)
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
### Bug Fixes
|
|
31
|
+
|
|
32
|
+
* Switch to es2017 target to ensure native async/await. ([a83e4e6](https://github.com/launchdarkly/js-core/commit/a83e4e62d04c66105a1b0e8893640a7ca2d641e4))
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
### Dependencies
|
|
36
|
+
|
|
37
|
+
* The following workspace dependencies were updated
|
|
38
|
+
* devDependencies
|
|
39
|
+
* @launchdarkly/node-server-sdk bumped from 8.1.1 to 8.1.2
|
|
40
|
+
|
|
21
41
|
## [5.0.2](https://github.com/launchdarkly/js-core/compare/node-server-sdk-dynamodb-v5.0.1...node-server-sdk-dynamodb-v5.0.2) (2023-06-27)
|
|
22
42
|
|
|
23
43
|
|
package/README.md
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
[](https://launchdarkly.github.io/js-core/packages/store/node-server-sdk-dynamodb/docs/)
|
|
6
6
|
|
|
7
7
|
This library provides a DynamoDB-backed persistence mechanism (feature store) for the [LaunchDarkly Node.js SDK](https://github.com/launchdarkly/js-core/packages/sdk/server-node), replacing the default in-memory feature store. It uses the AWS SDK for Node.js.
|
|
8
|
-
The minimum version of the LaunchDarkly Server-Side SDK for Node for use with this library is 8.0.0.
|
|
8
|
+
The minimum version of the LaunchDarkly Server-Side SDK for Node for use with this library is 8.0.0.
|
|
9
9
|
|
|
10
10
|
## LaunchDarkly overview
|
|
11
11
|
|
|
@@ -59,7 +59,9 @@ const store = DynamoDBFeatureStoreFactory('YOUR TABLE NAME', { clientOptions: dy
|
|
|
59
59
|
Alternatively, if you already have a fully configured DynamoDB client object, you can tell LaunchDarkly to use that:
|
|
60
60
|
|
|
61
61
|
```typescript
|
|
62
|
-
const store = DynamoDBFeatureStoreFactory('YOUR TABLE NAME', {
|
|
62
|
+
const store = DynamoDBFeatureStoreFactory('YOUR TABLE NAME', {
|
|
63
|
+
dynamoDBClient: myDynamoDBClientInstance,
|
|
64
|
+
});
|
|
63
65
|
```
|
|
64
66
|
|
|
65
67
|
6. If you are running a [LaunchDarkly Relay Proxy](https://github.com/launchdarkly/ld-relay) instance, or any other process that will pre-populate the DynamoDB table with feature flags from LaunchDarkly, you can use [daemon mode](https://github.com/launchdarkly/ld-relay#daemon-mode), so that the SDK retrieves flag data only from DynamoDB and does not communicate directly with LaunchDarkly. This is controlled by the SDK's `useLdd` option:
|
|
@@ -103,6 +105,5 @@ We encourage pull requests and other contributions from the community. Check out
|
|
|
103
105
|
|
|
104
106
|
[node-dynamodb-ci-badge]: https://github.com/launchdarkly/js-core/actions/workflows/node-dynamodb.yml/badge.svg
|
|
105
107
|
[node-dynamodb-ci]: https://github.com/launchdarkly/js-core/actions/workflows/node-dynamodb.yml
|
|
106
|
-
|
|
107
108
|
[node-dynamodb-npm-badge]: https://img.shields.io/npm/v/@launchdarkly/node-server-sdk-dynamodb.svg?style=flat-square
|
|
108
109
|
[node-dynamodb-npm-link]: https://www.npmjs.com/package/@launchdarkly/node-server-sdk-dynamodb
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { interfaces, LDLogger } from '@launchdarkly/node-server-sdk';
|
|
2
2
|
import LDDynamoDBOptions from './LDDynamoDBOptions';
|
|
3
3
|
export default class DynamoDBBigSegmentStore implements interfaces.BigSegmentStore {
|
|
4
4
|
private readonly tableName;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DynamoDBBigSegmentStore.d.ts","sourceRoot":"","sources":["../../src/DynamoDBBigSegmentStore.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"DynamoDBBigSegmentStore.d.ts","sourceRoot":"","sources":["../../src/DynamoDBBigSegmentStore.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,+BAA+B,CAAC;AAGrE,OAAO,iBAAiB,MAAM,qBAAqB,CAAC;AAiCpD,MAAM,CAAC,OAAO,OAAO,uBAAwB,YAAW,UAAU,CAAC,eAAe;IAO9E,OAAO,CAAC,QAAQ,CAAC,SAAS;IAE1B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC;IAR1B,OAAO,CAAC,KAAK,CAAsB;gBAMhB,SAAS,EAAE,MAAM,EAClC,OAAO,CAAC,EAAE,iBAAiB,EACV,MAAM,CAAC,sBAAU;IAK9B,WAAW,IAAI,OAAO,CAAC,UAAU,CAAC,uBAAuB,GAAG,SAAS,CAAC;IAetE,iBAAiB,CACrB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,UAAU,CAAC,yBAAyB,GAAG,SAAS,CAAC;IAsB5D,KAAK,IAAI,IAAI;CAGd"}
|
|
@@ -1,13 +1,4 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
-
});
|
|
10
|
-
};
|
|
11
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
3
|
exports.ATTR_EXCLUDED = exports.ATTR_INCLUDED = exports.ATTR_SYNC_ON = exports.KEY_USER_DATA = exports.KEY_METADATA = void 0;
|
|
13
4
|
const DynamoDBClientState_1 = require("./DynamoDBClientState");
|
|
@@ -46,43 +37,39 @@ class DynamoDBBigSegmentStore {
|
|
|
46
37
|
this.logger = logger;
|
|
47
38
|
this.state = new DynamoDBClientState_1.default(options);
|
|
48
39
|
}
|
|
49
|
-
getMetadata() {
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
key: (0, Value_1.stringValue)(key),
|
|
55
|
-
});
|
|
56
|
-
if (data) {
|
|
57
|
-
const attr = data[exports.ATTR_SYNC_ON];
|
|
58
|
-
if (attr && attr.N) {
|
|
59
|
-
return { lastUpToDate: parseInt(attr.N, 10) };
|
|
60
|
-
}
|
|
61
|
-
}
|
|
62
|
-
return {};
|
|
40
|
+
async getMetadata() {
|
|
41
|
+
const key = this.state.prefixedKey(exports.KEY_METADATA);
|
|
42
|
+
const data = await this.state.get(this.tableName, {
|
|
43
|
+
namespace: (0, Value_1.stringValue)(key),
|
|
44
|
+
key: (0, Value_1.stringValue)(key),
|
|
63
45
|
});
|
|
46
|
+
if (data) {
|
|
47
|
+
const attr = data[exports.ATTR_SYNC_ON];
|
|
48
|
+
if (attr && attr.N) {
|
|
49
|
+
return { lastUpToDate: parseInt(attr.N, 10) };
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
return {};
|
|
64
53
|
}
|
|
65
|
-
getUserMembership(userHash) {
|
|
54
|
+
async getUserMembership(userHash) {
|
|
66
55
|
var _a, _b;
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
key: (0, Value_1.stringValue)(userHash),
|
|
71
|
-
});
|
|
72
|
-
if (data) {
|
|
73
|
-
const excludedRefs = data[exports.ATTR_EXCLUDED];
|
|
74
|
-
const includedRefs = data[exports.ATTR_INCLUDED];
|
|
75
|
-
const membership = {};
|
|
76
|
-
(_a = excludedRefs === null || excludedRefs === void 0 ? void 0 : excludedRefs.SS) === null || _a === void 0 ? void 0 : _a.forEach((ref) => {
|
|
77
|
-
membership[ref] = false;
|
|
78
|
-
});
|
|
79
|
-
(_b = includedRefs === null || includedRefs === void 0 ? void 0 : includedRefs.SS) === null || _b === void 0 ? void 0 : _b.forEach((ref) => {
|
|
80
|
-
membership[ref] = true;
|
|
81
|
-
});
|
|
82
|
-
return membership;
|
|
83
|
-
}
|
|
84
|
-
return undefined;
|
|
56
|
+
const data = await this.state.get(this.tableName, {
|
|
57
|
+
namespace: (0, Value_1.stringValue)(this.state.prefixedKey(exports.KEY_USER_DATA)),
|
|
58
|
+
key: (0, Value_1.stringValue)(userHash),
|
|
85
59
|
});
|
|
60
|
+
if (data) {
|
|
61
|
+
const excludedRefs = data[exports.ATTR_EXCLUDED];
|
|
62
|
+
const includedRefs = data[exports.ATTR_INCLUDED];
|
|
63
|
+
const membership = {};
|
|
64
|
+
(_a = excludedRefs === null || excludedRefs === void 0 ? void 0 : excludedRefs.SS) === null || _a === void 0 ? void 0 : _a.forEach((ref) => {
|
|
65
|
+
membership[ref] = false;
|
|
66
|
+
});
|
|
67
|
+
(_b = includedRefs === null || includedRefs === void 0 ? void 0 : includedRefs.SS) === null || _b === void 0 ? void 0 : _b.forEach((ref) => {
|
|
68
|
+
membership[ref] = true;
|
|
69
|
+
});
|
|
70
|
+
return membership;
|
|
71
|
+
}
|
|
72
|
+
return undefined;
|
|
86
73
|
}
|
|
87
74
|
close() {
|
|
88
75
|
this.state.close();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DynamoDBBigSegmentStore.js","sourceRoot":"","sources":["../../src/DynamoDBBigSegmentStore.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"DynamoDBBigSegmentStore.js","sourceRoot":"","sources":["../../src/DynamoDBBigSegmentStore.ts"],"names":[],"mappings":";;;AAEA,+DAAwD;AAExD,mCAAsC;AAEtC;;;GAGG;AACU,QAAA,YAAY,GAAG,uBAAuB,CAAC;AAEpD;;;GAGG;AACU,QAAA,aAAa,GAAG,mBAAmB,CAAC;AAEjD;;;GAGG;AACU,QAAA,YAAY,GAAG,gBAAgB,CAAC;AAE7C;;;GAGG;AACU,QAAA,aAAa,GAAG,UAAU,CAAC;AAExC;;;GAGG;AACU,QAAA,aAAa,GAAG,UAAU,CAAC;AAExC,MAAqB,uBAAuB;IAG1C,0EAA0E;IAC1E,oCAAoC;IACpC,6DAA6D;IAC7D,YACmB,SAAiB,EAClC,OAA2B,EACV,MAAiB;QAFjB,cAAS,GAAT,SAAS,CAAQ;QAEjB,WAAM,GAAN,MAAM,CAAW;QAElC,IAAI,CAAC,KAAK,GAAG,IAAI,6BAAmB,CAAC,OAAO,CAAC,CAAC;IAChD,CAAC;IAED,KAAK,CAAC,WAAW;QACf,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,oBAAY,CAAC,CAAC;QACjD,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,EAAE;YAChD,SAAS,EAAE,IAAA,mBAAW,EAAC,GAAG,CAAC;YAC3B,GAAG,EAAE,IAAA,mBAAW,EAAC,GAAG,CAAC;SACtB,CAAC,CAAC;QACH,IAAI,IAAI,EAAE;YACR,MAAM,IAAI,GAAG,IAAI,CAAC,oBAAY,CAAC,CAAC;YAChC,IAAI,IAAI,IAAI,IAAI,CAAC,CAAC,EAAE;gBAClB,OAAO,EAAE,YAAY,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAE,EAAE,EAAE,CAAC,EAAE,CAAC;aAChD;SACF;QACD,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,KAAK,CAAC,iBAAiB,CACrB,QAAgB;;QAEhB,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,EAAE;YAChD,SAAS,EAAE,IAAA,mBAAW,EAAC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,qBAAa,CAAC,CAAC;YAC7D,GAAG,EAAE,IAAA,mBAAW,EAAC,QAAQ,CAAC;SAC3B,CAAC,CAAC;QACH,IAAI,IAAI,EAAE;YACR,MAAM,YAAY,GAAG,IAAI,CAAC,qBAAa,CAAC,CAAC;YACzC,MAAM,YAAY,GAAG,IAAI,CAAC,qBAAa,CAAC,CAAC;YAEzC,MAAM,UAAU,GAAyC,EAAE,CAAC;YAE5D,MAAA,YAAY,aAAZ,YAAY,uBAAZ,YAAY,CAAE,EAAE,0CAAE,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE;gBAChC,UAAU,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;YAC1B,CAAC,CAAC,CAAC;YACH,MAAA,YAAY,aAAZ,YAAY,uBAAZ,YAAY,CAAE,EAAE,0CAAE,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE;gBAChC,UAAU,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;YACzB,CAAC,CAAC,CAAC;YACH,OAAO,UAAU,CAAC;SACnB;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,KAAK;QACH,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;IACrB,CAAC;CACF;AAxDD,0CAwDC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { interfaces, LDOptions } from '@launchdarkly/node-server-sdk';
|
|
2
2
|
import LDDynamoDBOptions from './LDDynamoDBOptions';
|
|
3
3
|
/**
|
|
4
4
|
* Configures a big segment store factory backed by a DynamoDB instance.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DynamoDBBigSegmentStoreFactory.d.ts","sourceRoot":"","sources":["../../src/DynamoDBBigSegmentStoreFactory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"DynamoDBBigSegmentStoreFactory.d.ts","sourceRoot":"","sources":["../../src/DynamoDBBigSegmentStoreFactory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,+BAA+B,CAAC;AAGtE,OAAO,iBAAiB,MAAM,qBAAqB,CAAC;AAEpD;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,OAAO,UAAU,8BAA8B,CACpD,SAAS,EAAE,MAAM,EACjB,OAAO,CAAC,EAAE,iBAAiB,GAC1B,CAAC,MAAM,EAAE,SAAS,KAAK,UAAU,CAAC,eAAe,CAEnD"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DynamoDBBigSegmentStoreFactory.js","sourceRoot":"","sources":["../../src/DynamoDBBigSegmentStoreFactory.ts"],"names":[],"mappings":";;AAEA,uEAAgE;
|
|
1
|
+
{"version":3,"file":"DynamoDBBigSegmentStoreFactory.js","sourceRoot":"","sources":["../../src/DynamoDBBigSegmentStoreFactory.ts"],"names":[],"mappings":";;AAEA,uEAAgE;AAGhE;;;;;;;;;;;GAWG;AACH,SAAwB,8BAA8B,CACpD,SAAiB,EACjB,OAA2B;IAE3B,OAAO,CAAC,MAAiB,EAAE,EAAE,CAAC,IAAI,iCAAuB,CAAC,SAAS,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;AAC/F,CAAC;AALD,iDAKC"}
|
|
@@ -1,13 +1,4 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
-
});
|
|
10
|
-
};
|
|
11
2
|
var __asyncValues = (this && this.__asyncValues) || function (o) {
|
|
12
3
|
if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
|
|
13
4
|
var m = o[Symbol.asyncIterator], i;
|
|
@@ -55,72 +46,59 @@ class DynamoDBClientState {
|
|
|
55
46
|
prefixedKey(key) {
|
|
56
47
|
return `${this.prefix}${key}`;
|
|
57
48
|
}
|
|
58
|
-
query(params) {
|
|
49
|
+
async query(params) {
|
|
59
50
|
var _a, e_1, _b, _c;
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
if (page.Items) {
|
|
71
|
-
records.push(...page.Items);
|
|
72
|
-
}
|
|
73
|
-
}
|
|
74
|
-
finally {
|
|
75
|
-
_d = true;
|
|
76
|
-
}
|
|
51
|
+
const records = [];
|
|
52
|
+
try {
|
|
53
|
+
// Using a generator here is a substantial ergonomic improvement.
|
|
54
|
+
// eslint-disable-next-line no-restricted-syntax
|
|
55
|
+
for (var _d = true, _e = __asyncValues((0, client_dynamodb_1.paginateQuery)({ client: this.client }, params)), _f; _f = await _e.next(), _a = _f.done, !_a; _d = true) {
|
|
56
|
+
_c = _f.value;
|
|
57
|
+
_d = false;
|
|
58
|
+
const page = _c;
|
|
59
|
+
if (page.Items) {
|
|
60
|
+
records.push(...page.Items);
|
|
77
61
|
}
|
|
78
62
|
}
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
finally { if (e_1) throw e_1.error; }
|
|
63
|
+
}
|
|
64
|
+
catch (e_1_1) { e_1 = { error: e_1_1 }; }
|
|
65
|
+
finally {
|
|
66
|
+
try {
|
|
67
|
+
if (!_d && !_a && (_b = _e.return)) await _b.call(_e);
|
|
85
68
|
}
|
|
86
|
-
|
|
87
|
-
}
|
|
69
|
+
finally { if (e_1) throw e_1.error; }
|
|
70
|
+
}
|
|
71
|
+
return records;
|
|
88
72
|
}
|
|
89
|
-
batchWrite(table, params) {
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
}))));
|
|
100
|
-
});
|
|
73
|
+
async batchWrite(table, params) {
|
|
74
|
+
const batches = [];
|
|
75
|
+
// Split into batches of at most 25 commands.
|
|
76
|
+
while (params.length) {
|
|
77
|
+
batches.push(params.splice(0, WRITE_BATCH_SIZE));
|
|
78
|
+
}
|
|
79
|
+
// Execute all the batches and wait for them to complete.
|
|
80
|
+
await Promise.all(batches.map((batch) => this.client.send(new client_dynamodb_1.BatchWriteItemCommand({
|
|
81
|
+
RequestItems: { [table]: batch },
|
|
82
|
+
}))));
|
|
101
83
|
}
|
|
102
|
-
get(table, key) {
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
return res.Item;
|
|
109
|
-
});
|
|
84
|
+
async get(table, key) {
|
|
85
|
+
const res = await this.client.send(new client_dynamodb_1.GetItemCommand({
|
|
86
|
+
TableName: table,
|
|
87
|
+
Key: key,
|
|
88
|
+
}));
|
|
89
|
+
return res.Item;
|
|
110
90
|
}
|
|
111
|
-
put(params) {
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
throw err;
|
|
121
|
-
}
|
|
91
|
+
async put(params) {
|
|
92
|
+
try {
|
|
93
|
+
await this.client.send(new client_dynamodb_1.PutItemCommand(params));
|
|
94
|
+
}
|
|
95
|
+
catch (err) {
|
|
96
|
+
// If we couldn't upsert because of the version, then that is fine.
|
|
97
|
+
// Otherwise we return failure.
|
|
98
|
+
if (!(err instanceof client_dynamodb_1.ConditionalCheckFailedException)) {
|
|
99
|
+
throw err;
|
|
122
100
|
}
|
|
123
|
-
}
|
|
101
|
+
}
|
|
124
102
|
}
|
|
125
103
|
close() {
|
|
126
104
|
if (this.owned) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DynamoDBClientState.js","sourceRoot":"","sources":["../../src/DynamoDBClientState.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"DynamoDBClientState.js","sourceRoot":"","sources":["../../src/DynamoDBClientState.ts"],"names":[],"mappings":"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"}
|
package/dist/src/DynamoDBCore.js
CHANGED
|
@@ -1,13 +1,4 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
-
});
|
|
10
|
-
};
|
|
11
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
3
|
exports.calculateSize = void 0;
|
|
13
4
|
const Value_1 = require("./Value");
|
|
@@ -80,15 +71,13 @@ class DynamoDBCore {
|
|
|
80
71
|
* @param allData A set of init data.
|
|
81
72
|
* @returns A list of all data with matching namespaces.
|
|
82
73
|
*/
|
|
83
|
-
readExistingItems(allData) {
|
|
84
|
-
|
|
85
|
-
const
|
|
86
|
-
|
|
87
|
-
return this.state.query(this.queryParamsForNamespace(namespace));
|
|
88
|
-
});
|
|
89
|
-
const records = (yield Promise.all(promises)).flat();
|
|
90
|
-
return records;
|
|
74
|
+
async readExistingItems(allData) {
|
|
75
|
+
const promises = allData.map((kind) => {
|
|
76
|
+
const { namespace } = kind.key;
|
|
77
|
+
return this.state.query(this.queryParamsForNamespace(namespace));
|
|
91
78
|
});
|
|
79
|
+
const records = (await Promise.all(promises)).flat();
|
|
80
|
+
return records;
|
|
92
81
|
}
|
|
93
82
|
/**
|
|
94
83
|
* Mashal a SerializedItemDescriptor into an item for the DB.
|
|
@@ -117,101 +106,91 @@ class DynamoDBCore {
|
|
|
117
106
|
serializedItem: (_c = dbItem.item) === null || _c === void 0 ? void 0 : _c.S,
|
|
118
107
|
};
|
|
119
108
|
}
|
|
120
|
-
init(allData, callback) {
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
collection.item
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
}
|
|
141
|
-
});
|
|
142
|
-
});
|
|
143
|
-
// Remove existing data that is not in the new list.
|
|
144
|
-
Object.keys(existingNamespaceKeys).forEach((namespaceKey) => {
|
|
145
|
-
const namespaceAndKey = namespaceKey.split('$');
|
|
146
|
-
ops.push({
|
|
147
|
-
DeleteRequest: {
|
|
148
|
-
Key: { namespace: (0, Value_1.stringValue)(namespaceAndKey[0]), key: (0, Value_1.stringValue)(namespaceAndKey[1]) },
|
|
149
|
-
},
|
|
150
|
-
});
|
|
109
|
+
async init(allData, callback) {
|
|
110
|
+
const items = await this.readExistingItems(allData);
|
|
111
|
+
// Make a key from an existing DB item.
|
|
112
|
+
function makeNamespaceKey(item) {
|
|
113
|
+
return `${item.namespace.S}$${item.key.S}`;
|
|
114
|
+
}
|
|
115
|
+
const existingNamespaceKeys = {};
|
|
116
|
+
items.forEach((item) => {
|
|
117
|
+
existingNamespaceKeys[makeNamespaceKey(item)] = true;
|
|
118
|
+
});
|
|
119
|
+
delete existingNamespaceKeys[makeNamespaceKey(this.initializedToken())];
|
|
120
|
+
// Generate a list of write operations, and then execute them in a batch.
|
|
121
|
+
const ops = [];
|
|
122
|
+
allData.forEach((collection) => {
|
|
123
|
+
collection.item.forEach((item) => {
|
|
124
|
+
const dbItem = this.marshalItem(collection.key, item);
|
|
125
|
+
if (this.checkSizeLimit(dbItem)) {
|
|
126
|
+
delete existingNamespaceKeys[`${this.state.prefixedKey(collection.key.namespace)}$${item.key}`];
|
|
127
|
+
ops.push({ PutRequest: { Item: dbItem } });
|
|
128
|
+
}
|
|
151
129
|
});
|
|
152
|
-
// Always write the initialized token when we initialize.
|
|
153
|
-
ops.push({ PutRequest: { Item: this.initializedToken() } });
|
|
154
|
-
yield this.state.batchWrite(this.tableName, ops);
|
|
155
|
-
callback();
|
|
156
130
|
});
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
131
|
+
// Remove existing data that is not in the new list.
|
|
132
|
+
Object.keys(existingNamespaceKeys).forEach((namespaceKey) => {
|
|
133
|
+
const namespaceAndKey = namespaceKey.split('$');
|
|
134
|
+
ops.push({
|
|
135
|
+
DeleteRequest: {
|
|
136
|
+
Key: { namespace: (0, Value_1.stringValue)(namespaceAndKey[0]), key: (0, Value_1.stringValue)(namespaceAndKey[1]) },
|
|
137
|
+
},
|
|
163
138
|
});
|
|
164
|
-
if (read) {
|
|
165
|
-
callback(this.unmarshalItem(read));
|
|
166
|
-
}
|
|
167
|
-
else {
|
|
168
|
-
callback(undefined);
|
|
169
|
-
}
|
|
170
139
|
});
|
|
140
|
+
// Always write the initialized token when we initialize.
|
|
141
|
+
ops.push({ PutRequest: { Item: this.initializedToken() } });
|
|
142
|
+
await this.state.batchWrite(this.tableName, ops);
|
|
143
|
+
callback();
|
|
171
144
|
}
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
callback(results.map((record) => ({ key: record.key.S, item: this.unmarshalItem(record) })));
|
|
145
|
+
async get(kind, key, callback) {
|
|
146
|
+
const read = await this.state.get(this.tableName, {
|
|
147
|
+
namespace: (0, Value_1.stringValue)(this.state.prefixedKey(kind.namespace)),
|
|
148
|
+
key: (0, Value_1.stringValue)(key),
|
|
177
149
|
});
|
|
150
|
+
if (read) {
|
|
151
|
+
callback(this.unmarshalItem(read));
|
|
152
|
+
}
|
|
153
|
+
else {
|
|
154
|
+
callback(undefined);
|
|
155
|
+
}
|
|
178
156
|
}
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
callback(
|
|
196
|
-
}
|
|
197
|
-
}
|
|
157
|
+
async getAll(kind, callback) {
|
|
158
|
+
const params = this.queryParamsForNamespace(kind.namespace);
|
|
159
|
+
const results = await this.state.query(params);
|
|
160
|
+
callback(results.map((record) => ({ key: record.key.S, item: this.unmarshalItem(record) })));
|
|
161
|
+
}
|
|
162
|
+
async upsert(kind, key, descriptor, callback) {
|
|
163
|
+
const params = this.makeVersionedPutRequest(kind, { key, item: descriptor });
|
|
164
|
+
if (!this.checkSizeLimit(params.Item)) {
|
|
165
|
+
// We deliberately don't report this back to the SDK as an error, because we don't want to trigger any
|
|
166
|
+
// useless retry behavior. We just won't do the update.
|
|
167
|
+
callback();
|
|
168
|
+
return;
|
|
169
|
+
}
|
|
170
|
+
try {
|
|
171
|
+
await this.state.put(params);
|
|
172
|
+
this.get(kind, key, (readDescriptor) => {
|
|
173
|
+
callback(undefined, readDescriptor);
|
|
174
|
+
});
|
|
175
|
+
}
|
|
176
|
+
catch (err) {
|
|
177
|
+
callback(err, undefined);
|
|
178
|
+
}
|
|
198
179
|
}
|
|
199
|
-
initialized(callback) {
|
|
180
|
+
async initialized(callback) {
|
|
200
181
|
var _a, _b;
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
callback(initialized);
|
|
214
|
-
});
|
|
182
|
+
let initialized = false;
|
|
183
|
+
try {
|
|
184
|
+
const token = this.initializedToken();
|
|
185
|
+
const data = await this.state.get(this.tableName, token);
|
|
186
|
+
initialized = !!(((_a = data === null || data === void 0 ? void 0 : data.key) === null || _a === void 0 ? void 0 : _a.S) === token.key.S);
|
|
187
|
+
}
|
|
188
|
+
catch (err) {
|
|
189
|
+
(_b = this.logger) === null || _b === void 0 ? void 0 : _b.error(`Error reading inited: ${err}`);
|
|
190
|
+
initialized = false;
|
|
191
|
+
}
|
|
192
|
+
// Callback outside the try. In case it raised an exception.
|
|
193
|
+
callback(initialized);
|
|
215
194
|
}
|
|
216
195
|
close() {
|
|
217
196
|
this.state.close();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DynamoDBCore.js","sourceRoot":"","sources":["../../src/DynamoDBCore.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"DynamoDBCore.js","sourceRoot":"","sources":["../../src/DynamoDBCore.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DynamoDBFeatureStore.d.ts","sourceRoot":"","sources":["../../src/DynamoDBFeatureStore.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,UAAU,EACV,cAAc,EACd,yBAAyB,EACzB,kBAAkB,EAClB,sBAAsB,EACtB,uBAAuB,EACvB,QAAQ,EAET,MAAM,+BAA+B,CAAC;
|
|
1
|
+
{"version":3,"file":"DynamoDBFeatureStore.d.ts","sourceRoot":"","sources":["../../src/DynamoDBFeatureStore.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,UAAU,EACV,cAAc,EACd,yBAAyB,EACzB,kBAAkB,EAClB,sBAAsB,EACtB,uBAAuB,EACvB,QAAQ,EAET,MAAM,+BAA+B,CAAC;AAIvC,OAAO,iBAAiB,MAAM,qBAAqB,CAAC;AAGpD;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,oBAAqB,YAAW,cAAc;IACjE,OAAO,CAAC,OAAO,CAA6B;gBAEhC,SAAS,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,iBAAiB,EAAE,MAAM,CAAC,EAAE,QAAQ;IAO7E,GAAG,CACD,IAAI,EAAE,UAAU,CAAC,QAAQ,EACzB,GAAG,EAAE,MAAM,EACX,QAAQ,EAAE,CAAC,GAAG,EAAE,kBAAkB,GAAG,IAAI,KAAK,IAAI,GACjD,IAAI;IAIP,GAAG,CAAC,IAAI,EAAE,UAAU,CAAC,QAAQ,EAAE,QAAQ,EAAE,CAAC,GAAG,EAAE,sBAAsB,KAAK,IAAI,GAAG,IAAI;IAIrF,IAAI,CAAC,OAAO,EAAE,yBAAyB,EAAE,QAAQ,EAAE,MAAM,IAAI,GAAG,IAAI;IAIpE,MAAM,CAAC,IAAI,EAAE,UAAU,CAAC,QAAQ,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,IAAI,GAAG,IAAI;IAI3F,MAAM,CAAC,IAAI,EAAE,UAAU,CAAC,QAAQ,EAAE,IAAI,EAAE,uBAAuB,EAAE,QAAQ,EAAE,MAAM,IAAI,GAAG,IAAI;IAI5F,WAAW,CAAC,QAAQ,EAAE,CAAC,aAAa,EAAE,OAAO,KAAK,IAAI,GAAG,IAAI;IAI7D,KAAK,IAAI,IAAI;IAIb,cAAc,CAAC,IAAI,MAAM;CAG1B"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
const node_server_sdk_1 = require("@launchdarkly/node-server-sdk");
|
|
4
|
-
const DynamoDBCore_1 = require("./DynamoDBCore");
|
|
5
4
|
const DynamoDBClientState_1 = require("./DynamoDBClientState");
|
|
5
|
+
const DynamoDBCore_1 = require("./DynamoDBCore");
|
|
6
6
|
const TtlFromOptions_1 = require("./TtlFromOptions");
|
|
7
7
|
/**
|
|
8
8
|
* Integration between the LaunchDarkly SDK and DynamoDB.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DynamoDBFeatureStore.js","sourceRoot":"","sources":["../../src/DynamoDBFeatureStore.ts"],"names":[],"mappings":";;AAAA,mEASuC;AAEvC
|
|
1
|
+
{"version":3,"file":"DynamoDBFeatureStore.js","sourceRoot":"","sources":["../../src/DynamoDBFeatureStore.ts"],"names":[],"mappings":";;AAAA,mEASuC;AAEvC,+DAAwD;AACxD,iDAA0C;AAE1C,qDAA8C;AAE9C;;GAEG;AACH,MAAqB,oBAAoB;IAGvC,YAAY,SAAiB,EAAE,OAA2B,EAAE,MAAiB;QAC3E,IAAI,CAAC,OAAO,GAAG,IAAI,4CAA0B,CAC3C,IAAI,sBAAY,CAAC,SAAS,EAAE,IAAI,6BAAmB,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC,EACrE,IAAA,wBAAc,EAAC,OAAO,CAAC,CACxB,CAAC;IACJ,CAAC;IAED,GAAG,CACD,IAAyB,EACzB,GAAW,EACX,QAAkD;QAElD,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,EAAE,QAAQ,CAAC,CAAC;IACxC,CAAC;IAED,GAAG,CAAC,IAAyB,EAAE,QAA+C;QAC5E,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IACnC,CAAC;IAED,IAAI,CAAC,OAAkC,EAAE,QAAoB;QAC3D,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IACvC,CAAC;IAED,MAAM,CAAC,IAAyB,EAAE,GAAW,EAAE,OAAe,EAAE,QAAoB;QAClF,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;IACpD,CAAC;IAED,MAAM,CAAC,IAAyB,EAAE,IAA6B,EAAE,QAAoB;QACnF,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;IAC5C,CAAC;IAED,WAAW,CAAC,QAA0C;QACpD,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;IACrC,CAAC;IAED,KAAK;QACH,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;IACvB,CAAC;IAED,cAAc;QACZ,OAAO,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE,CAAC;IACvC,CAAC;CACF;AA7CD,uCA6CC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DynamoDBFeatureStoreFactory.d.ts","sourceRoot":"","sources":["../../src/DynamoDBFeatureStoreFactory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;
|
|
1
|
+
{"version":3,"file":"DynamoDBFeatureStoreFactory.d.ts","sourceRoot":"","sources":["../../src/DynamoDBFeatureStoreFactory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAEhE,OAAO,oBAAoB,MAAM,wBAAwB,CAAC;AAC1D,OAAO,iBAAiB,MAAM,qBAAqB,CAAC;AAEpD;;;;;;;;;;;;GAYG;AACH,MAAM,CAAC,OAAO,UAAU,2BAA2B,CACjD,SAAS,EAAE,MAAM,EACjB,OAAO,CAAC,EAAE,iBAAiB,YAEX,eAAe,0BAEhC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DynamoDBFeatureStoreFactory.js","sourceRoot":"","sources":["../../src/DynamoDBFeatureStoreFactory.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"DynamoDBFeatureStoreFactory.js","sourceRoot":"","sources":["../../src/DynamoDBFeatureStoreFactory.ts"],"names":[],"mappings":";;AAEA,iEAA0D;AAG1D;;;;;;;;;;;;GAYG;AACH,SAAwB,2BAA2B,CACjD,SAAiB,EACjB,OAA2B;IAE3B,OAAO,CAAC,MAAuB,EAAE,EAAE,CACjC,IAAI,8BAAoB,CAAC,SAAS,EAAE,OAAO,EAAE,MAAM,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC;AACnF,CAAC;AAND,8CAMC"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { LDLogger } from '@launchdarkly/node-server-sdk';
|
|
2
1
|
import { DynamoDBClient, DynamoDBClientConfig } from '@aws-sdk/client-dynamodb';
|
|
2
|
+
import { LDLogger } from '@launchdarkly/node-server-sdk';
|
|
3
3
|
/**
|
|
4
4
|
* Options for configuring {@link DynamoDBFeatureStoreFactory} or {@link DynamoDBBigSegmentStoreFactory}.
|
|
5
5
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LDDynamoDBOptions.d.ts","sourceRoot":"","sources":["../../src/LDDynamoDBOptions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"LDDynamoDBOptions.d.ts","sourceRoot":"","sources":["../../src/LDDynamoDBOptions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAEhF,OAAO,EAAE,QAAQ,EAAE,MAAM,+BAA+B,CAAC;AAEzD;;GAEG;AACH,MAAM,CAAC,OAAO,WAAW,iBAAiB;IACxC;;OAEG;IACH,aAAa,CAAC,EAAE,oBAAoB,CAAC;IAErC;;;;OAIG;IACH,cAAc,CAAC,EAAE,cAAc,CAAC;IAEhC;;;;OAIG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB;;;;;;;;;OASG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB;;;OAGG;IACH,MAAM,CAAC,EAAE,QAAQ,CAAC;CACnB"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@launchdarkly/node-server-sdk-dynamodb",
|
|
3
|
-
"version": "5.0.
|
|
3
|
+
"version": "5.0.6",
|
|
4
4
|
"description": "DynamoDB-backed feature store for the LaunchDarkly Server-Side SDK for Node.js",
|
|
5
5
|
"homepage": "https://github.com/launchdarkly/js-core/tree/main/packages/store/node-server-sdk-dynamodb",
|
|
6
6
|
"repository": {
|
|
@@ -36,21 +36,22 @@
|
|
|
36
36
|
},
|
|
37
37
|
"devDependencies": {
|
|
38
38
|
"@aws-sdk/client-dynamodb": "3.348.0",
|
|
39
|
-
"@launchdarkly/node-server-sdk": "8.1.
|
|
39
|
+
"@launchdarkly/node-server-sdk": "8.1.2",
|
|
40
|
+
"@trivago/prettier-plugin-sort-imports": "^4.1.1",
|
|
40
41
|
"@types/jest": "^29.4.0",
|
|
41
|
-
"@typescript-eslint/eslint-plugin": "^
|
|
42
|
-
"@typescript-eslint/parser": "^
|
|
43
|
-
"eslint": "^8.
|
|
42
|
+
"@typescript-eslint/eslint-plugin": "^6.1.0",
|
|
43
|
+
"@typescript-eslint/parser": "^6.1.0",
|
|
44
|
+
"eslint": "^8.45.0",
|
|
44
45
|
"eslint-config-airbnb-base": "^15.0.0",
|
|
45
|
-
"eslint-config-airbnb-typescript": "^17.
|
|
46
|
-
"eslint-config-prettier": "^8.
|
|
47
|
-
"eslint-plugin-import": "^2.
|
|
48
|
-
"eslint-plugin-prettier": "^
|
|
46
|
+
"eslint-config-airbnb-typescript": "^17.1.0",
|
|
47
|
+
"eslint-config-prettier": "^8.8.0",
|
|
48
|
+
"eslint-plugin-import": "^2.27.5",
|
|
49
|
+
"eslint-plugin-prettier": "^5.0.0",
|
|
49
50
|
"jest": "^29.5.0",
|
|
50
51
|
"launchdarkly-js-test-helpers": "^2.2.0",
|
|
51
|
-
"prettier": "^
|
|
52
|
+
"prettier": "^3.0.0",
|
|
52
53
|
"ts-jest": "^29.0.5",
|
|
53
54
|
"typedoc": "0.23.26",
|
|
54
|
-
"typescript": "^
|
|
55
|
+
"typescript": "^5.1.6"
|
|
55
56
|
}
|
|
56
57
|
}
|