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.
Files changed (88) hide show
  1. package/CHANGELOG.md +19 -0
  2. package/dist/silentium-components.cjs +467 -412
  3. package/dist/silentium-components.cjs.map +1 -1
  4. package/dist/silentium-components.d.ts +42 -36
  5. package/dist/silentium-components.js +469 -414
  6. package/dist/silentium-components.js.map +1 -1
  7. package/dist/silentium-components.min.js +1 -1
  8. package/dist/silentium-components.min.mjs +1 -1
  9. package/dist/silentium-components.min.mjs.map +1 -1
  10. package/dist/silentium-components.mjs +469 -414
  11. package/dist/silentium-components.mjs.map +1 -1
  12. package/package.json +2 -2
  13. package/src/behaviors/Branch._main.test.ts +3 -3
  14. package/src/behaviors/Branch.branchesDontAffectResult.test.ts +4 -4
  15. package/src/behaviors/Branch.dontRespondAfterRespond.test.ts +6 -6
  16. package/src/behaviors/Branch.ts +23 -24
  17. package/src/behaviors/BranchLazy._main.test.ts +5 -5
  18. package/src/behaviors/BranchLazy.ts +31 -23
  19. package/src/behaviors/Const.test.ts +10 -8
  20. package/src/behaviors/Const.ts +9 -10
  21. package/src/behaviors/Deadline._main.test.ts +4 -4
  22. package/src/behaviors/Deadline._value.test.ts +5 -5
  23. package/src/behaviors/Deadline.ts +37 -28
  24. package/src/behaviors/Deferred.test.ts +10 -10
  25. package/src/behaviors/Deferred.ts +14 -12
  26. package/src/behaviors/Detached.test.ts +4 -4
  27. package/src/behaviors/Detached.ts +6 -6
  28. package/src/behaviors/Dirty.test.ts +3 -3
  29. package/src/behaviors/Dirty.ts +46 -26
  30. package/src/behaviors/Loading.test.ts +7 -10
  31. package/src/behaviors/Loading.ts +9 -9
  32. package/src/behaviors/Lock.test.ts +3 -3
  33. package/src/behaviors/Lock.ts +12 -10
  34. package/src/behaviors/Memo.test.ts +8 -6
  35. package/src/behaviors/Memo.ts +13 -12
  36. package/src/behaviors/OnlyChanged.test.ts +4 -4
  37. package/src/behaviors/OnlyChanged.ts +14 -13
  38. package/src/behaviors/Part.test.ts +6 -6
  39. package/src/behaviors/Part.ts +53 -30
  40. package/src/behaviors/Path._main.test.ts +2 -2
  41. package/src/behaviors/Path.index.test.ts +2 -2
  42. package/src/behaviors/Path.nested.test.ts +2 -2
  43. package/src/behaviors/Path.ts +20 -21
  44. package/src/behaviors/Polling.test.ts +10 -10
  45. package/src/behaviors/Polling.ts +10 -8
  46. package/src/behaviors/Shot._main.test.ts +10 -10
  47. package/src/behaviors/Shot._onlyChanged.test.ts +13 -11
  48. package/src/behaviors/Shot.ts +15 -12
  49. package/src/behaviors/Task.ts +4 -4
  50. package/src/behaviors/Tick.test.ts +7 -7
  51. package/src/behaviors/Tick.ts +13 -11
  52. package/src/behaviors/Transaction.test.ts +4 -5
  53. package/src/behaviors/Transaction.ts +14 -14
  54. package/src/boolean/And.test.ts +11 -11
  55. package/src/boolean/And.ts +10 -11
  56. package/src/boolean/Bool.test.ts +2 -2
  57. package/src/boolean/Bool.ts +5 -5
  58. package/src/boolean/Not.test.ts +3 -3
  59. package/src/boolean/Not.ts +9 -7
  60. package/src/boolean/Or.test.ts +3 -3
  61. package/src/boolean/Or.ts +10 -11
  62. package/src/formats/FromJson.ts +14 -12
  63. package/src/formats/ToJson.ts +14 -12
  64. package/src/lists/First.test.ts +2 -2
  65. package/src/lists/First.ts +5 -5
  66. package/src/navigation/Router._main.test.ts +20 -13
  67. package/src/navigation/Router._nested.test.ts +41 -33
  68. package/src/navigation/Router.ts +48 -50
  69. package/src/strings/Concatenated.test.ts +3 -3
  70. package/src/strings/Concatenated.ts +8 -9
  71. package/src/strings/Template._main.test.ts +3 -3
  72. package/src/strings/Template._place.test.ts +2 -2
  73. package/src/strings/Template.ts +54 -40
  74. package/src/structures/HashTable.test.ts +6 -6
  75. package/src/structures/HashTable.ts +10 -8
  76. package/src/structures/Record._main.test.ts +6 -6
  77. package/src/structures/Record.concatenated.test.ts +12 -10
  78. package/src/structures/Record.nested.test.ts +5 -5
  79. package/src/structures/RecordOf.ts +14 -12
  80. package/src/system/RegexpMatch._group.test.ts +4 -4
  81. package/src/system/RegexpMatch._main.test.ts +4 -4
  82. package/src/system/RegexpMatch.ts +9 -11
  83. package/src/system/RegexpMatched.test.ts +5 -5
  84. package/src/system/RegexpMatched.ts +8 -10
  85. package/src/system/RegexpReplaced.test.ts +5 -5
  86. package/src/system/RegexpReplaced.ts +10 -11
  87. package/src/system/Set.test.ts +5 -5
  88. package/src/system/Set.ts +9 -11
