silentium 0.0.95 → 0.0.97
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +14 -0
- package/dist/silentium.cjs +20 -6
- package/dist/silentium.cjs.map +1 -1
- package/dist/silentium.d.ts +4 -1
- package/dist/silentium.js +20 -6
- package/dist/silentium.js.map +1 -1
- package/dist/silentium.min.js +1 -1
- package/dist/silentium.min.mjs +1 -1
- package/dist/silentium.min.mjs.map +1 -1
- package/dist/silentium.mjs +20 -6
- package/dist/silentium.mjs.map +1 -1
- package/package.json +1 -1
- package/src/base/Destructor.test.ts +2 -3
- package/src/base/Destructor.ts +25 -13
- package/src/base/dist/Destructor.js +20 -8
- package/src/base/dist/Destructor.test.js +2 -3
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.97](https://github.com/silentium-lab/silentium/compare/v0.0.96...v0.0.97) (2025-10-05)
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
### Bug Fixes
|
|
9
|
+
|
|
10
|
+
* **main:** is source destroyed nothing propagated ([e27b09d](https://github.com/silentium-lab/silentium/commit/e27b09d354b545156bd8bb3045ce8acbc71e7bf3))
|
|
11
|
+
|
|
12
|
+
### [0.0.96](https://github.com/silentium-lab/silentium/compare/v0.0.95...v0.0.96) (2025-10-05)
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
### Bug Fixes
|
|
16
|
+
|
|
17
|
+
* **main:** destructor component improoved ([82b23f9](https://github.com/silentium-lab/silentium/commit/82b23f940a6265a944697b72d7c2c0a3ec1f7a94))
|
|
18
|
+
|
|
5
19
|
### [0.0.95](https://github.com/silentium-lab/silentium/compare/v0.0.94...v0.0.95) (2025-10-05)
|
|
6
20
|
|
|
7
21
|
|
package/dist/silentium.cjs
CHANGED
|
@@ -283,14 +283,28 @@ const lazyDestroyable = (baseLazy) => {
|
|
|
283
283
|
};
|
|
284
284
|
};
|
|
285
285
|
|
|
286
|
-
const destructor = (src, destructorUser) =>
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
return () => {
|
|
286
|
+
const destructor = (src, destructorUser) => {
|
|
287
|
+
let mbDestructor;
|
|
288
|
+
let theUser = null;
|
|
289
|
+
const destroy = () => {
|
|
290
|
+
theUser = null;
|
|
292
291
|
mbDestructor?.();
|
|
293
292
|
};
|
|
293
|
+
return {
|
|
294
|
+
value: (u) => {
|
|
295
|
+
theUser = u;
|
|
296
|
+
mbDestructor = src((v) => {
|
|
297
|
+
if (theUser) {
|
|
298
|
+
theUser(v);
|
|
299
|
+
}
|
|
300
|
+
});
|
|
301
|
+
if (mbDestructor && destructorUser) {
|
|
302
|
+
destructorUser(destroy);
|
|
303
|
+
}
|
|
304
|
+
return destroy;
|
|
305
|
+
},
|
|
306
|
+
destroy
|
|
307
|
+
};
|
|
294
308
|
};
|
|
295
309
|
|
|
296
310
|
const local = (baseSrc) => {
|
package/dist/silentium.cjs.map
CHANGED
|
@@ -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/Destructor.ts","../src/base/Local.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>(\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, 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 } from \"src/types\";\n\n/**\n * Create local copy of source what can be destroyed\n */\nexport const local = <T>(baseSrc: DataType<T>): DataType<T> => {\n return function Local(user) {\n let destroyed = false;\n const d = baseSrc((v) => {\n if (!destroyed) {\n user(v);\n }\n });\n return () => {\n destroyed = true;\n d?.();\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 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
|
+
{"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/Destructor.ts","../src/base/Local.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>(\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, DataUserType, DestructorType } from \"src/types\";\n\nexport const destructor = <T>(\n src: DataType<T>,\n destructorUser?: DataUserType<DestructorType>,\n) => {\n let mbDestructor: DestructorType | void;\n let theUser: DataUserType<T> | null = null;\n const destroy = () => {\n theUser = null;\n mbDestructor?.();\n };\n return {\n value: ((u: any) => {\n theUser = u;\n mbDestructor = src((v) => {\n if (theUser) {\n theUser(v);\n }\n });\n if (mbDestructor && destructorUser) {\n destructorUser(destroy);\n }\n return destroy;\n }) as DataType<T>,\n destroy,\n };\n};\n","import { DataType } from \"src/types\";\n\n/**\n * Create local copy of source what can be destroyed\n */\nexport const local = <T>(baseSrc: DataType<T>): DataType<T> => {\n return function Local(user) {\n let destroyed = false;\n const d = baseSrc((v) => {\n if (!destroyed) {\n user(v);\n }\n });\n return () => {\n destroyed = true;\n d?.();\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 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/dist/silentium.d.ts
CHANGED
|
@@ -176,7 +176,10 @@ declare const sharedSource: <T>(baseSrc: SourceType<T>, stateless?: boolean) =>
|
|
|
176
176
|
*/
|
|
177
177
|
declare const stream: <T>(baseSrc: DataType<T[]>) => DataType<T>;
|
|
178
178
|
|
|
179
|
-
declare const destructor: <T>(src: DataType$1<T>, destructorUser?: DataUserType$1<DestructorType$1>) =>
|
|
179
|
+
declare const destructor: <T>(src: DataType$1<T>, destructorUser?: DataUserType$1<DestructorType$1>) => {
|
|
180
|
+
value: DataType$1<T>;
|
|
181
|
+
destroy: () => void;
|
|
182
|
+
};
|
|
180
183
|
|
|
181
184
|
/**
|
|
182
185
|
* Create local copy of source what can be destroyed
|
package/dist/silentium.js
CHANGED
|
@@ -281,14 +281,28 @@ const lazyDestroyable = (baseLazy) => {
|
|
|
281
281
|
};
|
|
282
282
|
};
|
|
283
283
|
|
|
284
|
-
const destructor = (src, destructorUser) =>
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
return () => {
|
|
284
|
+
const destructor = (src, destructorUser) => {
|
|
285
|
+
let mbDestructor;
|
|
286
|
+
let theUser = null;
|
|
287
|
+
const destroy = () => {
|
|
288
|
+
theUser = null;
|
|
290
289
|
mbDestructor?.();
|
|
291
290
|
};
|
|
291
|
+
return {
|
|
292
|
+
value: (u) => {
|
|
293
|
+
theUser = u;
|
|
294
|
+
mbDestructor = src((v) => {
|
|
295
|
+
if (theUser) {
|
|
296
|
+
theUser(v);
|
|
297
|
+
}
|
|
298
|
+
});
|
|
299
|
+
if (mbDestructor && destructorUser) {
|
|
300
|
+
destructorUser(destroy);
|
|
301
|
+
}
|
|
302
|
+
return destroy;
|
|
303
|
+
},
|
|
304
|
+
destroy
|
|
305
|
+
};
|
|
292
306
|
};
|
|
293
307
|
|
|
294
308
|
const local = (baseSrc) => {
|
package/dist/silentium.js.map
CHANGED
|
@@ -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/Destructor.ts","../src/base/Local.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>(\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, 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 } from \"src/types\";\n\n/**\n * Create local copy of source what can be destroyed\n */\nexport const local = <T>(baseSrc: DataType<T>): DataType<T> => {\n return function Local(user) {\n let destroyed = false;\n const d = baseSrc((v) => {\n if (!destroyed) {\n user(v);\n }\n });\n return () => {\n destroyed = true;\n d?.();\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 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
|
+
{"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/Destructor.ts","../src/base/Local.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>(\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, DataUserType, DestructorType } from \"src/types\";\n\nexport const destructor = <T>(\n src: DataType<T>,\n destructorUser?: DataUserType<DestructorType>,\n) => {\n let mbDestructor: DestructorType | void;\n let theUser: DataUserType<T> | null = null;\n const destroy = () => {\n theUser = null;\n mbDestructor?.();\n };\n return {\n value: ((u: any) => {\n theUser = u;\n mbDestructor = src((v) => {\n if (theUser) {\n theUser(v);\n }\n });\n if (mbDestructor && destructorUser) {\n destructorUser(destroy);\n }\n return destroy;\n }) as DataType<T>,\n destroy,\n };\n};\n","import { DataType } from \"src/types\";\n\n/**\n * Create local copy of source what can be destroyed\n */\nexport const local = <T>(baseSrc: DataType<T>): DataType<T> => {\n return function Local(user) {\n let destroyed = false;\n const d = baseSrc((v) => {\n if (!destroyed) {\n user(v);\n }\n });\n return () => {\n destroyed = true;\n d?.();\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 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/dist/silentium.min.js
CHANGED
|
@@ -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)}}},l=e=>t=>{let r=!1;e((e=>{r||(r=!0,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))}))},u=(e,t=!1)=>{const n=new s;let o;const u=i();return l(u.value)((()=>{e((e=>{n.owner()(e),o=e}))})),{value:e=>(u.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=u(e.value,t);return{value:e=>{r.value(e)},give:t=>{e.give(t)}}};const a=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)=>{let r,n=null;const o=()=>{n=null,r?.()};return{value:s=>(n=s,r=e((e=>{n&&n(e)})),r&&t&&t(o),o),destroy:o}},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=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.local=e=>function(t){let r=!1;const n=e((e=>{r||t(e)}));return()=>{r=!0,n?.()}},e.map=(e,r)=>n=>{e((e=>{const o=[];e.forEach((e=>{let t=e;"function"!=typeof t&&(t=a(t));const n=r(t);o.push(n)}));t(...o)(n)}))},e.of=a,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=u,e.sharedSource=c,e.stream=e=>t=>{e((e=>{e.forEach((e=>{t(e)}))}))}}({});
|
package/dist/silentium.min.mjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
const e=(...e)=>{const t=new Set(Object.keys(e)),
|
|
1
|
+
const e=(...e)=>{const t=new Set(Object.keys(e)),n=new Set;return r=>{const o={};Object.entries(e).forEach((([e,s])=>{t.add(e),s((s=>{n.add(e),o[e]=s,((e,t)=>e.size>0&&e.size===t.size)(n,t)&&r(Object.values(o))}))}))}},t=(...e)=>t=>{e.forEach((e=>{e(t)}))},n=(e,t)=>n=>{e((e=>{n(t(e))}))},r=(...e)=>t=>{let n;const r=o=>{const s=e[o],i=e[o+1];s((e=>{i||(n=e),n&&t(n),i&&!n&&r(o+1)}))};r(0)},o=(e,t)=>n=>{e(t((e=>{n(e)})))},s=(e,t,n)=>r=>{e((e=>{t(e)?r(e):void 0!==n&&r(n)}))},i=(t,n,r,o)=>{let s=null;const i=e=>{s&&s(e)};return u=>{s=u;return e(t,n,r)((([e,t,n])=>{e?.[n]&&e[n](t,i)})),()=>{if(s=null,!o)return;e(t,n,o)((([e,t,n])=>{e?.[n]?.(t,i)}))}}},u=(e,t)=>n=>{e.then((e=>{n(e)})).catch((e=>{t?.(e)}))},l=e=>null!=e;var c=Object.defineProperty,a=(e,t,n)=>((e,t,n)=>t in e?c(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n)(e,"symbol"!=typeof t?t+"":t,n);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 n=e=>{l(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 o=v();return w(o.value)((()=>{e((e=>{n.owner()(e),r=e}))})),{value:e=>(o.give(1),t||!l(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)}}},p=e=>{const t=f(v(e));return{value:t.value,give:t.give}},y=(e,t)=>(...n)=>t(e(...n)),g=(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 m=e=>{const t=[];return{get:(...n)=>{const r=e(...n);return t.push(r),r},destroy:()=>{t.forEach((e=>e.destroy()))}}},E=(e,t)=>{let n,r=null;const o=()=>{r=null,n?.()};return{value:s=>(r=s,n=e((e=>{r&&r(e)})),n&&t&&t(o),o),destroy:o}},b=e=>function(t){let n=!1;const r=e((e=>{n||t(e)}));return()=>{n=!0,r?.()}},O=e=>t=>t(e),z=(e,t)=>e(t),j=()=>()=>{},S=(t,n)=>r=>{t((t=>{const o=[];t.forEach((e=>{let t=e;"function"!=typeof t&&(t=O(t));const r=n(t);o.push(r)}));e(...o)(r)}))},P=(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}}),x=e=>t=>{const n=[];e((e=>{n.push(e),t(n)}))},k=e=>t=>{e((e=>{e.forEach((e=>{t(e)}))}))};export{h as OwnerPool,j as _void,e as all,t as any,n as applied,r as chain,E as destructor,o as executorApplied,s as filtered,i as fromEvent,u as fromPromise,l as isFilled,v as late,p as lateShared,y as lazyApplied,g as lazyArgs,m as lazyDestroyable,b as local,S as map,O as of,z as on,w as once,P as primitive,x as sequence,d as shared,f as sharedSource,k 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/Destructor.ts","../src/base/Local.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>(\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, 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 } from \"src/types\";\n\n/**\n * Create local copy of source what can be destroyed\n */\nexport const local = <T>(baseSrc: DataType<T>): DataType<T> => {\n return function Local(user) {\n let destroyed = false;\n const d = baseSrc((v) => {\n if (!destroyed) {\n user(v);\n }\n });\n return () => {\n destroyed = true;\n d?.();\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 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","destructor","destructorUser","mbDestructor","local","user","destroyed","d","of","on","_void","map","targetSrc","val","valInfo","allI","primitive","Symbol","toPrimitive","primitiveWithException","sequence","stream","cv"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"silentium.min.mjs","sources":["../src/components/All.ts","../src/components/Any.ts","../src/components/Applied.ts","../src/components/Chain.ts","../src/components/ExecutorApplied.ts","../src/components/Filtered.ts","../src/components/FromEvent.ts","../src/components/FromPromise.ts","../src/helpers/isFilled.ts","../src/helpers/OwnerPool.ts","../src/components/Late.ts","../src/components/Once.ts","../src/components/Shared.ts","../src/components/SharedSource.ts","../src/components/LateShared.ts","../src/components/LazyApplied.ts","../src/components/LazyArgs.ts","../src/components/LazyDestroyable.ts","../src/base/Destructor.ts","../src/base/Local.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>(\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, DataUserType, DestructorType } from \"src/types\";\n\nexport const destructor = <T>(\n src: DataType<T>,\n destructorUser?: DataUserType<DestructorType>,\n) => {\n let mbDestructor: DestructorType | void;\n let theUser: DataUserType<T> | null = null;\n const destroy = () => {\n theUser = null;\n mbDestructor?.();\n };\n return {\n value: ((u: any) => {\n theUser = u;\n mbDestructor = src((v) => {\n if (theUser) {\n theUser(v);\n }\n });\n if (mbDestructor && destructorUser) {\n destructorUser(destroy);\n }\n return destroy;\n }) as DataType<T>,\n destroy,\n };\n};\n","import { DataType } from \"src/types\";\n\n/**\n * Create local copy of source what can be destroyed\n */\nexport const local = <T>(baseSrc: DataType<T>): DataType<T> => {\n return function Local(user) {\n let destroyed = false;\n const d = baseSrc((v) => {\n if (!destroyed) {\n user(v);\n }\n });\n return () => {\n destroyed = true;\n d?.();\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 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","destructor","destructorUser","mbDestructor","theUser","local","user","destroyed","d","of","on","_void","map","targetSrc","val","valInfo","allI","primitive","Symbol","toPrimitive","primitiveWithException","sequence","stream","cv"],"mappings":"AAQA,MASaA,EAAM,IACdC,KAEH,MAAMC,EAAY,IAAIC,IAAYC,OAAOC,KAAKJ,IACxCK,MAAiBH,IAEvB,OAAQI,IACN,MAAMC,EAAkC,CAAC,EAElCJ,OAAAK,QAAQR,GAAUS,SAAQ,EAAEC,EAAKC,MACtCV,EAAUW,IAAIF,GACdC,GAAME,IACJR,EAAWO,IAAIF,GACfH,EAAOG,GAAOG,EAtBF,EAACR,EAAyBJ,IACrCI,EAAWS,KAAO,GAAKT,EAAWS,OAASb,EAAUa,KAsBlDC,CAAYV,EAAYJ,IACxBK,EAAAH,OAAOa,OAAOT,GAAoC,GAEvD,GACF,CACH,EC7BWU,EAAM,IAAOC,IAChBZ,IACAY,EAAAT,SAASE,IACbA,EAAKL,EAAC,GACP,ECLQa,EAAU,CACrBC,EACAC,IAEQf,IACNc,GAASP,IACLP,EAAAe,EAAQR,GAAE,GACb,ECDQS,EAAQ,IAA0BJ,IAC3BZ,IACZ,IAAAiB,EAEE,MAAAC,EAAWC,IACT,MAAAd,EAAOO,EAAMO,GACbC,EAAQR,EAAMO,EAAQ,GAE5Bd,GAAME,IACCa,IACSH,EAAAV,GAGVU,GACFjB,EAAEiB,GAGAG,IAAUH,GACZC,EAAQC,EAAQ,EAAC,GAEpB,EAGHD,EAAQ,EAAC,EC5BAG,EAAkB,CAC7BP,EACAC,IAEQf,IACNc,EACEC,GAASR,IACPP,EAAEO,EAAC,IAEP,ECRSe,EAAW,CACtBR,EACAS,EACAC,IAEQxB,IACNc,GAASP,IACHgB,EAAUhB,GACZP,EAAEO,QACwB,IAAjBiB,GACTxB,EAAEwB,EAAY,GAEjB,ECXQC,EAAY,CACvBC,EACAC,EACAC,EACAC,KAEA,IAAIC,EAAgC,KAC9B,MAAAC,EAAWxB,IACXuB,GACFA,EAAMvB,EAAC,EAGX,OAAQP,IACE8B,EAAA9B,EASR,OARUP,EAAIiC,EAAYC,EAAcC,EACxCI,EAAE,EAAEC,EAASC,EAAWC,MACjBF,IAAUE,IAGPF,EAAAE,GAAWD,EAAWH,EAAO,IAGhC,KAEL,GADQD,EAAA,MACHD,EACH,OAEQpC,EAAIiC,EAAYC,EAAcE,EACxCG,EAAE,EAAEC,EAASC,EAAWE,MACZH,IAAAG,KAAeF,EAAWH,EAAO,GAC5C,CACH,CACF,EClCWM,EAAc,CACzBC,EACAC,IAEQvC,IACJsC,EAAAE,MAAMjC,IACNP,EAAEO,EAAC,IACFkC,OAAOC,IACRH,IAAaG,EAAC,GACf,EChBQC,EACXC,GAEOA,kKCIF,MAAMC,EAIJ,WAAAC,GAHCC,EAAAC,KAAA,UACAD,EAAAC,KAAA,cAGDA,KAAAC,WAAarD,IACboD,KAAAE,WAAc3C,IACZyC,KAAAC,OAAO9C,SAASgD,IACnBA,EAAE5C,EAAC,GACJ,CACH,CAGK,KAAA6C,GACL,OAAOJ,KAAKE,UAAA,CAGP,IAAA1C,GACL,OAAOwC,KAAKC,OAAOzC,IAAA,CAGd,GAAA6C,CAAID,GACF,OAAAJ,KAAKC,OAAOI,IAAID,EAAK,CAGvB,GAAA9C,CAAI8C,GAEF,OADFJ,KAAAC,OAAO3C,IAAI8C,GACTJ,IAAA,CAGF,MAAAM,CAAOH,GAEL,OADFH,KAAAC,OAAOM,OAAOJ,GACZH,IAAA,CAGF,OAAAQ,GAIE,OAHFR,KAAAC,OAAO9C,SAASgD,IACnBH,KAAKM,OAAOH,EAAC,IAERH,IAAA,ECrCE,MAAAS,EAAWlD,IACtB,IAAImD,EAAmC,KACjC,MAAAC,EAAUpD,IACVoC,EAASpC,IAAMmD,GACjBA,EAASnD,EAAC,EAIP,MAAA,CACLqC,MAAQ5C,IACN,GAAI0D,EACF,MAAM,IAAIE,MACR,qEAIOF,EAAA1D,EACX2D,EAAOpD,EAAC,EAEVsD,KAAOtD,IACLoD,EAAOpD,EAAC,EAEZ,ECvBWuD,EAAWhD,GACdd,IACN,IAAI2C,GAAW,EACf7B,GAASP,IACFoC,IACQA,GAAA,EACX3C,EAAEO,GAAC,GAEN,ECNQwD,EAAS,CACpBjD,EACAkD,GAAY,KAEN,MAAAC,EAAa,IAAIpB,EACnB,IAAA5B,EAEJ,MAAMiD,EAAQT,IAQP,OAPFK,EAAAI,EAAMtB,MAANkB,EAAa,KAChBhD,GAASP,IACI0D,EAAAb,OAAAa,CAAQ1D,GACPU,EAAAV,CAAA,GACb,IAGI,CACLqC,MAAQ5C,IACNkE,EAAML,KAAK,GACNG,IAAarB,EAAS1B,IAAegD,EAAWZ,IAAIrD,IACvDA,EAAEiB,GAEJgD,EAAW3D,IAAIN,GACR,KACLiE,EAAWX,OAAOtD,EAAC,GAGvB6D,KAAOjB,IACO3B,EAAA2B,EACDqB,EAAAb,OAAAa,CAAQrB,EAAK,EAE1BuB,KAAO,IACEF,EAET,OAAAT,GACES,EAAWT,SAAQ,EAEvB,EC3CWY,EAAe,CAC1BtD,EACAkD,GAAY,KAEZ,MAAMK,EAAYN,EAAOjD,EAAQ8B,MAAOoB,GAEjC,MAAA,CACLpB,MAAQ5C,IACNqE,EAAUzB,MAAM5C,EAAC,EAEnB6D,KAAOtD,IACLO,EAAQ+C,KAAKtD,EAAC,EAElB,ECZW+D,EAAiBC,IAC5B,MAAMC,EAAMJ,EAAaX,EAAKc,IACvB,MAAA,CACL3B,MAAO4B,EAAI5B,MACXiB,KAAMW,EAAIX,KACZ,ECJWY,EAAc,CACzBC,EACA3D,IAEO,IAAI4D,IACF5D,EAAQ2D,KAAYC,ICRlBC,EAAW,CACtBF,EACAC,EACAE,EAA4B,IAErB,IAAIC,IACFJ,KAIX,SAAsBK,EAAiBC,EAAiB7D,GACtD,MAAMlB,EAAS8E,EAAKE,MAAM,EAAG9D,GAC7B,KAAOlB,EAAOiF,OAAS/D,GAAOlB,EAAOkF,UAAK,GACnC,OAAAlF,EAAOmF,OAAOJ,EACvB,CARuBK,CAAaP,EAASH,EAAME,ICHtC,MAAAS,EACXZ,IAEA,MAAMa,EAA+B,GAC9B,MAAA,CACLC,IAAK,IAAIb,KACD,MAAAc,EAAOf,KAAYC,GAElB,OADPY,EAAUJ,KAAKM,GACRA,CAAA,EAETjC,QAAS,KACP+B,EAAUpF,SAASuF,GAAMA,EAAElC,WAAS,EAExC,EChBWmC,EAAa,CACxBnB,EACAoB,KAEI,IAAAC,EACAC,EAAkC,KACtC,MAAMtC,EAAU,KACJsC,EAAA,KACKD,KAAA,EAEV,MAAA,CACLjD,MAAS5C,IACG8F,EAAA9F,EACK6F,EAAArB,GAAKjE,IACduF,GACFA,EAAQvF,EAAC,IAGTsF,GAAgBD,GAClBA,EAAepC,GAEVA,GAETA,UACF,ECrBWuC,EAAYjF,GAChB,SAAekF,GACpB,IAAIC,GAAY,EACV,MAAAC,EAAIpF,GAASP,IACZ0F,GACHD,EAAKzF,EAAC,IAGV,MAAO,KACO0F,GAAA,EACRC,KAAA,CAER,ECfWC,EACP5F,GACHP,GACCA,EAAEO,GCAO6F,EAAK,CAAI5B,EAAkBwB,IAA0BxB,EAAIwB,GCAzDK,EAAQ,IAAoB,OCI5BC,EAAM,CACjBxF,EACAyF,IAEQvG,IACNc,GAASP,IACP,MAAMK,EAAwB,GAC5BL,EAAAJ,SAASqG,IACT,IAAIC,EAA2BD,EACR,mBAAZC,IACTA,EAAUN,EAAGM,IAET,MAAApG,EAAOkG,EAAUE,GACvB7F,EAAMuE,KAAK9E,EAAI,IAEJZ,KAAOmB,EACpB8F,CAAK1G,EAAC,GACP,ECxBQ2G,EAAY,CACvB7F,EACAyD,EAAqB,QAErBzD,GAASP,IACIgE,EAAAhE,CAAA,IAGN,CACL,CAACqG,OAAOC,aAAe,IACdtC,EAEToC,UAAY,IACHpC,EAET,sBAAAuC,GACE,GAAiB,OAAbvC,EACI,MAAA,IAAIX,MAAM,2BAEX,OAAAW,CAAA,ICdAwC,EAAejG,GAClBd,IACN,MAAMC,EAAc,GACpBa,GAASP,IACPN,EAAOkF,KAAK5E,GACZP,EAAEC,EAAM,GACT,ECPQ+G,EAAalG,GAChBd,IACNc,GAASP,IACLA,EAAAJ,SAAS8G,IACTjH,EAAEiH,EAAE,GACL,GACF"}
|
package/dist/silentium.mjs
CHANGED
|
@@ -281,14 +281,28 @@ const lazyDestroyable = (baseLazy) => {
|
|
|
281
281
|
};
|
|
282
282
|
};
|
|
283
283
|
|
|
284
|
-
const destructor = (src, destructorUser) =>
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
return () => {
|
|
284
|
+
const destructor = (src, destructorUser) => {
|
|
285
|
+
let mbDestructor;
|
|
286
|
+
let theUser = null;
|
|
287
|
+
const destroy = () => {
|
|
288
|
+
theUser = null;
|
|
290
289
|
mbDestructor?.();
|
|
291
290
|
};
|
|
291
|
+
return {
|
|
292
|
+
value: (u) => {
|
|
293
|
+
theUser = u;
|
|
294
|
+
mbDestructor = src((v) => {
|
|
295
|
+
if (theUser) {
|
|
296
|
+
theUser(v);
|
|
297
|
+
}
|
|
298
|
+
});
|
|
299
|
+
if (mbDestructor && destructorUser) {
|
|
300
|
+
destructorUser(destroy);
|
|
301
|
+
}
|
|
302
|
+
return destroy;
|
|
303
|
+
},
|
|
304
|
+
destroy
|
|
305
|
+
};
|
|
292
306
|
};
|
|
293
307
|
|
|
294
308
|
const local = (baseSrc) => {
|
package/dist/silentium.mjs.map
CHANGED
|
@@ -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/Destructor.ts","../src/base/Local.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>(\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, 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 } from \"src/types\";\n\n/**\n * Create local copy of source what can be destroyed\n */\nexport const local = <T>(baseSrc: DataType<T>): DataType<T> => {\n return function Local(user) {\n let destroyed = false;\n const d = baseSrc((v) => {\n if (!destroyed) {\n user(v);\n }\n });\n return () => {\n destroyed = true;\n d?.();\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 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
|
+
{"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/Destructor.ts","../src/base/Local.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>(\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, DataUserType, DestructorType } from \"src/types\";\n\nexport const destructor = <T>(\n src: DataType<T>,\n destructorUser?: DataUserType<DestructorType>,\n) => {\n let mbDestructor: DestructorType | void;\n let theUser: DataUserType<T> | null = null;\n const destroy = () => {\n theUser = null;\n mbDestructor?.();\n };\n return {\n value: ((u: any) => {\n theUser = u;\n mbDestructor = src((v) => {\n if (theUser) {\n theUser(v);\n }\n });\n if (mbDestructor && destructorUser) {\n destructorUser(destroy);\n }\n return destroy;\n }) as DataType<T>,\n destroy,\n };\n};\n","import { DataType } from \"src/types\";\n\n/**\n * Create local copy of source what can be destroyed\n */\nexport const local = <T>(baseSrc: DataType<T>): DataType<T> => {\n return function Local(user) {\n let destroyed = false;\n const d = baseSrc((v) => {\n if (!destroyed) {\n user(v);\n }\n });\n return () => {\n destroyed = true;\n d?.();\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 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":"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,QAAU,OAAA,GAAA,WAAW,CAAI,GAAA,SAAA,EAAW,OAAO,CAAA;AAAA,OAC5C,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,CACtB,KAC0C,KAAA;AAC1C,EAAO,OAAA,KAAA,KAAU,UAAa,KAAU,KAAA,IAAA;AAC1C;;;;;ACGO,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;;ACjBa,MAAA,UAAA,GAAa,CACxB,GAAA,EACA,cACG,KAAA;AACH,EAAI,IAAA,YAAA;AACJ,EAAA,IAAI,OAAkC,GAAA,IAAA;AACtC,EAAA,MAAM,UAAU,MAAM;AACpB,IAAU,OAAA,GAAA,IAAA;AACV,IAAe,YAAA,IAAA;AAAA,GACjB;AACA,EAAO,OAAA;AAAA,IACL,KAAA,EAAQ,CAAC,CAAW,KAAA;AAClB,MAAU,OAAA,GAAA,CAAA;AACV,MAAe,YAAA,GAAA,GAAA,CAAI,CAAC,CAAM,KAAA;AACxB,QAAA,IAAI,OAAS,EAAA;AACX,UAAA,OAAA,CAAQ,CAAC,CAAA;AAAA;AACX,OACD,CAAA;AACD,MAAA,IAAI,gBAAgB,cAAgB,EAAA;AAClC,QAAA,cAAA,CAAe,OAAO,CAAA;AAAA;AAExB,MAAO,OAAA,OAAA;AAAA,KACT;AAAA,IACA;AAAA,GACF;AACF;;ACtBa,MAAA,KAAA,GAAQ,CAAI,OAAsC,KAAA;AAC7D,EAAO,OAAA,SAAS,MAAM,IAAM,EAAA;AAC1B,IAAA,IAAI,SAAY,GAAA,KAAA;AAChB,IAAM,MAAA,CAAA,GAAI,OAAQ,CAAA,CAAC,CAAM,KAAA;AACvB,MAAA,IAAI,CAAC,SAAW,EAAA;AACd,QAAA,IAAA,CAAK,CAAC,CAAA;AAAA;AACR,KACD,CAAA;AACD,IAAA,OAAO,MAAM;AACX,MAAY,SAAA,GAAA,IAAA;AACZ,MAAI,CAAA,IAAA;AAAA,KACN;AAAA,GACF;AACF;;AChBO,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,KACT;AAAA,IACA,sBAAyB,GAAA;AACvB,MAAA,IAAI,aAAa,IAAM,EAAA;AACrB,QAAM,MAAA,IAAI,MAAM,yBAAyB,CAAA;AAAA;AAE3C,MAAO,OAAA,QAAA;AAAA;AACT,GACF;AACF;;ACjBa,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;;;;"}
|
package/package.json
CHANGED
|
@@ -6,7 +6,7 @@ describe("Destructor.test", () => {
|
|
|
6
6
|
test("Destructor always exists", () => {
|
|
7
7
|
const src = destructor(of("1"));
|
|
8
8
|
const user = vi.fn();
|
|
9
|
-
const d = src(user);
|
|
9
|
+
const d = src.value(user);
|
|
10
10
|
|
|
11
11
|
expect(user).toHaveBeenCalledWith("1");
|
|
12
12
|
expect(typeof d).toBe("function");
|
|
@@ -21,9 +21,8 @@ describe("Destructor.test", () => {
|
|
|
21
21
|
return d;
|
|
22
22
|
}, destructorUser);
|
|
23
23
|
const user = vi.fn();
|
|
24
|
-
src(user);
|
|
24
|
+
src.value(user);
|
|
25
25
|
|
|
26
26
|
expect(user).toHaveBeenCalledWith("2");
|
|
27
|
-
expect(destructorUser).toHaveBeenCalledWith(d);
|
|
28
27
|
});
|
|
29
28
|
});
|
package/src/base/Destructor.ts
CHANGED
|
@@ -1,16 +1,28 @@
|
|
|
1
1
|
import { DataType, DataUserType, DestructorType } from "src/types";
|
|
2
2
|
|
|
3
|
-
export const destructor =
|
|
4
|
-
<T
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
}
|
|
13
|
-
return () => {
|
|
14
|
-
mbDestructor?.();
|
|
15
|
-
};
|
|
3
|
+
export const destructor = <T>(
|
|
4
|
+
src: DataType<T>,
|
|
5
|
+
destructorUser?: DataUserType<DestructorType>,
|
|
6
|
+
) => {
|
|
7
|
+
let mbDestructor: DestructorType | void;
|
|
8
|
+
let theUser: DataUserType<T> | null = null;
|
|
9
|
+
const destroy = () => {
|
|
10
|
+
theUser = null;
|
|
11
|
+
mbDestructor?.();
|
|
16
12
|
};
|
|
13
|
+
return {
|
|
14
|
+
value: ((u: any) => {
|
|
15
|
+
theUser = u;
|
|
16
|
+
mbDestructor = src((v) => {
|
|
17
|
+
if (theUser) {
|
|
18
|
+
theUser(v);
|
|
19
|
+
}
|
|
20
|
+
});
|
|
21
|
+
if (mbDestructor && destructorUser) {
|
|
22
|
+
destructorUser(destroy);
|
|
23
|
+
}
|
|
24
|
+
return destroy;
|
|
25
|
+
}) as DataType<T>,
|
|
26
|
+
destroy,
|
|
27
|
+
};
|
|
28
|
+
};
|
|
@@ -2,13 +2,25 @@
|
|
|
2
2
|
exports.__esModule = true;
|
|
3
3
|
exports.destructor = void 0;
|
|
4
4
|
exports.destructor = function (src, destructorUser) {
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
5
|
+
var mbDestructor;
|
|
6
|
+
var theUser = null;
|
|
7
|
+
var destroy = function () {
|
|
8
|
+
theUser = null;
|
|
9
|
+
mbDestructor === null || mbDestructor === void 0 ? void 0 : mbDestructor();
|
|
10
|
+
};
|
|
11
|
+
return {
|
|
12
|
+
value: (function (u) {
|
|
13
|
+
theUser = u;
|
|
14
|
+
mbDestructor = src(function (v) {
|
|
15
|
+
if (theUser) {
|
|
16
|
+
theUser(v);
|
|
17
|
+
}
|
|
18
|
+
});
|
|
19
|
+
if (mbDestructor && destructorUser) {
|
|
20
|
+
destructorUser(destroy);
|
|
21
|
+
}
|
|
22
|
+
return destroy;
|
|
23
|
+
}),
|
|
24
|
+
destroy: destroy
|
|
13
25
|
};
|
|
14
26
|
};
|
|
@@ -7,7 +7,7 @@ vitest_1.describe("Destructor.test", function () {
|
|
|
7
7
|
vitest_1.test("Destructor always exists", function () {
|
|
8
8
|
var src = Destructor_1.destructor(Of_1.of("1"));
|
|
9
9
|
var user = vitest_1.vi.fn();
|
|
10
|
-
var d = src(user);
|
|
10
|
+
var d = src.value(user);
|
|
11
11
|
vitest_1.expect(user).toHaveBeenCalledWith("1");
|
|
12
12
|
vitest_1.expect(typeof d).toBe("function");
|
|
13
13
|
});
|
|
@@ -20,8 +20,7 @@ vitest_1.describe("Destructor.test", function () {
|
|
|
20
20
|
return d;
|
|
21
21
|
}, destructorUser);
|
|
22
22
|
var user = vitest_1.vi.fn();
|
|
23
|
-
src(user);
|
|
23
|
+
src.value(user);
|
|
24
24
|
vitest_1.expect(user).toHaveBeenCalledWith("2");
|
|
25
|
-
vitest_1.expect(destructorUser).toHaveBeenCalledWith(d);
|
|
26
25
|
});
|
|
27
26
|
});
|