silentium 0.0.105 → 0.0.106

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 (66) hide show
  1. package/CHANGELOG.md +8 -0
  2. package/dist/silentium.cjs +131 -125
  3. package/dist/silentium.cjs.map +1 -1
  4. package/dist/silentium.d.ts +27 -27
  5. package/dist/silentium.js +106 -100
  6. package/dist/silentium.js.map +1 -1
  7. package/dist/silentium.min.js +1 -1
  8. package/dist/silentium.min.mjs +1 -1
  9. package/dist/silentium.min.mjs.map +1 -1
  10. package/dist/silentium.mjs +106 -100
  11. package/dist/silentium.mjs.map +1 -1
  12. package/package.json +1 -1
  13. package/src/base/DestroyContainer.test.ts +5 -5
  14. package/src/base/DestroyContainer.ts +4 -4
  15. package/src/base/Destructor.test.ts +4 -4
  16. package/src/base/Destructor.ts +7 -7
  17. package/src/base/Local.test.ts +4 -4
  18. package/src/base/Local.ts +2 -2
  19. package/src/base/Of.ts +4 -3
  20. package/src/base/On.ts +3 -2
  21. package/src/base/Void.ts +3 -1
  22. package/src/components/All.test.ts +3 -3
  23. package/src/components/All.ts +5 -5
  24. package/src/components/Any.test.ts +6 -6
  25. package/src/components/Any.ts +4 -4
  26. package/src/components/Applied.test.ts +4 -4
  27. package/src/components/Applied.ts +5 -5
  28. package/src/components/Chain.test.ts +7 -7
  29. package/src/components/Chain.ts +4 -4
  30. package/src/components/ConstructorApplied.test.ts +8 -8
  31. package/src/components/ConstructorApplied.ts +3 -3
  32. package/src/components/ConstructorArgs.test.ts +3 -3
  33. package/src/components/ConstructorArgs.ts +3 -3
  34. package/src/components/ConstructorDestroyable.test.ts +7 -7
  35. package/src/components/ConstructorDestroyable.ts +4 -4
  36. package/src/components/ExecutorApplied.test.ts +8 -8
  37. package/src/components/ExecutorApplied.ts +5 -5
  38. package/src/components/Filtered.test.ts +6 -6
  39. package/src/components/Filtered.ts +6 -6
  40. package/src/components/FromEvent.test.ts +3 -3
  41. package/src/components/FromEvent.ts +8 -8
  42. package/src/components/FromPromise.test.ts +5 -5
  43. package/src/components/FromPromise.ts +5 -5
  44. package/src/components/Late.test.ts +3 -3
  45. package/src/components/Late.ts +4 -4
  46. package/src/components/LateShared.test.ts +3 -3
  47. package/src/components/LateShared.ts +5 -5
  48. package/src/components/Map._deferred.test.ts +41 -0
  49. package/src/components/Map._fn.test.ts +20 -0
  50. package/src/components/Map.test.ts +9 -9
  51. package/src/components/Map.ts +9 -9
  52. package/src/components/Once.test.ts +6 -6
  53. package/src/components/Once.ts +4 -4
  54. package/src/components/{PrimitiveSource.test.ts → Primitive.test.ts} +7 -7
  55. package/src/components/{PrimitiveSource.ts → Primitive.ts} +2 -5
  56. package/src/components/Sequence.test.ts +5 -5
  57. package/src/components/Sequence.ts +4 -4
  58. package/src/components/Shared.test.ts +8 -8
  59. package/src/components/Shared.ts +12 -12
  60. package/src/components/SharedSource.test.ts +8 -8
  61. package/src/components/SharedSource.ts +7 -7
  62. package/src/components/Stream.test.ts +6 -6
  63. package/src/components/Stream.ts +4 -4
  64. package/src/components/index.ts +1 -1
  65. package/src/testing/{diagram.ts → Diagram.ts} +2 -2
  66. package/src/testing/index.ts +1 -1
package/CHANGELOG.md CHANGED
@@ -2,6 +2,14 @@
2
2
 
3
3
  All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.
4
4
 
