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