@autofleet/settings 1.4.4 → 2.0.0-beta.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.
- package/dist/index.d.ts +6 -3
- package/dist/index.js +18 -16
- package/dist/index.test.js +3 -2
- package/package.json +9 -11
- package/src/alltypes.d.ts +0 -1
- package/src/index.test.ts +2 -1
- package/src/index.ts +14 -5
package/dist/index.d.ts
CHANGED
|
@@ -1,12 +1,14 @@
|
|
|
1
1
|
/// <reference types="node" />
|
|
2
|
+
import { LoggerInstanceManager } from '@autofleet/logger';
|
|
2
3
|
import NodeCache from 'node-cache';
|
|
3
4
|
import EventEmitter from 'events';
|
|
4
5
|
interface SettingsClassOptions {
|
|
5
6
|
serviceUrl?: string;
|
|
6
7
|
ttl?: number;
|
|
7
8
|
disableTestEnvCheck?: boolean;
|
|
9
|
+
logger?: LoggerInstanceManager;
|
|
8
10
|
}
|
|
9
|
-
|
|
11
|
+
type SettingValue = string | boolean | number | any[] | any;
|
|
10
12
|
interface Location {
|
|
11
13
|
lat: number;
|
|
12
14
|
lng: number;
|
|
@@ -19,7 +21,7 @@ interface Label {
|
|
|
19
21
|
time?: string | Date;
|
|
20
22
|
location?: Location;
|
|
21
23
|
}
|
|
22
|
-
|
|
24
|
+
type LabelsArray = Label[];
|
|
23
25
|
interface GetSettingOption {
|
|
24
26
|
timeout?: number;
|
|
25
27
|
rejectOnFail?: boolean;
|
|
@@ -29,11 +31,12 @@ declare class SettingsManager {
|
|
|
29
31
|
settingsCache: NodeCache;
|
|
30
32
|
networkEvents: EventEmitter;
|
|
31
33
|
network: any;
|
|
34
|
+
logger?: LoggerInstanceManager;
|
|
32
35
|
NEVER_DEFAULT_VALUE: string;
|
|
33
36
|
disableTestEnvCheck: boolean;
|
|
34
37
|
static get NEVER_DEFAULT_VALUE(): string;
|
|
35
38
|
static readNetworkValue(networkValue: SettingValue, defaultValue: SettingValue): any;
|
|
36
|
-
constructor({ serviceUrl, ttl, disableTestEnvCheck }?: SettingsClassOptions);
|
|
39
|
+
constructor({ serviceUrl, ttl, disableTestEnvCheck, logger, }?: SettingsClassOptions);
|
|
37
40
|
get(key: SettingValue, defaultValue?: any, labels?: LabelsArray, { timeout, rejectOnFail }?: GetSettingOption): Promise<any>;
|
|
38
41
|
getMultiple(settingsToGet: {
|
|
39
42
|
key: SettingValue;
|
package/dist/index.js
CHANGED
|
@@ -17,7 +17,6 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
17
17
|
// eslint-disable-next-line max-classes-per-file
|
|
18
18
|
const dotenv_1 = __importDefault(require("dotenv"));
|
|
19
19
|
const network_1 = __importDefault(require("@autofleet/network"));
|
|
20
|
-
const logger_1 = __importDefault(require("@autofleet/logger"));
|
|
21
20
|
const node_cache_1 = __importDefault(require("node-cache"));
|
|
22
21
|
const events_1 = __importDefault(require("events"));
|
|
23
22
|
const util_1 = __importDefault(require("util"));
|
|
@@ -25,7 +24,6 @@ const moment_1 = __importDefault(require("moment"));
|
|
|
25
24
|
const h3_js_1 = __importDefault(require("h3-js"));
|
|
26
25
|
dotenv_1.default.config();
|
|
27
26
|
const nextTick = util_1.default.promisify(process.nextTick);
|
|
28
|
-
const logger = logger_1.default();
|
|
29
27
|
const fiveMinutes = 60 * 5;
|
|
30
28
|
const waitingToNetwork = 'waitingToNetwork';
|
|
31
29
|
const findUrl = (serviceUrl) => serviceUrl
|
|
@@ -34,17 +32,6 @@ const findUrl = (serviceUrl) => serviceUrl
|
|
|
34
32
|
class CannotGetNetworkValueError extends Error {
|
|
35
33
|
}
|
|
36
34
|
class SettingsManager {
|
|
37
|
-
constructor({ serviceUrl, ttl = fiveMinutes, disableTestEnvCheck = false } = {}) {
|
|
38
|
-
const localServiceUrl = findUrl(serviceUrl);
|
|
39
|
-
this.NEVER_DEFAULT_VALUE = SettingsManager.NEVER_DEFAULT_VALUE;
|
|
40
|
-
this.ttl = ttl;
|
|
41
|
-
this.disableTestEnvCheck = disableTestEnvCheck;
|
|
42
|
-
this.settingsCache = new node_cache_1.default();
|
|
43
|
-
this.networkEvents = new events_1.default();
|
|
44
|
-
this.network = new network_1.default({
|
|
45
|
-
serviceUrl: localServiceUrl,
|
|
46
|
-
});
|
|
47
|
-
}
|
|
48
35
|
static get NEVER_DEFAULT_VALUE() {
|
|
49
36
|
return 'NEVER_DEFAULT_VALUE';
|
|
50
37
|
}
|
|
@@ -55,7 +42,21 @@ class SettingsManager {
|
|
|
55
42
|
}
|
|
56
43
|
return returnValue;
|
|
57
44
|
}
|
|
45
|
+
constructor({ serviceUrl, ttl = fiveMinutes, disableTestEnvCheck = false, logger, } = {}) {
|
|
46
|
+
const localServiceUrl = findUrl(serviceUrl);
|
|
47
|
+
this.NEVER_DEFAULT_VALUE = SettingsManager.NEVER_DEFAULT_VALUE;
|
|
48
|
+
this.ttl = ttl;
|
|
49
|
+
this.disableTestEnvCheck = disableTestEnvCheck;
|
|
50
|
+
this.settingsCache = new node_cache_1.default();
|
|
51
|
+
this.networkEvents = new events_1.default();
|
|
52
|
+
this.network = new network_1.default({
|
|
53
|
+
serviceUrl: localServiceUrl,
|
|
54
|
+
keepAlive: false,
|
|
55
|
+
});
|
|
56
|
+
this.logger = logger;
|
|
57
|
+
}
|
|
58
58
|
get(key, defaultValue, labels = [], { timeout = 5000, rejectOnFail = false } = {}) {
|
|
59
|
+
var _a;
|
|
59
60
|
return __awaiter(this, void 0, void 0, function* () {
|
|
60
61
|
if (typeof defaultValue === 'undefined') {
|
|
61
62
|
throw new Error('Can\'t get a key without defaultValue');
|
|
@@ -91,7 +92,7 @@ class SettingsManager {
|
|
|
91
92
|
networkValue = networkResponse.data.value;
|
|
92
93
|
}
|
|
93
94
|
catch (error) {
|
|
94
|
-
logger.error('Cant get setting from network', { error, rejectOnFail, key });
|
|
95
|
+
(_a = this.logger) === null || _a === void 0 ? void 0 : _a.error('Cant get setting from network', { error, rejectOnFail, key });
|
|
95
96
|
if (rejectOnFail) {
|
|
96
97
|
const errorToThrow = new CannotGetNetworkValueError();
|
|
97
98
|
this.networkEvents.emit(cacheKey, errorToThrow);
|
|
@@ -112,6 +113,7 @@ class SettingsManager {
|
|
|
112
113
|
});
|
|
113
114
|
}
|
|
114
115
|
getMultiple(settingsToGet, labels, { timeout = 5000, rejectOnFail = false } = {}) {
|
|
116
|
+
var _a;
|
|
115
117
|
return __awaiter(this, void 0, void 0, function* () {
|
|
116
118
|
const settingsToReturn = new Map();
|
|
117
119
|
const settingsToFetch = [];
|
|
@@ -144,7 +146,7 @@ class SettingsManager {
|
|
|
144
146
|
});
|
|
145
147
|
}
|
|
146
148
|
catch (err) {
|
|
147
|
-
logger.error('Cant get setting from network', { err });
|
|
149
|
+
(_a = this.logger) === null || _a === void 0 ? void 0 : _a.error('Cant get setting from network', { err });
|
|
148
150
|
if (rejectOnFail) {
|
|
149
151
|
throw new CannotGetNetworkValueError();
|
|
150
152
|
}
|
|
@@ -178,7 +180,7 @@ class SettingsManager {
|
|
|
178
180
|
getCacheKey(key, labels) {
|
|
179
181
|
const newLabels = labels.map((l) => {
|
|
180
182
|
if (l.time) {
|
|
181
|
-
return Object.assign(Object.assign({}, l), { time: moment_1.default(l.time).startOf('hour').format(), day: moment_1.default(l.time).day() });
|
|
183
|
+
return Object.assign(Object.assign({}, l), { time: (0, moment_1.default)(l.time).startOf('hour').format(), day: (0, moment_1.default)(l.time).day() });
|
|
182
184
|
}
|
|
183
185
|
if (l.location && l.location.lat && l.location.lng) {
|
|
184
186
|
const h3Index = h3_js_1.default.latLngToCell(l.location.lat, l.location.lng, 8);
|
package/dist/index.test.js
CHANGED
|
@@ -13,6 +13,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
13
13
|
};
|
|
14
14
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
15
|
const index_1 = __importDefault(require("./index"));
|
|
16
|
+
/* eslint-disable import/no-extraneous-dependencies */
|
|
16
17
|
const nock = require('nock');
|
|
17
18
|
process.env.NODE_ENV = 'node-common-test';
|
|
18
19
|
const serviceUrl = 'localhost:8085';
|
|
@@ -157,7 +158,7 @@ describe('Settings', () => {
|
|
|
157
158
|
expect(f())
|
|
158
159
|
.rejects.toEqual(new Error('Cannot find value from network or cache, default value is set to never'));
|
|
159
160
|
}));
|
|
160
|
-
it('Throws an error if network error and no default value and success the next time', (done) =>
|
|
161
|
+
it('Throws an error if network error and no default value and success the next time', (done) => {
|
|
161
162
|
const settings = new index_1.default({
|
|
162
163
|
serviceUrl: `http://${serviceUrl}/`,
|
|
163
164
|
});
|
|
@@ -170,7 +171,7 @@ describe('Settings', () => {
|
|
|
170
171
|
expect(m.isDone());
|
|
171
172
|
done();
|
|
172
173
|
}), 100);
|
|
173
|
-
})
|
|
174
|
+
});
|
|
174
175
|
it('Values can be flushed', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
175
176
|
const m1 = mockSetting('key1', 'value1');
|
|
176
177
|
const settings = new index_1.default({
|
package/package.json
CHANGED
|
@@ -1,28 +1,23 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@autofleet/settings",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "2.0.0-beta.0",
|
|
4
4
|
"description": "",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"scripts": {
|
|
7
7
|
"start": "ts-node src/index.ts",
|
|
8
8
|
"example": "ts-node src/example.ts",
|
|
9
9
|
"build": "tsc",
|
|
10
|
-
"prepublish": "npm run build",
|
|
11
10
|
"linter": "./node_modules/.bin/eslint .",
|
|
12
11
|
"test": "jest --forceExit",
|
|
13
12
|
"coverage": "jest --coverage --forceExit --runInBand && rm -rf ./coverage",
|
|
14
13
|
"dev": "nodemon"
|
|
15
14
|
},
|
|
16
15
|
"dependencies": {
|
|
17
|
-
"@autofleet/logger": "^
|
|
18
|
-
"@autofleet/network": "^1.
|
|
19
|
-
"@types/jest": "^22.0.0",
|
|
20
|
-
"bluebird": "^3.7.2",
|
|
16
|
+
"@autofleet/logger": "^4.0.6",
|
|
17
|
+
"@autofleet/network": "^1.5.1",
|
|
21
18
|
"dotenv": "^8.2.0",
|
|
22
19
|
"h3-js": "^4.1.0",
|
|
23
|
-
"jest": "^22.4.4",
|
|
24
20
|
"moment": "^2.29.1",
|
|
25
|
-
"nock": "^10.0.2",
|
|
26
21
|
"node-cache": "^5.1.2"
|
|
27
22
|
},
|
|
28
23
|
"devDependencies": {
|
|
@@ -30,9 +25,12 @@
|
|
|
30
25
|
"eslint": "^7.13.0",
|
|
31
26
|
"eslint-config-airbnb-typescript": "^12.0.0",
|
|
32
27
|
"eslint-plugin-import": "^2.22.1",
|
|
33
|
-
"ts-jest": "^
|
|
34
|
-
"ts-node": "^
|
|
35
|
-
"typescript": "^
|
|
28
|
+
"ts-jest": "^29.0.3",
|
|
29
|
+
"ts-node": "^10.9.1",
|
|
30
|
+
"typescript": "^4.7.4",
|
|
31
|
+
"jest": "^29.7.0",
|
|
32
|
+
"@types/jest": "^28.1.6",
|
|
33
|
+
"nock": "^10.0.2"
|
|
36
34
|
},
|
|
37
35
|
"author": "",
|
|
38
36
|
"license": "ISC"
|
package/src/alltypes.d.ts
CHANGED
package/src/index.test.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import Settings from './index';
|
|
2
2
|
|
|
3
|
+
/* eslint-disable import/no-extraneous-dependencies */
|
|
3
4
|
const nock = require('nock');
|
|
4
5
|
|
|
5
6
|
process.env.NODE_ENV = 'node-common-test';
|
|
@@ -179,7 +180,7 @@ describe('Settings', () => {
|
|
|
179
180
|
.rejects.toEqual(new Error('Cannot find value from network or cache, default value is set to never'));
|
|
180
181
|
});
|
|
181
182
|
|
|
182
|
-
it('Throws an error if network error and no default value and success the next time',
|
|
183
|
+
it('Throws an error if network error and no default value and success the next time', (done) => {
|
|
183
184
|
const settings = new Settings({
|
|
184
185
|
serviceUrl: `http://${serviceUrl}/`,
|
|
185
186
|
});
|
package/src/index.ts
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
// eslint-disable-next-line max-classes-per-file
|
|
4
4
|
import dotenv from 'dotenv';
|
|
5
5
|
import Network from '@autofleet/network';
|
|
6
|
-
import
|
|
6
|
+
import { LoggerInstanceManager } from '@autofleet/logger';
|
|
7
7
|
import NodeCache from 'node-cache';
|
|
8
8
|
import EventEmitter from 'events';
|
|
9
9
|
import util from 'util';
|
|
@@ -13,7 +13,6 @@ import h3 from 'h3-js';
|
|
|
13
13
|
dotenv.config();
|
|
14
14
|
|
|
15
15
|
const nextTick = util.promisify(process.nextTick);
|
|
16
|
-
const logger = Logger();
|
|
17
16
|
|
|
18
17
|
const fiveMinutes = 60 * 5;
|
|
19
18
|
const waitingToNetwork = 'waitingToNetwork';
|
|
@@ -26,6 +25,7 @@ interface SettingsClassOptions {
|
|
|
26
25
|
serviceUrl?: string;
|
|
27
26
|
ttl?: number;
|
|
28
27
|
disableTestEnvCheck?: boolean;
|
|
28
|
+
logger?: LoggerInstanceManager;
|
|
29
29
|
}
|
|
30
30
|
|
|
31
31
|
type SettingValue = string | boolean | number | any[] | any;
|
|
@@ -62,6 +62,8 @@ class SettingsManager {
|
|
|
62
62
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
63
63
|
network: any;
|
|
64
64
|
|
|
65
|
+
logger?: LoggerInstanceManager;
|
|
66
|
+
|
|
65
67
|
NEVER_DEFAULT_VALUE: string;
|
|
66
68
|
|
|
67
69
|
disableTestEnvCheck: boolean;
|
|
@@ -80,7 +82,12 @@ class SettingsManager {
|
|
|
80
82
|
return returnValue;
|
|
81
83
|
}
|
|
82
84
|
|
|
83
|
-
constructor({
|
|
85
|
+
constructor({
|
|
86
|
+
serviceUrl,
|
|
87
|
+
ttl = fiveMinutes,
|
|
88
|
+
disableTestEnvCheck = false,
|
|
89
|
+
logger,
|
|
90
|
+
}: SettingsClassOptions = {}) {
|
|
84
91
|
const localServiceUrl = findUrl(serviceUrl);
|
|
85
92
|
|
|
86
93
|
this.NEVER_DEFAULT_VALUE = SettingsManager.NEVER_DEFAULT_VALUE;
|
|
@@ -90,7 +97,9 @@ class SettingsManager {
|
|
|
90
97
|
this.networkEvents = new EventEmitter();
|
|
91
98
|
this.network = new Network({
|
|
92
99
|
serviceUrl: localServiceUrl,
|
|
100
|
+
keepAlive: false,
|
|
93
101
|
});
|
|
102
|
+
this.logger = logger;
|
|
94
103
|
}
|
|
95
104
|
|
|
96
105
|
async get(
|
|
@@ -135,7 +144,7 @@ class SettingsManager {
|
|
|
135
144
|
});
|
|
136
145
|
networkValue = networkResponse.data.value;
|
|
137
146
|
} catch (error) {
|
|
138
|
-
logger
|
|
147
|
+
this.logger?.error('Cant get setting from network', { error, rejectOnFail, key });
|
|
139
148
|
if (rejectOnFail) {
|
|
140
149
|
const errorToThrow = new CannotGetNetworkValueError();
|
|
141
150
|
this.networkEvents.emit(cacheKey, errorToThrow);
|
|
@@ -196,7 +205,7 @@ class SettingsManager {
|
|
|
196
205
|
settingsToReturn.set(key, values[index].value);
|
|
197
206
|
});
|
|
198
207
|
} catch (err) {
|
|
199
|
-
logger
|
|
208
|
+
this.logger?.error('Cant get setting from network', { err });
|
|
200
209
|
if (rejectOnFail) {
|
|
201
210
|
throw new CannotGetNetworkValueError();
|
|
202
211
|
}
|