@@ -2,254 +2,300 @@
2
2
 
3
3
  var silentium = require('silentium');
4
4
 
5
- function Branch(conditionSrc, leftSrc, rightSrc) {
6
- return (user) => {
7
- const leftSync = silentium.Primitive(leftSrc);
8
- let rightSync;
9
- if (rightSrc !== void 0) {
10
- rightSync = silentium.Primitive(rightSrc);
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
- conditionSrc((v) => {
13
- let result = null;
14
- if (v) {
15
- result = leftSync.primitive();
16
- } else if (rightSync) {
17
- result = rightSync.primitive();
18
- }
19
- if (result !== null) {
20
- user(result);
21
- }
22
- });
23
- };
24
- }
25
-
26
- function BranchLazy(conditionSrc, leftSrc, rightSrc) {
27
- return (user) => {
28
- let Destructor;
29
- conditionSrc((v) => {
30
- if (Destructor !== void 0 && typeof Destructor === "function") {
31
- Destructor();
32
- }
33
- let instance = null;
34
- if (v) {
35
- instance = leftSrc();
36
- } else if (rightSrc) {
37
- instance = rightSrc();
38
- }
39
- if (instance) {
40
- Destructor = instance(user);
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
- Destructor?.();
49
+ destructor?.();
45
50
  };
46
- };
51
+ });
47
52
  }
48
53
 
49
- function Constant(permanentValue, triggerSrc) {
50
- return (user) => {
51
- triggerSrc(() => {
52
- user(permanentValue);
53
- });
54
- };
55
- }
56
-
57
- function Deadline(error, baseSrc, timeoutSrc) {
58
- return (user) => {
59
- let timerHead = null;
60
- const s = silentium.Shared(baseSrc, true);
61
- timeoutSrc((timeout) => {
62
- if (timerHead) {
63
- clearTimeout(timerHead);
64
- }
65
- let timeoutReached = false;
66
- timerHead = setTimeout(() => {
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 = true;
71
- error(new Error("Timeout reached in Deadline class"));
72
- }, timeout);
73
- const f = silentium.Filtered(s.event, () => !timeoutReached);
74
- f(user);
75
- s.event(() => {
76
- timeoutReached = true;
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(baseSrc, triggerSrc) {
83
- return (user) => {
84
- const baseSync = silentium.Primitive(baseSrc);
85
- triggerSrc(() => {
86
- const value = baseSync.primitive();
87
- if (silentium.isFilled(value)) {
88
- user(value);
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(baseSrc) {
95
- return function Detached2(user) {
96
- const v = silentium.Primitive(baseSrc).primitive();
107
+ function Detached($base) {
108
+ return silentium.Event((transport) => {
109
+ const v = silentium.Primitive($base).primitive();
97
110
  if (silentium.isFilled(v)) {
98
- user(v);
111
+ transport.use(v);
99
112
  }
100
- };
113
+ });
101
114
  }
102
115
 
103
- function Dirty(baseEntitySource, alwaysKeep = [], excludeKeys = [], cloneFn) {
104
- const comparingSrc = silentium.Late();
105
- if (cloneFn === void 0) {
106
- cloneFn = (value) => JSON.parse(JSON.stringify(value));
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
- return {
109
- event: (user) => {
110
- const comparingDetached = silentium.Applied(comparingSrc.event, cloneFn);
111
- silentium.All(
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
- user(
142
+ transport.use(
119
143
  Object.fromEntries(
120
144
  Object.entries(comparing).filter(([key, value]) => {
121
- if (alwaysKeep.includes(key)) {
145
+ if (this.keep.includes(key)) {
122
146
  return true;
123
147
  }
124
- if (excludeKeys.includes(key)) {
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
- use: (v) => {
134
- comparingSrc.use(v);
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(loadingStartSrc, loadingFinishSrc) {
140
- return (user) => {
141
- loadingStartSrc(() => user(true));
142
- loadingFinishSrc(() => user(false));
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(baseSrc, lockSrc) {
147
- return (user) => {
172
+ function Lock($base, $lock) {
173
+ return silentium.Event((transport) => {
148
174
  let locked = false;
149
- lockSrc((newLock) => {
150
- locked = newLock;
151
- });
152
- const i = silentium.Filtered(baseSrc, () => !locked);
153
- i(user);
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(baseSrc) {
158
- return (user) => {
159
- let lastValue = null;
160
- baseSrc((v) => {
161
- if (v !== lastValue) {
162
- user(v);
163
- lastValue = v;
164
- }
165
- });
166
- };
167
- }
168
-
169
- function OnlyChanged(baseSrc) {
170
- return (user) => {
171
- let firstValue = false;
172
- baseSrc((v) => {
173
- if (firstValue === false) {
174
- firstValue = true;
175
- } else {
176
- user(v);
177
- }
178
- });
179
- };
180
- }
181
-
182
- function Part(baseSrc, keySrc) {
183
- const baseSync = silentium.Primitive(baseSrc.event);
184
- const keySync = silentium.Primitive(keySrc);
185
- return {
186
- event: (user) => {
187
- silentium.All(
188
- baseSrc.event,
189
- keySrc
190
- )(([base, key]) => {
191
- const keyChunks = key.split(".");
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
- keyChunks.forEach((keyChunk) => {
194
- value = value[keyChunk];
232
+ keys.forEach((key) => {
233
+ value = value[key];
195
234
  });
196
235
  if (value !== void 0 && value !== base) {
197
- user(value);
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 Polling(baseSrc, triggerSrc) {
232
- return (user) => {
233
- triggerSrc(() => {
234
- baseSrc(user);
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 Shot(targetSrc, triggerSrc) {
240
- return (user) => {
241
- const targetSync = silentium.Primitive(targetSrc);
242
- triggerSrc(() => {
243
- const value = targetSync.primitive();
244
- if (silentium.isFilled(value)) {
245
- user(value);
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 (user) => {
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
- })(user);
264
- };
309
+ }).event(transport);
310
+ });
265
311
  }
266
312
 
267
- function Tick(baseSrc) {
268
- return (user) => {
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
- user(lastValue);
322
+ transport.use(lastValue);
277
323
  lastValue = null;
278
324
  }
279
325
  });
280
326
  };
281
- baseSrc((v) => {
282
- lastValue = v;
283
- if (!microtaskScheduled) {
284
- scheduleMicrotask();
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
- const $res = silentium.LateShared();
292
- const destructors = [];
293
- $base((v) => {
294
- const $event = silentium.Destructor(
295
- eventBuilder(silentium.Of(v), ...args.map((a) => Detached(a)))
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
- destructors.push($event);
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.destroy());
351
+ destructors.forEach((d) => d?.destroy());
304
352
  destructors.length = 0;
305
353
  };
306
- };
354
+ });
307
355
  }
308
356
 
309
- function HashTable(baseSrc) {
310
- return (user) => {
357
+ function HashTable($base) {
358
+ return silentium.Event((transport) => {
311
359
  const record = {};
312
- baseSrc(([key, value]) => {
313
- record[key] = value;
314
- user(record);
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(recordSrc) {
320
- return (user) => {
321
- const keys = Object.keys(recordSrc);
322
- silentium.All(...Object.values(recordSrc))((entries) => {
323
- const record = {};
324
- entries.forEach((entry, index) => {
325
- record[keys[index]] = entry;
326
- });
327
- user(record);
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 (user) => {
334
- silentium.All(
335
- joinPartSrc,
336
- ...sources
337
- )(([joinPart, ...strings]) => {
338
- user(strings.join(joinPart));
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
- function Template(theSrc = silentium.Of(""), placesSrc = silentium.Of({})) {
344
- let placesCounter = 0;
345
- const vars = {
346
- $TPL: silentium.Of("$TPL")
347
- };
348
- const destructors = [];
349
- return {
350
- value: (user) => {
351
- const varsSrc = RecordOf(vars);
352
- silentium.Applied(silentium.All(theSrc, placesSrc, varsSrc), ([base, rules, vars2]) => {
353
- Object.entries(rules).forEach(([ph, val]) => {
354
- base = base.replaceAll(ph, String(val));
355
- });
356
- Object.entries(vars2).forEach(([ph, val]) => {
357
- base = base.replaceAll(ph, String(val));
358
- });
359
- return base;
360
- })(user);
361
- },
362
- template: (value) => {
363
- theSrc = silentium.Of(value);
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 (user) => {
385
- silentium.All(
386
- patternSrc,
387
- valueSrc,
388
- flagsSrc
389
- )(([pattern, value, flags]) => {
390
- user(new RegExp(pattern, flags).test(value));
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 (user) => {
397
- silentium.All(
398
- patternSrc,
399
- valueSrc,
400
- replaceValueSrc,
401
- flagsSrc
402
- )(([pattern, value, replaceValue, flags]) => {
403
- user(String(value).replace(new RegExp(pattern, flags), replaceValue));
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 (user) => {
410
- silentium.All(
411
- patternSrc,
412
- valueSrc,
413
- flagsSrc
414
- )(([pattern, value, flags]) => {
415
- const result = new RegExp(pattern, flags).exec(value);
416
- user(result ?? []);
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 (user) => {
423
- silentium.All(
424
- baseSrc,
425
- keySrc,
426
- valueSrc
427
- )(([base, key, value]) => {
428
- base[key] = value;
429
- user(base);
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 emptySrc = () => silentium.Of(false);
435
- function Router(urlSrc, routesSrc, defaultSrc) {
436
- return (user) => {
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 destroyAllData = () => {
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
- routesSrc,
444
- urlSrc
445
- )(([routes, url]) => {
446
- destroyAllData();
447
- const instance = silentium.All(
448
- defaultSrc(),
449
- silentium.All(
450
- ...routes.map(
451
- (r) => silentium.Destructor(
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
- r.template,
459
- emptySrc
460
- ),
461
- (d) => destructors.push(d)
462
- ).event
510
+ $template,
511
+ $empty
512
+ );
513
+ })
463
514
  )
464
- )
465
- );
466
- silentium.Applied(instance, (r) => {
467
- const firstReal = r[1].find((r2) => r2 !== false);
468
- if (firstReal) {
469
- return firstReal;
470
- }
471
- return r[0];
472
- })(user);
473
- });
474
- return destroyAllData;
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(oneSrc, twoSrc) {
479
- return (user) => {
480
- silentium.All(
481
- oneSrc,
482
- twoSrc
483
- )(([one, two]) => {
484
- user(one && two);
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(oneSrc, twoSrc) {
490
- return (user) => {
491
- silentium.All(
492
- oneSrc,
493
- twoSrc
494
- )(([one, two]) => {
495
- user(one || two);
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(baseSrc) {
501
- return (user) => {
502
- baseSrc((v) => {
503
- user(!v);
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(baseSrc) {
509
- return (user) => {
510
- silentium.Applied(baseSrc, Boolean)(user);
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(jsonSrc, errorOwner) {
515
- return (user) => {
516
- jsonSrc((json) => {
517
- try {
518
- user(JSON.parse(json));
519
- } catch (error) {
520
- errorOwner?.(new Error(`Failed to parse JSON: ${error}`));
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(dataSrc, errorOwner) {
527
- return (user) => {
528
- dataSrc((data) => {
529
- try {
530
- user(JSON.stringify(data));
531
- } catch {
532
- errorOwner?.(new Error("Failed to convert to JSON"));
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(baseSrc) {
539
- return (user) => {
540
- silentium.Applied(baseSrc, (a) => a[0])(user);
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;