silentium 0.0.91 → 0.0.93

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.93](https://github.com/silentium-lab/silentium/compare/v0.0.92...v0.0.93) (2025-10-05)
6
+
7
+
8
+ ### Bug Fixes
9
+
10
+ * **main:** destructor component ([f7cd12f](https://github.com/silentium-lab/silentium/commit/f7cd12f3f30516339e1d17ba591e83f7c86e98a3))
11
+
12
+ ### [0.0.92](https://github.com/silentium-lab/silentium/compare/v0.0.91...v0.0.92) (2025-09-29)
13
+
14
+
15
+ ### Bug Fixes
16
+
17
+ * **main:** exclude null from isFilled ([177693f](https://github.com/silentium-lab/silentium/commit/177693fad74191aa951ec12e25e972f6fd737ec0))
18
+
5
19
  ### [0.0.91](https://github.com/silentium-lab/silentium/compare/v0.0.90...v0.0.91) (2025-09-28)
6
20
 
7
21
 
@@ -290,6 +290,16 @@ const on = (src, user) => src(user);
290
290
  const _void = () => () => {
291
291
  };
292
292
 
293
+ const destructor = (src, destructorUser) => (u) => {
294
+ const mbDestructor = src(u);
295
+ if (mbDestructor && destructorUser) {
296
+ destructorUser(mbDestructor);
297
+ }
298
+ return () => {
299
+ mbDestructor?.();
300
+ };
301
+ };
302
+
293
303
  const map = (baseSrc, targetSrc) => {
294
304
  return (u) => {
295
305
  baseSrc((v) => {
@@ -318,6 +328,12 @@ const primitive = (baseSrc, theValue = null) => {
318
328
  },
319
329
  primitive() {
320
330
  return theValue;
331
+ },
332
+ primitiveWithException() {
333
+ if (theValue === null) {
334
+ throw new Error("Primitive value is null");
335
+ }
336
+ return theValue;
321
337
  }
322
338
  };
323
339
  };
@@ -348,6 +364,7 @@ exports.all = all;
348
364
  exports.any = any;
349
365
  exports.applied = applied;
350
366
  exports.chain = chain;
367
+ exports.destructor = destructor;
351
368
  exports.executorApplied = executorApplied;
352
369
  exports.filtered = filtered;
353
370
  exports.fromEvent = fromEvent;
@@ -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/LazyApplied.ts","../src/components/LazyArgs.ts","../src/components/LazyDestroyable.ts","../src/base/Of.ts","../src/base/On.ts","../src/base/Void.ts","../src/components/Map.ts","../src/components/PrimitiveSource.ts","../src/components/Sequence.ts","../src/components/Stream.ts"],"sourcesContent":["import { DataType } from \"../types\";\n\ntype ExtractTypeS<T> = T extends DataType<infer U> ? U : never;\n\nexport type ExtractTypesFromArrayS<T extends DataType<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 DataType[]>(\n ...theInfos: T\n): DataType<ExtractTypesFromArrayS<T>> => {\n const keysKnown = new Set<string>(Object.keys(theInfos));\n const keysFilled = new Set<string>();\n\n return (u) => {\n const result: Record<string, unknown> = {};\n\n Object.entries(theInfos).forEach(([key, info]) => {\n keysKnown.add(key);\n info((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 { DataType } 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: DataType<T>[]): DataType<T> => {\n return (u) => {\n infos.forEach((info) => {\n info(u);\n });\n };\n};\n","import { DataType, ValueType } 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 baseSrc: DataType<T>,\n applier: ValueType<[T], R>,\n): DataType<R> => {\n return (u) => {\n baseSrc((v) => {\n u(applier(v));\n });\n };\n};\n","import { DataTypeValue } from \"src/types/DataType\";\nimport { DataType } 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 DataType[]>(...infos: T): Last<T> => {\n return <Last<T>>((u) => {\n let lastValue: DataTypeValue<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((v) => {\n if (!nextI) {\n lastValue = v as DataTypeValue<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 { DataType, DataUserType } 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 baseSrc: DataType<T>,\n applier: (executor: DataUserType<T>) => DataUserType<T>,\n): DataType<T> => {\n return (u) => {\n baseSrc(\n applier((v) => {\n u(v);\n }),\n );\n };\n};\n","import { DataType, ValueType } 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 baseSrc: DataType<T>,\n predicate: ValueType<[T], boolean>,\n defaultValue?: T,\n): DataType<T> => {\n return (u) => {\n baseSrc((v) => {\n if (predicate(v)) {\n u(v);\n } else if (defaultValue !== undefined) {\n u(defaultValue);\n }\n });\n };\n};\n","import { DataTypeDestroyable } from \"src/types/DataType\";\nimport { DataType, DataUserType } 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 emitterSrc: DataType<any>,\n eventNameSrc: DataType<string>,\n subscribeMethodSrc: DataType<string>,\n unsubscribeMethodSrc?: DataType<string>,\n): DataTypeDestroyable<T> => {\n let lastU: DataUserType<T> | null = null;\n const handler = (v: T) => {\n if (lastU) {\n lastU(v);\n }\n };\n return (u) => {\n lastU = u;\n const a = all(emitterSrc, eventNameSrc, subscribeMethodSrc);\n a(([emitter, eventName, subscribe]) => {\n if (!emitter?.[subscribe]) {\n return;\n }\n emitter[subscribe](eventName, handler);\n });\n\n return () => {\n lastU = null;\n if (!unsubscribeMethodSrc) {\n return;\n }\n const a = all(emitterSrc, eventNameSrc, unsubscribeMethodSrc);\n a(([emitter, eventName, unsubscribe]) => {\n emitter[unsubscribe](eventName, handler);\n });\n };\n };\n};\n","import { DataType, DataUserType } 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?: DataUserType,\n): DataType<T> => {\n return (u) => {\n p.then((v) => {\n u(v);\n }).catch((e) => {\n errorOwner?.(e);\n });\n };\n};\n","export const isFilled = <T>(value?: T): value is T => {\n return value !== undefined && value !== null;\n};\n","import { DataUserType } 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<DataUserType<T>>;\n private innerOwner: DataUserType<T>;\n\n public constructor() {\n this.owners = new Set<DataUserType<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: DataUserType<T>): boolean {\n return this.owners.has(owner);\n }\n\n public add(owner: DataUserType<T>) {\n this.owners.add(owner);\n return this;\n }\n\n public remove(g: DataUserType<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 { DataUserType, 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: DataUserType<T> | null = null;\n const notify = (v?: T) => {\n if (isFilled(v) && lateUser) {\n lateUser(v);\n }\n };\n\n return {\n value: (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 give: (v) => {\n notify(v);\n },\n };\n};\n","import { DataType } 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>(baseSrc: DataType<T>): DataType<T> => {\n return (u) => {\n let isFilled = false;\n baseSrc((v) => {\n if (!isFilled) {\n isFilled = true;\n u(v);\n }\n });\n };\n};\n","import { DataType, 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 baseSrc: DataType<T>,\n stateless = false,\n): SourceType<T> & { pool: () => OwnerPool<T> } & DestroyableType => {\n const ownersPool = new OwnerPool<T>();\n let lastValue: T | undefined;\n\n const calls = late();\n once(calls.value)(() => {\n baseSrc((v) => {\n ownersPool.owner()(v);\n lastValue = v;\n });\n });\n\n return {\n value: (u) => {\n calls.give(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 give: (value: T) => {\n lastValue = value;\n ownersPool.owner()(value);\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 baseSrc: SourceType<T>,\n stateless = false,\n): SourceType<T> => {\n const sharedSrc = shared(baseSrc.value, stateless);\n\n return {\n value: (u) => {\n sharedSrc.value(u);\n },\n give: (v) => {\n baseSrc.give(v);\n },\n };\n};\n","import { late } from \"../components/Late\";\nimport { sharedSource } from \"../components/SharedSource\";\nimport { SourceType } from \"../types\";\n\nexport const lateShared = <T>(theValue?: T): SourceType<T> => {\n const src = sharedSource(late(theValue));\n return {\n value: src.value,\n give: src.give,\n };\n};\n","import { DataType, ValueType } from \"../types\";\n\n/**\n * Lazy with applied function to its results\n */\nexport const lazyApplied = <T>(\n baseLazy: ValueType<any[], DataType>,\n applier: (i: DataType) => DataType<T>,\n): ValueType<DataType[], DataType<T>> => {\n return (...args) => {\n return applier(baseLazy(...args));\n };\n};\n","import { DataType, ValueType } from \"../types\";\n\nexport const lazyArgs = (\n baseLazy: ValueType<any[], DataType>,\n args: unknown[],\n startFromArgIndex: number = 0,\n) => {\n return (...runArgs: any[]) => {\n return baseLazy(...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 { DestroyableType, DestructorType, ValueType } from \"../types\";\n\n/**\n * Lazy what can be destroyed\n */\nexport const lazyDestroyable = (\n baseLazy: ValueType<any[], DestroyableType>,\n): { get: ValueType<any[], DestroyableType>; destroy: DestructorType } => {\n const instances: DestroyableType[] = [];\n return {\n get: (...args) => {\n const inst = baseLazy(...args);\n instances.push(inst);\n return inst;\n },\n destroy: () => {\n instances.forEach((i) => i.destroy());\n },\n };\n};\n","import { DataType } from \"../types\";\n\nexport const of =\n <T>(v: T): DataType<T> =>\n (u) =>\n u(v);\n","import { DataType, DataUserType } from \"../types\";\n\n/**\n * Run data with user\n */\nexport const on = <T>(src: DataType<T>, user: DataUserType<T>) => src(user);\n","import { DataUserType } from \"../types\";\n\n/**\n * Silent user\n */\nexport const _void = (): DataUserType => () => {};\n","import { DataType, ValueType } 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 baseSrc: DataType<T[]>,\n targetSrc: ValueType<any[], DataType<TG>>,\n): DataType<TG[]> => {\n return (u) => {\n baseSrc((v) => {\n const infos: DataType<TG>[] = [];\n v.forEach((val) => {\n let valInfo: DataType<T> | T = val;\n if (typeof valInfo !== \"function\") {\n valInfo = of(valInfo);\n }\n const info = targetSrc(valInfo);\n infos.push(info);\n });\n const allI = all(...infos);\n allI(u);\n });\n };\n};\n","import { DataType } from \"../types\";\n\nexport const primitive = <T>(\n baseSrc: DataType<T>,\n theValue: T | null = null,\n) => {\n baseSrc((v) => {\n theValue = v;\n });\n\n return {\n [Symbol.toPrimitive]() {\n return theValue;\n },\n primitive() {\n return theValue;\n },\n };\n};\n","import { DataType } 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>(baseSrc: DataType<T>): DataType<T[]> => {\n return (u) => {\n const result: T[] = [];\n baseSrc((v) => {\n result.push(v);\n u(result);\n });\n };\n};\n","import { DataType } 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>(baseSrc: DataType<T[]>): DataType<T> => {\n return (u) => {\n baseSrc((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/LazyApplied.ts","../src/components/LazyArgs.ts","../src/components/LazyDestroyable.ts","../src/base/Of.ts","../src/base/On.ts","../src/base/Void.ts","../src/base/Destructor.ts","../src/components/Map.ts","../src/components/PrimitiveSource.ts","../src/components/Sequence.ts","../src/components/Stream.ts"],"sourcesContent":["import { DataType } from \"../types\";\n\ntype ExtractTypeS<T> = T extends DataType<infer U> ? U : never;\n\nexport type ExtractTypesFromArrayS<T extends DataType<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 DataType[]>(\n ...theInfos: T\n): DataType<ExtractTypesFromArrayS<T>> => {\n const keysKnown = new Set<string>(Object.keys(theInfos));\n const keysFilled = new Set<string>();\n\n return (u) => {\n const result: Record<string, unknown> = {};\n\n Object.entries(theInfos).forEach(([key, info]) => {\n keysKnown.add(key);\n info((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 { DataType } 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: DataType<T>[]): DataType<T> => {\n return (u) => {\n infos.forEach((info) => {\n info(u);\n });\n };\n};\n","import { DataType, ValueType } 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 baseSrc: DataType<T>,\n applier: ValueType<[T], R>,\n): DataType<R> => {\n return (u) => {\n baseSrc((v) => {\n u(applier(v));\n });\n };\n};\n","import { DataTypeValue } from \"src/types/DataType\";\nimport { DataType } 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 DataType[]>(...infos: T): Last<T> => {\n return <Last<T>>((u) => {\n let lastValue: DataTypeValue<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((v) => {\n if (!nextI) {\n lastValue = v as DataTypeValue<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 { DataType, DataUserType } 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 baseSrc: DataType<T>,\n applier: (executor: DataUserType<T>) => DataUserType<T>,\n): DataType<T> => {\n return (u) => {\n baseSrc(\n applier((v) => {\n u(v);\n }),\n );\n };\n};\n","import { DataType, ValueType } 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 baseSrc: DataType<T>,\n predicate: ValueType<[T], boolean>,\n defaultValue?: T,\n): DataType<T> => {\n return (u) => {\n baseSrc((v) => {\n if (predicate(v)) {\n u(v);\n } else if (defaultValue !== undefined) {\n u(defaultValue);\n }\n });\n };\n};\n","import { DataTypeDestroyable } from \"src/types/DataType\";\nimport { DataType, DataUserType } 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 emitterSrc: DataType<any>,\n eventNameSrc: DataType<string>,\n subscribeMethodSrc: DataType<string>,\n unsubscribeMethodSrc?: DataType<string>,\n): DataTypeDestroyable<T> => {\n let lastU: DataUserType<T> | null = null;\n const handler = (v: T) => {\n if (lastU) {\n lastU(v);\n }\n };\n return (u) => {\n lastU = u;\n const a = all(emitterSrc, eventNameSrc, subscribeMethodSrc);\n a(([emitter, eventName, subscribe]) => {\n if (!emitter?.[subscribe]) {\n return;\n }\n emitter[subscribe](eventName, handler);\n });\n\n return () => {\n lastU = null;\n if (!unsubscribeMethodSrc) {\n return;\n }\n const a = all(emitterSrc, eventNameSrc, unsubscribeMethodSrc);\n a(([emitter, eventName, unsubscribe]) => {\n emitter[unsubscribe](eventName, handler);\n });\n };\n };\n};\n","import { DataType, DataUserType } 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?: DataUserType,\n): DataType<T> => {\n return (u) => {\n p.then((v) => {\n u(v);\n }).catch((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 { DataUserType } 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<DataUserType<T>>;\n private innerOwner: DataUserType<T>;\n\n public constructor() {\n this.owners = new Set<DataUserType<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: DataUserType<T>): boolean {\n return this.owners.has(owner);\n }\n\n public add(owner: DataUserType<T>) {\n this.owners.add(owner);\n return this;\n }\n\n public remove(g: DataUserType<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 { DataUserType, 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: DataUserType<T> | null = null;\n const notify = (v?: T) => {\n if (isFilled(v) && lateUser) {\n lateUser(v);\n }\n };\n\n return {\n value: (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 give: (v) => {\n notify(v);\n },\n };\n};\n","import { DataType } 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>(baseSrc: DataType<T>): DataType<T> => {\n return (u) => {\n let isFilled = false;\n baseSrc((v) => {\n if (!isFilled) {\n isFilled = true;\n u(v);\n }\n });\n };\n};\n","import { DataType, 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 baseSrc: DataType<T>,\n stateless = false,\n): SourceType<T> & { pool: () => OwnerPool<T> } & DestroyableType => {\n const ownersPool = new OwnerPool<T>();\n let lastValue: T | undefined;\n\n const calls = late();\n once(calls.value)(() => {\n baseSrc((v) => {\n ownersPool.owner()(v);\n lastValue = v;\n });\n });\n\n return {\n value: (u) => {\n calls.give(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 give: (value: T) => {\n lastValue = value;\n ownersPool.owner()(value);\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 baseSrc: SourceType<T>,\n stateless = false,\n): SourceType<T> => {\n const sharedSrc = shared(baseSrc.value, stateless);\n\n return {\n value: (u) => {\n sharedSrc.value(u);\n },\n give: (v) => {\n baseSrc.give(v);\n },\n };\n};\n","import { late } from \"../components/Late\";\nimport { sharedSource } from \"../components/SharedSource\";\nimport { SourceType } from \"../types\";\n\nexport const lateShared = <T>(theValue?: T): SourceType<T> => {\n const src = sharedSource(late(theValue));\n return {\n value: src.value,\n give: src.give,\n };\n};\n","import { DataType, ValueType } from \"../types\";\n\n/**\n * Lazy with applied function to its results\n */\nexport const lazyApplied = <T>(\n baseLazy: ValueType<any[], DataType>,\n applier: (i: DataType) => DataType<T>,\n): ValueType<DataType[], DataType<T>> => {\n return (...args) => {\n return applier(baseLazy(...args));\n };\n};\n","import { DataType, ValueType } from \"../types\";\n\nexport const lazyArgs = (\n baseLazy: ValueType<any[], DataType>,\n args: unknown[],\n startFromArgIndex: number = 0,\n) => {\n return (...runArgs: any[]) => {\n return baseLazy(...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 { DestroyableType, DestructorType, ValueType } from \"../types\";\n\n/**\n * Lazy what can be destroyed\n */\nexport const lazyDestroyable = (\n baseLazy: ValueType<any[], DestroyableType>,\n): { get: ValueType<any[], DestroyableType>; destroy: DestructorType } => {\n const instances: DestroyableType[] = [];\n return {\n get: (...args) => {\n const inst = baseLazy(...args);\n instances.push(inst);\n return inst;\n },\n destroy: () => {\n instances.forEach((i) => i.destroy());\n },\n };\n};\n","import { DataType } from \"../types\";\n\nexport const of =\n <T>(v: T): DataType<T> =>\n (u) =>\n u(v);\n","import { DataType, DataUserType } from \"../types\";\n\n/**\n * Run data with user\n */\nexport const on = <T>(src: DataType<T>, user: DataUserType<T>) => src(user);\n","import { DataUserType } from \"../types\";\n\n/**\n * Silent user\n */\nexport const _void = (): DataUserType => () => {};\n","import { DataType, DataUserType, DestructorType } from \"src/types\";\n\nexport const destructor =\n <T>(\n src: DataType<T>,\n destructorUser?: DataUserType<DestructorType>,\n ): DataType<T> =>\n (u) => {\n const mbDestructor = src(u);\n if (mbDestructor && destructorUser) {\n destructorUser(mbDestructor);\n }\n return () => {\n mbDestructor?.();\n };\n };\n","import { DataType, ValueType } 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 baseSrc: DataType<T[]>,\n targetSrc: ValueType<any[], DataType<TG>>,\n): DataType<TG[]> => {\n return (u) => {\n baseSrc((v) => {\n const infos: DataType<TG>[] = [];\n v.forEach((val) => {\n let valInfo: DataType<T> | T = val;\n if (typeof valInfo !== \"function\") {\n valInfo = of(valInfo);\n }\n const info = targetSrc(valInfo);\n infos.push(info);\n });\n const allI = all(...infos);\n allI(u);\n });\n };\n};\n","import { DataType } from \"../types\";\n\nexport const primitive = <T>(\n baseSrc: DataType<T>,\n theValue: T | null = null,\n) => {\n baseSrc((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 { DataType } 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>(baseSrc: DataType<T>): DataType<T[]> => {\n return (u) => {\n const result: T[] = [];\n baseSrc((v) => {\n result.push(v);\n u(result);\n });\n };\n};\n","import { DataType } 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>(baseSrc: DataType<T[]>): DataType<T> => {\n return (u) => {\n baseSrc((v) => {\n v.forEach((cv) => {\n u(cv);\n });\n });\n };\n};\n"],"names":["a","v"],"mappings":"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"}
@@ -1,4 +1,5 @@
1
1
  import { DataTypeDestroyable } from 'src/types/DataType';
2
+ import { DataType as DataType$1, DataUserType as DataUserType$1, DestructorType as DestructorType$1 } from 'src/types';
2
3
 
3
4
  type DataUserType<T = unknown> = (value: T) => void;
4
5
 
@@ -129,6 +130,7 @@ declare const once: <T>(baseSrc: DataType<T>) => DataType<T>;
129
130
  declare const primitive: <T>(baseSrc: DataType<T>, theValue?: T | null) => {
130
131
  [Symbol.toPrimitive](): T | null;
131
132
  primitive(): T | null;
133
+ primitiveWithException(): T & ({} | undefined);
132
134
  };
133
135
 
134
136
  /**
@@ -138,7 +140,7 @@ declare const primitive: <T>(baseSrc: DataType<T>, theValue?: T | null) => {
138
140
  */
139
141
  declare const sequence: <T>(baseSrc: DataType<T>) => DataType<T[]>;
140
142
 
141
- declare const isFilled: <T>(value?: T) => value is T;
143
+ declare const isFilled: <T>(value?: T) => value is Exclude<T, null | undefined>;
142
144
 
143
145
  /**
144
146
  * Helps maintain an owner list allowing different
@@ -186,4 +188,6 @@ declare const on: <T>(src: DataType<T>, user: DataUserType<T>) => void | Destruc
186
188
  */
187
189
  declare const _void: () => DataUserType;
188
190
 
189
- export { type DataObjectType, type DataType, type DataUserObjectType, type DataUserType, type DestroyableType, type DestructorType, type ExtractTypesFromArrayS, OwnerPool, type SourceType, type ValueType, _void, all, any, applied, chain, executorApplied, filtered, fromEvent, fromPromise, isFilled, late, lateShared, lazyApplied, lazyArgs, lazyDestroyable, map, of, on, once, primitive, sequence, shared, sharedSource, stream };
191
+ declare const destructor: <T>(src: DataType$1<T>, destructorUser?: DataUserType$1<DestructorType$1>) => DataType$1<T>;
192
+
193
+ export { type DataObjectType, type DataType, type DataUserObjectType, type DataUserType, type DestroyableType, type DestructorType, type ExtractTypesFromArrayS, OwnerPool, type SourceType, type ValueType, _void, all, any, applied, chain, destructor, executorApplied, filtered, fromEvent, fromPromise, isFilled, late, lateShared, lazyApplied, lazyArgs, lazyDestroyable, map, of, on, once, primitive, sequence, shared, sharedSource, stream };
package/dist/silentium.js CHANGED
@@ -288,6 +288,16 @@ const on = (src, user) => src(user);
288
288
  const _void = () => () => {
289
289
  };
290
290
 
291
+ const destructor = (src, destructorUser) => (u) => {
292
+ const mbDestructor = src(u);
293
+ if (mbDestructor && destructorUser) {
294
+ destructorUser(mbDestructor);
295
+ }
296
+ return () => {
297
+ mbDestructor?.();
298
+ };
299
+ };
300
+
291
301
  const map = (baseSrc, targetSrc) => {
292
302
  return (u) => {
293
303
  baseSrc((v) => {
@@ -316,6 +326,12 @@ const primitive = (baseSrc, theValue = null) => {
316
326
  },
317
327
  primitive() {
318
328
  return theValue;
329
+ },
330
+ primitiveWithException() {
331
+ if (theValue === null) {
332
+ throw new Error("Primitive value is null");
333
+ }
334
+ return theValue;
319
335
  }
320
336
  };
321
337
  };
@@ -340,5 +356,5 @@ const stream = (baseSrc) => {
340
356
  };
341
357
  };
342
358
 
343
- export { OwnerPool, _void, all, any, applied, chain, executorApplied, filtered, fromEvent, fromPromise, isFilled, late, lateShared, lazyApplied, lazyArgs, lazyDestroyable, map, of, on, once, primitive, sequence, shared, sharedSource, stream };
359
+ export { OwnerPool, _void, all, any, applied, chain, destructor, executorApplied, filtered, fromEvent, fromPromise, isFilled, late, lateShared, lazyApplied, lazyArgs, lazyDestroyable, map, of, on, once, primitive, sequence, shared, sharedSource, stream };
344
360
  //# 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/LazyApplied.ts","../src/components/LazyArgs.ts","../src/components/LazyDestroyable.ts","../src/base/Of.ts","../src/base/On.ts","../src/base/Void.ts","../src/components/Map.ts","../src/components/PrimitiveSource.ts","../src/components/Sequence.ts","../src/components/Stream.ts"],"sourcesContent":["import { DataType } from \"../types\";\n\ntype ExtractTypeS<T> = T extends DataType<infer U> ? U : never;\n\nexport type ExtractTypesFromArrayS<T extends DataType<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 DataType[]>(\n ...theInfos: T\n): DataType<ExtractTypesFromArrayS<T>> => {\n const keysKnown = new Set<string>(Object.keys(theInfos));\n const keysFilled = new Set<string>();\n\n return (u) => {\n const result: Record<string, unknown> = {};\n\n Object.entries(theInfos).forEach(([key, info]) => {\n keysKnown.add(key);\n info((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 { DataType } 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: DataType<T>[]): DataType<T> => {\n return (u) => {\n infos.forEach((info) => {\n info(u);\n });\n };\n};\n","import { DataType, ValueType } 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 baseSrc: DataType<T>,\n applier: ValueType<[T], R>,\n): DataType<R> => {\n return (u) => {\n baseSrc((v) => {\n u(applier(v));\n });\n };\n};\n","import { DataTypeValue } from \"src/types/DataType\";\nimport { DataType } 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 DataType[]>(...infos: T): Last<T> => {\n return <Last<T>>((u) => {\n let lastValue: DataTypeValue<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((v) => {\n if (!nextI) {\n lastValue = v as DataTypeValue<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 { DataType, DataUserType } 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 baseSrc: DataType<T>,\n applier: (executor: DataUserType<T>) => DataUserType<T>,\n): DataType<T> => {\n return (u) => {\n baseSrc(\n applier((v) => {\n u(v);\n }),\n );\n };\n};\n","import { DataType, ValueType } 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 baseSrc: DataType<T>,\n predicate: ValueType<[T], boolean>,\n defaultValue?: T,\n): DataType<T> => {\n return (u) => {\n baseSrc((v) => {\n if (predicate(v)) {\n u(v);\n } else if (defaultValue !== undefined) {\n u(defaultValue);\n }\n });\n };\n};\n","import { DataTypeDestroyable } from \"src/types/DataType\";\nimport { DataType, DataUserType } 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 emitterSrc: DataType<any>,\n eventNameSrc: DataType<string>,\n subscribeMethodSrc: DataType<string>,\n unsubscribeMethodSrc?: DataType<string>,\n): DataTypeDestroyable<T> => {\n let lastU: DataUserType<T> | null = null;\n const handler = (v: T) => {\n if (lastU) {\n lastU(v);\n }\n };\n return (u) => {\n lastU = u;\n const a = all(emitterSrc, eventNameSrc, subscribeMethodSrc);\n a(([emitter, eventName, subscribe]) => {\n if (!emitter?.[subscribe]) {\n return;\n }\n emitter[subscribe](eventName, handler);\n });\n\n return () => {\n lastU = null;\n if (!unsubscribeMethodSrc) {\n return;\n }\n const a = all(emitterSrc, eventNameSrc, unsubscribeMethodSrc);\n a(([emitter, eventName, unsubscribe]) => {\n emitter[unsubscribe](eventName, handler);\n });\n };\n };\n};\n","import { DataType, DataUserType } 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?: DataUserType,\n): DataType<T> => {\n return (u) => {\n p.then((v) => {\n u(v);\n }).catch((e) => {\n errorOwner?.(e);\n });\n };\n};\n","export const isFilled = <T>(value?: T): value is T => {\n return value !== undefined && value !== null;\n};\n","import { DataUserType } 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<DataUserType<T>>;\n private innerOwner: DataUserType<T>;\n\n public constructor() {\n this.owners = new Set<DataUserType<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: DataUserType<T>): boolean {\n return this.owners.has(owner);\n }\n\n public add(owner: DataUserType<T>) {\n this.owners.add(owner);\n return this;\n }\n\n public remove(g: DataUserType<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 { DataUserType, 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: DataUserType<T> | null = null;\n const notify = (v?: T) => {\n if (isFilled(v) && lateUser) {\n lateUser(v);\n }\n };\n\n return {\n value: (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 give: (v) => {\n notify(v);\n },\n };\n};\n","import { DataType } 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>(baseSrc: DataType<T>): DataType<T> => {\n return (u) => {\n let isFilled = false;\n baseSrc((v) => {\n if (!isFilled) {\n isFilled = true;\n u(v);\n }\n });\n };\n};\n","import { DataType, 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 baseSrc: DataType<T>,\n stateless = false,\n): SourceType<T> & { pool: () => OwnerPool<T> } & DestroyableType => {\n const ownersPool = new OwnerPool<T>();\n let lastValue: T | undefined;\n\n const calls = late();\n once(calls.value)(() => {\n baseSrc((v) => {\n ownersPool.owner()(v);\n lastValue = v;\n });\n });\n\n return {\n value: (u) => {\n calls.give(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 give: (value: T) => {\n lastValue = value;\n ownersPool.owner()(value);\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 baseSrc: SourceType<T>,\n stateless = false,\n): SourceType<T> => {\n const sharedSrc = shared(baseSrc.value, stateless);\n\n return {\n value: (u) => {\n sharedSrc.value(u);\n },\n give: (v) => {\n baseSrc.give(v);\n },\n };\n};\n","import { late } from \"../components/Late\";\nimport { sharedSource } from \"../components/SharedSource\";\nimport { SourceType } from \"../types\";\n\nexport const lateShared = <T>(theValue?: T): SourceType<T> => {\n const src = sharedSource(late(theValue));\n return {\n value: src.value,\n give: src.give,\n };\n};\n","import { DataType, ValueType } from \"../types\";\n\n/**\n * Lazy with applied function to its results\n */\nexport const lazyApplied = <T>(\n baseLazy: ValueType<any[], DataType>,\n applier: (i: DataType) => DataType<T>,\n): ValueType<DataType[], DataType<T>> => {\n return (...args) => {\n return applier(baseLazy(...args));\n };\n};\n","import { DataType, ValueType } from \"../types\";\n\nexport const lazyArgs = (\n baseLazy: ValueType<any[], DataType>,\n args: unknown[],\n startFromArgIndex: number = 0,\n) => {\n return (...runArgs: any[]) => {\n return baseLazy(...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 { DestroyableType, DestructorType, ValueType } from \"../types\";\n\n/**\n * Lazy what can be destroyed\n */\nexport const lazyDestroyable = (\n baseLazy: ValueType<any[], DestroyableType>,\n): { get: ValueType<any[], DestroyableType>; destroy: DestructorType } => {\n const instances: DestroyableType[] = [];\n return {\n get: (...args) => {\n const inst = baseLazy(...args);\n instances.push(inst);\n return inst;\n },\n destroy: () => {\n instances.forEach((i) => i.destroy());\n },\n };\n};\n","import { DataType } from \"../types\";\n\nexport const of =\n <T>(v: T): DataType<T> =>\n (u) =>\n u(v);\n","import { DataType, DataUserType } from \"../types\";\n\n/**\n * Run data with user\n */\nexport const on = <T>(src: DataType<T>, user: DataUserType<T>) => src(user);\n","import { DataUserType } from \"../types\";\n\n/**\n * Silent user\n */\nexport const _void = (): DataUserType => () => {};\n","import { DataType, ValueType } 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 baseSrc: DataType<T[]>,\n targetSrc: ValueType<any[], DataType<TG>>,\n): DataType<TG[]> => {\n return (u) => {\n baseSrc((v) => {\n const infos: DataType<TG>[] = [];\n v.forEach((val) => {\n let valInfo: DataType<T> | T = val;\n if (typeof valInfo !== \"function\") {\n valInfo = of(valInfo);\n }\n const info = targetSrc(valInfo);\n infos.push(info);\n });\n const allI = all(...infos);\n allI(u);\n });\n };\n};\n","import { DataType } from \"../types\";\n\nexport const primitive = <T>(\n baseSrc: DataType<T>,\n theValue: T | null = null,\n) => {\n baseSrc((v) => {\n theValue = v;\n });\n\n return {\n [Symbol.toPrimitive]() {\n return theValue;\n },\n primitive() {\n return theValue;\n },\n };\n};\n","import { DataType } 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>(baseSrc: DataType<T>): DataType<T[]> => {\n return (u) => {\n const result: T[] = [];\n baseSrc((v) => {\n result.push(v);\n u(result);\n });\n };\n};\n","import { DataType } 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>(baseSrc: DataType<T[]>): DataType<T> => {\n return (u) => {\n baseSrc((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/LazyApplied.ts","../src/components/LazyArgs.ts","../src/components/LazyDestroyable.ts","../src/base/Of.ts","../src/base/On.ts","../src/base/Void.ts","../src/base/Destructor.ts","../src/components/Map.ts","../src/components/PrimitiveSource.ts","../src/components/Sequence.ts","../src/components/Stream.ts"],"sourcesContent":["import { DataType } from \"../types\";\n\ntype ExtractTypeS<T> = T extends DataType<infer U> ? U : never;\n\nexport type ExtractTypesFromArrayS<T extends DataType<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 DataType[]>(\n ...theInfos: T\n): DataType<ExtractTypesFromArrayS<T>> => {\n const keysKnown = new Set<string>(Object.keys(theInfos));\n const keysFilled = new Set<string>();\n\n return (u) => {\n const result: Record<string, unknown> = {};\n\n Object.entries(theInfos).forEach(([key, info]) => {\n keysKnown.add(key);\n info((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 { DataType } 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: DataType<T>[]): DataType<T> => {\n return (u) => {\n infos.forEach((info) => {\n info(u);\n });\n };\n};\n","import { DataType, ValueType } 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 baseSrc: DataType<T>,\n applier: ValueType<[T], R>,\n): DataType<R> => {\n return (u) => {\n baseSrc((v) => {\n u(applier(v));\n });\n };\n};\n","import { DataTypeValue } from \"src/types/DataType\";\nimport { DataType } 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 DataType[]>(...infos: T): Last<T> => {\n return <Last<T>>((u) => {\n let lastValue: DataTypeValue<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((v) => {\n if (!nextI) {\n lastValue = v as DataTypeValue<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 { DataType, DataUserType } 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 baseSrc: DataType<T>,\n applier: (executor: DataUserType<T>) => DataUserType<T>,\n): DataType<T> => {\n return (u) => {\n baseSrc(\n applier((v) => {\n u(v);\n }),\n );\n };\n};\n","import { DataType, ValueType } 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 baseSrc: DataType<T>,\n predicate: ValueType<[T], boolean>,\n defaultValue?: T,\n): DataType<T> => {\n return (u) => {\n baseSrc((v) => {\n if (predicate(v)) {\n u(v);\n } else if (defaultValue !== undefined) {\n u(defaultValue);\n }\n });\n };\n};\n","import { DataTypeDestroyable } from \"src/types/DataType\";\nimport { DataType, DataUserType } 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 emitterSrc: DataType<any>,\n eventNameSrc: DataType<string>,\n subscribeMethodSrc: DataType<string>,\n unsubscribeMethodSrc?: DataType<string>,\n): DataTypeDestroyable<T> => {\n let lastU: DataUserType<T> | null = null;\n const handler = (v: T) => {\n if (lastU) {\n lastU(v);\n }\n };\n return (u) => {\n lastU = u;\n const a = all(emitterSrc, eventNameSrc, subscribeMethodSrc);\n a(([emitter, eventName, subscribe]) => {\n if (!emitter?.[subscribe]) {\n return;\n }\n emitter[subscribe](eventName, handler);\n });\n\n return () => {\n lastU = null;\n if (!unsubscribeMethodSrc) {\n return;\n }\n const a = all(emitterSrc, eventNameSrc, unsubscribeMethodSrc);\n a(([emitter, eventName, unsubscribe]) => {\n emitter[unsubscribe](eventName, handler);\n });\n };\n };\n};\n","import { DataType, DataUserType } 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?: DataUserType,\n): DataType<T> => {\n return (u) => {\n p.then((v) => {\n u(v);\n }).catch((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 { DataUserType } 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<DataUserType<T>>;\n private innerOwner: DataUserType<T>;\n\n public constructor() {\n this.owners = new Set<DataUserType<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: DataUserType<T>): boolean {\n return this.owners.has(owner);\n }\n\n public add(owner: DataUserType<T>) {\n this.owners.add(owner);\n return this;\n }\n\n public remove(g: DataUserType<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 { DataUserType, 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: DataUserType<T> | null = null;\n const notify = (v?: T) => {\n if (isFilled(v) && lateUser) {\n lateUser(v);\n }\n };\n\n return {\n value: (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 give: (v) => {\n notify(v);\n },\n };\n};\n","import { DataType } 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>(baseSrc: DataType<T>): DataType<T> => {\n return (u) => {\n let isFilled = false;\n baseSrc((v) => {\n if (!isFilled) {\n isFilled = true;\n u(v);\n }\n });\n };\n};\n","import { DataType, 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 baseSrc: DataType<T>,\n stateless = false,\n): SourceType<T> & { pool: () => OwnerPool<T> } & DestroyableType => {\n const ownersPool = new OwnerPool<T>();\n let lastValue: T | undefined;\n\n const calls = late();\n once(calls.value)(() => {\n baseSrc((v) => {\n ownersPool.owner()(v);\n lastValue = v;\n });\n });\n\n return {\n value: (u) => {\n calls.give(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 give: (value: T) => {\n lastValue = value;\n ownersPool.owner()(value);\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 baseSrc: SourceType<T>,\n stateless = false,\n): SourceType<T> => {\n const sharedSrc = shared(baseSrc.value, stateless);\n\n return {\n value: (u) => {\n sharedSrc.value(u);\n },\n give: (v) => {\n baseSrc.give(v);\n },\n };\n};\n","import { late } from \"../components/Late\";\nimport { sharedSource } from \"../components/SharedSource\";\nimport { SourceType } from \"../types\";\n\nexport const lateShared = <T>(theValue?: T): SourceType<T> => {\n const src = sharedSource(late(theValue));\n return {\n value: src.value,\n give: src.give,\n };\n};\n","import { DataType, ValueType } from \"../types\";\n\n/**\n * Lazy with applied function to its results\n */\nexport const lazyApplied = <T>(\n baseLazy: ValueType<any[], DataType>,\n applier: (i: DataType) => DataType<T>,\n): ValueType<DataType[], DataType<T>> => {\n return (...args) => {\n return applier(baseLazy(...args));\n };\n};\n","import { DataType, ValueType } from \"../types\";\n\nexport const lazyArgs = (\n baseLazy: ValueType<any[], DataType>,\n args: unknown[],\n startFromArgIndex: number = 0,\n) => {\n return (...runArgs: any[]) => {\n return baseLazy(...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 { DestroyableType, DestructorType, ValueType } from \"../types\";\n\n/**\n * Lazy what can be destroyed\n */\nexport const lazyDestroyable = (\n baseLazy: ValueType<any[], DestroyableType>,\n): { get: ValueType<any[], DestroyableType>; destroy: DestructorType } => {\n const instances: DestroyableType[] = [];\n return {\n get: (...args) => {\n const inst = baseLazy(...args);\n instances.push(inst);\n return inst;\n },\n destroy: () => {\n instances.forEach((i) => i.destroy());\n },\n };\n};\n","import { DataType } from \"../types\";\n\nexport const of =\n <T>(v: T): DataType<T> =>\n (u) =>\n u(v);\n","import { DataType, DataUserType } from \"../types\";\n\n/**\n * Run data with user\n */\nexport const on = <T>(src: DataType<T>, user: DataUserType<T>) => src(user);\n","import { DataUserType } from \"../types\";\n\n/**\n * Silent user\n */\nexport const _void = (): DataUserType => () => {};\n","import { DataType, DataUserType, DestructorType } from \"src/types\";\n\nexport const destructor =\n <T>(\n src: DataType<T>,\n destructorUser?: DataUserType<DestructorType>,\n ): DataType<T> =>\n (u) => {\n const mbDestructor = src(u);\n if (mbDestructor && destructorUser) {\n destructorUser(mbDestructor);\n }\n return () => {\n mbDestructor?.();\n };\n };\n","import { DataType, ValueType } 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 baseSrc: DataType<T[]>,\n targetSrc: ValueType<any[], DataType<TG>>,\n): DataType<TG[]> => {\n return (u) => {\n baseSrc((v) => {\n const infos: DataType<TG>[] = [];\n v.forEach((val) => {\n let valInfo: DataType<T> | T = val;\n if (typeof valInfo !== \"function\") {\n valInfo = of(valInfo);\n }\n const info = targetSrc(valInfo);\n infos.push(info);\n });\n const allI = all(...infos);\n allI(u);\n });\n };\n};\n","import { DataType } from \"../types\";\n\nexport const primitive = <T>(\n baseSrc: DataType<T>,\n theValue: T | null = null,\n) => {\n baseSrc((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 { DataType } 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>(baseSrc: DataType<T>): DataType<T[]> => {\n return (u) => {\n const result: T[] = [];\n baseSrc((v) => {\n result.push(v);\n u(result);\n });\n };\n};\n","import { DataType } 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>(baseSrc: DataType<T[]>): DataType<T> => {\n return (u) => {\n baseSrc((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(e){"use strict";const t=(...e)=>{const t=new Set(Object.keys(e)),r=new Set;return n=>{const o={};Object.entries(e).forEach((([e,s])=>{t.add(e),s((s=>{r.add(e),o[e]=s,((e,t)=>e.size>0&&e.size===t.size)(r,t)&&n(Object.values(o))}))}))}},r=e=>null!=e;var n=Object.defineProperty,o=(e,t,r)=>((e,t,r)=>t in e?n(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r)(e,"symbol"!=typeof t?t+"":t,r);class s{constructor(){o(this,"owners"),o(this,"innerOwner"),this.owners=new Set,this.innerOwner=e=>{this.owners.forEach((t=>{t(e)}))}}owner(){return this.innerOwner}size(){return this.owners.size}has(e){return this.owners.has(e)}add(e){return this.owners.add(e),this}remove(e){return this.owners.delete(e),this}destroy(){return this.owners.forEach((e=>{this.remove(e)})),this}}const i=e=>{let t=null;const n=e=>{r(e)&&t&&t(e)};return{value:r=>{if(t)throw new Error("Late component gets new user, when another was already connected!");t=r,n(e)},give:e=>{n(e)}}},a=e=>t=>{let r=!1;e((e=>{r||(r=!0,t(e))}))},l=(e,t=!1)=>{const n=new s;let o;const l=i();return a(l.value)((()=>{e((e=>{n.owner()(e),o=e}))})),{value:e=>(l.give(1),t||!r(o)||n.has(e)||e(o),n.add(e),()=>{n.remove(e)}),give:e=>{o=e,n.owner()(e)},pool:()=>n,destroy(){n.destroy()}}},c=(e,t=!1)=>{const r=l(e.value,t);return{value:e=>{r.value(e)},give:t=>{e.give(t)}}};const u=e=>t=>t(e);e.OwnerPool=s,e._void=()=>()=>{},e.all=t,e.any=(...e)=>t=>{e.forEach((e=>{e(t)}))},e.applied=(e,t)=>r=>{e((e=>{r(t(e))}))},e.chain=(...e)=>t=>{let r;const n=o=>{const s=e[o],i=e[o+1];s((e=>{i||(r=e),r&&t(r),i&&!r&&n(o+1)}))};n(0)},e.executorApplied=(e,t)=>r=>{e(t((e=>{r(e)})))},e.filtered=(e,t,r)=>n=>{e((e=>{t(e)?n(e):void 0!==r&&n(r)}))},e.fromEvent=(e,r,n,o)=>{let s=null;const i=e=>{s&&s(e)};return a=>{s=a;return t(e,r,n)((([e,t,r])=>{e?.[r]&&e[r](t,i)})),()=>{if(s=null,!o)return;t(e,r,o)((([e,t,r])=>{e[r](t,i)}))}}},e.fromPromise=(e,t)=>r=>{e.then((e=>{r(e)})).catch((e=>{t?.(e)}))},e.isFilled=r,e.late=i,e.lateShared=e=>{const t=c(i(e));return{value:t.value,give:t.give}},e.lazyApplied=(e,t)=>(...r)=>t(e(...r)),e.lazyArgs=(e,t,r=0)=>(...n)=>e(...function(e,t,r){const n=e.slice(0,r);for(;n.length<r;)n.push(void 0);return n.concat(t)}(n,t,r)),e.lazyDestroyable=e=>{const t=[];return{get:(...r)=>{const n=e(...r);return t.push(n),n},destroy:()=>{t.forEach((e=>e.destroy()))}}},e.map=(e,r)=>n=>{e((e=>{const o=[];e.forEach((e=>{let t=e;"function"!=typeof t&&(t=u(t));const n=r(t);o.push(n)}));t(...o)(n)}))},e.of=u,e.on=(e,t)=>e(t),e.once=a,e.primitive=(e,t=null)=>(e((e=>{t=e})),{[Symbol.toPrimitive]:()=>t,primitive:()=>t}),e.sequence=e=>t=>{const r=[];e((e=>{r.push(e),t(r)}))},e.shared=l,e.sharedSource=c,e.stream=e=>t=>{e((e=>{e.forEach((e=>{t(e)}))}))}}({});
1
+ !function(e){"use strict";const t=(...e)=>{const t=new Set(Object.keys(e)),r=new Set;return n=>{const o={};Object.entries(e).forEach((([e,s])=>{t.add(e),s((s=>{r.add(e),o[e]=s,((e,t)=>e.size>0&&e.size===t.size)(r,t)&&n(Object.values(o))}))}))}},r=e=>null!=e;var n=Object.defineProperty,o=(e,t,r)=>((e,t,r)=>t in e?n(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r)(e,"symbol"!=typeof t?t+"":t,r);class s{constructor(){o(this,"owners"),o(this,"innerOwner"),this.owners=new Set,this.innerOwner=e=>{this.owners.forEach((t=>{t(e)}))}}owner(){return this.innerOwner}size(){return this.owners.size}has(e){return this.owners.has(e)}add(e){return this.owners.add(e),this}remove(e){return this.owners.delete(e),this}destroy(){return this.owners.forEach((e=>{this.remove(e)})),this}}const i=e=>{let t=null;const n=e=>{r(e)&&t&&t(e)};return{value:r=>{if(t)throw new Error("Late component gets new user, when another was already connected!");t=r,n(e)},give:e=>{n(e)}}},l=e=>t=>{let r=!1;e((e=>{r||(r=!0,t(e))}))},c=(e,t=!1)=>{const n=new s;let o;const c=i();return l(c.value)((()=>{e((e=>{n.owner()(e),o=e}))})),{value:e=>(c.give(1),t||!r(o)||n.has(e)||e(o),n.add(e),()=>{n.remove(e)}),give:e=>{o=e,n.owner()(e)},pool:()=>n,destroy(){n.destroy()}}},a=(e,t=!1)=>{const r=c(e.value,t);return{value:e=>{r.value(e)},give:t=>{e.give(t)}}};const u=e=>t=>t(e);e.OwnerPool=s,e._void=()=>()=>{},e.all=t,e.any=(...e)=>t=>{e.forEach((e=>{e(t)}))},e.applied=(e,t)=>r=>{e((e=>{r(t(e))}))},e.chain=(...e)=>t=>{let r;const n=o=>{const s=e[o],i=e[o+1];s((e=>{i||(r=e),r&&t(r),i&&!r&&n(o+1)}))};n(0)},e.destructor=(e,t)=>r=>{const n=e(r);return n&&t&&t(n),()=>{n?.()}},e.executorApplied=(e,t)=>r=>{e(t((e=>{r(e)})))},e.filtered=(e,t,r)=>n=>{e((e=>{t(e)?n(e):void 0!==r&&n(r)}))},e.fromEvent=(e,r,n,o)=>{let s=null;const i=e=>{s&&s(e)};return l=>{s=l;return t(e,r,n)((([e,t,r])=>{e?.[r]&&e[r](t,i)})),()=>{if(s=null,!o)return;t(e,r,o)((([e,t,r])=>{e[r](t,i)}))}}},e.fromPromise=(e,t)=>r=>{e.then((e=>{r(e)})).catch((e=>{t?.(e)}))},e.isFilled=r,e.late=i,e.lateShared=e=>{const t=a(i(e));return{value:t.value,give:t.give}},e.lazyApplied=(e,t)=>(...r)=>t(e(...r)),e.lazyArgs=(e,t,r=0)=>(...n)=>e(...function(e,t,r){const n=e.slice(0,r);for(;n.length<r;)n.push(void 0);return n.concat(t)}(n,t,r)),e.lazyDestroyable=e=>{const t=[];return{get:(...r)=>{const n=e(...r);return t.push(n),n},destroy:()=>{t.forEach((e=>e.destroy()))}}},e.map=(e,r)=>n=>{e((e=>{const o=[];e.forEach((e=>{let t=e;"function"!=typeof t&&(t=u(t));const n=r(t);o.push(n)}));t(...o)(n)}))},e.of=u,e.on=(e,t)=>e(t),e.once=l,e.primitive=(e,t=null)=>(e((e=>{t=e})),{[Symbol.toPrimitive]:()=>t,primitive:()=>t,primitiveWithException(){if(null===t)throw new Error("Primitive value is null");return t}}),e.sequence=e=>t=>{const r=[];e((e=>{r.push(e),t(r)}))},e.shared=c,e.sharedSource=a,e.stream=e=>t=>{e((e=>{e.forEach((e=>{t(e)}))}))}}({});
@@ -1,2 +1,2 @@
1
- const e=(...e)=>{const t=new Set(Object.keys(e)),n=new Set;return r=>{const s={};Object.entries(e).forEach((([e,o])=>{t.add(e),o((o=>{n.add(e),s[e]=o,((e,t)=>e.size>0&&e.size===t.size)(n,t)&&r(Object.values(s))}))}))}},t=(...e)=>t=>{e.forEach((e=>{e(t)}))},n=(e,t)=>n=>{e((e=>{n(t(e))}))},r=(...e)=>t=>{let n;const r=s=>{const o=e[s],i=e[s+1];o((e=>{i||(n=e),n&&t(n),i&&!n&&r(s+1)}))};r(0)},s=(e,t)=>n=>{e(t((e=>{n(e)})))},o=(e,t,n)=>r=>{e((e=>{t(e)?r(e):void 0!==n&&r(n)}))},i=(t,n,r,s)=>{let o=null;const i=e=>{o&&o(e)};return c=>{o=c;return e(t,n,r)((([e,t,n])=>{e?.[n]&&e[n](t,i)})),()=>{if(o=null,!s)return;e(t,n,s)((([e,t,n])=>{e[n](t,i)}))}}},c=(e,t)=>n=>{e.then((e=>{n(e)})).catch((e=>{t?.(e)}))},u=e=>null!=e;var a=Object.defineProperty,l=(e,t,n)=>((e,t,n)=>t in e?a(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n)(e,"symbol"!=typeof t?t+"":t,n);class h{constructor(){l(this,"owners"),l(this,"innerOwner"),this.owners=new Set,this.innerOwner=e=>{this.owners.forEach((t=>{t(e)}))}}owner(){return this.innerOwner}size(){return this.owners.size}has(e){return this.owners.has(e)}add(e){return this.owners.add(e),this}remove(e){return this.owners.delete(e),this}destroy(){return this.owners.forEach((e=>{this.remove(e)})),this}}const v=e=>{let t=null;const n=e=>{u(e)&&t&&t(e)};return{value:r=>{if(t)throw new Error("Late component gets new user, when another was already connected!");t=r,n(e)},give:e=>{n(e)}}},w=e=>t=>{let n=!1;e((e=>{n||(n=!0,t(e))}))},d=(e,t=!1)=>{const n=new h;let r;const s=v();return w(s.value)((()=>{e((e=>{n.owner()(e),r=e}))})),{value:e=>(s.give(1),t||!u(r)||n.has(e)||e(r),n.add(e),()=>{n.remove(e)}),give:e=>{r=e,n.owner()(e)},pool:()=>n,destroy(){n.destroy()}}},f=(e,t=!1)=>{const n=d(e.value,t);return{value:e=>{n.value(e)},give:t=>{e.give(t)}}},y=e=>{const t=f(v(e));return{value:t.value,give:t.give}},g=(e,t)=>(...n)=>t(e(...n)),p=(e,t,n=0)=>(...r)=>e(...function(e,t,n){const r=e.slice(0,n);for(;r.length<n;)r.push(void 0);return r.concat(t)}(r,t,n));const b=e=>{const t=[];return{get:(...n)=>{const r=e(...n);return t.push(r),r},destroy:()=>{t.forEach((e=>e.destroy()))}}},m=e=>t=>t(e),E=(e,t)=>e(t),O=()=>()=>{},z=(t,n)=>r=>{t((t=>{const s=[];t.forEach((e=>{let t=e;"function"!=typeof t&&(t=m(t));const r=n(t);s.push(r)}));e(...s)(r)}))},j=(e,t=null)=>(e((e=>{t=e})),{[Symbol.toPrimitive]:()=>t,primitive:()=>t}),S=e=>t=>{const n=[];e((e=>{n.push(e),t(n)}))},P=e=>t=>{e((e=>{e.forEach((e=>{t(e)}))}))};export{h as OwnerPool,O as _void,e as all,t as any,n as applied,r as chain,s as executorApplied,o as filtered,i as fromEvent,c as fromPromise,u as isFilled,v as late,y as lateShared,g as lazyApplied,p as lazyArgs,b as lazyDestroyable,z as map,m as of,E as on,w as once,j as primitive,S as sequence,d as shared,f as sharedSource,P as stream};
1
+ const e=(...e)=>{const t=new Set(Object.keys(e)),r=new Set;return n=>{const o={};Object.entries(e).forEach((([e,s])=>{t.add(e),s((s=>{r.add(e),o[e]=s,((e,t)=>e.size>0&&e.size===t.size)(r,t)&&n(Object.values(o))}))}))}},t=(...e)=>t=>{e.forEach((e=>{e(t)}))},r=(e,t)=>r=>{e((e=>{r(t(e))}))},n=(...e)=>t=>{let r;const n=o=>{const s=e[o],i=e[o+1];s((e=>{i||(r=e),r&&t(r),i&&!r&&n(o+1)}))};n(0)},o=(e,t)=>r=>{e(t((e=>{r(e)})))},s=(e,t,r)=>n=>{e((e=>{t(e)?n(e):void 0!==r&&n(r)}))},i=(t,r,n,o)=>{let s=null;const i=e=>{s&&s(e)};return u=>{s=u;return e(t,r,n)((([e,t,r])=>{e?.[r]&&e[r](t,i)})),()=>{if(s=null,!o)return;e(t,r,o)((([e,t,r])=>{e[r](t,i)}))}}},u=(e,t)=>r=>{e.then((e=>{r(e)})).catch((e=>{t?.(e)}))},c=e=>null!=e;var l=Object.defineProperty,a=(e,t,r)=>((e,t,r)=>t in e?l(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r)(e,"symbol"!=typeof t?t+"":t,r);class h{constructor(){a(this,"owners"),a(this,"innerOwner"),this.owners=new Set,this.innerOwner=e=>{this.owners.forEach((t=>{t(e)}))}}owner(){return this.innerOwner}size(){return this.owners.size}has(e){return this.owners.has(e)}add(e){return this.owners.add(e),this}remove(e){return this.owners.delete(e),this}destroy(){return this.owners.forEach((e=>{this.remove(e)})),this}}const v=e=>{let t=null;const r=e=>{c(e)&&t&&t(e)};return{value:n=>{if(t)throw new Error("Late component gets new user, when another was already connected!");t=n,r(e)},give:e=>{r(e)}}},w=e=>t=>{let r=!1;e((e=>{r||(r=!0,t(e))}))},d=(e,t=!1)=>{const r=new h;let n;const o=v();return w(o.value)((()=>{e((e=>{r.owner()(e),n=e}))})),{value:e=>(o.give(1),t||!c(n)||r.has(e)||e(n),r.add(e),()=>{r.remove(e)}),give:e=>{n=e,r.owner()(e)},pool:()=>r,destroy(){r.destroy()}}},f=(e,t=!1)=>{const r=d(e.value,t);return{value:e=>{r.value(e)},give:t=>{e.give(t)}}},p=e=>{const t=f(v(e));return{value:t.value,give:t.give}},y=(e,t)=>(...r)=>t(e(...r)),g=(e,t,r=0)=>(...n)=>e(...function(e,t,r){const n=e.slice(0,r);for(;n.length<r;)n.push(void 0);return n.concat(t)}(n,t,r));const m=e=>{const t=[];return{get:(...r)=>{const n=e(...r);return t.push(n),n},destroy:()=>{t.forEach((e=>e.destroy()))}}},E=e=>t=>t(e),b=(e,t)=>e(t),O=()=>()=>{},z=(e,t)=>r=>{const n=e(r);return n&&t&&t(n),()=>{n?.()}},j=(t,r)=>n=>{t((t=>{const o=[];t.forEach((e=>{let t=e;"function"!=typeof t&&(t=E(t));const n=r(t);o.push(n)}));e(...o)(n)}))},S=(e,t=null)=>(e((e=>{t=e})),{[Symbol.toPrimitive]:()=>t,primitive:()=>t,primitiveWithException(){if(null===t)throw new Error("Primitive value is null");return t}}),P=e=>t=>{const r=[];e((e=>{r.push(e),t(r)}))},x=e=>t=>{e((e=>{e.forEach((e=>{t(e)}))}))};export{h as OwnerPool,O as _void,e as all,t as any,r as applied,n as chain,z as destructor,o as executorApplied,s as filtered,i as fromEvent,u as fromPromise,c as isFilled,v as late,p as lateShared,y as lazyApplied,g as lazyArgs,m as lazyDestroyable,j as map,E as of,b as on,w as once,S as primitive,P as sequence,d as shared,f as sharedSource,x 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/LazyApplied.ts","../src/components/LazyArgs.ts","../src/components/LazyDestroyable.ts","../src/base/Of.ts","../src/base/On.ts","../src/base/Void.ts","../src/components/Map.ts","../src/components/PrimitiveSource.ts","../src/components/Sequence.ts","../src/components/Stream.ts"],"sourcesContent":["import { DataType } from \"../types\";\n\ntype ExtractTypeS<T> = T extends DataType<infer U> ? U : never;\n\nexport type ExtractTypesFromArrayS<T extends DataType<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 DataType[]>(\n ...theInfos: T\n): DataType<ExtractTypesFromArrayS<T>> => {\n const keysKnown = new Set<string>(Object.keys(theInfos));\n const keysFilled = new Set<string>();\n\n return (u) => {\n const result: Record<string, unknown> = {};\n\n Object.entries(theInfos).forEach(([key, info]) => {\n keysKnown.add(key);\n info((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 { DataType } 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: DataType<T>[]): DataType<T> => {\n return (u) => {\n infos.forEach((info) => {\n info(u);\n });\n };\n};\n","import { DataType, ValueType } 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 baseSrc: DataType<T>,\n applier: ValueType<[T], R>,\n): DataType<R> => {\n return (u) => {\n baseSrc((v) => {\n u(applier(v));\n });\n };\n};\n","import { DataTypeValue } from \"src/types/DataType\";\nimport { DataType } 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 DataType[]>(...infos: T): Last<T> => {\n return <Last<T>>((u) => {\n let lastValue: DataTypeValue<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((v) => {\n if (!nextI) {\n lastValue = v as DataTypeValue<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 { DataType, DataUserType } 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 baseSrc: DataType<T>,\n applier: (executor: DataUserType<T>) => DataUserType<T>,\n): DataType<T> => {\n return (u) => {\n baseSrc(\n applier((v) => {\n u(v);\n }),\n );\n };\n};\n","import { DataType, ValueType } 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 baseSrc: DataType<T>,\n predicate: ValueType<[T], boolean>,\n defaultValue?: T,\n): DataType<T> => {\n return (u) => {\n baseSrc((v) => {\n if (predicate(v)) {\n u(v);\n } else if (defaultValue !== undefined) {\n u(defaultValue);\n }\n });\n };\n};\n","import { DataTypeDestroyable } from \"src/types/DataType\";\nimport { DataType, DataUserType } 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 emitterSrc: DataType<any>,\n eventNameSrc: DataType<string>,\n subscribeMethodSrc: DataType<string>,\n unsubscribeMethodSrc?: DataType<string>,\n): DataTypeDestroyable<T> => {\n let lastU: DataUserType<T> | null = null;\n const handler = (v: T) => {\n if (lastU) {\n lastU(v);\n }\n };\n return (u) => {\n lastU = u;\n const a = all(emitterSrc, eventNameSrc, subscribeMethodSrc);\n a(([emitter, eventName, subscribe]) => {\n if (!emitter?.[subscribe]) {\n return;\n }\n emitter[subscribe](eventName, handler);\n });\n\n return () => {\n lastU = null;\n if (!unsubscribeMethodSrc) {\n return;\n }\n const a = all(emitterSrc, eventNameSrc, unsubscribeMethodSrc);\n a(([emitter, eventName, unsubscribe]) => {\n emitter[unsubscribe](eventName, handler);\n });\n };\n };\n};\n","import { DataType, DataUserType } 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?: DataUserType,\n): DataType<T> => {\n return (u) => {\n p.then((v) => {\n u(v);\n }).catch((e) => {\n errorOwner?.(e);\n });\n };\n};\n","export const isFilled = <T>(value?: T): value is T => {\n return value !== undefined && value !== null;\n};\n","import { DataUserType } 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<DataUserType<T>>;\n private innerOwner: DataUserType<T>;\n\n public constructor() {\n this.owners = new Set<DataUserType<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: DataUserType<T>): boolean {\n return this.owners.has(owner);\n }\n\n public add(owner: DataUserType<T>) {\n this.owners.add(owner);\n return this;\n }\n\n public remove(g: DataUserType<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 { DataUserType, 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: DataUserType<T> | null = null;\n const notify = (v?: T) => {\n if (isFilled(v) && lateUser) {\n lateUser(v);\n }\n };\n\n return {\n value: (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 give: (v) => {\n notify(v);\n },\n };\n};\n","import { DataType } 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>(baseSrc: DataType<T>): DataType<T> => {\n return (u) => {\n let isFilled = false;\n baseSrc((v) => {\n if (!isFilled) {\n isFilled = true;\n u(v);\n }\n });\n };\n};\n","import { DataType, 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 baseSrc: DataType<T>,\n stateless = false,\n): SourceType<T> & { pool: () => OwnerPool<T> } & DestroyableType => {\n const ownersPool = new OwnerPool<T>();\n let lastValue: T | undefined;\n\n const calls = late();\n once(calls.value)(() => {\n baseSrc((v) => {\n ownersPool.owner()(v);\n lastValue = v;\n });\n });\n\n return {\n value: (u) => {\n calls.give(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 give: (value: T) => {\n lastValue = value;\n ownersPool.owner()(value);\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 baseSrc: SourceType<T>,\n stateless = false,\n): SourceType<T> => {\n const sharedSrc = shared(baseSrc.value, stateless);\n\n return {\n value: (u) => {\n sharedSrc.value(u);\n },\n give: (v) => {\n baseSrc.give(v);\n },\n };\n};\n","import { late } from \"../components/Late\";\nimport { sharedSource } from \"../components/SharedSource\";\nimport { SourceType } from \"../types\";\n\nexport const lateShared = <T>(theValue?: T): SourceType<T> => {\n const src = sharedSource(late(theValue));\n return {\n value: src.value,\n give: src.give,\n };\n};\n","import { DataType, ValueType } from \"../types\";\n\n/**\n * Lazy with applied function to its results\n */\nexport const lazyApplied = <T>(\n baseLazy: ValueType<any[], DataType>,\n applier: (i: DataType) => DataType<T>,\n): ValueType<DataType[], DataType<T>> => {\n return (...args) => {\n return applier(baseLazy(...args));\n };\n};\n","import { DataType, ValueType } from \"../types\";\n\nexport const lazyArgs = (\n baseLazy: ValueType<any[], DataType>,\n args: unknown[],\n startFromArgIndex: number = 0,\n) => {\n return (...runArgs: any[]) => {\n return baseLazy(...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 { DestroyableType, DestructorType, ValueType } from \"../types\";\n\n/**\n * Lazy what can be destroyed\n */\nexport const lazyDestroyable = (\n baseLazy: ValueType<any[], DestroyableType>,\n): { get: ValueType<any[], DestroyableType>; destroy: DestructorType } => {\n const instances: DestroyableType[] = [];\n return {\n get: (...args) => {\n const inst = baseLazy(...args);\n instances.push(inst);\n return inst;\n },\n destroy: () => {\n instances.forEach((i) => i.destroy());\n },\n };\n};\n","import { DataType } from \"../types\";\n\nexport const of =\n <T>(v: T): DataType<T> =>\n (u) =>\n u(v);\n","import { DataType, DataUserType } from \"../types\";\n\n/**\n * Run data with user\n */\nexport const on = <T>(src: DataType<T>, user: DataUserType<T>) => src(user);\n","import { DataUserType } from \"../types\";\n\n/**\n * Silent user\n */\nexport const _void = (): DataUserType => () => {};\n","import { DataType, ValueType } 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 baseSrc: DataType<T[]>,\n targetSrc: ValueType<any[], DataType<TG>>,\n): DataType<TG[]> => {\n return (u) => {\n baseSrc((v) => {\n const infos: DataType<TG>[] = [];\n v.forEach((val) => {\n let valInfo: DataType<T> | T = val;\n if (typeof valInfo !== \"function\") {\n valInfo = of(valInfo);\n }\n const info = targetSrc(valInfo);\n infos.push(info);\n });\n const allI = all(...infos);\n allI(u);\n });\n };\n};\n","import { DataType } from \"../types\";\n\nexport const primitive = <T>(\n baseSrc: DataType<T>,\n theValue: T | null = null,\n) => {\n baseSrc((v) => {\n theValue = v;\n });\n\n return {\n [Symbol.toPrimitive]() {\n return theValue;\n },\n primitive() {\n return theValue;\n },\n };\n};\n","import { DataType } 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>(baseSrc: DataType<T>): DataType<T[]> => {\n return (u) => {\n const result: T[] = [];\n baseSrc((v) => {\n result.push(v);\n u(result);\n });\n };\n};\n","import { DataType } 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>(baseSrc: DataType<T[]>): DataType<T> => {\n return (u) => {\n baseSrc((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","baseSrc","applier","chain","lastValue","handleI","index","nextI","executorApplied","filtered","predicate","defaultValue","fromEvent","emitterSrc","eventNameSrc","subscribeMethodSrc","unsubscribeMethodSrc","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","Error","give","once","shared","stateless","ownersPool","calls","pool","sharedSource","sharedSrc","lateShared","theValue","src","lazyApplied","baseLazy","args","lazyArgs","startFromArgIndex","runArgs","arr1","arr2","slice","length","push","concat","mergeAtIndex","lazyDestroyable","instances","get","inst","i","of","on","user","_void","map","targetSrc","val","valInfo","allI","primitive","Symbol","toPrimitive","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/LazyApplied.ts","../src/components/LazyArgs.ts","../src/components/LazyDestroyable.ts","../src/base/Of.ts","../src/base/On.ts","../src/base/Void.ts","../src/base/Destructor.ts","../src/components/Map.ts","../src/components/PrimitiveSource.ts","../src/components/Sequence.ts","../src/components/Stream.ts"],"sourcesContent":["import { DataType } from \"../types\";\n\ntype ExtractTypeS<T> = T extends DataType<infer U> ? U : never;\n\nexport type ExtractTypesFromArrayS<T extends DataType<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 DataType[]>(\n ...theInfos: T\n): DataType<ExtractTypesFromArrayS<T>> => {\n const keysKnown = new Set<string>(Object.keys(theInfos));\n const keysFilled = new Set<string>();\n\n return (u) => {\n const result: Record<string, unknown> = {};\n\n Object.entries(theInfos).forEach(([key, info]) => {\n keysKnown.add(key);\n info((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 { DataType } 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: DataType<T>[]): DataType<T> => {\n return (u) => {\n infos.forEach((info) => {\n info(u);\n });\n };\n};\n","import { DataType, ValueType } 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 baseSrc: DataType<T>,\n applier: ValueType<[T], R>,\n): DataType<R> => {\n return (u) => {\n baseSrc((v) => {\n u(applier(v));\n });\n };\n};\n","import { DataTypeValue } from \"src/types/DataType\";\nimport { DataType } 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 DataType[]>(...infos: T): Last<T> => {\n return <Last<T>>((u) => {\n let lastValue: DataTypeValue<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((v) => {\n if (!nextI) {\n lastValue = v as DataTypeValue<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 { DataType, DataUserType } 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 baseSrc: DataType<T>,\n applier: (executor: DataUserType<T>) => DataUserType<T>,\n): DataType<T> => {\n return (u) => {\n baseSrc(\n applier((v) => {\n u(v);\n }),\n );\n };\n};\n","import { DataType, ValueType } 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 baseSrc: DataType<T>,\n predicate: ValueType<[T], boolean>,\n defaultValue?: T,\n): DataType<T> => {\n return (u) => {\n baseSrc((v) => {\n if (predicate(v)) {\n u(v);\n } else if (defaultValue !== undefined) {\n u(defaultValue);\n }\n });\n };\n};\n","import { DataTypeDestroyable } from \"src/types/DataType\";\nimport { DataType, DataUserType } 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 emitterSrc: DataType<any>,\n eventNameSrc: DataType<string>,\n subscribeMethodSrc: DataType<string>,\n unsubscribeMethodSrc?: DataType<string>,\n): DataTypeDestroyable<T> => {\n let lastU: DataUserType<T> | null = null;\n const handler = (v: T) => {\n if (lastU) {\n lastU(v);\n }\n };\n return (u) => {\n lastU = u;\n const a = all(emitterSrc, eventNameSrc, subscribeMethodSrc);\n a(([emitter, eventName, subscribe]) => {\n if (!emitter?.[subscribe]) {\n return;\n }\n emitter[subscribe](eventName, handler);\n });\n\n return () => {\n lastU = null;\n if (!unsubscribeMethodSrc) {\n return;\n }\n const a = all(emitterSrc, eventNameSrc, unsubscribeMethodSrc);\n a(([emitter, eventName, unsubscribe]) => {\n emitter[unsubscribe](eventName, handler);\n });\n };\n };\n};\n","import { DataType, DataUserType } 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?: DataUserType,\n): DataType<T> => {\n return (u) => {\n p.then((v) => {\n u(v);\n }).catch((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 { DataUserType } 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<DataUserType<T>>;\n private innerOwner: DataUserType<T>;\n\n public constructor() {\n this.owners = new Set<DataUserType<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: DataUserType<T>): boolean {\n return this.owners.has(owner);\n }\n\n public add(owner: DataUserType<T>) {\n this.owners.add(owner);\n return this;\n }\n\n public remove(g: DataUserType<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 { DataUserType, 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: DataUserType<T> | null = null;\n const notify = (v?: T) => {\n if (isFilled(v) && lateUser) {\n lateUser(v);\n }\n };\n\n return {\n value: (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 give: (v) => {\n notify(v);\n },\n };\n};\n","import { DataType } 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>(baseSrc: DataType<T>): DataType<T> => {\n return (u) => {\n let isFilled = false;\n baseSrc((v) => {\n if (!isFilled) {\n isFilled = true;\n u(v);\n }\n });\n };\n};\n","import { DataType, 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 baseSrc: DataType<T>,\n stateless = false,\n): SourceType<T> & { pool: () => OwnerPool<T> } & DestroyableType => {\n const ownersPool = new OwnerPool<T>();\n let lastValue: T | undefined;\n\n const calls = late();\n once(calls.value)(() => {\n baseSrc((v) => {\n ownersPool.owner()(v);\n lastValue = v;\n });\n });\n\n return {\n value: (u) => {\n calls.give(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 give: (value: T) => {\n lastValue = value;\n ownersPool.owner()(value);\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 baseSrc: SourceType<T>,\n stateless = false,\n): SourceType<T> => {\n const sharedSrc = shared(baseSrc.value, stateless);\n\n return {\n value: (u) => {\n sharedSrc.value(u);\n },\n give: (v) => {\n baseSrc.give(v);\n },\n };\n};\n","import { late } from \"../components/Late\";\nimport { sharedSource } from \"../components/SharedSource\";\nimport { SourceType } from \"../types\";\n\nexport const lateShared = <T>(theValue?: T): SourceType<T> => {\n const src = sharedSource(late(theValue));\n return {\n value: src.value,\n give: src.give,\n };\n};\n","import { DataType, ValueType } from \"../types\";\n\n/**\n * Lazy with applied function to its results\n */\nexport const lazyApplied = <T>(\n baseLazy: ValueType<any[], DataType>,\n applier: (i: DataType) => DataType<T>,\n): ValueType<DataType[], DataType<T>> => {\n return (...args) => {\n return applier(baseLazy(...args));\n };\n};\n","import { DataType, ValueType } from \"../types\";\n\nexport const lazyArgs = (\n baseLazy: ValueType<any[], DataType>,\n args: unknown[],\n startFromArgIndex: number = 0,\n) => {\n return (...runArgs: any[]) => {\n return baseLazy(...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 { DestroyableType, DestructorType, ValueType } from \"../types\";\n\n/**\n * Lazy what can be destroyed\n */\nexport const lazyDestroyable = (\n baseLazy: ValueType<any[], DestroyableType>,\n): { get: ValueType<any[], DestroyableType>; destroy: DestructorType } => {\n const instances: DestroyableType[] = [];\n return {\n get: (...args) => {\n const inst = baseLazy(...args);\n instances.push(inst);\n return inst;\n },\n destroy: () => {\n instances.forEach((i) => i.destroy());\n },\n };\n};\n","import { DataType } from \"../types\";\n\nexport const of =\n <T>(v: T): DataType<T> =>\n (u) =>\n u(v);\n","import { DataType, DataUserType } from \"../types\";\n\n/**\n * Run data with user\n */\nexport const on = <T>(src: DataType<T>, user: DataUserType<T>) => src(user);\n","import { DataUserType } from \"../types\";\n\n/**\n * Silent user\n */\nexport const _void = (): DataUserType => () => {};\n","import { DataType, DataUserType, DestructorType } from \"src/types\";\n\nexport const destructor =\n <T>(\n src: DataType<T>,\n destructorUser?: DataUserType<DestructorType>,\n ): DataType<T> =>\n (u) => {\n const mbDestructor = src(u);\n if (mbDestructor && destructorUser) {\n destructorUser(mbDestructor);\n }\n return () => {\n mbDestructor?.();\n };\n };\n","import { DataType, ValueType } 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 baseSrc: DataType<T[]>,\n targetSrc: ValueType<any[], DataType<TG>>,\n): DataType<TG[]> => {\n return (u) => {\n baseSrc((v) => {\n const infos: DataType<TG>[] = [];\n v.forEach((val) => {\n let valInfo: DataType<T> | T = val;\n if (typeof valInfo !== \"function\") {\n valInfo = of(valInfo);\n }\n const info = targetSrc(valInfo);\n infos.push(info);\n });\n const allI = all(...infos);\n allI(u);\n });\n };\n};\n","import { DataType } from \"../types\";\n\nexport const primitive = <T>(\n baseSrc: DataType<T>,\n theValue: T | null = null,\n) => {\n baseSrc((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 { DataType } 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>(baseSrc: DataType<T>): DataType<T[]> => {\n return (u) => {\n const result: T[] = [];\n baseSrc((v) => {\n result.push(v);\n u(result);\n });\n };\n};\n","import { DataType } 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>(baseSrc: DataType<T[]>): DataType<T> => {\n return (u) => {\n baseSrc((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","baseSrc","applier","chain","lastValue","handleI","index","nextI","executorApplied","filtered","predicate","defaultValue","fromEvent","emitterSrc","eventNameSrc","subscribeMethodSrc","unsubscribeMethodSrc","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","Error","give","once","shared","stateless","ownersPool","calls","pool","sharedSource","sharedSrc","lateShared","theValue","src","lazyApplied","baseLazy","args","lazyArgs","startFromArgIndex","runArgs","arr1","arr2","slice","length","push","concat","mergeAtIndex","lazyDestroyable","instances","get","inst","i","of","on","user","_void","destructor","destructorUser","mbDestructor","map","targetSrc","val","valInfo","allI","primitive","Symbol","toPrimitive","primitiveWithException","sequence","stream","cv"],"mappings":"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"}
@@ -288,6 +288,16 @@ const on = (src, user) => src(user);
288
288
  const _void = () => () => {
289
289
  };
290
290
 
291
+ const destructor = (src, destructorUser) => (u) => {
292
+ const mbDestructor = src(u);
293
+ if (mbDestructor && destructorUser) {
294
+ destructorUser(mbDestructor);
295
+ }
296
+ return () => {
297
+ mbDestructor?.();
298
+ };
299
+ };
300
+
291
301
  const map = (baseSrc, targetSrc) => {
292
302
  return (u) => {
293
303
  baseSrc((v) => {
@@ -316,6 +326,12 @@ const primitive = (baseSrc, theValue = null) => {
316
326
  },
317
327
  primitive() {
318
328
  return theValue;
329
+ },
330
+ primitiveWithException() {
331
+ if (theValue === null) {
332
+ throw new Error("Primitive value is null");
333
+ }
334
+ return theValue;
319
335
  }
320
336
  };
321
337
  };
@@ -340,5 +356,5 @@ const stream = (baseSrc) => {
340
356
  };
341
357
  };
342
358
 
343
- export { OwnerPool, _void, all, any, applied, chain, executorApplied, filtered, fromEvent, fromPromise, isFilled, late, lateShared, lazyApplied, lazyArgs, lazyDestroyable, map, of, on, once, primitive, sequence, shared, sharedSource, stream };
359
+ export { OwnerPool, _void, all, any, applied, chain, destructor, executorApplied, filtered, fromEvent, fromPromise, isFilled, late, lateShared, lazyApplied, lazyArgs, lazyDestroyable, map, of, on, once, primitive, sequence, shared, sharedSource, stream };
344
360
  //# 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/LazyApplied.ts","../src/components/LazyArgs.ts","../src/components/LazyDestroyable.ts","../src/base/Of.ts","../src/base/On.ts","../src/base/Void.ts","../src/components/Map.ts","../src/components/PrimitiveSource.ts","../src/components/Sequence.ts","../src/components/Stream.ts"],"sourcesContent":["import { DataType } from \"../types\";\n\ntype ExtractTypeS<T> = T extends DataType<infer U> ? U : never;\n\nexport type ExtractTypesFromArrayS<T extends DataType<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 DataType[]>(\n ...theInfos: T\n): DataType<ExtractTypesFromArrayS<T>> => {\n const keysKnown = new Set<string>(Object.keys(theInfos));\n const keysFilled = new Set<string>();\n\n return (u) => {\n const result: Record<string, unknown> = {};\n\n Object.entries(theInfos).forEach(([key, info]) => {\n keysKnown.add(key);\n info((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 { DataType } 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: DataType<T>[]): DataType<T> => {\n return (u) => {\n infos.forEach((info) => {\n info(u);\n });\n };\n};\n","import { DataType, ValueType } 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 baseSrc: DataType<T>,\n applier: ValueType<[T], R>,\n): DataType<R> => {\n return (u) => {\n baseSrc((v) => {\n u(applier(v));\n });\n };\n};\n","import { DataTypeValue } from \"src/types/DataType\";\nimport { DataType } 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 DataType[]>(...infos: T): Last<T> => {\n return <Last<T>>((u) => {\n let lastValue: DataTypeValue<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((v) => {\n if (!nextI) {\n lastValue = v as DataTypeValue<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 { DataType, DataUserType } 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 baseSrc: DataType<T>,\n applier: (executor: DataUserType<T>) => DataUserType<T>,\n): DataType<T> => {\n return (u) => {\n baseSrc(\n applier((v) => {\n u(v);\n }),\n );\n };\n};\n","import { DataType, ValueType } 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 baseSrc: DataType<T>,\n predicate: ValueType<[T], boolean>,\n defaultValue?: T,\n): DataType<T> => {\n return (u) => {\n baseSrc((v) => {\n if (predicate(v)) {\n u(v);\n } else if (defaultValue !== undefined) {\n u(defaultValue);\n }\n });\n };\n};\n","import { DataTypeDestroyable } from \"src/types/DataType\";\nimport { DataType, DataUserType } 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 emitterSrc: DataType<any>,\n eventNameSrc: DataType<string>,\n subscribeMethodSrc: DataType<string>,\n unsubscribeMethodSrc?: DataType<string>,\n): DataTypeDestroyable<T> => {\n let lastU: DataUserType<T> | null = null;\n const handler = (v: T) => {\n if (lastU) {\n lastU(v);\n }\n };\n return (u) => {\n lastU = u;\n const a = all(emitterSrc, eventNameSrc, subscribeMethodSrc);\n a(([emitter, eventName, subscribe]) => {\n if (!emitter?.[subscribe]) {\n return;\n }\n emitter[subscribe](eventName, handler);\n });\n\n return () => {\n lastU = null;\n if (!unsubscribeMethodSrc) {\n return;\n }\n const a = all(emitterSrc, eventNameSrc, unsubscribeMethodSrc);\n a(([emitter, eventName, unsubscribe]) => {\n emitter[unsubscribe](eventName, handler);\n });\n };\n };\n};\n","import { DataType, DataUserType } 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?: DataUserType,\n): DataType<T> => {\n return (u) => {\n p.then((v) => {\n u(v);\n }).catch((e) => {\n errorOwner?.(e);\n });\n };\n};\n","export const isFilled = <T>(value?: T): value is T => {\n return value !== undefined && value !== null;\n};\n","import { DataUserType } 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<DataUserType<T>>;\n private innerOwner: DataUserType<T>;\n\n public constructor() {\n this.owners = new Set<DataUserType<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: DataUserType<T>): boolean {\n return this.owners.has(owner);\n }\n\n public add(owner: DataUserType<T>) {\n this.owners.add(owner);\n return this;\n }\n\n public remove(g: DataUserType<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 { DataUserType, 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: DataUserType<T> | null = null;\n const notify = (v?: T) => {\n if (isFilled(v) && lateUser) {\n lateUser(v);\n }\n };\n\n return {\n value: (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 give: (v) => {\n notify(v);\n },\n };\n};\n","import { DataType } 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>(baseSrc: DataType<T>): DataType<T> => {\n return (u) => {\n let isFilled = false;\n baseSrc((v) => {\n if (!isFilled) {\n isFilled = true;\n u(v);\n }\n });\n };\n};\n","import { DataType, 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 baseSrc: DataType<T>,\n stateless = false,\n): SourceType<T> & { pool: () => OwnerPool<T> } & DestroyableType => {\n const ownersPool = new OwnerPool<T>();\n let lastValue: T | undefined;\n\n const calls = late();\n once(calls.value)(() => {\n baseSrc((v) => {\n ownersPool.owner()(v);\n lastValue = v;\n });\n });\n\n return {\n value: (u) => {\n calls.give(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 give: (value: T) => {\n lastValue = value;\n ownersPool.owner()(value);\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 baseSrc: SourceType<T>,\n stateless = false,\n): SourceType<T> => {\n const sharedSrc = shared(baseSrc.value, stateless);\n\n return {\n value: (u) => {\n sharedSrc.value(u);\n },\n give: (v) => {\n baseSrc.give(v);\n },\n };\n};\n","import { late } from \"../components/Late\";\nimport { sharedSource } from \"../components/SharedSource\";\nimport { SourceType } from \"../types\";\n\nexport const lateShared = <T>(theValue?: T): SourceType<T> => {\n const src = sharedSource(late(theValue));\n return {\n value: src.value,\n give: src.give,\n };\n};\n","import { DataType, ValueType } from \"../types\";\n\n/**\n * Lazy with applied function to its results\n */\nexport const lazyApplied = <T>(\n baseLazy: ValueType<any[], DataType>,\n applier: (i: DataType) => DataType<T>,\n): ValueType<DataType[], DataType<T>> => {\n return (...args) => {\n return applier(baseLazy(...args));\n };\n};\n","import { DataType, ValueType } from \"../types\";\n\nexport const lazyArgs = (\n baseLazy: ValueType<any[], DataType>,\n args: unknown[],\n startFromArgIndex: number = 0,\n) => {\n return (...runArgs: any[]) => {\n return baseLazy(...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 { DestroyableType, DestructorType, ValueType } from \"../types\";\n\n/**\n * Lazy what can be destroyed\n */\nexport const lazyDestroyable = (\n baseLazy: ValueType<any[], DestroyableType>,\n): { get: ValueType<any[], DestroyableType>; destroy: DestructorType } => {\n const instances: DestroyableType[] = [];\n return {\n get: (...args) => {\n const inst = baseLazy(...args);\n instances.push(inst);\n return inst;\n },\n destroy: () => {\n instances.forEach((i) => i.destroy());\n },\n };\n};\n","import { DataType } from \"../types\";\n\nexport const of =\n <T>(v: T): DataType<T> =>\n (u) =>\n u(v);\n","import { DataType, DataUserType } from \"../types\";\n\n/**\n * Run data with user\n */\nexport const on = <T>(src: DataType<T>, user: DataUserType<T>) => src(user);\n","import { DataUserType } from \"../types\";\n\n/**\n * Silent user\n */\nexport const _void = (): DataUserType => () => {};\n","import { DataType, ValueType } 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 baseSrc: DataType<T[]>,\n targetSrc: ValueType<any[], DataType<TG>>,\n): DataType<TG[]> => {\n return (u) => {\n baseSrc((v) => {\n const infos: DataType<TG>[] = [];\n v.forEach((val) => {\n let valInfo: DataType<T> | T = val;\n if (typeof valInfo !== \"function\") {\n valInfo = of(valInfo);\n }\n const info = targetSrc(valInfo);\n infos.push(info);\n });\n const allI = all(...infos);\n allI(u);\n });\n };\n};\n","import { DataType } from \"../types\";\n\nexport const primitive = <T>(\n baseSrc: DataType<T>,\n theValue: T | null = null,\n) => {\n baseSrc((v) => {\n theValue = v;\n });\n\n return {\n [Symbol.toPrimitive]() {\n return theValue;\n },\n primitive() {\n return theValue;\n },\n };\n};\n","import { DataType } 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>(baseSrc: DataType<T>): DataType<T[]> => {\n return (u) => {\n const result: T[] = [];\n baseSrc((v) => {\n result.push(v);\n u(result);\n });\n };\n};\n","import { DataType } 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>(baseSrc: DataType<T[]>): DataType<T> => {\n return (u) => {\n baseSrc((v) => {\n v.forEach((cv) => {\n u(cv);\n });\n });\n };\n};\n"],"names":["a","v"],"mappings":"AAQA,MAAM,WAAA,GAAc,CAAC,UAAA,EAAyB,SAA2B,KAAA;AACvE,EAAA,OAAO,UAAW,CAAA,IAAA,GAAO,CAAK,IAAA,UAAA,CAAW,SAAS,SAAU,CAAA,IAAA;AAC9D,CAAA;AAOa,MAAA,GAAA,GAAM,IACd,QACqC,KAAA;AACxC,EAAA,MAAM,YAAY,IAAI,GAAA,CAAY,MAAO,CAAA,IAAA,CAAK,QAAQ,CAAC,CAAA;AACvD,EAAM,MAAA,UAAA,uBAAiB,GAAY,EAAA;AAEnC,EAAA,OAAO,CAAC,CAAM,KAAA;AACZ,IAAA,MAAM,SAAkC,EAAC;AAEzC,IAAO,MAAA,CAAA,OAAA,CAAQ,QAAQ,CAAE,CAAA,OAAA,CAAQ,CAAC,CAAC,GAAA,EAAK,IAAI,CAAM,KAAA;AAChD,MAAA,SAAA,CAAU,IAAI,GAAG,CAAA;AACjB,MAAA,IAAA,CAAK,CAAC,CAAM,KAAA;AACV,QAAA,UAAA,CAAW,IAAI,GAAG,CAAA;AAClB,QAAA,MAAA,CAAO,GAAG,CAAI,GAAA,CAAA;AACd,QAAI,IAAA,WAAA,CAAY,UAAY,EAAA,SAAS,CAAG,EAAA;AACtC,UAAE,CAAA,CAAA,MAAA,CAAO,MAAO,CAAA,MAAM,CAA8B,CAAA;AAAA;AACtD,OACD,CAAA;AAAA,KACF,CAAA;AAAA,GACH;AACF;;AC9Ba,MAAA,GAAA,GAAM,IAAO,KAAsC,KAAA;AAC9D,EAAA,OAAO,CAAC,CAAM,KAAA;AACZ,IAAM,KAAA,CAAA,OAAA,CAAQ,CAAC,IAAS,KAAA;AACtB,MAAA,IAAA,CAAK,CAAC,CAAA;AAAA,KACP,CAAA;AAAA,GACH;AACF;;ACPa,MAAA,OAAA,GAAU,CACrB,OAAA,EACA,OACgB,KAAA;AAChB,EAAA,OAAO,CAAC,CAAM,KAAA;AACZ,IAAA,OAAA,CAAQ,CAAC,CAAM,KAAA;AACb,MAAE,CAAA,CAAA,OAAA,CAAQ,CAAC,CAAC,CAAA;AAAA,KACb,CAAA;AAAA,GACH;AACF;;ACHa,MAAA,KAAA,GAAQ,IAA0B,KAAsB,KAAA;AACnE,EAAA,OAAiB,CAAC,CAAM,KAAA;AACtB,IAAI,IAAA,SAAA;AAEJ,IAAM,MAAA,OAAA,GAAU,CAAC,KAAkB,KAAA;AACjC,MAAM,MAAA,IAAA,GAAO,MAAM,KAAK,CAAA;AACxB,MAAM,MAAA,KAAA,GAAQ,KAAM,CAAA,KAAA,GAAQ,CAAC,CAAA;AAE7B,MAAA,IAAA,CAAK,CAAC,CAAM,KAAA;AACV,QAAA,IAAI,CAAC,KAAO,EAAA;AACV,UAAY,SAAA,GAAA,CAAA;AAAA;AAGd,QAAA,IAAI,SAAW,EAAA;AACb,UAAA,CAAA,CAAE,SAAS,CAAA;AAAA;AAGb,QAAI,IAAA,KAAA,IAAS,CAAC,SAAW,EAAA;AACvB,UAAA,OAAA,CAAQ,QAAQ,CAAC,CAAA;AAAA;AACnB,OACD,CAAA;AAAA,KACH;AAEA,IAAA,OAAA,CAAQ,CAAC,CAAA;AAAA,GACX;AACF;;AC9Ba,MAAA,eAAA,GAAkB,CAC7B,OAAA,EACA,OACgB,KAAA;AAChB,EAAA,OAAO,CAAC,CAAM,KAAA;AACZ,IAAA,OAAA;AAAA,MACE,OAAA,CAAQ,CAAC,CAAM,KAAA;AACb,QAAA,CAAA,CAAE,CAAC,CAAA;AAAA,OACJ;AAAA,KACH;AAAA,GACF;AACF;;ACVO,MAAM,QAAW,GAAA,CACtB,OACA,EAAA,SAAA,EACA,YACgB,KAAA;AAChB,EAAA,OAAO,CAAC,CAAM,KAAA;AACZ,IAAA,OAAA,CAAQ,CAAC,CAAM,KAAA;AACb,MAAI,IAAA,SAAA,CAAU,CAAC,CAAG,EAAA;AAChB,QAAA,CAAA,CAAE,CAAC,CAAA;AAAA,OACL,MAAA,IAAW,iBAAiB,MAAW,EAAA;AACrC,QAAA,CAAA,CAAE,YAAY,CAAA;AAAA;AAChB,KACD,CAAA;AAAA,GACH;AACF;;ACbO,MAAM,SAAY,GAAA,CACvB,UACA,EAAA,YAAA,EACA,oBACA,oBAC2B,KAAA;AAC3B,EAAA,IAAI,KAAgC,GAAA,IAAA;AACpC,EAAM,MAAA,OAAA,GAAU,CAAC,CAAS,KAAA;AACxB,IAAA,IAAI,KAAO,EAAA;AACT,MAAA,KAAA,CAAM,CAAC,CAAA;AAAA;AACT,GACF;AACA,EAAA,OAAO,CAAC,CAAM,KAAA;AACZ,IAAQ,KAAA,GAAA,CAAA;AACR,IAAA,MAAM,CAAI,GAAA,GAAA,CAAI,UAAY,EAAA,YAAA,EAAc,kBAAkB,CAAA;AAC1D,IAAA,CAAA,CAAE,CAAC,CAAC,OAAS,EAAA,SAAA,EAAW,SAAS,CAAM,KAAA;AACrC,MAAI,IAAA,CAAC,OAAU,GAAA,SAAS,CAAG,EAAA;AACzB,QAAA;AAAA;AAEF,MAAQ,OAAA,CAAA,SAAS,CAAE,CAAA,SAAA,EAAW,OAAO,CAAA;AAAA,KACtC,CAAA;AAED,IAAA,OAAO,MAAM;AACX,MAAQ,KAAA,GAAA,IAAA;AACR,MAAA,IAAI,CAAC,oBAAsB,EAAA;AACzB,QAAA;AAAA;AAEF,MAAA,MAAMA,EAAI,GAAA,GAAA,CAAI,UAAY,EAAA,YAAA,EAAc,oBAAoB,CAAA;AAC5D,MAAAA,GAAE,CAAC,CAAC,OAAS,EAAA,SAAA,EAAW,WAAW,CAAM,KAAA;AACvC,QAAQ,OAAA,CAAA,WAAW,CAAE,CAAA,SAAA,EAAW,OAAO,CAAA;AAAA,OACxC,CAAA;AAAA,KACH;AAAA,GACF;AACF;;ACnCa,MAAA,WAAA,GAAc,CACzB,CAAA,EACA,UACgB,KAAA;AAChB,EAAA,OAAO,CAAC,CAAM,KAAA;AACZ,IAAE,CAAA,CAAA,IAAA,CAAK,CAAC,CAAM,KAAA;AACZ,MAAA,CAAA,CAAE,CAAC,CAAA;AAAA,KACJ,CAAA,CAAE,KAAM,CAAA,CAAC,CAAM,KAAA;AACd,MAAA,UAAA,GAAa,CAAC,CAAA;AAAA,KACf,CAAA;AAAA,GACH;AACF;;AClBa,MAAA,QAAA,GAAW,CAAI,KAA0B,KAAA;AACpD,EAAO,OAAA,KAAA,KAAU,UAAa,KAAU,KAAA,IAAA;AAC1C;;;;;ACKO,MAAM,SAAa,CAAA;AAAA,EAIjB,WAAc,GAAA;AAHrB,IAAQ,aAAA,CAAA,IAAA,EAAA,QAAA,CAAA;AACR,IAAQ,aAAA,CAAA,IAAA,EAAA,YAAA,CAAA;AAGN,IAAK,IAAA,CAAA,MAAA,uBAAa,GAAqB,EAAA;AACvC,IAAK,IAAA,CAAA,UAAA,GAAa,CAAC,CAAM,KAAA;AACvB,MAAK,IAAA,CAAA,MAAA,CAAO,OAAQ,CAAA,CAAC,CAAM,KAAA;AACzB,QAAA,CAAA,CAAE,CAAC,CAAA;AAAA,OACJ,CAAA;AAAA,KACH;AAAA;AACF,EAEO,KAAQ,GAAA;AACb,IAAA,OAAO,IAAK,CAAA,UAAA;AAAA;AACd,EAEO,IAAe,GAAA;AACpB,IAAA,OAAO,KAAK,MAAO,CAAA,IAAA;AAAA;AACrB,EAEO,IAAI,KAAiC,EAAA;AAC1C,IAAO,OAAA,IAAA,CAAK,MAAO,CAAA,GAAA,CAAI,KAAK,CAAA;AAAA;AAC9B,EAEO,IAAI,KAAwB,EAAA;AACjC,IAAK,IAAA,CAAA,MAAA,CAAO,IAAI,KAAK,CAAA;AACrB,IAAO,OAAA,IAAA;AAAA;AACT,EAEO,OAAO,CAAoB,EAAA;AAChC,IAAK,IAAA,CAAA,MAAA,CAAO,OAAO,CAAC,CAAA;AACpB,IAAO,OAAA,IAAA;AAAA;AACT,EAEO,OAAU,GAAA;AACf,IAAK,IAAA,CAAA,MAAA,CAAO,OAAQ,CAAA,CAAC,CAAM,KAAA;AACzB,MAAA,IAAA,CAAK,OAAO,CAAC,CAAA;AAAA,KACd,CAAA;AACD,IAAO,OAAA,IAAA;AAAA;AAEX;;ACvCa,MAAA,IAAA,GAAO,CAAI,CAAyB,KAAA;AAC/C,EAAA,IAAI,QAAmC,GAAA,IAAA;AACvC,EAAM,MAAA,MAAA,GAAS,CAACC,EAAU,KAAA;AACxB,IAAI,IAAA,QAAA,CAASA,EAAC,CAAA,IAAK,QAAU,EAAA;AAC3B,MAAA,QAAA,CAASA,EAAC,CAAA;AAAA;AACZ,GACF;AAEA,EAAO,OAAA;AAAA,IACL,KAAA,EAAO,CAAC,CAAM,KAAA;AACZ,MAAA,IAAI,QAAU,EAAA;AACZ,QAAA,MAAM,IAAI,KAAA;AAAA,UACR;AAAA,SACF;AAAA;AAGF,MAAW,QAAA,GAAA,CAAA;AACX,MAAA,MAAA,CAAO,CAAC,CAAA;AAAA,KACV;AAAA,IACA,IAAA,EAAM,CAACA,EAAM,KAAA;AACX,MAAA,MAAA,CAAOA,EAAC,CAAA;AAAA;AACV,GACF;AACF;;ACxBa,MAAA,IAAA,GAAO,CAAI,OAAsC,KAAA;AAC5D,EAAA,OAAO,CAAC,CAAM,KAAA;AACZ,IAAA,IAAI,QAAW,GAAA,KAAA;AACf,IAAA,OAAA,CAAQ,CAAC,CAAM,KAAA;AACb,MAAA,IAAI,CAAC,QAAU,EAAA;AACb,QAAW,QAAA,GAAA,IAAA;AACX,QAAA,CAAA,CAAE,CAAC,CAAA;AAAA;AACL,KACD,CAAA;AAAA,GACH;AACF;;ACRO,MAAM,MAAS,GAAA,CACpB,OACA,EAAA,SAAA,GAAY,KACuD,KAAA;AACnE,EAAM,MAAA,UAAA,GAAa,IAAI,SAAa,EAAA;AACpC,EAAI,IAAA,SAAA;AAEJ,EAAA,MAAM,QAAQ,IAAK,EAAA;AACnB,EAAK,IAAA,CAAA,KAAA,CAAM,KAAK,CAAA,CAAE,MAAM;AACtB,IAAA,OAAA,CAAQ,CAAC,CAAM,KAAA;AACb,MAAW,UAAA,CAAA,KAAA,GAAQ,CAAC,CAAA;AACpB,MAAY,SAAA,GAAA,CAAA;AAAA,KACb,CAAA;AAAA,GACF,CAAA;AAED,EAAO,OAAA;AAAA,IACL,KAAA,EAAO,CAAC,CAAM,KAAA;AACZ,MAAA,KAAA,CAAM,KAAK,CAAC,CAAA;AACZ,MAAI,IAAA,CAAC,aAAa,QAAS,CAAA,SAAS,KAAK,CAAC,UAAA,CAAW,GAAI,CAAA,CAAC,CAAG,EAAA;AAC3D,QAAA,CAAA,CAAE,SAAS,CAAA;AAAA;AAEb,MAAA,UAAA,CAAW,IAAI,CAAC,CAAA;AAChB,MAAA,OAAO,MAAM;AACX,QAAA,UAAA,CAAW,OAAO,CAAC,CAAA;AAAA,OACrB;AAAA,KACF;AAAA,IACA,IAAA,EAAM,CAAC,KAAa,KAAA;AAClB,MAAY,SAAA,GAAA,KAAA;AACZ,MAAW,UAAA,CAAA,KAAA,GAAQ,KAAK,CAAA;AAAA,KAC1B;AAAA,IACA,IAAO,GAAA;AACL,MAAO,OAAA,UAAA;AAAA,KACT;AAAA,IACA,OAAU,GAAA;AACR,MAAA,UAAA,CAAW,OAAQ,EAAA;AAAA;AACrB,GACF;AACF;;AC5CO,MAAM,YAAe,GAAA,CAC1B,OACA,EAAA,SAAA,GAAY,KACM,KAAA;AAClB,EAAA,MAAM,SAAY,GAAA,MAAA,CAAO,OAAQ,CAAA,KAAA,EAAO,SAAS,CAAA;AAEjD,EAAO,OAAA;AAAA,IACL,KAAA,EAAO,CAAC,CAAM,KAAA;AACZ,MAAA,SAAA,CAAU,MAAM,CAAC,CAAA;AAAA,KACnB;AAAA,IACA,IAAA,EAAM,CAAC,CAAM,KAAA;AACX,MAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA;AAChB,GACF;AACF;;ACba,MAAA,UAAA,GAAa,CAAI,QAAgC,KAAA;AAC5D,EAAA,MAAM,GAAM,GAAA,YAAA,CAAa,IAAK,CAAA,QAAQ,CAAC,CAAA;AACvC,EAAO,OAAA;AAAA,IACL,OAAO,GAAI,CAAA,KAAA;AAAA,IACX,MAAM,GAAI,CAAA;AAAA,GACZ;AACF;;ACLa,MAAA,WAAA,GAAc,CACzB,QAAA,EACA,OACuC,KAAA;AACvC,EAAA,OAAO,IAAI,IAAS,KAAA;AAClB,IAAA,OAAO,OAAQ,CAAA,QAAA,CAAS,GAAG,IAAI,CAAC,CAAA;AAAA,GAClC;AACF;;ACVO,MAAM,QAAW,GAAA,CACtB,QACA,EAAA,IAAA,EACA,oBAA4B,CACzB,KAAA;AACH,EAAA,OAAO,IAAI,OAAmB,KAAA;AAC5B,IAAA,OAAO,SAAS,GAAG,YAAA,CAAa,OAAS,EAAA,IAAA,EAAM,iBAAiB,CAAC,CAAA;AAAA,GACnE;AACF;AAEA,SAAS,YAAA,CAAa,IAAiB,EAAA,IAAA,EAAiB,KAAe,EAAA;AACrE,EAAA,MAAM,MAAS,GAAA,IAAA,CAAK,KAAM,CAAA,CAAA,EAAG,KAAK,CAAA;AAClC,EAAA,OAAO,MAAO,CAAA,MAAA,GAAS,KAAO,EAAA,MAAA,CAAO,KAAK,MAAS,CAAA;AACnD,EAAO,OAAA,MAAA,CAAO,OAAO,IAAI,CAAA;AAC3B;;ACXa,MAAA,eAAA,GAAkB,CAC7B,QACwE,KAAA;AACxE,EAAA,MAAM,YAA+B,EAAC;AACtC,EAAO,OAAA;AAAA,IACL,GAAA,EAAK,IAAI,IAAS,KAAA;AAChB,MAAM,MAAA,IAAA,GAAO,QAAS,CAAA,GAAG,IAAI,CAAA;AAC7B,MAAA,SAAA,CAAU,KAAK,IAAI,CAAA;AACnB,MAAO,OAAA,IAAA;AAAA,KACT;AAAA,IACA,SAAS,MAAM;AACb,MAAA,SAAA,CAAU,OAAQ,CAAA,CAAC,CAAM,KAAA,CAAA,CAAE,SAAS,CAAA;AAAA;AACtC,GACF;AACF;;ACjBO,MAAM,KACX,CAAI,CAAA,KACJ,CAAC,CAAA,KACC,EAAE,CAAC;;ACAA,MAAM,EAAK,GAAA,CAAI,GAAkB,EAAA,IAAA,KAA0B,IAAI,IAAI;;ACA7D,MAAA,KAAA,GAAQ,MAAoB,MAAM;AAAC;;ACInC,MAAA,GAAA,GAAM,CACjB,OAAA,EACA,SACmB,KAAA;AACnB,EAAA,OAAO,CAAC,CAAM,KAAA;AACZ,IAAA,OAAA,CAAQ,CAAC,CAAM,KAAA;AACb,MAAA,MAAM,QAAwB,EAAC;AAC/B,MAAE,CAAA,CAAA,OAAA,CAAQ,CAAC,GAAQ,KAAA;AACjB,QAAA,IAAI,OAA2B,GAAA,GAAA;AAC/B,QAAI,IAAA,OAAO,YAAY,UAAY,EAAA;AACjC,UAAA,OAAA,GAAU,GAAG,OAAO,CAAA;AAAA;AAEtB,QAAM,MAAA,IAAA,GAAO,UAAU,OAAO,CAAA;AAC9B,QAAA,KAAA,CAAM,KAAK,IAAI,CAAA;AAAA,OAChB,CAAA;AACD,MAAM,MAAA,IAAA,GAAO,GAAI,CAAA,GAAG,KAAK,CAAA;AACzB,MAAA,IAAA,CAAK,CAAC,CAAA;AAAA,KACP,CAAA;AAAA,GACH;AACF;;AC1BO,MAAM,SAAY,GAAA,CACvB,OACA,EAAA,QAAA,GAAqB,IAClB,KAAA;AACH,EAAA,OAAA,CAAQ,CAAC,CAAM,KAAA;AACb,IAAW,QAAA,GAAA,CAAA;AAAA,GACZ,CAAA;AAED,EAAO,OAAA;AAAA,IACL,CAAC,MAAO,CAAA,WAAW,CAAI,GAAA;AACrB,MAAO,OAAA,QAAA;AAAA,KACT;AAAA,IACA,SAAY,GAAA;AACV,MAAO,OAAA,QAAA;AAAA;AACT,GACF;AACF;;ACXa,MAAA,QAAA,GAAW,CAAI,OAAwC,KAAA;AAClE,EAAA,OAAO,CAAC,CAAM,KAAA;AACZ,IAAA,MAAM,SAAc,EAAC;AACrB,IAAA,OAAA,CAAQ,CAAC,CAAM,KAAA;AACb,MAAA,MAAA,CAAO,KAAK,CAAC,CAAA;AACb,MAAA,CAAA,CAAE,MAAM,CAAA;AAAA,KACT,CAAA;AAAA,GACH;AACF;;ACTa,MAAA,MAAA,GAAS,CAAI,OAAwC,KAAA;AAChE,EAAA,OAAO,CAAC,CAAM,KAAA;AACZ,IAAA,OAAA,CAAQ,CAAC,CAAM,KAAA;AACb,MAAE,CAAA,CAAA,OAAA,CAAQ,CAAC,EAAO,KAAA;AAChB,QAAA,CAAA,CAAE,EAAE,CAAA;AAAA,OACL,CAAA;AAAA,KACF,CAAA;AAAA,GACH;AACF;;;;"}
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/LazyApplied.ts","../src/components/LazyArgs.ts","../src/components/LazyDestroyable.ts","../src/base/Of.ts","../src/base/On.ts","../src/base/Void.ts","../src/base/Destructor.ts","../src/components/Map.ts","../src/components/PrimitiveSource.ts","../src/components/Sequence.ts","../src/components/Stream.ts"],"sourcesContent":["import { DataType } from \"../types\";\n\ntype ExtractTypeS<T> = T extends DataType<infer U> ? U : never;\n\nexport type ExtractTypesFromArrayS<T extends DataType<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 DataType[]>(\n ...theInfos: T\n): DataType<ExtractTypesFromArrayS<T>> => {\n const keysKnown = new Set<string>(Object.keys(theInfos));\n const keysFilled = new Set<string>();\n\n return (u) => {\n const result: Record<string, unknown> = {};\n\n Object.entries(theInfos).forEach(([key, info]) => {\n keysKnown.add(key);\n info((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 { DataType } 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: DataType<T>[]): DataType<T> => {\n return (u) => {\n infos.forEach((info) => {\n info(u);\n });\n };\n};\n","import { DataType, ValueType } 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 baseSrc: DataType<T>,\n applier: ValueType<[T], R>,\n): DataType<R> => {\n return (u) => {\n baseSrc((v) => {\n u(applier(v));\n });\n };\n};\n","import { DataTypeValue } from \"src/types/DataType\";\nimport { DataType } 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 DataType[]>(...infos: T): Last<T> => {\n return <Last<T>>((u) => {\n let lastValue: DataTypeValue<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((v) => {\n if (!nextI) {\n lastValue = v as DataTypeValue<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 { DataType, DataUserType } 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 baseSrc: DataType<T>,\n applier: (executor: DataUserType<T>) => DataUserType<T>,\n): DataType<T> => {\n return (u) => {\n baseSrc(\n applier((v) => {\n u(v);\n }),\n );\n };\n};\n","import { DataType, ValueType } 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 baseSrc: DataType<T>,\n predicate: ValueType<[T], boolean>,\n defaultValue?: T,\n): DataType<T> => {\n return (u) => {\n baseSrc((v) => {\n if (predicate(v)) {\n u(v);\n } else if (defaultValue !== undefined) {\n u(defaultValue);\n }\n });\n };\n};\n","import { DataTypeDestroyable } from \"src/types/DataType\";\nimport { DataType, DataUserType } 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 emitterSrc: DataType<any>,\n eventNameSrc: DataType<string>,\n subscribeMethodSrc: DataType<string>,\n unsubscribeMethodSrc?: DataType<string>,\n): DataTypeDestroyable<T> => {\n let lastU: DataUserType<T> | null = null;\n const handler = (v: T) => {\n if (lastU) {\n lastU(v);\n }\n };\n return (u) => {\n lastU = u;\n const a = all(emitterSrc, eventNameSrc, subscribeMethodSrc);\n a(([emitter, eventName, subscribe]) => {\n if (!emitter?.[subscribe]) {\n return;\n }\n emitter[subscribe](eventName, handler);\n });\n\n return () => {\n lastU = null;\n if (!unsubscribeMethodSrc) {\n return;\n }\n const a = all(emitterSrc, eventNameSrc, unsubscribeMethodSrc);\n a(([emitter, eventName, unsubscribe]) => {\n emitter[unsubscribe](eventName, handler);\n });\n };\n };\n};\n","import { DataType, DataUserType } 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?: DataUserType,\n): DataType<T> => {\n return (u) => {\n p.then((v) => {\n u(v);\n }).catch((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 { DataUserType } 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<DataUserType<T>>;\n private innerOwner: DataUserType<T>;\n\n public constructor() {\n this.owners = new Set<DataUserType<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: DataUserType<T>): boolean {\n return this.owners.has(owner);\n }\n\n public add(owner: DataUserType<T>) {\n this.owners.add(owner);\n return this;\n }\n\n public remove(g: DataUserType<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 { DataUserType, 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: DataUserType<T> | null = null;\n const notify = (v?: T) => {\n if (isFilled(v) && lateUser) {\n lateUser(v);\n }\n };\n\n return {\n value: (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 give: (v) => {\n notify(v);\n },\n };\n};\n","import { DataType } 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>(baseSrc: DataType<T>): DataType<T> => {\n return (u) => {\n let isFilled = false;\n baseSrc((v) => {\n if (!isFilled) {\n isFilled = true;\n u(v);\n }\n });\n };\n};\n","import { DataType, 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 baseSrc: DataType<T>,\n stateless = false,\n): SourceType<T> & { pool: () => OwnerPool<T> } & DestroyableType => {\n const ownersPool = new OwnerPool<T>();\n let lastValue: T | undefined;\n\n const calls = late();\n once(calls.value)(() => {\n baseSrc((v) => {\n ownersPool.owner()(v);\n lastValue = v;\n });\n });\n\n return {\n value: (u) => {\n calls.give(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 give: (value: T) => {\n lastValue = value;\n ownersPool.owner()(value);\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 baseSrc: SourceType<T>,\n stateless = false,\n): SourceType<T> => {\n const sharedSrc = shared(baseSrc.value, stateless);\n\n return {\n value: (u) => {\n sharedSrc.value(u);\n },\n give: (v) => {\n baseSrc.give(v);\n },\n };\n};\n","import { late } from \"../components/Late\";\nimport { sharedSource } from \"../components/SharedSource\";\nimport { SourceType } from \"../types\";\n\nexport const lateShared = <T>(theValue?: T): SourceType<T> => {\n const src = sharedSource(late(theValue));\n return {\n value: src.value,\n give: src.give,\n };\n};\n","import { DataType, ValueType } from \"../types\";\n\n/**\n * Lazy with applied function to its results\n */\nexport const lazyApplied = <T>(\n baseLazy: ValueType<any[], DataType>,\n applier: (i: DataType) => DataType<T>,\n): ValueType<DataType[], DataType<T>> => {\n return (...args) => {\n return applier(baseLazy(...args));\n };\n};\n","import { DataType, ValueType } from \"../types\";\n\nexport const lazyArgs = (\n baseLazy: ValueType<any[], DataType>,\n args: unknown[],\n startFromArgIndex: number = 0,\n) => {\n return (...runArgs: any[]) => {\n return baseLazy(...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 { DestroyableType, DestructorType, ValueType } from \"../types\";\n\n/**\n * Lazy what can be destroyed\n */\nexport const lazyDestroyable = (\n baseLazy: ValueType<any[], DestroyableType>,\n): { get: ValueType<any[], DestroyableType>; destroy: DestructorType } => {\n const instances: DestroyableType[] = [];\n return {\n get: (...args) => {\n const inst = baseLazy(...args);\n instances.push(inst);\n return inst;\n },\n destroy: () => {\n instances.forEach((i) => i.destroy());\n },\n };\n};\n","import { DataType } from \"../types\";\n\nexport const of =\n <T>(v: T): DataType<T> =>\n (u) =>\n u(v);\n","import { DataType, DataUserType } from \"../types\";\n\n/**\n * Run data with user\n */\nexport const on = <T>(src: DataType<T>, user: DataUserType<T>) => src(user);\n","import { DataUserType } from \"../types\";\n\n/**\n * Silent user\n */\nexport const _void = (): DataUserType => () => {};\n","import { DataType, DataUserType, DestructorType } from \"src/types\";\n\nexport const destructor =\n <T>(\n src: DataType<T>,\n destructorUser?: DataUserType<DestructorType>,\n ): DataType<T> =>\n (u) => {\n const mbDestructor = src(u);\n if (mbDestructor && destructorUser) {\n destructorUser(mbDestructor);\n }\n return () => {\n mbDestructor?.();\n };\n };\n","import { DataType, ValueType } 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 baseSrc: DataType<T[]>,\n targetSrc: ValueType<any[], DataType<TG>>,\n): DataType<TG[]> => {\n return (u) => {\n baseSrc((v) => {\n const infos: DataType<TG>[] = [];\n v.forEach((val) => {\n let valInfo: DataType<T> | T = val;\n if (typeof valInfo !== \"function\") {\n valInfo = of(valInfo);\n }\n const info = targetSrc(valInfo);\n infos.push(info);\n });\n const allI = all(...infos);\n allI(u);\n });\n };\n};\n","import { DataType } from \"../types\";\n\nexport const primitive = <T>(\n baseSrc: DataType<T>,\n theValue: T | null = null,\n) => {\n baseSrc((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 { DataType } 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>(baseSrc: DataType<T>): DataType<T[]> => {\n return (u) => {\n const result: T[] = [];\n baseSrc((v) => {\n result.push(v);\n u(result);\n });\n };\n};\n","import { DataType } 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>(baseSrc: DataType<T[]>): DataType<T> => {\n return (u) => {\n baseSrc((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.91",
3
+ "version": "0.0.93",
4
4
  "description": "",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -39,6 +39,7 @@
39
39
  "eslint": "^9.12.0",
40
40
  "eslint-config-prettier": "^9.1.0",
41
41
  "eslint-plugin-prettier": "^5.2.1",
42
+ "expect-type": "^1.2.2",
42
43
  "husky": "^9.1.7",
43
44
  "jest-leak-detector": "^30.0.0",
44
45
  "prettier": "3.3.3",
@@ -0,0 +1,29 @@
1
+ import { describe, expect, test, vi } from "vitest";
2
+ import { destructor } from "../base/Destructor";
3
+ import { of } from "../base/Of";
4
+
5
+ describe("Destructor.test", () => {
6
+ test("Destructor always exists", () => {
7
+ const src = destructor(of("1"));
8
+ const user = vi.fn();
9
+ const d = src(user);
10
+
11
+ expect(user).toHaveBeenCalledWith("1");
12
+ expect(typeof d).toBe("function");
13
+ });
14
+
15
+ test("Destructor can be grabbed", () => {
16
+ const destructorUser = vi.fn();
17
+ const d = () => {};
18
+ d.theName = "destructor";
19
+ const src = destructor((user) => {
20
+ user("2");
21
+ return d;
22
+ }, destructorUser);
23
+ const user = vi.fn();
24
+ src(user);
25
+
26
+ expect(user).toHaveBeenCalledWith("2");
27
+ expect(destructorUser).toHaveBeenCalledWith(d);
28
+ });
29
+ });
@@ -0,0 +1,16 @@
1
+ import { DataType, DataUserType, DestructorType } from "src/types";
2
+
3
+ export const destructor =
4
+ <T>(
5
+ src: DataType<T>,
6
+ destructorUser?: DataUserType<DestructorType>,
7
+ ): DataType<T> =>
8
+ (u) => {
9
+ const mbDestructor = src(u);
10
+ if (mbDestructor && destructorUser) {
11
+ destructorUser(mbDestructor);
12
+ }
13
+ return () => {
14
+ mbDestructor?.();
15
+ };
16
+ };
@@ -0,0 +1,4 @@
1
+ "use strict";
2
+ exports.__esModule = true;
3
+ exports.destructor = void 0;
4
+ exports.destructor = function (src) { };
@@ -0,0 +1,4 @@
1
+ "use strict";
2
+ exports.__esModule = true;
3
+ exports.destructable = void 0;
4
+ exports.destructable = function () { };
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ exports.__esModule = true;
3
+ exports.destructor = void 0;
4
+ exports.destructor = function (src, destructorUser) {
5
+ return function (u) {
6
+ var mbDestructor = src(u);
7
+ if (mbDestructor && destructorUser) {
8
+ destructorUser(mbDestructor);
9
+ }
10
+ return function () {
11
+ mbDestructor === null || mbDestructor === void 0 ? void 0 : mbDestructor();
12
+ };
13
+ };
14
+ };
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+ exports.__esModule = true;
3
+ var vitest_1 = require("vitest");
4
+ var Destructor_1 = require("../base/Destructor");
5
+ var Of_1 = require("../base/Of");
6
+ vitest_1.describe("Destructor.test", function () {
7
+ vitest_1.test("Destructor always exists", function () {
8
+ var src = Destructor_1.destructor(Of_1.of("1"));
9
+ var user = vitest_1.vi.fn();
10
+ var d = src(user);
11
+ vitest_1.expect(user).toHaveBeenCalledWith("1");
12
+ vitest_1.expect(typeof d).toBe("function");
13
+ });
14
+ vitest_1.test("Destructor can be grabbed", function () {
15
+ var destructorUser = vitest_1.vi.fn();
16
+ var d = function () { };
17
+ d.theName = "destructor";
18
+ var src = Destructor_1.destructor(function (user) {
19
+ user("2");
20
+ return d;
21
+ }, destructorUser);
22
+ var user = vitest_1.vi.fn();
23
+ src(user);
24
+ vitest_1.expect(user).toHaveBeenCalledWith("2");
25
+ vitest_1.expect(destructorUser).toHaveBeenCalledWith(d);
26
+ });
27
+ });
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
5
+ }) : (function(o, m, k, k2) {
6
+ if (k2 === undefined) k2 = k;
7
+ o[k2] = m[k];
8
+ }));
9
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
10
+ for (var p in m) if (p !== "default" && !exports.hasOwnProperty(p)) __createBinding(exports, m, p);
11
+ };
12
+ exports.__esModule = true;
13
+ var Of_1 = require("./Of");
14
+ __createBinding(exports, Of_1, "of");
15
+ var On_1 = require("./On");
16
+ __createBinding(exports, On_1, "on");
17
+ var Void_1 = require("./Void");
18
+ __createBinding(exports, Void_1, "_void");
19
+ __exportStar(require("./Destructor"), exports);
package/src/base/index.ts CHANGED
@@ -1,3 +1,4 @@
1
1
  export { of } from "./Of";
2
2
  export { on } from "./On";
3
3
  export { _void } from "./Void";
4
+ export * from "./Destructor";
@@ -15,5 +15,11 @@ export const primitive = <T>(
15
15
  primitive() {
16
16
  return theValue;
17
17
  },
18
+ primitiveWithException() {
19
+ if (theValue === null) {
20
+ throw new Error("Primitive value is null");
21
+ }
22
+ return theValue;
23
+ },
18
24
  };
19
25
  };
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ exports.__esModule = true;
3
+ exports.isFilled = void 0;
4
+ exports.isFilled = function (value) {
5
+ return value !== undefined && value !== null;
6
+ };
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+ exports.__esModule = true;
3
+ var isFilled_1 = require("../helpers/isFilled");
4
+ var vitest_1 = require("vitest");
5
+ var expect_type_1 = require("expect-type");
6
+ vitest_1.test("isFilled.test", function () {
7
+ expect_type_1.expectTypeOf(isFilled_1.isFilled().guards.toBeString());
8
+ });
@@ -0,0 +1,7 @@
1
+ import { isFilled } from "../helpers/isFilled";
2
+ import { test } from "vitest";
3
+ import { expectTypeOf } from "expect-type";
4
+
5
+ test("isFilled.test", () => {
6
+ expectTypeOf(isFilled<string | null>).guards.toBeString();
7
+ });
@@ -1,3 +1,5 @@
1
- export const isFilled = <T>(value?: T): value is T => {
1
+ export const isFilled = <T>(
2
+ value?: T,
3
+ ): value is Exclude<T, null | undefined> => {
2
4
  return value !== undefined && value !== null;
3
5
  };