5
+ ### [0.0.106](https://github.com/silentium-lab/silentium/compare/v0.0.105...v0.0.106) (2025-10-13)
6
+
7
+
8
+ ### Bug Fixes
9
+
10
+ * **main:** constructors from upper case ([f4ce5bb](https://github.com/silentium-lab/silentium/commit/f4ce5bb30e6a6b9d981826a9309895b513162a12))
11
+ * **main:** review fixes ([8f58cb3](https://github.com/silentium-lab/silentium/commit/8f58cb3449b4c7ec2247ae937ac1f0706b3e535f))
12
+
5
13
  ### [0.0.105](https://github.com/silentium-lab/silentium/compare/v0.0.104...v0.0.105) (2025-10-12)
6
14
 
7
15
 
@@ -3,10 +3,10 @@
3
3
  const isAllFilled = (keysFilled, keysKnown) => {
4
4
  return keysFilled.size > 0 && keysFilled.size === keysKnown.size;
5
5
  };
6
- const all = (...theInfos) => {
6
+ function All(...theInfos) {
7
7
  const keysKnown = new Set(Object.keys(theInfos));
8
8
  const keysFilled = /* @__PURE__ */ new Set();
9
- return function AllEvent(u) {
9
+ return function AllEvent(user) {
10
10
  const result = {};
11
11
  Object.entries(theInfos).forEach(([key, info]) => {
12
12
  keysKnown.add(key);
@@ -14,31 +14,31 @@ const all = (...theInfos) => {
14
14
  keysFilled.add(key);
15
15
  result[key] = v;
16
16
  if (isAllFilled(keysFilled, keysKnown)) {
17
- u(Object.values(result));
17
+ user(Object.values(result));
18
18
  }
19
19
  });
20
20
  });
21
21
  };
22
- };
22
+ }
23
23
 
24
- const any = (...infos) => {
25
- return function AnyEvent(u) {
24
+ function Any(...infos) {
25
+ return function AnyEvent(user) {
26
26
  infos.forEach((info) => {
27
- info(u);
27
+ info(user);
28
28
  });
29
29
  };
30
- };
30
+ }
31
31
 
32
- const applied = (baseEv, applier) => {
33
- return function AppliedEvent(u) {
32
+ function Applied(baseEv, applier) {
33
+ return function AppliedEvent(user) {
34
34
  baseEv(function AppliedBaseUser(v) {
35
- u(applier(v));
35
+ user(applier(v));
36
36
  });
37
37
  };
38
- };
38
+ }
39
39
 
40
- const chain = (...infos) => {
41
- return function ChainEvent(u) {
40
+ function Chain(...infos) {
41
+ return function ChainEvent(user) {
42
42
  let lastValue;
43
43
  const handleI = (index) => {
44
44
  const info = infos[index];
@@ -48,7 +48,7 @@ const chain = (...infos) => {
48
48
  lastValue = v;
49
49
  }
50
50
  if (lastValue) {
51
- u(lastValue);
51
+ user(lastValue);
52
52
  }
53
53
  if (nextI && !lastValue) {
54
54
  handleI(index + 1);
@@ -57,37 +57,37 @@ const chain = (...infos) => {
57
57
  };
58
58
  handleI(0);
59
59
  };
60
- };
60
+ }
61
61
 
62
- const executorApplied = (baseEv, applier) => {
63
- return function ExecutorAppliedEvent(u) {
64
- const ExecutorAppliedBaseUser = applier(u);
62
+ function ExecutorApplied(baseEv, applier) {
63
+ return function ExecutorAppliedEvent(user) {
64
+ const ExecutorAppliedBaseUser = applier(user);
65
65
  baseEv(ExecutorAppliedBaseUser);
66
66
  };
67
- };
67
+ }
68
68
 
69
- const filtered = (baseEv, predicate, defaultValue) => {
70
- return function FilteredEvent(u) {
69
+ function Filtered(baseEv, predicate, defaultValue) {
70
+ return function FilteredEvent(user) {
71
71
  baseEv(function FilteredBaseUser(v) {
72
72
  if (predicate(v)) {
73
- u(v);
73
+ user(v);
74
74
  } else if (defaultValue !== void 0) {
75
- u(defaultValue);
75
+ user(defaultValue);
76
76
  }
77
77
  });
78
78
  };
79
- };
79
+ }
80
80
 
81
- const fromEvent = (emitterEv, eventNameEv, subscribeMethodEv, unsubscribeMethodEv) => {
81
+ function FromEvent(emitterEv, eventNameEv, subscribeMethodEv, unsubscribeMethodEv) {
82
82
  let lastU = null;
83
83
  const handler = function FromEventHandler(v) {
84
84
  if (lastU) {
85
85
  lastU(v);
86
86
  }
87
87
  };
88
- return function FromEventEvent(u) {
89
- lastU = u;
90
- const a = all(emitterEv, eventNameEv, subscribeMethodEv);
88
+ return function FromEventEvent(user) {
89
+ lastU = user;
90
+ const a = All(emitterEv, eventNameEv, subscribeMethodEv);
91
91
  a(function FromEventAllUser([emitter, eventName, subscribe]) {
92
92
  if (!emitter?.[subscribe]) {
93
93
  return;
@@ -99,23 +99,23 @@ const fromEvent = (emitterEv, eventNameEv, subscribeMethodEv, unsubscribeMethodE
99
99
  if (!unsubscribeMethodEv) {
100
100
  return;
101
101
  }
102
- const a2 = all(emitterEv, eventNameEv, unsubscribeMethodEv);
102
+ const a2 = All(emitterEv, eventNameEv, unsubscribeMethodEv);
103
103
  a2(([emitter, eventName, unsubscribe]) => {
104
104
  emitter?.[unsubscribe]?.(eventName, handler);
105
105
  });
106
106
  };
107
107
  };
108
- };
108
+ }
109
109
 
110
- const fromPromise = (p, errorOwner) => {
111
- return function FromPromiseEvent(u) {
110
+ function FromPromise(p, errorOwner) {
111
+ return function FromPromiseEvent(user) {
112
112
  p.then(function FromPromiseThen(v) {
113
- u(v);
113
+ user(v);
114
114
  }).catch(function FromPromiseCatch(e) {
115
115
  errorOwner?.(e);
116
116
  });
117
117
  };
118
- };
118
+ }
119
119
 
120
120
  const isFilled = (value) => {
121
121
  return value !== void 0 && value !== null;
@@ -160,7 +160,7 @@ class OwnerPool {
160
160
  }
161
161
  }
162
162
 
163
- const late = (v) => {
163
+ function Late(v) {
164
164
  let lateUser = null;
165
165
  const notify = (v2) => {
166
166
  if (isFilled(v2) && lateUser) {
@@ -168,52 +168,52 @@ const late = (v) => {
168
168
  }
169
169
  };
170
170
  return {
171
- event: function LateEvent(u) {
171
+ event: function LateEvent(user) {
172
172
  if (lateUser) {
173
173
  throw new Error(
174
174
  "Late component gets new user, when another was already connected!"
175
175
  );
176
176
  }
177
- lateUser = u;
177
+ lateUser = user;
178
178
  notify(v);
179
179
  },
180
180
  use: function LateUser(v2) {
181
181
  notify(v2);
182
182
  }
183
183
  };
184
- };
184
+ }
185
185
 
186
- const once = (baseEv) => {
187
- return function OnceEvent(u) {
186
+ function Once(baseEv) {
187
+ return function OnceEvent(user) {
188
188
  let isFilled = false;
189
189
  baseEv(function OnceBaseUser(v) {
190
190
  if (!isFilled) {
191
191
  isFilled = true;
192
- u(v);
192
+ user(v);
193
193
  }
194
194
  });
195
195
  };
196
- };
196
+ }
197
197
 
198
- const shared = (baseEv, stateless = false) => {
198
+ function Shared(baseEv, stateless = false) {
199
199
  const ownersPool = new OwnerPool();
200
200
  let lastValue;
201
- const calls = late();
202
- once(calls.event)(function SharedCallsUser() {
201
+ const calls = Late();
202
+ Once(calls.event)(function SharedCallsUser() {
203
203
  baseEv(function SharedBaseUser(v) {
204
204
  lastValue = v;
205
205
  ownersPool.owner()(v);
206
206
  });
207
207
  });
208
208
  return {
209
- event: function SharedEvent(u) {
209
+ event: function SharedEvent(user) {
210
210
  calls.use(1);
211
- if (!stateless && isFilled(lastValue) && !ownersPool.has(u)) {
212
- u(lastValue);
211
+ if (!stateless && isFilled(lastValue) && !ownersPool.has(user)) {
212
+ user(lastValue);
213
213
  }
214
- ownersPool.add(u);
214
+ ownersPool.add(user);
215
215
  return () => {
216
- ownersPool.remove(u);
216
+ ownersPool.remove(user);
217
217
  };
218
218
  },
219
219
  use: function SharedUser(value) {
@@ -231,46 +231,46 @@ const shared = (baseEv, stateless = false) => {
231
231
  ownersPool.destroy();
232
232
  }
233
233
  };
234
- };
234
+ }
235
235
 
236
- const sharedSource = (baseEv, stateless = false) => {
237
- const sharedEv = shared(baseEv.event, stateless);
236
+ function SharedSource(baseEv, stateless = false) {
237
+ const sharedEv = Shared(baseEv.event, stateless);
238
238
  return {
239
- event: function SharedSourceEvent(u) {
240
- sharedEv.event(u);
239
+ event: function SharedSourceEvent(user) {
240
+ sharedEv.event(user);
241
241
  },
242
242
  use: function SharedSourceUser(v) {
243
243
  sharedEv.touched();
244
244
  baseEv.use(v);
245
245
  }
246
246
  };
247
- };
247
+ }
248
248
 
249
- const lateShared = (value) => {
250
- return sharedSource(late(value));
251
- };
249
+ function LateShared(value) {
250
+ return SharedSource(Late(value));
251
+ }
252
252
 
253
- const constructorApplied = (baseConstructor, applier) => {
253
+ function ConstructorApplied(baseConstructor, applier) {
254
254
  return function LazyAppliedData(...args) {
255
255
  return applier(baseConstructor(...args));
256
256
  };
257
- };
257
+ }
258
258
 
259
- const constructorArgs = (baseConstructor, args, startFromArgIndex = 0) => {
259
+ function ConstructorArgs(baseConstructor, args, startFromArgIndex = 0) {
260
260
  return function ConstructorArgsEvent(...runArgs) {
261
261
  return baseConstructor(...mergeAtIndex(runArgs, args, startFromArgIndex));
262
262
  };
263
- };
263
+ }
264
264
  function mergeAtIndex(arr1, arr2, index) {
265
265
  const result = arr1.slice(0, index);
266
266
  while (result.length < index) result.push(void 0);
267
267
  return result.concat(arr2);
268
268
  }
269
269
 
270
- const constructorDestroyable = (baseConstructor) => {
270
+ function ConstructorDestroyable(baseConstructor) {
271
271
  const destructors = [];
272
272
  return {
273
- get: function ConstructorDestroyable(...args) {
273
+ get: function ConstructorDestroyableGet(...args) {
274
274
  const inst = baseConstructor(...args);
275
275
  return (user) => {
276
276
  if ("destroy" in inst) {
@@ -291,9 +291,9 @@ const constructorDestroyable = (baseConstructor) => {
291
291
  destructors.forEach((i) => i());
292
292
  }
293
293
  };
294
- };
294
+ }
295
295
 
296
- const destructor = (baseEv, destructorUser) => {
296
+ function Destructor(baseEv, destructorUser) {
297
297
  let mbDestructor;
298
298
  let theUser = null;
299
299
  const destroy = () => {
@@ -301,11 +301,11 @@ const destructor = (baseEv, destructorUser) => {
301
301
  mbDestructor?.();
302
302
  };
303
303
  return {
304
- event: function DestructorData(u) {
305
- theUser = u;
304
+ event: function DestructorEvent(user) {
305
+ theUser = new WeakRef(user);
306
306
  mbDestructor = baseEv((v) => {
307
307
  if (theUser) {
308
- theUser(v);
308
+ theUser.deref()?.(v);
309
309
  }
310
310
  });
311
311
  if (mbDestructor && destructorUser) {
@@ -315,9 +315,9 @@ const destructor = (baseEv, destructorUser) => {
315
315
  },
316
316
  destroy
317
317
  };
318
- };
318
+ }
319
319
 
320
- const local = (baseEv) => {
320
+ function Local(baseEv) {
321
321
  return function LocalEvent(user) {
322
322
  let destroyed = false;
323
323
  const d = baseEv(function LocalBaseUser(v) {
@@ -330,22 +330,28 @@ const local = (baseEv) => {
330
330
  d?.();
331
331
  };
332
332
  };
333
- };
333
+ }
334
334
 
335
- const of = (value) => function OfEvent(u) {
336
- return u(value);
337
- };
335
+ function Of(value) {
336
+ return function OfEvent(user) {
337
+ return user(value);
338
+ };
339
+ }
338
340
 
339
- const on = (event, user) => event(user);
341
+ function On(event, user) {
342
+ return event(user);
343
+ }
340
344
 
341
- const _void = () => function VoidEvent() {
342
- };
345
+ function Void() {
346
+ return function VoidEvent() {
347
+ };
348
+ }
343
349
 
344
- const destroyContainer = () => {
350
+ function DestroyContainer() {
345
351
  const destructors = [];
346
352
  return {
347
353
  add(e) {
348
- const d = destructor(e);
354
+ const d = Destructor(e);
349
355
  destructors.push(d.destroy);
350
356
  return d.event;
351
357
  },
@@ -353,27 +359,27 @@ const destroyContainer = () => {
353
359
  destructors.forEach((d) => d());
354
360
  }
355
361
  };
356
- };
362
+ }
357
363
 
358
- const map = (baseEv, targetEv) => {
359
- return function MapData(u) {
364
+ function Map(baseEv, targetEv) {
365
+ return function MapData(user) {
360
366
  baseEv(function MapBaseUser(v) {
361
367
  const infos = [];
362
368
  v.forEach((val) => {
363
369
  let valInfo = val;
364
370
  if (typeof valInfo !== "function") {
365
- valInfo = of(valInfo);
371
+ valInfo = Of(valInfo);
366
372
  }
367
373
  const info = targetEv(valInfo);
368
374
  infos.push(info);
369
375
  });
370
- const allI = all(...infos);
371
- allI(u);
376
+ const allI = All(...infos);
377
+ allI(user);
372
378
  });
373
379
  };
374
- };
380
+ }
375
381
 
376
- const primitive = (baseEv, theValue = null) => {
382
+ function Primitive(baseEv, theValue = null) {
377
383
  baseEv(function PrimitiveBaseUser(v) {
378
384
  theValue = v;
379
385
  });
@@ -391,54 +397,54 @@ const primitive = (baseEv, theValue = null) => {
391
397
  return theValue;
392
398
  }
393
399
  };
394
- };
400
+ }
395
401
 
396
- const sequence = (baseEv) => {
397
- return function SequenceEvent(u) {
402
+ function Sequence(baseEv) {
403
+ return function SequenceEvent(user) {
398
404
  const result = [];
399
405
  baseEv(function SequenceBaseUser(v) {
400
406
  result.push(v);
401
- u(result);
407
+ user(result);
402
408
  });
403
409
  };
404
- };
410
+ }
405
411
 
406
- const stream = (baseEv) => {
407
- return function StreamEvent(u) {
412
+ function Stream(baseEv) {
413
+ return function StreamEvent(user) {
408
414
  baseEv(function StreamBaseUser(v) {
409
415
  v.forEach((cv) => {
410
- u(cv);
416
+ user(cv);
411
417
  });
412
418
  });
413
419
  };
414
- };
420
+ }
415
421
 
422
+ exports.All = All;
423
+ exports.Any = Any;
424
+ exports.Applied = Applied;
425
+ exports.Chain = Chain;
426
+ exports.ConstructorApplied = ConstructorApplied;
427
+ exports.ConstructorArgs = ConstructorArgs;
428
+ exports.ConstructorDestroyable = ConstructorDestroyable;
429
+ exports.DestroyContainer = DestroyContainer;
430
+ exports.Destructor = Destructor;
431
+ exports.ExecutorApplied = ExecutorApplied;
432
+ exports.Filtered = Filtered;
433
+ exports.FromEvent = FromEvent;
434
+ exports.FromPromise = FromPromise;
435
+ exports.Late = Late;
436
+ exports.LateShared = LateShared;
437
+ exports.Local = Local;
438
+ exports.Map = Map;
439
+ exports.Of = Of;
440
+ exports.On = On;
441
+ exports.Once = Once;
416
442
  exports.OwnerPool = OwnerPool;
417
- exports._void = _void;
418
- exports.all = all;
419
- exports.any = any;
420
- exports.applied = applied;
421
- exports.chain = chain;
422
- exports.constructorApplied = constructorApplied;
423
- exports.constructorArgs = constructorArgs;
424
- exports.constructorDestroyable = constructorDestroyable;
425
- exports.destroyContainer = destroyContainer;
426
- exports.destructor = destructor;
427
- exports.executorApplied = executorApplied;
428
- exports.filtered = filtered;
429
- exports.fromEvent = fromEvent;
430
- exports.fromPromise = fromPromise;
443
+ exports.Primitive = Primitive;
444
+ exports.Sequence = Sequence;
445
+ exports.Shared = Shared;
446
+ exports.SharedSource = SharedSource;
447
+ exports.Stream = Stream;
448
+ exports.Void = Void;
431
449
  exports.isFilled = isFilled;
432
- exports.late = late;
433
- exports.lateShared = lateShared;
434
- exports.local = local;
435
- exports.map = map;
436
- exports.of = of;
437
- exports.on = on;
438
- exports.once = once;
439
- exports.primitive = primitive;
440
- exports.sequence = sequence;
441
- exports.shared = shared;
442
- exports.sharedSource = sharedSource;
443
- exports.stream = stream;
444
450
  //# sourceMappingURL=silentium.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"silentium.cjs","sources":["../src/components/All.ts","../src/components/Any.ts","../src/components/Applied.ts","../src/components/Chain.ts","../src/components/ExecutorApplied.ts","../src/components/Filtered.ts","../src/components/FromEvent.ts","../src/components/FromPromise.ts","../src/helpers/isFilled.ts","../src/helpers/OwnerPool.ts","../src/components/Late.ts","../src/components/Once.ts","../src/components/Shared.ts","../src/components/SharedSource.ts","../src/components/LateShared.ts","../src/components/ConstructorApplied.ts","../src/components/ConstructorArgs.ts","../src/components/ConstructorDestroyable.ts","../src/base/Destructor.ts","../src/base/Local.ts","../src/base/Of.ts","../src/base/On.ts","../src/base/Void.ts","../src/base/DestroyContainer.ts","../src/components/Map.ts","../src/components/PrimitiveSource.ts","../src/components/Sequence.ts","../src/components/Stream.ts"],"sourcesContent":["import { EventType } from \"../types\";\n\ntype ExtractTypeS<T> = T extends EventType<infer U> ? U : never;\n\nexport type ExtractTypesFromArrayS<T extends EventType<any>[]> = {\n [K in keyof T]: ExtractTypeS<T[K]>;\n};\n\nconst isAllFilled = (keysFilled: Set<string>, keysKnown: Set<string>) => {\n return keysFilled.size > 0 && keysFilled.size === keysKnown.size;\n};\n\n/**\n * Combines multiple information sources into a single unified source\n * represented as an array containing values from all sources\n * https://silentium-lab.github.io/silentium/#/en/information/all\n */\nexport const all = <const T extends EventType[]>(\n ...theInfos: T\n): EventType<ExtractTypesFromArrayS<T>> => {\n const keysKnown = new Set<string>(Object.keys(theInfos));\n const keysFilled = new Set<string>();\n\n return function AllEvent(u) {\n const result: Record<string, unknown> = {};\n\n Object.entries(theInfos).forEach(([key, info]) => {\n keysKnown.add(key);\n info(function AllItemUser(v) {\n keysFilled.add(key);\n result[key] = v;\n if (isAllFilled(keysFilled, keysKnown)) {\n u(Object.values(result) as ExtractTypesFromArrayS<T>);\n }\n });\n });\n };\n};\n","import { EventType } from \"../types\";\n\n/**\n * From a set of information sources we get\n * a common response from any source for a single owner\n * https://silentium-lab.github.io/silentium/#/en/information/any\n */\nexport const any = <T>(...infos: EventType<T>[]): EventType<T> => {\n return function AnyEvent(u) {\n infos.forEach((info) => {\n info(u);\n });\n };\n};\n","import { EventType, ConstructorType } from \"../types\";\n\n/**\n * Information to which the function was applied to change the value\n * https://silentium-lab.github.io/silentium/#/en/information/applied\n */\nexport const applied = <T, R>(\n baseEv: EventType<T>,\n applier: ConstructorType<[T], R>,\n): EventType<R> => {\n return function AppliedEvent(u) {\n baseEv(function AppliedBaseUser(v) {\n u(applier(v));\n });\n };\n};\n","import { EventTypeValue } from \"../types/EventType\";\nimport { EventType } from \"../types\";\n\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\ntype Last<T extends any[]> = T extends [...infer _, infer L] ? L : never;\n\n/**\n * The set of information sources forms a sequential chain where each source provides\n * an answer. The final answer will be the output result. If any source in the chain\n * provides a new answer, the component's overall response will be repeated.\n * https://silentium-lab.github.io/silentium/#/en/information/applied\n */\nexport const chain = <T extends EventType[]>(...infos: T): Last<T> => {\n return <Last<T>>function ChainEvent(u) {\n let lastValue: EventTypeValue<Last<T>> | undefined;\n\n const handleI = (index: number) => {\n const info = infos[index] as Last<T>;\n const nextI = infos[index + 1] as Last<T> | undefined;\n\n info(function ChainItemUser(v) {\n if (!nextI) {\n lastValue = v as EventTypeValue<Last<T>>;\n }\n\n if (lastValue) {\n u(lastValue);\n }\n\n if (nextI && !lastValue) {\n handleI(index + 1);\n }\n });\n };\n\n handleI(0);\n };\n};\n","import { EventType, EventUserType } from \"../types\";\n\n/**\n * Information to which a function is applied in order\n * to control the value passing process\n * https://silentium-lab.github.io/silentium/#/en/information/applied\n */\nexport const executorApplied = <T>(\n baseEv: EventType<T>,\n applier: (executor: EventUserType<T>) => EventUserType<T>,\n): EventType<T> => {\n return function ExecutorAppliedEvent(u) {\n const ExecutorAppliedBaseUser = applier(u);\n baseEv(ExecutorAppliedBaseUser);\n };\n};\n","import { EventType, ConstructorType } from \"../types\";\n\n/**\n * Information whose value is being validated\n * via a predicate; if the predicate returns true, the value\n * can be passed to the output\n * https://silentium-lab.github.io/silentium/#/en/information/filtered\n */\nexport const filtered = <T>(\n baseEv: EventType<T>,\n predicate: ConstructorType<[T], boolean>,\n defaultValue?: T,\n): EventType<T> => {\n return function FilteredEvent(u) {\n baseEv(function FilteredBaseUser(v) {\n if (predicate(v)) {\n u(v);\n } else if (defaultValue !== undefined) {\n u(defaultValue);\n }\n });\n };\n};\n","import { EventTypeDestroyable } from \"../types/EventType\";\nimport { EventType, EventUserType } from \"../types\";\nimport { all } from \"./All\";\n\n/**\n * A component that receives data from an event and\n * presents it as an information object\n * https://silentium-lab.github.io/silentium/#/en/information/from-event\n */\nexport const fromEvent = <T>(\n emitterEv: EventType<any>,\n eventNameEv: EventType<string>,\n subscribeMethodEv: EventType<string>,\n unsubscribeMethodEv?: EventType<string>,\n): EventTypeDestroyable<T> => {\n let lastU: EventUserType<T> | null = null;\n const handler = function FromEventHandler(v: T) {\n if (lastU) {\n lastU(v);\n }\n };\n return function FromEventEvent(u) {\n lastU = u;\n const a = all(emitterEv, eventNameEv, subscribeMethodEv);\n a(function FromEventAllUser([emitter, eventName, subscribe]) {\n if (!emitter?.[subscribe]) {\n return;\n }\n emitter[subscribe](eventName, handler);\n });\n\n return function FromEventDestructor() {\n lastU = null;\n if (!unsubscribeMethodEv) {\n return;\n }\n const a = all(emitterEv, eventNameEv, unsubscribeMethodEv);\n a(([emitter, eventName, unsubscribe]) => {\n emitter?.[unsubscribe]?.(eventName, handler);\n });\n };\n };\n};\n","import { EventType, EventUserType } from \"../types\";\n\n/**\n * Component that gets a value from a promise and\n * presents it as information\n * https://silentium-lab.github.io/silentium/#/en/information/from-promise\n */\nexport const fromPromise = <T>(\n p: Promise<T>,\n errorOwner?: EventUserType,\n): EventType<T> => {\n return function FromPromiseEvent(u) {\n p.then(function FromPromiseThen(v) {\n u(v);\n }).catch(function FromPromiseCatch(e) {\n errorOwner?.(e);\n });\n };\n};\n","export const isFilled = <T>(\n value?: T,\n): value is Exclude<T, null | undefined> => {\n return value !== undefined && value !== null;\n};\n","import { EventUserType } from \"../types\";\n\n/**\n * Helps maintain an owner list allowing different\n * owners to get information from a common source\n * https://silentium-lab.github.io/silentium/#/en/utils/owner-pool\n */\nexport class OwnerPool<T> {\n private owners: Set<EventUserType<T>>;\n private innerOwner: EventUserType<T>;\n\n public constructor() {\n this.owners = new Set<EventUserType<T>>();\n this.innerOwner = (v) => {\n this.owners.forEach((g) => {\n g(v);\n });\n };\n }\n\n public owner() {\n return this.innerOwner;\n }\n\n public size(): number {\n return this.owners.size;\n }\n\n public has(owner: EventUserType<T>): boolean {\n return this.owners.has(owner);\n }\n\n public add(owner: EventUserType<T>) {\n this.owners.add(owner);\n return this;\n }\n\n public remove(g: EventUserType<T>) {\n this.owners.delete(g);\n return this;\n }\n\n public destroy() {\n this.owners.forEach((g) => {\n this.remove(g);\n });\n return this;\n }\n}\n","import { EventUserType, SourceType } from \"../types\";\nimport { isFilled } from \"../helpers\";\n\n/**\n * A component that allows creating linked objects of information and its owner\n * in such a way that if a new value is assigned to the owner, this value\n * will become the value of the linked information source\n * https://silentium-lab.github.io/silentium/#/en/information/of\n */\nexport const late = <T>(v?: T): SourceType<T> => {\n let lateUser: EventUserType<T> | null = null;\n const notify = (v?: T) => {\n if (isFilled(v) && lateUser) {\n lateUser(v);\n }\n };\n\n return {\n event: function LateEvent(u) {\n if (lateUser) {\n throw new Error(\n \"Late component gets new user, when another was already connected!\",\n );\n }\n\n lateUser = u;\n notify(v);\n },\n use: function LateUser(v) {\n notify(v);\n },\n };\n};\n","import { EventType } from \"../types\";\n\n/**\n * Limits the number of values from the information source\n * to a single value - once the first value is emitted, no more\n * values are delivered from the source\n * https://silentium-lab.github.io/silentium/#/en/information/once\n */\nexport const once = <T>(baseEv: EventType<T>): EventType<T> => {\n return function OnceEvent(u) {\n let isFilled = false;\n baseEv(function OnceBaseUser(v) {\n if (!isFilled) {\n isFilled = true;\n u(v);\n }\n });\n };\n};\n","import { EventType, DestroyableType, SourceType } from \"../types\";\nimport { isFilled, OwnerPool } from \"../helpers\";\nimport { late } from \"../components/Late\";\nimport { once } from \"../components/Once\";\n\n/**\n * An information object that helps multiple owners access\n * a single another information object\n * https://silentium-lab.github.io/silentium/#/en/information/pool\n */\nexport const shared = <T>(\n baseEv: EventType<T>,\n stateless = false,\n): SourceType<T> & {\n pool: () => OwnerPool<T>;\n touched: () => void;\n} & DestroyableType => {\n const ownersPool = new OwnerPool<T>();\n let lastValue: T | undefined;\n\n const calls = late();\n once(calls.event)(function SharedCallsUser() {\n baseEv(function SharedBaseUser(v) {\n lastValue = v;\n ownersPool.owner()(v);\n });\n });\n\n return {\n event: function SharedEvent(u) {\n calls.use(1);\n if (!stateless && isFilled(lastValue) && !ownersPool.has(u)) {\n u(lastValue);\n }\n ownersPool.add(u);\n return () => {\n ownersPool.remove(u);\n };\n },\n use: function SharedUser(value: T) {\n calls.use(1);\n lastValue = value;\n ownersPool.owner()(value);\n },\n touched() {\n calls.use(1);\n },\n pool() {\n return ownersPool;\n },\n destroy() {\n ownersPool.destroy();\n },\n };\n};\n","import { SourceType } from \"../types\";\nimport { shared } from \"../components/Shared\";\n\nexport const sharedSource = <T>(\n baseEv: SourceType<T>,\n stateless = false,\n): SourceType<T> => {\n const sharedEv = shared(baseEv.event, stateless);\n\n return {\n event: function SharedSourceEvent(u) {\n sharedEv.event(u);\n },\n use: function SharedSourceUser(v) {\n sharedEv.touched();\n baseEv.use(v);\n },\n };\n};\n","import { late } from \"../components/Late\";\nimport { sharedSource } from \"../components/SharedSource\";\nimport { SourceType } from \"../types\";\n\nexport const lateShared = <T>(value?: T): SourceType<T> => {\n return sharedSource(late(value));\n};\n","import { EventType, ConstructorType } from \"../types\";\n\n/**\n * Constructor with applied function to its results\n */\nexport const constructorApplied = <T>(\n baseConstructor: ConstructorType<any[], EventType>,\n applier: (i: EventType) => EventType<T>,\n): ConstructorType<EventType[], EventType<T>> => {\n return function LazyAppliedData(...args) {\n return applier(baseConstructor(...args));\n };\n};\n","import { EventType, ConstructorType } from \"../types\";\n\nexport const constructorArgs = (\n baseConstructor: ConstructorType<any[], EventType>,\n args: unknown[],\n startFromArgIndex: number = 0,\n) => {\n return function ConstructorArgsEvent(...runArgs: any[]) {\n return baseConstructor(...mergeAtIndex(runArgs, args, startFromArgIndex));\n };\n};\n\nfunction mergeAtIndex(arr1: unknown[], arr2: unknown[], index: number) {\n const result = arr1.slice(0, index);\n while (result.length < index) result.push(undefined);\n return result.concat(arr2);\n}\n","import {\n ConstructorType,\n DestroyableType,\n DestructorType,\n EventObjectType,\n EventType,\n} from \"../types\";\n\n/**\n * Constructor what can be destroyed\n */\nexport const constructorDestroyable = (\n baseConstructor: ConstructorType<\n any[],\n (DestroyableType & EventObjectType) | EventType\n >,\n): {\n get: ConstructorType<any[], EventType>;\n destroy: DestructorType;\n} => {\n const destructors: DestructorType[] = [];\n return {\n get: function ConstructorDestroyable(...args) {\n const inst = baseConstructor(...args);\n return (user) => {\n if (\"destroy\" in inst) {\n destructors.push(inst.destroy);\n inst.event(user);\n } else {\n const d = inst(user);\n if (d) {\n destructors.push(d);\n }\n }\n\n return () => {\n destructors.forEach((i) => i());\n };\n };\n },\n destroy: function ConstructorDestructor() {\n destructors.forEach((i) => i());\n },\n };\n};\n","import { DestructorType, EventType, EventUserType } from \"../types\";\n\nexport const destructor = <T>(\n baseEv: EventType<T>,\n destructorUser?: EventUserType<DestructorType>,\n) => {\n let mbDestructor: DestructorType | void;\n let theUser: EventUserType<T> | null = null;\n const destroy = () => {\n theUser = null;\n mbDestructor?.();\n };\n return {\n event: function DestructorData(u: any) {\n theUser = u;\n mbDestructor = baseEv((v) => {\n if (theUser) {\n theUser(v);\n }\n });\n if (mbDestructor && destructorUser) {\n destructorUser(destroy);\n }\n return destroy;\n } as EventType<T>,\n destroy,\n };\n};\n","import { EventType } from \"../types\";\n\n/**\n * Create local copy of source what can be destroyed\n */\nexport const local = <T>(baseEv: EventType<T>): EventType<T> => {\n return function LocalEvent(user) {\n let destroyed = false;\n const d = baseEv(function LocalBaseUser(v) {\n if (!destroyed) {\n user(v);\n }\n });\n return () => {\n destroyed = true;\n d?.();\n };\n };\n};\n","import { EventType } from \"../types\";\n\nexport const of = <T>(value: T): EventType<T> =>\n function OfEvent(u) {\n return u(value);\n };\n","import { EventType, EventUserType } from \"../types\";\n\n/**\n * Run data with user\n */\nexport const on = <T>(event: EventType<T>, user: EventUserType<T>) =>\n event(user);\n","import { EventUserType } from \"../types\";\n\n/**\n * Silent user\n */\nexport const _void = (): EventUserType => function VoidEvent() {};\n","import { destructor } from \"../base/Destructor\";\nimport { DestructorType, EventType } from \"../types\";\n\nexport const destroyContainer = () => {\n const destructors: DestructorType[] = [];\n return {\n add(e: EventType) {\n const d = destructor(e);\n destructors.push(d.destroy);\n return d.event;\n },\n destroy() {\n destructors.forEach((d) => d());\n },\n };\n};\n","import { EventType, ConstructorType } from \"../types\";\nimport { of } from \"../base\";\nimport { all } from \"./All\";\n\n/**\n * Component that applies an info object constructor to each data item,\n * producing an information source with new values\n * https://silentium-lab.github.io/silentium/#/en/information/map\n */\nexport const map = <T, TG>(\n baseEv: EventType<T[]>,\n targetEv: ConstructorType<any[], EventType<TG>>,\n): EventType<TG[]> => {\n return function MapData(u) {\n baseEv(function MapBaseUser(v) {\n const infos: EventType<TG>[] = [];\n v.forEach((val) => {\n let valInfo: EventType<T> | T = val;\n if (typeof valInfo !== \"function\") {\n valInfo = of(valInfo);\n }\n const info = targetEv(valInfo);\n infos.push(info);\n });\n const allI = all(...infos);\n allI(u);\n });\n };\n};\n","import { EventType } from \"../types\";\n\nexport const primitive = <T>(\n baseEv: EventType<T>,\n theValue: T | null = null,\n) => {\n baseEv(function PrimitiveBaseUser(v) {\n theValue = v;\n });\n\n return {\n [Symbol.toPrimitive]() {\n return theValue;\n },\n primitive() {\n return theValue;\n },\n primitiveWithException() {\n if (theValue === null) {\n throw new Error(\"Primitive value is null\");\n }\n return theValue;\n },\n };\n};\n","import { EventType } from \"../types\";\n\n/**\n * A component that takes one value at a time and returns\n * an array of all previous values\n * https://silentium-lab.github.io/silentium/#/en/information/sequence\n */\nexport const sequence = <T>(baseEv: EventType<T>): EventType<T[]> => {\n return function SequenceEvent(u) {\n const result: T[] = [];\n baseEv(function SequenceBaseUser(v) {\n result.push(v);\n u(result);\n });\n };\n};\n","import { EventType } from \"../types\";\n\n/**\n * Component that receives a data array and yields values one by one\n * https://silentium-lab.github.io/silentium/#/en/information/stream\n */\nexport const stream = <T>(baseEv: EventType<T[]>): EventType<T> => {\n return function StreamEvent(u) {\n baseEv(function StreamBaseUser(v) {\n v.forEach((cv) => {\n u(cv);\n });\n });\n };\n};\n"],"names":["a","v"],"mappings":"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"}
1
+ {"version":3,"file":"silentium.cjs","sources":["../src/components/All.ts","../src/components/Any.ts","../src/components/Applied.ts","../src/components/Chain.ts","../src/components/ExecutorApplied.ts","../src/components/Filtered.ts","../src/components/FromEvent.ts","../src/components/FromPromise.ts","../src/helpers/isFilled.ts","../src/helpers/OwnerPool.ts","../src/components/Late.ts","../src/components/Once.ts","../src/components/Shared.ts","../src/components/SharedSource.ts","../src/components/LateShared.ts","../src/components/ConstructorApplied.ts","../src/components/ConstructorArgs.ts","../src/components/ConstructorDestroyable.ts","../src/base/Destructor.ts","../src/base/Local.ts","../src/base/Of.ts","../src/base/On.ts","../src/base/Void.ts","../src/base/DestroyContainer.ts","../src/components/Map.ts","../src/components/Primitive.ts","../src/components/Sequence.ts","../src/components/Stream.ts"],"sourcesContent":["import { EventType } from \"../types\";\n\ntype ExtractTypeS<T> = T extends EventType<infer U> ? U : never;\n\nexport type ExtractTypesFromArrayS<T extends EventType<any>[]> = {\n [K in keyof T]: ExtractTypeS<T[K]>;\n};\n\nconst isAllFilled = (keysFilled: Set<string>, keysKnown: Set<string>) => {\n return keysFilled.size > 0 && keysFilled.size === keysKnown.size;\n};\n\n/**\n * Combines multiple information sources into a single unified source\n * represented as an array containing values from all sources\n * https://silentium-lab.github.io/silentium/#/en/information/all\n */\nexport function All<const T extends EventType[]>(\n ...theInfos: T\n): EventType<ExtractTypesFromArrayS<T>> {\n const keysKnown = new Set<string>(Object.keys(theInfos));\n const keysFilled = new Set<string>();\n\n return function AllEvent(user) {\n const result: Record<string, unknown> = {};\n\n Object.entries(theInfos).forEach(([key, info]) => {\n keysKnown.add(key);\n info(function AllItemUser(v) {\n keysFilled.add(key);\n result[key] = v;\n if (isAllFilled(keysFilled, keysKnown)) {\n user(Object.values(result) as ExtractTypesFromArrayS<T>);\n }\n });\n });\n };\n}\n","import { EventType } from \"../types\";\n\n/**\n * From a set of information sources we get\n * a common response from any source for a single owner\n * https://silentium-lab.github.io/silentium/#/en/information/any\n */\nexport function Any<T>(...infos: EventType<T>[]): EventType<T> {\n return function AnyEvent(user) {\n infos.forEach((info) => {\n info(user);\n });\n };\n}\n","import { EventType, ConstructorType } from \"../types\";\n\n/**\n * Information to which the function was applied to change the value\n * https://silentium-lab.github.io/silentium/#/en/information/applied\n */\nexport function Applied<T, R>(\n baseEv: EventType<T>,\n applier: ConstructorType<[T], R>,\n): EventType<R> {\n return function AppliedEvent(user) {\n baseEv(function AppliedBaseUser(v) {\n user(applier(v));\n });\n };\n}\n","import { EventTypeValue } from \"../types/EventType\";\nimport { EventType } from \"../types\";\n\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\ntype Last<T extends any[]> = T extends [...infer _, infer L] ? L : never;\n\n/**\n * The set of information sources forms a sequential chain where each source provides\n * an answer. The final answer will be the output result. If any source in the chain\n * provides a new answer, the component's overall response will be repeated.\n * https://silentium-lab.github.io/silentium/#/en/information/applied\n */\nexport function Chain<T extends EventType[]>(...infos: T): Last<T> {\n return <Last<T>>function ChainEvent(user) {\n let lastValue: EventTypeValue<Last<T>> | undefined;\n\n const handleI = (index: number) => {\n const info = infos[index] as Last<T>;\n const nextI = infos[index + 1] as Last<T> | undefined;\n\n info(function ChainItemUser(v) {\n if (!nextI) {\n lastValue = v as EventTypeValue<Last<T>>;\n }\n\n if (lastValue) {\n user(lastValue);\n }\n\n if (nextI && !lastValue) {\n handleI(index + 1);\n }\n });\n };\n\n handleI(0);\n };\n}\n","import { EventType, EventUserType } from \"../types\";\n\n/**\n * Information to which a function is applied in order\n * to control the value passing process\n * https://silentium-lab.github.io/silentium/#/en/information/applied\n */\nexport function ExecutorApplied<T>(\n baseEv: EventType<T>,\n applier: (executor: EventUserType<T>) => EventUserType<T>,\n): EventType<T> {\n return function ExecutorAppliedEvent(user) {\n const ExecutorAppliedBaseUser = applier(user);\n baseEv(ExecutorAppliedBaseUser);\n };\n}\n","import { EventType, ConstructorType } from \"../types\";\n\n/**\n * Information whose value is being validated\n * via a predicate; if the predicate returns true, the value\n * can be passed to the output\n * https://silentium-lab.github.io/silentium/#/en/information/filtered\n */\nexport function Filtered<T>(\n baseEv: EventType<T>,\n predicate: ConstructorType<[T], boolean>,\n defaultValue?: T,\n): EventType<T> {\n return function FilteredEvent(user) {\n baseEv(function FilteredBaseUser(v) {\n if (predicate(v)) {\n user(v);\n } else if (defaultValue !== undefined) {\n user(defaultValue);\n }\n });\n };\n}\n","import { EventTypeDestroyable } from \"../types/EventType\";\nimport { EventType, EventUserType } from \"../types\";\nimport { All } from \"./All\";\n\n/**\n * A component that receives data from an event and\n * presents it as an information object\n * https://silentium-lab.github.io/silentium/#/en/information/from-event\n */\nexport function FromEvent<T>(\n emitterEv: EventType<any>,\n eventNameEv: EventType<string>,\n subscribeMethodEv: EventType<string>,\n unsubscribeMethodEv?: EventType<string>,\n): EventTypeDestroyable<T> {\n let lastU: EventUserType<T> | null = null;\n const handler = function FromEventHandler(v: T) {\n if (lastU) {\n lastU(v);\n }\n };\n return function FromEventEvent(user) {\n lastU = user;\n const a = All(emitterEv, eventNameEv, subscribeMethodEv);\n a(function FromEventAllUser([emitter, eventName, subscribe]) {\n if (!emitter?.[subscribe]) {\n return;\n }\n emitter[subscribe](eventName, handler);\n });\n\n return function FromEventDestructor() {\n lastU = null;\n if (!unsubscribeMethodEv) {\n return;\n }\n const a = All(emitterEv, eventNameEv, unsubscribeMethodEv);\n a(([emitter, eventName, unsubscribe]) => {\n emitter?.[unsubscribe]?.(eventName, handler);\n });\n };\n };\n}\n","import { EventType, EventUserType } from \"../types\";\n\n/**\n * Component that gets a value from a promise and\n * presents it as information\n * https://silentium-lab.github.io/silentium/#/en/information/from-promise\n */\nexport function FromPromise<T>(\n p: Promise<T>,\n errorOwner?: EventUserType,\n): EventType<T> {\n return function FromPromiseEvent(user) {\n p.then(function FromPromiseThen(v) {\n user(v);\n }).catch(function FromPromiseCatch(e) {\n errorOwner?.(e);\n });\n };\n}\n","export const isFilled = <T>(\n value?: T,\n): value is Exclude<T, null | undefined> => {\n return value !== undefined && value !== null;\n};\n","import { EventUserType } from \"../types\";\n\n/**\n * Helps maintain an owner list allowing different\n * owners to get information from a common source\n * https://silentium-lab.github.io/silentium/#/en/utils/owner-pool\n */\nexport class OwnerPool<T> {\n private owners: Set<EventUserType<T>>;\n private innerOwner: EventUserType<T>;\n\n public constructor() {\n this.owners = new Set<EventUserType<T>>();\n this.innerOwner = (v) => {\n this.owners.forEach((g) => {\n g(v);\n });\n };\n }\n\n public owner() {\n return this.innerOwner;\n }\n\n public size(): number {\n return this.owners.size;\n }\n\n public has(owner: EventUserType<T>): boolean {\n return this.owners.has(owner);\n }\n\n public add(owner: EventUserType<T>) {\n this.owners.add(owner);\n return this;\n }\n\n public remove(g: EventUserType<T>) {\n this.owners.delete(g);\n return this;\n }\n\n public destroy() {\n this.owners.forEach((g) => {\n this.remove(g);\n });\n return this;\n }\n}\n","import { EventUserType, SourceType } from \"../types\";\nimport { isFilled } from \"../helpers\";\n\n/**\n * A component that allows creating linked objects of information and its owner\n * in such a way that if a new value is assigned to the owner, this value\n * will become the value of the linked information source\n * https://silentium-lab.github.io/silentium/#/en/information/of\n */\nexport function Late<T>(v?: T): SourceType<T> {\n let lateUser: EventUserType<T> | null = null;\n const notify = (v?: T) => {\n if (isFilled(v) && lateUser) {\n lateUser(v);\n }\n };\n\n return {\n event: function LateEvent(user) {\n if (lateUser) {\n throw new Error(\n \"Late component gets new user, when another was already connected!\",\n );\n }\n\n lateUser = user;\n notify(v);\n },\n use: function LateUser(v) {\n notify(v);\n },\n };\n}\n","import { EventType } from \"../types\";\n\n/**\n * Limits the number of values from the information source\n * to a single value - once the first value is emitted, no more\n * values are delivered from the source\n * https://silentium-lab.github.io/silentium/#/en/information/once\n */\nexport function Once<T>(baseEv: EventType<T>): EventType<T> {\n return function OnceEvent(user) {\n let isFilled = false;\n baseEv(function OnceBaseUser(v) {\n if (!isFilled) {\n isFilled = true;\n user(v);\n }\n });\n };\n}\n","import { EventType, DestroyableType, SourceType } from \"../types\";\nimport { isFilled, OwnerPool } from \"../helpers\";\nimport { Late } from \"../components/Late\";\nimport { Once } from \"../components/Once\";\n\n/**\n * An information object that helps multiple owners access\n * a single another information object\n * https://silentium-lab.github.io/silentium/#/en/information/pool\n */\nexport function Shared<T>(\n baseEv: EventType<T>,\n stateless = false,\n): SourceType<T> & {\n pool: () => OwnerPool<T>;\n touched: () => void;\n} & DestroyableType {\n const ownersPool = new OwnerPool<T>();\n let lastValue: T | undefined;\n\n const calls = Late();\n Once(calls.event)(function SharedCallsUser() {\n baseEv(function SharedBaseUser(v) {\n lastValue = v;\n ownersPool.owner()(v);\n });\n });\n\n return {\n event: function SharedEvent(user) {\n calls.use(1);\n if (!stateless && isFilled(lastValue) && !ownersPool.has(user)) {\n user(lastValue);\n }\n ownersPool.add(user);\n return () => {\n ownersPool.remove(user);\n };\n },\n use: function SharedUser(value: T) {\n calls.use(1);\n lastValue = value;\n ownersPool.owner()(value);\n },\n touched() {\n calls.use(1);\n },\n pool() {\n return ownersPool;\n },\n destroy() {\n ownersPool.destroy();\n },\n };\n}\n","import { SourceType } from \"../types\";\nimport { Shared } from \"../components/Shared\";\n\nexport function SharedSource<T>(\n baseEv: SourceType<T>,\n stateless = false,\n): SourceType<T> {\n const sharedEv = Shared(baseEv.event, stateless);\n\n return {\n event: function SharedSourceEvent(user) {\n sharedEv.event(user);\n },\n use: function SharedSourceUser(v) {\n sharedEv.touched();\n baseEv.use(v);\n },\n };\n}\n","import { Late } from \"../components/Late\";\nimport { SharedSource } from \"../components/SharedSource\";\nimport { SourceType } from \"../types\";\n\nexport function LateShared<T>(value?: T): SourceType<T> {\n return SharedSource(Late(value));\n}\n","import { EventType, ConstructorType } from \"../types\";\n\n/**\n * Constructor with applied function to its results\n */\nexport function ConstructorApplied<T>(\n baseConstructor: ConstructorType<any[], EventType>,\n applier: (i: EventType) => EventType<T>,\n): ConstructorType<EventType[], EventType<T>> {\n return function LazyAppliedData(...args) {\n return applier(baseConstructor(...args));\n };\n}\n","import { EventType, ConstructorType } from \"../types\";\n\nexport function ConstructorArgs(\n baseConstructor: ConstructorType<any[], EventType>,\n args: unknown[],\n startFromArgIndex: number = 0,\n) {\n return function ConstructorArgsEvent(...runArgs: any[]) {\n return baseConstructor(...mergeAtIndex(runArgs, args, startFromArgIndex));\n };\n}\n\nfunction mergeAtIndex(arr1: unknown[], arr2: unknown[], index: number) {\n const result = arr1.slice(0, index);\n while (result.length < index) result.push(undefined);\n return result.concat(arr2);\n}\n","import {\n ConstructorType,\n DestroyableType,\n DestructorType,\n EventObjectType,\n EventType,\n} from \"../types\";\n\n/**\n * Constructor what can be destroyed\n */\nexport function ConstructorDestroyable(\n baseConstructor: ConstructorType<\n any[],\n (DestroyableType & EventObjectType) | EventType\n >,\n): {\n get: ConstructorType<any[], EventType>;\n destroy: DestructorType;\n} {\n const destructors: DestructorType[] = [];\n return {\n get: function ConstructorDestroyableGet(...args) {\n const inst = baseConstructor(...args);\n return (user) => {\n if (\"destroy\" in inst) {\n destructors.push(inst.destroy);\n inst.event(user);\n } else {\n const d = inst(user);\n if (d) {\n destructors.push(d);\n }\n }\n\n return () => {\n destructors.forEach((i) => i());\n };\n };\n },\n destroy: function ConstructorDestructor() {\n destructors.forEach((i) => i());\n },\n };\n}\n","import { DestructorType, EventType, EventUserType } from \"../types\";\n\nexport function Destructor<T>(\n baseEv: EventType<T>,\n destructorUser?: EventUserType<DestructorType>,\n) {\n let mbDestructor: DestructorType | void;\n let theUser: WeakRef<EventUserType<T>> | null = null;\n const destroy = () => {\n theUser = null;\n mbDestructor?.();\n };\n return {\n event: function DestructorEvent(user) {\n theUser = new WeakRef(user);\n mbDestructor = baseEv((v) => {\n if (theUser) {\n theUser.deref()?.(v);\n }\n });\n if (mbDestructor && destructorUser) {\n destructorUser(destroy);\n }\n return destroy;\n } as EventType<T>,\n destroy,\n };\n}\n","import { EventType } from \"../types\";\n\n/**\n * Create local copy of source what can be destroyed\n */\nexport function Local<T>(baseEv: EventType<T>): EventType<T> {\n return function LocalEvent(user) {\n let destroyed = false;\n const d = baseEv(function LocalBaseUser(v) {\n if (!destroyed) {\n user(v);\n }\n });\n return () => {\n destroyed = true;\n d?.();\n };\n };\n}\n","import { EventType } from \"../types\";\n\nexport function Of<T>(value: T): EventType<T> {\n return function OfEvent(user) {\n return user(value);\n };\n}\n","import { EventType, EventUserType } from \"../types\";\n\n/**\n * Run data with user\n */\nexport function On<T>(event: EventType<T>, user: EventUserType<T>) {\n return event(user);\n}\n","import { EventUserType } from \"../types\";\n\n/**\n * Silent user\n */\nexport function Void(): EventUserType {\n return function VoidEvent() {};\n}\n","import { Destructor } from \"../base/Destructor\";\nimport { DestructorType, EventType } from \"../types\";\n\nexport function DestroyContainer() {\n const destructors: DestructorType[] = [];\n return {\n add(e: EventType) {\n const d = Destructor(e);\n destructors.push(d.destroy);\n return d.event;\n },\n destroy() {\n destructors.forEach((d) => d());\n },\n };\n}\n","import { EventType, ConstructorType } from \"../types\";\nimport { Of } from \"../base\";\nimport { All } from \"./All\";\n\n/**\n * Component that applies an info object constructor to each data item,\n * producing an information source with new values\n * https://silentium-lab.github.io/silentium/#/en/information/map\n */\nexport function Map<T, TG>(\n baseEv: EventType<T[]>,\n targetEv: ConstructorType<any[], EventType<TG>>,\n): EventType<TG[]> {\n return function MapData(user) {\n baseEv(function MapBaseUser(v) {\n const infos: EventType<TG>[] = [];\n v.forEach((val) => {\n let valInfo: EventType<T> | T = val;\n if (typeof valInfo !== \"function\") {\n valInfo = Of(valInfo);\n }\n const info = targetEv(valInfo);\n infos.push(info);\n });\n const allI = All(...infos);\n allI(user);\n });\n };\n}\n","import { EventType } from \"../types\";\n\nexport function Primitive<T>(baseEv: EventType<T>, theValue: T | null = null) {\n baseEv(function PrimitiveBaseUser(v) {\n theValue = v;\n });\n\n return {\n [Symbol.toPrimitive]() {\n return theValue;\n },\n primitive() {\n return theValue;\n },\n primitiveWithException() {\n if (theValue === null) {\n throw new Error(\"Primitive value is null\");\n }\n return theValue;\n },\n };\n}\n","import { EventType } from \"../types\";\n\n/**\n * A component that takes one value at a time and returns\n * an array of all previous values\n * https://silentium-lab.github.io/silentium/#/en/information/sequence\n */\nexport function Sequence<T>(baseEv: EventType<T>): EventType<T[]> {\n return function SequenceEvent(user) {\n const result: T[] = [];\n baseEv(function SequenceBaseUser(v) {\n result.push(v);\n user(result);\n });\n };\n}\n","import { EventType } from \"../types\";\n\n/**\n * Component that receives a data array and yields values one by one\n * https://silentium-lab.github.io/silentium/#/en/information/stream\n */\nexport function Stream<T>(baseEv: EventType<T[]>): EventType<T> {\n return function StreamEvent(user) {\n baseEv(function StreamBaseUser(v) {\n v.forEach((cv) => {\n user(cv);\n });\n });\n };\n}\n"],"names":["a","v"],"mappings":"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"}