@zajno/common 1.3.5 → 1.3.9
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/coverage/clover.xml +223 -168
- package/coverage/coverage-final.json +9 -8
- package/coverage/lcov-report/index.html +44 -29
- package/coverage/lcov-report/src/__tests__/helpers/index.html +1 -1
- package/coverage/lcov-report/src/__tests__/helpers/main.ts.html +1 -1
- package/coverage/lcov-report/src/async/arrays.ts.html +1 -1
- package/coverage/lcov-report/src/async/index.html +1 -1
- package/coverage/lcov-report/src/dates/calc.ts.html +2 -2
- package/coverage/lcov-report/src/dates/convert.ts.html +7 -40
- package/coverage/lcov-report/src/dates/datex.ts.html +1 -1
- package/coverage/lcov-report/src/dates/format.ts.html +8 -5
- package/coverage/lcov-report/src/dates/index.html +13 -13
- package/coverage/lcov-report/src/dates/index.ts.html +1 -1
- package/coverage/lcov-report/src/dates/parse.ts.html +42 -6
- package/coverage/lcov-report/src/dates/period.ts.html +1 -1
- package/coverage/lcov-report/src/dates/shift.ts.html +2 -2
- package/coverage/lcov-report/src/dates/types.ts.html +1 -1
- package/coverage/lcov-report/src/dates/yearDate.ts.html +2 -2
- package/coverage/lcov-report/src/enumHelper.ts.html +1 -1
- package/coverage/lcov-report/src/event.ts.html +1 -1
- package/coverage/lcov-report/src/fields/index.html +111 -0
- package/coverage/lcov-report/src/{viewModels/SelectViewModel.ts.html → fields/update.ts.html} +118 -178
- package/coverage/lcov-report/src/index.html +1 -1
- package/coverage/lcov-report/src/lazy.light.ts.html +1 -1
- package/coverage/lcov-report/src/logger/batch.ts.html +1 -1
- package/coverage/lcov-report/src/logger/console.ts.html +1 -1
- package/coverage/lcov-report/src/logger/index.html +1 -1
- package/coverage/lcov-report/src/logger/index.ts.html +1 -1
- package/coverage/lcov-report/src/logger/named.ts.html +1 -1
- package/coverage/lcov-report/src/logger/proxy.ts.html +1 -1
- package/coverage/lcov-report/src/math/arrays.ts.html +1 -1
- package/coverage/lcov-report/src/math/calc.ts.html +19 -10
- package/coverage/lcov-report/src/math/distribution.ts.html +1 -1
- package/coverage/lcov-report/src/math/index.html +19 -19
- package/coverage/lcov-report/src/math/index.ts.html +1 -1
- package/coverage/lcov-report/src/transitionObserver.ts.html +2 -2
- package/coverage/lcov-report/src/types.ts.html +1 -1
- package/coverage/lcov-report/src/validation/ValidationErrors.ts.html +1 -1
- package/coverage/lcov-report/src/validation/creditCard.ts.html +1 -1
- package/coverage/lcov-report/src/validation/helpers.ts.html +1 -1
- package/coverage/lcov-report/src/validation/index.html +1 -1
- package/coverage/lcov-report/src/validation/index.ts.html +1 -1
- package/coverage/lcov-report/src/validation/types.ts.html +1 -1
- package/coverage/lcov-report/src/validation/validators.ts.html +1 -1
- package/coverage/lcov-report/src/validation/wrappers.ts.html +1 -1
- package/coverage/lcov-report/src/viewModels/FlagModel.ts.html +51 -9
- package/coverage/lcov-report/src/viewModels/MultiSelectModel.ts.html +1 -1
- package/coverage/lcov-report/src/viewModels/NumberModel.ts.html +1 -1
- package/coverage/lcov-report/src/viewModels/SelectModel.ts.html +1 -1
- package/coverage/lcov-report/src/viewModels/Validatable.ts.html +1 -1
- package/coverage/lcov-report/src/viewModels/index.html +16 -16
- package/coverage/lcov-report/src/viewModels/wrappers.ts.html +1 -1
- package/coverage/lcov-report/update.ts.html +374 -0
- package/coverage/lcov.info +467 -330
- package/lib/dates/calc.js +3 -3
- package/lib/dates/calc.js.map +1 -1
- package/lib/dates/convert.d.ts +0 -2
- package/lib/dates/convert.d.ts.map +1 -1
- package/lib/dates/convert.js +10 -20
- package/lib/dates/convert.js.map +1 -1
- package/lib/dates/format.d.ts.map +1 -1
- package/lib/dates/format.js +4 -3
- package/lib/dates/format.js.map +1 -1
- package/lib/dates/parse.d.ts +2 -0
- package/lib/dates/parse.d.ts.map +1 -1
- package/lib/dates/parse.js +12 -1
- package/lib/dates/parse.js.map +1 -1
- package/lib/dates/shift.js +6 -6
- package/lib/dates/shift.js.map +1 -1
- package/lib/dates/yearDate.js +3 -3
- package/lib/dates/yearDate.js.map +1 -1
- package/lib/disposer.d.ts +22 -0
- package/lib/disposer.d.ts.map +1 -0
- package/lib/disposer.js +65 -0
- package/lib/disposer.js.map +1 -0
- package/lib/fields/update.d.ts +17 -6
- package/lib/fields/update.d.ts.map +1 -1
- package/lib/fields/update.js +29 -13
- package/lib/fields/update.js.map +1 -1
- package/lib/ident.d.ts +6 -0
- package/lib/ident.d.ts.map +1 -0
- package/lib/ident.js +3 -0
- package/lib/ident.js.map +1 -0
- package/lib/math/calc.d.ts +1 -0
- package/lib/math/calc.d.ts.map +1 -1
- package/lib/math/calc.js +5 -1
- package/lib/math/calc.js.map +1 -1
- package/lib/transitionObserver.d.ts +1 -1
- package/lib/transitionObserver.d.ts.map +1 -1
- package/lib/unsubscriber.d.ts +1 -16
- package/lib/unsubscriber.d.ts.map +1 -1
- package/lib/unsubscriber.js +6 -49
- package/lib/unsubscriber.js.map +1 -1
- package/lib/viewModels/FlagModel.d.ts +2 -0
- package/lib/viewModels/FlagModel.d.ts.map +1 -1
- package/lib/viewModels/FlagModel.js +18 -0
- package/lib/viewModels/FlagModel.js.map +1 -1
- package/package.json +1 -1
- package/src/dates/calc.ts +1 -1
- package/src/dates/convert.ts +1 -12
- package/src/dates/format.ts +2 -1
- package/src/dates/parse.ts +12 -0
- package/src/dates/shift.ts +1 -1
- package/src/dates/yearDate.ts +1 -1
- package/src/disposer.ts +81 -0
- package/src/fields/__tests__/fields.update.test.ts +73 -0
- package/src/fields/update.ts +54 -20
- package/src/ident.ts +8 -0
- package/src/math/calc.ts +3 -0
- package/src/transitionObserver.ts +1 -1
- package/src/unsubscriber.ts +9 -68
- package/src/viewModels/FlagModel.ts +14 -0
- package/coverage/lcov-report/src/viewModels/LabeledFlagModel.ts.html +0 -146
- package/coverage/lcov-report/transitionObserver.ts.html +0 -572
- package/yarn-error.log +0 -3709
package/lib/math/calc.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.random = exports.roundHalf = exports.roundNumber = exports.getIntersection = exports.contains = exports.clamp01 = exports.clamp = void 0;
|
|
3
|
+
exports.badRandomString = exports.random = exports.roundHalf = exports.roundNumber = exports.getIntersection = exports.contains = exports.clamp01 = exports.clamp = void 0;
|
|
4
4
|
function clamp(val, min = undefined, max = undefined, cycle = false) {
|
|
5
5
|
if (min != null && val < min) {
|
|
6
6
|
return (max != null && cycle) ? max : min;
|
|
@@ -67,4 +67,8 @@ function random(min = 0, max = 1, trunc = true) {
|
|
|
67
67
|
return trunc ? Math.trunc(res) : res;
|
|
68
68
|
}
|
|
69
69
|
exports.random = random;
|
|
70
|
+
function badRandomString(length = 12) {
|
|
71
|
+
return Math.random().toString(26).slice(2, clamp(length, 0, 12));
|
|
72
|
+
}
|
|
73
|
+
exports.badRandomString = badRandomString;
|
|
70
74
|
//# sourceMappingURL=calc.js.map
|
package/lib/math/calc.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"calc.js","sourceRoot":"","sources":["../../src/math/calc.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"calc.js","sourceRoot":"","sources":["../../src/math/calc.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transitionObserver.d.ts","sourceRoot":"","sources":["../src/transitionObserver.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAS,MAAM,SAAS,CAAC;AAExC,OAAO,EAAE,WAAW,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"transitionObserver.d.ts","sourceRoot":"","sources":["../src/transitionObserver.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAS,MAAM,SAAS,CAAC;AAExC,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAEzC,qBAAa,kBAAkB,CAAC,CAAC,CAAE,YAAW,WAAW;IAErD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAkB;IACzC,OAAO,CAAC,OAAO,CAAiB;IAEhC,OAAO,CAAC,SAAS,CAAa;IAC9B,OAAO,CAAC,KAAK,CAAgB;IAE7B,OAAO,CAAC,KAAK,CAAgB;IAC7B,OAAO,CAAC,GAAG,CAAgB;IAE3B,OAAO,CAAC,GAAG,CAAgB;IAC3B,OAAO,CAAC,SAAS,CAAS;IAE1B,OAAO,CAAC,QAAQ,CAAoB;IACpC,OAAO,CAAC,cAAc,CAA4B;IAElD,OAAO,CAAC,MAAM,CAAoC;gBAEtC,MAAM,CAAC,EAAE,MAAM,CAAC;IAM5B,IAAW,KAAK,IAAI,MAAM,CAAC,CAAC,CAAC,CAAwB;IACrD,IAAW,YAAY,MAAyB;IAEhD,IAAW,WAAW,YAAqC;IAC3D,OAAO,KAAK,WAAW,GAA0C;IAEjE,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC;IAQvB,IAAI,CAAC,IAAI,EAAE,CAAC;IAKZ,EAAE,CAAC,EAAE,EAAE,CAAC;IAKR,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,GAAG;IAQpB,SAAS;IAOT,QAAQ,CAAC,MAAM,UAAO;IAKtB,UAAU;IAIV,aAAa;IAKb,UAAU,CAAC,OAAO,GAAE,MAAa;IA2BjC,OAAO;IAMP,aAAa,CAAC,IAAI,EAAE,MAAM;IAK1B,OAAO,aASL;IAEF,OAAO,CAAC,WAAW,CAiCjB;IAEF,OAAO,CAAC,cAAc;CAQzB"}
|
package/lib/unsubscriber.d.ts
CHANGED
|
@@ -1,17 +1,2 @@
|
|
|
1
|
-
export
|
|
2
|
-
dispose(): void;
|
|
3
|
-
}
|
|
4
|
-
export interface Disposer {
|
|
5
|
-
(): void;
|
|
6
|
-
}
|
|
7
|
-
export declare class Unsubscriber {
|
|
8
|
-
readonly logName: string;
|
|
9
|
-
private readonly _disposers;
|
|
10
|
-
private readonly _map;
|
|
11
|
-
constructor(logName?: string);
|
|
12
|
-
add(d: Disposer | IDisposable, id?: string): void;
|
|
13
|
-
execute(id: string): void;
|
|
14
|
-
dispose(log?: boolean): void;
|
|
15
|
-
}
|
|
16
|
-
export declare function combineDisposers(...items: Disposer[]): Disposer;
|
|
1
|
+
export { IDisposable, DisposeFunction as Disposer, combineDisposers, Disposer as Unsubscriber, Disposable, } from './disposer';
|
|
17
2
|
//# sourceMappingURL=unsubscriber.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"unsubscriber.d.ts","sourceRoot":"","sources":["../src/unsubscriber.ts"],"names":[],"mappings":"AAEA,
|
|
1
|
+
{"version":3,"file":"unsubscriber.d.ts","sourceRoot":"","sources":["../src/unsubscriber.ts"],"names":[],"mappings":"AAEA,OAAO,EACH,WAAW,EACX,eAAe,IAAI,QAAQ,EAC3B,gBAAgB,EAChB,QAAQ,IAAI,YAAY,EACxB,UAAU,GACb,MAAM,YAAY,CAAC"}
|
package/lib/unsubscriber.js
CHANGED
|
@@ -1,54 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
3
|
+
exports.Disposable = exports.Unsubscriber = exports.combineDisposers = void 0;
|
|
4
4
|
const tslib_1 = require("tslib");
|
|
5
5
|
const logger_1 = tslib_1.__importDefault(require("./logger"));
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
}
|
|
12
|
-
add(d, id) {
|
|
13
|
-
if (!d) {
|
|
14
|
-
return;
|
|
15
|
-
}
|
|
16
|
-
const dd = typeof d !== 'function'
|
|
17
|
-
? (() => d.dispose ? d.dispose() : null)
|
|
18
|
-
: d;
|
|
19
|
-
this._disposers.push(dd);
|
|
20
|
-
if (id) {
|
|
21
|
-
// dispose previous identified disposer
|
|
22
|
-
if (this._map.has(id)) {
|
|
23
|
-
this.execute(id);
|
|
24
|
-
}
|
|
25
|
-
this._map.set(id, dd);
|
|
26
|
-
}
|
|
27
|
-
}
|
|
28
|
-
execute(id) {
|
|
29
|
-
const d = this._map.get(id);
|
|
30
|
-
if (!d) {
|
|
31
|
-
return;
|
|
32
|
-
}
|
|
33
|
-
this._map.delete(id);
|
|
34
|
-
const i = this._disposers.indexOf(d);
|
|
35
|
-
if (i >= 0) {
|
|
36
|
-
this._disposers.splice(i, 1);
|
|
37
|
-
}
|
|
38
|
-
d();
|
|
39
|
-
}
|
|
40
|
-
dispose(log = false) {
|
|
41
|
-
if (log) {
|
|
42
|
-
logger_1.default.log(`[Disposer:${this.logName || '<unknown>'}] Disposing ${this._disposers.length} items including named ones:`, Array.from(this._map.entries()).map(e => e[0]));
|
|
43
|
-
}
|
|
44
|
-
this._disposers.forEach(d => d());
|
|
45
|
-
this._disposers.length = 0;
|
|
46
|
-
this._map.clear();
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
exports.Unsubscriber = Unsubscriber;
|
|
50
|
-
function combineDisposers(...items) {
|
|
51
|
-
return () => items.forEach(i => i());
|
|
52
|
-
}
|
|
53
|
-
exports.combineDisposers = combineDisposers;
|
|
6
|
+
var disposer_1 = require("./disposer");
|
|
7
|
+
Object.defineProperty(exports, "combineDisposers", { enumerable: true, get: function () { return disposer_1.combineDisposers; } });
|
|
8
|
+
Object.defineProperty(exports, "Unsubscriber", { enumerable: true, get: function () { return disposer_1.Disposer; } });
|
|
9
|
+
Object.defineProperty(exports, "Disposable", { enumerable: true, get: function () { return disposer_1.Disposable; } });
|
|
10
|
+
logger_1.default.warn('@zajno/common: importing module "unsusbcriber" is deprecated; please change your import to "disposer" module.');
|
|
54
11
|
//# sourceMappingURL=unsubscriber.js.map
|
package/lib/unsubscriber.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"unsubscriber.js","sourceRoot":"","sources":["../src/unsubscriber.ts"],"names":[],"mappings":";;;;AAAA,8DAA8B;
|
|
1
|
+
{"version":3,"file":"unsubscriber.js","sourceRoot":"","sources":["../src/unsubscriber.ts"],"names":[],"mappings":";;;;AAAA,8DAA8B;AAE9B,uCAMoB;AAHhB,4GAAA,gBAAgB,OAAA;AAChB,wGAAA,QAAQ,OAAgB;AACxB,sGAAA,UAAU,OAAA;AAGd,gBAAM,CAAC,IAAI,CAAC,+GAA+G,CAAC,CAAC"}
|
|
@@ -13,6 +13,8 @@ export declare class FlagModel implements IFlagModel, IFlagModelReadonly {
|
|
|
13
13
|
get value(): boolean;
|
|
14
14
|
set value(value: boolean);
|
|
15
15
|
get isDefault(): boolean;
|
|
16
|
+
setTrue: () => boolean;
|
|
17
|
+
setFalse: () => boolean;
|
|
16
18
|
toggle: () => void;
|
|
17
19
|
reset: () => void;
|
|
18
20
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FlagModel.d.ts","sourceRoot":"","sources":["../../src/viewModels/FlagModel.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAE9C,MAAM,WAAW,UAAW,SAAQ,WAAW,CAAC,OAAO,CAAC,EAAE,eAAe;IACrE,MAAM,IAAI,IAAI,CAAC;CAClB;AAED,oBAAY,kBAAkB,GAAG;IAC7B,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;CAC3B,CAAC;AAEF,oBAAY,iBAAiB,GAAG,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;AAE5D,qBAAa,SAAU,YAAW,UAAU,EAAE,kBAAkB;IAG5D,OAAO,CAAC,MAAM,CAAkB;gBAEpB,OAAO,UAAQ;IAK3B,IAAI,KAAK,IAIQ,OAAO,CAFvB;IAED,IAAI,KAAK,CAAC,KAAK,EAAE,OAAO,EAEvB;IAED,IAAI,SAAS,YAAoC;IAGjD,MAAM,aAEJ;IAGF,KAAK,aAEH;CACL"}
|
|
1
|
+
{"version":3,"file":"FlagModel.d.ts","sourceRoot":"","sources":["../../src/viewModels/FlagModel.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAE9C,MAAM,WAAW,UAAW,SAAQ,WAAW,CAAC,OAAO,CAAC,EAAE,eAAe;IACrE,MAAM,IAAI,IAAI,CAAC;CAClB;AAED,oBAAY,kBAAkB,GAAG;IAC7B,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;CAC3B,CAAC;AAEF,oBAAY,iBAAiB,GAAG,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;AAE5D,qBAAa,SAAU,YAAW,UAAU,EAAE,kBAAkB;IAG5D,OAAO,CAAC,MAAM,CAAkB;gBAEpB,OAAO,UAAQ;IAK3B,IAAI,KAAK,IAIQ,OAAO,CAFvB;IAED,IAAI,KAAK,CAAC,KAAK,EAAE,OAAO,EAEvB;IAED,IAAI,SAAS,YAAoC;IAGjD,OAAO,gBAIL;IAGF,QAAQ,gBAIN;IAGF,MAAM,aAEJ;IAGF,KAAK,aAEH;CACL"}
|
|
@@ -6,6 +6,16 @@ const mobx_1 = require("mobx");
|
|
|
6
6
|
class FlagModel {
|
|
7
7
|
constructor(initial = false) {
|
|
8
8
|
this._value = false;
|
|
9
|
+
this.setTrue = () => {
|
|
10
|
+
const v = this.value;
|
|
11
|
+
this.value = true;
|
|
12
|
+
return !v;
|
|
13
|
+
};
|
|
14
|
+
this.setFalse = () => {
|
|
15
|
+
const v = this.value;
|
|
16
|
+
this.value = false;
|
|
17
|
+
return v;
|
|
18
|
+
};
|
|
9
19
|
this.toggle = () => {
|
|
10
20
|
this._value = !this._value;
|
|
11
21
|
};
|
|
@@ -27,6 +37,14 @@ tslib_1.__decorate([
|
|
|
27
37
|
mobx_1.observable,
|
|
28
38
|
tslib_1.__metadata("design:type", Boolean)
|
|
29
39
|
], FlagModel.prototype, "_value", void 0);
|
|
40
|
+
tslib_1.__decorate([
|
|
41
|
+
mobx_1.action,
|
|
42
|
+
tslib_1.__metadata("design:type", Object)
|
|
43
|
+
], FlagModel.prototype, "setTrue", void 0);
|
|
44
|
+
tslib_1.__decorate([
|
|
45
|
+
mobx_1.action,
|
|
46
|
+
tslib_1.__metadata("design:type", Object)
|
|
47
|
+
], FlagModel.prototype, "setFalse", void 0);
|
|
30
48
|
tslib_1.__decorate([
|
|
31
49
|
mobx_1.action,
|
|
32
50
|
tslib_1.__metadata("design:type", Object)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FlagModel.js","sourceRoot":"","sources":["../../src/viewModels/FlagModel.ts"],"names":[],"mappings":";;;;AAAA,+BAA0D;AAc1D,MAAa,SAAS;IAKlB,YAAY,OAAO,GAAG,KAAK;QAFnB,WAAM,GAAY,KAAK,CAAC;QAkBhC,WAAM,GAAG,GAAG,EAAE;YACV,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC;QAC/B,CAAC,CAAC;QAGF,UAAK,GAAG,GAAG,EAAE;YACT,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;QACxB,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"FlagModel.js","sourceRoot":"","sources":["../../src/viewModels/FlagModel.ts"],"names":[],"mappings":";;;;AAAA,+BAA0D;AAc1D,MAAa,SAAS;IAKlB,YAAY,OAAO,GAAG,KAAK;QAFnB,WAAM,GAAY,KAAK,CAAC;QAkBhC,YAAO,GAAG,GAAG,EAAE;YACX,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC;YACrB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;YAClB,OAAO,CAAC,CAAC,CAAC;QACd,CAAC,CAAC;QAGF,aAAQ,GAAG,GAAG,EAAE;YACZ,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC;YACrB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;YACnB,OAAO,CAAC,CAAC;QACb,CAAC,CAAC;QAGF,WAAM,GAAG,GAAG,EAAE;YACV,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC;QAC/B,CAAC,CAAC;QAGF,UAAK,GAAG,GAAG,EAAE;YACT,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;QACxB,CAAC,CAAC;QApCE,qBAAc,CAAC,IAAI,CAAC,CAAC;QACrB,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC;IAC1B,CAAC;IAED,IAAI,KAAK;QACL,OAAO,IAAI,CAAC,MAAM,CAAC;IACvB,CAAC;IAED,IAAI,KAAK,CAAC,KAAc;QACpB,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;IACxB,CAAC;IAED,IAAI,SAAS,KAAK,OAAO,IAAI,CAAC,MAAM,KAAK,KAAK,CAAC,CAAC,CAAC;CAyBpD;AAxCG;IADC,iBAAU;;yCACqB;AAkBhC;IADC,aAAM;;0CAKL;AAGF;IADC,aAAM;;2CAKL;AAGF;IADC,aAAM;;yCAGL;AAGF;IADC,aAAM;;wCAGL;AA1CN,8BA2CC"}
|
package/package.json
CHANGED
package/src/dates/calc.ts
CHANGED
package/src/dates/convert.ts
CHANGED
|
@@ -1,19 +1,8 @@
|
|
|
1
1
|
import { DateX } from './datex';
|
|
2
|
+
import { getDate, getTime } from './parse';
|
|
2
3
|
import { isSame, startOf } from './shift';
|
|
3
4
|
import { ConstantGranularity, Granularity } from './types';
|
|
4
5
|
|
|
5
|
-
export function getTime(d: Date | number): number {
|
|
6
|
-
return d instanceof Date ? d.getTime() : d;
|
|
7
|
-
}
|
|
8
|
-
|
|
9
|
-
export function getDate(d: Date | number | string): Date {
|
|
10
|
-
if (!d) {
|
|
11
|
-
return null;
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
return new Date(d);
|
|
15
|
-
}
|
|
16
|
-
|
|
17
6
|
type DateFields<T> = {
|
|
18
7
|
[P in keyof T]: T[P] extends Date ? P : never;
|
|
19
8
|
}[keyof T];
|
package/src/dates/format.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import * as MathX from '../math';
|
|
2
|
-
import { decompose, decomposeDate,
|
|
2
|
+
import { decompose, decomposeDate, getDiscreteDiff } from './convert';
|
|
3
|
+
import { getDate, getTime } from './parse';
|
|
3
4
|
import { YearDate } from './yearDate';
|
|
4
5
|
|
|
5
6
|
export namespace Format {
|
package/src/dates/parse.ts
CHANGED
|
@@ -1,4 +1,16 @@
|
|
|
1
1
|
|
|
2
|
+
export function getTime(d: Date | number): number {
|
|
3
|
+
return d instanceof Date ? d.getTime() : d;
|
|
4
|
+
}
|
|
5
|
+
|
|
6
|
+
export function getDate(d: Date | number | string): Date {
|
|
7
|
+
if (!d) {
|
|
8
|
+
return null;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
return new Date(d);
|
|
12
|
+
}
|
|
13
|
+
|
|
2
14
|
export namespace Parse {
|
|
3
15
|
/** `YYYY-MM-DD` */
|
|
4
16
|
export function fromDatePicker(str: string, local = false) {
|
package/src/dates/shift.ts
CHANGED
package/src/dates/yearDate.ts
CHANGED
package/src/disposer.ts
ADDED
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import logger from './logger';
|
|
2
|
+
|
|
3
|
+
export interface IDisposable {
|
|
4
|
+
dispose(): void;
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
export interface DisposeFunction {
|
|
8
|
+
(): void;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
export class Disposer {
|
|
12
|
+
|
|
13
|
+
private readonly _disposers: DisposeFunction[] = [];
|
|
14
|
+
private readonly _map = new Map<string, DisposeFunction>();
|
|
15
|
+
|
|
16
|
+
constructor(readonly logName: string = null) { }
|
|
17
|
+
|
|
18
|
+
add(d: DisposeFunction | IDisposable, id?: string) {
|
|
19
|
+
if (!d) {
|
|
20
|
+
return;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
const dd: DisposeFunction = typeof d !== 'function'
|
|
24
|
+
? (() => d.dispose ? d.dispose() : null)
|
|
25
|
+
: d;
|
|
26
|
+
|
|
27
|
+
this._disposers.push(dd);
|
|
28
|
+
|
|
29
|
+
if (id) {
|
|
30
|
+
// dispose previous identified disposer
|
|
31
|
+
if (this._map.has(id)) {
|
|
32
|
+
this.execute(id);
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
this._map.set(id, dd);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
execute(id: string) {
|
|
40
|
+
const d = this._map.get(id);
|
|
41
|
+
if (!d) {
|
|
42
|
+
return;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
this._map.delete(id);
|
|
46
|
+
const i = this._disposers.indexOf(d);
|
|
47
|
+
if (i >= 0) {
|
|
48
|
+
this._disposers.splice(i, 1);
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
d();
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
dispose(log = false) {
|
|
55
|
+
if (log) {
|
|
56
|
+
logger.log(
|
|
57
|
+
`[Disposer:${this.logName || '<unknown>'}] Disposing ${this._disposers.length} items including named ones:`,
|
|
58
|
+
Array.from(this._map.entries()).map(e => e[0]),
|
|
59
|
+
);
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
this._disposers.forEach(d => d());
|
|
63
|
+
this._disposers.length = 0;
|
|
64
|
+
this._map.clear();
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
export function combineDisposers(...items: DisposeFunction[]): DisposeFunction {
|
|
69
|
+
return () => items.forEach(i => i());
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
export class Disposable implements IDisposable {
|
|
73
|
+
|
|
74
|
+
protected readonly disposer = new Disposer();
|
|
75
|
+
protected _isDisposed = false;
|
|
76
|
+
|
|
77
|
+
public dispose = () => {
|
|
78
|
+
this._isDisposed = true;
|
|
79
|
+
this.disposer.dispose();
|
|
80
|
+
};
|
|
81
|
+
}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import { updateArray } from '../update';
|
|
2
|
+
|
|
3
|
+
describe('fields/update', () => {
|
|
4
|
+
it('empty input', () => {
|
|
5
|
+
expect(updateArray(null, null)).toStrictEqual({ changed: 0, result: null });
|
|
6
|
+
});
|
|
7
|
+
|
|
8
|
+
it('updates primitives | numbers', () => {
|
|
9
|
+
const target = [1, 5, 3];
|
|
10
|
+
const source = [4, 3, 2];
|
|
11
|
+
|
|
12
|
+
const results1 = updateArray(target, source, { clone: true });
|
|
13
|
+
expect(results1.changed).toBe(4);
|
|
14
|
+
expect(results1.result).toStrictEqual([2, 3, 4]);
|
|
15
|
+
|
|
16
|
+
const results2 = updateArray(target, source, { sorter: null });
|
|
17
|
+
expect(results2.changed).toBe(4);
|
|
18
|
+
expect(results2.result).toStrictEqual([3, 4, 2]);
|
|
19
|
+
});
|
|
20
|
+
|
|
21
|
+
it('updates primitives | strings', () => {
|
|
22
|
+
const target = ['a', 'b', 'c'];
|
|
23
|
+
const source = ['b', 'c', 'd'];
|
|
24
|
+
|
|
25
|
+
const results = updateArray(target, source);
|
|
26
|
+
|
|
27
|
+
expect(results.changed).toBe(2);
|
|
28
|
+
expect(results.result).toStrictEqual(source);
|
|
29
|
+
});
|
|
30
|
+
|
|
31
|
+
describe('updates objects', () => {
|
|
32
|
+
it('no options', () => {
|
|
33
|
+
const res = updateArray([
|
|
34
|
+
{ id: 1, v: 'a' },
|
|
35
|
+
{ id: 5, v: 'e' },
|
|
36
|
+
{ id: 3, v: 'c' },
|
|
37
|
+
], [
|
|
38
|
+
{ id: 2, v: 'b' },
|
|
39
|
+
]);
|
|
40
|
+
|
|
41
|
+
expect(res.changed).toBe(4);
|
|
42
|
+
expect(res.result).toStrictEqual([
|
|
43
|
+
{ id: 2, v: 'b' },
|
|
44
|
+
]);
|
|
45
|
+
});
|
|
46
|
+
|
|
47
|
+
// eslint-disable-next-line jest/expect-expect
|
|
48
|
+
it('full options', () => {
|
|
49
|
+
const res = updateArray([
|
|
50
|
+
{ id: 1, v: 'a' },
|
|
51
|
+
{ id: 5, v: 'e' },
|
|
52
|
+
{ id: 3, v: 'c' },
|
|
53
|
+
], [
|
|
54
|
+
{ id: 2, v: 'b' },
|
|
55
|
+
{ id: 1, v: '1K' },
|
|
56
|
+
], {
|
|
57
|
+
clone: true,
|
|
58
|
+
comparator: (v1, v2) => v1.id === v2.id,
|
|
59
|
+
updater: (t, s) => {
|
|
60
|
+
t.v = s.v + '_' + t.id;
|
|
61
|
+
return t;
|
|
62
|
+
},
|
|
63
|
+
sorter: (v1, v2) => v1.id - v2.id,
|
|
64
|
+
});
|
|
65
|
+
|
|
66
|
+
expect(res.changed).toBe(3);
|
|
67
|
+
expect(res.result).toStrictEqual([
|
|
68
|
+
{ id: 1, v: '1K_1' },
|
|
69
|
+
{ id: 2, v: 'b' },
|
|
70
|
+
]);
|
|
71
|
+
});
|
|
72
|
+
});
|
|
73
|
+
});
|
package/src/fields/update.ts
CHANGED
|
@@ -1,9 +1,14 @@
|
|
|
1
|
+
import { Comparator } from '../types';
|
|
2
|
+
|
|
3
|
+
export namespace Fields {
|
|
4
|
+
export type Getter<T> = (obj: Partial<T>) => T[keyof T];
|
|
5
|
+
export type Setter<T> = (obj: Partial<T>, val: T[keyof T]) => void;
|
|
6
|
+
export type Comparer<T> = (source: Partial<T>, target: Partial<T>) => boolean;
|
|
7
|
+
export type Updater<T> = (target: T, source: T) => T;
|
|
8
|
+
}
|
|
1
9
|
|
|
2
|
-
export type Getter<T> = (obj: Partial<T>) => T[keyof T];
|
|
3
|
-
export type Setter<T> = (obj: Partial<T>, val: T[keyof T]) => void;
|
|
4
|
-
export type Comparer<T> = (source: Partial<T>, target: Partial<T>) => boolean;
|
|
5
10
|
|
|
6
|
-
export function updateField<T>(target: T, source: Partial<T>, diff: Partial<T>, key: keyof T, hasChanged: Comparer<T> = null): boolean {
|
|
11
|
+
export function updateField<T>(target: T, source: Partial<T>, diff: Partial<T>, key: keyof T, hasChanged: Fields.Comparer<T> = null): boolean {
|
|
7
12
|
return updateFieldExtended(target, source, diff, t => t[key], (t, v) => t[key] = v, hasChanged);
|
|
8
13
|
}
|
|
9
14
|
|
|
@@ -11,9 +16,9 @@ export function updateFieldExtended<T>(
|
|
|
11
16
|
target: T,
|
|
12
17
|
source: Partial<T>,
|
|
13
18
|
diff: Partial<T>,
|
|
14
|
-
get: Getter<T>,
|
|
15
|
-
set: Setter<T>,
|
|
16
|
-
hasChanged: Comparer<T> = null,
|
|
19
|
+
get: Fields.Getter<T>,
|
|
20
|
+
set: Fields.Setter<T>,
|
|
21
|
+
hasChanged: Fields.Comparer<T> = null,
|
|
17
22
|
): boolean {
|
|
18
23
|
|
|
19
24
|
hasChanged = hasChanged || ((v1: T, v2: T) => (get(v1) !== get(v2)));
|
|
@@ -30,32 +35,61 @@ export function updateFieldExtended<T>(
|
|
|
30
35
|
|
|
31
36
|
}
|
|
32
37
|
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
38
|
+
const DefaultComparator: Comparator<any> = (v1, v2) => v1 === v2;
|
|
39
|
+
const DefaultUpdater: Fields.Updater<any> = (v1, v2) => Object.assign(v1, v2);
|
|
40
|
+
|
|
41
|
+
export type UpdateArrayOptions<T> = {
|
|
42
|
+
additive?: boolean,
|
|
43
|
+
clone?: boolean,
|
|
44
|
+
comparator?: Comparator<T>,
|
|
45
|
+
updater?: Fields.Updater<T>,
|
|
46
|
+
sorter?: Comparator<T, number> | null | undefined,
|
|
47
|
+
};
|
|
48
|
+
|
|
49
|
+
export function updateArray<T>(
|
|
50
|
+
target: T[] | null,
|
|
51
|
+
source: T[],
|
|
52
|
+
options?: UpdateArrayOptions<T>,
|
|
53
|
+
): { changed: number, result: T[] } {
|
|
54
|
+
if (!source) {
|
|
55
|
+
return { changed: 0, result: target };
|
|
36
56
|
}
|
|
37
57
|
|
|
38
58
|
let changed = 0;
|
|
39
|
-
const result =
|
|
59
|
+
const result = Array.isArray(target)
|
|
60
|
+
? (options?.clone ? target.slice() : target)
|
|
61
|
+
: [];
|
|
62
|
+
|
|
63
|
+
const comparator = options?.comparator || DefaultComparator;
|
|
64
|
+
const updater = options?.updater || DefaultUpdater;
|
|
40
65
|
|
|
41
66
|
// remove all missing elements
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
67
|
+
if (!options?.additive) {
|
|
68
|
+
for (let i = 0; i < result.length; ++i) {
|
|
69
|
+
if (source.find(item => comparator(item, result[i])) == null) {
|
|
70
|
+
result.splice(i, 1);
|
|
71
|
+
++changed;
|
|
72
|
+
--i;
|
|
73
|
+
}
|
|
47
74
|
}
|
|
48
75
|
}
|
|
49
76
|
|
|
50
|
-
// add all new elements
|
|
51
|
-
|
|
52
|
-
|
|
77
|
+
// add all new elements and update existing
|
|
78
|
+
source.forEach(i => {
|
|
79
|
+
const existingIndex = result.findIndex(item => comparator(i, item));
|
|
80
|
+
const existingItem = result[existingIndex];
|
|
81
|
+
if (existingIndex < 0) {
|
|
53
82
|
result.push(i);
|
|
54
83
|
++changed;
|
|
84
|
+
} else if (typeof existingItem === 'object') {
|
|
85
|
+
result[existingIndex] = updater(existingItem, i);
|
|
55
86
|
}
|
|
56
87
|
});
|
|
57
88
|
|
|
58
|
-
|
|
89
|
+
const sorter = options?.sorter;
|
|
90
|
+
if (sorter !== null) {
|
|
91
|
+
result.sort(sorter || undefined);
|
|
92
|
+
}
|
|
59
93
|
|
|
60
94
|
return {
|
|
61
95
|
result,
|
package/src/ident.ts
ADDED
package/src/math/calc.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { reaction } from 'mobx';
|
|
2
2
|
import { IEvent, Event } from './event';
|
|
3
3
|
import { ILogger, createLogger } from './logger';
|
|
4
|
-
import { IDisposable } from './
|
|
4
|
+
import { IDisposable } from './disposer';
|
|
5
5
|
|
|
6
6
|
export class TransitionObserver<T> implements IDisposable {
|
|
7
7
|
|
package/src/unsubscriber.ts
CHANGED
|
@@ -1,70 +1,11 @@
|
|
|
1
1
|
import logger from './logger';
|
|
2
2
|
|
|
3
|
-
export
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
}
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
private readonly _disposers: Disposer[] = [];
|
|
14
|
-
private readonly _map = new Map<string, Disposer>();
|
|
15
|
-
|
|
16
|
-
constructor(readonly logName: string = null) { }
|
|
17
|
-
|
|
18
|
-
add(d: Disposer | IDisposable, id?: string) {
|
|
19
|
-
if (!d) {
|
|
20
|
-
return;
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
const dd: Disposer = typeof d !== 'function'
|
|
24
|
-
? (() => d.dispose ? d.dispose() : null)
|
|
25
|
-
: d;
|
|
26
|
-
|
|
27
|
-
this._disposers.push(dd);
|
|
28
|
-
|
|
29
|
-
if (id) {
|
|
30
|
-
// dispose previous identified disposer
|
|
31
|
-
if (this._map.has(id)) {
|
|
32
|
-
this.execute(id);
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
this._map.set(id, dd);
|
|
36
|
-
}
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
execute(id: string) {
|
|
40
|
-
const d = this._map.get(id);
|
|
41
|
-
if (!d) {
|
|
42
|
-
return;
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
this._map.delete(id);
|
|
46
|
-
const i = this._disposers.indexOf(d);
|
|
47
|
-
if (i >= 0) {
|
|
48
|
-
this._disposers.splice(i, 1);
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
d();
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
dispose(log = false) {
|
|
55
|
-
if (log) {
|
|
56
|
-
logger.log(
|
|
57
|
-
`[Disposer:${this.logName || '<unknown>'}] Disposing ${this._disposers.length} items including named ones:`,
|
|
58
|
-
Array.from(this._map.entries()).map(e => e[0]),
|
|
59
|
-
);
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
this._disposers.forEach(d => d());
|
|
63
|
-
this._disposers.length = 0;
|
|
64
|
-
this._map.clear();
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
export function combineDisposers(...items: Disposer[]): Disposer {
|
|
69
|
-
return () => items.forEach(i => i());
|
|
70
|
-
}
|
|
3
|
+
export {
|
|
4
|
+
IDisposable,
|
|
5
|
+
DisposeFunction as Disposer,
|
|
6
|
+
combineDisposers,
|
|
7
|
+
Disposer as Unsubscriber,
|
|
8
|
+
Disposable,
|
|
9
|
+
} from './disposer';
|
|
10
|
+
|
|
11
|
+
logger.warn('@zajno/common: importing module "unsusbcriber" is deprecated; please change your import to "disposer" module.');
|