ngx-lift 1.10.2 → 19.0.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/README.md +5 -1
- package/fesm2022/ngx-lift.mjs +738 -194
- package/fesm2022/ngx-lift.mjs.map +1 -1
- package/index.d.ts +1638 -3
- package/package.json +6 -6
- package/esm2022/lib/const.mjs +0 -10
- package/esm2022/lib/models/async-state.model.mjs +0 -2
- package/esm2022/lib/models/index.mjs +0 -6
- package/esm2022/lib/models/kubernetes-list.model.mjs +0 -2
- package/esm2022/lib/models/kubernetes-object-condition.model.mjs +0 -2
- package/esm2022/lib/models/kubernetes-object-meta.model.mjs +0 -2
- package/esm2022/lib/models/kubernetes-object.model.mjs +0 -2
- package/esm2022/lib/operators/combine-latest-eager.operator.mjs +0 -48
- package/esm2022/lib/operators/create-async-state.operator.mjs +0 -61
- package/esm2022/lib/operators/distinct-on-change.operator.mjs +0 -80
- package/esm2022/lib/operators/index.mjs +0 -9
- package/esm2022/lib/operators/kubernetes-pagination.operator.mjs +0 -71
- package/esm2022/lib/operators/logger.operator.mjs +0 -21
- package/esm2022/lib/operators/poll.operator.mjs +0 -39
- package/esm2022/lib/operators/start-with-tap.operator.mjs +0 -15
- package/esm2022/lib/operators/switch-map-with-async-state.operator.mjs +0 -33
- package/esm2022/lib/pipes/array-join.pipe.mjs +0 -21
- package/esm2022/lib/pipes/byte-converter.pipe.mjs +0 -150
- package/esm2022/lib/pipes/index.mjs +0 -6
- package/esm2022/lib/pipes/is-https.pipe.mjs +0 -18
- package/esm2022/lib/pipes/mask.pipe.mjs +0 -36
- package/esm2022/lib/pipes/range.pipe.mjs +0 -19
- package/esm2022/lib/signals/combine-from.mjs +0 -81
- package/esm2022/lib/signals/computed-async.mjs +0 -63
- package/esm2022/lib/signals/create-trigger.mjs +0 -11
- package/esm2022/lib/signals/index.mjs +0 -7
- package/esm2022/lib/signals/inject-params.mjs +0 -35
- package/esm2022/lib/signals/inject-query-params.mjs +0 -53
- package/esm2022/lib/signals/merge-from.mjs +0 -71
- package/esm2022/lib/utils/difference-in-days.util.mjs +0 -25
- package/esm2022/lib/utils/form.util.mjs +0 -56
- package/esm2022/lib/utils/idle-detection/idle-detection.config.mjs +0 -7
- package/esm2022/lib/utils/idle-detection/idle-detection.module.mjs +0 -25
- package/esm2022/lib/utils/idle-detection/idle-detection.service.mjs +0 -190
- package/esm2022/lib/utils/idle-detection/index.mjs +0 -4
- package/esm2022/lib/utils/index.mjs +0 -10
- package/esm2022/lib/utils/internal.util.mjs +0 -13
- package/esm2022/lib/utils/is-empty.util.mjs +0 -49
- package/esm2022/lib/utils/is-equal.util.mjs +0 -24
- package/esm2022/lib/utils/is-promise.util.mjs +0 -5
- package/esm2022/lib/utils/omit-by.util.mjs +0 -12
- package/esm2022/lib/utils/pick-by.util.mjs +0 -16
- package/esm2022/lib/utils/range.util.mjs +0 -28
- package/esm2022/lib/utils/url.util.mjs +0 -34
- package/esm2022/lib/validators/date-range.validator.mjs +0 -58
- package/esm2022/lib/validators/index.mjs +0 -5
- package/esm2022/lib/validators/intersection.validator.mjs +0 -34
- package/esm2022/lib/validators/unique.validator.mjs +0 -64
- package/esm2022/lib/validators/url.validator.mjs +0 -14
- package/esm2022/ngx-lift.mjs +0 -5
- package/esm2022/public-api.mjs +0 -10
- package/lib/const.d.ts +0 -5
- package/lib/models/async-state.model.d.ts +0 -22
- package/lib/models/index.d.ts +0 -5
- package/lib/models/kubernetes-list.model.d.ts +0 -10
- package/lib/models/kubernetes-object-condition.model.d.ts +0 -28
- package/lib/models/kubernetes-object-meta.model.d.ts +0 -38
- package/lib/models/kubernetes-object.model.d.ts +0 -8
- package/lib/operators/combine-latest-eager.operator.d.ts +0 -7
- package/lib/operators/create-async-state.operator.d.ts +0 -64
- package/lib/operators/distinct-on-change.operator.d.ts +0 -55
- package/lib/operators/index.d.ts +0 -8
- package/lib/operators/kubernetes-pagination.operator.d.ts +0 -30
- package/lib/operators/logger.operator.d.ts +0 -11
- package/lib/operators/poll.operator.d.ts +0 -39
- package/lib/operators/start-with-tap.operator.d.ts +0 -10
- package/lib/operators/switch-map-with-async-state.operator.d.ts +0 -31
- package/lib/pipes/array-join.pipe.d.ts +0 -7
- package/lib/pipes/byte-converter.pipe.d.ts +0 -40
- package/lib/pipes/index.d.ts +0 -5
- package/lib/pipes/is-https.pipe.d.ts +0 -7
- package/lib/pipes/mask.pipe.d.ts +0 -19
- package/lib/pipes/range.pipe.d.ts +0 -10
- package/lib/signals/combine-from.d.ts +0 -25
- package/lib/signals/computed-async.d.ts +0 -29
- package/lib/signals/create-trigger.d.ts +0 -4
- package/lib/signals/index.d.ts +0 -6
- package/lib/signals/inject-params.d.ts +0 -63
- package/lib/signals/inject-query-params.d.ts +0 -71
- package/lib/signals/merge-from.d.ts +0 -13
- package/lib/utils/difference-in-days.util.d.ts +0 -19
- package/lib/utils/form.util.d.ts +0 -18
- package/lib/utils/idle-detection/idle-detection.config.d.ts +0 -5
- package/lib/utils/idle-detection/idle-detection.module.d.ts +0 -13
- package/lib/utils/idle-detection/idle-detection.service.d.ts +0 -119
- package/lib/utils/idle-detection/index.d.ts +0 -3
- package/lib/utils/index.d.ts +0 -9
- package/lib/utils/internal.util.d.ts +0 -4
- package/lib/utils/is-empty.util.d.ts +0 -10
- package/lib/utils/is-equal.util.d.ts +0 -7
- package/lib/utils/is-promise.util.d.ts +0 -1
- package/lib/utils/omit-by.util.d.ts +0 -7
- package/lib/utils/pick-by.util.d.ts +0 -7
- package/lib/utils/range.util.d.ts +0 -12
- package/lib/utils/url.util.d.ts +0 -24
- package/lib/validators/date-range.validator.d.ts +0 -19
- package/lib/validators/index.d.ts +0 -4
- package/lib/validators/intersection.validator.d.ts +0 -9
- package/lib/validators/unique.validator.d.ts +0 -18
- package/lib/validators/url.validator.d.ts +0 -3
- package/public-api.d.ts +0 -6
|
@@ -1,71 +0,0 @@
|
|
|
1
|
-
import { assertInInjectionContext, isSignal, untracked } from '@angular/core';
|
|
2
|
-
import { toObservable, toSignal } from '@angular/core/rxjs-interop';
|
|
3
|
-
import { distinctUntilChanged, from, identity, isObservable, merge, startWith, } from 'rxjs';
|
|
4
|
-
// No object inputs
|
|
5
|
-
/**
|
|
6
|
-
* merge multiple `Observable` or `Signal` sources into a `Signal` that emits the last value. It's like merge.
|
|
7
|
-
*
|
|
8
|
-
* @param {ObservableSignalInputTuple} sources - Array of `Observable` or `Signal` values
|
|
9
|
-
* @param {OperatorFunction} [operator] - Operator to apply to the merge
|
|
10
|
-
* @param {MergeFromOptions} [options] - Options including `initialValue` and `injector`
|
|
11
|
-
* @returns Signal emitting the latest merge result
|
|
12
|
-
*
|
|
13
|
-
* @example
|
|
14
|
-
* ```ts
|
|
15
|
-
* export class Component {
|
|
16
|
-
* e$ = of(1).pipe(delay(1000));
|
|
17
|
-
* f = signal(2);
|
|
18
|
-
*
|
|
19
|
-
* data = mergeFrom(
|
|
20
|
-
* [this.e$, this.f],
|
|
21
|
-
* pipe(
|
|
22
|
-
* switchMap((res) => of(`${res} is coming~`)),
|
|
23
|
-
* startWith(0),
|
|
24
|
-
* ),
|
|
25
|
-
* );
|
|
26
|
-
* }
|
|
27
|
-
* ```
|
|
28
|
-
*/
|
|
29
|
-
export function mergeFrom(...args) {
|
|
30
|
-
assertInInjectionContext(mergeFrom);
|
|
31
|
-
const [sources, operator = identity, options = {}] = parseArgs(args);
|
|
32
|
-
const normalizedSources = sources.map((source) => {
|
|
33
|
-
if (isSignal(source)) {
|
|
34
|
-
return toObservable(source, { injector: options.injector }).pipe(startWith(untracked(source)));
|
|
35
|
-
}
|
|
36
|
-
if (!isObservable(source)) {
|
|
37
|
-
source = from(source);
|
|
38
|
-
}
|
|
39
|
-
return source.pipe(distinctUntilChanged());
|
|
40
|
-
});
|
|
41
|
-
const merged$ = merge(...normalizedSources).pipe(operator);
|
|
42
|
-
if (options.initialValue !== undefined) {
|
|
43
|
-
return toSignal(merged$, { initialValue: options.initialValue, injector: options.injector });
|
|
44
|
-
}
|
|
45
|
-
return toSignal(merged$, { requireSync: true, injector: options.injector });
|
|
46
|
-
}
|
|
47
|
-
function parseArgs(args) {
|
|
48
|
-
if (!args || args.length < 1) {
|
|
49
|
-
throw new TypeError('mergeFrom needs sources');
|
|
50
|
-
}
|
|
51
|
-
if (args.length === 1) {
|
|
52
|
-
return [args[0], undefined, undefined];
|
|
53
|
-
}
|
|
54
|
-
if (args.length === 2) {
|
|
55
|
-
const hasOperator = typeof args[1] === 'function';
|
|
56
|
-
if (hasOperator) {
|
|
57
|
-
return [
|
|
58
|
-
args[0],
|
|
59
|
-
args[1],
|
|
60
|
-
undefined,
|
|
61
|
-
];
|
|
62
|
-
}
|
|
63
|
-
return [
|
|
64
|
-
args[0],
|
|
65
|
-
undefined,
|
|
66
|
-
args[1],
|
|
67
|
-
];
|
|
68
|
-
}
|
|
69
|
-
return args;
|
|
70
|
-
}
|
|
71
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVyZ2UtZnJvbS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1saWZ0L3NyYy9saWIvc2lnbmFscy9tZXJnZS1mcm9tLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyx3QkFBd0IsRUFBWSxRQUFRLEVBQVUsU0FBUyxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQzlGLE9BQU8sRUFBQyxZQUFZLEVBQUUsUUFBUSxFQUFDLE1BQU0sNEJBQTRCLENBQUM7QUFDbEUsT0FBTyxFQUNMLG9CQUFvQixFQUNwQixJQUFJLEVBQ0osUUFBUSxFQUNSLFlBQVksRUFDWixLQUFLLEVBR0wsU0FBUyxHQUNWLE1BQU0sTUFBTSxDQUFDO0FBeUJkLG1CQUFtQjtBQUVuQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F1Qkc7QUFDSCxNQUFNLFVBQVUsU0FBUyxDQUEyRCxHQUFHLElBQWU7SUFDcEcsd0JBQXdCLENBQUMsU0FBUyxDQUFDLENBQUM7SUFFcEMsTUFBTSxDQUFDLE9BQU8sRUFBRSxRQUFRLEdBQUcsUUFBUSxFQUFFLE9BQU8sR0FBRyxFQUFFLENBQUMsR0FBRyxTQUFTLENBQWdCLElBQUksQ0FBQyxDQUFDO0lBRXBGLE1BQU0saUJBQWlCLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFO1FBQy9DLElBQUksUUFBUSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7WUFDckIsT0FBTyxZQUFZLENBQUMsTUFBTSxFQUFFLEVBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxRQUFRLEVBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMvRixDQUFDO1FBRUQsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO1lBQzFCLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDeEIsQ0FBQztRQUVELE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDLENBQUM7SUFDN0MsQ0FBQyxDQUFDLENBQUM7SUFFSCxNQUFNLE9BQU8sR0FBRyxLQUFLLENBQUMsR0FBRyxpQkFBaUIsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFtRCxDQUFDLENBQUM7SUFFdEcsSUFBSSxPQUFPLENBQUMsWUFBWSxLQUFLLFNBQVMsRUFBRSxDQUFDO1FBQ3ZDLE9BQU8sUUFBUSxDQUFDLE9BQU8sRUFBRSxFQUFDLFlBQVksRUFBRSxPQUFPLENBQUMsWUFBc0IsRUFBRSxRQUFRLEVBQUUsT0FBTyxDQUFDLFFBQVEsRUFBQyxDQUFDLENBQUM7SUFDdkcsQ0FBQztJQUNELE9BQU8sUUFBUSxDQUFDLE9BQU8sRUFBRSxFQUFDLFdBQVcsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLE9BQU8sQ0FBQyxRQUFRLEVBQUMsQ0FBQyxDQUFDO0FBQzVFLENBQUM7QUFFRCxTQUFTLFNBQVMsQ0FBMkQsSUFBZTtJQUMxRixJQUFJLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7UUFDN0IsTUFBTSxJQUFJLFNBQVMsQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO0lBQ2pELENBQUM7SUFFRCxJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDdEIsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQW9ELEVBQUUsU0FBUyxFQUFFLFNBQVMsQ0FBVSxDQUFDO0lBQ3JHLENBQUM7SUFFRCxJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDdEIsTUFBTSxXQUFXLEdBQUcsT0FBTyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssVUFBVSxDQUFDO1FBRWxELElBQUksV0FBVyxFQUFFLENBQUM7WUFDaEIsT0FBTztnQkFDTCxJQUFJLENBQUMsQ0FBQyxDQUFvRDtnQkFDMUQsSUFBSSxDQUFDLENBQUMsQ0FBNEM7Z0JBQ2xELFNBQVM7YUFDRCxDQUFDO1FBQ2IsQ0FBQztRQUVELE9BQU87WUFDTCxJQUFJLENBQUMsQ0FBQyxDQUFvRDtZQUMxRCxTQUFTO1lBQ1QsSUFBSSxDQUFDLENBQUMsQ0FBNkI7U0FDM0IsQ0FBQztJQUNiLENBQUM7SUFFRCxPQUFPLElBSU4sQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge2Fzc2VydEluSW5qZWN0aW9uQ29udGV4dCwgSW5qZWN0b3IsIGlzU2lnbmFsLCBTaWduYWwsIHVudHJhY2tlZH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge3RvT2JzZXJ2YWJsZSwgdG9TaWduYWx9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcbmltcG9ydCB7XG4gIGRpc3RpbmN0VW50aWxDaGFuZ2VkLFxuICBmcm9tLFxuICBpZGVudGl0eSxcbiAgaXNPYnNlcnZhYmxlLFxuICBtZXJnZSxcbiAgT2JzZXJ2YWJsZUlucHV0LFxuICBPcGVyYXRvckZ1bmN0aW9uLFxuICBzdGFydFdpdGgsXG59IGZyb20gJ3J4anMnO1xuXG50eXBlIE9ic2VydmFibGVTaWduYWxJbnB1dDxUPiA9IE9ic2VydmFibGVJbnB1dDxUPiB8IFNpZ25hbDxUPjtcblxudHlwZSBPYnNlcnZhYmxlU2lnbmFsSW5wdXRUdXBsZTxUPiA9IHtcbiAgW0sgaW4ga2V5b2YgVF06IE9ic2VydmFibGVTaWduYWxJbnB1dDxUW0tdPjtcbn07XG5cbi8vIHBpY2sgZnJvbSBUb1NpZ25hbE9wdGlvbnNcbmV4cG9ydCB0eXBlIE1lcmdlRnJvbU9wdGlvbnM8VD4gPSB7XG4gIHJlYWRvbmx5IGluamVjdG9yPzogSW5qZWN0b3I7XG4gIHJlYWRvbmx5IGluaXRpYWxWYWx1ZT86IFQgfCBudWxsO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIG1lcmdlRnJvbTxJbnB1dCBleHRlbmRzIHJlYWRvbmx5IHVua25vd25bXSwgT3V0cHV0ID0gSW5wdXRbbnVtYmVyXT4oXG4gIHNvdXJjZXM6IHJlYWRvbmx5IFsuLi5PYnNlcnZhYmxlU2lnbmFsSW5wdXRUdXBsZTxJbnB1dD5dLFxuICBvcGVyYXRvcj86IE9wZXJhdG9yRnVuY3Rpb248SW5wdXRbbnVtYmVyXSwgT3V0cHV0PixcbiAgb3B0aW9ucz86IE1lcmdlRnJvbU9wdGlvbnM8T3V0cHV0Pixcbik6IFNpZ25hbDxPdXRwdXQ+O1xuXG5leHBvcnQgZnVuY3Rpb24gbWVyZ2VGcm9tPElucHV0IGV4dGVuZHMgcmVhZG9ubHkgdW5rbm93bltdLCBPdXRwdXQgPSBJbnB1dFtudW1iZXJdPihcbiAgc291cmNlczogcmVhZG9ubHkgWy4uLk9ic2VydmFibGVTaWduYWxJbnB1dFR1cGxlPElucHV0Pl0sXG4gIG9wdGlvbnM/OiBNZXJnZUZyb21PcHRpb25zPE91dHB1dD4sXG4pOiBTaWduYWw8T3V0cHV0PjtcblxuLy8gTm8gb2JqZWN0IGlucHV0c1xuXG4vKipcbiAqIG1lcmdlIG11bHRpcGxlIGBPYnNlcnZhYmxlYCBvciBgU2lnbmFsYCBzb3VyY2VzIGludG8gYSBgU2lnbmFsYCB0aGF0IGVtaXRzIHRoZSBsYXN0IHZhbHVlLiBJdCdzIGxpa2UgbWVyZ2UuXG4gKlxuICogQHBhcmFtIHtPYnNlcnZhYmxlU2lnbmFsSW5wdXRUdXBsZX0gc291cmNlcyAtIEFycmF5IG9mIGBPYnNlcnZhYmxlYCBvciBgU2lnbmFsYCB2YWx1ZXNcbiAqIEBwYXJhbSB7T3BlcmF0b3JGdW5jdGlvbn0gW29wZXJhdG9yXSAtIE9wZXJhdG9yIHRvIGFwcGx5IHRvIHRoZSBtZXJnZVxuICogQHBhcmFtIHtNZXJnZUZyb21PcHRpb25zfSBbb3B0aW9uc10gLSBPcHRpb25zIGluY2x1ZGluZyBgaW5pdGlhbFZhbHVlYCBhbmQgYGluamVjdG9yYFxuICogQHJldHVybnMgU2lnbmFsIGVtaXR0aW5nIHRoZSBsYXRlc3QgbWVyZ2UgcmVzdWx0XG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHRzXG4gKiBleHBvcnQgY2xhc3MgQ29tcG9uZW50IHtcbiAqICAgZSQgPSBvZigxKS5waXBlKGRlbGF5KDEwMDApKTtcbiAqICAgZiA9IHNpZ25hbCgyKTtcbiAqXG4gKiAgIGRhdGEgPSBtZXJnZUZyb20oXG4gKiAgICAgW3RoaXMuZSQsIHRoaXMuZl0sXG4gKiAgICAgcGlwZShcbiAqICAgICAgIHN3aXRjaE1hcCgocmVzKSA9PiBvZihgJHtyZXN9IGlzIGNvbWluZ35gKSksXG4gKiAgICAgICBzdGFydFdpdGgoMCksXG4gKiAgICAgKSxcbiAqICAgKTtcbiAqIH1cbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gbWVyZ2VGcm9tPElucHV0IGV4dGVuZHMgcmVhZG9ubHkgdW5rbm93bltdLCBPdXRwdXQgPSBJbnB1dFtudW1iZXJdPiguLi5hcmdzOiB1bmtub3duW10pIHtcbiAgYXNzZXJ0SW5JbmplY3Rpb25Db250ZXh0KG1lcmdlRnJvbSk7XG5cbiAgY29uc3QgW3NvdXJjZXMsIG9wZXJhdG9yID0gaWRlbnRpdHksIG9wdGlvbnMgPSB7fV0gPSBwYXJzZUFyZ3M8SW5wdXQsIE91dHB1dD4oYXJncyk7XG5cbiAgY29uc3Qgbm9ybWFsaXplZFNvdXJjZXMgPSBzb3VyY2VzLm1hcCgoc291cmNlKSA9PiB7XG4gICAgaWYgKGlzU2lnbmFsKHNvdXJjZSkpIHtcbiAgICAgIHJldHVybiB0b09ic2VydmFibGUoc291cmNlLCB7aW5qZWN0b3I6IG9wdGlvbnMuaW5qZWN0b3J9KS5waXBlKHN0YXJ0V2l0aCh1bnRyYWNrZWQoc291cmNlKSkpO1xuICAgIH1cblxuICAgIGlmICghaXNPYnNlcnZhYmxlKHNvdXJjZSkpIHtcbiAgICAgIHNvdXJjZSA9IGZyb20oc291cmNlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gc291cmNlLnBpcGUoZGlzdGluY3RVbnRpbENoYW5nZWQoKSk7XG4gIH0pO1xuXG4gIGNvbnN0IG1lcmdlZCQgPSBtZXJnZSguLi5ub3JtYWxpemVkU291cmNlcykucGlwZShvcGVyYXRvciBhcyBPcGVyYXRvckZ1bmN0aW9uPElucHV0W251bWJlcl0sIE91dHB1dD4pO1xuXG4gIGlmIChvcHRpb25zLmluaXRpYWxWYWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIHRvU2lnbmFsKG1lcmdlZCQsIHtpbml0aWFsVmFsdWU6IG9wdGlvbnMuaW5pdGlhbFZhbHVlIGFzIE91dHB1dCwgaW5qZWN0b3I6IG9wdGlvbnMuaW5qZWN0b3J9KTtcbiAgfVxuICByZXR1cm4gdG9TaWduYWwobWVyZ2VkJCwge3JlcXVpcmVTeW5jOiB0cnVlLCBpbmplY3Rvcjogb3B0aW9ucy5pbmplY3Rvcn0pO1xufVxuXG5mdW5jdGlvbiBwYXJzZUFyZ3M8SW5wdXQgZXh0ZW5kcyByZWFkb25seSB1bmtub3duW10sIE91dHB1dCA9IElucHV0W251bWJlcl0+KGFyZ3M6IHVua25vd25bXSkge1xuICBpZiAoIWFyZ3MgfHwgYXJncy5sZW5ndGggPCAxKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignbWVyZ2VGcm9tIG5lZWRzIHNvdXJjZXMnKTtcbiAgfVxuXG4gIGlmIChhcmdzLmxlbmd0aCA9PT0gMSkge1xuICAgIHJldHVybiBbYXJnc1swXSBhcyByZWFkb25seSBbLi4uT2JzZXJ2YWJsZVNpZ25hbElucHV0VHVwbGU8SW5wdXQ+XSwgdW5kZWZpbmVkLCB1bmRlZmluZWRdIGFzIGNvbnN0O1xuICB9XG5cbiAgaWYgKGFyZ3MubGVuZ3RoID09PSAyKSB7XG4gICAgY29uc3QgaGFzT3BlcmF0b3IgPSB0eXBlb2YgYXJnc1sxXSA9PT0gJ2Z1bmN0aW9uJztcblxuICAgIGlmIChoYXNPcGVyYXRvcikge1xuICAgICAgcmV0dXJuIFtcbiAgICAgICAgYXJnc1swXSBhcyByZWFkb25seSBbLi4uT2JzZXJ2YWJsZVNpZ25hbElucHV0VHVwbGU8SW5wdXQ+XSxcbiAgICAgICAgYXJnc1sxXSBhcyBPcGVyYXRvckZ1bmN0aW9uPElucHV0W251bWJlcl0sIE91dHB1dD4sXG4gICAgICAgIHVuZGVmaW5lZCxcbiAgICAgIF0gYXMgY29uc3Q7XG4gICAgfVxuXG4gICAgcmV0dXJuIFtcbiAgICAgIGFyZ3NbMF0gYXMgcmVhZG9ubHkgWy4uLk9ic2VydmFibGVTaWduYWxJbnB1dFR1cGxlPElucHV0Pl0sXG4gICAgICB1bmRlZmluZWQsXG4gICAgICBhcmdzWzFdIGFzIE1lcmdlRnJvbU9wdGlvbnM8T3V0cHV0PixcbiAgICBdIGFzIGNvbnN0O1xuICB9XG5cbiAgcmV0dXJuIGFyZ3MgYXMgdW5rbm93biBhcyBbXG4gICAgcmVhZG9ubHkgWy4uLk9ic2VydmFibGVTaWduYWxJbnB1dFR1cGxlPElucHV0Pl0sXG4gICAgT3BlcmF0b3JGdW5jdGlvbjxJbnB1dFtudW1iZXJdLCBPdXRwdXQ+LFxuICAgIE1lcmdlRnJvbU9wdGlvbnM8T3V0cHV0PixcbiAgXTtcbn1cbiJdfQ==
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Calculates the difference in whole days between two dates.
|
|
3
|
-
*
|
|
4
|
-
* @param {Date | number | string} dateLeft - The date from which the difference is measured (the reference date).
|
|
5
|
-
* Can be a Date object, a number representing milliseconds since the Unix epoch,
|
|
6
|
-
* or a string in a format parseable by the Date constructor.
|
|
7
|
-
* @param {Date | number | string} dateRight - The date to be compared against the reference date.
|
|
8
|
-
* Can be a Date object, a number representing milliseconds since the Unix epoch,
|
|
9
|
-
* or a string in a format parseable by the Date constructor.
|
|
10
|
-
* @returns {number} The number of whole days between the reference date (dateLeft) and the compared date (dateRight).
|
|
11
|
-
*
|
|
12
|
-
* @example
|
|
13
|
-
* // How many whole days are between '2022-09-08' and '2023-09-18'?
|
|
14
|
-
* const result = differenceInDays('2022-09-08', new Date('2023-09-18'));
|
|
15
|
-
*
|
|
16
|
-
* The result is 0 if the diff is within a full day
|
|
17
|
-
* const result = differenceInDays('2022-09-08T00:00:00', new Date('2023-09-08T14:00:00'));
|
|
18
|
-
*/
|
|
19
|
-
export function differenceInDays(dateLeft, dateRight) {
|
|
20
|
-
const _dateLeft = new Date(dateLeft);
|
|
21
|
-
const _dateRight = new Date(dateRight);
|
|
22
|
-
const difference = (_dateLeft.getTime() - _dateRight.getTime()) / (1000 * 60 * 60 * 24);
|
|
23
|
-
return Math.trunc(difference);
|
|
24
|
-
}
|
|
25
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlmZmVyZW5jZS1pbi1kYXlzLnV0aWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtbGlmdC9zcmMvbGliL3V0aWxzL2RpZmZlcmVuY2UtaW4tZGF5cy51dGlsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7OztHQWlCRztBQUNILE1BQU0sVUFBVSxnQkFBZ0IsQ0FBQyxRQUFnQyxFQUFFLFNBQWlDO0lBQ2xHLE1BQU0sU0FBUyxHQUFHLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ3JDLE1BQU0sVUFBVSxHQUFHLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBRXZDLE1BQU0sVUFBVSxHQUFHLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRSxHQUFHLFVBQVUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7SUFFeEYsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0FBQ2hDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENhbGN1bGF0ZXMgdGhlIGRpZmZlcmVuY2UgaW4gd2hvbGUgZGF5cyBiZXR3ZWVuIHR3byBkYXRlcy5cbiAqXG4gKiBAcGFyYW0ge0RhdGUgfCBudW1iZXIgfCBzdHJpbmd9IGRhdGVMZWZ0IC0gVGhlIGRhdGUgZnJvbSB3aGljaCB0aGUgZGlmZmVyZW5jZSBpcyBtZWFzdXJlZCAodGhlIHJlZmVyZW5jZSBkYXRlKS5cbiAqICAgQ2FuIGJlIGEgRGF0ZSBvYmplY3QsIGEgbnVtYmVyIHJlcHJlc2VudGluZyBtaWxsaXNlY29uZHMgc2luY2UgdGhlIFVuaXggZXBvY2gsXG4gKiAgIG9yIGEgc3RyaW5nIGluIGEgZm9ybWF0IHBhcnNlYWJsZSBieSB0aGUgRGF0ZSBjb25zdHJ1Y3Rvci5cbiAqIEBwYXJhbSB7RGF0ZSB8IG51bWJlciB8IHN0cmluZ30gZGF0ZVJpZ2h0IC0gVGhlIGRhdGUgdG8gYmUgY29tcGFyZWQgYWdhaW5zdCB0aGUgcmVmZXJlbmNlIGRhdGUuXG4gKiAgIENhbiBiZSBhIERhdGUgb2JqZWN0LCBhIG51bWJlciByZXByZXNlbnRpbmcgbWlsbGlzZWNvbmRzIHNpbmNlIHRoZSBVbml4IGVwb2NoLFxuICogICBvciBhIHN0cmluZyBpbiBhIGZvcm1hdCBwYXJzZWFibGUgYnkgdGhlIERhdGUgY29uc3RydWN0b3IuXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBUaGUgbnVtYmVyIG9mIHdob2xlIGRheXMgYmV0d2VlbiB0aGUgcmVmZXJlbmNlIGRhdGUgKGRhdGVMZWZ0KSBhbmQgdGhlIGNvbXBhcmVkIGRhdGUgKGRhdGVSaWdodCkuXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEhvdyBtYW55IHdob2xlIGRheXMgYXJlIGJldHdlZW4gJzIwMjItMDktMDgnIGFuZCAnMjAyMy0wOS0xOCc/XG4gKiBjb25zdCByZXN1bHQgPSBkaWZmZXJlbmNlSW5EYXlzKCcyMDIyLTA5LTA4JywgbmV3IERhdGUoJzIwMjMtMDktMTgnKSk7XG4gKlxuICogVGhlIHJlc3VsdCBpcyAwIGlmIHRoZSBkaWZmIGlzIHdpdGhpbiBhIGZ1bGwgZGF5XG4gKiBjb25zdCByZXN1bHQgPSBkaWZmZXJlbmNlSW5EYXlzKCcyMDIyLTA5LTA4VDAwOjAwOjAwJywgbmV3IERhdGUoJzIwMjMtMDktMDhUMTQ6MDA6MDAnKSk7XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkaWZmZXJlbmNlSW5EYXlzKGRhdGVMZWZ0OiBEYXRlIHwgbnVtYmVyIHwgc3RyaW5nLCBkYXRlUmlnaHQ6IERhdGUgfCBudW1iZXIgfCBzdHJpbmcpIHtcbiAgY29uc3QgX2RhdGVMZWZ0ID0gbmV3IERhdGUoZGF0ZUxlZnQpO1xuICBjb25zdCBfZGF0ZVJpZ2h0ID0gbmV3IERhdGUoZGF0ZVJpZ2h0KTtcblxuICBjb25zdCBkaWZmZXJlbmNlID0gKF9kYXRlTGVmdC5nZXRUaW1lKCkgLSBfZGF0ZVJpZ2h0LmdldFRpbWUoKSkgLyAoMTAwMCAqIDYwICogNjAgKiAyNCk7XG5cbiAgcmV0dXJuIE1hdGgudHJ1bmMoZGlmZmVyZW5jZSk7XG59XG4iXX0=
|
|
@@ -1,56 +0,0 @@
|
|
|
1
|
-
import { Validators } from '@angular/forms';
|
|
2
|
-
import { of } from 'rxjs';
|
|
3
|
-
/**
|
|
4
|
-
* Provides a conditional validator that applies the specified validator functions only if the condition is met.
|
|
5
|
-
*
|
|
6
|
-
* @param condition A function that determines whether the validators should be applied.
|
|
7
|
-
* @param trueValidatorFn The validator function or an array of validator functions to be applied when the condition is true.
|
|
8
|
-
* @param falseValidatorFn Optional. The validator function or an array of validator functions to be applied when the condition is false.
|
|
9
|
-
* @returns A validator function that can be used with Angular Reactive Forms.
|
|
10
|
-
*/
|
|
11
|
-
export function ifValidator(condition, trueValidatorFn, falseValidatorFn) {
|
|
12
|
-
/**
|
|
13
|
-
* @param control The AbstractControl to validate.
|
|
14
|
-
* @returns Validation errors if the condition is met; otherwise, null.
|
|
15
|
-
*/
|
|
16
|
-
return (control) => {
|
|
17
|
-
if (!trueValidatorFn || !condition(control)) {
|
|
18
|
-
return composeValidators(control, falseValidatorFn);
|
|
19
|
-
}
|
|
20
|
-
return composeValidators(control, trueValidatorFn);
|
|
21
|
-
};
|
|
22
|
-
}
|
|
23
|
-
/**
|
|
24
|
-
* Provides a conditional async validator that applies the specified async validator function only if the condition is met.
|
|
25
|
-
*
|
|
26
|
-
* @param condition A function that determines whether the async validator should be applied.
|
|
27
|
-
* @param validatorFn The async validator function to be applied conditionally.
|
|
28
|
-
* @returns An async validator function that can be used with Angular Reactive Forms.
|
|
29
|
-
*/
|
|
30
|
-
export function ifAsyncValidator(condition, validatorFn) {
|
|
31
|
-
/**
|
|
32
|
-
* @param control The AbstractControl to validate asynchronously.
|
|
33
|
-
* @returns An observable that emits validation errors if the condition is met; otherwise, emits null.
|
|
34
|
-
*/
|
|
35
|
-
return (control) => {
|
|
36
|
-
if (!validatorFn || !condition(control)) {
|
|
37
|
-
return of(null);
|
|
38
|
-
}
|
|
39
|
-
return validatorFn(control);
|
|
40
|
-
};
|
|
41
|
-
}
|
|
42
|
-
/**
|
|
43
|
-
* Composes and applies the provided validators to the given AbstractControl.
|
|
44
|
-
*
|
|
45
|
-
* @param control The AbstractControl to validate.
|
|
46
|
-
* @param validatorFn The validator function or an array of validator functions to be applied.
|
|
47
|
-
* @returns Validation errors if the validators are applicable; otherwise, null.
|
|
48
|
-
*/
|
|
49
|
-
function composeValidators(control, validatorFn) {
|
|
50
|
-
if (!validatorFn) {
|
|
51
|
-
return null;
|
|
52
|
-
}
|
|
53
|
-
const validatorFns = Array.isArray(validatorFn) ? validatorFn : [validatorFn];
|
|
54
|
-
return Validators.compose(validatorFns)?.(control) || null;
|
|
55
|
-
}
|
|
56
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS51dGlsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LWxpZnQvc3JjL2xpYi91dGlscy9mb3JtLnV0aWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFpRCxVQUFVLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUMxRixPQUFPLEVBQUMsRUFBRSxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBRXhCOzs7Ozs7O0dBT0c7QUFDSCxNQUFNLFVBQVUsV0FBVyxDQUN6QixTQUFnRCxFQUNoRCxlQUE0QyxFQUM1QyxnQkFBOEM7SUFFOUM7OztPQUdHO0lBQ0gsT0FBTyxDQUFDLE9BQXdCLEVBQXFCLEVBQUU7UUFDckQsSUFBSSxDQUFDLGVBQWUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQzVDLE9BQU8saUJBQWlCLENBQUMsT0FBTyxFQUFFLGdCQUFnQixDQUFDLENBQUM7UUFDdEQsQ0FBQztRQUVELE9BQU8saUJBQWlCLENBQUMsT0FBTyxFQUFFLGVBQWUsQ0FBQyxDQUFDO0lBQ3JELENBQUMsQ0FBQztBQUNKLENBQUM7QUFFRDs7Ozs7O0dBTUc7QUFDSCxNQUFNLFVBQVUsZ0JBQWdCLENBQzlCLFNBQWdELEVBQ2hELFdBQTZCO0lBRTdCOzs7T0FHRztJQUNILE9BQU8sQ0FBQyxPQUF3QixFQUFFLEVBQUU7UUFDbEMsSUFBSSxDQUFDLFdBQVcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQ3hDLE9BQU8sRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2xCLENBQUM7UUFFRCxPQUFPLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUM5QixDQUFDLENBQUM7QUFDSixDQUFDO0FBRUQ7Ozs7OztHQU1HO0FBQ0gsU0FBUyxpQkFBaUIsQ0FDeEIsT0FBd0IsRUFDeEIsV0FBb0Q7SUFFcEQsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ2pCLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELE1BQU0sWUFBWSxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUM5RSxPQUFPLFVBQVUsQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxJQUFJLENBQUM7QUFDN0QsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7QWJzdHJhY3RDb250cm9sLCBBc3luY1ZhbGlkYXRvckZuLCBWYWxpZGF0b3JGbiwgVmFsaWRhdG9yc30gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHtvZn0gZnJvbSAncnhqcyc7XG5cbi8qKlxuICogUHJvdmlkZXMgYSBjb25kaXRpb25hbCB2YWxpZGF0b3IgdGhhdCBhcHBsaWVzIHRoZSBzcGVjaWZpZWQgdmFsaWRhdG9yIGZ1bmN0aW9ucyBvbmx5IGlmIHRoZSBjb25kaXRpb24gaXMgbWV0LlxuICpcbiAqIEBwYXJhbSBjb25kaXRpb24gQSBmdW5jdGlvbiB0aGF0IGRldGVybWluZXMgd2hldGhlciB0aGUgdmFsaWRhdG9ycyBzaG91bGQgYmUgYXBwbGllZC5cbiAqIEBwYXJhbSB0cnVlVmFsaWRhdG9yRm4gVGhlIHZhbGlkYXRvciBmdW5jdGlvbiBvciBhbiBhcnJheSBvZiB2YWxpZGF0b3IgZnVuY3Rpb25zIHRvIGJlIGFwcGxpZWQgd2hlbiB0aGUgY29uZGl0aW9uIGlzIHRydWUuXG4gKiBAcGFyYW0gZmFsc2VWYWxpZGF0b3JGbiBPcHRpb25hbC4gVGhlIHZhbGlkYXRvciBmdW5jdGlvbiBvciBhbiBhcnJheSBvZiB2YWxpZGF0b3IgZnVuY3Rpb25zIHRvIGJlIGFwcGxpZWQgd2hlbiB0aGUgY29uZGl0aW9uIGlzIGZhbHNlLlxuICogQHJldHVybnMgQSB2YWxpZGF0b3IgZnVuY3Rpb24gdGhhdCBjYW4gYmUgdXNlZCB3aXRoIEFuZ3VsYXIgUmVhY3RpdmUgRm9ybXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpZlZhbGlkYXRvcihcbiAgY29uZGl0aW9uOiAoY29udHJvbDogQWJzdHJhY3RDb250cm9sKSA9PiBib29sZWFuLFxuICB0cnVlVmFsaWRhdG9yRm46IFZhbGlkYXRvckZuIHwgVmFsaWRhdG9yRm5bXSxcbiAgZmFsc2VWYWxpZGF0b3JGbj86IFZhbGlkYXRvckZuIHwgVmFsaWRhdG9yRm5bXSxcbik6IFZhbGlkYXRvckZuIHtcbiAgLyoqXG4gICAqIEBwYXJhbSBjb250cm9sIFRoZSBBYnN0cmFjdENvbnRyb2wgdG8gdmFsaWRhdGUuXG4gICAqIEByZXR1cm5zIFZhbGlkYXRpb24gZXJyb3JzIGlmIHRoZSBjb25kaXRpb24gaXMgbWV0OyBvdGhlcndpc2UsIG51bGwuXG4gICAqL1xuICByZXR1cm4gKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRvcnMgfCBudWxsID0+IHtcbiAgICBpZiAoIXRydWVWYWxpZGF0b3JGbiB8fCAhY29uZGl0aW9uKGNvbnRyb2wpKSB7XG4gICAgICByZXR1cm4gY29tcG9zZVZhbGlkYXRvcnMoY29udHJvbCwgZmFsc2VWYWxpZGF0b3JGbik7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbXBvc2VWYWxpZGF0b3JzKGNvbnRyb2wsIHRydWVWYWxpZGF0b3JGbik7XG4gIH07XG59XG5cbi8qKlxuICogUHJvdmlkZXMgYSBjb25kaXRpb25hbCBhc3luYyB2YWxpZGF0b3IgdGhhdCBhcHBsaWVzIHRoZSBzcGVjaWZpZWQgYXN5bmMgdmFsaWRhdG9yIGZ1bmN0aW9uIG9ubHkgaWYgdGhlIGNvbmRpdGlvbiBpcyBtZXQuXG4gKlxuICogQHBhcmFtIGNvbmRpdGlvbiBBIGZ1bmN0aW9uIHRoYXQgZGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBhc3luYyB2YWxpZGF0b3Igc2hvdWxkIGJlIGFwcGxpZWQuXG4gKiBAcGFyYW0gdmFsaWRhdG9yRm4gVGhlIGFzeW5jIHZhbGlkYXRvciBmdW5jdGlvbiB0byBiZSBhcHBsaWVkIGNvbmRpdGlvbmFsbHkuXG4gKiBAcmV0dXJucyBBbiBhc3luYyB2YWxpZGF0b3IgZnVuY3Rpb24gdGhhdCBjYW4gYmUgdXNlZCB3aXRoIEFuZ3VsYXIgUmVhY3RpdmUgRm9ybXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpZkFzeW5jVmFsaWRhdG9yKFxuICBjb25kaXRpb246IChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpID0+IGJvb2xlYW4sXG4gIHZhbGlkYXRvckZuOiBBc3luY1ZhbGlkYXRvckZuLFxuKTogQXN5bmNWYWxpZGF0b3JGbiB7XG4gIC8qKlxuICAgKiBAcGFyYW0gY29udHJvbCBUaGUgQWJzdHJhY3RDb250cm9sIHRvIHZhbGlkYXRlIGFzeW5jaHJvbm91c2x5LlxuICAgKiBAcmV0dXJucyBBbiBvYnNlcnZhYmxlIHRoYXQgZW1pdHMgdmFsaWRhdGlvbiBlcnJvcnMgaWYgdGhlIGNvbmRpdGlvbiBpcyBtZXQ7IG90aGVyd2lzZSwgZW1pdHMgbnVsbC5cbiAgICovXG4gIHJldHVybiAoY29udHJvbDogQWJzdHJhY3RDb250cm9sKSA9PiB7XG4gICAgaWYgKCF2YWxpZGF0b3JGbiB8fCAhY29uZGl0aW9uKGNvbnRyb2wpKSB7XG4gICAgICByZXR1cm4gb2YobnVsbCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbGlkYXRvckZuKGNvbnRyb2wpO1xuICB9O1xufVxuXG4vKipcbiAqIENvbXBvc2VzIGFuZCBhcHBsaWVzIHRoZSBwcm92aWRlZCB2YWxpZGF0b3JzIHRvIHRoZSBnaXZlbiBBYnN0cmFjdENvbnRyb2wuXG4gKlxuICogQHBhcmFtIGNvbnRyb2wgVGhlIEFic3RyYWN0Q29udHJvbCB0byB2YWxpZGF0ZS5cbiAqIEBwYXJhbSB2YWxpZGF0b3JGbiBUaGUgdmFsaWRhdG9yIGZ1bmN0aW9uIG9yIGFuIGFycmF5IG9mIHZhbGlkYXRvciBmdW5jdGlvbnMgdG8gYmUgYXBwbGllZC5cbiAqIEByZXR1cm5zIFZhbGlkYXRpb24gZXJyb3JzIGlmIHRoZSB2YWxpZGF0b3JzIGFyZSBhcHBsaWNhYmxlOyBvdGhlcndpc2UsIG51bGwuXG4gKi9cbmZ1bmN0aW9uIGNvbXBvc2VWYWxpZGF0b3JzKFxuICBjb250cm9sOiBBYnN0cmFjdENvbnRyb2wsXG4gIHZhbGlkYXRvckZuOiBWYWxpZGF0b3JGbiB8IFZhbGlkYXRvckZuW10gfCB1bmRlZmluZWQsXG4pOiBWYWxpZGF0b3JzIHwgbnVsbCB7XG4gIGlmICghdmFsaWRhdG9yRm4pIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGNvbnN0IHZhbGlkYXRvckZucyA9IEFycmF5LmlzQXJyYXkodmFsaWRhdG9yRm4pID8gdmFsaWRhdG9yRm4gOiBbdmFsaWRhdG9yRm5dO1xuICByZXR1cm4gVmFsaWRhdG9ycy5jb21wb3NlKHZhbGlkYXRvckZucyk/Lihjb250cm9sKSB8fCBudWxsO1xufVxuIl19
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
import { makeEnvironmentProviders } from '@angular/core';
|
|
2
|
-
export class IdleDetectionConfig {
|
|
3
|
-
}
|
|
4
|
-
export function provideIdleDetectionConfig(config) {
|
|
5
|
-
return makeEnvironmentProviders([{ provide: IdleDetectionConfig, useValue: config }]);
|
|
6
|
-
}
|
|
7
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWRsZS1kZXRlY3Rpb24uY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LWxpZnQvc3JjL2xpYi91dGlscy9pZGxlLWRldGVjdGlvbi9pZGxlLWRldGVjdGlvbi5jb25maWcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLHdCQUF3QixFQUFDLE1BQU0sZUFBZSxDQUFDO0FBRXZELE1BQU0sT0FBTyxtQkFBbUI7Q0FHL0I7QUFFRCxNQUFNLFVBQVUsMEJBQTBCLENBQUMsTUFBMkI7SUFDcEUsT0FBTyx3QkFBd0IsQ0FBQyxDQUFDLEVBQUMsT0FBTyxFQUFFLG1CQUFtQixFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdEYsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7bWFrZUVudmlyb25tZW50UHJvdmlkZXJzfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuZXhwb3J0IGNsYXNzIElkbGVEZXRlY3Rpb25Db25maWcge1xuICBpZGxlRHVyYXRpb25JblNlY29uZHM/OiBudW1iZXI7XG4gIHRpbWVvdXREdXJhdGlvbkluU2Vjb25kcz86IG51bWJlcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb3ZpZGVJZGxlRGV0ZWN0aW9uQ29uZmlnKGNvbmZpZzogSWRsZURldGVjdGlvbkNvbmZpZykge1xuICByZXR1cm4gbWFrZUVudmlyb25tZW50UHJvdmlkZXJzKFt7cHJvdmlkZTogSWRsZURldGVjdGlvbkNvbmZpZywgdXNlVmFsdWU6IGNvbmZpZ31dKTtcbn1cbiJdfQ==
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
import { NgModule } from '@angular/core';
|
|
2
|
-
import { provideIdleDetectionConfig } from './idle-detection.config';
|
|
3
|
-
import * as i0 from "@angular/core";
|
|
4
|
-
/**
|
|
5
|
-
* Idle detection module.
|
|
6
|
-
* @deprecated use provideIdleDetectionConfig(config: IdleDetectionConfig) instead
|
|
7
|
-
*/
|
|
8
|
-
export class IdleDetectionModule {
|
|
9
|
-
static forRoot(config) {
|
|
10
|
-
return {
|
|
11
|
-
ngModule: IdleDetectionModule,
|
|
12
|
-
providers: [provideIdleDetectionConfig(config)],
|
|
13
|
-
};
|
|
14
|
-
}
|
|
15
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: IdleDetectionModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
16
|
-
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.13", ngImport: i0, type: IdleDetectionModule }); }
|
|
17
|
-
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: IdleDetectionModule }); }
|
|
18
|
-
}
|
|
19
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: IdleDetectionModule, decorators: [{
|
|
20
|
-
type: NgModule,
|
|
21
|
-
args: [{
|
|
22
|
-
imports: [],
|
|
23
|
-
}]
|
|
24
|
-
}] });
|
|
25
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWRsZS1kZXRlY3Rpb24ubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LWxpZnQvc3JjL2xpYi91dGlscy9pZGxlLWRldGVjdGlvbi9pZGxlLWRldGVjdGlvbi5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFzQixRQUFRLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFFNUQsT0FBTyxFQUFzQiwwQkFBMEIsRUFBQyxNQUFNLHlCQUF5QixDQUFDOztBQUV4Rjs7O0dBR0c7QUFJSCxNQUFNLE9BQU8sbUJBQW1CO0lBQzlCLE1BQU0sQ0FBQyxPQUFPLENBQUMsTUFBMkI7UUFDeEMsT0FBTztZQUNMLFFBQVEsRUFBRSxtQkFBbUI7WUFDN0IsU0FBUyxFQUFFLENBQUMsMEJBQTBCLENBQUMsTUFBTSxDQUFDLENBQUM7U0FDaEQsQ0FBQztJQUNKLENBQUM7K0dBTlUsbUJBQW1CO2dIQUFuQixtQkFBbUI7Z0hBQW5CLG1CQUFtQjs7NEZBQW5CLG1CQUFtQjtrQkFIL0IsUUFBUTttQkFBQztvQkFDUixPQUFPLEVBQUUsRUFBRTtpQkFDWiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7TW9kdWxlV2l0aFByb3ZpZGVycywgTmdNb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQge0lkbGVEZXRlY3Rpb25Db25maWcsIHByb3ZpZGVJZGxlRGV0ZWN0aW9uQ29uZmlnfSBmcm9tICcuL2lkbGUtZGV0ZWN0aW9uLmNvbmZpZyc7XG5cbi8qKlxuICogSWRsZSBkZXRlY3Rpb24gbW9kdWxlLlxuICogQGRlcHJlY2F0ZWQgdXNlIHByb3ZpZGVJZGxlRGV0ZWN0aW9uQ29uZmlnKGNvbmZpZzogSWRsZURldGVjdGlvbkNvbmZpZykgaW5zdGVhZFxuICovXG5ATmdNb2R1bGUoe1xuICBpbXBvcnRzOiBbXSxcbn0pXG5leHBvcnQgY2xhc3MgSWRsZURldGVjdGlvbk1vZHVsZSB7XG4gIHN0YXRpYyBmb3JSb290KGNvbmZpZzogSWRsZURldGVjdGlvbkNvbmZpZyk6IE1vZHVsZVdpdGhQcm92aWRlcnM8SWRsZURldGVjdGlvbk1vZHVsZT4ge1xuICAgIHJldHVybiB7XG4gICAgICBuZ01vZHVsZTogSWRsZURldGVjdGlvbk1vZHVsZSxcbiAgICAgIHByb3ZpZGVyczogW3Byb3ZpZGVJZGxlRGV0ZWN0aW9uQ29uZmlnKGNvbmZpZyldLFxuICAgIH07XG4gIH1cbn1cbiJdfQ==
|
|
@@ -1,190 +0,0 @@
|
|
|
1
|
-
import { Injectable, Optional } from '@angular/core';
|
|
2
|
-
import { fromEvent, merge, Subject, throttleTime } from 'rxjs';
|
|
3
|
-
import * as i0 from "@angular/core";
|
|
4
|
-
import * as i1 from "./idle-detection.config";
|
|
5
|
-
/**
|
|
6
|
-
* Service for detecting user idle time and implementing a countdown.
|
|
7
|
-
*/
|
|
8
|
-
export class IdleDetectionService {
|
|
9
|
-
/**
|
|
10
|
-
* Constructs the IdleDetectionService.
|
|
11
|
-
* @param config - Optional configuration for idle and timeout durations.
|
|
12
|
-
*/
|
|
13
|
-
constructor(config) {
|
|
14
|
-
/**
|
|
15
|
-
* The list of interruption events that will end the idle detection.
|
|
16
|
-
*/
|
|
17
|
-
this.interruptionEvents = [
|
|
18
|
-
'click',
|
|
19
|
-
'keydown',
|
|
20
|
-
'keypress',
|
|
21
|
-
'mousemove',
|
|
22
|
-
'mousedown',
|
|
23
|
-
'scroll',
|
|
24
|
-
'wheel',
|
|
25
|
-
'touchmove',
|
|
26
|
-
'pointermove',
|
|
27
|
-
'resize',
|
|
28
|
-
];
|
|
29
|
-
/**
|
|
30
|
-
* The default idle duration in seconds (19 minutes).
|
|
31
|
-
*/
|
|
32
|
-
this.idleDuration = 19 * 60;
|
|
33
|
-
/**
|
|
34
|
-
* The default timeout duration in seconds (1 minute).
|
|
35
|
-
*/
|
|
36
|
-
this.timeoutDuration = 60;
|
|
37
|
-
/**
|
|
38
|
-
* Flag to indicate if countdown is in progress.
|
|
39
|
-
*/
|
|
40
|
-
this.isCountingDown = false;
|
|
41
|
-
/**
|
|
42
|
-
* The current countdown value.
|
|
43
|
-
*/
|
|
44
|
-
this.countdown = this.timeoutDuration;
|
|
45
|
-
/**
|
|
46
|
-
* Subject to emit when idle period ends.
|
|
47
|
-
*/
|
|
48
|
-
this.idleEndSubject = new Subject();
|
|
49
|
-
/**
|
|
50
|
-
* Subject to emit the countdown value.
|
|
51
|
-
*/
|
|
52
|
-
this.countdownSubject = new Subject();
|
|
53
|
-
/**
|
|
54
|
-
* Subject to emit when countdown ends.
|
|
55
|
-
*/
|
|
56
|
-
this.countdownEndSubject = new Subject();
|
|
57
|
-
if (config) {
|
|
58
|
-
this.setConfig(config);
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
/**
|
|
62
|
-
* Starts to watch for user inactivity.
|
|
63
|
-
*/
|
|
64
|
-
startWatching() {
|
|
65
|
-
this.setupInterruptionEvents();
|
|
66
|
-
this.startIdleTimer();
|
|
67
|
-
}
|
|
68
|
-
/**
|
|
69
|
-
* Resets the idle timer when user activity is detected.
|
|
70
|
-
* @param withCountdownReset - Flag to indicate if countdown should be reset.
|
|
71
|
-
* By default, it only reset the idle-detection timer. If you enter the countdown phase, it won't stop the countdown.
|
|
72
|
-
* Pass true when you want to reset the countdown as well. This is useful when you click "Keep Me Signed In" button in cll-idle-detection component
|
|
73
|
-
*/
|
|
74
|
-
resetTimer(withCountdownReset = false) {
|
|
75
|
-
this.startIdleTimer();
|
|
76
|
-
if (withCountdownReset && this.isCountingDown) {
|
|
77
|
-
this.stopCountdown();
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
|
-
/**
|
|
81
|
-
* Sets up the interruption events that will end the idle detection.
|
|
82
|
-
* Listens to a set of events on the document (e.g. click, keydown, mousemove, etc.).
|
|
83
|
-
* When any of these events is triggered, the idle timer is reset.
|
|
84
|
-
* Uses `throttleTime` operator to only trigger the reset when the events are spaced
|
|
85
|
-
* out by at least 1000ms (1 second).
|
|
86
|
-
* @private
|
|
87
|
-
*/
|
|
88
|
-
setupInterruptionEvents() {
|
|
89
|
-
if (!this.interruptionSubscription) {
|
|
90
|
-
const throttledInterruptionEvents = this.interruptionEvents.map((eventName) => fromEvent(document, eventName).pipe(throttleTime(1000)));
|
|
91
|
-
this.interruptionSubscription = merge(...throttledInterruptionEvents).subscribe(() => this.resetTimer());
|
|
92
|
-
}
|
|
93
|
-
}
|
|
94
|
-
/**
|
|
95
|
-
* Starts the idle timer.
|
|
96
|
-
* When the timer expires, it emits an event through onIdleEnd() and starts the countdown.
|
|
97
|
-
*/
|
|
98
|
-
startIdleTimer() {
|
|
99
|
-
clearTimeout(this.idleTimer);
|
|
100
|
-
this.idleTimer = window.setTimeout(() => {
|
|
101
|
-
// after idle period, user inactivity detected
|
|
102
|
-
this.idleEndSubject.next();
|
|
103
|
-
this.startCountdown();
|
|
104
|
-
}, this.idleDuration * 1000);
|
|
105
|
-
}
|
|
106
|
-
/**
|
|
107
|
-
* Starts the countdown.
|
|
108
|
-
*/
|
|
109
|
-
startCountdown() {
|
|
110
|
-
this.isCountingDown = true;
|
|
111
|
-
this.countdownSubject.next(this.countdown);
|
|
112
|
-
this.countdownTimer = window.setInterval(() => {
|
|
113
|
-
this.countdown--;
|
|
114
|
-
this.countdownSubject.next(this.countdown);
|
|
115
|
-
if (this.countdown <= 0) {
|
|
116
|
-
this.stopCountdown();
|
|
117
|
-
this.countdownEndSubject.next();
|
|
118
|
-
}
|
|
119
|
-
}, 1000);
|
|
120
|
-
}
|
|
121
|
-
/**
|
|
122
|
-
* Stops the countdown.
|
|
123
|
-
*/
|
|
124
|
-
stopCountdown() {
|
|
125
|
-
clearInterval(this.countdownTimer);
|
|
126
|
-
this.isCountingDown = false;
|
|
127
|
-
// reset countdown
|
|
128
|
-
this.countdown = this.timeoutDuration;
|
|
129
|
-
}
|
|
130
|
-
/**
|
|
131
|
-
* Returns an observable that emits when the user has been idle for a long period.
|
|
132
|
-
* Developers can use this to perform actions like opening a dialog.
|
|
133
|
-
*
|
|
134
|
-
* user has been inactive for a long period (idleDuration), at this moment, idle detection phase ends, onIdleEnd event is emitted, and then enter countdown/timeout phase.
|
|
135
|
-
* During the countdown phase:
|
|
136
|
-
* - if user has any activity, countdown phase immediately ends and restart the idle detection phase.
|
|
137
|
-
* - else, countdownEnd event will be emitted when timeoutDuration is over.
|
|
138
|
-
* @returns {Observable<void>} - Observable for idle end event.
|
|
139
|
-
*/
|
|
140
|
-
onIdleEnd() {
|
|
141
|
-
return this.idleEndSubject.asObservable();
|
|
142
|
-
}
|
|
143
|
-
/**
|
|
144
|
-
* Returns an observable that emits when the countdown ends.
|
|
145
|
-
* Usually means the user has been inactive for a very long time and should be logged out.
|
|
146
|
-
* @returns {Observable<void>} - Observable for countdown end event.
|
|
147
|
-
*/
|
|
148
|
-
onTimeoutEnd() {
|
|
149
|
-
return this.countdownEndSubject.asObservable();
|
|
150
|
-
}
|
|
151
|
-
/**
|
|
152
|
-
* Returns an observable that emits the countdown value every second.
|
|
153
|
-
* @returns {Observable<number>} - Observable for countdown value.
|
|
154
|
-
*/
|
|
155
|
-
onCountDown() {
|
|
156
|
-
return this.countdownSubject.asObservable();
|
|
157
|
-
}
|
|
158
|
-
/**
|
|
159
|
-
* Clears all timers when the component is destroyed.
|
|
160
|
-
*/
|
|
161
|
-
clearTimers() {
|
|
162
|
-
clearTimeout(this.idleTimer);
|
|
163
|
-
clearInterval(this.countdownTimer);
|
|
164
|
-
this.interruptionSubscription?.unsubscribe();
|
|
165
|
-
this.interruptionSubscription = undefined;
|
|
166
|
-
}
|
|
167
|
-
/**
|
|
168
|
-
* Sets the idle and timeout durations based on the provided configuration.
|
|
169
|
-
* @param config - Configuration object with idle and timeout durations.
|
|
170
|
-
*/
|
|
171
|
-
setConfig(config) {
|
|
172
|
-
if (config.idleDurationInSeconds) {
|
|
173
|
-
this.idleDuration = config.idleDurationInSeconds;
|
|
174
|
-
}
|
|
175
|
-
if (config.timeoutDurationInSeconds) {
|
|
176
|
-
this.countdown = this.timeoutDuration = config.timeoutDurationInSeconds;
|
|
177
|
-
}
|
|
178
|
-
}
|
|
179
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: IdleDetectionService, deps: [{ token: i1.IdleDetectionConfig, optional: true }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
180
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: IdleDetectionService, providedIn: 'root' }); }
|
|
181
|
-
}
|
|
182
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: IdleDetectionService, decorators: [{
|
|
183
|
-
type: Injectable,
|
|
184
|
-
args: [{
|
|
185
|
-
providedIn: 'root',
|
|
186
|
-
}]
|
|
187
|
-
}], ctorParameters: () => [{ type: i1.IdleDetectionConfig, decorators: [{
|
|
188
|
-
type: Optional
|
|
189
|
-
}] }] });
|
|
190
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWRsZS1kZXRlY3Rpb24uc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1saWZ0L3NyYy9saWIvdXRpbHMvaWRsZS1kZXRlY3Rpb24vaWRsZS1kZXRlY3Rpb24uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsVUFBVSxFQUFFLFFBQVEsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUNuRCxPQUFPLEVBQUMsU0FBUyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQWdCLFlBQVksRUFBQyxNQUFNLE1BQU0sQ0FBQzs7O0FBSTNFOztHQUVHO0FBSUgsTUFBTSxPQUFPLG9CQUFvQjtJQStEL0I7OztPQUdHO0lBQ0gsWUFBd0IsTUFBMkI7UUFsRW5EOztXQUVHO1FBQ0ssdUJBQWtCLEdBQUc7WUFDM0IsT0FBTztZQUNQLFNBQVM7WUFDVCxVQUFVO1lBQ1YsV0FBVztZQUNYLFdBQVc7WUFDWCxRQUFRO1lBQ1IsT0FBTztZQUNQLFdBQVc7WUFDWCxhQUFhO1lBQ2IsUUFBUTtTQUNULENBQUM7UUFHRjs7V0FFRztRQUNLLGlCQUFZLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztRQUUvQjs7V0FFRztRQUNLLG9CQUFlLEdBQUcsRUFBRSxDQUFDO1FBWTdCOztXQUVHO1FBQ0ssbUJBQWMsR0FBRyxLQUFLLENBQUM7UUFFL0I7O1dBRUc7UUFDSyxjQUFTLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQztRQUV6Qzs7V0FFRztRQUNLLG1CQUFjLEdBQUcsSUFBSSxPQUFPLEVBQVEsQ0FBQztRQUU3Qzs7V0FFRztRQUNLLHFCQUFnQixHQUFHLElBQUksT0FBTyxFQUFVLENBQUM7UUFFakQ7O1dBRUc7UUFDSyx3QkFBbUIsR0FBRyxJQUFJLE9BQU8sRUFBUSxDQUFDO1FBT2hELElBQUksTUFBTSxFQUFFLENBQUM7WUFDWCxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3pCLENBQUM7SUFDSCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxhQUFhO1FBQ1gsSUFBSSxDQUFDLHVCQUF1QixFQUFFLENBQUM7UUFDL0IsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO0lBQ3hCLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILFVBQVUsQ0FBQyxrQkFBa0IsR0FBRyxLQUFLO1FBQ25DLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUV0QixJQUFJLGtCQUFrQixJQUFJLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUM5QyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDdkIsQ0FBQztJQUNILENBQUM7SUFFRDs7Ozs7OztPQU9HO0lBQ0ssdUJBQXVCO1FBQzdCLElBQUksQ0FBQyxJQUFJLENBQUMsd0JBQXdCLEVBQUUsQ0FBQztZQUNuQyxNQUFNLDJCQUEyQixHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUM1RSxTQUFTLENBQUMsUUFBUSxFQUFFLFNBQVMsQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FDeEQsQ0FBQztZQUNGLElBQUksQ0FBQyx3QkFBd0IsR0FBRyxLQUFLLENBQUMsR0FBRywyQkFBMkIsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQztRQUMzRyxDQUFDO0lBQ0gsQ0FBQztJQUVEOzs7T0FHRztJQUNLLGNBQWM7UUFDcEIsWUFBWSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUU3QixJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsR0FBRyxFQUFFO1lBQ3RDLDhDQUE4QztZQUM5QyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxDQUFDO1lBQzNCLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUN4QixDQUFDLEVBQUUsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsQ0FBQztJQUMvQixDQUFDO0lBRUQ7O09BRUc7SUFDSyxjQUFjO1FBQ3BCLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDO1FBQzNCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBRTNDLElBQUksQ0FBQyxjQUFjLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQyxHQUFHLEVBQUU7WUFDNUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ2pCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBRTNDLElBQUksSUFBSSxDQUFDLFNBQVMsSUFBSSxDQUFDLEVBQUUsQ0FBQztnQkFDeEIsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO2dCQUNyQixJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDbEMsQ0FBQztRQUNILENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUNYLENBQUM7SUFFRDs7T0FFRztJQUNLLGFBQWE7UUFDbkIsYUFBYSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUNuQyxJQUFJLENBQUMsY0FBYyxHQUFHLEtBQUssQ0FBQztRQUU1QixrQkFBa0I7UUFDbEIsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDO0lBQ3hDLENBQUM7SUFFRDs7Ozs7Ozs7O09BU0c7SUFDSCxTQUFTO1FBQ1AsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQzVDLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsWUFBWTtRQUNWLE9BQU8sSUFBSSxDQUFDLG1CQUFtQixDQUFDLFlBQVksRUFBRSxDQUFDO0lBQ2pELENBQUM7SUFFRDs7O09BR0c7SUFDSCxXQUFXO1FBQ1QsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDOUMsQ0FBQztJQUVEOztPQUVHO0lBQ0gsV0FBVztRQUNULFlBQVksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDN0IsYUFBYSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUVuQyxJQUFJLENBQUMsd0JBQXdCLEVBQUUsV0FBVyxFQUFFLENBQUM7UUFDN0MsSUFBSSxDQUFDLHdCQUF3QixHQUFHLFNBQVMsQ0FBQztJQUM1QyxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsU0FBUyxDQUFDLE1BQTJCO1FBQ25DLElBQUksTUFBTSxDQUFDLHFCQUFxQixFQUFFLENBQUM7WUFDakMsSUFBSSxDQUFDLFlBQVksR0FBRyxNQUFNLENBQUMscUJBQXFCLENBQUM7UUFDbkQsQ0FBQztRQUVELElBQUksTUFBTSxDQUFDLHdCQUF3QixFQUFFLENBQUM7WUFDcEMsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsZUFBZSxHQUFHLE1BQU0sQ0FBQyx3QkFBd0IsQ0FBQztRQUMxRSxDQUFDO0lBQ0gsQ0FBQzsrR0FqTlUsb0JBQW9CO21IQUFwQixvQkFBb0IsY0FGbkIsTUFBTTs7NEZBRVAsb0JBQW9CO2tCQUhoQyxVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQjs7MEJBb0VjLFFBQVEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0luamVjdGFibGUsIE9wdGlvbmFsfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7ZnJvbUV2ZW50LCBtZXJnZSwgU3ViamVjdCwgU3Vic2NyaXB0aW9uLCB0aHJvdHRsZVRpbWV9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQge0lkbGVEZXRlY3Rpb25Db25maWd9IGZyb20gJy4vaWRsZS1kZXRlY3Rpb24uY29uZmlnJztcblxuLyoqXG4gKiBTZXJ2aWNlIGZvciBkZXRlY3RpbmcgdXNlciBpZGxlIHRpbWUgYW5kIGltcGxlbWVudGluZyBhIGNvdW50ZG93bi5cbiAqL1xuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIElkbGVEZXRlY3Rpb25TZXJ2aWNlIHtcbiAgLyoqXG4gICAqIFRoZSBsaXN0IG9mIGludGVycnVwdGlvbiBldmVudHMgdGhhdCB3aWxsIGVuZCB0aGUgaWRsZSBkZXRlY3Rpb24uXG4gICAqL1xuICBwcml2YXRlIGludGVycnVwdGlvbkV2ZW50cyA9IFtcbiAgICAnY2xpY2snLFxuICAgICdrZXlkb3duJyxcbiAgICAna2V5cHJlc3MnLFxuICAgICdtb3VzZW1vdmUnLFxuICAgICdtb3VzZWRvd24nLFxuICAgICdzY3JvbGwnLFxuICAgICd3aGVlbCcsXG4gICAgJ3RvdWNobW92ZScsXG4gICAgJ3BvaW50ZXJtb3ZlJyxcbiAgICAncmVzaXplJyxcbiAgXTtcbiAgcHJpdmF0ZSBpbnRlcnJ1cHRpb25TdWJzY3JpcHRpb24/OiBTdWJzY3JpcHRpb247XG5cbiAgLyoqXG4gICAqIFRoZSBkZWZhdWx0IGlkbGUgZHVyYXRpb24gaW4gc2Vjb25kcyAoMTkgbWludXRlcykuXG4gICAqL1xuICBwcml2YXRlIGlkbGVEdXJhdGlvbiA9IDE5ICogNjA7XG5cbiAgLyoqXG4gICAqIFRoZSBkZWZhdWx0IHRpbWVvdXQgZHVyYXRpb24gaW4gc2Vjb25kcyAoMSBtaW51dGUpLlxuICAgKi9cbiAgcHJpdmF0ZSB0aW1lb3V0RHVyYXRpb24gPSA2MDtcblxuICAvKipcbiAgICogVGltZXIgZm9yIGlkbGUgZGV0ZWN0aW9uLlxuICAgKi9cbiAgcHJpdmF0ZSBpZGxlVGltZXI/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFRpbWVyIGZvciBjb3VudGRvd24uXG4gICAqL1xuICBwcml2YXRlIGNvdW50ZG93blRpbWVyPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBGbGFnIHRvIGluZGljYXRlIGlmIGNvdW50ZG93biBpcyBpbiBwcm9ncmVzcy5cbiAgICovXG4gIHByaXZhdGUgaXNDb3VudGluZ0Rvd24gPSBmYWxzZTtcblxuICAvKipcbiAgICogVGhlIGN1cnJlbnQgY291bnRkb3duIHZhbHVlLlxuICAgKi9cbiAgcHJpdmF0ZSBjb3VudGRvd24gPSB0aGlzLnRpbWVvdXREdXJhdGlvbjtcblxuICAvKipcbiAgICogU3ViamVjdCB0byBlbWl0IHdoZW4gaWRsZSBwZXJpb2QgZW5kcy5cbiAgICovXG4gIHByaXZhdGUgaWRsZUVuZFN1YmplY3QgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gIC8qKlxuICAgKiBTdWJqZWN0IHRvIGVtaXQgdGhlIGNvdW50ZG93biB2YWx1ZS5cbiAgICovXG4gIHByaXZhdGUgY291bnRkb3duU3ViamVjdCA9IG5ldyBTdWJqZWN0PG51bWJlcj4oKTtcblxuICAvKipcbiAgICogU3ViamVjdCB0byBlbWl0IHdoZW4gY291bnRkb3duIGVuZHMuXG4gICAqL1xuICBwcml2YXRlIGNvdW50ZG93bkVuZFN1YmplY3QgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gIC8qKlxuICAgKiBDb25zdHJ1Y3RzIHRoZSBJZGxlRGV0ZWN0aW9uU2VydmljZS5cbiAgICogQHBhcmFtIGNvbmZpZyAtIE9wdGlvbmFsIGNvbmZpZ3VyYXRpb24gZm9yIGlkbGUgYW5kIHRpbWVvdXQgZHVyYXRpb25zLlxuICAgKi9cbiAgY29uc3RydWN0b3IoQE9wdGlvbmFsKCkgY29uZmlnOiBJZGxlRGV0ZWN0aW9uQ29uZmlnKSB7XG4gICAgaWYgKGNvbmZpZykge1xuICAgICAgdGhpcy5zZXRDb25maWcoY29uZmlnKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU3RhcnRzIHRvIHdhdGNoIGZvciB1c2VyIGluYWN0aXZpdHkuXG4gICAqL1xuICBzdGFydFdhdGNoaW5nKCkge1xuICAgIHRoaXMuc2V0dXBJbnRlcnJ1cHRpb25FdmVudHMoKTtcbiAgICB0aGlzLnN0YXJ0SWRsZVRpbWVyKCk7XG4gIH1cblxuICAvKipcbiAgICogUmVzZXRzIHRoZSBpZGxlIHRpbWVyIHdoZW4gdXNlciBhY3Rpdml0eSBpcyBkZXRlY3RlZC5cbiAgICogQHBhcmFtIHdpdGhDb3VudGRvd25SZXNldCAtIEZsYWcgdG8gaW5kaWNhdGUgaWYgY291bnRkb3duIHNob3VsZCBiZSByZXNldC5cbiAgICogQnkgZGVmYXVsdCwgaXQgb25seSByZXNldCB0aGUgaWRsZS1kZXRlY3Rpb24gdGltZXIuIElmIHlvdSBlbnRlciB0aGUgY291bnRkb3duIHBoYXNlLCBpdCB3b24ndCBzdG9wIHRoZSBjb3VudGRvd24uXG4gICAqIFBhc3MgdHJ1ZSB3aGVuIHlvdSB3YW50IHRvIHJlc2V0IHRoZSBjb3VudGRvd24gYXMgd2VsbC4gVGhpcyBpcyB1c2VmdWwgd2hlbiB5b3UgY2xpY2sgXCJLZWVwIE1lIFNpZ25lZCBJblwiIGJ1dHRvbiBpbiBjbGwtaWRsZS1kZXRlY3Rpb24gY29tcG9uZW50XG4gICAqL1xuICByZXNldFRpbWVyKHdpdGhDb3VudGRvd25SZXNldCA9IGZhbHNlKSB7XG4gICAgdGhpcy5zdGFydElkbGVUaW1lcigpO1xuXG4gICAgaWYgKHdpdGhDb3VudGRvd25SZXNldCAmJiB0aGlzLmlzQ291bnRpbmdEb3duKSB7XG4gICAgICB0aGlzLnN0b3BDb3VudGRvd24oKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2V0cyB1cCB0aGUgaW50ZXJydXB0aW9uIGV2ZW50cyB0aGF0IHdpbGwgZW5kIHRoZSBpZGxlIGRldGVjdGlvbi5cbiAgICogTGlzdGVucyB0byBhIHNldCBvZiBldmVudHMgb24gdGhlIGRvY3VtZW50IChlLmcuIGNsaWNrLCBrZXlkb3duLCBtb3VzZW1vdmUsIGV0Yy4pLlxuICAgKiBXaGVuIGFueSBvZiB0aGVzZSBldmVudHMgaXMgdHJpZ2dlcmVkLCB0aGUgaWRsZSB0aW1lciBpcyByZXNldC5cbiAgICogVXNlcyBgdGhyb3R0bGVUaW1lYCBvcGVyYXRvciB0byBvbmx5IHRyaWdnZXIgdGhlIHJlc2V0IHdoZW4gdGhlIGV2ZW50cyBhcmUgc3BhY2VkXG4gICAqIG91dCBieSBhdCBsZWFzdCAxMDAwbXMgKDEgc2Vjb25kKS5cbiAgICogQHByaXZhdGVcbiAgICovXG4gIHByaXZhdGUgc2V0dXBJbnRlcnJ1cHRpb25FdmVudHMoKSB7XG4gICAgaWYgKCF0aGlzLmludGVycnVwdGlvblN1YnNjcmlwdGlvbikge1xuICAgICAgY29uc3QgdGhyb3R0bGVkSW50ZXJydXB0aW9uRXZlbnRzID0gdGhpcy5pbnRlcnJ1cHRpb25FdmVudHMubWFwKChldmVudE5hbWUpID0+XG4gICAgICAgIGZyb21FdmVudChkb2N1bWVudCwgZXZlbnROYW1lKS5waXBlKHRocm90dGxlVGltZSgxMDAwKSksXG4gICAgICApO1xuICAgICAgdGhpcy5pbnRlcnJ1cHRpb25TdWJzY3JpcHRpb24gPSBtZXJnZSguLi50aHJvdHRsZWRJbnRlcnJ1cHRpb25FdmVudHMpLnN1YnNjcmliZSgoKSA9PiB0aGlzLnJlc2V0VGltZXIoKSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFN0YXJ0cyB0aGUgaWRsZSB0aW1lci5cbiAgICogV2hlbiB0aGUgdGltZXIgZXhwaXJlcywgaXQgZW1pdHMgYW4gZXZlbnQgdGhyb3VnaCBvbklkbGVFbmQoKSBhbmQgc3RhcnRzIHRoZSBjb3VudGRvd24uXG4gICAqL1xuICBwcml2YXRlIHN0YXJ0SWRsZVRpbWVyKCkge1xuICAgIGNsZWFyVGltZW91dCh0aGlzLmlkbGVUaW1lcik7XG5cbiAgICB0aGlzLmlkbGVUaW1lciA9IHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIC8vIGFmdGVyIGlkbGUgcGVyaW9kLCB1c2VyIGluYWN0aXZpdHkgZGV0ZWN0ZWRcbiAgICAgIHRoaXMuaWRsZUVuZFN1YmplY3QubmV4dCgpO1xuICAgICAgdGhpcy5zdGFydENvdW50ZG93bigpO1xuICAgIH0sIHRoaXMuaWRsZUR1cmF0aW9uICogMTAwMCk7XG4gIH1cblxuICAvKipcbiAgICogU3RhcnRzIHRoZSBjb3VudGRvd24uXG4gICAqL1xuICBwcml2YXRlIHN0YXJ0Q291bnRkb3duKCkge1xuICAgIHRoaXMuaXNDb3VudGluZ0Rvd24gPSB0cnVlO1xuICAgIHRoaXMuY291bnRkb3duU3ViamVjdC5uZXh0KHRoaXMuY291bnRkb3duKTtcblxuICAgIHRoaXMuY291bnRkb3duVGltZXIgPSB3aW5kb3cuc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgICAgdGhpcy5jb3VudGRvd24tLTtcbiAgICAgIHRoaXMuY291bnRkb3duU3ViamVjdC5uZXh0KHRoaXMuY291bnRkb3duKTtcblxuICAgICAgaWYgKHRoaXMuY291bnRkb3duIDw9IDApIHtcbiAgICAgICAgdGhpcy5zdG9wQ291bnRkb3duKCk7XG4gICAgICAgIHRoaXMuY291bnRkb3duRW5kU3ViamVjdC5uZXh0KCk7XG4gICAgICB9XG4gICAgfSwgMTAwMCk7XG4gIH1cblxuICAvKipcbiAgICogU3RvcHMgdGhlIGNvdW50ZG93bi5cbiAgICovXG4gIHByaXZhdGUgc3RvcENvdW50ZG93bigpIHtcbiAgICBjbGVhckludGVydmFsKHRoaXMuY291bnRkb3duVGltZXIpO1xuICAgIHRoaXMuaXNDb3VudGluZ0Rvd24gPSBmYWxzZTtcblxuICAgIC8vIHJlc2V0IGNvdW50ZG93blxuICAgIHRoaXMuY291bnRkb3duID0gdGhpcy50aW1lb3V0RHVyYXRpb247XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhbiBvYnNlcnZhYmxlIHRoYXQgZW1pdHMgd2hlbiB0aGUgdXNlciBoYXMgYmVlbiBpZGxlIGZvciBhIGxvbmcgcGVyaW9kLlxuICAgKiBEZXZlbG9wZXJzIGNhbiB1c2UgdGhpcyB0byBwZXJmb3JtIGFjdGlvbnMgbGlrZSBvcGVuaW5nIGEgZGlhbG9nLlxuICAgKlxuICAgKiB1c2VyIGhhcyBiZWVuIGluYWN0aXZlIGZvciBhIGxvbmcgcGVyaW9kIChpZGxlRHVyYXRpb24pLCBhdCB0aGlzIG1vbWVudCwgaWRsZSBkZXRlY3Rpb24gcGhhc2UgZW5kcywgb25JZGxlRW5kIGV2ZW50IGlzIGVtaXR0ZWQsIGFuZCB0aGVuIGVudGVyIGNvdW50ZG93bi90aW1lb3V0IHBoYXNlLlxuICAgKiBEdXJpbmcgdGhlIGNvdW50ZG93biBwaGFzZTpcbiAgICogIC0gaWYgdXNlciBoYXMgYW55IGFjdGl2aXR5LCBjb3VudGRvd24gcGhhc2UgaW1tZWRpYXRlbHkgZW5kcyBhbmQgcmVzdGFydCB0aGUgaWRsZSBkZXRlY3Rpb24gcGhhc2UuXG4gICAqICAtIGVsc2UsIGNvdW50ZG93bkVuZCBldmVudCB3aWxsIGJlIGVtaXR0ZWQgd2hlbiB0aW1lb3V0RHVyYXRpb24gaXMgb3Zlci5cbiAgICogQHJldHVybnMge09ic2VydmFibGU8dm9pZD59IC0gT2JzZXJ2YWJsZSBmb3IgaWRsZSBlbmQgZXZlbnQuXG4gICAqL1xuICBvbklkbGVFbmQoKSB7XG4gICAgcmV0dXJuIHRoaXMuaWRsZUVuZFN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhbiBvYnNlcnZhYmxlIHRoYXQgZW1pdHMgd2hlbiB0aGUgY291bnRkb3duIGVuZHMuXG4gICAqIFVzdWFsbHkgbWVhbnMgdGhlIHVzZXIgaGFzIGJlZW4gaW5hY3RpdmUgZm9yIGEgdmVyeSBsb25nIHRpbWUgYW5kIHNob3VsZCBiZSBsb2dnZWQgb3V0LlxuICAgKiBAcmV0dXJucyB7T2JzZXJ2YWJsZTx2b2lkPn0gLSBPYnNlcnZhYmxlIGZvciBjb3VudGRvd24gZW5kIGV2ZW50LlxuICAgKi9cbiAgb25UaW1lb3V0RW5kKCkge1xuICAgIHJldHVybiB0aGlzLmNvdW50ZG93bkVuZFN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhbiBvYnNlcnZhYmxlIHRoYXQgZW1pdHMgdGhlIGNvdW50ZG93biB2YWx1ZSBldmVyeSBzZWNvbmQuXG4gICAqIEByZXR1cm5zIHtPYnNlcnZhYmxlPG51bWJlcj59IC0gT2JzZXJ2YWJsZSBmb3IgY291bnRkb3duIHZhbHVlLlxuICAgKi9cbiAgb25Db3VudERvd24oKSB7XG4gICAgcmV0dXJuIHRoaXMuY291bnRkb3duU3ViamVjdC5hc09ic2VydmFibGUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDbGVhcnMgYWxsIHRpbWVycyB3aGVuIHRoZSBjb21wb25lbnQgaXMgZGVzdHJveWVkLlxuICAgKi9cbiAgY2xlYXJUaW1lcnMoKSB7XG4gICAgY2xlYXJUaW1lb3V0KHRoaXMuaWRsZVRpbWVyKTtcbiAgICBjbGVhckludGVydmFsKHRoaXMuY291bnRkb3duVGltZXIpO1xuXG4gICAgdGhpcy5pbnRlcnJ1cHRpb25TdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5pbnRlcnJ1cHRpb25TdWJzY3JpcHRpb24gPSB1bmRlZmluZWQ7XG4gIH1cblxuICAvKipcbiAgICogU2V0cyB0aGUgaWRsZSBhbmQgdGltZW91dCBkdXJhdGlvbnMgYmFzZWQgb24gdGhlIHByb3ZpZGVkIGNvbmZpZ3VyYXRpb24uXG4gICAqIEBwYXJhbSBjb25maWcgLSBDb25maWd1cmF0aW9uIG9iamVjdCB3aXRoIGlkbGUgYW5kIHRpbWVvdXQgZHVyYXRpb25zLlxuICAgKi9cbiAgc2V0Q29uZmlnKGNvbmZpZzogSWRsZURldGVjdGlvbkNvbmZpZykge1xuICAgIGlmIChjb25maWcuaWRsZUR1cmF0aW9uSW5TZWNvbmRzKSB7XG4gICAgICB0aGlzLmlkbGVEdXJhdGlvbiA9IGNvbmZpZy5pZGxlRHVyYXRpb25JblNlY29uZHM7XG4gICAgfVxuXG4gICAgaWYgKGNvbmZpZy50aW1lb3V0RHVyYXRpb25JblNlY29uZHMpIHtcbiAgICAgIHRoaXMuY291bnRkb3duID0gdGhpcy50aW1lb3V0RHVyYXRpb24gPSBjb25maWcudGltZW91dER1cmF0aW9uSW5TZWNvbmRzO1xuICAgIH1cbiAgfVxufVxuIl19
|
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
export * from './idle-detection.config';
|
|
2
|
-
export * from './idle-detection.module';
|
|
3
|
-
export * from './idle-detection.service';
|
|
4
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtbGlmdC9zcmMvbGliL3V0aWxzL2lkbGUtZGV0ZWN0aW9uL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMseUJBQXlCLENBQUM7QUFDeEMsY0FBYyx5QkFBeUIsQ0FBQztBQUN4QyxjQUFjLDBCQUEwQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9pZGxlLWRldGVjdGlvbi5jb25maWcnO1xuZXhwb3J0ICogZnJvbSAnLi9pZGxlLWRldGVjdGlvbi5tb2R1bGUnO1xuZXhwb3J0ICogZnJvbSAnLi9pZGxlLWRldGVjdGlvbi5zZXJ2aWNlJztcbiJdfQ==
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
export * from './difference-in-days.util';
|
|
2
|
-
export * from './form.util';
|
|
3
|
-
export * from './idle-detection';
|
|
4
|
-
export * from './is-empty.util';
|
|
5
|
-
export * from './is-equal.util';
|
|
6
|
-
export * from './omit-by.util';
|
|
7
|
-
export * from './pick-by.util';
|
|
8
|
-
export * from './range.util';
|
|
9
|
-
export * from './url.util';
|
|
10
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtbGlmdC9zcmMvbGliL3V0aWxzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsMkJBQTJCLENBQUM7QUFDMUMsY0FBYyxhQUFhLENBQUM7QUFDNUIsY0FBYyxrQkFBa0IsQ0FBQztBQUNqQyxjQUFjLGlCQUFpQixDQUFDO0FBQ2hDLGNBQWMsaUJBQWlCLENBQUM7QUFDaEMsY0FBYyxnQkFBZ0IsQ0FBQztBQUMvQixjQUFjLGdCQUFnQixDQUFDO0FBQy9CLGNBQWMsY0FBYyxDQUFDO0FBQzdCLGNBQWMsWUFBWSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9kaWZmZXJlbmNlLWluLWRheXMudXRpbCc7XG5leHBvcnQgKiBmcm9tICcuL2Zvcm0udXRpbCc7XG5leHBvcnQgKiBmcm9tICcuL2lkbGUtZGV0ZWN0aW9uJztcbmV4cG9ydCAqIGZyb20gJy4vaXMtZW1wdHkudXRpbCc7XG5leHBvcnQgKiBmcm9tICcuL2lzLWVxdWFsLnV0aWwnO1xuZXhwb3J0ICogZnJvbSAnLi9vbWl0LWJ5LnV0aWwnO1xuZXhwb3J0ICogZnJvbSAnLi9waWNrLWJ5LnV0aWwnO1xuZXhwb3J0ICogZnJvbSAnLi9yYW5nZS51dGlsJztcbmV4cG9ydCAqIGZyb20gJy4vdXJsLnV0aWwnO1xuIl19
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
2
|
-
export function isArrayLike(value) {
|
|
3
|
-
return (value != null &&
|
|
4
|
-
typeof value !== 'function' &&
|
|
5
|
-
typeof value.length === 'number' &&
|
|
6
|
-
value.length >= 0 &&
|
|
7
|
-
value.length <= Number.MAX_SAFE_INTEGER);
|
|
8
|
-
}
|
|
9
|
-
export function isPrototype(value) {
|
|
10
|
-
const Ctor = value?.constructor;
|
|
11
|
-
return Ctor && Ctor.prototype === value;
|
|
12
|
-
}
|
|
13
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZXJuYWwudXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1saWZ0L3NyYy9saWIvdXRpbHMvaW50ZXJuYWwudXRpbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSx1REFBdUQ7QUFDdkQsTUFBTSxVQUFVLFdBQVcsQ0FBQyxLQUFVO0lBQ3BDLE9BQU8sQ0FDTCxLQUFLLElBQUksSUFBSTtRQUNiLE9BQU8sS0FBSyxLQUFLLFVBQVU7UUFDM0IsT0FBTyxLQUFLLENBQUMsTUFBTSxLQUFLLFFBQVE7UUFDaEMsS0FBSyxDQUFDLE1BQU0sSUFBSSxDQUFDO1FBQ2pCLEtBQUssQ0FBQyxNQUFNLElBQUksTUFBTSxDQUFDLGdCQUFnQixDQUN4QyxDQUFDO0FBQ0osQ0FBQztBQUVELE1BQU0sVUFBVSxXQUFXLENBQUMsS0FBVTtJQUNwQyxNQUFNLElBQUksR0FBRyxLQUFLLEVBQUUsV0FBVyxDQUFDO0lBQ2hDLE9BQU8sSUFBSSxJQUFJLElBQUksQ0FBQyxTQUFTLEtBQUssS0FBSyxDQUFDO0FBQzFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55ICovXG5leHBvcnQgZnVuY3Rpb24gaXNBcnJheUxpa2UodmFsdWU6IGFueSk6IHZhbHVlIGlzIHtsZW5ndGg6IG51bWJlcn0ge1xuICByZXR1cm4gKFxuICAgIHZhbHVlICE9IG51bGwgJiZcbiAgICB0eXBlb2YgdmFsdWUgIT09ICdmdW5jdGlvbicgJiZcbiAgICB0eXBlb2YgdmFsdWUubGVuZ3RoID09PSAnbnVtYmVyJyAmJlxuICAgIHZhbHVlLmxlbmd0aCA+PSAwICYmXG4gICAgdmFsdWUubGVuZ3RoIDw9IE51bWJlci5NQVhfU0FGRV9JTlRFR0VSXG4gICk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1Byb3RvdHlwZSh2YWx1ZTogYW55KTogYm9vbGVhbiB7XG4gIGNvbnN0IEN0b3IgPSB2YWx1ZT8uY29uc3RydWN0b3I7XG4gIHJldHVybiBDdG9yICYmIEN0b3IucHJvdG90eXBlID09PSB2YWx1ZTtcbn1cbiJdfQ==
|
|
@@ -1,49 +0,0 @@
|
|
|
1
|
-
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
2
|
-
import { isArrayLike, isPrototype } from './internal.util';
|
|
3
|
-
/**
|
|
4
|
-
* Checks if a value is empty.
|
|
5
|
-
*
|
|
6
|
-
* @param {any} value - The value to check for emptiness. It can be of any type.
|
|
7
|
-
* @return {boolean} `true` if the value is empty, `false` otherwise.
|
|
8
|
-
*/
|
|
9
|
-
export function isEmpty(value) {
|
|
10
|
-
if (value === null || value === undefined) {
|
|
11
|
-
// Handles null and undefined
|
|
12
|
-
return true;
|
|
13
|
-
}
|
|
14
|
-
// Handle array-like objects (arrays, strings, jQuery-like collections)
|
|
15
|
-
if ((Array.isArray(value) || typeof value === 'string' || typeof value.splice === 'function') &&
|
|
16
|
-
isArrayLike(value)) {
|
|
17
|
-
return value.length === 0;
|
|
18
|
-
}
|
|
19
|
-
// Handle Maps and Sets
|
|
20
|
-
if (value instanceof Map || value instanceof Set) {
|
|
21
|
-
return value.size === 0;
|
|
22
|
-
}
|
|
23
|
-
// Handle objects
|
|
24
|
-
if (typeof value === 'object') {
|
|
25
|
-
// Check for prototype objects and non-enumerable properties
|
|
26
|
-
if (isPrototype(value)) {
|
|
27
|
-
return Object.getOwnPropertyNames(value).length === 0;
|
|
28
|
-
}
|
|
29
|
-
// Check for enumerable properties
|
|
30
|
-
for (const key in value) {
|
|
31
|
-
if (Object.prototype.hasOwnProperty.call(value, key)) {
|
|
32
|
-
return false;
|
|
33
|
-
}
|
|
34
|
-
}
|
|
35
|
-
return true;
|
|
36
|
-
}
|
|
37
|
-
// All other types (numbers, booleans, functions, etc.)
|
|
38
|
-
return true;
|
|
39
|
-
}
|
|
40
|
-
/**
|
|
41
|
-
* Checks if a value is not null, undefined, empty ArrayLike, Map, Set, or empty object.
|
|
42
|
-
*
|
|
43
|
-
* @param {any} value - The value to check.
|
|
44
|
-
* @return {boolean} Whether the value is not null, undefined, empty ArrayLike, Map, Set, or empty object.
|
|
45
|
-
*/
|
|
46
|
-
export function isNotEmpty(value) {
|
|
47
|
-
return !isEmpty(value);
|
|
48
|
-
}
|
|
49
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaXMtZW1wdHkudXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1saWZ0L3NyYy9saWIvdXRpbHMvaXMtZW1wdHkudXRpbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSx1REFBdUQ7QUFFdkQsT0FBTyxFQUFDLFdBQVcsRUFBRSxXQUFXLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQVd6RDs7Ozs7R0FLRztBQUNILE1BQU0sVUFBVSxPQUFPLENBQUMsS0FBVztJQUNqQyxJQUFJLEtBQUssS0FBSyxJQUFJLElBQUksS0FBSyxLQUFLLFNBQVMsRUFBRSxDQUFDO1FBQzFDLDZCQUE2QjtRQUM3QixPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRCx1RUFBdUU7SUFDdkUsSUFDRSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxJQUFJLE9BQVEsS0FBYSxDQUFDLE1BQU0sS0FBSyxVQUFVLENBQUM7UUFDbEcsV0FBVyxDQUFDLEtBQUssQ0FBQyxFQUNsQixDQUFDO1FBQ0QsT0FBTyxLQUFLLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQztJQUM1QixDQUFDO0lBRUQsdUJBQXVCO0lBQ3ZCLElBQUksS0FBSyxZQUFZLEdBQUcsSUFBSSxLQUFLLFlBQVksR0FBRyxFQUFFLENBQUM7UUFDakQsT0FBTyxLQUFLLENBQUMsSUFBSSxLQUFLLENBQUMsQ0FBQztJQUMxQixDQUFDO0lBRUQsaUJBQWlCO0lBQ2pCLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDOUIsNERBQTREO1FBQzVELElBQUksV0FBVyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDdkIsT0FBTyxNQUFNLENBQUMsbUJBQW1CLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQztRQUN4RCxDQUFDO1FBRUQsa0NBQWtDO1FBQ2xDLEtBQUssTUFBTSxHQUFHLElBQUksS0FBSyxFQUFFLENBQUM7WUFDeEIsSUFBSSxNQUFNLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQ3JELE9BQU8sS0FBSyxDQUFDO1lBQ2YsQ0FBQztRQUNILENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRCx1REFBdUQ7SUFDdkQsT0FBTyxJQUFJLENBQUM7QUFDZCxDQUFDO0FBT0Q7Ozs7O0dBS0c7QUFDSCxNQUFNLFVBQVUsVUFBVSxDQUFDLEtBQVc7SUFDcEMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUN6QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSAqL1xuXG5pbXBvcnQge2lzQXJyYXlMaWtlLCBpc1Byb3RvdHlwZX0gZnJvbSAnLi9pbnRlcm5hbC51dGlsJztcblxuZXhwb3J0IGZ1bmN0aW9uIGlzRW1wdHkodmFsdWU6IHN0cmluZyk6IHZhbHVlIGlzICcnO1xuLyoqXG4gKiBDaGVjayBpZiBhIHZhbHVlIGlzIG51bGwsIHVuZGVmaW5lZCwgZW1wdHkgQXJyYXlMaWtlLCBNYXAsIFNldCBvciBlbXB0eSBvYmplY3QuXG4gKiBAcGFyYW0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMgV2hldGhlciB0aGUgdmFsdWUgaXMgbnVsbCwgdW5kZWZpbmVkLCBlbXB0eSBBcnJheUxpa2UsIE1hcCwgU2V0IG9yIGVtcHR5IG9iamVjdC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzRW1wdHk8VCBleHRlbmRzIG9iamVjdCB8IEFycmF5TGlrZTxhbnk+IHwgTWFwPGFueSwgYW55PiB8IFNldDxhbnk+PihcbiAgdmFsdWU6IFQgfCBudWxsIHwgdW5kZWZpbmVkLFxuKTogdmFsdWUgaXMgbnVsbCB8IHVuZGVmaW5lZDtcbi8qKlxuICogQ2hlY2tzIGlmIGEgdmFsdWUgaXMgZW1wdHkuXG4gKlxuICogQHBhcmFtIHthbnl9IHZhbHVlIC0gVGhlIHZhbHVlIHRvIGNoZWNrIGZvciBlbXB0aW5lc3MuIEl0IGNhbiBiZSBvZiBhbnkgdHlwZS5cbiAqIEByZXR1cm4ge2Jvb2xlYW59IGB0cnVlYCBpZiB0aGUgdmFsdWUgaXMgZW1wdHksIGBmYWxzZWAgb3RoZXJ3aXNlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNFbXB0eSh2YWx1ZT86IGFueSk6IGJvb2xlYW4ge1xuICBpZiAodmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgIC8vIEhhbmRsZXMgbnVsbCBhbmQgdW5kZWZpbmVkXG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvLyBIYW5kbGUgYXJyYXktbGlrZSBvYmplY3RzIChhcnJheXMsIHN0cmluZ3MsIGpRdWVyeS1saWtlIGNvbGxlY3Rpb25zKVxuICBpZiAoXG4gICAgKEFycmF5LmlzQXJyYXkodmFsdWUpIHx8IHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgfHwgdHlwZW9mICh2YWx1ZSBhcyBhbnkpLnNwbGljZSA9PT0gJ2Z1bmN0aW9uJykgJiZcbiAgICBpc0FycmF5TGlrZSh2YWx1ZSlcbiAgKSB7XG4gICAgcmV0dXJuIHZhbHVlLmxlbmd0aCA9PT0gMDtcbiAgfVxuXG4gIC8vIEhhbmRsZSBNYXBzIGFuZCBTZXRzXG4gIGlmICh2YWx1ZSBpbnN0YW5jZW9mIE1hcCB8fCB2YWx1ZSBpbnN0YW5jZW9mIFNldCkge1xuICAgIHJldHVybiB2YWx1ZS5zaXplID09PSAwO1xuICB9XG5cbiAgLy8gSGFuZGxlIG9iamVjdHNcbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcpIHtcbiAgICAvLyBDaGVjayBmb3IgcHJvdG90eXBlIG9iamVjdHMgYW5kIG5vbi1lbnVtZXJhYmxlIHByb3BlcnRpZXNcbiAgICBpZiAoaXNQcm90b3R5cGUodmFsdWUpKSB7XG4gICAgICByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModmFsdWUpLmxlbmd0aCA9PT0gMDtcbiAgICB9XG5cbiAgICAvLyBDaGVjayBmb3IgZW51bWVyYWJsZSBwcm9wZXJ0aWVzXG4gICAgZm9yIChjb25zdCBrZXkgaW4gdmFsdWUpIHtcbiAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodmFsdWUsIGtleSkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8vIEFsbCBvdGhlciB0eXBlcyAobnVtYmVycywgYm9vbGVhbnMsIGZ1bmN0aW9ucywgZXRjLilcbiAgcmV0dXJuIHRydWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc05vdEVtcHR5KHZhbHVlOiAnJyk6IGZhbHNlO1xuZXhwb3J0IGZ1bmN0aW9uIGlzTm90RW1wdHkodmFsdWU6IHN0cmluZyk6IHZhbHVlIGlzIEV4Y2x1ZGU8c3RyaW5nLCAnJz47XG5leHBvcnQgZnVuY3Rpb24gaXNOb3RFbXB0eTxUIGV4dGVuZHMgb2JqZWN0IHwgQXJyYXlMaWtlPGFueT4gfCBNYXA8YW55LCBhbnk+IHwgU2V0PGFueT4+KFxuICB2YWx1ZTogVCB8IG51bGwgfCB1bmRlZmluZWQsXG4pOiB2YWx1ZSBpcyBUO1xuLyoqXG4gKiBDaGVja3MgaWYgYSB2YWx1ZSBpcyBub3QgbnVsbCwgdW5kZWZpbmVkLCBlbXB0eSBBcnJheUxpa2UsIE1hcCwgU2V0LCBvciBlbXB0eSBvYmplY3QuXG4gKlxuICogQHBhcmFtIHthbnl9IHZhbHVlIC0gVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybiB7Ym9vbGVhbn0gV2hldGhlciB0aGUgdmFsdWUgaXMgbm90IG51bGwsIHVuZGVmaW5lZCwgZW1wdHkgQXJyYXlMaWtlLCBNYXAsIFNldCwgb3IgZW1wdHkgb2JqZWN0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNOb3RFbXB0eSh2YWx1ZT86IGFueSk6IGJvb2xlYW4ge1xuICByZXR1cm4gIWlzRW1wdHkodmFsdWUpO1xufVxuIl19
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Check if two values are deeply equal.
|
|
3
|
-
* @param {T} value1 - The first value to compare.
|
|
4
|
-
* @param {T} value2 - The second value to compare.
|
|
5
|
-
* @returns {boolean} - Returns true if the values are deeply equal, otherwise false.
|
|
6
|
-
*/
|
|
7
|
-
export function isEqual(value1, value2) {
|
|
8
|
-
if (value1 === value2)
|
|
9
|
-
return true;
|
|
10
|
-
if (typeof value1 !== 'object' || typeof value2 !== 'object' || value1 === null || value2 === null) {
|
|
11
|
-
return false;
|
|
12
|
-
}
|
|
13
|
-
const keys1 = Object.keys(value1);
|
|
14
|
-
const keys2 = Object.keys(value2);
|
|
15
|
-
if (keys1.length !== keys2.length)
|
|
16
|
-
return false;
|
|
17
|
-
for (const key of keys1) {
|
|
18
|
-
if (!keys2.includes(key) || !isEqual(value1[key], value2[key])) {
|
|
19
|
-
return false;
|
|
20
|
-
}
|
|
21
|
-
}
|
|
22
|
-
return true;
|
|
23
|
-
}
|
|
24
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaXMtZXF1YWwudXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1saWZ0L3NyYy9saWIvdXRpbHMvaXMtZXF1YWwudXRpbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7R0FLRztBQUNILE1BQU0sVUFBVSxPQUFPLENBQUksTUFBUyxFQUFFLE1BQVM7SUFDN0MsSUFBSSxNQUFNLEtBQUssTUFBTTtRQUFFLE9BQU8sSUFBSSxDQUFDO0lBRW5DLElBQUksT0FBTyxNQUFNLEtBQUssUUFBUSxJQUFJLE9BQU8sTUFBTSxLQUFLLFFBQVEsSUFBSSxNQUFNLEtBQUssSUFBSSxJQUFJLE1BQU0sS0FBSyxJQUFJLEVBQUUsQ0FBQztRQUNuRyxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFRCxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBbUIsQ0FBQztJQUNwRCxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBbUIsQ0FBQztJQUVwRCxJQUFJLEtBQUssQ0FBQyxNQUFNLEtBQUssS0FBSyxDQUFDLE1BQU07UUFBRSxPQUFPLEtBQUssQ0FBQztJQUVoRCxLQUFLLE1BQU0sR0FBRyxJQUFJLEtBQUssRUFBRSxDQUFDO1FBQ3hCLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQy9ELE9BQU8sS0FBSyxDQUFDO1FBQ2YsQ0FBQztJQUNILENBQUM7SUFFRCxPQUFPLElBQUksQ0FBQztBQUNkLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENoZWNrIGlmIHR3byB2YWx1ZXMgYXJlIGRlZXBseSBlcXVhbC5cbiAqIEBwYXJhbSB7VH0gdmFsdWUxIC0gVGhlIGZpcnN0IHZhbHVlIHRvIGNvbXBhcmUuXG4gKiBAcGFyYW0ge1R9IHZhbHVlMiAtIFRoZSBzZWNvbmQgdmFsdWUgdG8gY29tcGFyZS5cbiAqIEByZXR1cm5zIHtib29sZWFufSAtIFJldHVybnMgdHJ1ZSBpZiB0aGUgdmFsdWVzIGFyZSBkZWVwbHkgZXF1YWwsIG90aGVyd2lzZSBmYWxzZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzRXF1YWw8VD4odmFsdWUxOiBULCB2YWx1ZTI6IFQpOiBib29sZWFuIHtcbiAgaWYgKHZhbHVlMSA9PT0gdmFsdWUyKSByZXR1cm4gdHJ1ZTtcblxuICBpZiAodHlwZW9mIHZhbHVlMSAhPT0gJ29iamVjdCcgfHwgdHlwZW9mIHZhbHVlMiAhPT0gJ29iamVjdCcgfHwgdmFsdWUxID09PSBudWxsIHx8IHZhbHVlMiA9PT0gbnVsbCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGNvbnN0IGtleXMxID0gT2JqZWN0LmtleXModmFsdWUxKSBhcyBBcnJheTxrZXlvZiBUPjtcbiAgY29uc3Qga2V5czIgPSBPYmplY3Qua2V5cyh2YWx1ZTIpIGFzIEFycmF5PGtleW9mIFQ+O1xuXG4gIGlmIChrZXlzMS5sZW5ndGggIT09IGtleXMyLmxlbmd0aCkgcmV0dXJuIGZhbHNlO1xuXG4gIGZvciAoY29uc3Qga2V5IG9mIGtleXMxKSB7XG4gICAgaWYgKCFrZXlzMi5pbmNsdWRlcyhrZXkpIHx8ICFpc0VxdWFsKHZhbHVlMVtrZXldLCB2YWx1ZTJba2V5XSkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn1cbiJdfQ==
|
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
2
|
-
export function isPromise(obj) {
|
|
3
|
-
return !!obj && typeof obj.then === 'function';
|
|
4
|
-
}
|
|
5
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaXMtcHJvbWlzZS51dGlsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LWxpZnQvc3JjL2xpYi91dGlscy9pcy1wcm9taXNlLnV0aWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsOERBQThEO0FBQzlELE1BQU0sVUFBVSxTQUFTLENBQUMsR0FBUTtJQUNoQyxPQUFPLENBQUMsQ0FBQyxHQUFHLElBQUksT0FBTyxHQUFHLENBQUMsSUFBSSxLQUFLLFVBQVUsQ0FBQztBQUNqRCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbmV4cG9ydCBmdW5jdGlvbiBpc1Byb21pc2Uob2JqOiBhbnkpOiBvYmogaXMgUHJvbWlzZTxhbnk+IHtcbiAgcmV0dXJuICEhb2JqICYmIHR5cGVvZiBvYmoudGhlbiA9PT0gJ2Z1bmN0aW9uJztcbn1cbiJdfQ==
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
import { pickBy } from './pick-by.util';
|
|
2
|
-
/**
|
|
3
|
-
* Create an object composed of object properties that do not satisfy a given condition.
|
|
4
|
-
* @param {T} source - The object to omit properties from.
|
|
5
|
-
* @param {(value: T[keyof T], key: string) => boolean} predicate - The function invoked per property.
|
|
6
|
-
* @returns {Partial<T>} - Returns the new object.
|
|
7
|
-
*/
|
|
8
|
-
export function omitBy(source, predicate) {
|
|
9
|
-
// Negate the predicate and pass it to pickBy
|
|
10
|
-
return pickBy(source, (value, key) => !predicate(value, key));
|
|
11
|
-
}
|
|
12
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib21pdC1ieS51dGlsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LWxpZnQvc3JjL2xpYi91dGlscy9vbWl0LWJ5LnV0aWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBRXRDOzs7OztHQUtHO0FBQ0gsTUFBTSxVQUFVLE1BQU0sQ0FBSSxNQUFTLEVBQUUsU0FBc0Q7SUFDekYsNkNBQTZDO0lBQzdDLE9BQU8sTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLEtBQUssRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ2hFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge3BpY2tCeX0gZnJvbSAnLi9waWNrLWJ5LnV0aWwnO1xuXG4vKipcbiAqIENyZWF0ZSBhbiBvYmplY3QgY29tcG9zZWQgb2Ygb2JqZWN0IHByb3BlcnRpZXMgdGhhdCBkbyBub3Qgc2F0aXNmeSBhIGdpdmVuIGNvbmRpdGlvbi5cbiAqIEBwYXJhbSB7VH0gc291cmNlIC0gVGhlIG9iamVjdCB0byBvbWl0IHByb3BlcnRpZXMgZnJvbS5cbiAqIEBwYXJhbSB7KHZhbHVlOiBUW2tleW9mIFRdLCBrZXk6IHN0cmluZykgPT4gYm9vbGVhbn0gcHJlZGljYXRlIC0gVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIHByb3BlcnR5LlxuICogQHJldHVybnMge1BhcnRpYWw8VD59IC0gUmV0dXJucyB0aGUgbmV3IG9iamVjdC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG9taXRCeTxUPihzb3VyY2U6IFQsIHByZWRpY2F0ZTogKHZhbHVlOiBUW2tleW9mIFRdLCBrZXk6IHN0cmluZykgPT4gYm9vbGVhbik6IFBhcnRpYWw8VD4ge1xuICAvLyBOZWdhdGUgdGhlIHByZWRpY2F0ZSBhbmQgcGFzcyBpdCB0byBwaWNrQnlcbiAgcmV0dXJuIHBpY2tCeShzb3VyY2UsICh2YWx1ZSwga2V5KSA9PiAhcHJlZGljYXRlKHZhbHVlLCBrZXkpKTtcbn1cbiJdfQ==
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Create an object composed of object properties that satisfy a given condition.
|
|
3
|
-
* @param {T} source - The object to pick properties from.
|
|
4
|
-
* @param {(value: T[keyof T], key: string) => boolean} predicate - The function invoked per property.
|
|
5
|
-
* @returns {Partial<T>} - Returns the new object.
|
|
6
|
-
*/
|
|
7
|
-
export function pickBy(source, predicate) {
|
|
8
|
-
const result = {};
|
|
9
|
-
for (const key in source) {
|
|
10
|
-
if (Object.prototype.hasOwnProperty.call(source, key) && predicate(source[key], key)) {
|
|
11
|
-
result[key] = source[key];
|
|
12
|
-
}
|
|
13
|
-
}
|
|
14
|
-
return result;
|
|
15
|
-
}
|
|
16
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGljay1ieS51dGlsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LWxpZnQvc3JjL2xpYi91dGlscy9waWNrLWJ5LnV0aWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7O0dBS0c7QUFDSCxNQUFNLFVBQVUsTUFBTSxDQUFJLE1BQVMsRUFBRSxTQUFzRDtJQUN6RixNQUFNLE1BQU0sR0FBZSxFQUFFLENBQUM7SUFFOUIsS0FBSyxNQUFNLEdBQUcsSUFBSSxNQUFNLEVBQUUsQ0FBQztRQUN6QixJQUFJLE1BQU0sQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLElBQUksU0FBUyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ3JGLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDNUIsQ0FBQztJQUNILENBQUM7SUFFRCxPQUFPLE1BQU0sQ0FBQztBQUNoQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDcmVhdGUgYW4gb2JqZWN0IGNvbXBvc2VkIG9mIG9iamVjdCBwcm9wZXJ0aWVzIHRoYXQgc2F0aXNmeSBhIGdpdmVuIGNvbmRpdGlvbi5cbiAqIEBwYXJhbSB7VH0gc291cmNlIC0gVGhlIG9iamVjdCB0byBwaWNrIHByb3BlcnRpZXMgZnJvbS5cbiAqIEBwYXJhbSB7KHZhbHVlOiBUW2tleW9mIFRdLCBrZXk6IHN0cmluZykgPT4gYm9vbGVhbn0gcHJlZGljYXRlIC0gVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIHByb3BlcnR5LlxuICogQHJldHVybnMge1BhcnRpYWw8VD59IC0gUmV0dXJucyB0aGUgbmV3IG9iamVjdC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBpY2tCeTxUPihzb3VyY2U6IFQsIHByZWRpY2F0ZTogKHZhbHVlOiBUW2tleW9mIFRdLCBrZXk6IHN0cmluZykgPT4gYm9vbGVhbik6IFBhcnRpYWw8VD4ge1xuICBjb25zdCByZXN1bHQ6IFBhcnRpYWw8VD4gPSB7fTtcblxuICBmb3IgKGNvbnN0IGtleSBpbiBzb3VyY2UpIHtcbiAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSAmJiBwcmVkaWNhdGUoc291cmNlW2tleV0sIGtleSkpIHtcbiAgICAgIHJlc3VsdFtrZXldID0gc291cmNlW2tleV07XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn1cbiJdfQ==
|
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Creates an array of numbers (positive and/or negative) progressing from start up to, but not including, end.
|
|
3
|
-
* A step of -1 is used if a negative start is specified without an end or step.
|
|
4
|
-
* If end is not specified, it's set to start with start then set to 0.
|
|
5
|
-
*
|
|
6
|
-
* @param {number} start The start of the range.
|
|
7
|
-
* @param {number} end The end of the range.
|
|
8
|
-
* @param {number} step The value to increment or decrement by.
|
|
9
|
-
* @param {boolean} [fromRight] Specify iterating from right to left.
|
|
10
|
-
* @returns {Array} Returns the range of numbers.
|
|
11
|
-
*/
|
|
12
|
-
export function range(start, end, step, fromRight = false) {
|
|
13
|
-
// if range takes only 1 input, that input is end, start with 0
|
|
14
|
-
if (end === undefined) {
|
|
15
|
-
end = start;
|
|
16
|
-
start = 0;
|
|
17
|
-
}
|
|
18
|
-
step = step === undefined ? (start < end ? 1 : -1) : step;
|
|
19
|
-
let index = -1;
|
|
20
|
-
let length = Math.max(Math.ceil((end - start) / (step || 1)), 0);
|
|
21
|
-
const result = new Array(length);
|
|
22
|
-
while (length--) {
|
|
23
|
-
result[fromRight ? length : ++index] = start;
|
|
24
|
-
start += step;
|
|
25
|
-
}
|
|
26
|
-
return result;
|
|
27
|
-
}
|
|
28
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmFuZ2UudXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1saWZ0L3NyYy9saWIvdXRpbHMvcmFuZ2UudXRpbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7OztHQVVHO0FBQ0gsTUFBTSxVQUFVLEtBQUssQ0FBQyxLQUFhLEVBQUUsR0FBd0IsRUFBRSxJQUF5QixFQUFFLFNBQVMsR0FBRyxLQUFLO0lBQ3pHLCtEQUErRDtJQUMvRCxJQUFJLEdBQUcsS0FBSyxTQUFTLEVBQUUsQ0FBQztRQUN0QixHQUFHLEdBQUcsS0FBSyxDQUFDO1FBQ1osS0FBSyxHQUFHLENBQUMsQ0FBQztJQUNaLENBQUM7SUFFRCxJQUFJLEdBQUcsSUFBSSxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztJQUUxRCxJQUFJLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQztJQUNmLElBQUksTUFBTSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ2pFLE1BQU0sTUFBTSxHQUFHLElBQUksS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBRWpDLE9BQU8sTUFBTSxFQUFFLEVBQUUsQ0FBQztRQUNoQixNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLEdBQUcsS0FBSyxDQUFDO1FBQzdDLEtBQUssSUFBSSxJQUFJLENBQUM7SUFDaEIsQ0FBQztJQUNELE9BQU8sTUFBTSxDQUFDO0FBQ2hCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENyZWF0ZXMgYW4gYXJyYXkgb2YgbnVtYmVycyAocG9zaXRpdmUgYW5kL29yIG5lZ2F0aXZlKSBwcm9ncmVzc2luZyBmcm9tIHN0YXJ0IHVwIHRvLCBidXQgbm90IGluY2x1ZGluZywgZW5kLlxuICogQSBzdGVwIG9mIC0xIGlzIHVzZWQgaWYgYSBuZWdhdGl2ZSBzdGFydCBpcyBzcGVjaWZpZWQgd2l0aG91dCBhbiBlbmQgb3Igc3RlcC5cbiAqIElmIGVuZCBpcyBub3Qgc3BlY2lmaWVkLCBpdCdzIHNldCB0byBzdGFydCB3aXRoIHN0YXJ0IHRoZW4gc2V0IHRvIDAuXG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IHN0YXJ0IFRoZSBzdGFydCBvZiB0aGUgcmFuZ2UuXG4gKiBAcGFyYW0ge251bWJlcn0gZW5kIFRoZSBlbmQgb2YgdGhlIHJhbmdlLlxuICogQHBhcmFtIHtudW1iZXJ9IHN0ZXAgVGhlIHZhbHVlIHRvIGluY3JlbWVudCBvciBkZWNyZW1lbnQgYnkuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtmcm9tUmlnaHRdIFNwZWNpZnkgaXRlcmF0aW5nIGZyb20gcmlnaHQgdG8gbGVmdC5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgcmFuZ2Ugb2YgbnVtYmVycy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJhbmdlKHN0YXJ0OiBudW1iZXIsIGVuZD86IG51bWJlciB8IHVuZGVmaW5lZCwgc3RlcD86IG51bWJlciB8IHVuZGVmaW5lZCwgZnJvbVJpZ2h0ID0gZmFsc2UpIHtcbiAgLy8gaWYgcmFuZ2UgdGFrZXMgb25seSAxIGlucHV0LCB0aGF0IGlucHV0IGlzIGVuZCwgc3RhcnQgd2l0aCAwXG4gIGlmIChlbmQgPT09IHVuZGVmaW5lZCkge1xuICAgIGVuZCA9IHN0YXJ0O1xuICAgIHN0YXJ0ID0gMDtcbiAgfVxuXG4gIHN0ZXAgPSBzdGVwID09PSB1bmRlZmluZWQgPyAoc3RhcnQgPCBlbmQgPyAxIDogLTEpIDogc3RlcDtcblxuICBsZXQgaW5kZXggPSAtMTtcbiAgbGV0IGxlbmd0aCA9IE1hdGgubWF4KE1hdGguY2VpbCgoZW5kIC0gc3RhcnQpIC8gKHN0ZXAgfHwgMSkpLCAwKTtcbiAgY29uc3QgcmVzdWx0ID0gbmV3IEFycmF5KGxlbmd0aCk7XG5cbiAgd2hpbGUgKGxlbmd0aC0tKSB7XG4gICAgcmVzdWx0W2Zyb21SaWdodCA/IGxlbmd0aCA6ICsraW5kZXhdID0gc3RhcnQ7XG4gICAgc3RhcnQgKz0gc3RlcDtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuIl19
|