@digitraffic/common 2022.10.6-1 → 2022.10.7-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 +49 -0
- package/aws/index.d.ts +1 -0
- package/aws/index.js +18 -0
- package/aws/infra/api/index.d.ts +1 -0
- package/aws/infra/api/index.js +18 -0
- package/aws/infra/api/responses.js +1 -1
- package/aws/infra/stack/lambda-configs.js +1 -1
- package/aws/infra/stack/rest_apis.d.ts +1 -0
- package/aws/infra/stack/rest_apis.js +8 -2
- package/aws/infra/stack/stack.d.ts +4 -1
- package/aws/infra/stack/stack.js +1 -1
- package/aws/infra/usage-plans.js +1 -1
- package/aws/types/errors.js +1 -1
- package/aws/types/tags.js +1 -1
- package/database/last-updated.js +10 -10
- package/package.json +3 -2
- package/test/httpserver.js +1 -1
- package/types/index.d.ts +1 -0
- package/types/index.js +18 -0
- package/types/language.js +1 -1
- package/utils/geometry.js +1 -1
- package/src/aws/infra/api/integration.js +0 -52
- package/src/aws/infra/api/response.js +0 -61
- package/src/aws/infra/api/responses.js +0 -79
- package/src/aws/infra/api/static-integration.js +0 -54
- package/src/aws/infra/canaries/canary-alarm.js +0 -26
- package/src/aws/infra/canaries/canary-parameters.js +0 -3
- package/src/aws/infra/canaries/canary-role.js +0 -46
- package/src/aws/infra/canaries/canary.js +0 -29
- package/src/aws/infra/canaries/database-canary.js +0 -55
- package/src/aws/infra/canaries/database-checker.js +0 -109
- package/src/aws/infra/canaries/url-canary.js +0 -46
- package/src/aws/infra/canaries/url-checker.js +0 -238
- package/src/aws/infra/documentation.js +0 -95
- package/src/aws/infra/scheduler.js +0 -31
- package/src/aws/infra/security-rule.js +0 -39
- package/src/aws/infra/sqs-integration.js +0 -93
- package/src/aws/infra/sqs-queue.js +0 -130
- package/src/aws/infra/stack/lambda-configs.js +0 -93
- package/src/aws/infra/stack/monitoredfunction.js +0 -135
- package/src/aws/infra/stack/rest_apis.js +0 -179
- package/src/aws/infra/stack/stack-checking-aspect.js +0 -163
- package/src/aws/infra/stack/stack.js +0 -58
- package/src/aws/infra/stack/subscription.js +0 -41
- package/src/aws/infra/usage-plans.js +0 -42
- package/src/aws/runtime/apikey.js +0 -13
- package/src/aws/runtime/digitraffic-integration-response.js +0 -26
- package/src/aws/runtime/messaging.js +0 -31
- package/src/aws/runtime/s3.js +0 -30
- package/src/aws/runtime/secrets/dbsecret.js +0 -96
- package/src/aws/runtime/secrets/proxy-holder.js +0 -26
- package/src/aws/runtime/secrets/rds-holder.js +0 -26
- package/src/aws/runtime/secrets/secret-holder.js +0 -73
- package/src/aws/runtime/secrets/secret.js +0 -43
- package/src/aws/types/errors.js +0 -9
- package/src/aws/types/lambda-response.js +0 -28
- package/src/aws/types/mediatypes.js +0 -15
- package/src/aws/types/model-with-reference.js +0 -3
- package/src/aws/types/proxytypes.js +0 -3
- package/src/aws/types/tags.js +0 -7
- package/src/database/cached.js +0 -32
- package/src/database/database.js +0 -62
- package/src/database/last-updated.js +0 -54
- package/src/marine/id_utils.js +0 -33
- package/src/marine/rtz.js +0 -3
- package/src/test/asserter.js +0 -45
- package/src/test/db-testutils.js +0 -31
- package/src/test/httpserver.js +0 -67
- package/src/test/secret.js +0 -25
- package/src/test/secrets-manager.js +0 -59
- package/src/test/testutils.js +0 -44
- package/src/types/input-error.js +0 -7
- package/src/types/language.js +0 -10
- package/src/types/traffictype.js +0 -13
- package/src/types/validator.js +0 -14
- package/src/utils/api-model.js +0 -129
- package/src/utils/base64.js +0 -21
- package/src/utils/date-utils.js +0 -34
- package/src/utils/geojson-types.js +0 -18
- package/src/utils/geometry.js +0 -140
- package/src/utils/retry.js +0 -50
- package/src/utils/slack.js +0 -25
- package/src/utils/utils.js +0 -40
- package/test/marine/id_utils.test.js +0 -69
- package/test/promise/promise.test.js +0 -125
- package/test/secrets/dbsecret.test.js +0 -71
- package/test/secrets/secret-holder.test.js +0 -124
- package/test/secrets/secret.test.js +0 -66
- package/test/test/httpserver.test.js +0 -87
- package/test/utils/date-utils.test.js +0 -51
- package/test/utils/geometry.test.js +0 -49
- package/test/utils/utils.test.js +0 -49
- package/yarn.lock +0 -3200
package/src/utils/base64.js
DELETED
@@ -1,21 +0,0 @@
|
|
1
|
-
"use strict";
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
-
exports.decodeBase64 = exports.decodeBase64ToAscii = void 0;
|
4
|
-
/**
|
5
|
-
* Decode given string from base64 to ascii
|
6
|
-
* @param str string
|
7
|
-
*/
|
8
|
-
function decodeBase64ToAscii(str) {
|
9
|
-
return decodeBase64(str, 'ascii');
|
10
|
-
}
|
11
|
-
exports.decodeBase64ToAscii = decodeBase64ToAscii;
|
12
|
-
/**
|
13
|
-
* Decode given string from base64 to given encoding
|
14
|
-
* @param str
|
15
|
-
* @param encoding
|
16
|
-
*/
|
17
|
-
function decodeBase64(str, encoding) {
|
18
|
-
return Buffer.from(str, 'base64').toString(encoding);
|
19
|
-
}
|
20
|
-
exports.decodeBase64 = decodeBase64;
|
21
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZTY0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3V0aWxzL2Jhc2U2NC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQTs7O0dBR0c7QUFDSCxTQUFnQixtQkFBbUIsQ0FBQyxHQUFXO0lBQzNDLE9BQU8sWUFBWSxDQUFDLEdBQUcsRUFBRSxPQUFPLENBQUMsQ0FBQztBQUN0QyxDQUFDO0FBRkQsa0RBRUM7QUFFRDs7OztHQUlHO0FBQ0gsU0FBZ0IsWUFBWSxDQUFDLEdBQVcsRUFBRSxRQUF3QjtJQUM5RCxPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLFFBQVEsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUN6RCxDQUFDO0FBRkQsb0NBRUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIERlY29kZSBnaXZlbiBzdHJpbmcgZnJvbSBiYXNlNjQgdG8gYXNjaWlcbiAqIEBwYXJhbSBzdHIgc3RyaW5nXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZWNvZGVCYXNlNjRUb0FzY2lpKHN0cjogc3RyaW5nKSB7XG4gICAgcmV0dXJuIGRlY29kZUJhc2U2NChzdHIsICdhc2NpaScpO1xufVxuXG4vKipcbiAqIERlY29kZSBnaXZlbiBzdHJpbmcgZnJvbSBiYXNlNjQgdG8gZ2l2ZW4gZW5jb2RpbmdcbiAqIEBwYXJhbSBzdHJcbiAqIEBwYXJhbSBlbmNvZGluZ1xuICovXG5leHBvcnQgZnVuY3Rpb24gZGVjb2RlQmFzZTY0KHN0cjogc3RyaW5nLCBlbmNvZGluZzogQnVmZmVyRW5jb2RpbmcpIHtcbiAgICByZXR1cm4gQnVmZmVyLmZyb20oc3RyLCAnYmFzZTY0JykudG9TdHJpbmcoZW5jb2RpbmcpO1xufVxuIl19
|
package/src/utils/date-utils.js
DELETED
@@ -1,34 +0,0 @@
|
|
1
|
-
"use strict";
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
-
exports.dateFromIsoString = exports.countDiffInSeconds = exports.countDiffMs = void 0;
|
4
|
-
/**
|
5
|
-
* Counts difference in milliseconds between dates.
|
6
|
-
* @param start
|
7
|
-
* @param end
|
8
|
-
*/
|
9
|
-
function countDiffMs(start, end) {
|
10
|
-
return end.getTime() - start.getTime();
|
11
|
-
}
|
12
|
-
exports.countDiffMs = countDiffMs;
|
13
|
-
/**
|
14
|
-
* Counts difference in seconds between dates.
|
15
|
-
* @param start
|
16
|
-
* @param end
|
17
|
-
*/
|
18
|
-
function countDiffInSeconds(start, end) {
|
19
|
-
return countDiffMs(start, end) / 1000;
|
20
|
-
}
|
21
|
-
exports.countDiffInSeconds = countDiffInSeconds;
|
22
|
-
/**
|
23
|
-
* Converts ISO 8601 date-time -string to Date object
|
24
|
-
* @param isoString to convert
|
25
|
-
*/
|
26
|
-
function dateFromIsoString(isoString) {
|
27
|
-
const parsed = new Date(isoString);
|
28
|
-
if (!(parsed instanceof Date) || isNaN(parsed.getTime())) {
|
29
|
-
throw new Error(`Invalid ISO-DATE -string: ${isoString}`);
|
30
|
-
}
|
31
|
-
return parsed;
|
32
|
-
}
|
33
|
-
exports.dateFromIsoString = dateFromIsoString;
|
34
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS11dGlscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy91dGlscy9kYXRlLXV0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUNBOzs7O0dBSUc7QUFDSCxTQUFnQixXQUFXLENBQUMsS0FBVyxFQUFFLEdBQVM7SUFDOUMsT0FBTyxHQUFHLENBQUMsT0FBTyxFQUFFLEdBQUcsS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDO0FBQzNDLENBQUM7QUFGRCxrQ0FFQztBQUVEOzs7O0dBSUc7QUFDSCxTQUFnQixrQkFBa0IsQ0FBQyxLQUFXLEVBQUUsR0FBUztJQUNyRCxPQUFPLFdBQVcsQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLEdBQUMsSUFBSSxDQUFDO0FBQ3hDLENBQUM7QUFGRCxnREFFQztBQUVEOzs7R0FHRztBQUNILFNBQWdCLGlCQUFpQixDQUFDLFNBQWlCO0lBQy9DLE1BQU0sTUFBTSxHQUFHLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ25DLElBQUksQ0FBQyxDQUFDLE1BQU0sWUFBWSxJQUFJLENBQUMsSUFBSSxLQUFLLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDLEVBQUU7UUFDdEQsTUFBTSxJQUFJLEtBQUssQ0FBQyw2QkFBNkIsU0FBUyxFQUFFLENBQUMsQ0FBQztLQUM3RDtJQUNELE9BQU8sTUFBTSxDQUFDO0FBQ2xCLENBQUM7QUFORCw4Q0FNQyIsInNvdXJjZXNDb250ZW50IjpbIlxuLyoqXG4gKiBDb3VudHMgZGlmZmVyZW5jZSBpbiBtaWxsaXNlY29uZHMgYmV0d2VlbiBkYXRlcy5cbiAqIEBwYXJhbSBzdGFydFxuICogQHBhcmFtIGVuZFxuICovXG5leHBvcnQgZnVuY3Rpb24gY291bnREaWZmTXMoc3RhcnQ6IERhdGUsIGVuZDogRGF0ZSk6IG51bWJlciB7XG4gICAgcmV0dXJuIGVuZC5nZXRUaW1lKCkgLSBzdGFydC5nZXRUaW1lKCk7XG59XG5cbi8qKlxuICogQ291bnRzIGRpZmZlcmVuY2UgaW4gc2Vjb25kcyBiZXR3ZWVuIGRhdGVzLlxuICogQHBhcmFtIHN0YXJ0XG4gKiBAcGFyYW0gZW5kXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb3VudERpZmZJblNlY29uZHMoc3RhcnQ6IERhdGUsIGVuZDogRGF0ZSk6IG51bWJlciB7XG4gICAgcmV0dXJuIGNvdW50RGlmZk1zKHN0YXJ0LCBlbmQpLzEwMDA7XG59XG5cbi8qKlxuICogQ29udmVydHMgSVNPIDg2MDEgZGF0ZS10aW1lIC1zdHJpbmcgdG8gRGF0ZSBvYmplY3RcbiAqIEBwYXJhbSBpc29TdHJpbmcgdG8gY29udmVydFxuICovXG5leHBvcnQgZnVuY3Rpb24gZGF0ZUZyb21Jc29TdHJpbmcoaXNvU3RyaW5nOiBzdHJpbmcpOiBEYXRlIHtcbiAgICBjb25zdCBwYXJzZWQgPSBuZXcgRGF0ZShpc29TdHJpbmcpO1xuICAgIGlmICghKHBhcnNlZCBpbnN0YW5jZW9mIERhdGUpIHx8IGlzTmFOKHBhcnNlZC5nZXRUaW1lKCkpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBJU08tREFURSAtc3RyaW5nOiAke2lzb1N0cmluZ31gKTtcbiAgICB9XG4gICAgcmV0dXJuIHBhcnNlZDtcbn1cbiJdfQ==
|
@@ -1,18 +0,0 @@
|
|
1
|
-
"use strict";
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
-
exports.GeoJsonLineString = exports.GeoJsonPoint = void 0;
|
4
|
-
class GeoJsonPoint {
|
5
|
-
constructor(coordinates) {
|
6
|
-
this.type = "Point";
|
7
|
-
this.coordinates = coordinates;
|
8
|
-
}
|
9
|
-
}
|
10
|
-
exports.GeoJsonPoint = GeoJsonPoint;
|
11
|
-
class GeoJsonLineString {
|
12
|
-
constructor(coordinates) {
|
13
|
-
this.type = "LineString";
|
14
|
-
this.coordinates = coordinates;
|
15
|
-
}
|
16
|
-
}
|
17
|
-
exports.GeoJsonLineString = GeoJsonLineString;
|
18
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VvanNvbi10eXBlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy91dGlscy9nZW9qc29uLXR5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUtBLE1BQWEsWUFBWTtJQUlyQixZQUFZLFdBQXFCO1FBSHhCLFNBQUksR0FBRyxPQUFPLENBQUM7UUFJcEIsSUFBSSxDQUFDLFdBQVcsR0FBRyxXQUFXLENBQUM7SUFDbkMsQ0FBQztDQUNKO0FBUEQsb0NBT0M7QUFFRCxNQUFhLGlCQUFpQjtJQUkxQixZQUFZLFdBQXVCO1FBSDFCLFNBQUksR0FBRyxZQUFZLENBQUM7UUFJekIsSUFBSSxDQUFDLFdBQVcsR0FBRyxXQUFXLENBQUM7SUFDbkMsQ0FBQztDQUNKO0FBUEQsOENBT0MiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEdlb0pTT04gdHlwZXNcbiAqL1xuaW1wb3J0IHtMaW5lU3RyaW5nLCBQb2ludCwgUG9zaXRpb259IGZyb20gXCJnZW9qc29uXCI7XG5cbmV4cG9ydCBjbGFzcyBHZW9Kc29uUG9pbnQgaW1wbGVtZW50cyBQb2ludCB7XG4gICAgcmVhZG9ubHkgdHlwZSA9IFwiUG9pbnRcIjtcbiAgICByZWFkb25seSBjb29yZGluYXRlczogUG9zaXRpb247XG5cbiAgICBjb25zdHJ1Y3Rvcihjb29yZGluYXRlczogUG9zaXRpb24pIHtcbiAgICAgICAgdGhpcy5jb29yZGluYXRlcyA9IGNvb3JkaW5hdGVzO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEdlb0pzb25MaW5lU3RyaW5nIGltcGxlbWVudHMgTGluZVN0cmluZyB7XG4gICAgcmVhZG9ubHkgdHlwZSA9IFwiTGluZVN0cmluZ1wiO1xuICAgIHJlYWRvbmx5IGNvb3JkaW5hdGVzOiBQb3NpdGlvbltdO1xuXG4gICAgY29uc3RydWN0b3IoY29vcmRpbmF0ZXM6IFBvc2l0aW9uW10pIHtcbiAgICAgICAgdGhpcy5jb29yZGluYXRlcyA9IGNvb3JkaW5hdGVzO1xuICAgIH1cbn1cbiJdfQ==
|
package/src/utils/geometry.js
DELETED
@@ -1,140 +0,0 @@
|
|
1
|
-
"use strict";
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
-
exports.positionToList = exports.createGmlLineString = exports.distanceBetweenPositionsInM = exports.areDistinctPositions = exports.distanceBetweenPositionsInKm = exports.isFeatureCollection = exports.isValidGeoJson = exports.createFeatureCollection = exports.createGeometry = exports.SRID_WGS84 = void 0;
|
4
|
-
exports.SRID_WGS84 = 4326;
|
5
|
-
/**
|
6
|
-
* Creates WKT geometry from GeoJSON geometry
|
7
|
-
* @param geometry GeoJson geometry to convert to WKT
|
8
|
-
*/
|
9
|
-
function createGeometry(geometry) {
|
10
|
-
if (geometry.type === 'LineString') {
|
11
|
-
const coordinates = linestring(geometry.coordinates);
|
12
|
-
return `LINESTRING(${coordinates})`;
|
13
|
-
}
|
14
|
-
else if (geometry.type === 'Point') {
|
15
|
-
const coordinates = coordinatePair(geometry.coordinates);
|
16
|
-
return `POINT(${coordinates})`;
|
17
|
-
}
|
18
|
-
else if (geometry.type === 'Polygon') {
|
19
|
-
const coordinates = polygon(geometry.coordinates);
|
20
|
-
return `POLYGON(${coordinates})`;
|
21
|
-
}
|
22
|
-
else if (geometry.type === 'MultiPolygon') {
|
23
|
-
const coordinates = multiPolygon(geometry.coordinates);
|
24
|
-
return `MULTIPOLYGON(${coordinates})`;
|
25
|
-
}
|
26
|
-
console.error("unsupported locationType=%s", geometry.type);
|
27
|
-
return "POLYGON EMPTY";
|
28
|
-
}
|
29
|
-
exports.createGeometry = createGeometry;
|
30
|
-
function linestring(coordinates) {
|
31
|
-
return coordinates.map((c) => coordinatePair(c)).join(',');
|
32
|
-
}
|
33
|
-
function polygon(coordinates) {
|
34
|
-
const list = coordinates.map((c) => linestring(c)).join(',');
|
35
|
-
return `(${list})`;
|
36
|
-
}
|
37
|
-
function multiPolygon(coordinates) {
|
38
|
-
const list = coordinates.map((c) => polygon(c)).join(',');
|
39
|
-
return `(${list})`;
|
40
|
-
}
|
41
|
-
function coordinatePair(coordinate) {
|
42
|
-
return `${coordinate[0]} ${coordinate[1]}`;
|
43
|
-
}
|
44
|
-
/**
|
45
|
-
* Create a GeoJSON FeatureCollection from a list of GeoJSON features with a 'last updated' property
|
46
|
-
* @param features List of Features
|
47
|
-
* @param lastUpdated Last updated date
|
48
|
-
*/
|
49
|
-
function createFeatureCollection(features, lastUpdated) {
|
50
|
-
return {
|
51
|
-
type: "FeatureCollection",
|
52
|
-
lastUpdated: lastUpdated,
|
53
|
-
features: features,
|
54
|
-
};
|
55
|
-
}
|
56
|
-
exports.createFeatureCollection = createFeatureCollection;
|
57
|
-
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
58
|
-
const geoJsonValidator = require('geojson-validation');
|
59
|
-
function isValidGeoJson(json) {
|
60
|
-
return geoJsonValidator.valid(json);
|
61
|
-
}
|
62
|
-
exports.isValidGeoJson = isValidGeoJson;
|
63
|
-
function isFeatureCollection(json) {
|
64
|
-
return geoJsonValidator.isFeatureCollection(json);
|
65
|
-
}
|
66
|
-
exports.isFeatureCollection = isFeatureCollection;
|
67
|
-
const DEGREES_TO_RADIANS = 0.017453292519943295; // = Math.PI / 180
|
68
|
-
const EARTH_RADIUS_KM = 6371;
|
69
|
-
/**
|
70
|
-
* Returns the distance between this and given GeoJSON point in kilometers. Doesn't take in account altitude.
|
71
|
-
* Based on the following Stack Overflow question:
|
72
|
-
* http://stackoverflow.com/questions/27928/calculate-distance-between-two-latitude-longitude-points-haversine-formula,
|
73
|
-
* which is based on https://en.wikipedia.org/wiki/Haversine_formula (error rate: ~0.55%).
|
74
|
-
*/
|
75
|
-
function distanceBetweenWGS84PointsInKm(fromXLon, fromYLat, toXLon, toYLat) {
|
76
|
-
const diffLat = toRadians(toYLat - fromYLat);
|
77
|
-
const diffLon = toRadians(toXLon - fromXLon);
|
78
|
-
const a = Math.sin(diffLat / 2) * Math.sin(diffLat / 2) +
|
79
|
-
Math.cos(toRadians(fromYLat)) * Math.cos(toRadians(toYLat)) *
|
80
|
-
Math.sin(diffLon / 2) * Math.sin(diffLon / 2);
|
81
|
-
const c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));
|
82
|
-
return EARTH_RADIUS_KM * c;
|
83
|
-
}
|
84
|
-
/**
|
85
|
-
* Calculates distance between two GeoJSON points (WGS84)
|
86
|
-
* @param pos1
|
87
|
-
* @param pos2
|
88
|
-
*/
|
89
|
-
function distanceBetweenPositionsInKm(pos1, pos2) {
|
90
|
-
return distanceBetweenWGS84PointsInKm(pos1[0], pos1[1], pos2[0], pos2[1]);
|
91
|
-
}
|
92
|
-
exports.distanceBetweenPositionsInKm = distanceBetweenPositionsInKm;
|
93
|
-
function areDistinctPositions(previous, next) {
|
94
|
-
return previous[0] !== next[0] || previous[1] !== next[1];
|
95
|
-
}
|
96
|
-
exports.areDistinctPositions = areDistinctPositions;
|
97
|
-
/**
|
98
|
-
* Calculates distance between two GeoJSON points (WGS84)
|
99
|
-
* @param pos1
|
100
|
-
* @param pos2
|
101
|
-
*/
|
102
|
-
function distanceBetweenPositionsInM(pos1, pos2) {
|
103
|
-
return distanceBetweenPositionsInKm(pos1, pos2) * 1000; // km -> m
|
104
|
-
}
|
105
|
-
exports.distanceBetweenPositionsInM = distanceBetweenPositionsInM;
|
106
|
-
function createGmlLineString(geometry, srsName = 'EPSG:4326') {
|
107
|
-
const posList = createPosList(geometry);
|
108
|
-
return {
|
109
|
-
srsName,
|
110
|
-
posList,
|
111
|
-
};
|
112
|
-
}
|
113
|
-
exports.createGmlLineString = createGmlLineString;
|
114
|
-
function createPosList(geometry) {
|
115
|
-
if (geometry.type === 'Point') {
|
116
|
-
return positionToList(geometry.coordinates);
|
117
|
-
}
|
118
|
-
else if (geometry.type === 'LineString') {
|
119
|
-
return lineStringToList(geometry.coordinates);
|
120
|
-
}
|
121
|
-
else if (geometry.type === 'Polygon') {
|
122
|
-
return polygonToList(geometry.coordinates);
|
123
|
-
}
|
124
|
-
throw new Error("unknown geometry type " + JSON.stringify(geometry));
|
125
|
-
}
|
126
|
-
function polygonToList(positions, precision = 8) {
|
127
|
-
return positions.map(p => lineStringToList(p, precision)).join(' ');
|
128
|
-
}
|
129
|
-
function lineStringToList(positions, precision = 8) {
|
130
|
-
return positions.map(p => positionToList(p, precision)).join(' ');
|
131
|
-
}
|
132
|
-
function positionToList(position, precision = 8) {
|
133
|
-
return position.map(n => n.toPrecision(precision)).join(' ');
|
134
|
-
}
|
135
|
-
exports.positionToList = positionToList;
|
136
|
-
// Converts numeric degrees to radians
|
137
|
-
function toRadians(angdeg) {
|
138
|
-
return angdeg * DEGREES_TO_RADIANS;
|
139
|
-
}
|
140
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VvbWV0cnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdXRpbHMvZ2VvbWV0cnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBS2EsUUFBQSxVQUFVLEdBQUcsSUFBSSxDQUFDO0FBRS9COzs7R0FHRztBQUNILFNBQWdCLGNBQWMsQ0FBQyxRQUFrQjtJQUM3QyxJQUFJLFFBQVEsQ0FBQyxJQUFJLEtBQUssWUFBWSxFQUFFO1FBQ2hDLE1BQU0sV0FBVyxHQUFHLFVBQVUsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLENBQUM7UUFFckQsT0FBTyxjQUFjLFdBQVcsR0FBRyxDQUFDO0tBQ3ZDO1NBQU0sSUFBSSxRQUFRLENBQUMsSUFBSSxLQUFLLE9BQU8sRUFBRTtRQUNsQyxNQUFNLFdBQVcsR0FBRyxjQUFjLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBRXpELE9BQU8sU0FBUyxXQUFXLEdBQUcsQ0FBQztLQUNsQztTQUFNLElBQUksUUFBUSxDQUFDLElBQUksS0FBSyxTQUFTLEVBQUU7UUFDcEMsTUFBTSxXQUFXLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUVsRCxPQUFPLFdBQVcsV0FBVyxHQUFHLENBQUM7S0FDcEM7U0FBTSxJQUFJLFFBQVEsQ0FBQyxJQUFJLEtBQUssY0FBYyxFQUFFO1FBQ3pDLE1BQU0sV0FBVyxHQUFHLFlBQVksQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLENBQUM7UUFFdkQsT0FBTyxnQkFBZ0IsV0FBVyxHQUFHLENBQUM7S0FDekM7SUFFRCxPQUFPLENBQUMsS0FBSyxDQUFDLDZCQUE2QixFQUFFLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM1RCxPQUFPLGVBQWUsQ0FBQztBQUMzQixDQUFDO0FBckJELHdDQXFCQztBQUVELFNBQVMsVUFBVSxDQUFDLFdBQXVCO0lBQ3ZDLE9BQU8sV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQVcs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QzlDO0lBRUQsTUFBTSxJQUFJLEtBQUssQ0FBQyx3QkFBd0IsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7QUFDekUsQ0FBQztBQUVELFNBQVMsYUFBYSxDQUFDLFNBQXVCLEVBQUUsU0FBUyxHQUFHLENBQUM7SUFDekQsT0FBTyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3hFLENBQUM7QUFFRCxTQUFTLGdCQUFnQixDQUFDLFNBQXFCLEVBQUUsU0FBUyxHQUFHLENBQUM7SUFDMUQsT0FBTyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsY0FBYyxDQUFDLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN0RSxDQUFDO0FBRUQsU0FBZ0IsY0FBYyxDQUFDLFFBQWtCLEVBQUUsU0FBUyxHQUFHLENBQUM7SUFDNUQsT0FBTyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNqRSxDQUFDO0FBRkQsd0NBRUM7QUFFRCxzQ0FBc0M7QUFDdEMsU0FBUyxTQUFTLENBQUMsTUFBYTtJQUM1QixPQUFPLE1BQU0sR0FBRyxrQkFBa0IsQ0FBQztBQUN2QyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEdlb0pTT04gZnVuY3Rpb25zIGFuZCB0b29sc1xyXG4gKi9cclxuaW1wb3J0IHtGZWF0dXJlLCBGZWF0dXJlQ29sbGVjdGlvbiwgR2VvbWV0cnksIFBvc2l0aW9ufSBmcm9tIFwiZ2VvanNvblwiO1xyXG5cclxuZXhwb3J0IGNvbnN0IFNSSURfV0dTODQgPSA0MzI2O1xyXG5cclxuLyoqXHJcbiAqIENyZWF0ZXMgV0tUIGdlb21ldHJ5IGZyb20gR2VvSlNPTiBnZW9tZXRyeVxyXG4gKiBAcGFyYW0gZ2VvbWV0cnkgR2VvSnNvbiBnZW9tZXRyeSB0byBjb252ZXJ0IHRvIFdLVFxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUdlb21ldHJ5KGdlb21ldHJ5OiBHZW9tZXRyeSk6IHN0cmluZyB7XHJcbiAgICBpZiAoZ2VvbWV0cnkudHlwZSA9PT0gJ0xpbmVTdHJpbmcnKSB7XHJcbiAgICAgICAgY29uc3QgY29vcmRpbmF0ZXMgPSBsaW5lc3RyaW5nKGdlb21ldHJ5LmNvb3JkaW5hdGVzKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIGBMSU5FU1RSSU5HKCR7Y29vcmRpbmF0ZXN9KWA7XHJcbiAgICB9IGVsc2UgaWYgKGdlb21ldHJ5LnR5cGUgPT09ICdQb2ludCcpIHtcclxuICAgICAgICBjb25zdCBjb29yZGluYXRlcyA9IGNvb3JkaW5hdGVQYWlyKGdlb21ldHJ5LmNvb3JkaW5hdGVzKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIGBQT0lOVCgke2Nvb3JkaW5hdGVzfSlgO1xyXG4gICAgfSBlbHNlIGlmIChnZW9tZXRyeS50eXBlID09PSAnUG9seWdvbicpIHtcclxuICAgICAgICBjb25zdCBjb29yZGluYXRlcyA9IHBvbHlnb24oZ2VvbWV0cnkuY29vcmRpbmF0ZXMpO1xyXG5cclxuICAgICAgICByZXR1cm4gYFBPTFlHT04oJHtjb29yZGluYXRlc30pYDtcclxuICAgIH0gZWxzZSBpZiAoZ2VvbWV0cnkudHlwZSA9PT0gJ011bHRpUG9seWdvbicpIHtcclxuICAgICAgICBjb25zdCBjb29yZGluYXRlcyA9IG11bHRpUG9seWdvbihnZW9tZXRyeS5jb29yZGluYXRlcyk7XHJcblxyXG4gICAgICAgIHJldHVybiBgTVVMVElQT0xZR09OKCR7Y29vcmRpbmF0ZXN9KWA7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc29sZS5lcnJvcihcInVuc3VwcG9ydGVkIGxvY2F0aW9uVHlwZT0lc1wiLCBnZW9tZXRyeS50eXBlKTtcclxuICAgIHJldHVybiBcIlBPTFlHT04gRU1QVFlcIjtcclxufVxyXG5cclxuZnVuY3Rpb24gbGluZXN0cmluZyhjb29yZGluYXRlczogUG9zaXRpb25bXSk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gY29vcmRpbmF0ZXMubWFwKChjOiBQb3NpdGlvbikgPT4gIGNvb3JkaW5hdGVQYWlyKGMpKS5qb2luKCcsJyk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHBvbHlnb24oY29vcmRpbmF0ZXM6IFBvc2l0aW9uW11bXSk6c3RyaW5nIHtcclxuICAgIGNvbnN0IGxpc3QgPSBjb29yZGluYXRlcy5tYXAoKGM6IFBvc2l0aW9uW10pID0+IGxpbmVzdHJpbmcoYykpLmpvaW4oJywnKTtcclxuICAgIHJldHVybiBgKCR7bGlzdH0pYDtcclxufVxyXG5cclxuZnVuY3Rpb24gbXVsdGlQb2x5Z29uKGNvb3JkaW5hdGVzOiBQb3NpdGlvbltdW11bXSk6c3RyaW5nIHtcclxuICAgIGNvbnN0IGxpc3QgPSBjb29yZGluYXRlcy5tYXAoKGM6IFBvc2l0aW9uW11bXSkgPT4gcG9seWdvbihjKSkuam9pbignLCcpO1xyXG4gICAgcmV0dXJuIGAoJHtsaXN0fSlgO1xyXG59XHJcblxyXG5mdW5jdGlvbiBjb29yZGluYXRlUGFpcihjb29yZGluYXRlOiBQb3NpdGlvbik6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gYCR7Y29vcmRpbmF0ZVswXX0gJHtjb29yZGluYXRlWzFdfWA7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBDcmVhdGUgYSBHZW9KU09OIEZlYXR1cmVDb2xsZWN0aW9uIGZyb20gYSBsaXN0IG9mIEdlb0pTT04gZmVhdHVyZXMgd2l0aCBhICdsYXN0IHVwZGF0ZWQnIHByb3BlcnR5XHJcbiAqIEBwYXJhbSBmZWF0dXJlcyBMaXN0IG9mIEZlYXR1cmVzXHJcbiAqIEBwYXJhbSBsYXN0VXBkYXRlZCBMYXN0IHVwZGF0ZWQgZGF0ZVxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUZlYXR1cmVDb2xsZWN0aW9uKGZlYXR1cmVzOiBGZWF0dXJlW10sIGxhc3RVcGRhdGVkOiBEYXRlIHwgbnVsbCk6IEZlYXR1cmVDb2xsZWN0aW9uIHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgdHlwZTogXCJGZWF0dXJlQ29sbGVjdGlvblwiLFxyXG4gICAgICAgIGxhc3RVcGRhdGVkOiBsYXN0VXBkYXRlZCxcclxuICAgICAgICBmZWF0dXJlczogZmVhdHVyZXMsXHJcbiAgICB9IGFzIEZlYXR1cmVDb2xsZWN0aW9uO1xyXG59XHJcblxyXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXZhci1yZXF1aXJlc1xyXG5jb25zdCBnZW9Kc29uVmFsaWRhdG9yID0gcmVxdWlyZSgnZ2VvanNvbi12YWxpZGF0aW9uJyk7XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gaXNWYWxpZEdlb0pzb248VD4oanNvbjogVCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIGdlb0pzb25WYWxpZGF0b3IudmFsaWQoanNvbik7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBpc0ZlYXR1cmVDb2xsZWN0aW9uPFQ+KGpzb246IFQpOiBib29sZWFuIHtcclxuICAgIHJldHVybiBnZW9Kc29uVmFsaWRhdG9yLmlzRmVhdHVyZUNvbGxlY3Rpb24oanNvbik7XHJcbn1cclxuXHJcbmNvbnN0IERFR1JFRVNfVE9fUkFESUFOUyA9IDAuMDE3NDUzMjkyNTE5OTQzMjk1OyAvLyA9IE1hdGguUEkgLyAxODBcclxuY29uc3QgRUFSVEhfUkFESVVTX0tNID0gNjM3MTtcclxuXHJcblxyXG4vKipcclxuICogUmV0dXJucyB0aGUgZGlzdGFuY2UgYmV0d2VlbiB0aGlzIGFuZCBnaXZlbiBHZW9KU09OIHBvaW50IGluIGtpbG9tZXRlcnMuIERvZXNuJ3QgdGFrZSBpbiBhY2NvdW50IGFsdGl0dWRlLlxyXG4gKiBCYXNlZCBvbiB0aGUgZm9sbG93aW5nIFN0YWNrIE92ZXJmbG93IHF1ZXN0aW9uOlxyXG4gKiBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzI3OTI4L2NhbGN1bGF0ZS1kaXN0YW5jZS1iZXR3ZWVuLXR3by1sYXRpdHVkZS1sb25naXR1ZGUtcG9pbnRzLWhhdmVyc2luZS1mb3JtdWxhLFxyXG4gKiB3aGljaCBpcyBiYXNlZCBvbiBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9IYXZlcnNpbmVfZm9ybXVsYSAoZXJyb3IgcmF0ZTogfjAuNTUlKS5cclxuICovXHJcbmZ1bmN0aW9uIGRpc3RhbmNlQmV0d2VlbldHUzg0UG9pbnRzSW5LbShmcm9tWExvbjpudW1iZXIsIGZyb21ZTGF0Om51bWJlciwgdG9YTG9uOm51bWJlciwgdG9ZTGF0Om51bWJlcik6IG51bWJlciAge1xyXG5cclxuICAgIGNvbnN0IGRpZmZMYXQgPSB0b1JhZGlhbnModG9ZTGF0IC0gZnJvbVlMYXQpO1xyXG4gICAgY29uc3QgZGlmZkxvbiA9IHRvUmFkaWFucyh0b1hMb24gLSBmcm9tWExvbik7XHJcblxyXG4gICAgY29uc3QgYSA9XHJcbiAgICAgICAgTWF0aC5zaW4oZGlmZkxhdCAvIDIpICogTWF0aC5zaW4oZGlmZkxhdCAvIDIpICtcclxuICAgICAgICBNYXRoLmNvcyh0b1JhZGlhbnMoZnJvbVlMYXQpKSAqIE1hdGguY29zKHRvUmFkaWFucyh0b1lMYXQpKSAqXHJcbiAgICAgICAgTWF0aC5zaW4oZGlmZkxvbiAvIDIpICogTWF0aC5zaW4oZGlmZkxvbiAvIDIpO1xyXG4gICAgY29uc3QgYyA9IDIgKiBNYXRoLmF0YW4yKE1hdGguc3FydChhKSwgTWF0aC5zcXJ0KDEgLSBhKSk7XHJcbiAgICByZXR1cm4gRUFSVEhfUkFESVVTX0tNICogYztcclxufVxyXG5cclxuLyoqXHJcbiAqIENhbGN1bGF0ZXMgZGlzdGFuY2UgYmV0d2VlbiB0d28gR2VvSlNPTiBwb2ludHMgKFdHUzg0KVxyXG4gKiBAcGFyYW0gcG9zMVxyXG4gKiBAcGFyYW0gcG9zMlxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGRpc3RhbmNlQmV0d2VlblBvc2l0aW9uc0luS20ocG9zMTogUG9zaXRpb24sIHBvczI6IFBvc2l0aW9uKSB7XHJcbiAgICByZXR1cm4gZGlzdGFuY2VCZXR3ZWVuV0dTODRQb2ludHNJbkttKHBvczFbMF0sIHBvczFbMV0sIHBvczJbMF0sIHBvczJbMV0pO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gYXJlRGlzdGluY3RQb3NpdGlvbnMocHJldmlvdXM6IFBvc2l0aW9uLCBuZXh0OiBQb3NpdGlvbikge1xyXG4gICAgcmV0dXJuIHByZXZpb3VzWzBdICE9PSBuZXh0WzBdIHx8IHByZXZpb3VzWzFdICE9PSBuZXh0WzFdO1xyXG59XHJcblxyXG4vKipcclxuICogQ2FsY3VsYXRlcyBkaXN0YW5jZSBiZXR3ZWVuIHR3byBHZW9KU09OIHBvaW50cyAoV0dTODQpXHJcbiAqIEBwYXJhbSBwb3MxXHJcbiAqIEBwYXJhbSBwb3MyXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gZGlzdGFuY2VCZXR3ZWVuUG9zaXRpb25zSW5NKHBvczE6IFBvc2l0aW9uLCBwb3MyOiBQb3NpdGlvbikge1xyXG4gICAgcmV0dXJuIGRpc3RhbmNlQmV0d2VlblBvc2l0aW9uc0luS20ocG9zMSwgcG9zMikgKiAxMDAwOyAvLyBrbSAtPiBtXHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVHbWxMaW5lU3RyaW5nKGdlb21ldHJ5OiBHZW9tZXRyeSwgc3JzTmFtZSA9ICdFUFNHOjQzMjYnKSB7XHJcbiAgICBjb25zdCBwb3NMaXN0ID0gY3JlYXRlUG9zTGlzdChnZW9tZXRyeSk7XHJcblxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICBzcnNOYW1lLFxyXG4gICAgICAgIHBvc0xpc3QsXHJcbiAgICB9O1xyXG59XHJcblxyXG5mdW5jdGlvbiBjcmVhdGVQb3NMaXN0KGdlb21ldHJ5OiBHZW9tZXRyeSkge1xyXG4gICAgaWYgKGdlb21ldHJ5LnR5cGUgPT09ICdQb2ludCcpIHtcclxuICAgICAgICByZXR1cm4gcG9zaXRpb25Ub0xpc3QoZ2VvbWV0cnkuY29vcmRpbmF0ZXMpO1xyXG4gICAgfSBlbHNlIGlmIChnZW9tZXRyeS50eXBlID09PSAnTGluZVN0cmluZycpIHtcclxuICAgICAgICByZXR1cm4gbGluZVN0cmluZ1RvTGlzdChnZW9tZXRyeS5jb29yZGluYXRlcyk7XHJcbiAgICB9IGVsc2UgaWYgKGdlb21ldHJ5LnR5cGUgPT09ICdQb2x5Z29uJykge1xyXG4gICAgICAgIHJldHVybiBwb2x5Z29uVG9MaXN0KGdlb21ldHJ5LmNvb3JkaW5hdGVzKTtcclxuICAgIH1cclxuXHJcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJ1bmtub3duIGdlb21ldHJ5IHR5cGUgXCIgKyBKU09OLnN0cmluZ2lmeShnZW9tZXRyeSkpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBwb2x5Z29uVG9MaXN0KHBvc2l0aW9uczogUG9zaXRpb25bXVtdLCBwcmVjaXNpb24gPSA4KSB7XHJcbiAgICByZXR1cm4gcG9zaXRpb25zLm1hcChwID0+IGxpbmVTdHJpbmdUb0xpc3QocCwgcHJlY2lzaW9uKSkuam9pbignICcpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBsaW5lU3RyaW5nVG9MaXN0KHBvc2l0aW9uczogUG9zaXRpb25bXSwgcHJlY2lzaW9uID0gOCkge1xyXG4gICAgcmV0dXJuIHBvc2l0aW9ucy5tYXAocCA9PiBwb3NpdGlvblRvTGlzdChwLCBwcmVjaXNpb24pKS5qb2luKCcgJyk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBwb3NpdGlvblRvTGlzdChwb3NpdGlvbjogUG9zaXRpb24sIHByZWNpc2lvbiA9IDgpIHtcclxuICAgIHJldHVybiBwb3NpdGlvbi5tYXAobiA9PiBuLnRvUHJlY2lzaW9uKHByZWNpc2lvbikpLmpvaW4oJyAnKTtcclxufVxyXG5cclxuLy8gQ29udmVydHMgbnVtZXJpYyBkZWdyZWVzIHRvIHJhZGlhbnNcclxuZnVuY3Rpb24gdG9SYWRpYW5zKGFuZ2RlZzpudW1iZXIpIHtcclxuICAgIHJldHVybiBhbmdkZWcgKiBERUdSRUVTX1RPX1JBRElBTlM7XHJcbn1cclxuIl19
|
package/src/utils/retry.js
DELETED
@@ -1,50 +0,0 @@
|
|
1
|
-
"use strict";
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
-
exports.retry = exports.RetryLogError = void 0;
|
4
|
-
var RetryLogError;
|
5
|
-
(function (RetryLogError) {
|
6
|
-
RetryLogError[RetryLogError["LOG_ALL_AS_ERRORS"] = 0] = "LOG_ALL_AS_ERRORS";
|
7
|
-
RetryLogError[RetryLogError["LOG_LAST_RETRY_AS_ERROR_OTHERS_AS_WARNS"] = 1] = "LOG_LAST_RETRY_AS_ERROR_OTHERS_AS_WARNS";
|
8
|
-
RetryLogError[RetryLogError["NO_LOGGING"] = 2] = "NO_LOGGING";
|
9
|
-
})(RetryLogError = exports.RetryLogError || (exports.RetryLogError = {}));
|
10
|
-
/**
|
11
|
-
* Utility function for retrying async functions.
|
12
|
-
* @param asyncFn Function
|
13
|
-
* @param retries Amount of retries, default is 3. If set to <= 0, no retries will be done. Using non-finite numbers will throw an error. The maximum allowed retry count is 100.
|
14
|
-
* @param logError Logging options
|
15
|
-
* @return Promise return value
|
16
|
-
*/
|
17
|
-
async function retry(asyncFn, retries = 3, logError = RetryLogError.LOG_LAST_RETRY_AS_ERROR_OTHERS_AS_WARNS) {
|
18
|
-
if (!isFinite(retries)) {
|
19
|
-
throw new Error('Only finite numbers are supported');
|
20
|
-
}
|
21
|
-
if (retries > 100) {
|
22
|
-
throw new Error('Exceeded the maximum retry count of 100');
|
23
|
-
}
|
24
|
-
try {
|
25
|
-
return await asyncFn();
|
26
|
-
}
|
27
|
-
catch (error) {
|
28
|
-
const remainingRetries = retries - 1;
|
29
|
-
const errorMessage = 'method=retry error';
|
30
|
-
if (logError === RetryLogError.LOG_ALL_AS_ERRORS) {
|
31
|
-
console.error(errorMessage, error);
|
32
|
-
}
|
33
|
-
else if (logError === RetryLogError.LOG_LAST_RETRY_AS_ERROR_OTHERS_AS_WARNS) {
|
34
|
-
if (remainingRetries < 0) {
|
35
|
-
console.error(errorMessage, error);
|
36
|
-
}
|
37
|
-
else {
|
38
|
-
console.warn(errorMessage, error);
|
39
|
-
}
|
40
|
-
}
|
41
|
-
if (remainingRetries < 0) {
|
42
|
-
console.warn('method=retry no retries left');
|
43
|
-
throw new Error('No retries left');
|
44
|
-
}
|
45
|
-
console.warn('method=retry invocation failed, retrying with remaining retries %d', remainingRetries);
|
46
|
-
return retry(asyncFn, remainingRetries, logError);
|
47
|
-
}
|
48
|
-
}
|
49
|
-
exports.retry = retry;
|
50
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmV0cnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdXRpbHMvcmV0cnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsSUFBWSxhQUlYO0FBSkQsV0FBWSxhQUFhO0lBQ3JCLDJFQUFpQixDQUFBO0lBQ2pCLHVIQUF1QyxDQUFBO0lBQ3ZDLDZEQUFVLENBQUE7QUFDZCxDQUFDLEVBSlcsYUFBYSxHQUFiLHFCQUFhLEtBQWIscUJBQWEsUUFJeEI7QUFFRDs7Ozs7O0dBTUc7QUFDSSxLQUFLLFVBQVUsS0FBSyxDQUFJLE9BQXlCLEVBQ3BELE9BQU8sR0FBRyxDQUFDLEVBQ1gsUUFBUSxHQUFHLGFBQWEsQ0FBQyx1Q0FBdUM7SUFFaEUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsRUFBRTtRQUNwQixNQUFNLElBQUksS0FBSyxDQUFDLG1DQUFtQyxDQUFDLENBQUM7S0FDeEQ7SUFDRCxJQUFJLE9BQU8sR0FBRyxHQUFHLEVBQUU7UUFDZixNQUFNLElBQUksS0FBSyxDQUFDLHlDQUF5QyxDQUFDLENBQUM7S0FDOUQ7SUFDRCxJQUFJO1FBQ0EsT0FBTyxNQUFNLE9BQU8sRUFBRSxDQUFDO0tBQzFCO0lBQUMsT0FBTyxLQUFLLEVBQUU7UUFDWixNQUFNLGdCQUFnQixHQUFHLE9BQU8sR0FBRyxDQUFDLENBQUM7UUFFckMsTUFBTSxZQUFZLEdBQUcsb0JBQW9CLENBQUM7UUFDMUMsSUFBSSxRQUFRLEtBQUssYUFBYSxDQUFDLGlCQUFpQixFQUFFO1lBQzlDLE9BQU8sQ0FBQyxLQUFLLENBQUMsWUFBWSxFQUFFLEtBQUssQ0FBQyxDQUFDO1NBQ3RDO2FBQU0sSUFBSSxRQUFRLEtBQUssYUFBYSxDQUFDLHVDQUF1QyxFQUFFO1lBQzNFLElBQUksZ0JBQWdCLEdBQUcsQ0FBQyxFQUFFO2dCQUN0QixPQUFPLENBQUMsS0FBSyxDQUFDLFlBQVksRUFBRSxLQUFLLENBQUMsQ0FBQzthQUN0QztpQkFBTTtnQkFDSCxPQUFPLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxLQUFLLENBQUMsQ0FBQzthQUNyQztTQUNKO1FBRUQsSUFBSSxnQkFBZ0IsR0FBRyxDQUFDLEVBQUU7WUFDdEIsT0FBTyxDQUFDLElBQUksQ0FBQyw4QkFBOEIsQ0FBQyxDQUFDO1lBQzdDLE1BQU0sSUFBSSxLQUFLLENBQUMsaUJBQWlCLENBQUMsQ0FBQztTQUN0QztRQUNELE9BQU8sQ0FBQyxJQUFJLENBQUMsb0VBQW9FLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztRQUNyRyxPQUFPLEtBQUssQ0FBQyxPQUFPLEVBQ2hCLGdCQUFnQixFQUNoQixRQUFRLENBQUMsQ0FBQztLQUNqQjtBQUNMLENBQUM7QUFuQ0Qsc0JBbUNDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGVudW0gUmV0cnlMb2dFcnJvciB7XG4gICAgTE9HX0FMTF9BU19FUlJPUlMsXG4gICAgTE9HX0xBU1RfUkVUUllfQVNfRVJST1JfT1RIRVJTX0FTX1dBUk5TLFxuICAgIE5PX0xPR0dJTkdcbn1cblxuLyoqXG4gKiBVdGlsaXR5IGZ1bmN0aW9uIGZvciByZXRyeWluZyBhc3luYyBmdW5jdGlvbnMuXG4gKiBAcGFyYW0gYXN5bmNGbiBGdW5jdGlvblxuICogQHBhcmFtIHJldHJpZXMgQW1vdW50IG9mIHJldHJpZXMsIGRlZmF1bHQgaXMgMy4gSWYgc2V0IHRvIDw9IDAsIG5vIHJldHJpZXMgd2lsbCBiZSBkb25lLiBVc2luZyBub24tZmluaXRlIG51bWJlcnMgd2lsbCB0aHJvdyBhbiBlcnJvci4gVGhlIG1heGltdW0gYWxsb3dlZCByZXRyeSBjb3VudCBpcyAxMDAuXG4gKiBAcGFyYW0gbG9nRXJyb3IgTG9nZ2luZyBvcHRpb25zXG4gKiBAcmV0dXJuIFByb21pc2UgcmV0dXJuIHZhbHVlXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZXRyeTxUPihhc3luY0ZuOiAoKSA9PiBQcm9taXNlPFQ+LFxuICAgIHJldHJpZXMgPSAzLFxuICAgIGxvZ0Vycm9yID0gUmV0cnlMb2dFcnJvci5MT0dfTEFTVF9SRVRSWV9BU19FUlJPUl9PVEhFUlNfQVNfV0FSTlMpOiBQcm9taXNlPFQ+IHtcblxuICAgIGlmICghaXNGaW5pdGUocmV0cmllcykpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdPbmx5IGZpbml0ZSBudW1iZXJzIGFyZSBzdXBwb3J0ZWQnKTtcbiAgICB9XG4gICAgaWYgKHJldHJpZXMgPiAxMDApIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdFeGNlZWRlZCB0aGUgbWF4aW11bSByZXRyeSBjb3VudCBvZiAxMDAnKTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IGFzeW5jRm4oKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjb25zdCByZW1haW5pbmdSZXRyaWVzID0gcmV0cmllcyAtIDE7XG5cbiAgICAgICAgY29uc3QgZXJyb3JNZXNzYWdlID0gJ21ldGhvZD1yZXRyeSBlcnJvcic7XG4gICAgICAgIGlmIChsb2dFcnJvciA9PT0gUmV0cnlMb2dFcnJvci5MT0dfQUxMX0FTX0VSUk9SUykge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnJvck1lc3NhZ2UsIGVycm9yKTtcbiAgICAgICAgfSBlbHNlIGlmIChsb2dFcnJvciA9PT0gUmV0cnlMb2dFcnJvci5MT0dfTEFTVF9SRVRSWV9BU19FUlJPUl9PVEhFUlNfQVNfV0FSTlMpIHtcbiAgICAgICAgICAgIGlmIChyZW1haW5pbmdSZXRyaWVzIDwgMCkge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3JNZXNzYWdlLCBlcnJvcik7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybihlcnJvck1lc3NhZ2UsIGVycm9yKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChyZW1haW5pbmdSZXRyaWVzIDwgMCkge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdtZXRob2Q9cmV0cnkgbm8gcmV0cmllcyBsZWZ0Jyk7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIHJldHJpZXMgbGVmdCcpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnNvbGUud2FybignbWV0aG9kPXJldHJ5IGludm9jYXRpb24gZmFpbGVkLCByZXRyeWluZyB3aXRoIHJlbWFpbmluZyByZXRyaWVzICVkJywgcmVtYWluaW5nUmV0cmllcyk7XG4gICAgICAgIHJldHVybiByZXRyeShhc3luY0ZuLFxuICAgICAgICAgICAgcmVtYWluaW5nUmV0cmllcyxcbiAgICAgICAgICAgIGxvZ0Vycm9yKTtcbiAgICB9XG59XG4iXX0=
|
package/src/utils/slack.js
DELETED
@@ -1,25 +0,0 @@
|
|
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
|
-
exports.SlackApi = void 0;
|
7
|
-
const axios_1 = __importDefault(require("axios"));
|
8
|
-
class SlackApi {
|
9
|
-
constructor(url) {
|
10
|
-
this.url = url;
|
11
|
-
}
|
12
|
-
async notify(text) {
|
13
|
-
try {
|
14
|
-
console.info('method=notify Notifying Slack');
|
15
|
-
await axios_1.default.post(this.url, {
|
16
|
-
text,
|
17
|
-
});
|
18
|
-
}
|
19
|
-
catch (error) {
|
20
|
-
console.error('method=notify Slack notify failed!');
|
21
|
-
}
|
22
|
-
}
|
23
|
-
}
|
24
|
-
exports.SlackApi = SlackApi;
|
25
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2xhY2suanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdXRpbHMvc2xhY2sudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsa0RBQTBCO0FBRTFCLE1BQWEsUUFBUTtJQUlqQixZQUFZLEdBQVc7UUFDbkIsSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7SUFDbkIsQ0FBQztJQUVELEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBWTtRQUNyQixJQUFJO1lBQ0EsT0FBTyxDQUFDLElBQUksQ0FBQywrQkFBK0IsQ0FBQyxDQUFDO1lBQzlDLE1BQU0sZUFBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFO2dCQUN2QixJQUFJO2FBQ1AsQ0FBQyxDQUFDO1NBQ047UUFBQyxPQUFPLEtBQUssRUFBRTtZQUNaLE9BQU8sQ0FBQyxLQUFLLENBQUMsb0NBQW9DLENBQUMsQ0FBQztTQUN2RDtJQUNMLENBQUM7Q0FFSjtBQW5CRCw0QkFtQkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYXhpb3MgZnJvbSBcImF4aW9zXCI7XG5cbmV4cG9ydCBjbGFzcyBTbGFja0FwaSB7XG5cbiAgICBwcml2YXRlIHJlYWRvbmx5IHVybDogc3RyaW5nO1xuXG4gICAgY29uc3RydWN0b3IodXJsIDpzdHJpbmcpIHtcbiAgICAgICAgdGhpcy51cmwgPSB1cmw7XG4gICAgfVxuXG4gICAgYXN5bmMgbm90aWZ5KHRleHQ6IHN0cmluZykge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc29sZS5pbmZvKCdtZXRob2Q9bm90aWZ5IE5vdGlmeWluZyBTbGFjaycpO1xuICAgICAgICAgICAgYXdhaXQgYXhpb3MucG9zdCh0aGlzLnVybCwge1xuICAgICAgICAgICAgICAgIHRleHQsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ21ldGhvZD1ub3RpZnkgU2xhY2sgbm90aWZ5IGZhaWxlZCEnKTtcbiAgICAgICAgfVxuICAgIH1cblxufVxuIl19
|
package/src/utils/utils.js
DELETED
@@ -1,40 +0,0 @@
|
|
1
|
-
"use strict";
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
-
exports.bothArraysHasSameValues = void 0;
|
4
|
-
/**
|
5
|
-
* Check if arrays have only elements that also exists also in other array.
|
6
|
-
* Individual element count doesn't matter.
|
7
|
-
* Function works only for primitive types and for other it just checks the reference to object.
|
8
|
-
*
|
9
|
-
* Some examples
|
10
|
-
* bothArraysHasSameValues( [a, b], [b, a] ) => true
|
11
|
-
* bothArraysHasSameValues( [a, a], [a, a, a] ) => true
|
12
|
-
* bothArraysHasSameValues( [a, b], [a] ) => false
|
13
|
-
*
|
14
|
-
* Object references:
|
15
|
-
* const o1 = { a: 1, b: 2};
|
16
|
-
* const o2 = { a: 1, b: 2};
|
17
|
-
* // Arrays has references to same objects
|
18
|
-
* bothArraysHasSameValues([o1], [o1])) => true
|
19
|
-
* Arrays have references to different objects
|
20
|
-
* bothArraysHasSameValues([o1], [o2])) => false
|
21
|
-
*
|
22
|
-
* @param a first array to compare
|
23
|
-
* @param b second array to compare
|
24
|
-
*/
|
25
|
-
function bothArraysHasSameValues(a, b) {
|
26
|
-
if ((a && !b) || (!a && b)) {
|
27
|
-
return false;
|
28
|
-
}
|
29
|
-
else if (!a && !b) {
|
30
|
-
return true;
|
31
|
-
}
|
32
|
-
const aSet = new Set(a);
|
33
|
-
const bSet = new Set(b);
|
34
|
-
if (aSet.size !== bSet.size) {
|
35
|
-
return false;
|
36
|
-
}
|
37
|
-
return Array.from(aSet).every(value => bSet.has(value));
|
38
|
-
}
|
39
|
-
exports.bothArraysHasSameValues = bothArraysHasSameValues;
|
40
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdXRpbHMvdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBb0JHO0FBQ0gsU0FBZ0IsdUJBQXVCLENBQUMsQ0FBMkIsRUFBRSxDQUEyQjtJQUM1RixJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRTtRQUN4QixPQUFPLEtBQUssQ0FBQztLQUNoQjtTQUFNLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUU7UUFDakIsT0FBTyxJQUFJLENBQUM7S0FDZjtJQUNELE1BQU0sSUFBSSxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3hCLE1BQU0sSUFBSSxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3hCLElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxJQUFJLENBQUMsSUFBSSxFQUFFO1FBQ3pCLE9BQU8sS0FBSyxDQUFDO0tBQ2hCO0lBQ0QsT0FBTyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztBQUM1RCxDQUFDO0FBWkQsMERBWUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENoZWNrIGlmIGFycmF5cyBoYXZlIG9ubHkgZWxlbWVudHMgdGhhdCBhbHNvIGV4aXN0cyBhbHNvIGluIG90aGVyIGFycmF5LlxuICogSW5kaXZpZHVhbCBlbGVtZW50IGNvdW50IGRvZXNuJ3QgbWF0dGVyLlxuICogRnVuY3Rpb24gd29ya3Mgb25seSBmb3IgcHJpbWl0aXZlIHR5cGVzIGFuZCBmb3Igb3RoZXIgaXQganVzdCBjaGVja3MgdGhlIHJlZmVyZW5jZSB0byBvYmplY3QuXG4gKlxuICogU29tZSBleGFtcGxlc1xuICogYm90aEFycmF5c0hhc1NhbWVWYWx1ZXMoIFthLCBiXSwgW2IsIGFdICkgICAgPT4gdHJ1ZVxuICogYm90aEFycmF5c0hhc1NhbWVWYWx1ZXMoIFthLCBhXSwgW2EsIGEsIGFdICkgPT4gdHJ1ZVxuICogYm90aEFycmF5c0hhc1NhbWVWYWx1ZXMoIFthLCBiXSwgW2FdICkgICAgICAgPT4gZmFsc2VcbiAqXG4gKiBPYmplY3QgcmVmZXJlbmNlczpcbiAqIGNvbnN0IG8xID0geyBhOiAxLCBiOiAyfTtcbiAqIGNvbnN0IG8yID0geyBhOiAxLCBiOiAyfTtcbiAqIC8vIEFycmF5cyBoYXMgcmVmZXJlbmNlcyB0byBzYW1lIG9iamVjdHNcbiAqIGJvdGhBcnJheXNIYXNTYW1lVmFsdWVzKFtvMV0sIFtvMV0pKSAgICAgICAgID0+IHRydWVcbiAqIEFycmF5cyBoYXZlIHJlZmVyZW5jZXMgdG8gZGlmZmVyZW50IG9iamVjdHNcbiAqIGJvdGhBcnJheXNIYXNTYW1lVmFsdWVzKFtvMV0sIFtvMl0pKSAgICAgICAgID0+IGZhbHNlXG4gKlxuICogQHBhcmFtIGEgZmlyc3QgYXJyYXkgdG8gY29tcGFyZVxuICogQHBhcmFtIGIgc2Vjb25kIGFycmF5IHRvIGNvbXBhcmVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJvdGhBcnJheXNIYXNTYW1lVmFsdWVzKGE6IG51bGx8dW5kZWZpbmVkfHVua25vd25bXSwgYjogbnVsbHx1bmRlZmluZWR8dW5rbm93bltdKTogYm9vbGVhbiB7XG4gICAgaWYgKChhICYmICFiKSB8fCAoIWEgJiYgYikpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0gZWxzZSBpZiAoIWEgJiYgIWIpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGNvbnN0IGFTZXQgPSBuZXcgU2V0KGEpO1xuICAgIGNvbnN0IGJTZXQgPSBuZXcgU2V0KGIpO1xuICAgIGlmIChhU2V0LnNpemUgIT09IGJTZXQuc2l6ZSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiBBcnJheS5mcm9tKGFTZXQpLmV2ZXJ5KHZhbHVlID0+IGJTZXQuaGFzKHZhbHVlKSk7XG59XG4iXX0=
|
@@ -1,69 +0,0 @@
|
|
1
|
-
"use strict";
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
3
|
-
if (k2 === undefined) k2 = k;
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
7
|
-
}
|
8
|
-
Object.defineProperty(o, k2, desc);
|
9
|
-
}) : (function(o, m, k, k2) {
|
10
|
-
if (k2 === undefined) k2 = k;
|
11
|
-
o[k2] = m[k];
|
12
|
-
}));
|
13
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
14
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
15
|
-
}) : function(o, v) {
|
16
|
-
o["default"] = v;
|
17
|
-
});
|
18
|
-
var __importStar = (this && this.__importStar) || function (mod) {
|
19
|
-
if (mod && mod.__esModule) return mod;
|
20
|
-
var result = {};
|
21
|
-
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
22
|
-
__setModuleDefault(result, mod);
|
23
|
-
return result;
|
24
|
-
};
|
25
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
26
|
-
const IdUtils = __importStar(require("../../src/marine/id_utils"));
|
27
|
-
const testutils_1 = require("../../src/test/testutils");
|
28
|
-
describe('IdUtils tests', () => {
|
29
|
-
test('isValidLOCODE - success', () => {
|
30
|
-
expect(IdUtils.isValidLOCODE('FILOL')).toBe(true);
|
31
|
-
});
|
32
|
-
test('isValidLOCODE - fail with non-finnish prefix', () => {
|
33
|
-
expect(IdUtils.isValidLOCODE('SEABS')).toBe(false);
|
34
|
-
});
|
35
|
-
test('isValidLOCODE - fail with numbers', () => {
|
36
|
-
expect(IdUtils.isValidLOCODE('FIAA1')).toBe(false);
|
37
|
-
});
|
38
|
-
test('isValidIMO - successful checksum - ship TRANSMAR', () => {
|
39
|
-
expect(IdUtils.isValidIMO(9167332)).toBe(true);
|
40
|
-
});
|
41
|
-
test('isValidIMO - successful checksum - ship ANNIKA B', () => {
|
42
|
-
expect(IdUtils.isValidIMO(9213715)).toBe(true);
|
43
|
-
});
|
44
|
-
test('isValidIMO - successful checksum - ship X PRESS ELBE', () => {
|
45
|
-
expect(IdUtils.isValidIMO(9483669)).toBe(true);
|
46
|
-
});
|
47
|
-
test('isValidIMO - successful checksum - ship SILVERFORS', () => {
|
48
|
-
expect(IdUtils.isValidIMO(8322765)).toBe(true);
|
49
|
-
});
|
50
|
-
test('isValidIMO - invalid checksum', () => {
|
51
|
-
expect(IdUtils.isValidIMO(8322766)).toBe(false);
|
52
|
-
});
|
53
|
-
test('isValidIMO - fail with number smaller than 1000000', () => {
|
54
|
-
expect(IdUtils.isValidIMO((0, testutils_1.getRandomNumber)(0, 1000000 - 1))).toBe(false);
|
55
|
-
});
|
56
|
-
test('isValidIMO - fail with number larger than 9999999', () => {
|
57
|
-
expect(IdUtils.isValidIMO((0, testutils_1.getRandomNumber)(9999999 + 1, 99999999))).toBe(false);
|
58
|
-
});
|
59
|
-
test('isValidMMSI - success', () => {
|
60
|
-
expect(IdUtils.isValidMMSI(230927000)).toBe(true);
|
61
|
-
});
|
62
|
-
test('isValidMMSI - fail with number smaller than 100000000', () => {
|
63
|
-
expect(IdUtils.isValidMMSI((0, testutils_1.getRandomNumber)(0, 100000000 - 1))).toBe(false);
|
64
|
-
});
|
65
|
-
test('isValidMMSI - fail with number larger than 999999999', () => {
|
66
|
-
expect(IdUtils.isValidMMSI((0, testutils_1.getRandomNumber)(999999999 + 1, 9999999999))).toBe(false);
|
67
|
-
});
|
68
|
-
});
|
69
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWRfdXRpbHMudGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Rlc3QvbWFyaW5lL2lkX3V0aWxzLnRlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLG1FQUFxRDtBQUNyRCx3REFBeUQ7QUFFekQsUUFBUSxDQUFDLGVBQWUsRUFBRSxHQUFHLEVBQUU7SUFFM0IsSUFBSSxDQUFDLHlCQUF5QixFQUFFLEdBQUcsRUFBRTtRQUNqQyxNQUFNLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN0RCxDQUFDLENBQUMsQ0FBQztJQUVILElBQUksQ0FBQyw4Q0FBOEMsRUFBRSxHQUFHLEVBQUU7UUFDdEQsTUFBTSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDdkQsQ0FBQyxDQUFDLENBQUM7SUFFSCxJQUFJLENBQUMsbUNBQW1DLEVBQUUsR0FBRyxFQUFFO1FBQzNDLE1BQU0sQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3ZELENBQUMsQ0FBQyxDQUFDO0lBRUgsSUFBSSxDQUFDLGtEQUFrRCxFQUFFLEdBQUcsRUFBRTtRQUMxRCxNQUFNLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNuRCxDQUFDLENBQUMsQ0FBQztJQUVILElBQUksQ0FBQyxrREFBa0QsRUFBRSxHQUFHLEVBQUU7UUFDMUQsTUFBTSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDbkQsQ0FBQyxDQUFDLENBQUM7SUFFSCxJQUFJLENBQUMsc0RBQXNELEVBQUUsR0FBRyxFQUFFO1FBQzlELE1BQU0sQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ25ELENBQUMsQ0FBQyxDQUFDO0lBRUgsSUFBSSxDQUFDLG9EQUFvRCxFQUFFLEdBQUcsRUFBRTtRQUM1RCxNQUFNLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNuRCxDQUFDLENBQUMsQ0FBQztJQUVILElBQUksQ0FBQywrQkFBK0IsRUFBRSxHQUFHLEVBQUU7UUFDdkMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDcEQsQ0FBQyxDQUFDLENBQUM7SUFFSCxJQUFJLENBQUMsb0RBQW9ELEVBQUUsR0FBRyxFQUFFO1FBQzVELE1BQU0sQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLElBQUEsMkJBQWUsRUFBQyxDQUFDLEVBQUUsT0FBTyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDNUUsQ0FBQyxDQUFDLENBQUM7SUFFSCxJQUFJLENBQUMsbURBQW1ELEVBQUUsR0FBRyxFQUFFO1FBQzNELE1BQU0sQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLElBQUEsMkJBQWUsRUFBQyxPQUFPLEdBQUcsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDbkYsQ0FBQyxDQUFDLENBQUM7SUFFSCxJQUFJLENBQUMsdUJBQXVCLEVBQUUsR0FBRyxFQUFFO1FBQy9CLE1BQU0sQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3RELENBQUMsQ0FBQyxDQUFDO0lBRUgsSUFBSSxDQUFDLHVEQUF1RCxFQUFFLEdBQUcsRUFBRTtRQUMvRCxNQUFNLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxJQUFBLDJCQUFlLEVBQUMsQ0FBQyxFQUFFLFNBQVMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQy9FLENBQUMsQ0FBQyxDQUFDO0lBRUgsSUFBSSxDQUFDLHNEQUFzRCxFQUFFLEdBQUcsRUFBRTtRQUM5RCxNQUFNLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxJQUFBLDJCQUFlLEVBQUMsU0FBUyxHQUFHLENBQUMsRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3hGLENBQUMsQ0FBQyxDQUFDO0FBQ1AsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBJZFV0aWxzIGZyb20gJy4uLy4uL3NyYy9tYXJpbmUvaWRfdXRpbHMnO1xuaW1wb3J0IHtnZXRSYW5kb21OdW1iZXJ9IGZyb20gXCIuLi8uLi9zcmMvdGVzdC90ZXN0dXRpbHNcIjtcblxuZGVzY3JpYmUoJ0lkVXRpbHMgdGVzdHMnLCAoKSA9PiB7XG5cbiAgICB0ZXN0KCdpc1ZhbGlkTE9DT0RFIC0gc3VjY2VzcycsICgpID0+IHtcbiAgICAgICAgZXhwZWN0KElkVXRpbHMuaXNWYWxpZExPQ09ERSgnRklMT0wnKSkudG9CZSh0cnVlKTtcbiAgICB9KTtcblxuICAgIHRlc3QoJ2lzVmFsaWRMT0NPREUgLSBmYWlsIHdpdGggbm9uLWZpbm5pc2ggcHJlZml4JywgKCkgPT4ge1xuICAgICAgICBleHBlY3QoSWRVdGlscy5pc1ZhbGlkTE9DT0RFKCdTRUFCUycpKS50b0JlKGZhbHNlKTtcbiAgICB9KTtcblxuICAgIHRlc3QoJ2lzVmFsaWRMT0NPREUgLSBmYWlsIHdpdGggbnVtYmVycycsICgpID0+IHtcbiAgICAgICAgZXhwZWN0KElkVXRpbHMuaXNWYWxpZExPQ09ERSgnRklBQTEnKSkudG9CZShmYWxzZSk7XG4gICAgfSk7XG5cbiAgICB0ZXN0KCdpc1ZhbGlkSU1PIC0gc3VjY2Vzc2Z1bCBjaGVja3N1bSAtIHNoaXAgVFJBTlNNQVInLCAoKSA9PiB7XG4gICAgICAgIGV4cGVjdChJZFV0aWxzLmlzVmFsaWRJTU8oOTE2NzMzMikpLnRvQmUodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICB0ZXN0KCdpc1ZhbGlkSU1PIC0gc3VjY2Vzc2Z1bCBjaGVja3N1bSAtIHNoaXAgQU5OSUtBIEInLCAoKSA9PiB7XG4gICAgICAgIGV4cGVjdChJZFV0aWxzLmlzVmFsaWRJTU8oOTIxMzcxNSkpLnRvQmUodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICB0ZXN0KCdpc1ZhbGlkSU1PIC0gc3VjY2Vzc2Z1bCBjaGVja3N1bSAtIHNoaXAgWCBQUkVTUyBFTEJFJywgKCkgPT4ge1xuICAgICAgICBleHBlY3QoSWRVdGlscy5pc1ZhbGlkSU1PKDk0ODM2NjkpKS50b0JlKHRydWUpO1xuICAgIH0pO1xuXG4gICAgdGVzdCgnaXNWYWxpZElNTyAtIHN1Y2Nlc3NmdWwgY2hlY2tzdW0gLSBzaGlwIFNJTFZFUkZPUlMnLCAoKSA9PiB7XG4gICAgICAgIGV4cGVjdChJZFV0aWxzLmlzVmFsaWRJTU8oODMyMjc2NSkpLnRvQmUodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICB0ZXN0KCdpc1ZhbGlkSU1PIC0gaW52YWxpZCBjaGVja3N1bScsICgpID0+IHtcbiAgICAgICAgZXhwZWN0KElkVXRpbHMuaXNWYWxpZElNTyg4MzIyNzY2KSkudG9CZShmYWxzZSk7XG4gICAgfSk7XG5cbiAgICB0ZXN0KCdpc1ZhbGlkSU1PIC0gZmFpbCB3aXRoIG51bWJlciBzbWFsbGVyIHRoYW4gMTAwMDAwMCcsICgpID0+IHtcbiAgICAgICAgZXhwZWN0KElkVXRpbHMuaXNWYWxpZElNTyhnZXRSYW5kb21OdW1iZXIoMCwgMTAwMDAwMCAtIDEpKSkudG9CZShmYWxzZSk7XG4gICAgfSk7XG5cbiAgICB0ZXN0KCdpc1ZhbGlkSU1PIC0gZmFpbCB3aXRoIG51bWJlciBsYXJnZXIgdGhhbiA5OTk5OTk5JywgKCkgPT4ge1xuICAgICAgICBleHBlY3QoSWRVdGlscy5pc1ZhbGlkSU1PKGdldFJhbmRvbU51bWJlcig5OTk5OTk5ICsgMSwgOTk5OTk5OTkpKSkudG9CZShmYWxzZSk7XG4gICAgfSk7XG5cbiAgICB0ZXN0KCdpc1ZhbGlkTU1TSSAtIHN1Y2Nlc3MnLCAoKSA9PiB7XG4gICAgICAgIGV4cGVjdChJZFV0aWxzLmlzVmFsaWRNTVNJKDIzMDkyNzAwMCkpLnRvQmUodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICB0ZXN0KCdpc1ZhbGlkTU1TSSAtIGZhaWwgd2l0aCBudW1iZXIgc21hbGxlciB0aGFuIDEwMDAwMDAwMCcsICgpID0+IHtcbiAgICAgICAgZXhwZWN0KElkVXRpbHMuaXNWYWxpZE1NU0koZ2V0UmFuZG9tTnVtYmVyKDAsIDEwMDAwMDAwMCAtIDEpKSkudG9CZShmYWxzZSk7XG4gICAgfSk7XG5cbiAgICB0ZXN0KCdpc1ZhbGlkTU1TSSAtIGZhaWwgd2l0aCBudW1iZXIgbGFyZ2VyIHRoYW4gOTk5OTk5OTk5JywgKCkgPT4ge1xuICAgICAgICBleHBlY3QoSWRVdGlscy5pc1ZhbGlkTU1TSShnZXRSYW5kb21OdW1iZXIoOTk5OTk5OTk5ICsgMSwgOTk5OTk5OTk5OSkpKS50b0JlKGZhbHNlKTtcbiAgICB9KTtcbn0pO1xuIl19
|
@@ -1,125 +0,0 @@
|
|
1
|
-
"use strict";
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
-
const testutils_1 = require("../../src/test/testutils");
|
4
|
-
const retry_1 = require("../../src/utils/retry");
|
5
|
-
describe('Promise utils tests', () => {
|
6
|
-
test('retry - no retries', async () => {
|
7
|
-
const fn = jest.fn().mockResolvedValue(1);
|
8
|
-
const ret = await (0, retry_1.retry)(fn, 0, retry_1.RetryLogError.NO_LOGGING);
|
9
|
-
expect(ret).toBe(1);
|
10
|
-
expect(fn.mock.calls.length).toBe(1);
|
11
|
-
});
|
12
|
-
test('retry - error with n+1 retries', async () => {
|
13
|
-
const fn = jest.fn().mockRejectedValue('error');
|
14
|
-
const retries = (0, testutils_1.getRandomInteger)(1, 10);
|
15
|
-
try {
|
16
|
-
await (0, retry_1.retry)(fn, retries, retry_1.RetryLogError.NO_LOGGING);
|
17
|
-
}
|
18
|
-
catch {
|
19
|
-
// ignore
|
20
|
-
}
|
21
|
-
finally {
|
22
|
-
expect(fn.mock.calls.length).toBe(retries + 1);
|
23
|
-
}
|
24
|
-
});
|
25
|
-
test('retry - no error with n+1 retries', async () => {
|
26
|
-
const fn = jest.fn().mockResolvedValue(1);
|
27
|
-
const retries = (0, testutils_1.getRandomInteger)(1, 10);
|
28
|
-
const ret = await (0, retry_1.retry)(fn, retries, retry_1.RetryLogError.NO_LOGGING);
|
29
|
-
expect(ret).toBe(1);
|
30
|
-
expect(fn.mock.calls.length).toBe(1);
|
31
|
-
});
|
32
|
-
test('retry - errors with no error logging', async () => {
|
33
|
-
const fn = jest.fn().mockRejectedValue('error');
|
34
|
-
const consoleErrorSpy = jest.spyOn(global.console, 'error').mockImplementation();
|
35
|
-
try {
|
36
|
-
await (0, retry_1.retry)(fn, (0, testutils_1.getRandomInteger)(0, 10), retry_1.RetryLogError.NO_LOGGING);
|
37
|
-
}
|
38
|
-
catch {
|
39
|
-
// ignore
|
40
|
-
}
|
41
|
-
finally {
|
42
|
-
expect(consoleErrorSpy).toHaveBeenCalledTimes(0);
|
43
|
-
consoleErrorSpy.mockRestore();
|
44
|
-
}
|
45
|
-
});
|
46
|
-
test('retry - no retries with error logging', async () => {
|
47
|
-
const fn = jest.fn().mockRejectedValue('error');
|
48
|
-
const consoleErrorSpy = jest.spyOn(global.console, 'error').mockImplementation();
|
49
|
-
try {
|
50
|
-
await (0, retry_1.retry)(fn, 0, retry_1.RetryLogError.LOG_ALL_AS_ERRORS);
|
51
|
-
}
|
52
|
-
catch {
|
53
|
-
// ignore
|
54
|
-
}
|
55
|
-
finally {
|
56
|
-
expect(consoleErrorSpy).toHaveBeenCalledTimes(1);
|
57
|
-
consoleErrorSpy.mockRestore();
|
58
|
-
}
|
59
|
-
});
|
60
|
-
test('retry - retries with error logging', async () => {
|
61
|
-
const fn = jest.fn().mockRejectedValue('error');
|
62
|
-
const retries = (0, testutils_1.getRandomInteger)(1, 10);
|
63
|
-
const consoleErrorSpy = jest.spyOn(global.console, 'error').mockImplementation();
|
64
|
-
try {
|
65
|
-
await (0, retry_1.retry)(fn, retries, retry_1.RetryLogError.LOG_ALL_AS_ERRORS);
|
66
|
-
}
|
67
|
-
catch {
|
68
|
-
// ignore
|
69
|
-
}
|
70
|
-
finally {
|
71
|
-
expect(consoleErrorSpy).toHaveBeenCalledTimes(retries + 1);
|
72
|
-
consoleErrorSpy.mockRestore();
|
73
|
-
}
|
74
|
-
});
|
75
|
-
test('retry - exceeded retry count throws error', async () => {
|
76
|
-
const fn = jest.fn().mockRejectedValue('error');
|
77
|
-
await expect(() => (0, retry_1.retry)(fn, 3, retry_1.RetryLogError.LOG_ALL_AS_ERRORS)).rejects.toThrow();
|
78
|
-
});
|
79
|
-
test('retry - defaults', async () => {
|
80
|
-
const fn = jest.fn().mockRejectedValue('error');
|
81
|
-
const consoleErrorSpy = jest.spyOn(global.console, 'error').mockImplementation();
|
82
|
-
try {
|
83
|
-
await (0, retry_1.retry)(fn);
|
84
|
-
}
|
85
|
-
catch {
|
86
|
-
// ignore
|
87
|
-
}
|
88
|
-
finally {
|
89
|
-
expect(fn.mock.calls.length).toBe(3 + 1);
|
90
|
-
expect(consoleErrorSpy).toHaveBeenCalledTimes(1); // last retry
|
91
|
-
}
|
92
|
-
});
|
93
|
-
test('retry - NaN throws error', async () => {
|
94
|
-
const fn = jest.fn();
|
95
|
-
await expect(() => (0, retry_1.retry)(fn, NaN, retry_1.RetryLogError.NO_LOGGING)).rejects.toThrow();
|
96
|
-
});
|
97
|
-
test('retry - Infinity throws error', async () => {
|
98
|
-
const fn = jest.fn();
|
99
|
-
await expect(() => (0, retry_1.retry)(fn, Infinity, retry_1.RetryLogError.NO_LOGGING)).rejects.toThrow();
|
100
|
-
});
|
101
|
-
test('retry - exceeded maximum retry count throws error', async () => {
|
102
|
-
const fn = jest.fn();
|
103
|
-
await expect(() => (0, retry_1.retry)(fn, (0, testutils_1.getRandomInteger)(101, 1000000), retry_1.RetryLogError.NO_LOGGING)).rejects.toThrow();
|
104
|
-
});
|
105
|
-
test('retry - use without mocks without retry', async () => {
|
106
|
-
const val = 1;
|
107
|
-
const fn = () => Promise.resolve(val);
|
108
|
-
const ret = await (0, retry_1.retry)(fn);
|
109
|
-
expect(ret).toBe(val);
|
110
|
-
});
|
111
|
-
test('retry - use without mocks with retry', async () => {
|
112
|
-
let i = 0;
|
113
|
-
const val = 1;
|
114
|
-
const fn = () => {
|
115
|
-
if (i < 3) {
|
116
|
-
i++;
|
117
|
-
throw new Error('not yet');
|
118
|
-
}
|
119
|
-
return Promise.resolve(val);
|
120
|
-
};
|
121
|
-
const ret = await (0, retry_1.retry)(fn);
|
122
|
-
expect(ret).toBe(val);
|
123
|
-
});
|
124
|
-
});
|
125
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvbWlzZS50ZXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vdGVzdC9wcm9taXNlL3Byb21pc2UudGVzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLHdEQUEwRDtBQUMxRCxpREFBMkQ7QUFFM0QsUUFBUSxDQUFDLHFCQUFxQixFQUFFLEdBQUcsRUFBRTtJQUVqQyxJQUFJLENBQUMsb0JBQW9CLEVBQUUsS0FBSyxJQUFJLEVBQUU7UUFDbEMsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRTFDLE1BQU0sR0FBRyxHQUFHLE1BQU0sSUFBQSxhQUFLLEVBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxxQkFBYSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBRXpELE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDcEIsTUFBTSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN6QyxDQUFDLENBQUMsQ0FBQztJQUVILElBQUksQ0FBQyxnQ0FBZ0MsRUFBRSxLQUFLLElBQUksRUFBRTtRQUM5QyxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUMsaUJBQWlCLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDaEQsTUFBTSxPQUFPLEdBQUcsSUFBQSw0QkFBZ0IsRUFBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFeEMsSUFBSTtZQUNBLE1BQU0sSUFBQSxhQUFLLEVBQUMsRUFBRSxFQUFFLE9BQU8sRUFBRSxxQkFBYSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1NBQ3REO1FBQUMsTUFBTTtZQUNKLFNBQVM7U0FDWjtnQkFBUztZQUNOLE1BQU0sQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FB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QSxhQUFLLEVBQUMsRUFBRSxDQUFDLENBQUM7UUFFNUIsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUMxQixDQUFDLENBQUMsQ0FBQztJQUVILElBQUksQ0FBQyxzQ0FBc0MsRUFBRSxLQUFLLElBQUksRUFBRTtRQUNwRCxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDVixNQUFNLEdBQUcsR0FBRyxDQUFDLENBQUM7UUFDZCxNQUFNLEVBQUUsR0FBRyxHQUFHLEVBQUU7WUFDWixJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUU7Z0JBQ1AsQ0FBQyxFQUFFLENBQUM7Z0JBQ0osTUFBTSxJQUFJLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQzthQUM5QjtZQUNELE9BQU8sT0FBTyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNoQyxDQUFDLENBQUM7UUFFRixNQUFNLEdBQUcsR0FBRyxNQUFNLElBQUEsYUFBSyxFQUFDLEVBQUUsQ0FBQyxDQUFDO1FBRTVCLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDMUIsQ0FBQyxDQUFDLENBQUM7QUFDUCxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Z2V0UmFuZG9tSW50ZWdlcn0gZnJvbSBcIi4uLy4uL3NyYy90ZXN0L3Rlc3R1dGlsc1wiO1xuaW1wb3J0IHtyZXRyeSwgUmV0cnlMb2dFcnJvcn0gZnJvbSBcIi4uLy4uL3NyYy91dGlscy9yZXRyeVwiO1xuXG5kZXNjcmliZSgnUHJvbWlzZSB1dGlscyB0ZXN0cycsICgpID0+IHtcblxuICAgIHRlc3QoJ3JldHJ5IC0gbm8gcmV0cmllcycsIGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3QgZm4gPSBqZXN0LmZuKCkubW9ja1Jlc29sdmVkVmFsdWUoMSk7XG5cbiAgICAgICAgY29uc3QgcmV0ID0gYXdhaXQgcmV0cnkoZm4sIDAsIFJldHJ5TG9nRXJyb3IuTk9fTE9HR0lORyk7XG5cbiAgICAgICAgZXhwZWN0KHJldCkudG9CZSgxKTtcbiAgICAgICAgZXhwZWN0KGZuLm1vY2suY2FsbHMubGVuZ3RoKS50b0JlKDEpO1xuICAgIH0pO1xuXG4gICAgdGVzdCgncmV0cnkgLSBlcnJvciB3aXRoIG4rMSByZXRyaWVzJywgYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCBmbiA9IGplc3QuZm4oKS5tb2NrUmVqZWN0ZWRWYWx1ZSgnZXJyb3InKTtcbiAgICAgICAgY29uc3QgcmV0cmllcyA9IGdldFJhbmRvbUludGVnZXIoMSwgMTApO1xuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBhd2FpdCByZXRyeShmbiwgcmV0cmllcywgUmV0cnlMb2dFcnJvci5OT19MT0dHSU5HKTtcbiAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgICAvLyBpZ25vcmVcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgIGV4cGVjdChmbi5tb2NrLmNhbGxzLmxlbmd0aCkudG9CZShyZXRyaWVzICsgMSk7XG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIHRlc3QoJ3JldHJ5IC0gbm8gZXJyb3Igd2l0aCBuKzEgcmV0cmllcycsIGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3QgZm4gPSBqZXN0LmZuKCkubW9ja1Jlc29sdmVkVmFsdWUoMSk7XG4gICAgICAgIGNvbnN0IHJldHJpZXMgPSBnZXRSYW5kb21JbnRlZ2VyKDEsIDEwKTtcblxuICAgICAgICBjb25zdCByZXQgPSBhd2FpdCByZXRyeShmbiwgcmV0cmllcywgUmV0cnlMb2dFcnJvci5OT19MT0dHSU5HKTtcblxuICAgICAgICBleHBlY3QocmV0KS50b0JlKDEpO1xuICAgICAgICBleHBlY3QoZm4ubW9jay5jYWxscy5sZW5ndGgpLnRvQmUoMSk7XG4gICAgfSk7XG5cbiAgICB0ZXN0KCdyZXRyeSAtIGVycm9ycyB3aXRoIG5vIGVycm9yIGxvZ2dpbmcnLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGZuID0gamVzdC5mbigpLm1vY2tSZWplY3RlZFZhbHVlKCdlcnJvcicpO1xuICAgICAgICBjb25zdCBjb25zb2xlRXJyb3JTcHkgPSBqZXN0LnNweU9uKGdsb2JhbC5jb25zb2xlLCAnZXJyb3InKS5tb2NrSW1wbGVtZW50YXRpb24oKTtcblxuICAgICAgICB0cnkge1xuICAgICAgICAgICAgYXdhaXQgcmV0cnkoZm4sIGdldFJhbmRvbUludGVnZXIoMCwgMTApLCBSZXRyeUxvZ0Vycm9yLk5PX0xPR0dJTkcpO1xuICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAgIC8vIGlnbm9yZVxuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgZXhwZWN0KGNvbnNvbGVFcnJvclNweSkudG9IYXZlQmVlbkNhbGxlZFRpbWVzKDApO1xuICAgICAgICAgICAgY29uc29sZUVycm9yU3B5Lm1vY2tSZXN0b3JlKCk7XG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIHRlc3QoJ3JldHJ5IC0gbm8gcmV0cmllcyB3aXRoIGVycm9yIGxvZ2dpbmcnLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGZuID0gamVzdC5mbigpLm1vY2tSZWplY3RlZFZhbHVlKCdlcnJvcicpO1xuICAgICAgICBjb25zdCBjb25zb2xlRXJyb3JTcHkgPSBqZXN0LnNweU9uKGdsb2JhbC5jb25zb2xlLCAnZXJyb3InKS5tb2NrSW1wbGVtZW50YXRpb24oKTtcblxuICAgICAgICB0cnkge1xuICAgICAgICAgICAgYXdhaXQgcmV0cnkoZm4sIDAsIFJldHJ5TG9nRXJyb3IuTE9HX0FMTF9BU19FUlJPUlMpO1xuICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAgIC8vIGlnbm9yZVxuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgZXhwZWN0KGNvbnNvbGVFcnJvclNweSkudG9IYXZlQmVlbkNhbGxlZFRpbWVzKDEpO1xuICAgICAgICAgICAgY29uc29sZUVycm9yU3B5Lm1vY2tSZXN0b3JlKCk7XG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIHRlc3QoJ3JldHJ5IC0gcmV0cmllcyB3aXRoIGVycm9yIGxvZ2dpbmcnLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGZuID0gamVzdC5mbigpLm1vY2tSZWplY3RlZFZhbHVlKCdlcnJvcicpO1xuICAgICAgICBjb25zdCByZXRyaWVzID0gZ2V0UmFuZG9tSW50ZWdlcigxLCAxMCk7XG4gICAgICAgIGNvbnN0IGNvbnNvbGVFcnJvclNweSA9IGplc3Quc3B5T24oZ2xvYmFsLmNvbnNvbGUsICdlcnJvcicpLm1vY2tJbXBsZW1lbnRhdGlvbigpO1xuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBhd2FpdCByZXRyeShmbiwgcmV0cmllcywgUmV0cnlMb2dFcnJvci5MT0dfQUxMX0FTX0VSUk9SUyk7XG4gICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgICAgLy8gaWdub3JlXG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICBleHBlY3QoY29uc29sZUVycm9yU3B5KS50b0hhdmVCZWVuQ2FsbGVkVGltZXMocmV0cmllcyArIDEpO1xuICAgICAgICAgICAgY29uc29sZUVycm9yU3B5Lm1vY2tSZXN0b3JlKCk7XG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIHRlc3QoJ3JldHJ5IC0gZXhjZWVkZWQgcmV0cnkgY291bnQgdGhyb3dzIGVycm9yJywgYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCBmbiA9IGplc3QuZm4oKS5tb2NrUmVqZWN0ZWRWYWx1ZSgnZXJyb3InKTtcblxuICAgICAgICBhd2FpdCBleHBlY3QoKCkgPT4gcmV0cnkoZm4sIDMsIFJldHJ5TG9nRXJyb3IuTE9HX0FMTF9BU19FUlJPUlMpKS5yZWplY3RzLnRvVGhyb3coKTtcbiAgICB9KTtcblxuICAgIHRlc3QoJ3JldHJ5IC0gZGVmYXVsdHMnLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGZuID0gamVzdC5mbigpLm1vY2tSZWplY3RlZFZhbHVlKCdlcnJvcicpO1xuICAgICAgICBjb25zdCBjb25zb2xlRXJyb3JTcHkgPSBqZXN0LnNweU9uKGdsb2JhbC5jb25zb2xlLCAnZXJyb3InKS5tb2NrSW1wbGVtZW50YXRpb24oKTtcblxuICAgICAgICB0cnkge1xuICAgICAgICAgICAgYXdhaXQgcmV0cnkoZm4pO1xuICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAgIC8vIGlnbm9yZVxuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgZXhwZWN0KGZuLm1vY2suY2FsbHMubGVuZ3RoKS50b0JlKDMgKyAxKTtcbiAgICAgICAgICAgIGV4cGVjdChjb25zb2xlRXJyb3JTcHkpLnRvSGF2ZUJlZW5DYWxsZWRUaW1lcygxKTsgLy8gbGFzdCByZXRyeVxuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICB0ZXN0KCdyZXRyeSAtIE5hTiB0aHJvd3MgZXJyb3InLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGZuID0gamVzdC5mbigpO1xuXG4gICAgICAgIGF3YWl0IGV4cGVjdCgoKSA9PiByZXRyeShmbiwgTmFOLCBSZXRyeUxvZ0Vycm9yLk5PX0xPR0dJTkcpKS5yZWplY3RzLnRvVGhyb3coKTtcbiAgICB9KTtcblxuICAgIHRlc3QoJ3JldHJ5IC0gSW5maW5pdHkgdGhyb3dzIGVycm9yJywgYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCBmbiA9IGplc3QuZm4oKTtcblxuICAgICAgICBhd2FpdCBleHBlY3QoKCkgPT4gcmV0cnkoZm4sIEluZmluaXR5LCBSZXRyeUxvZ0Vycm9yLk5PX0xPR0dJTkcpKS5yZWplY3RzLnRvVGhyb3coKTtcbiAgICB9KTtcblxuICAgIHRlc3QoJ3JldHJ5IC0gZXhjZWVkZWQgbWF4aW11bSByZXRyeSBjb3VudCB0aHJvd3MgZXJyb3InLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGZuID0gamVzdC5mbigpO1xuXG4gICAgICAgIGF3YWl0IGV4cGVjdCgoKSA9PiByZXRyeShmbiwgZ2V0UmFuZG9tSW50ZWdlcigxMDEsIDEwMDAwMDApLCBSZXRyeUxvZ0Vycm9yLk5PX0xPR0dJTkcpKS5yZWplY3RzLnRvVGhyb3coKTtcbiAgICB9KTtcblxuICAgIHRlc3QoJ3JldHJ5IC0gdXNlIHdpdGhvdXQgbW9ja3Mgd2l0aG91dCByZXRyeScsIGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3QgdmFsID0gMTtcbiAgICAgICAgY29uc3QgZm4gPSAoKSA9PiBQcm9taXNlLnJlc29sdmUodmFsKTtcblxuICAgICAgICBjb25zdCByZXQgPSBhd2FpdCByZXRyeShmbik7XG5cbiAgICAgICAgZXhwZWN0KHJldCkudG9CZSh2YWwpO1xuICAgIH0pO1xuXG4gICAgdGVzdCgncmV0cnkgLSB1c2Ugd2l0aG91dCBtb2NrcyB3aXRoIHJldHJ5JywgYXN5bmMgKCkgPT4ge1xuICAgICAgICBsZXQgaSA9IDA7XG4gICAgICAgIGNvbnN0IHZhbCA9IDE7XG4gICAgICAgIGNvbnN0IGZuID0gKCkgPT4ge1xuICAgICAgICAgICAgaWYgKGkgPCAzKSB7XG4gICAgICAgICAgICAgICAgaSsrO1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignbm90IHlldCcpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh2YWwpO1xuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IHJldCA9IGF3YWl0IHJldHJ5KGZuKTtcblxuICAgICAgICBleHBlY3QocmV0KS50b0JlKHZhbCk7XG4gICAgfSk7XG59KTtcbiJdfQ==
|