silentium-components 0.0.69 → 0.0.71
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/CHANGELOG.md +19 -0
- package/dist/silentium-components.cjs +467 -412
- package/dist/silentium-components.cjs.map +1 -1
- package/dist/silentium-components.d.ts +42 -36
- package/dist/silentium-components.js +469 -414
- package/dist/silentium-components.js.map +1 -1
- package/dist/silentium-components.min.js +1 -1
- package/dist/silentium-components.min.mjs +1 -1
- package/dist/silentium-components.min.mjs.map +1 -1
- package/dist/silentium-components.mjs +469 -414
- package/dist/silentium-components.mjs.map +1 -1
- package/package.json +2 -2
- package/src/behaviors/Branch._main.test.ts +3 -3
- package/src/behaviors/Branch.branchesDontAffectResult.test.ts +4 -4
- package/src/behaviors/Branch.dontRespondAfterRespond.test.ts +6 -6
- package/src/behaviors/Branch.ts +23 -24
- package/src/behaviors/BranchLazy._main.test.ts +5 -5
- package/src/behaviors/BranchLazy.ts +31 -23
- package/src/behaviors/Const.test.ts +10 -8
- package/src/behaviors/Const.ts +9 -10
- package/src/behaviors/Deadline._main.test.ts +4 -4
- package/src/behaviors/Deadline._value.test.ts +5 -5
- package/src/behaviors/Deadline.ts +37 -28
- package/src/behaviors/Deferred.test.ts +10 -10
- package/src/behaviors/Deferred.ts +14 -12
- package/src/behaviors/Detached.test.ts +4 -4
- package/src/behaviors/Detached.ts +6 -6
- package/src/behaviors/Dirty.test.ts +3 -3
- package/src/behaviors/Dirty.ts +46 -26
- package/src/behaviors/Loading.test.ts +7 -10
- package/src/behaviors/Loading.ts +9 -9
- package/src/behaviors/Lock.test.ts +3 -3
- package/src/behaviors/Lock.ts +12 -10
- package/src/behaviors/Memo.test.ts +8 -6
- package/src/behaviors/Memo.ts +13 -12
- package/src/behaviors/OnlyChanged.test.ts +4 -4
- package/src/behaviors/OnlyChanged.ts +14 -13
- package/src/behaviors/Part.test.ts +6 -6
- package/src/behaviors/Part.ts +53 -30
- package/src/behaviors/Path._main.test.ts +2 -2
- package/src/behaviors/Path.index.test.ts +2 -2
- package/src/behaviors/Path.nested.test.ts +2 -2
- package/src/behaviors/Path.ts +20 -21
- package/src/behaviors/Polling.test.ts +10 -10
- package/src/behaviors/Polling.ts +10 -8
- package/src/behaviors/Shot._main.test.ts +10 -10
- package/src/behaviors/Shot._onlyChanged.test.ts +13 -11
- package/src/behaviors/Shot.ts +15 -12
- package/src/behaviors/Task.ts +4 -4
- package/src/behaviors/Tick.test.ts +7 -7
- package/src/behaviors/Tick.ts +13 -11
- package/src/behaviors/Transaction.test.ts +4 -5
- package/src/behaviors/Transaction.ts +14 -14
- package/src/boolean/And.test.ts +11 -11
- package/src/boolean/And.ts +10 -11
- package/src/boolean/Bool.test.ts +2 -2
- package/src/boolean/Bool.ts +5 -5
- package/src/boolean/Not.test.ts +3 -3
- package/src/boolean/Not.ts +9 -7
- package/src/boolean/Or.test.ts +3 -3
- package/src/boolean/Or.ts +10 -11
- package/src/formats/FromJson.ts +14 -12
- package/src/formats/ToJson.ts +14 -12
- package/src/lists/First.test.ts +2 -2
- package/src/lists/First.ts +5 -5
- package/src/navigation/Router._main.test.ts +20 -13
- package/src/navigation/Router._nested.test.ts +41 -33
- package/src/navigation/Router.ts +48 -50
- package/src/strings/Concatenated.test.ts +3 -3
- package/src/strings/Concatenated.ts +8 -9
- package/src/strings/Template._main.test.ts +3 -3
- package/src/strings/Template._place.test.ts +2 -2
- package/src/strings/Template.ts +54 -40
- package/src/structures/HashTable.test.ts +6 -6
- package/src/structures/HashTable.ts +10 -8
- package/src/structures/Record._main.test.ts +6 -6
- package/src/structures/Record.concatenated.test.ts +12 -10
- package/src/structures/Record.nested.test.ts +5 -5
- package/src/structures/RecordOf.ts +14 -12
- package/src/system/RegexpMatch._group.test.ts +4 -4
- package/src/system/RegexpMatch._main.test.ts +4 -4
- package/src/system/RegexpMatch.ts +9 -11
- package/src/system/RegexpMatched.test.ts +5 -5
- package/src/system/RegexpMatched.ts +8 -10
- package/src/system/RegexpReplaced.test.ts +5 -5
- package/src/system/RegexpReplaced.ts +10 -11
- package/src/system/Set.test.ts +5 -5
- package/src/system/Set.ts +9 -11
|
@@ -2,254 +2,300 @@
|
|
|
2
2
|
|
|
3
3
|
var silentium = require('silentium');
|
|
4
4
|
|
|
5
|
-
function Branch(
|
|
6
|
-
return (
|
|
7
|
-
const
|
|
8
|
-
let
|
|
9
|
-
if (
|
|
10
|
-
|
|
5
|
+
function Branch($condition, $left, $right) {
|
|
6
|
+
return silentium.Event((transport) => {
|
|
7
|
+
const left = silentium.Primitive($left);
|
|
8
|
+
let right;
|
|
9
|
+
if ($right !== void 0) {
|
|
10
|
+
right = silentium.Primitive($right);
|
|
11
11
|
}
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
12
|
+
$condition.event(
|
|
13
|
+
silentium.Transport((v) => {
|
|
14
|
+
let result = null;
|
|
15
|
+
if (v) {
|
|
16
|
+
result = left.primitive();
|
|
17
|
+
} else if (right) {
|
|
18
|
+
result = right.primitive();
|
|
19
|
+
}
|
|
20
|
+
if (result !== null) {
|
|
21
|
+
transport.use(result);
|
|
22
|
+
}
|
|
23
|
+
})
|
|
24
|
+
);
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
function BranchLazy($condition, $left, $right) {
|
|
29
|
+
return silentium.Event((transport) => {
|
|
30
|
+
let destructor;
|
|
31
|
+
$condition.event(
|
|
32
|
+
silentium.Transport((v) => {
|
|
33
|
+
if (destructor !== void 0 && typeof destructor === "function") {
|
|
34
|
+
destructor();
|
|
35
|
+
}
|
|
36
|
+
let instance = null;
|
|
37
|
+
if (v) {
|
|
38
|
+
instance = $left.use();
|
|
39
|
+
} else if ($right) {
|
|
40
|
+
instance = $right.use();
|
|
41
|
+
}
|
|
42
|
+
if (instance) {
|
|
43
|
+
instance.event(transport);
|
|
44
|
+
destructor = instance.destroy;
|
|
45
|
+
}
|
|
46
|
+
})
|
|
47
|
+
);
|
|
43
48
|
return () => {
|
|
44
|
-
|
|
49
|
+
destructor?.();
|
|
45
50
|
};
|
|
46
|
-
};
|
|
51
|
+
});
|
|
47
52
|
}
|
|
48
53
|
|
|
49
|
-
function Constant(
|
|
50
|
-
return (
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
if (timeoutReached) {
|
|
68
|
-
return;
|
|
54
|
+
function Constant(permanent, $trigger) {
|
|
55
|
+
return silentium.Event((transport) => {
|
|
56
|
+
$trigger.event(
|
|
57
|
+
silentium.Transport(() => {
|
|
58
|
+
transport.use(permanent);
|
|
59
|
+
})
|
|
60
|
+
);
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
function Deadline(error, $base, $timeout) {
|
|
65
|
+
return silentium.Event((transport) => {
|
|
66
|
+
let timer = null;
|
|
67
|
+
const base = silentium.Shared($base, true);
|
|
68
|
+
$timeout.event(
|
|
69
|
+
silentium.Transport((timeout) => {
|
|
70
|
+
if (timer) {
|
|
71
|
+
clearTimeout(timer);
|
|
69
72
|
}
|
|
70
|
-
timeoutReached =
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
73
|
+
let timeoutReached = false;
|
|
74
|
+
timer = setTimeout(() => {
|
|
75
|
+
if (timeoutReached) {
|
|
76
|
+
return;
|
|
77
|
+
}
|
|
78
|
+
timeoutReached = true;
|
|
79
|
+
error.use(new Error("Timeout reached in Deadline class"));
|
|
80
|
+
}, timeout);
|
|
81
|
+
const f = silentium.Filtered(base, () => !timeoutReached);
|
|
82
|
+
f.event(transport);
|
|
83
|
+
base.event(
|
|
84
|
+
silentium.Transport(() => {
|
|
85
|
+
timeoutReached = true;
|
|
86
|
+
})
|
|
87
|
+
);
|
|
88
|
+
})
|
|
89
|
+
);
|
|
90
|
+
});
|
|
80
91
|
}
|
|
81
92
|
|
|
82
|
-
function Deferred(
|
|
83
|
-
return (
|
|
84
|
-
const
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
93
|
+
function Deferred($base, $trigger) {
|
|
94
|
+
return silentium.Event((transport) => {
|
|
95
|
+
const base = silentium.Primitive($base);
|
|
96
|
+
$trigger.event(
|
|
97
|
+
silentium.Transport(() => {
|
|
98
|
+
const value = base.primitive();
|
|
99
|
+
if (silentium.isFilled(value)) {
|
|
100
|
+
transport.use(value);
|
|
101
|
+
}
|
|
102
|
+
})
|
|
103
|
+
);
|
|
104
|
+
});
|
|
92
105
|
}
|
|
93
106
|
|
|
94
|
-
function Detached(
|
|
95
|
-
return
|
|
96
|
-
const v = silentium.Primitive(
|
|
107
|
+
function Detached($base) {
|
|
108
|
+
return silentium.Event((transport) => {
|
|
109
|
+
const v = silentium.Primitive($base).primitive();
|
|
97
110
|
if (silentium.isFilled(v)) {
|
|
98
|
-
|
|
111
|
+
transport.use(v);
|
|
99
112
|
}
|
|
100
|
-
};
|
|
113
|
+
});
|
|
101
114
|
}
|
|
102
115
|
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
116
|
+
var __defProp$2 = Object.defineProperty;
|
|
117
|
+
var __defNormalProp$2 = (obj, key, value) => key in obj ? __defProp$2(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
118
|
+
var __publicField$2 = (obj, key, value) => __defNormalProp$2(obj, typeof key !== "symbol" ? key + "" : key, value);
|
|
119
|
+
function Dirty($base, keep = [], exclude = [], cloner) {
|
|
120
|
+
return new DirtySource($base, keep, exclude, cloner);
|
|
121
|
+
}
|
|
122
|
+
class DirtySource {
|
|
123
|
+
constructor($base, keep = [], exclude = [], cloner) {
|
|
124
|
+
this.$base = $base;
|
|
125
|
+
this.keep = keep;
|
|
126
|
+
this.exclude = exclude;
|
|
127
|
+
__publicField$2(this, "$comparing", silentium.Late());
|
|
128
|
+
__publicField$2(this, "cloner");
|
|
129
|
+
if (cloner === void 0) {
|
|
130
|
+
this.cloner = (value) => JSON.parse(JSON.stringify(value));
|
|
131
|
+
} else {
|
|
132
|
+
this.cloner = cloner;
|
|
133
|
+
}
|
|
107
134
|
}
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
silentium.
|
|
112
|
-
comparingDetached,
|
|
113
|
-
baseEntitySource
|
|
114
|
-
)(([comparing, base]) => {
|
|
135
|
+
event(transport) {
|
|
136
|
+
const $comparing = silentium.Applied(this.$comparing, this.cloner);
|
|
137
|
+
silentium.All($comparing, this.$base).event(
|
|
138
|
+
silentium.Transport(([comparing, base]) => {
|
|
115
139
|
if (!comparing) {
|
|
116
140
|
return;
|
|
117
141
|
}
|
|
118
|
-
|
|
142
|
+
transport.use(
|
|
119
143
|
Object.fromEntries(
|
|
120
144
|
Object.entries(comparing).filter(([key, value]) => {
|
|
121
|
-
if (
|
|
145
|
+
if (this.keep.includes(key)) {
|
|
122
146
|
return true;
|
|
123
147
|
}
|
|
124
|
-
if (
|
|
148
|
+
if (this.exclude.includes(key)) {
|
|
125
149
|
return false;
|
|
126
150
|
}
|
|
127
151
|
return value !== base[key];
|
|
128
152
|
})
|
|
129
153
|
)
|
|
130
154
|
);
|
|
131
|
-
})
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
155
|
+
})
|
|
156
|
+
);
|
|
157
|
+
return this;
|
|
158
|
+
}
|
|
159
|
+
use(v) {
|
|
160
|
+
this.$comparing.use(v);
|
|
161
|
+
return this;
|
|
162
|
+
}
|
|
137
163
|
}
|
|
138
164
|
|
|
139
|
-
function Loading(
|
|
140
|
-
return (
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
};
|
|
165
|
+
function Loading($loadingStart, $loadingFinish) {
|
|
166
|
+
return silentium.Event((transport) => {
|
|
167
|
+
$loadingStart.event(silentium.Transport(() => transport.use(true)));
|
|
168
|
+
$loadingFinish.event(silentium.Transport(() => transport.use(false)));
|
|
169
|
+
});
|
|
144
170
|
}
|
|
145
171
|
|
|
146
|
-
function Lock(
|
|
147
|
-
return (
|
|
172
|
+
function Lock($base, $lock) {
|
|
173
|
+
return silentium.Event((transport) => {
|
|
148
174
|
let locked = false;
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
175
|
+
$lock.event(
|
|
176
|
+
silentium.Transport((newLock) => {
|
|
177
|
+
locked = newLock;
|
|
178
|
+
})
|
|
179
|
+
);
|
|
180
|
+
const i = silentium.Filtered($base, () => !locked);
|
|
181
|
+
i.event(transport);
|
|
182
|
+
});
|
|
155
183
|
}
|
|
156
184
|
|
|
157
|
-
function Memo(
|
|
158
|
-
return (
|
|
159
|
-
let
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
}
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
185
|
+
function Memo($base) {
|
|
186
|
+
return silentium.Event((transport) => {
|
|
187
|
+
let last = null;
|
|
188
|
+
$base.event(
|
|
189
|
+
silentium.Transport((v) => {
|
|
190
|
+
if (v !== last) {
|
|
191
|
+
transport.use(v);
|
|
192
|
+
last = v;
|
|
193
|
+
}
|
|
194
|
+
})
|
|
195
|
+
);
|
|
196
|
+
});
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
function OnlyChanged($base) {
|
|
200
|
+
return silentium.Event((transport) => {
|
|
201
|
+
let first = false;
|
|
202
|
+
$base.event(
|
|
203
|
+
silentium.Transport((v) => {
|
|
204
|
+
if (first === false) {
|
|
205
|
+
first = true;
|
|
206
|
+
} else {
|
|
207
|
+
transport.use(v);
|
|
208
|
+
}
|
|
209
|
+
})
|
|
210
|
+
);
|
|
211
|
+
});
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
var __defProp$1 = Object.defineProperty;
|
|
215
|
+
var __defNormalProp$1 = (obj, key, value) => key in obj ? __defProp$1(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
216
|
+
var __publicField$1 = (obj, key, value) => __defNormalProp$1(obj, typeof key !== "symbol" ? key + "" : key, value);
|
|
217
|
+
function Part($base, $key) {
|
|
218
|
+
return new PartEvent($base, $key);
|
|
219
|
+
}
|
|
220
|
+
class PartEvent {
|
|
221
|
+
constructor($base, $key) {
|
|
222
|
+
__publicField$1(this, "$base");
|
|
223
|
+
__publicField$1(this, "$keyed");
|
|
224
|
+
this.$base = silentium.SharedSource($base);
|
|
225
|
+
this.$keyed = silentium.Shared($key);
|
|
226
|
+
}
|
|
227
|
+
event(transport) {
|
|
228
|
+
silentium.All(this.$base, this.$keyed).event(
|
|
229
|
+
silentium.Transport(([base, keyed]) => {
|
|
230
|
+
const keys = keyed.split(".");
|
|
192
231
|
let value = base;
|
|
193
|
-
|
|
194
|
-
value = value[
|
|
232
|
+
keys.forEach((key) => {
|
|
233
|
+
value = value[key];
|
|
195
234
|
});
|
|
196
235
|
if (value !== void 0 && value !== base) {
|
|
197
|
-
|
|
236
|
+
transport.use(value);
|
|
198
237
|
}
|
|
238
|
+
})
|
|
239
|
+
);
|
|
240
|
+
return this;
|
|
241
|
+
}
|
|
242
|
+
use(value) {
|
|
243
|
+
const key = silentium.Primitive(this.$keyed);
|
|
244
|
+
if (silentium.isFilled(key)) {
|
|
245
|
+
const base = silentium.Primitive(this.$base);
|
|
246
|
+
this.$base.use({
|
|
247
|
+
...base.primitiveWithException(),
|
|
248
|
+
[key.primitiveWithException()]: value
|
|
199
249
|
});
|
|
200
|
-
},
|
|
201
|
-
use: (value) => {
|
|
202
|
-
const key = keySync.primitive();
|
|
203
|
-
if (silentium.isFilled(key)) {
|
|
204
|
-
baseSrc.use({
|
|
205
|
-
...baseSync.primitive(),
|
|
206
|
-
[key]: value
|
|
207
|
-
});
|
|
208
|
-
}
|
|
209
250
|
}
|
|
210
|
-
|
|
211
|
-
}
|
|
212
|
-
|
|
213
|
-
function Path(baseSrc, keySrc) {
|
|
214
|
-
return (user) => {
|
|
215
|
-
silentium.All(
|
|
216
|
-
baseSrc,
|
|
217
|
-
keySrc
|
|
218
|
-
)(([base, key]) => {
|
|
219
|
-
const keyChunks = key.split(".");
|
|
220
|
-
let value = base;
|
|
221
|
-
keyChunks.forEach((keyChunk) => {
|
|
222
|
-
value = value[keyChunk];
|
|
223
|
-
});
|
|
224
|
-
if (value !== void 0 && value !== base) {
|
|
225
|
-
user(value);
|
|
226
|
-
}
|
|
227
|
-
});
|
|
228
|
-
};
|
|
251
|
+
return this;
|
|
252
|
+
}
|
|
229
253
|
}
|
|
230
254
|
|
|
231
|
-
function
|
|
232
|
-
return (
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
255
|
+
function Path($base, $keyed) {
|
|
256
|
+
return silentium.Event((transport) => {
|
|
257
|
+
silentium.All($base, $keyed).event(
|
|
258
|
+
silentium.Transport(([base, keyed]) => {
|
|
259
|
+
const keys = keyed.split(".");
|
|
260
|
+
let value = base;
|
|
261
|
+
keys.forEach((key) => {
|
|
262
|
+
value = value[key];
|
|
263
|
+
});
|
|
264
|
+
if (value !== void 0 && value !== base) {
|
|
265
|
+
transport.use(value);
|
|
266
|
+
}
|
|
267
|
+
})
|
|
268
|
+
);
|
|
269
|
+
});
|
|
237
270
|
}
|
|
238
271
|
|
|
239
|
-
function
|
|
240
|
-
return (
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
272
|
+
function Polling($base, $trigger) {
|
|
273
|
+
return silentium.Event((transport) => {
|
|
274
|
+
$trigger.event(
|
|
275
|
+
silentium.Transport(() => {
|
|
276
|
+
$base.event(transport);
|
|
277
|
+
})
|
|
278
|
+
);
|
|
279
|
+
});
|
|
280
|
+
}
|
|
281
|
+
|
|
282
|
+
function Shot($target, $trigger) {
|
|
283
|
+
return silentium.Event((transport) => {
|
|
284
|
+
const targetSync = silentium.Primitive($target);
|
|
285
|
+
targetSync.primitive();
|
|
286
|
+
$trigger.event(
|
|
287
|
+
silentium.Transport(() => {
|
|
288
|
+
const value = targetSync.primitive();
|
|
289
|
+
if (silentium.isFilled(value)) {
|
|
290
|
+
transport.use(value);
|
|
291
|
+
}
|
|
292
|
+
})
|
|
293
|
+
);
|
|
294
|
+
});
|
|
249
295
|
}
|
|
250
296
|
|
|
251
297
|
function Task(baseSrc, delay = 0) {
|
|
252
|
-
return (
|
|
298
|
+
return silentium.Event((transport) => {
|
|
253
299
|
let prevTimer = null;
|
|
254
300
|
silentium.ExecutorApplied(baseSrc, (fn) => {
|
|
255
301
|
return (v) => {
|
|
@@ -260,12 +306,12 @@ function Task(baseSrc, delay = 0) {
|
|
|
260
306
|
fn(v);
|
|
261
307
|
}, delay);
|
|
262
308
|
};
|
|
263
|
-
})(
|
|
264
|
-
};
|
|
309
|
+
}).event(transport);
|
|
310
|
+
});
|
|
265
311
|
}
|
|
266
312
|
|
|
267
|
-
function Tick(
|
|
268
|
-
return (
|
|
313
|
+
function Tick($base) {
|
|
314
|
+
return silentium.Event((transport) => {
|
|
269
315
|
let microtaskScheduled = false;
|
|
270
316
|
let lastValue = null;
|
|
271
317
|
const scheduleMicrotask = () => {
|
|
@@ -273,272 +319,281 @@ function Tick(baseSrc) {
|
|
|
273
319
|
queueMicrotask(() => {
|
|
274
320
|
microtaskScheduled = false;
|
|
275
321
|
if (lastValue !== null) {
|
|
276
|
-
|
|
322
|
+
transport.use(lastValue);
|
|
277
323
|
lastValue = null;
|
|
278
324
|
}
|
|
279
325
|
});
|
|
280
326
|
};
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
327
|
+
$base.event(
|
|
328
|
+
silentium.Transport((v) => {
|
|
329
|
+
lastValue = v;
|
|
330
|
+
if (!microtaskScheduled) {
|
|
331
|
+
scheduleMicrotask();
|
|
332
|
+
}
|
|
333
|
+
})
|
|
334
|
+
);
|
|
335
|
+
});
|
|
288
336
|
}
|
|
289
337
|
|
|
290
338
|
function Transaction($base, eventBuilder, ...args) {
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
339
|
+
return silentium.Event((transport) => {
|
|
340
|
+
const $res = silentium.LateShared();
|
|
341
|
+
const destructors = [];
|
|
342
|
+
$base.event(
|
|
343
|
+
silentium.Transport((v) => {
|
|
344
|
+
const $event = eventBuilder(silentium.Of(v), ...args.map((a) => Detached(a)));
|
|
345
|
+
destructors.push($event);
|
|
346
|
+
$event.event($res);
|
|
347
|
+
})
|
|
296
348
|
);
|
|
297
|
-
|
|
298
|
-
$event.event($res.use);
|
|
299
|
-
});
|
|
300
|
-
return (user) => {
|
|
301
|
-
$res.event(user);
|
|
349
|
+
$res.event(transport);
|
|
302
350
|
return () => {
|
|
303
|
-
destructors.forEach((d) => d
|
|
351
|
+
destructors.forEach((d) => d?.destroy());
|
|
304
352
|
destructors.length = 0;
|
|
305
353
|
};
|
|
306
|
-
};
|
|
354
|
+
});
|
|
307
355
|
}
|
|
308
356
|
|
|
309
|
-
function HashTable(
|
|
310
|
-
return (
|
|
357
|
+
function HashTable($base) {
|
|
358
|
+
return silentium.Event((transport) => {
|
|
311
359
|
const record = {};
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
360
|
+
$base.event(
|
|
361
|
+
silentium.Transport(([key, value]) => {
|
|
362
|
+
record[key] = value;
|
|
363
|
+
transport.use(record);
|
|
364
|
+
})
|
|
365
|
+
);
|
|
366
|
+
});
|
|
317
367
|
}
|
|
318
368
|
|
|
319
|
-
function RecordOf(
|
|
320
|
-
return (
|
|
321
|
-
const keys = Object.keys(
|
|
322
|
-
silentium.All(...Object.values(
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
369
|
+
function RecordOf(record) {
|
|
370
|
+
return silentium.Event((transport) => {
|
|
371
|
+
const keys = Object.keys(record);
|
|
372
|
+
silentium.All(...Object.values(record)).event(
|
|
373
|
+
silentium.Transport((entries) => {
|
|
374
|
+
const record2 = {};
|
|
375
|
+
entries.forEach((entry, index) => {
|
|
376
|
+
record2[keys[index]] = entry;
|
|
377
|
+
});
|
|
378
|
+
transport.use(record2);
|
|
379
|
+
})
|
|
380
|
+
);
|
|
381
|
+
});
|
|
330
382
|
}
|
|
331
383
|
|
|
332
384
|
function Concatenated(sources, joinPartSrc = silentium.Of("")) {
|
|
333
|
-
return (
|
|
334
|
-
silentium.All(
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
385
|
+
return silentium.Event((transport) => {
|
|
386
|
+
silentium.All(joinPartSrc, ...sources).event(
|
|
387
|
+
silentium.Transport(([joinPart, ...strings]) => {
|
|
388
|
+
transport.use(strings.join(joinPart));
|
|
389
|
+
})
|
|
390
|
+
);
|
|
391
|
+
});
|
|
392
|
+
}
|
|
393
|
+
|
|
394
|
+
var __defProp = Object.defineProperty;
|
|
395
|
+
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
396
|
+
var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
|
|
397
|
+
function Template($src = silentium.Of(""), $places = silentium.Of({})) {
|
|
398
|
+
return new TemplateEvent($src, $places);
|
|
399
|
+
}
|
|
400
|
+
class TemplateEvent {
|
|
401
|
+
constructor($src = silentium.Of(""), $places = silentium.Of({})) {
|
|
402
|
+
this.$src = $src;
|
|
403
|
+
this.$places = $places;
|
|
404
|
+
__publicField(this, "dc", silentium.DestroyContainer());
|
|
405
|
+
__publicField(this, "vars", {
|
|
406
|
+
$TPL: silentium.Of("$TPL")
|
|
339
407
|
});
|
|
340
|
-
}
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
* Ability to register variable
|
|
367
|
-
* in concrete place Of template
|
|
368
|
-
*/
|
|
369
|
-
var: (src) => {
|
|
370
|
-
const varName = `$var${placesCounter}`;
|
|
371
|
-
placesCounter += 1;
|
|
372
|
-
vars[varName] = silentium.Destructor(src, (d) => {
|
|
373
|
-
destructors.push(d);
|
|
374
|
-
}).event;
|
|
375
|
-
return varName;
|
|
376
|
-
},
|
|
377
|
-
destroy() {
|
|
378
|
-
destructors.forEach((d) => d());
|
|
408
|
+
}
|
|
409
|
+
event(transport) {
|
|
410
|
+
const $vars = RecordOf(this.vars);
|
|
411
|
+
silentium.Applied(silentium.All(this.$src, this.$places, $vars), ([base, rules, vars]) => {
|
|
412
|
+
Object.entries(rules).forEach(([ph, val]) => {
|
|
413
|
+
base = base.replaceAll(ph, String(val));
|
|
414
|
+
});
|
|
415
|
+
Object.entries(vars).forEach(([ph, val]) => {
|
|
416
|
+
base = base.replaceAll(ph, String(val));
|
|
417
|
+
});
|
|
418
|
+
return base;
|
|
419
|
+
}).event(transport);
|
|
420
|
+
return this;
|
|
421
|
+
}
|
|
422
|
+
template(value) {
|
|
423
|
+
this.$src = silentium.Of(value);
|
|
424
|
+
}
|
|
425
|
+
/**
|
|
426
|
+
* Ability to register variable
|
|
427
|
+
* in concrete place Of template
|
|
428
|
+
*/
|
|
429
|
+
var(src) {
|
|
430
|
+
const places = Object.keys(this.vars).length;
|
|
431
|
+
const varName = `$var${places}`;
|
|
432
|
+
if (silentium.isDestroyable(src)) {
|
|
433
|
+
this.dc.add(src);
|
|
379
434
|
}
|
|
380
|
-
|
|
435
|
+
this.vars[varName] = src;
|
|
436
|
+
return varName;
|
|
437
|
+
}
|
|
438
|
+
destroy() {
|
|
439
|
+
return this;
|
|
440
|
+
}
|
|
381
441
|
}
|
|
382
442
|
|
|
383
443
|
function RegexpMatched(patternSrc, valueSrc, flagsSrc = silentium.Of("")) {
|
|
384
|
-
return (
|
|
385
|
-
silentium.All(
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
)
|
|
390
|
-
|
|
391
|
-
});
|
|
392
|
-
};
|
|
444
|
+
return silentium.Event((transport) => {
|
|
445
|
+
silentium.All(patternSrc, valueSrc, flagsSrc).event(
|
|
446
|
+
silentium.Transport(([pattern, value, flags]) => {
|
|
447
|
+
transport.use(new RegExp(pattern, flags).test(value));
|
|
448
|
+
})
|
|
449
|
+
);
|
|
450
|
+
});
|
|
393
451
|
}
|
|
394
452
|
|
|
395
453
|
function RegexpReplaced(valueSrc, patternSrc, replaceValueSrc, flagsSrc = silentium.Of("")) {
|
|
396
|
-
return (
|
|
397
|
-
silentium.All(
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
};
|
|
454
|
+
return silentium.Event((transport) => {
|
|
455
|
+
silentium.All(patternSrc, valueSrc, replaceValueSrc, flagsSrc).event(
|
|
456
|
+
silentium.Transport(([pattern, value, replaceValue, flags]) => {
|
|
457
|
+
transport.use(
|
|
458
|
+
String(value).replace(new RegExp(pattern, flags), replaceValue)
|
|
459
|
+
);
|
|
460
|
+
})
|
|
461
|
+
);
|
|
462
|
+
});
|
|
406
463
|
}
|
|
407
464
|
|
|
408
465
|
function RegexpMatch(patternSrc, valueSrc, flagsSrc = silentium.Of("")) {
|
|
409
|
-
return (
|
|
410
|
-
silentium.All(
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
});
|
|
418
|
-
};
|
|
466
|
+
return silentium.Event((transport) => {
|
|
467
|
+
silentium.All(patternSrc, valueSrc, flagsSrc).event(
|
|
468
|
+
silentium.Transport(([pattern, value, flags]) => {
|
|
469
|
+
const result = new RegExp(pattern, flags).exec(value);
|
|
470
|
+
transport.use(result ?? []);
|
|
471
|
+
})
|
|
472
|
+
);
|
|
473
|
+
});
|
|
419
474
|
}
|
|
420
475
|
|
|
421
476
|
function Set(baseSrc, keySrc, valueSrc) {
|
|
422
|
-
return (
|
|
423
|
-
silentium.All(
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
});
|
|
431
|
-
};
|
|
477
|
+
return silentium.Event((transport) => {
|
|
478
|
+
silentium.All(baseSrc, keySrc, valueSrc).event(
|
|
479
|
+
silentium.Transport(([base, key, value]) => {
|
|
480
|
+
base[key] = value;
|
|
481
|
+
transport.use(base);
|
|
482
|
+
})
|
|
483
|
+
);
|
|
484
|
+
});
|
|
432
485
|
}
|
|
433
486
|
|
|
434
|
-
const
|
|
435
|
-
function Router(
|
|
436
|
-
return (
|
|
487
|
+
const $empty = silentium.TransportEvent(() => silentium.Of(false));
|
|
488
|
+
function Router($url, $routes, $default) {
|
|
489
|
+
return silentium.Event((transport) => {
|
|
437
490
|
const destructors = [];
|
|
438
|
-
const
|
|
439
|
-
destructors.forEach((d) => d());
|
|
491
|
+
const destructor = () => {
|
|
492
|
+
destructors.forEach((d) => d.destroy());
|
|
440
493
|
destructors.length = 0;
|
|
441
494
|
};
|
|
442
|
-
silentium.All(
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
BranchLazy(
|
|
495
|
+
silentium.All($routes, $url).event(
|
|
496
|
+
silentium.Transport(([routes, url]) => {
|
|
497
|
+
destructor();
|
|
498
|
+
const instance = silentium.All(
|
|
499
|
+
$default.use(),
|
|
500
|
+
silentium.All(
|
|
501
|
+
...routes.map((r) => {
|
|
502
|
+
const $template = silentium.TransportDestroyable(r.event);
|
|
503
|
+
destructors.push($template);
|
|
504
|
+
return BranchLazy(
|
|
453
505
|
RegexpMatched(
|
|
454
506
|
silentium.Of(r.pattern),
|
|
455
507
|
silentium.Of(url),
|
|
456
508
|
r.patternFlags ? silentium.Of(r.patternFlags) : void 0
|
|
457
509
|
),
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
)
|
|
461
|
-
|
|
462
|
-
).event
|
|
510
|
+
$template,
|
|
511
|
+
$empty
|
|
512
|
+
);
|
|
513
|
+
})
|
|
463
514
|
)
|
|
464
|
-
)
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
})
|
|
473
|
-
|
|
474
|
-
return
|
|
475
|
-
};
|
|
515
|
+
);
|
|
516
|
+
silentium.Applied(instance, (r) => {
|
|
517
|
+
const first = r[1].find((r2) => r2 !== false);
|
|
518
|
+
if (first) {
|
|
519
|
+
return first;
|
|
520
|
+
}
|
|
521
|
+
return r[0];
|
|
522
|
+
}).event(transport);
|
|
523
|
+
})
|
|
524
|
+
);
|
|
525
|
+
return destructor;
|
|
526
|
+
});
|
|
476
527
|
}
|
|
477
528
|
|
|
478
|
-
function And(
|
|
479
|
-
return (
|
|
480
|
-
silentium.All(
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
};
|
|
529
|
+
function And($one, $two) {
|
|
530
|
+
return silentium.Event((transport) => {
|
|
531
|
+
silentium.All($one, $two).event(
|
|
532
|
+
silentium.Transport(([one, two]) => {
|
|
533
|
+
transport.use(one && two);
|
|
534
|
+
})
|
|
535
|
+
);
|
|
536
|
+
});
|
|
487
537
|
}
|
|
488
538
|
|
|
489
|
-
function Or(
|
|
490
|
-
return (
|
|
491
|
-
silentium.All(
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
};
|
|
539
|
+
function Or($one, $two) {
|
|
540
|
+
return silentium.Event((transport) => {
|
|
541
|
+
silentium.All($one, $two).event(
|
|
542
|
+
silentium.Transport(([one, two]) => {
|
|
543
|
+
transport.use(one || two);
|
|
544
|
+
})
|
|
545
|
+
);
|
|
546
|
+
});
|
|
498
547
|
}
|
|
499
548
|
|
|
500
|
-
function Not(
|
|
501
|
-
return (
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
549
|
+
function Not($base) {
|
|
550
|
+
return silentium.Event((transport) => {
|
|
551
|
+
$base.event(
|
|
552
|
+
silentium.Transport((v) => {
|
|
553
|
+
transport.use(!v);
|
|
554
|
+
})
|
|
555
|
+
);
|
|
556
|
+
});
|
|
506
557
|
}
|
|
507
558
|
|
|
508
|
-
function Bool(
|
|
509
|
-
return (
|
|
510
|
-
silentium.Applied(
|
|
511
|
-
};
|
|
559
|
+
function Bool($base) {
|
|
560
|
+
return silentium.Event((transport) => {
|
|
561
|
+
silentium.Applied($base, Boolean).event(transport);
|
|
562
|
+
});
|
|
512
563
|
}
|
|
513
564
|
|
|
514
|
-
function FromJson(
|
|
515
|
-
return (
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
|
|
565
|
+
function FromJson($json, error) {
|
|
566
|
+
return silentium.Event((transport) => {
|
|
567
|
+
$json.event(
|
|
568
|
+
silentium.Transport((json) => {
|
|
569
|
+
try {
|
|
570
|
+
transport.use(JSON.parse(json));
|
|
571
|
+
} catch (e) {
|
|
572
|
+
error?.use(new Error(`Failed to parse JSON: ${e}`));
|
|
573
|
+
}
|
|
574
|
+
})
|
|
575
|
+
);
|
|
576
|
+
});
|
|
524
577
|
}
|
|
525
578
|
|
|
526
|
-
function ToJson(
|
|
527
|
-
return (
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
|
|
579
|
+
function ToJson($data, error) {
|
|
580
|
+
return silentium.Event((transport) => {
|
|
581
|
+
$data.event(
|
|
582
|
+
silentium.Transport((data) => {
|
|
583
|
+
try {
|
|
584
|
+
transport.use(JSON.stringify(data));
|
|
585
|
+
} catch {
|
|
586
|
+
error?.use(new Error("Failed to convert to JSON"));
|
|
587
|
+
}
|
|
588
|
+
})
|
|
589
|
+
);
|
|
590
|
+
});
|
|
536
591
|
}
|
|
537
592
|
|
|
538
|
-
function First(
|
|
539
|
-
return (
|
|
540
|
-
silentium.Applied(
|
|
541
|
-
};
|
|
593
|
+
function First($base) {
|
|
594
|
+
return silentium.Event((transport) => {
|
|
595
|
+
silentium.Applied($base, (a) => a[0]).event(transport);
|
|
596
|
+
});
|
|
542
597
|
}
|
|
543
598
|
|
|
544
599
|
exports.And = And;
|