@intuitionrobotics/ts-common 0.46.0 → 0.47.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/consts/consts.js +17 -0
- package/consts/consts.js.map +1 -1
- package/core/application.js +17 -0
- package/core/application.js.map +1 -1
- package/core/debug-flags.js +19 -2
- package/core/debug-flags.js.map +1 -1
- package/core/dispatcher.d.ts +4 -4
- package/core/dispatcher.js +7 -9
- package/core/dispatcher.js.map +1 -1
- package/core/error-handling.d.ts +1 -1
- package/core/error-handling.js +18 -1
- package/core/error-handling.js.map +1 -1
- package/core/exceptions.d.ts +5 -2
- package/core/exceptions.js +23 -1
- package/core/exceptions.js.map +1 -1
- package/core/logger/BeLogged.js +18 -1
- package/core/logger/BeLogged.js.map +1 -1
- package/core/logger/LogClient.d.ts +1 -1
- package/core/logger/LogClient.js +17 -0
- package/core/logger/LogClient.js.map +1 -1
- package/core/logger/LogClient_BaseRotate.d.ts +1 -1
- package/core/logger/LogClient_BaseRotate.js +19 -1
- package/core/logger/LogClient_BaseRotate.js.map +1 -1
- package/core/logger/LogClient_Browser.js +17 -0
- package/core/logger/LogClient_Browser.js.map +1 -1
- package/core/logger/LogClient_Function.js +18 -1
- package/core/logger/LogClient_Function.js.map +1 -1
- package/core/logger/LogClient_MemBuffer.js +18 -0
- package/core/logger/LogClient_MemBuffer.js.map +1 -1
- package/core/logger/LogClient_Terminal.js +19 -2
- package/core/logger/LogClient_Terminal.js.map +1 -1
- package/core/logger/Logger.js +17 -0
- package/core/logger/Logger.js.map +1 -1
- package/core/logger/types.d.ts +2 -2
- package/core/logger/types.js +18 -1
- package/core/logger/types.js.map +1 -1
- package/core/logger/utils.js +23 -3
- package/core/logger/utils.js.map +1 -1
- package/core/module-manager.js +2 -2
- package/core/module-manager.js.map +1 -1
- package/core/module.d.ts +2 -6
- package/core/module.js +14 -24
- package/core/module.js.map +1 -1
- package/index.d.ts +35 -0
- package/index.js +67 -0
- package/index.js.map +1 -1
- package/modules/CliParamsModule.d.ts +3 -3
- package/modules/CliParamsModule.js +3 -3
- package/modules/CliParamsModule.js.map +1 -1
- package/package.json +3 -3
- package/permissions/permission-group.js +20 -4
- package/permissions/permission-group.js.map +1 -1
- package/testing/test-model.d.ts +4 -4
- package/testing/test-model.js +17 -0
- package/testing/test-model.js.map +1 -1
- package/utils/array-tools.d.ts +2 -2
- package/utils/array-tools.js +17 -0
- package/utils/array-tools.js.map +1 -1
- package/utils/crypto-tools.js +18 -1
- package/utils/crypto-tools.js.map +1 -1
- package/utils/date-time-tools.d.ts +5 -2
- package/utils/date-time-tools.js +42 -3
- package/utils/date-time-tools.js.map +1 -1
- package/utils/filter-tools.js +17 -0
- package/utils/filter-tools.js.map +1 -1
- package/utils/hash-tools.js +17 -0
- package/utils/hash-tools.js.map +1 -1
- package/utils/merge-tools.js +22 -6
- package/utils/merge-tools.js.map +1 -1
- package/utils/object-tools.d.ts +1 -1
- package/utils/object-tools.js +20 -3
- package/utils/object-tools.js.map +1 -1
- package/utils/queue.d.ts +2 -2
- package/utils/queue.js +3 -3
- package/utils/queue.js.map +1 -1
- package/utils/random-tools.js +18 -1
- package/utils/random-tools.js.map +1 -1
- package/utils/string-tools.js +17 -0
- package/utils/string-tools.js.map +1 -1
- package/utils/tools.js +5 -3
- package/utils/tools.js.map +1 -1
- package/utils/types.d.ts +25 -23
- package/utils/types.js +17 -0
- package/utils/types.js.map +1 -1
- package/utils/version-tools.d.ts +1 -1
- package/utils/version-tools.js +20 -3
- package/utils/version-tools.js.map +1 -1
- package/validator/validator.d.ts +9 -7
- package/validator/validator.js +35 -21
- package/validator/validator.js.map +1 -1
- package/ts-generics/array-params.d.ts +0 -17
- package/ts-generics/array-params.js +0 -27
- package/ts-generics/array-params.js.map +0 -1
- package/ts-generics/omit-and-join.d.ts +0 -12
- package/ts-generics/omit-and-join.js +0 -18
- package/ts-generics/omit-and-join.js.map +0 -1
- package/utils/date-manipulation-tools.d.ts +0 -4
- package/utils/date-manipulation-tools.js +0 -28
- package/utils/date-manipulation-tools.js.map +0 -1
package/utils/version-tools.js
CHANGED
|
@@ -1,7 +1,24 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
/*
|
|
3
|
+
* ts-common is the basic building blocks of our typescript projects
|
|
4
|
+
*
|
|
5
|
+
* Copyright (C) 2020 Intuition Robotics
|
|
6
|
+
*
|
|
7
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
8
|
+
* you may not use this file except in compliance with the License.
|
|
9
|
+
* You may obtain a copy of the License at
|
|
10
|
+
*
|
|
11
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
12
|
+
*
|
|
13
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
14
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
15
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
16
|
+
* See the License for the specific language governing permissions and
|
|
17
|
+
* limitations under the License.
|
|
18
|
+
*/
|
|
2
19
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
20
|
exports.compareVersions = void 0;
|
|
4
|
-
const
|
|
21
|
+
const index_1 = require("../index");
|
|
5
22
|
/**
|
|
6
23
|
*
|
|
7
24
|
* @param firstVersion a version
|
|
@@ -13,9 +30,9 @@ const exceptions_1 = require("../core/exceptions");
|
|
|
13
30
|
*/
|
|
14
31
|
function compareVersions(firstVersion, secondVersion) {
|
|
15
32
|
if (!firstVersion)
|
|
16
|
-
throw new
|
|
33
|
+
throw new index_1.BadImplementationException("First version is undefined");
|
|
17
34
|
if (!secondVersion)
|
|
18
|
-
throw new
|
|
35
|
+
throw new index_1.BadImplementationException("Second version is undefined");
|
|
19
36
|
const firstVersionAsArray = firstVersion.split("\.");
|
|
20
37
|
const secondVersionAsArray = secondVersion.split("\.");
|
|
21
38
|
for (let i = 0; i < firstVersionAsArray.length; i++) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"version-tools.js","sourceRoot":"","sources":["../../src/main/utils/version-tools.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"version-tools.js","sourceRoot":"","sources":["../../src/main/utils/version-tools.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;GAgBG;;;AAGH,oCAAoD;AAEpD;;;;;;;;GAQG;AACH,SAAgB,eAAe,CAAC,YAAoB,EAAE,aAAqB;IAC1E,IAAI,CAAC,YAAY;QAChB,MAAM,IAAI,kCAA0B,CAAC,4BAA4B,CAAC,CAAC;IAEpE,IAAI,CAAC,aAAa;QACjB,MAAM,IAAI,kCAA0B,CAAC,6BAA6B,CAAC,CAAC;IAErE,MAAM,mBAAmB,GAAG,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACrD,MAAM,oBAAoB,GAAG,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACvD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,mBAAmB,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrD,MAAM,SAAS,GAAG,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC;QAC3C,MAAM,QAAQ,GAAG,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC;QACzC,IAAI,SAAS,GAAG,QAAQ;YACvB,OAAO,CAAC,CAAC;QAEV,IAAI,SAAS,KAAK,QAAQ;YACzB,SAAS;QAEV,IAAI,SAAS,GAAG,QAAQ;YACvB,OAAO,CAAC,CAAC,CAAC;IACZ,CAAC;IAED,OAAO,CAAC,CAAC;AACV,CAAC;AAvBD,0CAuBC"}
|
package/validator/validator.d.ts
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { CustomException } from "../core/exceptions";
|
|
2
2
|
import { ArrayType, AuditBy, ObjectTS, RangeTimestamp } from "../utils/types";
|
|
3
|
-
export
|
|
4
|
-
export
|
|
5
|
-
export
|
|
3
|
+
export type ValidatorTypeResolver<K> = K extends any[] ? Validator<K> : K extends object ? TypeValidator<K> | Validator<K> : Validator<K>;
|
|
4
|
+
export type Validator<P> = undefined | ((path: string, p?: P) => void);
|
|
5
|
+
export type TypeValidator<T extends ObjectTS> = {
|
|
6
6
|
[P in keyof T]: ValidatorTypeResolver<T[P]>;
|
|
7
7
|
};
|
|
8
8
|
export declare class ValidationException extends CustomException {
|
|
@@ -15,19 +15,21 @@ export declare const validateType: (type: "undefined" | "object" | "boolean" | "
|
|
|
15
15
|
export declare const validateString: (mandatory?: boolean) => Validator<any>;
|
|
16
16
|
export declare const validateNumber: (mandatory?: boolean) => Validator<any>;
|
|
17
17
|
export declare const validateBoolean: (mandatory?: boolean) => Validator<any>;
|
|
18
|
-
export declare const validateObjectValues: <V, T
|
|
18
|
+
export declare const validateObjectValues: <V, T extends {
|
|
19
|
+
[k: string]: V;
|
|
20
|
+
} = {
|
|
19
21
|
[k: string]: V;
|
|
20
22
|
}>(validator: ValidatorTypeResolver<V>, mandatory?: boolean) => Validator<T>;
|
|
21
23
|
export declare const validateArray: <T extends any[], I = ArrayType<T>>(validator: ValidatorTypeResolver<I>, mandatory?: boolean) => Validator<I[]>;
|
|
22
24
|
export declare const validateRegexp: (regexp: RegExp, mandatory?: boolean) => Validator<string>;
|
|
23
25
|
export declare const validateValue: (values: string[], mandatory?: boolean) => Validator<string>;
|
|
24
26
|
export declare const validateRange: (ranges: [number, number][], mandatory?: boolean) => Validator<number>;
|
|
25
|
-
export declare const validate: <T
|
|
27
|
+
export declare const validate: <T>(instance: T, _validator: ValidatorTypeResolver<T>, path?: string) => void;
|
|
26
28
|
export declare const validateObject: <T>(__validator: TypeValidator<object>, instance: T, path?: string) => void;
|
|
27
29
|
export declare const isTimestampValid: (time: number, range?: {
|
|
28
30
|
min: number;
|
|
29
31
|
max: number;
|
|
30
32
|
}) => boolean;
|
|
31
|
-
export declare const auditValidator: (range?: RangeTimestamp
|
|
32
|
-
export declare const timestampValidator: (range?: RangeTimestamp
|
|
33
|
+
export declare const auditValidator: (range?: RangeTimestamp) => (_path: string, audit?: AuditBy) => void;
|
|
34
|
+
export declare const timestampValidator: (range?: RangeTimestamp) => (_path: string, timestamp?: number) => void;
|
|
33
35
|
export declare const validateEmail: Validator<string>;
|
package/validator/validator.js
CHANGED
|
@@ -1,10 +1,27 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
/*
|
|
3
|
+
* ts-common is the basic building blocks of our typescript projects
|
|
4
|
+
*
|
|
5
|
+
* Copyright (C) 2020 Intuition Robotics
|
|
6
|
+
*
|
|
7
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
8
|
+
* you may not use this file except in compliance with the License.
|
|
9
|
+
* You may obtain a copy of the License at
|
|
10
|
+
*
|
|
11
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
12
|
+
*
|
|
13
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
14
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
15
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
16
|
+
* See the License for the specific language governing permissions and
|
|
17
|
+
* limitations under the License.
|
|
18
|
+
*/
|
|
2
19
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
20
|
exports.validateEmail = exports.timestampValidator = exports.auditValidator = exports.isTimestampValid = exports.validateObject = exports.validate = exports.validateRange = exports.validateValue = exports.validateRegexp = exports.validateArray = exports.validateObjectValues = exports.validateBoolean = exports.validateNumber = exports.validateString = exports.validateType = exports.validateExists = exports.ValidationException = void 0;
|
|
4
21
|
const exceptions_1 = require("../core/exceptions");
|
|
5
22
|
const tools_1 = require("../utils/tools");
|
|
6
23
|
const object_tools_1 = require("../utils/object-tools");
|
|
7
|
-
const
|
|
24
|
+
const __1 = require("..");
|
|
8
25
|
class ValidationException extends exceptions_1.CustomException {
|
|
9
26
|
constructor(debugMessage, path, input) {
|
|
10
27
|
super(ValidationException, debugMessage);
|
|
@@ -35,30 +52,30 @@ const validateType = (type, mandatory = true) => {
|
|
|
35
52
|
};
|
|
36
53
|
exports.validateType = validateType;
|
|
37
54
|
const validateString = (mandatory = true) => {
|
|
38
|
-
return exports.validateType('string', mandatory);
|
|
55
|
+
return (0, exports.validateType)('string', mandatory);
|
|
39
56
|
};
|
|
40
57
|
exports.validateString = validateString;
|
|
41
58
|
const validateNumber = (mandatory = true) => {
|
|
42
|
-
return exports.validateType('number', mandatory);
|
|
59
|
+
return (0, exports.validateType)('number', mandatory);
|
|
43
60
|
};
|
|
44
61
|
exports.validateNumber = validateNumber;
|
|
45
62
|
const validateBoolean = (mandatory = true) => {
|
|
46
|
-
return exports.validateType('boolean', mandatory);
|
|
63
|
+
return (0, exports.validateType)('boolean', mandatory);
|
|
47
64
|
};
|
|
48
65
|
exports.validateBoolean = validateBoolean;
|
|
49
66
|
const validateObjectValues = (validator, mandatory = true) => (path, input) => {
|
|
50
67
|
assertMandatory(mandatory, path, input);
|
|
51
68
|
if (!input)
|
|
52
69
|
return;
|
|
53
|
-
for (const key of object_tools_1._keys(input)) {
|
|
70
|
+
for (const key of (0, object_tools_1._keys)(input)) {
|
|
54
71
|
const inputValue = input[key];
|
|
55
72
|
if (typeof inputValue === "object") {
|
|
56
|
-
const objectValidator = exports.validateObjectValues(validator, mandatory);
|
|
73
|
+
const objectValidator = (0, exports.validateObjectValues)(validator, mandatory);
|
|
57
74
|
if (!objectValidator)
|
|
58
75
|
return;
|
|
59
76
|
return objectValidator(`${path}/${key}`, inputValue);
|
|
60
77
|
}
|
|
61
|
-
exports.validate(inputValue, validator, `${path}/${key}`);
|
|
78
|
+
(0, exports.validate)(inputValue, validator, `${path}/${key}`);
|
|
62
79
|
}
|
|
63
80
|
};
|
|
64
81
|
exports.validateObjectValues = validateObjectValues;
|
|
@@ -68,7 +85,7 @@ const validateArray = (validator, mandatory = true) => (path, input) => {
|
|
|
68
85
|
return;
|
|
69
86
|
const _input = input;
|
|
70
87
|
for (let i = 0; i < _input.length; i++) {
|
|
71
|
-
exports.validate(_input[i], validator, `${path}/${i}`);
|
|
88
|
+
(0, exports.validate)(_input[i], validator, `${path}/${i}`);
|
|
72
89
|
}
|
|
73
90
|
};
|
|
74
91
|
exports.validateArray = validateArray;
|
|
@@ -90,7 +107,7 @@ const validateValue = (values, mandatory = true) => {
|
|
|
90
107
|
return;
|
|
91
108
|
if (values.includes(input))
|
|
92
109
|
return;
|
|
93
|
-
throw new ValidationException(`Input is not valid:\n input: ${input}\n options: ${tools_1.__stringify(values)}\n`, path, input);
|
|
110
|
+
throw new ValidationException(`Input is not valid:\n input: ${input}\n options: ${(0, tools_1.__stringify)(values)}\n`, path, input);
|
|
94
111
|
};
|
|
95
112
|
};
|
|
96
113
|
exports.validateValue = validateValue;
|
|
@@ -103,7 +120,7 @@ const validateRange = (ranges, mandatory = true) => {
|
|
|
103
120
|
if (range[0] <= input && input <= range[1])
|
|
104
121
|
return;
|
|
105
122
|
}
|
|
106
|
-
throw new ValidationException(`Input is not valid:\n input: ${input}\n regexp: ${tools_1.__stringify(ranges)}\n`, path, input);
|
|
123
|
+
throw new ValidationException(`Input is not valid:\n input: ${input}\n regexp: ${(0, tools_1.__stringify)(ranges)}\n`, path, input);
|
|
107
124
|
};
|
|
108
125
|
};
|
|
109
126
|
exports.validateRange = validateRange;
|
|
@@ -120,41 +137,38 @@ const validate = (instance, _validator, path = "") => {
|
|
|
120
137
|
if (!instance && _validator)
|
|
121
138
|
throw new exceptions_1.BadImplementationException(`Unexpect object at '${path}'\nif you want to ignore the validation of this object,\n add the following to your validator:\n {\n ...\n ${path}: undefined\n ...\n}\n`);
|
|
122
139
|
const __validator = _validator;
|
|
123
|
-
exports.validateObject(__validator, instance, path);
|
|
140
|
+
(0, exports.validateObject)(__validator, instance, path);
|
|
124
141
|
}
|
|
125
142
|
};
|
|
126
143
|
exports.validate = validate;
|
|
127
144
|
const validateObject = (__validator, instance, path = "") => {
|
|
128
|
-
const validatorKeys = object_tools_1._keys(__validator);
|
|
145
|
+
const validatorKeys = (0, object_tools_1._keys)(__validator);
|
|
129
146
|
const instanceKeys = Object.keys(instance);
|
|
130
147
|
for (const key of instanceKeys) {
|
|
131
148
|
// @ts-ignore
|
|
132
149
|
if (!validatorKeys.includes(key))
|
|
133
|
-
throw new exceptions_1.BadImplementationException(`Unexpect key '${path}${key}'\nif you want to ignore the validation of this property,\n add the following to your validator:\n {\n ...\n ${key}: undefined\n ...\n}\
|
|
150
|
+
throw new exceptions_1.BadImplementationException(`Unexpect key '${path}${key}'\nif you want to ignore the validation of this property,\n add the following to your validator:\n {\n ...\n ${key}: undefined\n ...\n}\nAvailable keys are ${validatorKeys.join()}`);
|
|
134
151
|
}
|
|
135
152
|
for (const key of validatorKeys) {
|
|
136
153
|
const value = instance[key];
|
|
137
154
|
const validator = __validator[key];
|
|
138
|
-
exports.validate(value, validator, `${path}/${key}`);
|
|
155
|
+
(0, exports.validate)(value, validator, `${path}/${key}`);
|
|
139
156
|
}
|
|
140
157
|
};
|
|
141
158
|
exports.validateObject = validateObject;
|
|
142
|
-
const isTimestampValid = (time, range = {
|
|
143
|
-
min: date_time_tools_1.currentTimeMillies() - 1000 * date_time_tools_1.Day,
|
|
144
|
-
max: date_time_tools_1.currentTimeMillies() + 1000 * date_time_tools_1.Day
|
|
145
|
-
}) => {
|
|
159
|
+
const isTimestampValid = (time, range = { min: (0, __1.currentTimeMillies)() - 1000 * __1.Day, max: (0, __1.currentTimeMillies)() + 1000 * __1.Day }) => {
|
|
146
160
|
return time >= range.min && time <= range.max;
|
|
147
161
|
};
|
|
148
162
|
exports.isTimestampValid = isTimestampValid;
|
|
149
163
|
const auditValidator = (range) => (_path, audit) => {
|
|
150
164
|
var _a;
|
|
151
|
-
exports.timestampValidator(range)(_path, (_a = audit === null || audit === void 0 ? void 0 : audit.auditAt) === null || _a === void 0 ? void 0 : _a.timestamp);
|
|
165
|
+
(0, exports.timestampValidator)(range)(_path, (_a = audit === null || audit === void 0 ? void 0 : audit.auditAt) === null || _a === void 0 ? void 0 : _a.timestamp);
|
|
152
166
|
};
|
|
153
167
|
exports.auditValidator = auditValidator;
|
|
154
168
|
const timestampValidator = (range) => (_path, timestamp) => {
|
|
155
|
-
if (!timestamp || !exports.isTimestampValid(timestamp, range))
|
|
169
|
+
if (!timestamp || !(0, exports.isTimestampValid)(timestamp, range))
|
|
156
170
|
throw new ValidationException('Time is not proper', _path, timestamp);
|
|
157
171
|
};
|
|
158
172
|
exports.timestampValidator = timestampValidator;
|
|
159
|
-
exports.validateEmail = exports.validateRegexp(/[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?/);
|
|
173
|
+
exports.validateEmail = (0, exports.validateRegexp)(/[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?/);
|
|
160
174
|
//# sourceMappingURL=validator.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validator.js","sourceRoot":"","sources":["../../src/main/validator/validator.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"validator.js","sourceRoot":"","sources":["../../src/main/validator/validator.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
declare type FunctionKeys<T> = {
|
|
2
|
-
[K in keyof T]: T[K] extends Function ? K : never;
|
|
3
|
-
}[keyof T];
|
|
4
|
-
declare class Dispatcher<T extends object, K extends FunctionKeys<T>, P = Parameters<T[K]>> {
|
|
5
|
-
protected readonly method: K;
|
|
6
|
-
constructor(method: K);
|
|
7
|
-
call1(obj: T, ...p: [P]): void;
|
|
8
|
-
call2(obj: T, p: P): void;
|
|
9
|
-
}
|
|
10
|
-
interface TestInterface {
|
|
11
|
-
methodToCall: (str: string, num: number) => void;
|
|
12
|
-
}
|
|
13
|
-
declare class TestClass implements TestInterface {
|
|
14
|
-
methodToCall(str: string, num: number): void;
|
|
15
|
-
}
|
|
16
|
-
declare const instance: TestClass;
|
|
17
|
-
declare const dispatcher: Dispatcher<TestInterface, "methodToCall", [str: string, num: number]>;
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
class Dispatcher {
|
|
3
|
-
constructor(method) {
|
|
4
|
-
this.method = method;
|
|
5
|
-
}
|
|
6
|
-
call1(obj, ...p) {
|
|
7
|
-
// here it passes the first argument as an array with disregard to the types
|
|
8
|
-
(obj[this.method])(p);
|
|
9
|
-
}
|
|
10
|
-
call2(obj, p) {
|
|
11
|
-
// here compilation error: type 'P' is not an array
|
|
12
|
-
// but if I ts ignore, it passes as expected
|
|
13
|
-
(obj[this.method])(...[p]);
|
|
14
|
-
}
|
|
15
|
-
}
|
|
16
|
-
class TestClass {
|
|
17
|
-
methodToCall(str, num) {
|
|
18
|
-
console.log({ str, num });
|
|
19
|
-
}
|
|
20
|
-
;
|
|
21
|
-
}
|
|
22
|
-
const instance = new TestClass();
|
|
23
|
-
const dispatcher = new Dispatcher("methodToCall");
|
|
24
|
-
dispatcher.call1(instance, ["string", 42]);
|
|
25
|
-
// dispatcher.call1(instance, "string", 42);
|
|
26
|
-
// dispatcher.call2(instance, "string", 42);
|
|
27
|
-
//# sourceMappingURL=array-params.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"array-params.js","sourceRoot":"","sources":["../../src/main/ts-generics/array-params.ts"],"names":[],"mappings":";AAGA,MAAM,UAAU;IAIf,YAAY,MAAS;QACpB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACtB,CAAC;IAEM,KAAK,CAAC,GAAM,EAAE,GAAG,CAAM;QAC7B,4EAA4E;QAC5E,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACvB,CAAC;IAEM,KAAK,CAAC,GAAM,EAAE,CAAI;QACxB,oDAAoD;QACpD,4CAA4C;QAC5C,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IAC5B,CAAC;CACD;AAOD,MAAM,SAAS;IAGd,YAAY,CAAC,GAAW,EAAE,GAAW;QACpC,OAAO,CAAC,GAAG,CAAC,EAAC,GAAG,EAAE,GAAG,EAAC,CAAC,CAAC;IACzB,CAAC;IAAA,CAAC;CACF;AAGD,MAAM,QAAQ,GAAG,IAAI,SAAS,EAAE,CAAC;AAEjC,MAAM,UAAU,GAAG,IAAI,UAAU,CAAgC,cAAc,CAAC,CAAC;AAEjF,UAAU,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAC;AAC3C,4CAA4C;AAC5C,4CAA4C"}
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
declare type A = {
|
|
2
|
-
_id: string;
|
|
3
|
-
};
|
|
4
|
-
declare type B = A & {
|
|
5
|
-
one: string;
|
|
6
|
-
two: string;
|
|
7
|
-
};
|
|
8
|
-
declare type C = Omit<B, "_id">;
|
|
9
|
-
declare const valueWithoutId: C;
|
|
10
|
-
declare const valueWithId: B;
|
|
11
|
-
declare function thisBreaks_butWhy<T extends A, U = Omit<T, "_id">>(_valueWithoutId: U): void;
|
|
12
|
-
declare function thisBreaksTOO_butWhy<T extends A>(_valueWithoutId: Omit<T, "_id">): void;
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
const valueWithoutId = { one: "value-1", two: "value-2" };
|
|
3
|
-
// This works just fine...
|
|
4
|
-
const valueWithId = Object.assign(Object.assign({}, valueWithoutId), { _id: "new-id" });
|
|
5
|
-
console.log(valueWithId);
|
|
6
|
-
function thisBreaks_butWhy(_valueWithoutId) {
|
|
7
|
-
// The following line breaks... Why?
|
|
8
|
-
// @ts-ignore
|
|
9
|
-
const _valueWithId = Object.assign(Object.assign({}, _valueWithoutId), { _id: "new-id" });
|
|
10
|
-
}
|
|
11
|
-
function thisBreaksTOO_butWhy(_valueWithoutId) {
|
|
12
|
-
// The following line breaks... Why?
|
|
13
|
-
// @ts-ignore
|
|
14
|
-
const _valueWithId = Object.assign(Object.assign({}, _valueWithoutId), { _id: "new-id" });
|
|
15
|
-
}
|
|
16
|
-
// @ts-ignore
|
|
17
|
-
thisBreaks_butWhy({ one: "other-1", two: "other-2", three: "asdasd" });
|
|
18
|
-
//# sourceMappingURL=omit-and-join.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"omit-and-join.js","sourceRoot":"","sources":["../../src/main/ts-generics/omit-and-join.ts"],"names":[],"mappings":";AAOA,MAAM,cAAc,GAAM,EAAC,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAC,CAAC;AAE3D,0BAA0B;AAC1B,MAAM,WAAW,mCAAU,cAAc,KAAE,GAAG,EAAE,QAAQ,GAAC,CAAC;AAE1D,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;AAGzB,SAAS,iBAAiB,CAAkC,eAAkB;IAE7E,oCAAoC;IACpC,aAAa;IACb,MAAM,YAAY,mCAAU,eAAe,KAAE,GAAG,EAAE,QAAQ,GAAC,CAAC;AAC7D,CAAC;AAED,SAAS,oBAAoB,CAAc,eAA+B;IAEzE,oCAAoC;IACpC,aAAa;IACb,MAAM,YAAY,mCAAU,eAAe,KAAE,GAAG,EAAE,QAAQ,GAAC,CAAC;AAC7D,CAAC;AAED,aAAa;AACb,iBAAiB,CAAI,EAAC,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,KAAK,EAAE,QAAQ,EAAC,CAAC,CAAA"}
|
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
import { Timestamp } from "./types";
|
|
2
|
-
export declare function createReadableTimestampObject(pattern?: string, timestamp?: number, timezone?: string): Timestamp;
|
|
3
|
-
export declare function formatTimestamp(pattern?: string, timestamp?: number, timezone?: string): string;
|
|
4
|
-
export declare function parseTimeString(timestamp: string, pattern?: string): number;
|
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.parseTimeString = exports.formatTimestamp = exports.createReadableTimestampObject = void 0;
|
|
4
|
-
const moment_1 = require("moment/moment");
|
|
5
|
-
const date_time_tools_1 = require("./date-time-tools");
|
|
6
|
-
function createReadableTimestampObject(pattern = date_time_tools_1.Format_HHmmss_DDMMYYYY, timestamp = date_time_tools_1.currentTimeMillies(), timezone) {
|
|
7
|
-
const timeObj = {
|
|
8
|
-
timestamp: timestamp,
|
|
9
|
-
pretty: formatTimestamp(pattern, timestamp)
|
|
10
|
-
};
|
|
11
|
-
if (timezone)
|
|
12
|
-
timeObj.timezone = timezone;
|
|
13
|
-
return timeObj;
|
|
14
|
-
}
|
|
15
|
-
exports.createReadableTimestampObject = createReadableTimestampObject;
|
|
16
|
-
function formatTimestamp(pattern = date_time_tools_1.Format_HHmmss_DDMMYYYY, timestamp = date_time_tools_1.currentTimeMillies(), timezone) {
|
|
17
|
-
const m = moment_1.utc(timestamp);
|
|
18
|
-
if (timezone) {
|
|
19
|
-
m.utcOffset(timezone);
|
|
20
|
-
}
|
|
21
|
-
return m.format(pattern);
|
|
22
|
-
}
|
|
23
|
-
exports.formatTimestamp = formatTimestamp;
|
|
24
|
-
function parseTimeString(timestamp, pattern = date_time_tools_1.Format_HHmmss_DDMMYYYY) {
|
|
25
|
-
return moment_1.utc(timestamp, pattern).valueOf();
|
|
26
|
-
}
|
|
27
|
-
exports.parseTimeString = parseTimeString;
|
|
28
|
-
//# sourceMappingURL=date-manipulation-tools.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"date-manipulation-tools.js","sourceRoot":"","sources":["../../src/main/utils/date-manipulation-tools.ts"],"names":[],"mappings":";;;AACA,0CAAkC;AAClC,uDAA6E;AAE7E,SAAgB,6BAA6B,CAAC,UAAkB,wCAAsB,EAAE,YAAoB,oCAAkB,EAAE,EAAE,QAAiB;IAE/I,MAAM,OAAO,GAAc;QACvB,SAAS,EAAE,SAAS;QACpB,MAAM,EAAE,eAAe,CAAC,OAAO,EAAE,SAAS,CAAC;KAC9C,CAAC;IAEF,IAAI,QAAQ;QACR,OAAO,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAEhC,OAAO,OAAO,CAAC;AACnB,CAAC;AAXD,sEAWC;AAED,SAAgB,eAAe,CAAC,UAAkB,wCAAsB,EAAE,YAAoB,oCAAkB,EAAE,EAAE,QAAiB;IACjI,MAAM,CAAC,GAAG,YAAG,CAAC,SAAS,CAAC,CAAC;IACzB,IAAI,QAAQ,EAAE;QACV,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;KACzB;IACD,OAAO,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;AAC7B,CAAC;AAND,0CAMC;AAED,SAAgB,eAAe,CAAC,SAAiB,EAAE,UAAkB,wCAAsB;IACvF,OAAO,YAAG,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC,OAAO,EAAE,CAAC;AAC7C,CAAC;AAFD,0CAEC"}
|