@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.
Files changed (93) hide show
  1. package/README.md +49 -0
  2. package/aws/index.d.ts +1 -0
  3. package/aws/index.js +18 -0
  4. package/aws/infra/api/index.d.ts +1 -0
  5. package/aws/infra/api/index.js +18 -0
  6. package/aws/infra/api/responses.js +1 -1
  7. package/aws/infra/stack/lambda-configs.js +1 -1
  8. package/aws/infra/stack/rest_apis.d.ts +1 -0
  9. package/aws/infra/stack/rest_apis.js +8 -2
  10. package/aws/infra/stack/stack.d.ts +4 -1
  11. package/aws/infra/stack/stack.js +1 -1
  12. package/aws/infra/usage-plans.js +1 -1
  13. package/aws/types/errors.js +1 -1
  14. package/aws/types/tags.js +1 -1
  15. package/database/last-updated.js +10 -10
  16. package/package.json +3 -2
  17. package/test/httpserver.js +1 -1
  18. package/types/index.d.ts +1 -0
  19. package/types/index.js +18 -0
  20. package/types/language.js +1 -1
  21. package/utils/geometry.js +1 -1
  22. package/src/aws/infra/api/integration.js +0 -52
  23. package/src/aws/infra/api/response.js +0 -61
  24. package/src/aws/infra/api/responses.js +0 -79
  25. package/src/aws/infra/api/static-integration.js +0 -54
  26. package/src/aws/infra/canaries/canary-alarm.js +0 -26
  27. package/src/aws/infra/canaries/canary-parameters.js +0 -3
  28. package/src/aws/infra/canaries/canary-role.js +0 -46
  29. package/src/aws/infra/canaries/canary.js +0 -29
  30. package/src/aws/infra/canaries/database-canary.js +0 -55
  31. package/src/aws/infra/canaries/database-checker.js +0 -109
  32. package/src/aws/infra/canaries/url-canary.js +0 -46
  33. package/src/aws/infra/canaries/url-checker.js +0 -238
  34. package/src/aws/infra/documentation.js +0 -95
  35. package/src/aws/infra/scheduler.js +0 -31
  36. package/src/aws/infra/security-rule.js +0 -39
  37. package/src/aws/infra/sqs-integration.js +0 -93
  38. package/src/aws/infra/sqs-queue.js +0 -130
  39. package/src/aws/infra/stack/lambda-configs.js +0 -93
  40. package/src/aws/infra/stack/monitoredfunction.js +0 -135
  41. package/src/aws/infra/stack/rest_apis.js +0 -179
  42. package/src/aws/infra/stack/stack-checking-aspect.js +0 -163
  43. package/src/aws/infra/stack/stack.js +0 -58
  44. package/src/aws/infra/stack/subscription.js +0 -41
  45. package/src/aws/infra/usage-plans.js +0 -42
  46. package/src/aws/runtime/apikey.js +0 -13
  47. package/src/aws/runtime/digitraffic-integration-response.js +0 -26
  48. package/src/aws/runtime/messaging.js +0 -31
  49. package/src/aws/runtime/s3.js +0 -30
  50. package/src/aws/runtime/secrets/dbsecret.js +0 -96
  51. package/src/aws/runtime/secrets/proxy-holder.js +0 -26
  52. package/src/aws/runtime/secrets/rds-holder.js +0 -26
  53. package/src/aws/runtime/secrets/secret-holder.js +0 -73
  54. package/src/aws/runtime/secrets/secret.js +0 -43
  55. package/src/aws/types/errors.js +0 -9
  56. package/src/aws/types/lambda-response.js +0 -28
  57. package/src/aws/types/mediatypes.js +0 -15
  58. package/src/aws/types/model-with-reference.js +0 -3
  59. package/src/aws/types/proxytypes.js +0 -3
  60. package/src/aws/types/tags.js +0 -7
  61. package/src/database/cached.js +0 -32
  62. package/src/database/database.js +0 -62
  63. package/src/database/last-updated.js +0 -54
  64. package/src/marine/id_utils.js +0 -33
  65. package/src/marine/rtz.js +0 -3
  66. package/src/test/asserter.js +0 -45
  67. package/src/test/db-testutils.js +0 -31
  68. package/src/test/httpserver.js +0 -67
  69. package/src/test/secret.js +0 -25
  70. package/src/test/secrets-manager.js +0 -59
  71. package/src/test/testutils.js +0 -44
  72. package/src/types/input-error.js +0 -7
  73. package/src/types/language.js +0 -10
  74. package/src/types/traffictype.js +0 -13
  75. package/src/types/validator.js +0 -14
  76. package/src/utils/api-model.js +0 -129
  77. package/src/utils/base64.js +0 -21
  78. package/src/utils/date-utils.js +0 -34
  79. package/src/utils/geojson-types.js +0 -18
  80. package/src/utils/geometry.js +0 -140
  81. package/src/utils/retry.js +0 -50
  82. package/src/utils/slack.js +0 -25
  83. package/src/utils/utils.js +0 -40
  84. package/test/marine/id_utils.test.js +0 -69
  85. package/test/promise/promise.test.js +0 -125
  86. package/test/secrets/dbsecret.test.js +0 -71
  87. package/test/secrets/secret-holder.test.js +0 -124
  88. package/test/secrets/secret.test.js +0 -66
  89. package/test/test/httpserver.test.js +0 -87
  90. package/test/utils/date-utils.test.js +0 -51
  91. package/test/utils/geometry.test.js +0 -49
  92. package/test/utils/utils.test.js +0 -49
  93. package/yarn.lock +0 -3200
@@ -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
@@ -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==
@@ -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
@@ -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=
@@ -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
@@ -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==