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