silentium 0.0.103 → 0.0.105

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 CHANGED
@@ -2,6 +2,20 @@
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.105](https://github.com/silentium-lab/silentium/compare/v0.0.104...v0.0.105) (2025-10-12)
6
+
7
+
8
+ ### Bug Fixes
9
+
10
+ * **main:** destroyContainer component ([c3f71ec](https://github.com/silentium-lab/silentium/commit/c3f71ec8110fe67a46c7581b914da463e9e762c9))
11
+
12
+ ### [0.0.104](https://github.com/silentium-lab/silentium/compare/v0.0.103...v0.0.104) (2025-10-12)
13
+
14
+
15
+ ### Bug Fixes
16
+
17
+ * **main:** constructor destroyable component ([42979a3](https://github.com/silentium-lab/silentium/commit/42979a38cf9fa3b410a73683b038c4582e4214b9))
18
+
5
19
  ### [0.0.103](https://github.com/silentium-lab/silentium/compare/v0.0.102...v0.0.103) (2025-10-11)
6
20
 
7
21
 
@@ -267,6 +267,32 @@ function mergeAtIndex(arr1, arr2, index) {
267
267
  return result.concat(arr2);
268
268
  }
269
269
 
270
+ const constructorDestroyable = (baseConstructor) => {
271
+ const destructors = [];
272
+ return {
273
+ get: function ConstructorDestroyable(...args) {
274
+ const inst = baseConstructor(...args);
275
+ return (user) => {
276
+ if ("destroy" in inst) {
277
+ destructors.push(inst.destroy);
278
+ inst.event(user);
279
+ } else {
280
+ const d = inst(user);
281
+ if (d) {
282
+ destructors.push(d);
283
+ }
284
+ }
285
+ return () => {
286
+ destructors.forEach((i) => i());
287
+ };
288
+ };
289
+ },
290
+ destroy: function ConstructorDestructor() {
291
+ destructors.forEach((i) => i());
292
+ }
293
+ };
294
+ };
295
+
270
296
  const destructor = (baseEv, destructorUser) => {
271
297
  let mbDestructor;
272
298
  let theUser = null;
@@ -315,22 +341,16 @@ const on = (event, user) => event(user);
315
341
  const _void = () => function VoidEvent() {
316
342
  };
317
343
 
318
- const constructorDestroyable = (baseConstructor) => {
344
+ const destroyContainer = () => {
319
345
  const destructors = [];
320
346
  return {
321
- get: function ConstructorDestroyable(...args) {
322
- const inst = baseConstructor(...args);
323
- if ("destroy" in inst) {
324
- destructors.push(inst.destroy);
325
- } else {
326
- const d = destructor(inst);
327
- destructors.push(d.destroy);
328
- return d;
329
- }
330
- return inst;
347
+ add(e) {
348
+ const d = destructor(e);
349
+ destructors.push(d.destroy);
350
+ return d.event;
331
351
  },
332
- destroy: function ConstructorDestructor() {
333
- destructors.forEach((i) => i());
352
+ destroy() {
353
+ destructors.forEach((d) => d());
334
354
  }
335
355
  };
336
356
  };
@@ -402,6 +422,7 @@ exports.chain = chain;
402
422
  exports.constructorApplied = constructorApplied;
403
423
  exports.constructorArgs = constructorArgs;
404
424
  exports.constructorDestroyable = constructorDestroyable;
425
+ exports.destroyContainer = destroyContainer;
405
426
  exports.destructor = destructor;
406
427
  exports.executorApplied = executorApplied;
407
428
  exports.filtered = filtered;
@@ -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/base/Destructor.ts","../src/base/Local.ts","../src/base/Of.ts","../src/base/On.ts","../src/base/Void.ts","../src/components/ConstructorDestroyable.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 { 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\";\nimport {\n DestroyableType,\n DestructorType,\n ConstructorType,\n EventType,\n EventObjectType,\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[], DestroyableType & EventObjectType>;\n destroy: DestructorType;\n} => {\n const destructors: DestructorType[] = [];\n return {\n get: function ConstructorDestroyable(...args) {\n const inst = baseConstructor(...args);\n if (\"destroy\" in inst) {\n destructors.push(inst.destroy);\n } else {\n const d = destructor(inst);\n destructors.push(d.destroy);\n return d;\n }\n return inst;\n },\n destroy: function ConstructorDestructor() {\n destructors.forEach((i) => i());\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/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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"}
@@ -108,7 +108,7 @@ declare const constructorArgs: (baseConstructor: ConstructorType<any[], EventTyp
108
108
  * Constructor what can be destroyed
109
109
  */
110
110
  declare const constructorDestroyable: (baseConstructor: ConstructorType<any[], (DestroyableType & EventObjectType) | EventType>) => {
111
- get: ConstructorType<any[], DestroyableType & EventObjectType>;
111
+ get: ConstructorType<any[], EventType>;
112
112
  destroy: DestructorType;
113
113
  };
114
114
 
@@ -199,4 +199,9 @@ declare const on: <T>(event: EventType<T>, user: EventUserType<T>) => void | Des
199
199
  */
200
200
  declare const _void: () => EventUserType;
201
201
 
202
- export { type ConstructorType, type DestroyableType, type DestructorType, type EventObjectType, type EventType, type EventTypeDestroyable, type EventTypeValue, type EventUserObjectType, type EventUserType, type ExtractTypesFromArrayS, OwnerPool, type SourceType, _void, all, any, applied, chain, constructorApplied, constructorArgs, constructorDestroyable, destructor, executorApplied, filtered, fromEvent, fromPromise, isFilled, late, lateShared, local, map, of, on, once, primitive, sequence, shared, sharedSource, stream };
202
+ declare const destroyContainer: () => {
203
+ add(e: EventType): EventType<unknown>;
204
+ destroy(): void;
205
+ };
206
+
207
+ export { type ConstructorType, type DestroyableType, type DestructorType, type EventObjectType, type EventType, type EventTypeDestroyable, type EventTypeValue, type EventUserObjectType, type EventUserType, type ExtractTypesFromArrayS, OwnerPool, type SourceType, _void, all, any, applied, chain, constructorApplied, constructorArgs, constructorDestroyable, destroyContainer, destructor, executorApplied, filtered, fromEvent, fromPromise, isFilled, late, lateShared, local, map, of, on, once, primitive, sequence, shared, sharedSource, stream };
package/dist/silentium.js CHANGED
@@ -265,6 +265,32 @@ function mergeAtIndex(arr1, arr2, index) {
265
265
  return result.concat(arr2);
266
266
  }
267
267
 
268
+ const constructorDestroyable = (baseConstructor) => {
269
+ const destructors = [];
270
+ return {
271
+ get: function ConstructorDestroyable(...args) {
272
+ const inst = baseConstructor(...args);
273
+ return (user) => {
274
+ if ("destroy" in inst) {
275
+ destructors.push(inst.destroy);
276
+ inst.event(user);
277
+ } else {
278
+ const d = inst(user);
279
+ if (d) {
280
+ destructors.push(d);
281
+ }
282
+ }
283
+ return () => {
284
+ destructors.forEach((i) => i());
285
+ };
286
+ };
287
+ },
288
+ destroy: function ConstructorDestructor() {
289
+ destructors.forEach((i) => i());
290
+ }
291
+ };
292
+ };
293
+
268
294
  const destructor = (baseEv, destructorUser) => {
269
295
  let mbDestructor;
270
296
  let theUser = null;
@@ -313,22 +339,16 @@ const on = (event, user) => event(user);
313
339
  const _void = () => function VoidEvent() {
314
340
  };
315
341
 
316
- const constructorDestroyable = (baseConstructor) => {
342
+ const destroyContainer = () => {
317
343
  const destructors = [];
318
344
  return {
319
- get: function ConstructorDestroyable(...args) {
320
- const inst = baseConstructor(...args);
321
- if ("destroy" in inst) {
322
- destructors.push(inst.destroy);
323
- } else {
324
- const d = destructor(inst);
325
- destructors.push(d.destroy);
326
- return d;
327
- }
328
- return inst;
345
+ add(e) {
346
+ const d = destructor(e);
347
+ destructors.push(d.destroy);
348
+ return d.event;
329
349
  },
330
- destroy: function ConstructorDestructor() {
331
- destructors.forEach((i) => i());
350
+ destroy() {
351
+ destructors.forEach((d) => d());
332
352
  }
333
353
  };
334
354
  };
@@ -391,5 +411,5 @@ const stream = (baseEv) => {
391
411
  };
392
412
  };
393
413
 
394
- export { OwnerPool, _void, all, any, applied, chain, constructorApplied, constructorArgs, constructorDestroyable, destructor, executorApplied, filtered, fromEvent, fromPromise, isFilled, late, lateShared, local, map, of, on, once, primitive, sequence, shared, sharedSource, stream };
414
+ export { OwnerPool, _void, all, any, applied, chain, constructorApplied, constructorArgs, constructorDestroyable, destroyContainer, destructor, executorApplied, filtered, fromEvent, fromPromise, isFilled, late, lateShared, local, map, of, on, once, primitive, sequence, shared, sharedSource, stream };
395
415
  //# sourceMappingURL=silentium.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"silentium.js","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/base/Destructor.ts","../src/base/Local.ts","../src/base/Of.ts","../src/base/On.ts","../src/base/Void.ts","../src/components/ConstructorDestroyable.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 { 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\";\nimport {\n DestroyableType,\n DestructorType,\n ConstructorType,\n EventType,\n EventObjectType,\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[], DestroyableType & EventObjectType>;\n destroy: DestructorType;\n} => {\n const destructors: DestructorType[] = [];\n return {\n get: function ConstructorDestroyable(...args) {\n const inst = baseConstructor(...args);\n if (\"destroy\" in inst) {\n destructors.push(inst.destroy);\n } else {\n const d = destructor(inst);\n destructors.push(d.destroy);\n return d;\n }\n return inst;\n },\n destroy: function ConstructorDestructor() {\n destructors.forEach((i) => i());\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.js","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 +1 @@
1
- !function(n){"use strict";const t=(...n)=>{const t=new Set(Object.keys(n)),e=new Set;return function(o){const r={};Object.entries(n).forEach((([n,i])=>{t.add(n),i((function(i){e.add(n),r[n]=i,((n,t)=>n.size>0&&n.size===t.size)(e,t)&&o(Object.values(r))}))}))}},e=n=>null!=n;var o=Object.defineProperty,r=(n,t,e)=>((n,t,e)=>t in n?o(n,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):n[t]=e)(n,"symbol"!=typeof t?t+"":t,e);class i{constructor(){r(this,"owners"),r(this,"innerOwner"),this.owners=new Set,this.innerOwner=n=>{this.owners.forEach((t=>{t(n)}))}}owner(){return this.innerOwner}size(){return this.owners.size}has(n){return this.owners.has(n)}add(n){return this.owners.add(n),this}remove(n){return this.owners.delete(n),this}destroy(){return this.owners.forEach((n=>{this.remove(n)})),this}}const u=n=>{let t=null;const o=n=>{e(n)&&t&&t(n)};return{event:function(e){if(t)throw new Error("Late component gets new user, when another was already connected!");t=e,o(n)},use:function(n){o(n)}}},c=n=>function(t){let e=!1;n((function(n){e||(e=!0,t(n))}))},s=(n,t=!1)=>{const o=new i;let r;const s=u();return c(s.event)((function(){n((function(n){r=n,o.owner()(n)}))})),{event:function(n){return s.use(1),t||!e(r)||o.has(n)||n(r),o.add(n),()=>{o.remove(n)}},use:function(n){s.use(1),r=n,o.owner()(n)},touched(){s.use(1)},pool:()=>o,destroy(){o.destroy()}}},f=(n,t=!1)=>{const e=s(n.event,t);return{event:function(n){e.event(n)},use:function(t){e.touched(),n.use(t)}}};const l=(n,t)=>{let e,o=null;const r=()=>{o=null,e?.()};return{event:function(i){return o=i,e=n((n=>{o&&o(n)})),e&&t&&t(r),r},destroy:r}},h=n=>function(t){return t(n)};n.OwnerPool=i,n._void=()=>function(){},n.all=t,n.any=(...n)=>function(t){n.forEach((n=>{n(t)}))},n.applied=(n,t)=>function(e){n((function(n){e(t(n))}))},n.chain=(...n)=>function(t){let e;const o=r=>{const i=n[r],u=n[r+1];i((function(n){u||(e=n),e&&t(e),u&&!e&&o(r+1)}))};o(0)},n.constructorApplied=(n,t)=>function(...e){return t(n(...e))},n.constructorArgs=(n,t,e=0)=>function(...o){return n(...function(n,t,e){const o=n.slice(0,e);for(;o.length<e;)o.push(void 0);return o.concat(t)}(o,t,e))},n.constructorDestroyable=n=>{const t=[];return{get:function(...e){const o=n(...e);if(!("destroy"in o)){const n=l(o);return t.push(n.destroy),n}return t.push(o.destroy),o},destroy:function(){t.forEach((n=>n()))}}},n.destructor=l,n.executorApplied=(n,t)=>function(e){const o=t(e);n(o)},n.filtered=(n,t,e)=>function(o){n((function(n){t(n)?o(n):void 0!==e&&o(e)}))},n.fromEvent=(n,e,o,r)=>{let i=null;const u=function(n){i&&i(n)};return function(c){i=c;return t(n,e,o)((function([n,t,e]){n?.[e]&&n[e](t,u)})),function(){if(i=null,!r)return;t(n,e,r)((([n,t,e])=>{n?.[e]?.(t,u)}))}}},n.fromPromise=(n,t)=>function(e){n.then((function(n){e(n)})).catch((function(n){t?.(n)}))},n.isFilled=e,n.late=u,n.lateShared=n=>f(u(n)),n.local=n=>function(t){let e=!1;const o=n((function(n){e||t(n)}));return()=>{e=!0,o?.()}},n.map=(n,e)=>function(o){n((function(n){const r=[];n.forEach((n=>{let t=n;"function"!=typeof t&&(t=h(t));const o=e(t);r.push(o)}));t(...r)(o)}))},n.of=h,n.on=(n,t)=>n(t),n.once=c,n.primitive=(n,t=null)=>(n((function(n){t=n})),{[Symbol.toPrimitive]:()=>t,primitive:()=>t,primitiveWithException(){if(null===t)throw new Error("Primitive value is null");return t}}),n.sequence=n=>function(t){const e=[];n((function(n){e.push(n),t(e)}))},n.shared=s,n.sharedSource=f,n.stream=n=>function(t){n((function(n){n.forEach((n=>{t(n)}))}))}}({});
1
+ !function(n){"use strict";const t=(...n)=>{const t=new Set(Object.keys(n)),e=new Set;return function(o){const r={};Object.entries(n).forEach((([n,c])=>{t.add(n),c((function(c){e.add(n),r[n]=c,((n,t)=>n.size>0&&n.size===t.size)(e,t)&&o(Object.values(r))}))}))}},e=n=>null!=n;var o=Object.defineProperty,r=(n,t,e)=>((n,t,e)=>t in n?o(n,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):n[t]=e)(n,"symbol"!=typeof t?t+"":t,e);class c{constructor(){r(this,"owners"),r(this,"innerOwner"),this.owners=new Set,this.innerOwner=n=>{this.owners.forEach((t=>{t(n)}))}}owner(){return this.innerOwner}size(){return this.owners.size}has(n){return this.owners.has(n)}add(n){return this.owners.add(n),this}remove(n){return this.owners.delete(n),this}destroy(){return this.owners.forEach((n=>{this.remove(n)})),this}}const u=n=>{let t=null;const o=n=>{e(n)&&t&&t(n)};return{event:function(e){if(t)throw new Error("Late component gets new user, when another was already connected!");t=e,o(n)},use:function(n){o(n)}}},i=n=>function(t){let e=!1;n((function(n){e||(e=!0,t(n))}))},s=(n,t=!1)=>{const o=new c;let r;const s=u();return i(s.event)((function(){n((function(n){r=n,o.owner()(n)}))})),{event:function(n){return s.use(1),t||!e(r)||o.has(n)||n(r),o.add(n),()=>{o.remove(n)}},use:function(n){s.use(1),r=n,o.owner()(n)},touched(){s.use(1)},pool:()=>o,destroy(){o.destroy()}}},f=(n,t=!1)=>{const e=s(n.event,t);return{event:function(n){e.event(n)},use:function(t){e.touched(),n.use(t)}}};const l=(n,t)=>{let e,o=null;const r=()=>{o=null,e?.()};return{event:function(c){return o=c,e=n((n=>{o&&o(n)})),e&&t&&t(r),r},destroy:r}},a=n=>function(t){return t(n)};n.OwnerPool=c,n._void=()=>function(){},n.all=t,n.any=(...n)=>function(t){n.forEach((n=>{n(t)}))},n.applied=(n,t)=>function(e){n((function(n){e(t(n))}))},n.chain=(...n)=>function(t){let e;const o=r=>{const c=n[r],u=n[r+1];c((function(n){u||(e=n),e&&t(e),u&&!e&&o(r+1)}))};o(0)},n.constructorApplied=(n,t)=>function(...e){return t(n(...e))},n.constructorArgs=(n,t,e=0)=>function(...o){return n(...function(n,t,e){const o=n.slice(0,e);for(;o.length<e;)o.push(void 0);return o.concat(t)}(o,t,e))},n.constructorDestroyable=n=>{const t=[];return{get:function(...e){const o=n(...e);return n=>{if("destroy"in o)t.push(o.destroy),o.event(n);else{const e=o(n);e&&t.push(e)}return()=>{t.forEach((n=>n()))}}},destroy:function(){t.forEach((n=>n()))}}},n.destroyContainer=()=>{const n=[];return{add(t){const e=l(t);return n.push(e.destroy),e.event},destroy(){n.forEach((n=>n()))}}},n.destructor=l,n.executorApplied=(n,t)=>function(e){const o=t(e);n(o)},n.filtered=(n,t,e)=>function(o){n((function(n){t(n)?o(n):void 0!==e&&o(e)}))},n.fromEvent=(n,e,o,r)=>{let c=null;const u=function(n){c&&c(n)};return function(i){c=i;return t(n,e,o)((function([n,t,e]){n?.[e]&&n[e](t,u)})),function(){if(c=null,!r)return;t(n,e,r)((([n,t,e])=>{n?.[e]?.(t,u)}))}}},n.fromPromise=(n,t)=>function(e){n.then((function(n){e(n)})).catch((function(n){t?.(n)}))},n.isFilled=e,n.late=u,n.lateShared=n=>f(u(n)),n.local=n=>function(t){let e=!1;const o=n((function(n){e||t(n)}));return()=>{e=!0,o?.()}},n.map=(n,e)=>function(o){n((function(n){const r=[];n.forEach((n=>{let t=n;"function"!=typeof t&&(t=a(t));const o=e(t);r.push(o)}));t(...r)(o)}))},n.of=a,n.on=(n,t)=>n(t),n.once=i,n.primitive=(n,t=null)=>(n((function(n){t=n})),{[Symbol.toPrimitive]:()=>t,primitive:()=>t,primitiveWithException(){if(null===t)throw new Error("Primitive value is null");return t}}),n.sequence=n=>function(t){const e=[];n((function(n){e.push(n),t(e)}))},n.shared=s,n.sharedSource=f,n.stream=n=>function(t){n((function(n){n.forEach((n=>{t(n)}))}))}}({});
@@ -1,2 +1,2 @@
1
- const n=(...n)=>{const t=new Set(Object.keys(n)),e=new Set;return function(o){const r={};Object.entries(n).forEach((([n,u])=>{t.add(n),u((function(u){e.add(n),r[n]=u,((n,t)=>n.size>0&&n.size===t.size)(e,t)&&o(Object.values(r))}))}))}},t=(...n)=>function(t){n.forEach((n=>{n(t)}))},e=(n,t)=>function(e){n((function(n){e(t(n))}))},o=(...n)=>function(t){let e;const o=r=>{const u=n[r],i=n[r+1];u((function(n){i||(e=n),e&&t(e),i&&!e&&o(r+1)}))};o(0)},r=(n,t)=>function(e){const o=t(e);n(o)},u=(n,t,e)=>function(o){n((function(n){t(n)?o(n):void 0!==e&&o(e)}))},i=(t,e,o,r)=>{let u=null;const i=function(n){u&&u(n)};return function(c){u=c;return n(t,e,o)((function([n,t,e]){n?.[e]&&n[e](t,i)})),function(){if(u=null,!r)return;n(t,e,r)((([n,t,e])=>{n?.[e]?.(t,i)}))}}},c=(n,t)=>function(e){n.then((function(n){e(n)})).catch((function(n){t?.(n)}))},s=n=>null!=n;var f=Object.defineProperty,h=(n,t,e)=>((n,t,e)=>t in n?f(n,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):n[t]=e)(n,"symbol"!=typeof t?t+"":t,e);class l{constructor(){h(this,"owners"),h(this,"innerOwner"),this.owners=new Set,this.innerOwner=n=>{this.owners.forEach((t=>{t(n)}))}}owner(){return this.innerOwner}size(){return this.owners.size}has(n){return this.owners.has(n)}add(n){return this.owners.add(n),this}remove(n){return this.owners.delete(n),this}destroy(){return this.owners.forEach((n=>{this.remove(n)})),this}}const a=n=>{let t=null;const e=n=>{s(n)&&t&&t(n)};return{event:function(o){if(t)throw new Error("Late component gets new user, when another was already connected!");t=o,e(n)},use:function(n){e(n)}}},d=n=>function(t){let e=!1;n((function(n){e||(e=!0,t(n))}))},w=(n,t=!1)=>{const e=new l;let o;const r=a();return d(r.event)((function(){n((function(n){o=n,e.owner()(n)}))})),{event:function(n){return r.use(1),t||!s(o)||e.has(n)||n(o),e.add(n),()=>{e.remove(n)}},use:function(n){r.use(1),o=n,e.owner()(n)},touched(){r.use(1)},pool:()=>e,destroy(){e.destroy()}}},v=(n,t=!1)=>{const e=w(n.event,t);return{event:function(n){e.event(n)},use:function(t){e.touched(),n.use(t)}}},y=n=>v(a(n)),p=(n,t)=>function(...e){return t(n(...e))},m=(n,t,e=0)=>function(...o){return n(...function(n,t,e){const o=n.slice(0,e);for(;o.length<e;)o.push(void 0);return o.concat(t)}(o,t,e))};const E=(n,t)=>{let e,o=null;const r=()=>{o=null,e?.()};return{event:function(u){return o=u,e=n((n=>{o&&o(n)})),e&&t&&t(r),r},destroy:r}},b=n=>function(t){let e=!1;const o=n((function(n){e||t(n)}));return()=>{e=!0,o?.()}},O=n=>function(t){return t(n)},z=(n,t)=>n(t),g=()=>function(){},j=n=>{const t=[];return{get:function(...e){const o=n(...e);if(!("destroy"in o)){const n=E(o);return t.push(n.destroy),n}return t.push(o.destroy),o},destroy:function(){t.forEach((n=>n()))}}},S=(t,e)=>function(o){t((function(t){const r=[];t.forEach((n=>{let t=n;"function"!=typeof t&&(t=O(t));const o=e(t);r.push(o)}));n(...r)(o)}))},P=(n,t=null)=>(n((function(n){t=n})),{[Symbol.toPrimitive]:()=>t,primitive:()=>t,primitiveWithException(){if(null===t)throw new Error("Primitive value is null");return t}}),x=n=>function(t){const e=[];n((function(n){e.push(n),t(e)}))},k=n=>function(t){n((function(n){n.forEach((n=>{t(n)}))}))};export{l as OwnerPool,g as _void,n as all,t as any,e as applied,o as chain,p as constructorApplied,m as constructorArgs,j as constructorDestroyable,E as destructor,r as executorApplied,u as filtered,i as fromEvent,c as fromPromise,s as isFilled,a as late,y as lateShared,b as local,S as map,O as of,z as on,d as once,P as primitive,x as sequence,w as shared,v as sharedSource,k as stream};
1
+ const n=(...n)=>{const t=new Set(Object.keys(n)),e=new Set;return function(o){const r={};Object.entries(n).forEach((([n,u])=>{t.add(n),u((function(u){e.add(n),r[n]=u,((n,t)=>n.size>0&&n.size===t.size)(e,t)&&o(Object.values(r))}))}))}},t=(...n)=>function(t){n.forEach((n=>{n(t)}))},e=(n,t)=>function(e){n((function(n){e(t(n))}))},o=(...n)=>function(t){let e;const o=r=>{const u=n[r],c=n[r+1];u((function(n){c||(e=n),e&&t(e),c&&!e&&o(r+1)}))};o(0)},r=(n,t)=>function(e){const o=t(e);n(o)},u=(n,t,e)=>function(o){n((function(n){t(n)?o(n):void 0!==e&&o(e)}))},c=(t,e,o,r)=>{let u=null;const c=function(n){u&&u(n)};return function(i){u=i;return n(t,e,o)((function([n,t,e]){n?.[e]&&n[e](t,c)})),function(){if(u=null,!r)return;n(t,e,r)((([n,t,e])=>{n?.[e]?.(t,c)}))}}},i=(n,t)=>function(e){n.then((function(n){e(n)})).catch((function(n){t?.(n)}))},s=n=>null!=n;var f=Object.defineProperty,h=(n,t,e)=>((n,t,e)=>t in n?f(n,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):n[t]=e)(n,"symbol"!=typeof t?t+"":t,e);class l{constructor(){h(this,"owners"),h(this,"innerOwner"),this.owners=new Set,this.innerOwner=n=>{this.owners.forEach((t=>{t(n)}))}}owner(){return this.innerOwner}size(){return this.owners.size}has(n){return this.owners.has(n)}add(n){return this.owners.add(n),this}remove(n){return this.owners.delete(n),this}destroy(){return this.owners.forEach((n=>{this.remove(n)})),this}}const a=n=>{let t=null;const e=n=>{s(n)&&t&&t(n)};return{event:function(o){if(t)throw new Error("Late component gets new user, when another was already connected!");t=o,e(n)},use:function(n){e(n)}}},d=n=>function(t){let e=!1;n((function(n){e||(e=!0,t(n))}))},w=(n,t=!1)=>{const e=new l;let o;const r=a();return d(r.event)((function(){n((function(n){o=n,e.owner()(n)}))})),{event:function(n){return r.use(1),t||!s(o)||e.has(n)||n(o),e.add(n),()=>{e.remove(n)}},use:function(n){r.use(1),o=n,e.owner()(n)},touched(){r.use(1)},pool:()=>e,destroy(){e.destroy()}}},v=(n,t=!1)=>{const e=w(n.event,t);return{event:function(n){e.event(n)},use:function(t){e.touched(),n.use(t)}}},y=n=>v(a(n)),p=(n,t)=>function(...e){return t(n(...e))},E=(n,t,e=0)=>function(...o){return n(...function(n,t,e){const o=n.slice(0,e);for(;o.length<e;)o.push(void 0);return o.concat(t)}(o,t,e))};const m=n=>{const t=[];return{get:function(...e){const o=n(...e);return n=>{if("destroy"in o)t.push(o.destroy),o.event(n);else{const e=o(n);e&&t.push(e)}return()=>{t.forEach((n=>n()))}}},destroy:function(){t.forEach((n=>n()))}}},b=(n,t)=>{let e,o=null;const r=()=>{o=null,e?.()};return{event:function(u){return o=u,e=n((n=>{o&&o(n)})),e&&t&&t(r),r},destroy:r}},O=n=>function(t){let e=!1;const o=n((function(n){e||t(n)}));return()=>{e=!0,o?.()}},z=n=>function(t){return t(n)},g=(n,t)=>n(t),j=()=>function(){},S=()=>{const n=[];return{add(t){const e=b(t);return n.push(e.destroy),e.event},destroy(){n.forEach((n=>n()))}}},P=(t,e)=>function(o){t((function(t){const r=[];t.forEach((n=>{let t=n;"function"!=typeof t&&(t=z(t));const o=e(t);r.push(o)}));n(...r)(o)}))},x=(n,t=null)=>(n((function(n){t=n})),{[Symbol.toPrimitive]:()=>t,primitive:()=>t,primitiveWithException(){if(null===t)throw new Error("Primitive value is null");return t}}),k=n=>function(t){const e=[];n((function(n){e.push(n),t(e)}))},L=n=>function(t){n((function(n){n.forEach((n=>{t(n)}))}))};export{l as OwnerPool,j as _void,n as all,t as any,e as applied,o as chain,p as constructorApplied,E as constructorArgs,m as constructorDestroyable,S as destroyContainer,b as destructor,r as executorApplied,u as filtered,c as fromEvent,i as fromPromise,s as isFilled,a as late,y as lateShared,O as local,P as map,z as of,g as on,d as once,x as primitive,k as sequence,w as shared,v as sharedSource,L as stream};
2
2
  //# sourceMappingURL=silentium.min.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"silentium.min.mjs","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/base/Destructor.ts","../src/base/Local.ts","../src/base/Of.ts","../src/base/On.ts","../src/base/Void.ts","../src/components/ConstructorDestroyable.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 { 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\";\nimport {\n DestroyableType,\n DestructorType,\n ConstructorType,\n EventType,\n EventObjectType,\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[], DestroyableType & EventObjectType>;\n destroy: DestructorType;\n} => {\n const destructors: DestructorType[] = [];\n return {\n get: function ConstructorDestroyable(...args) {\n const inst = baseConstructor(...args);\n if (\"destroy\" in inst) {\n destructors.push(inst.destroy);\n } else {\n const d = destructor(inst);\n destructors.push(d.destroy);\n return d;\n }\n return inst;\n },\n destroy: function ConstructorDestructor() {\n destructors.forEach((i) => i());\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":["all","theInfos","keysKnown","Set","Object","keys","keysFilled","u","result","entries","forEach","key","info","add","v","size","isAllFilled","values","any","infos","applied","baseEv","applier","chain","lastValue","handleI","index","nextI","executorApplied","ExecutorAppliedBaseUser","filtered","predicate","defaultValue","fromEvent","emitterEv","eventNameEv","subscribeMethodEv","unsubscribeMethodEv","lastU","handler","a","emitter","eventName","subscribe","unsubscribe","fromPromise","p","errorOwner","then","catch","e","isFilled","value","OwnerPool","constructor","__publicField","this","owners","innerOwner","g","owner","has","remove","delete","destroy","late","lateUser","notify","event","Error","use","once","shared","stateless","ownersPool","calls","touched","pool","sharedSource","sharedEv","lateShared","constructorApplied","baseConstructor","args","constructorArgs","startFromArgIndex","runArgs","arr1","arr2","slice","length","push","concat","mergeAtIndex","destructor","destructorUser","mbDestructor","theUser","local","user","destroyed","d","of","on","_void","constructorDestroyable","destructors","get","inst","i","map","targetEv","val","valInfo","allI","primitive","theValue","Symbol","toPrimitive","primitiveWithException","sequence","stream","cv"],"mappings":"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"}
1
+ {"version":3,"file":"silentium.min.mjs","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":["all","theInfos","keysKnown","Set","Object","keys","keysFilled","u","result","entries","forEach","key","info","add","v","size","isAllFilled","values","any","infos","applied","baseEv","applier","chain","lastValue","handleI","index","nextI","executorApplied","ExecutorAppliedBaseUser","filtered","predicate","defaultValue","fromEvent","emitterEv","eventNameEv","subscribeMethodEv","unsubscribeMethodEv","lastU","handler","a","emitter","eventName","subscribe","unsubscribe","fromPromise","p","errorOwner","then","catch","e","isFilled","value","OwnerPool","constructor","__publicField","this","owners","innerOwner","g","owner","has","remove","delete","destroy","late","lateUser","notify","event","Error","use","once","shared","stateless","ownersPool","calls","touched","pool","sharedSource","sharedEv","lateShared","constructorApplied","baseConstructor","args","constructorArgs","startFromArgIndex","runArgs","arr1","arr2","slice","length","push","concat","mergeAtIndex","constructorDestroyable","destructors","get","inst","user","d","i","destructor","destructorUser","mbDestructor","theUser","local","destroyed","of","on","_void","destroyContainer","map","targetEv","val","valInfo","allI","primitive","theValue","Symbol","toPrimitive","primitiveWithException","sequence","stream","cv"],"mappings":"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"}
@@ -265,6 +265,32 @@ function mergeAtIndex(arr1, arr2, index) {
265
265
  return result.concat(arr2);
266
266
  }
267
267
 
268
+ const constructorDestroyable = (baseConstructor) => {
269
+ const destructors = [];
270
+ return {
271
+ get: function ConstructorDestroyable(...args) {
272
+ const inst = baseConstructor(...args);
273
+ return (user) => {
274
+ if ("destroy" in inst) {
275
+ destructors.push(inst.destroy);
276
+ inst.event(user);
277
+ } else {
278
+ const d = inst(user);
279
+ if (d) {
280
+ destructors.push(d);
281
+ }
282
+ }
283
+ return () => {
284
+ destructors.forEach((i) => i());
285
+ };
286
+ };
287
+ },
288
+ destroy: function ConstructorDestructor() {
289
+ destructors.forEach((i) => i());
290
+ }
291
+ };
292
+ };
293
+
268
294
  const destructor = (baseEv, destructorUser) => {
269
295
  let mbDestructor;
270
296
  let theUser = null;
@@ -313,22 +339,16 @@ const on = (event, user) => event(user);
313
339
  const _void = () => function VoidEvent() {
314
340
  };
315
341
 
316
- const constructorDestroyable = (baseConstructor) => {
342
+ const destroyContainer = () => {
317
343
  const destructors = [];
318
344
  return {
319
- get: function ConstructorDestroyable(...args) {
320
- const inst = baseConstructor(...args);
321
- if ("destroy" in inst) {
322
- destructors.push(inst.destroy);
323
- } else {
324
- const d = destructor(inst);
325
- destructors.push(d.destroy);
326
- return d;
327
- }
328
- return inst;
345
+ add(e) {
346
+ const d = destructor(e);
347
+ destructors.push(d.destroy);
348
+ return d.event;
329
349
  },
330
- destroy: function ConstructorDestructor() {
331
- destructors.forEach((i) => i());
350
+ destroy() {
351
+ destructors.forEach((d) => d());
332
352
  }
333
353
  };
334
354
  };
@@ -391,5 +411,5 @@ const stream = (baseEv) => {
391
411
  };
392
412
  };
393
413
 
394
- export { OwnerPool, _void, all, any, applied, chain, constructorApplied, constructorArgs, constructorDestroyable, destructor, executorApplied, filtered, fromEvent, fromPromise, isFilled, late, lateShared, local, map, of, on, once, primitive, sequence, shared, sharedSource, stream };
414
+ export { OwnerPool, _void, all, any, applied, chain, constructorApplied, constructorArgs, constructorDestroyable, destroyContainer, destructor, executorApplied, filtered, fromEvent, fromPromise, isFilled, late, lateShared, local, map, of, on, once, primitive, sequence, shared, sharedSource, stream };
395
415
  //# sourceMappingURL=silentium.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"silentium.mjs","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/base/Destructor.ts","../src/base/Local.ts","../src/base/Of.ts","../src/base/On.ts","../src/base/Void.ts","../src/components/ConstructorDestroyable.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 { 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\";\nimport {\n DestroyableType,\n DestructorType,\n ConstructorType,\n EventType,\n EventObjectType,\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[], DestroyableType & EventObjectType>;\n destroy: DestructorType;\n} => {\n const destructors: DestructorType[] = [];\n return {\n get: function ConstructorDestroyable(...args) {\n const inst = baseConstructor(...args);\n if (\"destroy\" in inst) {\n destructors.push(inst.destroy);\n } else {\n const d = destructor(inst);\n destructors.push(d.destroy);\n return d;\n }\n return inst;\n },\n destroy: function ConstructorDestructor() {\n destructors.forEach((i) => i());\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.mjs","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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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "silentium",
3
- "version": "0.0.103",
3
+ "version": "0.0.105",
4
4
  "description": "",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -0,0 +1,23 @@
1
+ import { destroyContainer } from "../base/DestroyContainer";
2
+ import { _void } from "../base/Void";
3
+ import { describe, expect, test } from "vitest";
4
+
5
+ describe("DestroyContainer.test", () => {
6
+ test("Destructor always exists", () => {
7
+ const destroyed: number[] = [];
8
+
9
+ const e = () => {
10
+ return () => {
11
+ destroyed.push(1);
12
+ };
13
+ };
14
+
15
+ const c = destroyContainer();
16
+ c.add(e)(_void);
17
+ c.add(e)(_void);
18
+
19
+ c.destroy();
20
+
21
+ expect(destroyed).toStrictEqual([1, 1]);
22
+ });
23
+ });
@@ -0,0 +1,16 @@
1
+ import { destructor } from "../base/Destructor";
2
+ import { DestructorType, EventType } from "../types";
3
+
4
+ export const destroyContainer = () => {
5
+ const destructors: DestructorType[] = [];
6
+ return {
7
+ add(e: EventType) {
8
+ const d = destructor(e);
9
+ destructors.push(d.destroy);
10
+ return d.event;
11
+ },
12
+ destroy() {
13
+ destructors.forEach((d) => d());
14
+ },
15
+ };
16
+ };
package/src/base/index.ts CHANGED
@@ -1,5 +1,6 @@
1
1
  export * from "./Destructor";
2
2
  export * from "./Local";
3
- export { of } from "./Of";
4
- export { on } from "./On";
5
- export { _void } from "./Void";
3
+ export * from "./Of";
4
+ export * from "./On";
5
+ export * from "./Void";
6
+ export * from "./DestroyContainer";
@@ -13,7 +13,9 @@ describe("ConstructorDestroyable.test", () => {
13
13
  }));
14
14
  const inst = p.get();
15
15
 
16
- inst.destroy();
16
+ inst(_void);
17
+
18
+ p.destroy();
17
19
 
18
20
  expect(isDestroyed).toBe(true);
19
21
  });
@@ -28,9 +30,9 @@ describe("ConstructorDestroyable.test", () => {
28
30
  };
29
31
  });
30
32
  const inst = p.get();
31
- inst.event(_void);
33
+ const d = inst(_void);
32
34
 
33
- inst.destroy();
35
+ d?.();
34
36
 
35
37
  expect(isDestroyed).toBe(true);
36
38
  });
@@ -1,10 +1,9 @@
1
- import { destructor } from "../base";
2
1
  import {
2
+ ConstructorType,
3
3
  DestroyableType,
4
4
  DestructorType,
5
- ConstructorType,
6
- EventType,
7
5
  EventObjectType,
6
+ EventType,
8
7
  } from "../types";
9
8
 
10
9
  /**
@@ -16,21 +15,28 @@ export const constructorDestroyable = (
16
15
  (DestroyableType & EventObjectType) | EventType
17
16
  >,
18
17
  ): {
19
- get: ConstructorType<any[], DestroyableType & EventObjectType>;
18
+ get: ConstructorType<any[], EventType>;
20
19
  destroy: DestructorType;
21
20
  } => {
22
21
  const destructors: DestructorType[] = [];
23
22
  return {
24
23
  get: function ConstructorDestroyable(...args) {
25
24
  const inst = baseConstructor(...args);
26
- if ("destroy" in inst) {
27
- destructors.push(inst.destroy);
28
- } else {
29
- const d = destructor(inst);
30
- destructors.push(d.destroy);
31
- return d;
32
- }
33
- return inst;
25
+ return (user) => {
26
+ if ("destroy" in inst) {
27
+ destructors.push(inst.destroy);
28
+ inst.event(user);
29
+ } else {
30
+ const d = inst(user);
31
+ if (d) {
32
+ destructors.push(d);
33
+ }
34
+ }
35
+
36
+ return () => {
37
+ destructors.forEach((i) => i());
38
+ };
39
+ };
34
40
  },
35
41
  destroy: function ConstructorDestructor() {
36
42
  destructors.forEach((i) => i());