@digitraffic/common 2022.10.5
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/LICENSE +291 -0
- package/aws/infra/api/integration.d.ts +21 -0
- package/aws/infra/api/integration.js +52 -0
- package/aws/infra/api/response.d.ts +22 -0
- package/aws/infra/api/response.js +61 -0
- package/aws/infra/api/responses.d.ts +39 -0
- package/aws/infra/api/responses.js +79 -0
- package/aws/infra/api/static-integration.d.ts +15 -0
- package/aws/infra/api/static-integration.js +54 -0
- package/aws/infra/canaries/canary-alarm.d.ts +6 -0
- package/aws/infra/canaries/canary-alarm.js +26 -0
- package/aws/infra/canaries/canary-parameters.d.ts +18 -0
- package/aws/infra/canaries/canary-parameters.js +3 -0
- package/aws/infra/canaries/canary-role.d.ts +6 -0
- package/aws/infra/canaries/canary-role.js +46 -0
- package/aws/infra/canaries/canary.d.ts +8 -0
- package/aws/infra/canaries/canary.js +29 -0
- package/aws/infra/canaries/database-canary.d.ts +18 -0
- package/aws/infra/canaries/database-canary.js +55 -0
- package/aws/infra/canaries/database-checker.d.ts +21 -0
- package/aws/infra/canaries/database-checker.js +109 -0
- package/aws/infra/canaries/url-canary.d.ts +19 -0
- package/aws/infra/canaries/url-canary.js +46 -0
- package/aws/infra/canaries/url-checker.d.ts +46 -0
- package/aws/infra/canaries/url-checker.js +238 -0
- package/aws/infra/documentation.d.ts +56 -0
- package/aws/infra/documentation.js +95 -0
- package/aws/infra/scheduler.d.ts +12 -0
- package/aws/infra/scheduler.js +31 -0
- package/aws/infra/security-rule.d.ts +12 -0
- package/aws/infra/security-rule.js +39 -0
- package/aws/infra/sqs-integration.d.ts +7 -0
- package/aws/infra/sqs-integration.js +93 -0
- package/aws/infra/sqs-queue.d.ts +16 -0
- package/aws/infra/sqs-queue.js +130 -0
- package/aws/infra/stack/lambda-configs.d.ts +72 -0
- package/aws/infra/stack/lambda-configs.js +93 -0
- package/aws/infra/stack/monitoredfunction.d.ts +84 -0
- package/aws/infra/stack/monitoredfunction.js +135 -0
- package/aws/infra/stack/rest_apis.d.ts +40 -0
- package/aws/infra/stack/rest_apis.js +179 -0
- package/aws/infra/stack/stack-checking-aspect.d.ts +20 -0
- package/aws/infra/stack/stack-checking-aspect.js +163 -0
- package/aws/infra/stack/stack.d.ts +41 -0
- package/aws/infra/stack/stack.js +58 -0
- package/aws/infra/stack/subscription.d.ts +17 -0
- package/aws/infra/stack/subscription.js +41 -0
- package/aws/infra/usage-plans.d.ts +15 -0
- package/aws/infra/usage-plans.js +42 -0
- package/aws/runtime/apikey.d.ts +2 -0
- package/aws/runtime/apikey.js +13 -0
- package/aws/runtime/digitraffic-integration-response.d.ts +8 -0
- package/aws/runtime/digitraffic-integration-response.js +26 -0
- package/aws/runtime/messaging.d.ts +10 -0
- package/aws/runtime/messaging.js +31 -0
- package/aws/runtime/s3.d.ts +2 -0
- package/aws/runtime/s3.js +30 -0
- package/aws/runtime/secrets/dbsecret.d.ts +54 -0
- package/aws/runtime/secrets/dbsecret.js +96 -0
- package/aws/runtime/secrets/proxy-holder.d.ts +9 -0
- package/aws/runtime/secrets/proxy-holder.js +26 -0
- package/aws/runtime/secrets/rds-holder.d.ts +9 -0
- package/aws/runtime/secrets/rds-holder.js +26 -0
- package/aws/runtime/secrets/secret-holder.d.ts +26 -0
- package/aws/runtime/secrets/secret-holder.js +73 -0
- package/aws/runtime/secrets/secret.d.ts +8 -0
- package/aws/runtime/secrets/secret.js +43 -0
- package/aws/types/errors.d.ts +4 -0
- package/aws/types/errors.js +9 -0
- package/aws/types/lambda-response.d.ts +12 -0
- package/aws/types/lambda-response.js +28 -0
- package/aws/types/mediatypes.d.ts +10 -0
- package/aws/types/mediatypes.js +15 -0
- package/aws/types/model-with-reference.d.ts +7 -0
- package/aws/types/model-with-reference.js +3 -0
- package/aws/types/proxytypes.d.ts +26 -0
- package/aws/types/proxytypes.js +3 -0
- package/aws/types/tags.d.ts +2 -0
- package/aws/types/tags.js +7 -0
- package/database/cached.d.ts +7 -0
- package/database/cached.js +32 -0
- package/database/database.d.ts +19 -0
- package/database/database.js +62 -0
- package/database/last-updated.d.ts +16 -0
- package/database/last-updated.js +54 -0
- package/index.d.ts +1 -0
- package/index.js +18 -0
- package/marine/id_utils.d.ts +3 -0
- package/marine/id_utils.js +33 -0
- package/marine/rtz.d.ts +48 -0
- package/marine/rtz.js +3 -0
- package/package.json +55 -0
- package/src/aws/infra/api/integration.js +52 -0
- package/src/aws/infra/api/response.js +61 -0
- package/src/aws/infra/api/responses.js +79 -0
- package/src/aws/infra/api/static-integration.js +54 -0
- package/src/aws/infra/canaries/canary-alarm.js +26 -0
- package/src/aws/infra/canaries/canary-parameters.js +3 -0
- package/src/aws/infra/canaries/canary-role.js +46 -0
- package/src/aws/infra/canaries/canary.js +29 -0
- package/src/aws/infra/canaries/database-canary.js +55 -0
- package/src/aws/infra/canaries/database-checker.js +109 -0
- package/src/aws/infra/canaries/url-canary.js +46 -0
- package/src/aws/infra/canaries/url-checker.js +238 -0
- package/src/aws/infra/documentation.js +95 -0
- package/src/aws/infra/scheduler.js +31 -0
- package/src/aws/infra/security-rule.js +39 -0
- package/src/aws/infra/sqs-integration.js +93 -0
- package/src/aws/infra/sqs-queue.js +130 -0
- package/src/aws/infra/stack/lambda-configs.js +93 -0
- package/src/aws/infra/stack/monitoredfunction.js +135 -0
- package/src/aws/infra/stack/rest_apis.js +179 -0
- package/src/aws/infra/stack/stack-checking-aspect.js +163 -0
- package/src/aws/infra/stack/stack.js +58 -0
- package/src/aws/infra/stack/subscription.js +41 -0
- package/src/aws/infra/usage-plans.js +42 -0
- package/src/aws/runtime/apikey.js +13 -0
- package/src/aws/runtime/digitraffic-integration-response.js +26 -0
- package/src/aws/runtime/messaging.js +31 -0
- package/src/aws/runtime/s3.js +30 -0
- package/src/aws/runtime/secrets/dbsecret.js +96 -0
- package/src/aws/runtime/secrets/proxy-holder.js +26 -0
- package/src/aws/runtime/secrets/rds-holder.js +26 -0
- package/src/aws/runtime/secrets/secret-holder.js +73 -0
- package/src/aws/runtime/secrets/secret.js +43 -0
- package/src/aws/types/errors.js +9 -0
- package/src/aws/types/lambda-response.js +28 -0
- package/src/aws/types/mediatypes.js +15 -0
- package/src/aws/types/model-with-reference.js +3 -0
- package/src/aws/types/proxytypes.js +3 -0
- package/src/aws/types/tags.js +7 -0
- package/src/database/cached.js +32 -0
- package/src/database/database.js +62 -0
- package/src/database/last-updated.js +54 -0
- package/src/marine/id_utils.js +33 -0
- package/src/marine/rtz.js +3 -0
- package/src/test/asserter.js +45 -0
- package/src/test/db-testutils.js +31 -0
- package/src/test/httpserver.js +67 -0
- package/src/test/secret.js +25 -0
- package/src/test/secrets-manager.js +59 -0
- package/src/test/testutils.js +44 -0
- package/src/types/input-error.js +7 -0
- package/src/types/language.js +10 -0
- package/src/types/traffictype.js +13 -0
- package/src/types/validator.js +14 -0
- package/src/utils/api-model.js +129 -0
- package/src/utils/base64.js +21 -0
- package/src/utils/date-utils.js +34 -0
- package/src/utils/geojson-types.js +18 -0
- package/src/utils/geometry.js +140 -0
- package/src/utils/retry.js +50 -0
- package/src/utils/slack.js +25 -0
- package/src/utils/utils.js +40 -0
- package/test/asserter.d.ts +11 -0
- package/test/asserter.js +45 -0
- package/test/db-testutils.d.ts +2 -0
- package/test/db-testutils.js +31 -0
- package/test/httpserver.d.ts +18 -0
- package/test/httpserver.js +67 -0
- package/test/marine/id_utils.test.js +69 -0
- package/test/promise/promise.test.js +125 -0
- package/test/secret.d.ts +3 -0
- package/test/secret.js +25 -0
- package/test/secrets/dbsecret.test.js +71 -0
- package/test/secrets/secret-holder.test.js +124 -0
- package/test/secrets/secret.test.js +66 -0
- package/test/secrets-manager.d.ts +9 -0
- package/test/secrets-manager.js +59 -0
- package/test/test/httpserver.test.js +87 -0
- package/test/testutils.d.ts +12 -0
- package/test/testutils.js +44 -0
- package/test/utils/date-utils.test.js +51 -0
- package/test/utils/geometry.test.js +49 -0
- package/test/utils/utils.test.js +49 -0
- package/types/input-error.d.ts +2 -0
- package/types/input-error.js +7 -0
- package/types/language.d.ts +5 -0
- package/types/language.js +10 -0
- package/types/traffictype.d.ts +8 -0
- package/types/traffictype.js +13 -0
- package/types/validator.d.ts +4 -0
- package/types/validator.js +14 -0
- package/utils/api-model.d.ts +87 -0
- package/utils/api-model.js +129 -0
- package/utils/base64.d.ts +12 -0
- package/utils/base64.js +21 -0
- package/utils/date-utils.d.ts +17 -0
- package/utils/date-utils.js +34 -0
- package/utils/geojson-types.d.ts +14 -0
- package/utils/geojson-types.js +18 -0
- package/utils/geometry.d.ts +36 -0
- package/utils/geometry.js +140 -0
- package/utils/retry.d.ts +13 -0
- package/utils/retry.js +50 -0
- package/utils/slack.d.ts +5 -0
- package/utils/slack.js +25 -0
- package/utils/utils.d.ts +22 -0
- package/utils/utils.js +40 -0
@@ -0,0 +1,129 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
exports.geojsonSchema = exports.featureSchema = exports.createArraySchema = exports.addSimpleServiceModel = exports.addServiceModel = exports.addDefaultValidator = exports.getModelReference = void 0;
|
4
|
+
const aws_apigateway_1 = require("aws-cdk-lib/aws-apigateway");
|
5
|
+
/**
|
6
|
+
* Get a reference to an OpenAPI model object in a REST API.
|
7
|
+
* Can be used to supply a reference to properties of a GeoJSON feature.
|
8
|
+
* @param modelId Id of the referenced object
|
9
|
+
* @param restApiId Id of the REST API
|
10
|
+
*/
|
11
|
+
function getModelReference(modelId, restApiId) {
|
12
|
+
return `https://apigateway.amazonaws.com/restapis/${restApiId}/models/${modelId}`;
|
13
|
+
}
|
14
|
+
exports.getModelReference = getModelReference;
|
15
|
+
/**
|
16
|
+
* Adds a request validator to a REST API to enforce request parameters/body requirements.
|
17
|
+
* https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-method-request-validation.html
|
18
|
+
* @param api REST API
|
19
|
+
*/
|
20
|
+
function addDefaultValidator(api) {
|
21
|
+
return api.addRequestValidator('DefaultValidator', {
|
22
|
+
validateRequestParameters: true,
|
23
|
+
validateRequestBody: true,
|
24
|
+
});
|
25
|
+
}
|
26
|
+
exports.addDefaultValidator = addDefaultValidator;
|
27
|
+
/**
|
28
|
+
* Adds a JSON Schema model to an API Gateway API. Can be used later to generate OpenAPI specifications.
|
29
|
+
* This method adds a schema for _a single object._
|
30
|
+
* @param name Name of the model
|
31
|
+
* @param api REST API
|
32
|
+
* @param schema JSON Schema
|
33
|
+
* @return ModelWithReference A model object with a reference to an API Gateway model object.
|
34
|
+
*/
|
35
|
+
function addServiceModel(modelName, api, schema) {
|
36
|
+
const mwr = api.addModel(modelName, {
|
37
|
+
contentType: 'application/json',
|
38
|
+
modelName,
|
39
|
+
schema,
|
40
|
+
});
|
41
|
+
mwr.modelReference = getModelReference(mwr.modelId, api.restApiId);
|
42
|
+
return mwr;
|
43
|
+
}
|
44
|
+
exports.addServiceModel = addServiceModel;
|
45
|
+
/**
|
46
|
+
* Add an empty JSON schema model to an API Gateway API.
|
47
|
+
* Usable for example if the incoming data is in XML format but some template transformation is necessary.
|
48
|
+
* @param modelName
|
49
|
+
* @param api
|
50
|
+
* @param contentType
|
51
|
+
*/
|
52
|
+
function addSimpleServiceModel(modelName, api, contentType = 'application/xml') {
|
53
|
+
return api.addModel(modelName, {
|
54
|
+
contentType,
|
55
|
+
modelName,
|
56
|
+
schema: {},
|
57
|
+
});
|
58
|
+
}
|
59
|
+
exports.addSimpleServiceModel = addSimpleServiceModel;
|
60
|
+
/**
|
61
|
+
* Adds a JSON Schema model to an API Gateway API. Can be used later to generate OpenAPI specifications.
|
62
|
+
* This method adds a schema for _an array._
|
63
|
+
* @param model
|
64
|
+
* @param api
|
65
|
+
*/
|
66
|
+
function createArraySchema(model, api) {
|
67
|
+
return {
|
68
|
+
type: aws_apigateway_1.JsonSchemaType.ARRAY,
|
69
|
+
items: {
|
70
|
+
ref: getModelReference(model.modelId, api.restApiId),
|
71
|
+
},
|
72
|
+
};
|
73
|
+
}
|
74
|
+
exports.createArraySchema = createArraySchema;
|
75
|
+
/**
|
76
|
+
* Creates a JSON Schema for a GeoJSON Feature. Can be used to generate OpenAPI descriptions.
|
77
|
+
* @param modelReference Reference to a model object
|
78
|
+
*/
|
79
|
+
function featureSchema(modelReference) {
|
80
|
+
return {
|
81
|
+
schema: aws_apigateway_1.JsonSchemaVersion.DRAFT4,
|
82
|
+
type: aws_apigateway_1.JsonSchemaType.OBJECT,
|
83
|
+
description: 'GeoJson Feature',
|
84
|
+
required: ['type', 'properties', 'geometry'],
|
85
|
+
properties: {
|
86
|
+
type: {
|
87
|
+
type: aws_apigateway_1.JsonSchemaType.STRING,
|
88
|
+
description: 'Feature',
|
89
|
+
enum: ['Feature'],
|
90
|
+
},
|
91
|
+
properties: {
|
92
|
+
ref: modelReference,
|
93
|
+
},
|
94
|
+
geometry: {
|
95
|
+
type: aws_apigateway_1.JsonSchemaType.OBJECT,
|
96
|
+
description: 'GeoJSON geometry',
|
97
|
+
},
|
98
|
+
},
|
99
|
+
};
|
100
|
+
}
|
101
|
+
exports.featureSchema = featureSchema;
|
102
|
+
/**
|
103
|
+
*
|
104
|
+
* Creates a JSON Schema for a GeoJSON Feature Collection. Can be used to generate OpenAPI descriptions.
|
105
|
+
* @param modelReference Reference to a model object, in this case Features.
|
106
|
+
*/
|
107
|
+
function geojsonSchema(modelReference) {
|
108
|
+
return {
|
109
|
+
schema: aws_apigateway_1.JsonSchemaVersion.DRAFT4,
|
110
|
+
type: aws_apigateway_1.JsonSchemaType.OBJECT,
|
111
|
+
description: 'GeoJson FeatureCollection',
|
112
|
+
required: ['type', 'features'],
|
113
|
+
properties: {
|
114
|
+
type: {
|
115
|
+
type: aws_apigateway_1.JsonSchemaType.STRING,
|
116
|
+
description: 'FeatureCollection',
|
117
|
+
enum: ['FeatureCollection'],
|
118
|
+
},
|
119
|
+
features: {
|
120
|
+
type: aws_apigateway_1.JsonSchemaType.ARRAY,
|
121
|
+
items: {
|
122
|
+
ref: modelReference,
|
123
|
+
},
|
124
|
+
},
|
125
|
+
},
|
126
|
+
};
|
127
|
+
}
|
128
|
+
exports.geojsonSchema = geojsonSchema;
|
129
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpLW1vZGVsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3V0aWxzL2FwaS1tb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSwrREFPb0M7QUFHcEM7Ozs7O0dBS0c7QUFDSCxTQUFnQixpQkFBaUIsQ0FBQyxPQUFlLEVBQUUsU0FBaUI7SUFDaEUsT0FBTyw2Q0FBNkMsU0FBUyxXQUFXLE9BQU8sRUFBRSxDQUFDO0FBQ3RGLENBQUM7QUFGRCw4Q0FFQztBQUVEOzs7O0dBSUc7QUFDSCxTQUFnQixtQkFBbUIsQ0FBQyxHQUFZO0lBQzVDLE9BQU8sR0FBRyxDQUFDLG1CQUFtQixDQUFDLGtCQUFrQixFQUFFO1FBQy9DLHlCQUF5QixFQUFFLElBQUk7UUFDL0IsbUJBQW1CLEVBQUUsSUFBSTtLQUM1QixDQUFDLENBQUM7QUFDUCxDQUFDO0FBTEQsa0RBS0M7QUFFRDs7Ozs7OztHQU9HO0FBQ0gsU0FBZ0IsZUFBZSxDQUFDLFNBQWlCLEVBQUUsR0FBWSxFQUFFLE1BQWtCO0lBQy9FLE1BQU0sR0FBRyxHQUFHLEdBQUcsQ0FBQyxRQUFRLENBQUMsU0FBUyxFQUFFO1FBQ2hDLFdBQVcsRUFBRSxrQkFBa0I7UUFDL0IsU0FBUztRQUNULE1BQU07S0FDVCxDQUF1QixDQUFDO0lBQ3pCLEdBQUcsQ0FBQyxjQUFjLEdBQUcsaUJBQWlCLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDbkUsT0FBTyxHQUFHLENBQUM7QUFDZixDQUFDO0FBUkQsMENBUUM7QUFFRDs7Ozs7O0dBTUc7QUFDSCxTQUFnQixxQkFBcUIsQ0FBQyxTQUFpQixFQUFFLEdBQVksRUFBRSxXQUFXLEdBQUcsaUJBQWlCO0lBQ2xHLE9BQU8sR0FBRyxDQUFDLFFBQVEsQ0FBQyxTQUFTLEVBQUU7UUFDM0IsV0FBVztRQUNYLFNBQVM7UUFDVCxNQUFNLEVBQUUsRUFBRTtLQUNiLENBQUMsQ0FBQztBQUNQLENBQUM7QUFORCxzREFNQztBQUVEOzs7OztHQUtHO0FBQ0gsU0FBZ0IsaUJBQWlCLENBQUMsS0FBWSxFQUFFLEdBQVk7SUFDeEQsT0FBTztRQUNILElBQUksRUFBRSwrQkFBYyxDQUFDLEtBQUs7UUFDMUIsS0FBSyxFQUFFO1lBQ0gsR0FBRyxFQUFFLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsR0FBRyxDQUFDLFNBQVMsQ0FBQztTQUN2RDtLQUNKLENBQUM7QUFDTixDQUFDO0FBUEQsOENBT0M7QUFFRDs7O0dBR0c7QUFDSCxTQUFnQixhQUFhLENBQUMsY0FBc0I7SUFDaEQsT0FBTztRQUNILE1BQU0sRUFBRSxrQ0FBaUIsQ0FBQyxNQUFNO1FBQ2hDLElBQUksRUFBRSwrQkFBYyxDQUFDLE1BQU07UUFDM0IsV0FBVyxFQUFFLGlCQUFpQjtRQUM5QixRQUFRLEVBQUUsQ0FBQyxNQUFNLEVBQUUsWUFBWSxFQUFFLFVBQVUsQ0FBQztRQUM1QyxVQUFVLEVBQUU7WUFDUixJQUFJLEVBQUU7Z0JBQ0YsSUFBSSxFQUFFLCtCQUFjLENBQUMsTUFBTTtnQkFDM0IsV0FBVyxFQUFFLFNBQVM7Z0JBQ3RCLElBQUksRUFBRSxDQUFDLFNBQVMsQ0FBQzthQUNwQjtZQUNELFVBQVUsRUFBRTtnQkFDUixHQUFHLEVBQUUsY0FBYzthQUN0QjtZQUNELFFBQVEsRUFBRTtnQkFDTixJQUFJLEVBQUUsK0JBQWMsQ0FBQyxNQUFNO2dCQUMzQixXQUFXLEVBQUUsa0JBQWtCO2FBQ2xDO1NBQ0o7S0FDSixDQUFDO0FBQ04sQ0FBQztBQXJCRCxzQ0FxQkM7QUFFRDs7OztHQUlHO0FBQ0gsU0FBZ0IsYUFBYSxDQUFDLGNBQXNCO0lBQ2hELE9BQU87UUFDSCxNQUFNLEVBQUUsa0NBQWlCLENBQUMsTUFBTTtRQUNoQyxJQUFJLEVBQUUsK0JBQWMsQ0FBQyxNQUFNO1FBQzNCLFdBQVcsRUFBRSwyQkFBMkI7UUFDeEMsUUFBUSxFQUFFLENBQUMsTUFBTSxFQUFFLFVBQVUsQ0FBQztRQUM5QixVQUFVLEVBQUU7WUFDUixJQUFJLEVBQUU7Z0JBQ0YsSUFBSSxFQUFFLCtCQUFjLENBQUMsTUFBTTtnQkFDM0IsV0FBVyxFQUFFLG1CQUFtQjtnQkFDaEMsSUFBSSxFQUFFLENBQUMsbUJBQW1CLENBQUM7YUFDOUI7WUFDRCxRQUFRLEVBQUU7Z0JBQ04sSUFBSSxFQUFFLCtCQUFjLENBQUMsS0FBSztnQkFDMUIsS0FBSyxFQUFFO29CQUNILEdBQUcsRUFBRSxjQUFjO2lCQUN0QjthQUNKO1NBQ0o7S0FDSixDQUFDO0FBQ04sQ0FBQztBQXBCRCxzQ0FvQkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIFJlc3RBcGksXG4gICAgTW9kZWwsXG4gICAgSnNvblNjaGVtYSxcbiAgICBSZXF1ZXN0VmFsaWRhdG9yLFxuICAgIEpzb25TY2hlbWFUeXBlLFxuICAgIEpzb25TY2hlbWFWZXJzaW9uLFxufSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtYXBpZ2F0ZXdheSc7XG5pbXBvcnQge01vZGVsV2l0aFJlZmVyZW5jZX0gZnJvbSBcIi4uL2F3cy90eXBlcy9tb2RlbC13aXRoLXJlZmVyZW5jZVwiO1xuXG4vKipcbiAqIEdldCBhIHJlZmVyZW5jZSB0byBhbiBPcGVuQVBJIG1vZGVsIG9iamVjdCBpbiBhIFJFU1QgQVBJLlxuICogQ2FuIGJlIHVzZWQgdG8gc3VwcGx5IGEgcmVmZXJlbmNlIHRvIHByb3BlcnRpZXMgb2YgYSBHZW9KU09OIGZlYXR1cmUuXG4gKiBAcGFyYW0gbW9kZWxJZCBJZCBvZiB0aGUgcmVmZXJlbmNlZCBvYmplY3RcbiAqIEBwYXJhbSByZXN0QXBpSWQgSWQgb2YgdGhlIFJFU1QgQVBJXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRNb2RlbFJlZmVyZW5jZShtb2RlbElkOiBzdHJpbmcsIHJlc3RBcGlJZDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIGBodHRwczovL2FwaWdhdGV3YXkuYW1hem9uYXdzLmNvbS9yZXN0YXBpcy8ke3Jlc3RBcGlJZH0vbW9kZWxzLyR7bW9kZWxJZH1gO1xufVxuXG4vKipcbiAqIEFkZHMgYSByZXF1ZXN0IHZhbGlkYXRvciB0byBhIFJFU1QgQVBJIHRvIGVuZm9yY2UgcmVxdWVzdCBwYXJhbWV0ZXJzL2JvZHkgcmVxdWlyZW1lbnRzLlxuICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2FwaWdhdGV3YXkvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL2FwaS1nYXRld2F5LW1ldGhvZC1yZXF1ZXN0LXZhbGlkYXRpb24uaHRtbFxuICogQHBhcmFtIGFwaSBSRVNUIEFQSVxuICovXG5leHBvcnQgZnVuY3Rpb24gYWRkRGVmYXVsdFZhbGlkYXRvcihhcGk6IFJlc3RBcGkpOiBSZXF1ZXN0VmFsaWRhdG9yIHtcbiAgICByZXR1cm4gYXBpLmFkZFJlcXVlc3RWYWxpZGF0b3IoJ0RlZmF1bHRWYWxpZGF0b3InLCB7XG4gICAgICAgIHZhbGlkYXRlUmVxdWVzdFBhcmFtZXRlcnM6IHRydWUsXG4gICAgICAgIHZhbGlkYXRlUmVxdWVzdEJvZHk6IHRydWUsXG4gICAgfSk7XG59XG5cbi8qKlxuICogQWRkcyBhIEpTT04gU2NoZW1hIG1vZGVsIHRvIGFuIEFQSSBHYXRld2F5IEFQSS4gQ2FuIGJlIHVzZWQgbGF0ZXIgdG8gZ2VuZXJhdGUgT3BlbkFQSSBzcGVjaWZpY2F0aW9ucy5cbiAqIFRoaXMgbWV0aG9kIGFkZHMgYSBzY2hlbWEgZm9yIF9hIHNpbmdsZSBvYmplY3QuX1xuICogQHBhcmFtIG5hbWUgTmFtZSBvZiB0aGUgbW9kZWxcbiAqIEBwYXJhbSBhcGkgUkVTVCBBUElcbiAqIEBwYXJhbSBzY2hlbWEgSlNPTiBTY2hlbWFcbiAqIEByZXR1cm4gTW9kZWxXaXRoUmVmZXJlbmNlIEEgbW9kZWwgb2JqZWN0IHdpdGggYSByZWZlcmVuY2UgdG8gYW4gQVBJIEdhdGV3YXkgbW9kZWwgb2JqZWN0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gYWRkU2VydmljZU1vZGVsKG1vZGVsTmFtZTogc3RyaW5nLCBhcGk6IFJlc3RBcGksIHNjaGVtYTogSnNvblNjaGVtYSk6IE1vZGVsV2l0aFJlZmVyZW5jZSB7XG4gICAgY29uc3QgbXdyID0gYXBpLmFkZE1vZGVsKG1vZGVsTmFtZSwge1xuICAgICAgICBjb250ZW50VHlwZTogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgICBtb2RlbE5hbWUsXG4gICAgICAgIHNjaGVtYSxcbiAgICB9KSBhcyBNb2RlbFdpdGhSZWZlcmVuY2U7XG4gICAgbXdyLm1vZGVsUmVmZXJlbmNlID0gZ2V0TW9kZWxSZWZlcmVuY2UobXdyLm1vZGVsSWQsIGFwaS5yZXN0QXBpSWQpO1xuICAgIHJldHVybiBtd3I7XG59XG5cbi8qKlxuICogQWRkIGFuIGVtcHR5IEpTT04gc2NoZW1hIG1vZGVsIHRvIGFuIEFQSSBHYXRld2F5IEFQSS5cbiAqIFVzYWJsZSBmb3IgZXhhbXBsZSBpZiB0aGUgaW5jb21pbmcgZGF0YSBpcyBpbiBYTUwgZm9ybWF0IGJ1dCBzb21lIHRlbXBsYXRlIHRyYW5zZm9ybWF0aW9uIGlzIG5lY2Vzc2FyeS5cbiAqIEBwYXJhbSBtb2RlbE5hbWVcbiAqIEBwYXJhbSBhcGlcbiAqIEBwYXJhbSBjb250ZW50VHlwZVxuICovXG5leHBvcnQgZnVuY3Rpb24gYWRkU2ltcGxlU2VydmljZU1vZGVsKG1vZGVsTmFtZTogc3RyaW5nLCBhcGk6IFJlc3RBcGksIGNvbnRlbnRUeXBlID0gJ2FwcGxpY2F0aW9uL3htbCcpOiBNb2RlbCB7XG4gICAgcmV0dXJuIGFwaS5hZGRNb2RlbChtb2RlbE5hbWUsIHtcbiAgICAgICAgY29udGVudFR5cGUsXG4gICAgICAgIG1vZGVsTmFtZSxcbiAgICAgICAgc2NoZW1hOiB7fSxcbiAgICB9KTtcbn1cblxuLyoqXG4gKiBBZGRzIGEgSlNPTiBTY2hlbWEgbW9kZWwgdG8gYW4gQVBJIEdhdGV3YXkgQVBJLiBDYW4gYmUgdXNlZCBsYXRlciB0byBnZW5lcmF0ZSBPcGVuQVBJIHNwZWNpZmljYXRpb25zLlxuICogVGhpcyBtZXRob2QgYWRkcyBhIHNjaGVtYSBmb3IgX2FuIGFycmF5Ll9cbiAqIEBwYXJhbSBtb2RlbFxuICogQHBhcmFtIGFwaVxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQXJyYXlTY2hlbWEobW9kZWw6IE1vZGVsLCBhcGk6IFJlc3RBcGkpOiBKc29uU2NoZW1hIHtcbiAgICByZXR1cm4ge1xuICAgICAgICB0eXBlOiBKc29uU2NoZW1hVHlwZS5BUlJBWSxcbiAgICAgICAgaXRlbXM6IHtcbiAgICAgICAgICAgIHJlZjogZ2V0TW9kZWxSZWZlcmVuY2UobW9kZWwubW9kZWxJZCwgYXBpLnJlc3RBcGlJZCksXG4gICAgICAgIH0sXG4gICAgfTtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgSlNPTiBTY2hlbWEgZm9yIGEgR2VvSlNPTiBGZWF0dXJlLiBDYW4gYmUgdXNlZCB0byBnZW5lcmF0ZSBPcGVuQVBJIGRlc2NyaXB0aW9ucy5cbiAqIEBwYXJhbSBtb2RlbFJlZmVyZW5jZSBSZWZlcmVuY2UgdG8gYSBtb2RlbCBvYmplY3RcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZlYXR1cmVTY2hlbWEobW9kZWxSZWZlcmVuY2U6IHN0cmluZykge1xuICAgIHJldHVybiB7XG4gICAgICAgIHNjaGVtYTogSnNvblNjaGVtYVZlcnNpb24uRFJBRlQ0LFxuICAgICAgICB0eXBlOiBKc29uU2NoZW1hVHlwZS5PQkpFQ1QsXG4gICAgICAgIGRlc2NyaXB0aW9uOiAnR2VvSnNvbiBGZWF0dXJlJyxcbiAgICAgICAgcmVxdWlyZWQ6IFsndHlwZScsICdwcm9wZXJ0aWVzJywgJ2dlb21ldHJ5J10sXG4gICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICB0eXBlOiBKc29uU2NoZW1hVHlwZS5TVFJJTkcsXG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb246ICdGZWF0dXJlJyxcbiAgICAgICAgICAgICAgICBlbnVtOiBbJ0ZlYXR1cmUnXSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICAgICAgcmVmOiBtb2RlbFJlZmVyZW5jZSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBnZW9tZXRyeToge1xuICAgICAgICAgICAgICAgIHR5cGU6IEpzb25TY2hlbWFUeXBlLk9CSkVDVCxcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogJ0dlb0pTT04gZ2VvbWV0cnknLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9O1xufVxuXG4vKipcbiAqXG4gKiBDcmVhdGVzIGEgSlNPTiBTY2hlbWEgZm9yIGEgR2VvSlNPTiBGZWF0dXJlIENvbGxlY3Rpb24uIENhbiBiZSB1c2VkIHRvIGdlbmVyYXRlIE9wZW5BUEkgZGVzY3JpcHRpb25zLlxuICogQHBhcmFtIG1vZGVsUmVmZXJlbmNlIFJlZmVyZW5jZSB0byBhIG1vZGVsIG9iamVjdCwgaW4gdGhpcyBjYXNlIEZlYXR1cmVzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2VvanNvblNjaGVtYShtb2RlbFJlZmVyZW5jZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgc2NoZW1hOiBKc29uU2NoZW1hVmVyc2lvbi5EUkFGVDQsXG4gICAgICAgIHR5cGU6IEpzb25TY2hlbWFUeXBlLk9CSkVDVCxcbiAgICAgICAgZGVzY3JpcHRpb246ICdHZW9Kc29uIEZlYXR1cmVDb2xsZWN0aW9uJyxcbiAgICAgICAgcmVxdWlyZWQ6IFsndHlwZScsICdmZWF0dXJlcyddLFxuICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgdHlwZTogSnNvblNjaGVtYVR5cGUuU1RSSU5HLFxuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnRmVhdHVyZUNvbGxlY3Rpb24nLFxuICAgICAgICAgICAgICAgIGVudW06IFsnRmVhdHVyZUNvbGxlY3Rpb24nXSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBmZWF0dXJlczoge1xuICAgICAgICAgICAgICAgIHR5cGU6IEpzb25TY2hlbWFUeXBlLkFSUkFZLFxuICAgICAgICAgICAgICAgIGl0ZW1zOiB7XG4gICAgICAgICAgICAgICAgICAgIHJlZjogbW9kZWxSZWZlcmVuY2UsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfTtcbn1cbiJdfQ==
|
@@ -0,0 +1,12 @@
|
|
1
|
+
/// <reference types="node" />
|
2
|
+
/**
|
3
|
+
* Decode given string from base64 to ascii
|
4
|
+
* @param str string
|
5
|
+
*/
|
6
|
+
export declare function decodeBase64ToAscii(str: string): string;
|
7
|
+
/**
|
8
|
+
* Decode given string from base64 to given encoding
|
9
|
+
* @param str
|
10
|
+
* @param encoding
|
11
|
+
*/
|
12
|
+
export declare function decodeBase64(str: string, encoding: BufferEncoding): string;
|
package/utils/base64.js
ADDED
@@ -0,0 +1,21 @@
|
|
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZTY0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3V0aWxzL2Jhc2U2NC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQTs7O0dBR0c7QUFDSCxTQUFnQixtQkFBbUIsQ0FBQyxHQUFXO0lBQzNDLE9BQU8sWUFBWSxDQUFDLEdBQUcsRUFBRSxPQUFPLENBQUMsQ0FBQztBQUN0QyxDQUFDO0FBRkQsa0RBRUM7QUFFRDs7OztHQUlHO0FBQ0gsU0FBZ0IsWUFBWSxDQUFDLEdBQVcsRUFBRSxRQUF3QjtJQUM5RCxPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLFFBQVEsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUN6RCxDQUFDO0FBRkQsb0NBRUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIERlY29kZSBnaXZlbiBzdHJpbmcgZnJvbSBiYXNlNjQgdG8gYXNjaWlcbiAqIEBwYXJhbSBzdHIgc3RyaW5nXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZWNvZGVCYXNlNjRUb0FzY2lpKHN0cjogc3RyaW5nKSB7XG4gICAgcmV0dXJuIGRlY29kZUJhc2U2NChzdHIsICdhc2NpaScpO1xufVxuXG4vKipcbiAqIERlY29kZSBnaXZlbiBzdHJpbmcgZnJvbSBiYXNlNjQgdG8gZ2l2ZW4gZW5jb2RpbmdcbiAqIEBwYXJhbSBzdHJcbiAqIEBwYXJhbSBlbmNvZGluZ1xuICovXG5leHBvcnQgZnVuY3Rpb24gZGVjb2RlQmFzZTY0KHN0cjogc3RyaW5nLCBlbmNvZGluZzogQnVmZmVyRW5jb2RpbmcpIHtcbiAgICByZXR1cm4gQnVmZmVyLmZyb20oc3RyLCAnYmFzZTY0JykudG9TdHJpbmcoZW5jb2RpbmcpO1xufVxuIl19
|
@@ -0,0 +1,17 @@
|
|
1
|
+
/**
|
2
|
+
* Counts difference in milliseconds between dates.
|
3
|
+
* @param start
|
4
|
+
* @param end
|
5
|
+
*/
|
6
|
+
export declare function countDiffMs(start: Date, end: Date): number;
|
7
|
+
/**
|
8
|
+
* Counts difference in seconds between dates.
|
9
|
+
* @param start
|
10
|
+
* @param end
|
11
|
+
*/
|
12
|
+
export declare function countDiffInSeconds(start: Date, end: Date): number;
|
13
|
+
/**
|
14
|
+
* Converts ISO 8601 date-time -string to Date object
|
15
|
+
* @param isoString to convert
|
16
|
+
*/
|
17
|
+
export declare function dateFromIsoString(isoString: string): Date;
|
@@ -0,0 +1,34 @@
|
|
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS11dGlscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy9kYXRlLXV0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUNBOzs7O0dBSUc7QUFDSCxTQUFnQixXQUFXLENBQUMsS0FBVyxFQUFFLEdBQVM7SUFDOUMsT0FBTyxHQUFHLENBQUMsT0FBTyxFQUFFLEdBQUcsS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDO0FBQzNDLENBQUM7QUFGRCxrQ0FFQztBQUVEOzs7O0dBSUc7QUFDSCxTQUFnQixrQkFBa0IsQ0FBQyxLQUFXLEVBQUUsR0FBUztJQUNyRCxPQUFPLFdBQVcsQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLEdBQUMsSUFBSSxDQUFDO0FBQ3hDLENBQUM7QUFGRCxnREFFQztBQUVEOzs7R0FHRztBQUNILFNBQWdCLGlCQUFpQixDQUFDLFNBQWlCO0lBQy9DLE1BQU0sTUFBTSxHQUFHLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ25DLElBQUksQ0FBQyxDQUFDLE1BQU0sWUFBWSxJQUFJLENBQUMsSUFBSSxLQUFLLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDLEVBQUU7UUFDdEQsTUFBTSxJQUFJLEtBQUssQ0FBQyw2QkFBNkIsU0FBUyxFQUFFLENBQUMsQ0FBQztLQUM3RDtJQUNELE9BQU8sTUFBTSxDQUFDO0FBQ2xCLENBQUM7QUFORCw4Q0FNQyIsInNvdXJjZXNDb250ZW50IjpbIlxuLyoqXG4gKiBDb3VudHMgZGlmZmVyZW5jZSBpbiBtaWxsaXNlY29uZHMgYmV0d2VlbiBkYXRlcy5cbiAqIEBwYXJhbSBzdGFydFxuICogQHBhcmFtIGVuZFxuICovXG5leHBvcnQgZnVuY3Rpb24gY291bnREaWZmTXMoc3RhcnQ6IERhdGUsIGVuZDogRGF0ZSk6IG51bWJlciB7XG4gICAgcmV0dXJuIGVuZC5nZXRUaW1lKCkgLSBzdGFydC5nZXRUaW1lKCk7XG59XG5cbi8qKlxuICogQ291bnRzIGRpZmZlcmVuY2UgaW4gc2Vjb25kcyBiZXR3ZWVuIGRhdGVzLlxuICogQHBhcmFtIHN0YXJ0XG4gKiBAcGFyYW0gZW5kXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb3VudERpZmZJblNlY29uZHMoc3RhcnQ6IERhdGUsIGVuZDogRGF0ZSk6IG51bWJlciB7XG4gICAgcmV0dXJuIGNvdW50RGlmZk1zKHN0YXJ0LCBlbmQpLzEwMDA7XG59XG5cbi8qKlxuICogQ29udmVydHMgSVNPIDg2MDEgZGF0ZS10aW1lIC1zdHJpbmcgdG8gRGF0ZSBvYmplY3RcbiAqIEBwYXJhbSBpc29TdHJpbmcgdG8gY29udmVydFxuICovXG5leHBvcnQgZnVuY3Rpb24gZGF0ZUZyb21Jc29TdHJpbmcoaXNvU3RyaW5nOiBzdHJpbmcpOiBEYXRlIHtcbiAgICBjb25zdCBwYXJzZWQgPSBuZXcgRGF0ZShpc29TdHJpbmcpO1xuICAgIGlmICghKHBhcnNlZCBpbnN0YW5jZW9mIERhdGUpIHx8IGlzTmFOKHBhcnNlZC5nZXRUaW1lKCkpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBJU08tREFURSAtc3RyaW5nOiAke2lzb1N0cmluZ31gKTtcbiAgICB9XG4gICAgcmV0dXJuIHBhcnNlZDtcbn1cbiJdfQ==
|
@@ -0,0 +1,14 @@
|
|
1
|
+
/**
|
2
|
+
* GeoJSON types
|
3
|
+
*/
|
4
|
+
import { LineString, Point, Position } from "geojson";
|
5
|
+
export declare class GeoJsonPoint implements Point {
|
6
|
+
readonly type = "Point";
|
7
|
+
readonly coordinates: Position;
|
8
|
+
constructor(coordinates: Position);
|
9
|
+
}
|
10
|
+
export declare class GeoJsonLineString implements LineString {
|
11
|
+
readonly type = "LineString";
|
12
|
+
readonly coordinates: Position[];
|
13
|
+
constructor(coordinates: Position[]);
|
14
|
+
}
|
@@ -0,0 +1,18 @@
|
|
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VvanNvbi10eXBlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy9nZW9qc29uLXR5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUtBLE1BQWEsWUFBWTtJQUlyQixZQUFZLFdBQXFCO1FBSHhCLFNBQUksR0FBRyxPQUFPLENBQUM7UUFJcEIsSUFBSSxDQUFDLFdBQVcsR0FBRyxXQUFXLENBQUM7SUFDbkMsQ0FBQztDQUNKO0FBUEQsb0NBT0M7QUFFRCxNQUFhLGlCQUFpQjtJQUkxQixZQUFZLFdBQXVCO1FBSDFCLFNBQUksR0FBRyxZQUFZLENBQUM7UUFJekIsSUFBSSxDQUFDLFdBQVcsR0FBRyxXQUFXLENBQUM7SUFDbkMsQ0FBQztDQUNKO0FBUEQsOENBT0MiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEdlb0pTT04gdHlwZXNcbiAqL1xuaW1wb3J0IHtMaW5lU3RyaW5nLCBQb2ludCwgUG9zaXRpb259IGZyb20gXCJnZW9qc29uXCI7XG5cbmV4cG9ydCBjbGFzcyBHZW9Kc29uUG9pbnQgaW1wbGVtZW50cyBQb2ludCB7XG4gICAgcmVhZG9ubHkgdHlwZSA9IFwiUG9pbnRcIjtcbiAgICByZWFkb25seSBjb29yZGluYXRlczogUG9zaXRpb247XG5cbiAgICBjb25zdHJ1Y3Rvcihjb29yZGluYXRlczogUG9zaXRpb24pIHtcbiAgICAgICAgdGhpcy5jb29yZGluYXRlcyA9IGNvb3JkaW5hdGVzO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEdlb0pzb25MaW5lU3RyaW5nIGltcGxlbWVudHMgTGluZVN0cmluZyB7XG4gICAgcmVhZG9ubHkgdHlwZSA9IFwiTGluZVN0cmluZ1wiO1xuICAgIHJlYWRvbmx5IGNvb3JkaW5hdGVzOiBQb3NpdGlvbltdO1xuXG4gICAgY29uc3RydWN0b3IoY29vcmRpbmF0ZXM6IFBvc2l0aW9uW10pIHtcbiAgICAgICAgdGhpcy5jb29yZGluYXRlcyA9IGNvb3JkaW5hdGVzO1xuICAgIH1cbn1cbiJdfQ==
|
@@ -0,0 +1,36 @@
|
|
1
|
+
/**
|
2
|
+
* GeoJSON functions and tools
|
3
|
+
*/
|
4
|
+
import { Feature, FeatureCollection, Geometry, Position } from "geojson";
|
5
|
+
export declare const SRID_WGS84 = 4326;
|
6
|
+
/**
|
7
|
+
* Creates WKT geometry from GeoJSON geometry
|
8
|
+
* @param geometry GeoJson geometry to convert to WKT
|
9
|
+
*/
|
10
|
+
export declare function createGeometry(geometry: Geometry): string;
|
11
|
+
/**
|
12
|
+
* Create a GeoJSON FeatureCollection from a list of GeoJSON features with a 'last updated' property
|
13
|
+
* @param features List of Features
|
14
|
+
* @param lastUpdated Last updated date
|
15
|
+
*/
|
16
|
+
export declare function createFeatureCollection(features: Feature[], lastUpdated: Date | null): FeatureCollection;
|
17
|
+
export declare function isValidGeoJson<T>(json: T): boolean;
|
18
|
+
export declare function isFeatureCollection<T>(json: T): boolean;
|
19
|
+
/**
|
20
|
+
* Calculates distance between two GeoJSON points (WGS84)
|
21
|
+
* @param pos1
|
22
|
+
* @param pos2
|
23
|
+
*/
|
24
|
+
export declare function distanceBetweenPositionsInKm(pos1: Position, pos2: Position): number;
|
25
|
+
export declare function areDistinctPositions(previous: Position, next: Position): boolean;
|
26
|
+
/**
|
27
|
+
* Calculates distance between two GeoJSON points (WGS84)
|
28
|
+
* @param pos1
|
29
|
+
* @param pos2
|
30
|
+
*/
|
31
|
+
export declare function distanceBetweenPositionsInM(pos1: Position, pos2: Position): number;
|
32
|
+
export declare function createGmlLineString(geometry: Geometry, srsName?: string): {
|
33
|
+
srsName: string;
|
34
|
+
posList: string;
|
35
|
+
};
|
36
|
+
export declare function positionToList(position: Position, precision?: number): string;
|
@@ -0,0 +1,140 @@
|
|
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VvbWV0cnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbHMvZ2VvbWV0cnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBS2EsUUFBQSxVQUFVLEdBQUcsSUFBSSxDQUFDO0FBRS9COzs7R0FHRztBQUNILFNBQWdCLGNBQWMsQ0FBQyxRQUFrQjtJQUM3QyxJQUFJLFFBQVEsQ0FBQyxJQUFJLEtBQUssWUFBWSxFQUFFO1FBQ2hDLE1BQU0sV0FBVyxHQUFHLFVBQVUsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLENBQUM7UUFFckQsT0FBTyxjQUFjLFdBQVcsR0FBRyxDQUFDO0tBQ3ZDO1NBQU0sSUFBSSxRQUFRLENBQUMsSUFBSSxLQUFLLE9BQU8sRUFBRTtRQUNsQyxNQUFNLFdBQVcsR0FBRyxjQUFjLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBRXpELE9BQU8sU0FBUyxXQUFXLEdBQUcsQ0FBQztLQUNsQztTQUFNLElBQUksUUFBUSxDQUFDLElBQUksS0FBSyxTQUFTLEVBQUU7UUFDcEMsTUFBTSxXQUFXLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUVsRCxPQUFPLFdBQVcsV0FBVyxHQUFHLENBQUM7S0FDcEM7U0FBTSxJQUFJLFFBQVEsQ0FBQyxJQUFJLEtBQUssY0FBYyxFQUFFO1FBQ3pDLE1BQU0sV0FBVyxHQUFHLFlBQVksQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLENBQUM7UUFFdkQsT0FBTyxnQkFBZ0IsV0FBVyxHQUFHLENBQUM7S0FDekM7SUFFRCxPQUFPLENBQUMsS0FBSyxDQUFDLDZCQUE2QixFQUFFLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM1RCxPQUFPLGVBQWUsQ0FBQztBQUMzQixDQUFDO0FBckJELHdDQXFCQztBQUVELFNBQVMsVUFBVSxDQUFDLFdBQXVCO0lBQ3ZDLE9BQU8sV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQVcsRUFB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O0lBRUQsTUFBTSxJQUFJLEtBQUssQ0FBQyx3QkFBd0IsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7QUFDekUsQ0FBQztBQUVELFNBQVMsYUFBYSxDQUFDLFNBQXVCLEVBQUUsU0FBUyxHQUFHLENBQUM7SUFDekQsT0FBTyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3hFLENBQUM7QUFFRCxTQUFTLGdCQUFnQixDQUFDLFNBQXFCLEVBQUUsU0FBUyxHQUFHLENBQUM7SUFDMUQsT0FBTyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsY0FBYyxDQUFDLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN0RSxDQUFDO0FBRUQsU0FBZ0IsY0FBYyxDQUFDLFFBQWtCLEVBQUUsU0FBUyxHQUFHLENBQUM7SUFDNUQsT0FBTyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNqRSxDQUFDO0FBRkQsd0NBRUM7QUFFRCxzQ0FBc0M7QUFDdEMsU0FBUyxTQUFTLENBQUMsTUFBYTtJQUM1QixPQUFPLE1BQU0sR0FBRyxrQkFBa0IsQ0FBQztBQUN2QyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEdlb0pTT04gZnVuY3Rpb25zIGFuZCB0b29sc1xyXG4gKi9cclxuaW1wb3J0IHtGZWF0dXJlLCBGZWF0dXJlQ29sbGVjdGlvbiwgR2VvbWV0cnksIFBvc2l0aW9ufSBmcm9tIFwiZ2VvanNvblwiO1xyXG5cclxuZXhwb3J0IGNvbnN0IFNSSURfV0dTODQgPSA0MzI2O1xyXG5cclxuLyoqXHJcbiAqIENyZWF0ZXMgV0tUIGdlb21ldHJ5IGZyb20gR2VvSlNPTiBnZW9tZXRyeVxyXG4gKiBAcGFyYW0gZ2VvbWV0cnkgR2VvSnNvbiBnZW9tZXRyeSB0byBjb252ZXJ0IHRvIFdLVFxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUdlb21ldHJ5KGdlb21ldHJ5OiBHZW9tZXRyeSk6IHN0cmluZyB7XHJcbiAgICBpZiAoZ2VvbWV0cnkudHlwZSA9PT0gJ0xpbmVTdHJpbmcnKSB7XHJcbiAgICAgICAgY29uc3QgY29vcmRpbmF0ZXMgPSBsaW5lc3RyaW5nKGdlb21ldHJ5LmNvb3JkaW5hdGVzKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIGBMSU5FU1RSSU5HKCR7Y29vcmRpbmF0ZXN9KWA7XHJcbiAgICB9IGVsc2UgaWYgKGdlb21ldHJ5LnR5cGUgPT09ICdQb2ludCcpIHtcclxuICAgICAgICBjb25zdCBjb29yZGluYXRlcyA9IGNvb3JkaW5hdGVQYWlyKGdlb21ldHJ5LmNvb3JkaW5hdGVzKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIGBQT0lOVCgke2Nvb3JkaW5hdGVzfSlgO1xyXG4gICAgfSBlbHNlIGlmIChnZW9tZXRyeS50eXBlID09PSAnUG9seWdvbicpIHtcclxuICAgICAgICBjb25zdCBjb29yZGluYXRlcyA9IHBvbHlnb24oZ2VvbWV0cnkuY29vcmRpbmF0ZXMpO1xyXG5cclxuICAgICAgICByZXR1cm4gYFBPTFlHT04oJHtjb29yZGluYXRlc30pYDtcclxuICAgIH0gZWxzZSBpZiAoZ2VvbWV0cnkudHlwZSA9PT0gJ011bHRpUG9seWdvbicpIHtcclxuICAgICAgICBjb25zdCBjb29yZGluYXRlcyA9IG11bHRpUG9seWdvbihnZW9tZXRyeS5jb29yZGluYXRlcyk7XHJcblxyXG4gICAgICAgIHJldHVybiBgTVVMVElQT0xZR09OKCR7Y29vcmRpbmF0ZXN9KWA7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc29sZS5lcnJvcihcInVuc3VwcG9ydGVkIGxvY2F0aW9uVHlwZT0lc1wiLCBnZW9tZXRyeS50eXBlKTtcclxuICAgIHJldHVybiBcIlBPTFlHT04gRU1QVFlcIjtcclxufVxyXG5cclxuZnVuY3Rpb24gbGluZXN0cmluZyhjb29yZGluYXRlczogUG9zaXRpb25bXSk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gY29vcmRpbmF0ZXMubWFwKChjOiBQb3NpdGlvbikgPT4gIGNvb3JkaW5hdGVQYWlyKGMpKS5qb2luKCcsJyk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHBvbHlnb24oY29vcmRpbmF0ZXM6IFBvc2l0aW9uW11bXSk6c3RyaW5nIHtcclxuICAgIGNvbnN0IGxpc3QgPSBjb29yZGluYXRlcy5tYXAoKGM6IFBvc2l0aW9uW10pID0+IGxpbmVzdHJpbmcoYykpLmpvaW4oJywnKTtcclxuICAgIHJldHVybiBgKCR7bGlzdH0pYDtcclxufVxyXG5cclxuZnVuY3Rpb24gbXVsdGlQb2x5Z29uKGNvb3JkaW5hdGVzOiBQb3NpdGlvbltdW11bXSk6c3RyaW5nIHtcclxuICAgIGNvbnN0IGxpc3QgPSBjb29yZGluYXRlcy5tYXAoKGM6IFBvc2l0aW9uW11bXSkgPT4gcG9seWdvbihjKSkuam9pbignLCcpO1xyXG4gICAgcmV0dXJuIGAoJHtsaXN0fSlgO1xyXG59XHJcblxyXG5mdW5jdGlvbiBjb29yZGluYXRlUGFpcihjb29yZGluYXRlOiBQb3NpdGlvbik6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gYCR7Y29vcmRpbmF0ZVswXX0gJHtjb29yZGluYXRlWzFdfWA7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBDcmVhdGUgYSBHZW9KU09OIEZlYXR1cmVDb2xsZWN0aW9uIGZyb20gYSBsaXN0IG9mIEdlb0pTT04gZmVhdHVyZXMgd2l0aCBhICdsYXN0IHVwZGF0ZWQnIHByb3BlcnR5XHJcbiAqIEBwYXJhbSBmZWF0dXJlcyBMaXN0IG9mIEZlYXR1cmVzXHJcbiAqIEBwYXJhbSBsYXN0VXBkYXRlZCBMYXN0IHVwZGF0ZWQgZGF0ZVxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUZlYXR1cmVDb2xsZWN0aW9uKGZlYXR1cmVzOiBGZWF0dXJlW10sIGxhc3RVcGRhdGVkOiBEYXRlIHwgbnVsbCk6IEZlYXR1cmVDb2xsZWN0aW9uIHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgdHlwZTogXCJGZWF0dXJlQ29sbGVjdGlvblwiLFxyXG4gICAgICAgIGxhc3RVcGRhdGVkOiBsYXN0VXBkYXRlZCxcclxuICAgICAgICBmZWF0dXJlczogZmVhdHVyZXMsXHJcbiAgICB9IGFzIEZlYXR1cmVDb2xsZWN0aW9uO1xyXG59XHJcblxyXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXZhci1yZXF1aXJlc1xyXG5jb25zdCBnZW9Kc29uVmFsaWRhdG9yID0gcmVxdWlyZSgnZ2VvanNvbi12YWxpZGF0aW9uJyk7XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gaXNWYWxpZEdlb0pzb248VD4oanNvbjogVCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIGdlb0pzb25WYWxpZGF0b3IudmFsaWQoanNvbik7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBpc0ZlYXR1cmVDb2xsZWN0aW9uPFQ+KGpzb246IFQpOiBib29sZWFuIHtcclxuICAgIHJldHVybiBnZW9Kc29uVmFsaWRhdG9yLmlzRmVhdHVyZUNvbGxlY3Rpb24oanNvbik7XHJcbn1cclxuXHJcbmNvbnN0IERFR1JFRVNfVE9fUkFESUFOUyA9IDAuMDE3NDUzMjkyNTE5OTQzMjk1OyAvLyA9IE1hdGguUEkgLyAxODBcclxuY29uc3QgRUFSVEhfUkFESVVTX0tNID0gNjM3MTtcclxuXHJcblxyXG4vKipcclxuICogUmV0dXJucyB0aGUgZGlzdGFuY2UgYmV0d2VlbiB0aGlzIGFuZCBnaXZlbiBHZW9KU09OIHBvaW50IGluIGtpbG9tZXRlcnMuIERvZXNuJ3QgdGFrZSBpbiBhY2NvdW50IGFsdGl0dWRlLlxyXG4gKiBCYXNlZCBvbiB0aGUgZm9sbG93aW5nIFN0YWNrIE92ZXJmbG93IHF1ZXN0aW9uOlxyXG4gKiBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzI3OTI4L2NhbGN1bGF0ZS1kaXN0YW5jZS1iZXR3ZWVuLXR3by1sYXRpdHVkZS1sb25naXR1ZGUtcG9pbnRzLWhhdmVyc2luZS1mb3JtdWxhLFxyXG4gKiB3aGljaCBpcyBiYXNlZCBvbiBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9IYXZlcnNpbmVfZm9ybXVsYSAoZXJyb3IgcmF0ZTogfjAuNTUlKS5cclxuICovXHJcbmZ1bmN0aW9uIGRpc3RhbmNlQmV0d2VlbldHUzg0UG9pbnRzSW5LbShmcm9tWExvbjpudW1iZXIsIGZyb21ZTGF0Om51bWJlciwgdG9YTG9uOm51bWJlciwgdG9ZTGF0Om51bWJlcik6IG51bWJlciAge1xyXG5cclxuICAgIGNvbnN0IGRpZmZMYXQgPSB0b1JhZGlhbnModG9ZTGF0IC0gZnJvbVlMYXQpO1xyXG4gICAgY29uc3QgZGlmZkxvbiA9IHRvUmFkaWFucyh0b1hMb24gLSBmcm9tWExvbik7XHJcblxyXG4gICAgY29uc3QgYSA9XHJcbiAgICAgICAgTWF0aC5zaW4oZGlmZkxhdCAvIDIpICogTWF0aC5zaW4oZGlmZkxhdCAvIDIpICtcclxuICAgICAgICBNYXRoLmNvcyh0b1JhZGlhbnMoZnJvbVlMYXQpKSAqIE1hdGguY29zKHRvUmFkaWFucyh0b1lMYXQpKSAqXHJcbiAgICAgICAgTWF0aC5zaW4oZGlmZkxvbiAvIDIpICogTWF0aC5zaW4oZGlmZkxvbiAvIDIpO1xyXG4gICAgY29uc3QgYyA9IDIgKiBNYXRoLmF0YW4yKE1hdGguc3FydChhKSwgTWF0aC5zcXJ0KDEgLSBhKSk7XHJcbiAgICByZXR1cm4gRUFSVEhfUkFESVVTX0tNICogYztcclxufVxyXG5cclxuLyoqXHJcbiAqIENhbGN1bGF0ZXMgZGlzdGFuY2UgYmV0d2VlbiB0d28gR2VvSlNPTiBwb2ludHMgKFdHUzg0KVxyXG4gKiBAcGFyYW0gcG9zMVxyXG4gKiBAcGFyYW0gcG9zMlxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGRpc3RhbmNlQmV0d2VlblBvc2l0aW9uc0luS20ocG9zMTogUG9zaXRpb24sIHBvczI6IFBvc2l0aW9uKSB7XHJcbiAgICByZXR1cm4gZGlzdGFuY2VCZXR3ZWVuV0dTODRQb2ludHNJbkttKHBvczFbMF0sIHBvczFbMV0sIHBvczJbMF0sIHBvczJbMV0pO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gYXJlRGlzdGluY3RQb3NpdGlvbnMocHJldmlvdXM6IFBvc2l0aW9uLCBuZXh0OiBQb3NpdGlvbikge1xyXG4gICAgcmV0dXJuIHByZXZpb3VzWzBdICE9PSBuZXh0WzBdIHx8IHByZXZpb3VzWzFdICE9PSBuZXh0WzFdO1xyXG59XHJcblxyXG4vKipcclxuICogQ2FsY3VsYXRlcyBkaXN0YW5jZSBiZXR3ZWVuIHR3byBHZW9KU09OIHBvaW50cyAoV0dTODQpXHJcbiAqIEBwYXJhbSBwb3MxXHJcbiAqIEBwYXJhbSBwb3MyXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gZGlzdGFuY2VCZXR3ZWVuUG9zaXRpb25zSW5NKHBvczE6IFBvc2l0aW9uLCBwb3MyOiBQb3NpdGlvbikge1xyXG4gICAgcmV0dXJuIGRpc3RhbmNlQmV0d2VlblBvc2l0aW9uc0luS20ocG9zMSwgcG9zMikgKiAxMDAwOyAvLyBrbSAtPiBtXHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVHbWxMaW5lU3RyaW5nKGdlb21ldHJ5OiBHZW9tZXRyeSwgc3JzTmFtZSA9ICdFUFNHOjQzMjYnKSB7XHJcbiAgICBjb25zdCBwb3NMaXN0ID0gY3JlYXRlUG9zTGlzdChnZW9tZXRyeSk7XHJcblxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICBzcnNOYW1lLFxyXG4gICAgICAgIHBvc0xpc3QsXHJcbiAgICB9O1xyXG59XHJcblxyXG5mdW5jdGlvbiBjcmVhdGVQb3NMaXN0KGdlb21ldHJ5OiBHZW9tZXRyeSkge1xyXG4gICAgaWYgKGdlb21ldHJ5LnR5cGUgPT09ICdQb2ludCcpIHtcclxuICAgICAgICByZXR1cm4gcG9zaXRpb25Ub0xpc3QoZ2VvbWV0cnkuY29vcmRpbmF0ZXMpO1xyXG4gICAgfSBlbHNlIGlmIChnZW9tZXRyeS50eXBlID09PSAnTGluZVN0cmluZycpIHtcclxuICAgICAgICByZXR1cm4gbGluZVN0cmluZ1RvTGlzdChnZW9tZXRyeS5jb29yZGluYXRlcyk7XHJcbiAgICB9IGVsc2UgaWYgKGdlb21ldHJ5LnR5cGUgPT09ICdQb2x5Z29uJykge1xyXG4gICAgICAgIHJldHVybiBwb2x5Z29uVG9MaXN0KGdlb21ldHJ5LmNvb3JkaW5hdGVzKTtcclxuICAgIH1cclxuXHJcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJ1bmtub3duIGdlb21ldHJ5IHR5cGUgXCIgKyBKU09OLnN0cmluZ2lmeShnZW9tZXRyeSkpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBwb2x5Z29uVG9MaXN0KHBvc2l0aW9uczogUG9zaXRpb25bXVtdLCBwcmVjaXNpb24gPSA4KSB7XHJcbiAgICByZXR1cm4gcG9zaXRpb25zLm1hcChwID0+IGxpbmVTdHJpbmdUb0xpc3QocCwgcHJlY2lzaW9uKSkuam9pbignICcpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBsaW5lU3RyaW5nVG9MaXN0KHBvc2l0aW9uczogUG9zaXRpb25bXSwgcHJlY2lzaW9uID0gOCkge1xyXG4gICAgcmV0dXJuIHBvc2l0aW9ucy5tYXAocCA9PiBwb3NpdGlvblRvTGlzdChwLCBwcmVjaXNpb24pKS5qb2luKCcgJyk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBwb3NpdGlvblRvTGlzdChwb3NpdGlvbjogUG9zaXRpb24sIHByZWNpc2lvbiA9IDgpIHtcclxuICAgIHJldHVybiBwb3NpdGlvbi5tYXAobiA9PiBuLnRvUHJlY2lzaW9uKHByZWNpc2lvbikpLmpvaW4oJyAnKTtcclxufVxyXG5cclxuLy8gQ29udmVydHMgbnVtZXJpYyBkZWdyZWVzIHRvIHJhZGlhbnNcclxuZnVuY3Rpb24gdG9SYWRpYW5zKGFuZ2RlZzpudW1iZXIpIHtcclxuICAgIHJldHVybiBhbmdkZWcgKiBERUdSRUVTX1RPX1JBRElBTlM7XHJcbn1cclxuIl19
|
package/utils/retry.d.ts
ADDED
@@ -0,0 +1,13 @@
|
|
1
|
+
export declare enum RetryLogError {
|
2
|
+
LOG_ALL_AS_ERRORS = 0,
|
3
|
+
LOG_LAST_RETRY_AS_ERROR_OTHERS_AS_WARNS = 1,
|
4
|
+
NO_LOGGING = 2
|
5
|
+
}
|
6
|
+
/**
|
7
|
+
* Utility function for retrying async functions.
|
8
|
+
* @param asyncFn Function
|
9
|
+
* @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.
|
10
|
+
* @param logError Logging options
|
11
|
+
* @return Promise return value
|
12
|
+
*/
|
13
|
+
export declare function retry<T>(asyncFn: () => Promise<T>, retries?: number, logError?: RetryLogError): Promise<T>;
|
package/utils/retry.js
ADDED
@@ -0,0 +1,50 @@
|
|
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmV0cnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbHMvcmV0cnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsSUFBWSxhQUlYO0FBSkQsV0FBWSxhQUFhO0lBQ3JCLDJFQUFpQixDQUFBO0lBQ2pCLHVIQUF1QyxDQUFBO0lBQ3ZDLDZEQUFVLENBQUE7QUFDZCxDQUFDLEVBSlcsYUFBYSxHQUFiLHFCQUFhLEtBQWIscUJBQWEsUUFJeEI7QUFFRDs7Ozs7O0dBTUc7QUFDSSxLQUFLLFVBQVUsS0FBSyxDQUFJLE9BQXlCLEVBQ3BELE9BQU8sR0FBRyxDQUFDLEVBQ1gsUUFBUSxHQUFHLGFBQWEsQ0FBQyx1Q0FBdUM7SUFFaEUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsRUFBRTtRQUNwQixNQUFNLElBQUksS0FBSyxDQUFDLG1DQUFtQyxDQUFDLENBQUM7S0FDeEQ7SUFDRCxJQUFJLE9BQU8sR0FBRyxHQUFHLEVBQUU7UUFDZixNQUFNLElBQUksS0FBSyxDQUFDLHlDQUF5QyxDQUFDLENBQUM7S0FDOUQ7SUFDRCxJQUFJO1FBQ0EsT0FBTyxNQUFNLE9BQU8sRUFBRSxDQUFDO0tBQzFCO0lBQUMsT0FBTyxLQUFLLEVBQUU7UUFDWixNQUFNLGdCQUFnQixHQUFHLE9BQU8sR0FBRyxDQUFDLENBQUM7UUFFckMsTUFBTSxZQUFZLEdBQUcsb0JBQW9CLENBQUM7UUFDMUMsSUFBSSxRQUFRLEtBQUssYUFBYSxDQUFDLGlCQUFpQixFQUFFO1lBQzlDLE9BQU8sQ0FBQyxLQUFLLENBQUMsWUFBWSxFQUFFLEtBQUssQ0FBQyxDQUFDO1NBQ3RDO2FBQU0sSUFBSSxRQUFRLEtBQUssYUFBYSxDQUFDLHVDQUF1QyxFQUFFO1lBQzNFLElBQUksZ0JBQWdCLEdBQUcsQ0FBQyxFQUFFO2dCQUN0QixPQUFPLENBQUMsS0FBSyxDQUFDLFlBQVksRUFBRSxLQUFLLENBQUMsQ0FBQzthQUN0QztpQkFBTTtnQkFDSCxPQUFPLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxLQUFLLENBQUMsQ0FBQzthQUNyQztTQUNKO1FBRUQsSUFBSSxnQkFBZ0IsR0FBRyxDQUFDLEVBQUU7WUFDdEIsT0FBTyxDQUFDLElBQUksQ0FBQyw4QkFBOEIsQ0FBQyxDQUFDO1lBQzdDLE1BQU0sSUFBSSxLQUFLLENBQUMsaUJBQWlCLENBQUMsQ0FBQztTQUN0QztRQUNELE9BQU8sQ0FBQyxJQUFJLENBQUMsb0VBQW9FLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztRQUNyRyxPQUFPLEtBQUssQ0FBQyxPQUFPLEVBQ2hCLGdCQUFnQixFQUNoQixRQUFRLENBQUMsQ0FBQztLQUNqQjtBQUNMLENBQUM7QUFuQ0Qsc0JBbUNDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGVudW0gUmV0cnlMb2dFcnJvciB7XG4gICAgTE9HX0FMTF9BU19FUlJPUlMsXG4gICAgTE9HX0xBU1RfUkVUUllfQVNfRVJST1JfT1RIRVJTX0FTX1dBUk5TLFxuICAgIE5PX0xPR0dJTkdcbn1cblxuLyoqXG4gKiBVdGlsaXR5IGZ1bmN0aW9uIGZvciByZXRyeWluZyBhc3luYyBmdW5jdGlvbnMuXG4gKiBAcGFyYW0gYXN5bmNGbiBGdW5jdGlvblxuICogQHBhcmFtIHJldHJpZXMgQW1vdW50IG9mIHJldHJpZXMsIGRlZmF1bHQgaXMgMy4gSWYgc2V0IHRvIDw9IDAsIG5vIHJldHJpZXMgd2lsbCBiZSBkb25lLiBVc2luZyBub24tZmluaXRlIG51bWJlcnMgd2lsbCB0aHJvdyBhbiBlcnJvci4gVGhlIG1heGltdW0gYWxsb3dlZCByZXRyeSBjb3VudCBpcyAxMDAuXG4gKiBAcGFyYW0gbG9nRXJyb3IgTG9nZ2luZyBvcHRpb25zXG4gKiBAcmV0dXJuIFByb21pc2UgcmV0dXJuIHZhbHVlXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZXRyeTxUPihhc3luY0ZuOiAoKSA9PiBQcm9taXNlPFQ+LFxuICAgIHJldHJpZXMgPSAzLFxuICAgIGxvZ0Vycm9yID0gUmV0cnlMb2dFcnJvci5MT0dfTEFTVF9SRVRSWV9BU19FUlJPUl9PVEhFUlNfQVNfV0FSTlMpOiBQcm9taXNlPFQ+IHtcblxuICAgIGlmICghaXNGaW5pdGUocmV0cmllcykpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdPbmx5IGZpbml0ZSBudW1iZXJzIGFyZSBzdXBwb3J0ZWQnKTtcbiAgICB9XG4gICAgaWYgKHJldHJpZXMgPiAxMDApIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdFeGNlZWRlZCB0aGUgbWF4aW11bSByZXRyeSBjb3VudCBvZiAxMDAnKTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IGFzeW5jRm4oKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjb25zdCByZW1haW5pbmdSZXRyaWVzID0gcmV0cmllcyAtIDE7XG5cbiAgICAgICAgY29uc3QgZXJyb3JNZXNzYWdlID0gJ21ldGhvZD1yZXRyeSBlcnJvcic7XG4gICAgICAgIGlmIChsb2dFcnJvciA9PT0gUmV0cnlMb2dFcnJvci5MT0dfQUxMX0FTX0VSUk9SUykge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnJvck1lc3NhZ2UsIGVycm9yKTtcbiAgICAgICAgfSBlbHNlIGlmIChsb2dFcnJvciA9PT0gUmV0cnlMb2dFcnJvci5MT0dfTEFTVF9SRVRSWV9BU19FUlJPUl9PVEhFUlNfQVNfV0FSTlMpIHtcbiAgICAgICAgICAgIGlmIChyZW1haW5pbmdSZXRyaWVzIDwgMCkge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3JNZXNzYWdlLCBlcnJvcik7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybihlcnJvck1lc3NhZ2UsIGVycm9yKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChyZW1haW5pbmdSZXRyaWVzIDwgMCkge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdtZXRob2Q9cmV0cnkgbm8gcmV0cmllcyBsZWZ0Jyk7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIHJldHJpZXMgbGVmdCcpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnNvbGUud2FybignbWV0aG9kPXJldHJ5IGludm9jYXRpb24gZmFpbGVkLCByZXRyeWluZyB3aXRoIHJlbWFpbmluZyByZXRyaWVzICVkJywgcmVtYWluaW5nUmV0cmllcyk7XG4gICAgICAgIHJldHVybiByZXRyeShhc3luY0ZuLFxuICAgICAgICAgICAgcmVtYWluaW5nUmV0cmllcyxcbiAgICAgICAgICAgIGxvZ0Vycm9yKTtcbiAgICB9XG59XG4iXX0=
|
package/utils/slack.d.ts
ADDED
package/utils/slack.js
ADDED
@@ -0,0 +1,25 @@
|
|
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2xhY2suanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbHMvc2xhY2sudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsa0RBQTBCO0FBRTFCLE1BQWEsUUFBUTtJQUlqQixZQUFZLEdBQVc7UUFDbkIsSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7SUFDbkIsQ0FBQztJQUVELEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBWTtRQUNyQixJQUFJO1lBQ0EsT0FBTyxDQUFDLElBQUksQ0FBQywrQkFBK0IsQ0FBQyxDQUFDO1lBQzlDLE1BQU0sZUFBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFO2dCQUN2QixJQUFJO2FBQ1AsQ0FBQyxDQUFDO1NBQ047UUFBQyxPQUFPLEtBQUssRUFBRTtZQUNaLE9BQU8sQ0FBQyxLQUFLLENBQUMsb0NBQW9DLENBQUMsQ0FBQztTQUN2RDtJQUNMLENBQUM7Q0FFSjtBQW5CRCw0QkFtQkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYXhpb3MgZnJvbSBcImF4aW9zXCI7XG5cbmV4cG9ydCBjbGFzcyBTbGFja0FwaSB7XG5cbiAgICBwcml2YXRlIHJlYWRvbmx5IHVybDogc3RyaW5nO1xuXG4gICAgY29uc3RydWN0b3IodXJsIDpzdHJpbmcpIHtcbiAgICAgICAgdGhpcy51cmwgPSB1cmw7XG4gICAgfVxuXG4gICAgYXN5bmMgbm90aWZ5KHRleHQ6IHN0cmluZykge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc29sZS5pbmZvKCdtZXRob2Q9bm90aWZ5IE5vdGlmeWluZyBTbGFjaycpO1xuICAgICAgICAgICAgYXdhaXQgYXhpb3MucG9zdCh0aGlzLnVybCwge1xuICAgICAgICAgICAgICAgIHRleHQsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ21ldGhvZD1ub3RpZnkgU2xhY2sgbm90aWZ5IGZhaWxlZCEnKTtcbiAgICAgICAgfVxuICAgIH1cblxufVxuIl19
|
package/utils/utils.d.ts
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
/**
|
2
|
+
* Check if arrays have only elements that also exists also in other array.
|
3
|
+
* Individual element count doesn't matter.
|
4
|
+
* Function works only for primitive types and for other it just checks the reference to object.
|
5
|
+
*
|
6
|
+
* Some examples
|
7
|
+
* bothArraysHasSameValues( [a, b], [b, a] ) => true
|
8
|
+
* bothArraysHasSameValues( [a, a], [a, a, a] ) => true
|
9
|
+
* bothArraysHasSameValues( [a, b], [a] ) => false
|
10
|
+
*
|
11
|
+
* Object references:
|
12
|
+
* const o1 = { a: 1, b: 2};
|
13
|
+
* const o2 = { a: 1, b: 2};
|
14
|
+
* // Arrays has references to same objects
|
15
|
+
* bothArraysHasSameValues([o1], [o1])) => true
|
16
|
+
* Arrays have references to different objects
|
17
|
+
* bothArraysHasSameValues([o1], [o2])) => false
|
18
|
+
*
|
19
|
+
* @param a first array to compare
|
20
|
+
* @param b second array to compare
|
21
|
+
*/
|
22
|
+
export declare function bothArraysHasSameValues(a: null | undefined | unknown[], b: null | undefined | unknown[]): boolean;
|
package/utils/utils.js
ADDED
@@ -0,0 +1,40 @@
|
|
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbHMvdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBb0JHO0FBQ0gsU0FBZ0IsdUJBQXVCLENBQUMsQ0FBMkIsRUFBRSxDQUEyQjtJQUM1RixJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRTtRQUN4QixPQUFPLEtBQUssQ0FBQztLQUNoQjtTQUFNLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUU7UUFDakIsT0FBTyxJQUFJLENBQUM7S0FDZjtJQUNELE1BQU0sSUFBSSxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3hCLE1BQU0sSUFBSSxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3hCLElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxJQUFJLENBQUMsSUFBSSxFQUFFO1FBQ3pCLE9BQU8sS0FBSyxDQUFDO0tBQ2hCO0lBQ0QsT0FBTyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztBQUM1RCxDQUFDO0FBWkQsMERBWUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENoZWNrIGlmIGFycmF5cyBoYXZlIG9ubHkgZWxlbWVudHMgdGhhdCBhbHNvIGV4aXN0cyBhbHNvIGluIG90aGVyIGFycmF5LlxuICogSW5kaXZpZHVhbCBlbGVtZW50IGNvdW50IGRvZXNuJ3QgbWF0dGVyLlxuICogRnVuY3Rpb24gd29ya3Mgb25seSBmb3IgcHJpbWl0aXZlIHR5cGVzIGFuZCBmb3Igb3RoZXIgaXQganVzdCBjaGVja3MgdGhlIHJlZmVyZW5jZSB0byBvYmplY3QuXG4gKlxuICogU29tZSBleGFtcGxlc1xuICogYm90aEFycmF5c0hhc1NhbWVWYWx1ZXMoIFthLCBiXSwgW2IsIGFdICkgICAgPT4gdHJ1ZVxuICogYm90aEFycmF5c0hhc1NhbWVWYWx1ZXMoIFthLCBhXSwgW2EsIGEsIGFdICkgPT4gdHJ1ZVxuICogYm90aEFycmF5c0hhc1NhbWVWYWx1ZXMoIFthLCBiXSwgW2FdICkgICAgICAgPT4gZmFsc2VcbiAqXG4gKiBPYmplY3QgcmVmZXJlbmNlczpcbiAqIGNvbnN0IG8xID0geyBhOiAxLCBiOiAyfTtcbiAqIGNvbnN0IG8yID0geyBhOiAxLCBiOiAyfTtcbiAqIC8vIEFycmF5cyBoYXMgcmVmZXJlbmNlcyB0byBzYW1lIG9iamVjdHNcbiAqIGJvdGhBcnJheXNIYXNTYW1lVmFsdWVzKFtvMV0sIFtvMV0pKSAgICAgICAgID0+IHRydWVcbiAqIEFycmF5cyBoYXZlIHJlZmVyZW5jZXMgdG8gZGlmZmVyZW50IG9iamVjdHNcbiAqIGJvdGhBcnJheXNIYXNTYW1lVmFsdWVzKFtvMV0sIFtvMl0pKSAgICAgICAgID0+IGZhbHNlXG4gKlxuICogQHBhcmFtIGEgZmlyc3QgYXJyYXkgdG8gY29tcGFyZVxuICogQHBhcmFtIGIgc2Vjb25kIGFycmF5IHRvIGNvbXBhcmVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJvdGhBcnJheXNIYXNTYW1lVmFsdWVzKGE6IG51bGx8dW5kZWZpbmVkfHVua25vd25bXSwgYjogbnVsbHx1bmRlZmluZWR8dW5rbm93bltdKTogYm9vbGVhbiB7XG4gICAgaWYgKChhICYmICFiKSB8fCAoIWEgJiYgYikpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0gZWxzZSBpZiAoIWEgJiYgIWIpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGNvbnN0IGFTZXQgPSBuZXcgU2V0KGEpO1xuICAgIGNvbnN0IGJTZXQgPSBuZXcgU2V0KGIpO1xuICAgIGlmIChhU2V0LnNpemUgIT09IGJTZXQuc2l6ZSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiBBcnJheS5mcm9tKGFTZXQpLmV2ZXJ5KHZhbHVlID0+IGJTZXQuaGFzKHZhbHVlKSk7XG59XG4iXX0=
|