@aligent/microservice-util-lib 0.1.1
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/README.md +36 -0
- package/dist/chunkBy/chunkBy.d.ts +11 -0
- package/dist/chunkBy/chunkBy.js +22 -0
- package/dist/chunkBy/chunkBy.js.map +1 -0
- package/dist/chunkBy/chunkBy.test.d.ts +1 -0
- package/dist/chunkBy/chunkBy.test.js +17 -0
- package/dist/chunkBy/chunkBy.test.js.map +1 -0
- package/dist/fetchSsmParams/fetchSsmParams.d.ts +12 -0
- package/dist/fetchSsmParams/fetchSsmParams.js +82 -0
- package/dist/fetchSsmParams/fetchSsmParams.js.map +1 -0
- package/dist/fetchSsmParams/fetchSsmParams.test.d.ts +1 -0
- package/dist/fetchSsmParams/fetchSsmParams.test.js +119 -0
- package/dist/fetchSsmParams/fetchSsmParams.test.js.map +1 -0
- package/dist/hasPropertiesDefined/hasPropertiesDefined.d.ts +24 -0
- package/dist/hasPropertiesDefined/hasPropertiesDefined.js +36 -0
- package/dist/hasPropertiesDefined/hasPropertiesDefined.js.map +1 -0
- package/dist/hasPropertiesDefined/hasPropertiesDefined.test.d.ts +1 -0
- package/dist/hasPropertiesDefined/hasPropertiesDefined.test.js +37 -0
- package/dist/hasPropertiesDefined/hasPropertiesDefined.test.js.map +1 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.js +19 -0
- package/dist/index.js.map +1 -0
- package/dist/remap/remap.d.ts +147 -0
- package/dist/remap/remap.js +50 -0
- package/dist/remap/remap.js.map +1 -0
- package/dist/remap/remap.test.d.ts +1 -0
- package/dist/remap/remap.test.js +65 -0
- package/dist/remap/remap.test.js.map +1 -0
- package/dist/retryWrapper/retryWrapper.d.ts +40 -0
- package/dist/retryWrapper/retryWrapper.js +121 -0
- package/dist/retryWrapper/retryWrapper.js.map +1 -0
- package/dist/retryWrapper/retryWrapper.test.d.ts +1 -0
- package/dist/retryWrapper/retryWrapper.test.js +234 -0
- package/dist/retryWrapper/retryWrapper.test.js.map +1 -0
- package/dist/s3/s3.d.ts +47 -0
- package/dist/s3/s3.js +196 -0
- package/dist/s3/s3.js.map +1 -0
- package/package.json +44 -0
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
var lodash_1 = __importDefault(require("lodash"));
|
|
7
|
+
/**
|
|
8
|
+
* Map one object's values to another structure
|
|
9
|
+
* @param object the object to map from
|
|
10
|
+
* @param map the keys for the mapping
|
|
11
|
+
* @returns the remapped object
|
|
12
|
+
*
|
|
13
|
+
* @example without a transformer function
|
|
14
|
+
* ```ts
|
|
15
|
+
* const map = [
|
|
16
|
+
* ['foo', 'baz'],
|
|
17
|
+
* ['bar', 'qux.0']
|
|
18
|
+
* ] as const;
|
|
19
|
+
* const obj = { foo: 'hi', bar: 7 }
|
|
20
|
+
* remap(obj, map); // { baz: 'hi', qux: [7] }
|
|
21
|
+
* ```
|
|
22
|
+
* @example with a transformer function
|
|
23
|
+
* ```ts
|
|
24
|
+
* const map = [
|
|
25
|
+
* ['foo', 'baz'],
|
|
26
|
+
* ['bar', 'qux.0', (x: number) => x + 1]
|
|
27
|
+
* ] as const;
|
|
28
|
+
* const obj = { foo: 'hi', bar: 7 }
|
|
29
|
+
* remap(obj, map); // { baz: 'hi', qux: [8] }
|
|
30
|
+
* ```
|
|
31
|
+
* @example with an empty initial key
|
|
32
|
+
* ```ts
|
|
33
|
+
* const map = [
|
|
34
|
+
* ['', 'baz', (x: { foo: number, bar: number }) => x.foo + x.bar]
|
|
35
|
+
* ]
|
|
36
|
+
* const obj = { foo: 3, bar: 7 }
|
|
37
|
+
* remap(obj, map); // { baz: 10 }
|
|
38
|
+
* ```
|
|
39
|
+
*/
|
|
40
|
+
function remap(object, map) {
|
|
41
|
+
var out = {};
|
|
42
|
+
map.forEach(function (item) {
|
|
43
|
+
var parser = item[2] ? item[2] : function (val) { return val; };
|
|
44
|
+
var value = item[0] ? lodash_1.default.get(object, item[0]) : object;
|
|
45
|
+
return lodash_1.default.set(out, item[1], parser(value));
|
|
46
|
+
});
|
|
47
|
+
return out;
|
|
48
|
+
}
|
|
49
|
+
exports.default = remap;
|
|
50
|
+
//# sourceMappingURL=remap.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"remap.js","sourceRoot":"","sources":["../../src/remap/remap.ts"],"names":[],"mappings":";;;;;AAAA,kDAAuB;AAoKvB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,SAAS,KAAK,CAGZ,MAAgB,EAAE,GAAa;IAC/B,IAAM,GAAG,GAAG,EAAE,CAAC;IACf,GAAG,CAAC,OAAO,CAAC,UAAA,IAAI;QACd,IAAM,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,UAAC,GAAQ,IAAK,OAAA,GAAG,EAAH,CAAG,CAAC;QACrD,IAAM,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,gBAAC,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;QACxD,OAAO,gBAAC,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,KAAY,CAAC,CAAC,CAAC;IACnD,CAAC,CAAC,CAAC;IACH,OAAO,GAAU,CAAC;AACpB,CAAC;AAID,kBAAe,KAAK,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
var remap_1 = __importDefault(require("./remap"));
|
|
7
|
+
describe('remap', function () {
|
|
8
|
+
it('remaps an object with one value', function () {
|
|
9
|
+
var obj = { foo: 7 };
|
|
10
|
+
var map = [
|
|
11
|
+
['foo', 'bar']
|
|
12
|
+
];
|
|
13
|
+
var newObj = (0, remap_1.default)(obj, map);
|
|
14
|
+
expect(newObj).toEqual({ bar: 7 });
|
|
15
|
+
});
|
|
16
|
+
it('uses a remap function', function () {
|
|
17
|
+
var obj = { foo: 7 };
|
|
18
|
+
var map = [
|
|
19
|
+
['foo', 'bar', function (val) { return val * 2; }]
|
|
20
|
+
];
|
|
21
|
+
var newObj = (0, remap_1.default)(obj, map);
|
|
22
|
+
expect(newObj).toEqual({ bar: 14 });
|
|
23
|
+
});
|
|
24
|
+
it('remaps through multiple levels', function () {
|
|
25
|
+
var obj = { foo: {
|
|
26
|
+
bar: 5
|
|
27
|
+
} };
|
|
28
|
+
var map = [
|
|
29
|
+
['foo.bar', 'baz']
|
|
30
|
+
];
|
|
31
|
+
var newObj = (0, remap_1.default)(obj, map);
|
|
32
|
+
expect(newObj).toEqual({ baz: 5 });
|
|
33
|
+
});
|
|
34
|
+
it('Passes whole object to function when the source key is blank', function () {
|
|
35
|
+
var obj = { foo: 7, bar: 3 };
|
|
36
|
+
var fn = jest.fn(function (val) {
|
|
37
|
+
return val.foo + val.bar;
|
|
38
|
+
});
|
|
39
|
+
var map = [
|
|
40
|
+
['', 'foo', fn]
|
|
41
|
+
];
|
|
42
|
+
var newObj = (0, remap_1.default)(obj, map);
|
|
43
|
+
expect(newObj).toEqual({ foo: 10 });
|
|
44
|
+
expect(fn).toHaveBeenCalledWith(obj);
|
|
45
|
+
});
|
|
46
|
+
it('creates arrays when .# is used', function () {
|
|
47
|
+
var obj = { foo: 1, bar: 2, baz: 7 };
|
|
48
|
+
var map = [
|
|
49
|
+
['foo', 'foo.0'],
|
|
50
|
+
['bar', 'foo.1'],
|
|
51
|
+
['baz', 'foo.2']
|
|
52
|
+
];
|
|
53
|
+
var newObj = (0, remap_1.default)(obj, map);
|
|
54
|
+
expect(newObj).toEqual({ foo: [1, 2, 7] });
|
|
55
|
+
});
|
|
56
|
+
it('follows the logic in the example code in the docs', function () {
|
|
57
|
+
var map = [
|
|
58
|
+
['foo', 'baz'],
|
|
59
|
+
['bar', 'qux.0', function (x) { return x + 1; }]
|
|
60
|
+
];
|
|
61
|
+
var obj = { foo: 'hi', bar: 7 };
|
|
62
|
+
expect((0, remap_1.default)(obj, map)).toEqual({ baz: 'hi', qux: [8] });
|
|
63
|
+
});
|
|
64
|
+
});
|
|
65
|
+
//# sourceMappingURL=remap.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"remap.test.js","sourceRoot":"","sources":["../../src/remap/remap.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/** Configuration for the retryWrapper */
|
|
2
|
+
interface RetryConfig {
|
|
3
|
+
/**
|
|
4
|
+
* The number of retries to attempt after the first run
|
|
5
|
+
* @default 1
|
|
6
|
+
*/
|
|
7
|
+
retries?: number;
|
|
8
|
+
/**
|
|
9
|
+
* The base delay between retries (in ms)
|
|
10
|
+
* @default 0
|
|
11
|
+
*/
|
|
12
|
+
delay?: number;
|
|
13
|
+
/**
|
|
14
|
+
* The amount to increase the delay by each retry (in ms)
|
|
15
|
+
* @default 0
|
|
16
|
+
*/
|
|
17
|
+
backoffAmount?: number;
|
|
18
|
+
/**
|
|
19
|
+
* A callback to run before each retry
|
|
20
|
+
* @param retries the number of retries so far (will start at 1)
|
|
21
|
+
* @param error the error from the last attempt
|
|
22
|
+
* @param config the configuration supplied to the retryWrapper
|
|
23
|
+
*/
|
|
24
|
+
onRetry?: (retries: number, error: Error, config: RetryConfig) => void;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Retry an async function if it fails
|
|
28
|
+
* @param fn the function to be retried
|
|
29
|
+
* @param config the configuration for retries
|
|
30
|
+
* @example
|
|
31
|
+
* ```ts
|
|
32
|
+
* retryWrapper(someAsyncFunction, {
|
|
33
|
+
* retries: 3,
|
|
34
|
+
* onRetry: (_, error) => console.error(error)
|
|
35
|
+
* });
|
|
36
|
+
* ```
|
|
37
|
+
*/
|
|
38
|
+
declare function retryWrapper<T>(fn: () => Promise<T>, config: RetryConfig): Promise<T>;
|
|
39
|
+
export { RetryConfig };
|
|
40
|
+
export default retryWrapper;
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __assign = (this && this.__assign) || function () {
|
|
3
|
+
__assign = Object.assign || function(t) {
|
|
4
|
+
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
5
|
+
s = arguments[i];
|
|
6
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
|
7
|
+
t[p] = s[p];
|
|
8
|
+
}
|
|
9
|
+
return t;
|
|
10
|
+
};
|
|
11
|
+
return __assign.apply(this, arguments);
|
|
12
|
+
};
|
|
13
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
14
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
15
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
16
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
17
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
18
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
19
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
20
|
+
});
|
|
21
|
+
};
|
|
22
|
+
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
23
|
+
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
|
|
24
|
+
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
25
|
+
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
26
|
+
function step(op) {
|
|
27
|
+
if (f) throw new TypeError("Generator is already executing.");
|
|
28
|
+
while (g && (g = 0, op[0] && (_ = 0)), _) try {
|
|
29
|
+
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
30
|
+
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
31
|
+
switch (op[0]) {
|
|
32
|
+
case 0: case 1: t = op; break;
|
|
33
|
+
case 4: _.label++; return { value: op[1], done: false };
|
|
34
|
+
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
35
|
+
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
36
|
+
default:
|
|
37
|
+
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
38
|
+
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
39
|
+
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
40
|
+
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
41
|
+
if (t[2]) _.ops.pop();
|
|
42
|
+
_.trys.pop(); continue;
|
|
43
|
+
}
|
|
44
|
+
op = body.call(thisArg, _);
|
|
45
|
+
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
46
|
+
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
47
|
+
}
|
|
48
|
+
};
|
|
49
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
50
|
+
/**
|
|
51
|
+
* Retry an async function if it fails
|
|
52
|
+
* @param fn the function to be retried
|
|
53
|
+
* @param config the configuration for retries
|
|
54
|
+
* @param retryCount the number of retries so far
|
|
55
|
+
* @param error the error from teh last retry
|
|
56
|
+
*/
|
|
57
|
+
function retryWrapperInternal(fn, config, retryCount, error) {
|
|
58
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
59
|
+
var result, err_1;
|
|
60
|
+
return __generator(this, function (_a) {
|
|
61
|
+
switch (_a.label) {
|
|
62
|
+
case 0:
|
|
63
|
+
if (config.retries < 0) {
|
|
64
|
+
throw error;
|
|
65
|
+
}
|
|
66
|
+
if (error) {
|
|
67
|
+
if (config.onRetry) {
|
|
68
|
+
config.onRetry(retryCount, error, config);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
_a.label = 1;
|
|
72
|
+
case 1:
|
|
73
|
+
_a.trys.push([1, 3, , 6]);
|
|
74
|
+
return [4 /*yield*/, fn()];
|
|
75
|
+
case 2:
|
|
76
|
+
result = _a.sent();
|
|
77
|
+
return [2 /*return*/, result];
|
|
78
|
+
case 3:
|
|
79
|
+
err_1 = _a.sent();
|
|
80
|
+
return [4 /*yield*/, (function () { return new Promise(function (res) { return setTimeout(res, config.delay); }); })()];
|
|
81
|
+
case 4:
|
|
82
|
+
_a.sent();
|
|
83
|
+
return [4 /*yield*/, retryWrapperInternal(fn, __assign(__assign({}, config), { retries: config.retries - 1, delay: config.delay + config.backoffAmount }), retryCount + 1, err_1)];
|
|
84
|
+
case 5: return [2 /*return*/, _a.sent()];
|
|
85
|
+
case 6: return [2 /*return*/];
|
|
86
|
+
}
|
|
87
|
+
});
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Retry an async function if it fails
|
|
92
|
+
* @param fn the function to be retried
|
|
93
|
+
* @param config the configuration for retries
|
|
94
|
+
* @example
|
|
95
|
+
* ```ts
|
|
96
|
+
* retryWrapper(someAsyncFunction, {
|
|
97
|
+
* retries: 3,
|
|
98
|
+
* onRetry: (_, error) => console.error(error)
|
|
99
|
+
* });
|
|
100
|
+
* ```
|
|
101
|
+
*/
|
|
102
|
+
function retryWrapper(fn, config) {
|
|
103
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
104
|
+
var defaultConfig;
|
|
105
|
+
return __generator(this, function (_a) {
|
|
106
|
+
switch (_a.label) {
|
|
107
|
+
case 0:
|
|
108
|
+
defaultConfig = {
|
|
109
|
+
retries: 1,
|
|
110
|
+
delay: 0,
|
|
111
|
+
backoffAmount: 0,
|
|
112
|
+
onRetry: function () { return null; }
|
|
113
|
+
};
|
|
114
|
+
return [4 /*yield*/, retryWrapperInternal(fn, __assign(__assign({}, defaultConfig), config), 0)];
|
|
115
|
+
case 1: return [2 /*return*/, _a.sent()];
|
|
116
|
+
}
|
|
117
|
+
});
|
|
118
|
+
});
|
|
119
|
+
}
|
|
120
|
+
exports.default = retryWrapper;
|
|
121
|
+
//# sourceMappingURL=retryWrapper.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"retryWrapper.js","sourceRoot":"","sources":["../../src/retryWrapper/retryWrapper.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA0BA;;;;;;GAMG;AACH,SAAe,oBAAoB,CACjC,EAAoB,EACpB,MAA6B,EAC7B,UAAkB,EAClB,KAAa;;;;;;oBAEb,IAAI,MAAM,CAAC,OAAO,GAAG,CAAC,EAAE;wBACtB,MAAM,KAAK,CAAC;qBACb;oBACD,IAAI,KAAK,EAAE;wBACT,IAAI,MAAM,CAAC,OAAO,EAAE;4BAClB,MAAM,CAAC,OAAO,CAAC,UAAU,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;yBAC3C;qBACF;;;;oBAEgB,qBAAM,EAAE,EAAE,EAAA;;oBAAnB,MAAM,GAAG,SAAU;oBACzB,sBAAO,MAAM,EAAC;;;oBAEd,qBAAM,CAAC,cAAM,OAAA,IAAI,OAAO,CAAC,UAAC,GAAG,IAAK,OAAA,UAAU,CAAC,GAAG,EAAE,MAAM,CAAC,KAAK,CAAC,EAA7B,CAA6B,CAAC,EAAnD,CAAmD,CAAC,EAAE,EAAA;;oBAAnE,SAAmE,CAAC;oBAC7D,qBAAM,oBAAoB,CAC/B,EAAE,wBAEG,MAAM,KACT,OAAO,EAAE,MAAM,CAAC,OAAO,GAAG,CAAC,EAC3B,KAAK,EAAE,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC,aAAa,KAE5C,UAAU,GAAG,CAAC,EACd,KAAG,CACJ,EAAA;wBATD,sBAAO,SASN,EAAC;;;;;CAEL;AAED;;;;;;;;;;;GAWG;AACH,SAAe,YAAY,CACzB,EAAoB,EACpB,MAAmB;;;;;;oBAEb,aAAa,GAA0B;wBAC3C,OAAO,EAAE,CAAC;wBACV,KAAK,EAAE,CAAC;wBACR,aAAa,EAAE,CAAC;wBAChB,OAAO,EAAE,cAAM,OAAA,IAAI,EAAJ,CAAI;qBACpB,CAAC;oBACK,qBAAM,oBAAoB,CAC/B,EAAE,wBAEG,aAAa,GACb,MAAM,GAEX,CAAC,CACF,EAAA;wBAPD,sBAAO,SAON,EAAC;;;;CACH;AAGD,kBAAe,YAAY,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,234 @@
|
|
|
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
|
+
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
12
|
+
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
|
|
13
|
+
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
14
|
+
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
15
|
+
function step(op) {
|
|
16
|
+
if (f) throw new TypeError("Generator is already executing.");
|
|
17
|
+
while (g && (g = 0, op[0] && (_ = 0)), _) try {
|
|
18
|
+
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
19
|
+
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
20
|
+
switch (op[0]) {
|
|
21
|
+
case 0: case 1: t = op; break;
|
|
22
|
+
case 4: _.label++; return { value: op[1], done: false };
|
|
23
|
+
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
24
|
+
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
25
|
+
default:
|
|
26
|
+
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
27
|
+
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
28
|
+
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
29
|
+
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
30
|
+
if (t[2]) _.ops.pop();
|
|
31
|
+
_.trys.pop(); continue;
|
|
32
|
+
}
|
|
33
|
+
op = body.call(thisArg, _);
|
|
34
|
+
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
35
|
+
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
36
|
+
}
|
|
37
|
+
};
|
|
38
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
39
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
40
|
+
};
|
|
41
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
42
|
+
var retryWrapper_1 = __importDefault(require("./retryWrapper"));
|
|
43
|
+
describe('retryWrapper', function () {
|
|
44
|
+
it('returns function\'s result', function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
45
|
+
var result;
|
|
46
|
+
return __generator(this, function (_a) {
|
|
47
|
+
switch (_a.label) {
|
|
48
|
+
case 0: return [4 /*yield*/, (0, retryWrapper_1.default)(function () { return __awaiter(void 0, void 0, void 0, function () { return __generator(this, function (_a) {
|
|
49
|
+
return [2 /*return*/, 3];
|
|
50
|
+
}); }); }, {
|
|
51
|
+
retries: 1
|
|
52
|
+
})];
|
|
53
|
+
case 1:
|
|
54
|
+
result = _a.sent();
|
|
55
|
+
expect(result).toBe(3);
|
|
56
|
+
return [2 /*return*/];
|
|
57
|
+
}
|
|
58
|
+
});
|
|
59
|
+
}); });
|
|
60
|
+
it('retries the function the correct amount of times', function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
61
|
+
var fn, _a;
|
|
62
|
+
return __generator(this, function (_b) {
|
|
63
|
+
switch (_b.label) {
|
|
64
|
+
case 0:
|
|
65
|
+
fn = jest.fn(function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
66
|
+
return __generator(this, function (_a) {
|
|
67
|
+
throw new Error('Test Error');
|
|
68
|
+
});
|
|
69
|
+
}); });
|
|
70
|
+
_b.label = 1;
|
|
71
|
+
case 1:
|
|
72
|
+
_b.trys.push([1, 3, , 4]);
|
|
73
|
+
return [4 /*yield*/, (0, retryWrapper_1.default)(fn, { retries: 3 })];
|
|
74
|
+
case 2:
|
|
75
|
+
_b.sent();
|
|
76
|
+
return [3 /*break*/, 4];
|
|
77
|
+
case 3:
|
|
78
|
+
_a = _b.sent();
|
|
79
|
+
expect(fn).toHaveBeenCalledTimes(4);
|
|
80
|
+
return [3 /*break*/, 4];
|
|
81
|
+
case 4: return [2 /*return*/];
|
|
82
|
+
}
|
|
83
|
+
});
|
|
84
|
+
}); });
|
|
85
|
+
it('errors if the function returns an error every time', function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
86
|
+
var fn, ex_1;
|
|
87
|
+
return __generator(this, function (_a) {
|
|
88
|
+
switch (_a.label) {
|
|
89
|
+
case 0:
|
|
90
|
+
fn = jest.fn(function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
91
|
+
return __generator(this, function (_a) {
|
|
92
|
+
throw new Error('Test Error');
|
|
93
|
+
});
|
|
94
|
+
}); });
|
|
95
|
+
_a.label = 1;
|
|
96
|
+
case 1:
|
|
97
|
+
_a.trys.push([1, 3, , 4]);
|
|
98
|
+
return [4 /*yield*/, (0, retryWrapper_1.default)(fn, { retries: 3 })];
|
|
99
|
+
case 2:
|
|
100
|
+
_a.sent();
|
|
101
|
+
return [3 /*break*/, 4];
|
|
102
|
+
case 3:
|
|
103
|
+
ex_1 = _a.sent();
|
|
104
|
+
expect(ex_1).toBeTruthy();
|
|
105
|
+
return [3 /*break*/, 4];
|
|
106
|
+
case 4: return [2 /*return*/];
|
|
107
|
+
}
|
|
108
|
+
});
|
|
109
|
+
}); });
|
|
110
|
+
it('retries after error', function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
111
|
+
var count, fn, _a;
|
|
112
|
+
return __generator(this, function (_b) {
|
|
113
|
+
switch (_b.label) {
|
|
114
|
+
case 0:
|
|
115
|
+
count = 0;
|
|
116
|
+
fn = jest.fn(function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
117
|
+
return __generator(this, function (_a) {
|
|
118
|
+
if (count < 2) {
|
|
119
|
+
count++;
|
|
120
|
+
throw new Error('Test Error');
|
|
121
|
+
}
|
|
122
|
+
return [2 /*return*/, true];
|
|
123
|
+
});
|
|
124
|
+
}); });
|
|
125
|
+
_a = expect;
|
|
126
|
+
return [4 /*yield*/, (0, retryWrapper_1.default)(fn, { retries: 3 })];
|
|
127
|
+
case 1:
|
|
128
|
+
_a.apply(void 0, [_b.sent()]).toBe(true);
|
|
129
|
+
expect(fn).toHaveBeenCalledTimes(3);
|
|
130
|
+
return [2 /*return*/];
|
|
131
|
+
}
|
|
132
|
+
});
|
|
133
|
+
}); });
|
|
134
|
+
it('adds a delay between tries', function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
135
|
+
var fn, retries, delay, startTime, _a, totalTime;
|
|
136
|
+
return __generator(this, function (_b) {
|
|
137
|
+
switch (_b.label) {
|
|
138
|
+
case 0:
|
|
139
|
+
fn = jest.fn(function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
140
|
+
return __generator(this, function (_a) {
|
|
141
|
+
throw new Error('Test Error');
|
|
142
|
+
});
|
|
143
|
+
}); });
|
|
144
|
+
retries = 3;
|
|
145
|
+
delay = 300;
|
|
146
|
+
startTime = Date.now();
|
|
147
|
+
_b.label = 1;
|
|
148
|
+
case 1:
|
|
149
|
+
_b.trys.push([1, 3, , 4]);
|
|
150
|
+
return [4 /*yield*/, (0, retryWrapper_1.default)(fn, {
|
|
151
|
+
retries: retries,
|
|
152
|
+
delay: delay
|
|
153
|
+
})];
|
|
154
|
+
case 2:
|
|
155
|
+
_b.sent();
|
|
156
|
+
return [3 /*break*/, 4];
|
|
157
|
+
case 3:
|
|
158
|
+
_a = _b.sent();
|
|
159
|
+
return [3 /*break*/, 4];
|
|
160
|
+
case 4:
|
|
161
|
+
totalTime = Date.now() - startTime;
|
|
162
|
+
expect(totalTime).toBeGreaterThanOrEqual((retries + 1) * delay);
|
|
163
|
+
return [2 /*return*/];
|
|
164
|
+
}
|
|
165
|
+
});
|
|
166
|
+
}); });
|
|
167
|
+
it('calls the onRetry function when a retry happens', function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
168
|
+
var onRetry, fn, _a;
|
|
169
|
+
return __generator(this, function (_b) {
|
|
170
|
+
switch (_b.label) {
|
|
171
|
+
case 0:
|
|
172
|
+
onRetry = jest.fn();
|
|
173
|
+
fn = jest.fn(function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
174
|
+
return __generator(this, function (_a) {
|
|
175
|
+
throw new Error('Test Error');
|
|
176
|
+
});
|
|
177
|
+
}); });
|
|
178
|
+
_b.label = 1;
|
|
179
|
+
case 1:
|
|
180
|
+
_b.trys.push([1, 3, , 4]);
|
|
181
|
+
return [4 /*yield*/, (0, retryWrapper_1.default)(fn, {
|
|
182
|
+
retries: 1,
|
|
183
|
+
onRetry: onRetry
|
|
184
|
+
})];
|
|
185
|
+
case 2:
|
|
186
|
+
_b.sent();
|
|
187
|
+
return [3 /*break*/, 4];
|
|
188
|
+
case 3:
|
|
189
|
+
_a = _b.sent();
|
|
190
|
+
return [3 /*break*/, 4];
|
|
191
|
+
case 4:
|
|
192
|
+
expect(onRetry).toHaveBeenCalledTimes(1);
|
|
193
|
+
return [2 /*return*/];
|
|
194
|
+
}
|
|
195
|
+
});
|
|
196
|
+
}); });
|
|
197
|
+
it('accurately counts retries', function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
198
|
+
var onRetry, err, fn, _a;
|
|
199
|
+
return __generator(this, function (_b) {
|
|
200
|
+
switch (_b.label) {
|
|
201
|
+
case 0:
|
|
202
|
+
onRetry = jest.fn();
|
|
203
|
+
err = new Error('Test Error');
|
|
204
|
+
fn = jest.fn(function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
205
|
+
return __generator(this, function (_a) {
|
|
206
|
+
throw err;
|
|
207
|
+
});
|
|
208
|
+
}); });
|
|
209
|
+
_b.label = 1;
|
|
210
|
+
case 1:
|
|
211
|
+
_b.trys.push([1, 3, , 4]);
|
|
212
|
+
return [4 /*yield*/, (0, retryWrapper_1.default)(fn, {
|
|
213
|
+
retries: 3,
|
|
214
|
+
onRetry: onRetry
|
|
215
|
+
})];
|
|
216
|
+
case 2:
|
|
217
|
+
_b.sent();
|
|
218
|
+
return [3 /*break*/, 4];
|
|
219
|
+
case 3:
|
|
220
|
+
_a = _b.sent();
|
|
221
|
+
return [3 /*break*/, 4];
|
|
222
|
+
case 4:
|
|
223
|
+
expect(onRetry).toHaveBeenLastCalledWith(3, err, {
|
|
224
|
+
retries: 0,
|
|
225
|
+
onRetry: onRetry,
|
|
226
|
+
delay: 0,
|
|
227
|
+
backoffAmount: 0
|
|
228
|
+
});
|
|
229
|
+
return [2 /*return*/];
|
|
230
|
+
}
|
|
231
|
+
});
|
|
232
|
+
}); });
|
|
233
|
+
});
|
|
234
|
+
//# sourceMappingURL=retryWrapper.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"retryWrapper.test.js","sourceRoot":"","sources":["../../src/retryWrapper/retryWrapper.test.ts"],"names":[],"mappings":"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"}
|
package/dist/s3/s3.d.ts
ADDED
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { S3 } from 'aws-sdk';
|
|
2
|
+
/** A data access object for an S3 bucket */
|
|
3
|
+
declare class S3Dao {
|
|
4
|
+
private s3;
|
|
5
|
+
private bucket;
|
|
6
|
+
/**
|
|
7
|
+
* @param bucket the location of the bucket that objects should be stored in
|
|
8
|
+
*/
|
|
9
|
+
constructor(bucket: string);
|
|
10
|
+
/**
|
|
11
|
+
* Store data in an S3 bucket
|
|
12
|
+
* @param data the data to store
|
|
13
|
+
* @param name the name to call the object in S3 @default the hash of the data
|
|
14
|
+
* @returns an object which can be used to fetch the data
|
|
15
|
+
*/
|
|
16
|
+
storeData<T>(data: T, name?: string): Promise<S3.GetObjectRequest>;
|
|
17
|
+
/**
|
|
18
|
+
* Store an array of object as individual chunks in S3
|
|
19
|
+
* @param data the data to store
|
|
20
|
+
* @param chunkSize the number of entries that should be in each chunk
|
|
21
|
+
* @returns an array of objects which can be used to fetch the chunks
|
|
22
|
+
*/
|
|
23
|
+
storeChunked<T extends any[]>(data: T, chunkSize: number): Promise<S3.GetObjectRequest[]>;
|
|
24
|
+
/**
|
|
25
|
+
* Fetch an object from the S3 bucket
|
|
26
|
+
* @param objectDetails the object which describes the location of the object
|
|
27
|
+
* @returns the body of the object
|
|
28
|
+
*/
|
|
29
|
+
fetchData<T>(objectDetails: S3.GetObjectRequest): Promise<T>;
|
|
30
|
+
/**
|
|
31
|
+
* Generator to fetch chunked data, chunk by chunk
|
|
32
|
+
* @param chunks the list of object chunks
|
|
33
|
+
*/
|
|
34
|
+
fetchChunks<T>(chunks: S3.GetObjectRequest[]): AsyncGenerator<{
|
|
35
|
+
chunk: T;
|
|
36
|
+
s3Object: S3.GetObjectRequest;
|
|
37
|
+
}, {
|
|
38
|
+
chunk: T;
|
|
39
|
+
s3Object: S3.GetObjectRequest;
|
|
40
|
+
}, unknown>;
|
|
41
|
+
/**
|
|
42
|
+
* Delete an object from the S3 bucket
|
|
43
|
+
* @param objectDetails the object to delete
|
|
44
|
+
*/
|
|
45
|
+
deleteData(objectDetails: S3.GetObjectRequest): Promise<import("aws-sdk/lib/request").PromiseResult<S3.DeleteObjectOutput, import("aws-sdk").AWSError>>;
|
|
46
|
+
}
|
|
47
|
+
export default S3Dao;
|