silentium 0.0.25 → 0.0.26

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -2,6 +2,13 @@
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.26](https://github.com/silentium-lab/silentium/compare/v0.0.25...v0.0.26) (2025-05-02)
6
+
7
+
8
+ ### Bug Fixes
9
+
10
+ * **main:** export source any component ([f7f5ca2](https://github.com/silentium-lab/silentium/commit/f7f5ca227b463baa9a2e2c2c50f7948732c130f6))
11
+
5
12
  ### [0.0.25](https://github.com/silentium-lab/silentium/compare/v0.0.24...v0.0.25) (2025-05-02)
6
13
 
7
14
 
@@ -633,6 +633,14 @@ const sourceCombined = (...sources) => (source) => {
633
633
  return result.value;
634
634
  };
635
635
 
636
+ const sourceAny = (sources) => {
637
+ const lastSrc = sourceOf();
638
+ sources.forEach((source) => {
639
+ value(source, patron(lastSrc));
640
+ });
641
+ return lastSrc;
642
+ };
643
+
636
644
  const personalClass = (constructorFn, modules = {}) => {
637
645
  if (constructorFn === void 0) {
638
646
  throw new Error("PrivateClass didn't receive constructorFn argument");
@@ -683,6 +691,7 @@ exports.personalClass = personalClass;
683
691
  exports.removePatronFromPools = removePatronFromPools;
684
692
  exports.source = source;
685
693
  exports.sourceAll = sourceAll;
694
+ exports.sourceAny = sourceAny;
686
695
  exports.sourceApplied = sourceApplied;
687
696
  exports.sourceCombined = sourceCombined;
688
697
  exports.sourceDynamic = sourceDynamic;
@@ -1 +1 @@
1
- {"version":3,"file":"silentium.cjs","sources":["../src/Source/Source.ts","../src/Guest/Guest.ts","../src/Guest/GuestCast.ts","../src/Guest/GuestSync.ts","../src/Guest/GuestDisposable.ts","../src/Guest/GuestApplied.ts","../src/Guest/GuestExecutorApplied.ts","../src/Patron/Patron.ts","../src/Patron/PatronOnce.ts","../src/Patron/PatronPool.ts","../src/Patron/PatronApplied.ts","../src/Patron/PatronExecutorApplied.ts","../src/Source/SourceChangeable.ts","../src/Source/SourceAll.ts","../src/Source/SourceSequence.ts","../src/Source/SourceMap.ts","../src/Source/SourceRace.ts","../src/Source/SourceDynamic.ts","../src/Source/SourceApplied.ts","../src/Source/SourceExecutorApplied.ts","../src/Source/SourceFiltered.ts","../src/Source/SourceOnce.ts","../src/Source/SourceSync.ts","../src/Source/SourceCombined.ts","../src/Personal/PersonalClass.ts","../src/Personal/Personal.ts"],"sourcesContent":["import { give, GuestType } from \"../Guest/Guest\";\n\nexport type SourceExecutorType<T> = (guest: GuestType<T>) => unknown;\n\nexport interface SourceObjectType<T> {\n value: SourceExecutorType<T>;\n}\n\nexport type SourceDataType<T> = Extract<\n T,\n string | number | boolean | Date | object | Array<unknown> | symbol\n>;\n\nexport type SourceType<T = any> =\n | SourceExecutorType<T>\n | SourceObjectType<T>\n | SourceDataType<T>;\n\n/**\n * Helps to connect source and guest, if you need to get value in guest from source\n * helpful because we don't know what shape of source do we have, it can be function or object or primitive\n * @url https://silentium-lab.github.io/silentium/#/utils/value\n */\nexport const value = <T>(source: SourceType<T>, guest: GuestType<T>) => {\n if (source === undefined || source === null) {\n throw new Error(\"value didn't receive source argument\");\n }\n if (guest === undefined || source === null) {\n throw new Error(\"value didn't receive guest argument\");\n }\n if (typeof source === \"function\") {\n source(guest);\n } else if (\n typeof source === \"object\" &&\n \"value\" in source &&\n typeof source.value === \"function\"\n ) {\n source.value(guest);\n } else {\n give(source as T, guest);\n }\n\n return source;\n};\n\n/**\n * Helps to check what some information is of source shape\n * @url https://silentium-lab.github.io/silentium/#/utils/is-source\n */\nexport const isSource = <T>(\n mbSource: T | SourceType<T>,\n): mbSource is SourceType<T> => {\n if (\n mbSource !== null &&\n typeof mbSource === \"object\" &&\n \"value\" in mbSource &&\n typeof mbSource.value === \"function\"\n ) {\n return true;\n }\n return mbSource !== null && mbSource !== undefined;\n};\n\n/**\n * Represents source as function\n * @url https://silentium-lab.github.io/silentium/#/source\n */\nexport const source = <T>(source: SourceType<T>): SourceExecutorType<T> => {\n if (source === undefined) {\n throw new Error(\"Source constructor didn't receive executor function\");\n }\n\n return (guest: GuestType<T>) => {\n value(source, guest);\n };\n};\n","import { source, SourceExecutorType, SourceType } from \"../Source/Source\";\n\ntype GuestIntroduction = \"guest\" | \"patron\";\n\nexport type GuestExecutorType<T = any, This = void> = (value: T) => This;\n\nexport interface GuestObjectType<T = any> {\n give(value: T): this;\n introduction?(): GuestIntroduction;\n}\n\nexport type GuestType<T = any> = GuestExecutorType<T> | GuestObjectType<T>;\n\n/**\n * Helps to give data to guest, guests can be of different shapes\n * function guest or object guest\n * @url https://silentium-lab.github.io/silentium/#/utils/give\n */\nexport const give = <T>(\n data: T,\n guest?: GuestType<T>,\n): GuestType<T> | SourceExecutorType<T> => {\n if (data === undefined) {\n throw new Error(\"give didn't receive data argument\");\n }\n if (guest === undefined) {\n return source<T>(data as SourceType<T>) as SourceExecutorType<T>;\n }\n if (typeof guest === \"function\") {\n guest(data);\n } else {\n guest.give(data);\n }\n return guest;\n};\n\n/**\n * Helps to check if mbGuest can be used to retrieve value\n * @url https://silentium-lab.github.io/silentium/#/utils/is-guest\n */\nexport const isGuest = (mbGuest: any): mbGuest is GuestType => {\n if (mbGuest === undefined) {\n throw new Error(\"isGuest didnt receive mbGuest argument\");\n }\n return typeof mbGuest === \"function\" || typeof mbGuest?.give === \"function\";\n};\n\n/**\n * Helps to create guest of object type\n * @url https://silentium-lab.github.io/silentium/#/guest\n */\nexport const guest = <T>(receiver: GuestExecutorType<T>) => {\n if (!receiver) {\n throw new Error(\"receiver function was not passed to Guest constructor\");\n }\n const result = {\n give(value: T) {\n receiver(value);\n return result;\n },\n };\n return result;\n};\n","import { give, GuestType } from \"./Guest\";\nimport { GuestDisposableType, MaybeDisposableType } from \"./GuestDisposable\";\n\n/**\n * Helps to inherit guest behavior, its introduction and dispose settings\n * @url https://silentium-lab.github.io/silentium/#/guest/guest-cast\n */\nexport const guestCast = <T>(\n sourceGuest: GuestType<any>,\n targetGuest: GuestType<T>,\n): GuestDisposableType<T> => {\n if (sourceGuest === undefined) {\n throw new Error(\"GuestCast didn't receive sourceGuest argument\");\n }\n if (targetGuest === undefined) {\n throw new Error(\"GuestCast didn't receive targetGuest argument\");\n }\n\n const result = {\n disposed(value: T | null): boolean {\n const maybeDisposable = sourceGuest as MaybeDisposableType;\n return maybeDisposable.disposed ? maybeDisposable.disposed(value) : false;\n },\n give(value: T) {\n give(value, targetGuest);\n return result;\n },\n introduction() {\n if (typeof sourceGuest === \"function\") {\n return \"guest\";\n }\n if (!sourceGuest.introduction) {\n return \"guest\";\n }\n return sourceGuest.introduction();\n },\n };\n\n return result;\n};\n","import { GuestObjectType } from \"./Guest\";\n\nexport interface GuestValueType<T = any> extends GuestObjectType<T> {\n value(): T;\n}\n\n/**\n * @url https://silentium-lab.github.io/silentium/#/guest/guest-sync\n */\nexport const guestSync = <T>(theValue?: T): GuestValueType<T> => {\n const result = {\n give(value: T) {\n theValue = value;\n return result;\n },\n value() {\n if (theValue === undefined) {\n throw new Error(\"no value in GuestSync!\");\n }\n return theValue;\n },\n };\n\n return result;\n};\n","import { give, GuestObjectType, GuestType } from \"./Guest\";\n\nexport interface GuestDisposableType<T = any> extends GuestObjectType<T> {\n disposed(value: T | null): boolean;\n}\n\nexport type MaybeDisposableType<T = any> = Partial<GuestDisposableType<T>>;\n\n/**\n * Connects to guest logic what can tell PatronPool\n * what guest don't need to receive new values\n * @url https://silentium-lab.github.io/silentium/#/guest/guest-disposable\n */\nexport const guestDisposable = <T>(\n guest: GuestType,\n disposeCheck: (value: T | null) => boolean,\n): GuestDisposableType<T> => {\n if (guest === undefined) {\n throw new Error(\"GuestDisposable didn't receive guest argument\");\n }\n if (disposeCheck === undefined) {\n throw new Error(\"GuestDisposable didn't receive disposeCheck argument\");\n }\n\n const result = {\n disposed(value: T | null): boolean {\n return disposeCheck(value);\n },\n give(value: T) {\n give(value, guest);\n return result;\n },\n };\n\n return result;\n};\n","import { give, GuestObjectType, GuestType } from \"../Guest/Guest\";\n\n/**\n * Helps to apply function to value before baseGuest will receive it\n * @url https://silentium-lab.github.io/silentium/#/guest/guest-applied\n */\nexport const guestApplied = <T, R>(\n baseGuest: GuestType<R>,\n applier: (value: T) => R,\n): GuestObjectType<T> => {\n const result = {\n give(value: T) {\n give(applier(value), baseGuest);\n return result;\n },\n };\n return result;\n};\n","import {\n give,\n GuestExecutorType,\n GuestObjectType,\n GuestType,\n} from \"../Guest/Guest\";\n\n/**\n * Apply function to guest function of receiving value, useful for debouncing or throttling\n * @url https://silentium-lab.github.io/silentium/#/guest/guest-executor-applied\n */\nexport const guestExecutorApplied = <T>(\n baseGuest: GuestType<T>,\n applier: (executor: GuestExecutorType<T>) => GuestExecutorType<T>,\n): GuestObjectType<T> => {\n const result = {\n give: applier((v) => give(v, baseGuest)),\n };\n\n return result as GuestObjectType<T>;\n};\n","import { give, GuestType } from \"../Guest/Guest\";\nimport { GuestDisposableType } from \"../Guest/GuestDisposable\";\n\nexport type PatronType<T> = GuestDisposableType<T> & {\n introduction(): \"patron\";\n};\n\n/**\n * Helps to check what incoming object is patron\n * @url https://silentium-lab.github.io/silentium/#/utils/is-patron\n */\nexport const isPatron = (guest: GuestType): guest is PatronType<unknown> =>\n typeof guest === \"object\" &&\n guest !== null &&\n guest?.introduction?.() === \"patron\";\n\nexport const introduction = () => \"patron\" as const;\n\n/**\n * Help to turn existed guest intro patron\n * @url https://silentium-lab.github.io/silentium/#/patron\n */\nexport const patron = <T>(\n willBePatron: GuestType<T>,\n): GuestDisposableType<T> => {\n if (willBePatron === undefined) {\n throw new Error(\"Patron didn't receive willBePatron argument\");\n }\n\n const result = {\n give(value: T) {\n give(value, willBePatron);\n return result;\n },\n disposed(value: T | null): boolean {\n const maybeDisposable = willBePatron as GuestDisposableType;\n return maybeDisposable?.disposed?.(value) || false;\n },\n introduction,\n };\n\n return result;\n};\n","import { introduction } from \"../Patron/Patron\";\nimport { give, GuestType } from \"../Guest/Guest\";\nimport {\n GuestDisposableType,\n MaybeDisposableType,\n} from \"../Guest/GuestDisposable\";\n\n/**\n * Helps to call patron only once, this will be helpful when you\n * need value but you know what value can not be existed at a time of requesting\n * @url https://silentium-lab.github.io/silentium/#/patron/patron-once\n */\nexport const patronOnce = <T>(\n baseGuest: GuestType<T>,\n): GuestDisposableType<T> => {\n if (baseGuest === undefined) {\n throw new Error(\"PatronOnce didn't receive baseGuest argument\");\n }\n\n let received = false;\n\n const result = {\n give(value: T) {\n if (!received) {\n received = true;\n give(value, baseGuest);\n }\n return result;\n },\n disposed(value: T | null): boolean {\n if (received) {\n return true;\n }\n const maybeDisposable = baseGuest as MaybeDisposableType;\n return maybeDisposable.disposed ? maybeDisposable.disposed(value) : false;\n },\n introduction,\n };\n\n return result;\n};\n","import { source, SourceType } from \"../Source/Source\";\nimport { give, GuestObjectType, GuestType } from \"../Guest/Guest\";\nimport { GuestDisposableType } from \"../Guest/GuestDisposable\";\n\nconst poolSets = new Map<PoolType, Set<GuestObjectType>>();\nconst poolsOfInitiators = new Map<SourceType, PoolType>();\nconst subSources = new Map<SourceType, SourceType[]>();\n\nconst poolsChangeFns: (() => void)[] = [];\nconst notifyPoolsChange = () => {\n poolsChangeFns.forEach((fn) => fn());\n};\nconst lastPatronPoolsStatistic = {\n poolsCount: 0,\n patronsCount: 0,\n};\n/**\n * Helps to debug application and see is it have problems with frozen pools\n * @url https://silentium-lab.github.io/silentium/#/utils/patron-pools-statistic\n */\nexport const patronPoolsStatistic = source<{\n poolsCount: number;\n patronsCount: number;\n}>((g) => {\n give(lastPatronPoolsStatistic, g);\n poolsChangeFns.push(() => {\n let patronsCount = 0;\n poolSets.forEach((set) => {\n patronsCount += set.size;\n });\n lastPatronPoolsStatistic.poolsCount = poolSets.size;\n lastPatronPoolsStatistic.patronsCount = patronsCount;\n give(lastPatronPoolsStatistic, g);\n });\n});\n\n/**\n * Helps to connect source and subsource, needed to destroy all sub sources\n * when base source will be destroyed\n * @url https://silentium-lab.github.io/silentium/#/utils/sub-source\n */\nexport const subSource = <T>(\n subSource: SourceType,\n source: SourceType<T>,\n): SourceType<T> => {\n // sub sources can appear only on SourceObjectType\n if (source !== null && typeof source !== \"object\") {\n return source;\n }\n\n if (!subSources.has(source)) {\n subSources.set(source, []);\n }\n\n subSources.get(source)?.push(subSource);\n\n return subSource;\n};\n\n/**\n * Helps to define many sources of one sub source\n */\nexport const subSourceMany = <T>(\n subSourceSrc: SourceType<T>,\n sourcesSrc: SourceType[],\n): SourceType<T> => {\n sourcesSrc.forEach((source) => {\n subSource(subSourceSrc, source);\n });\n return subSourceSrc;\n};\n\n/**\n * Helps to remove all pools of related initiators\n * @url https://silentium-lab.github.io/silentium/#/utils/destroy\n */\nexport const destroy = (initiators: SourceType[]) => {\n initiators.forEach((initiator) => {\n const pool = poolsOfInitiators.get(initiator);\n pool?.destroy();\n const relatedInitiators = subSources.get(initiator);\n if (relatedInitiators) {\n destroy(relatedInitiators);\n }\n });\n};\n\n/**\n * Returns all pools related to one patron\n * @url https://silentium-lab.github.io/silentium/#/utils/patron-pools\n */\nexport const patronPools = (patron: GuestObjectType) => {\n const pools: PoolType[] = [];\n poolSets.forEach((pool, poolInstance) => {\n if (pool.has(patron)) {\n pools.push(poolInstance);\n }\n });\n return pools;\n};\n\n/**\n * Removes patron from all existed pools\n * @url https://silentium-lab.github.io/silentium/#/utils/remove-patron-from-pools\n */\nexport const removePatronFromPools = (patron: GuestObjectType) => {\n if (patron === undefined) {\n throw new Error(\"removePatronFromPools didn't receive patron argument\");\n }\n poolSets.forEach((pool) => {\n pool.delete(patron);\n });\n};\n\n/**\n * Checks what patron is connected with any pool\n * @url https://silentium-lab.github.io/silentium/#/utils/is-patron-in-pools\n */\nexport const isPatronInPools = (patron: GuestObjectType) => {\n if (patron === undefined) {\n throw new Error(\"isPatronInPools didn't receive patron argument\");\n }\n let inPool = false;\n poolSets.forEach((pool) => {\n if (!inPool) {\n inPool = pool.has(patron);\n }\n });\n return inPool;\n};\n\nexport interface PoolType<T = any> extends GuestObjectType<T> {\n add(guest: GuestObjectType<T>): this;\n distribute(receiving: T, possiblePatron: GuestObjectType<T>): this;\n remove(patron: GuestObjectType<T>): this;\n size(): number;\n destroy(): void;\n}\n\n/**\n * Pool class helps to implement dispatching for patron about new values\n * what may appear in sources\n * @url https://silentium-lab.github.io/silentium/#/patron/patron-pool\n */\nexport class PatronPool<T> implements PoolType<T> {\n private patrons: Set<GuestObjectType<T>>;\n\n public give: (value: T) => this;\n\n public constructor(private initiator: SourceType) {\n this.patrons = new Set<GuestObjectType<T>>();\n poolSets.set(this, this.patrons);\n poolsOfInitiators.set(this.initiator, this);\n const doReceive = (value: T) => {\n this.patrons.forEach((target) => {\n this.sendValueToGuest(value, target);\n });\n };\n this.give = (value: T) => {\n doReceive(value);\n return this;\n };\n notifyPoolsChange();\n }\n\n public size(): number {\n return this.patrons.size;\n }\n\n public add(shouldBePatron: GuestType<T>) {\n if (!shouldBePatron) {\n throw new Error(\"PatronPool add method received nothing!\");\n }\n if (\n typeof shouldBePatron !== \"function\" &&\n shouldBePatron.introduction &&\n shouldBePatron.introduction() === \"patron\"\n ) {\n this.patrons.add(shouldBePatron);\n }\n notifyPoolsChange();\n return this;\n }\n\n public remove(patron: GuestObjectType<T>) {\n this.patrons.delete(patron);\n notifyPoolsChange();\n return this;\n }\n\n public distribute(receiving: T, possiblePatron: GuestType<T>): this {\n this.add(possiblePatron);\n this.sendValueToGuest(receiving, possiblePatron);\n return this;\n }\n\n public destroy() {\n this.patrons.forEach((patron) => {\n this.remove(patron);\n });\n poolSets.delete(this);\n poolsOfInitiators.delete(this.initiator);\n notifyPoolsChange();\n return this;\n }\n\n private sendValueToGuest(value: T, guest: GuestType<T>) {\n const isDisposed = this.guestDisposed(value, guest);\n if (!isDisposed) {\n give(value, guest);\n }\n return this;\n }\n\n private guestDisposed(value: T, guest: GuestType<T>) {\n if ((guest as GuestDisposableType).disposed?.(value)) {\n this.remove(guest as GuestObjectType);\n return true;\n }\n return false;\n }\n}\n","import { introduction } from \"../Patron/Patron\";\nimport { GuestObjectType, GuestType } from \"../Guest/Guest\";\nimport { guestApplied } from \"../Guest/GuestApplied\";\n\n/**\n * Helps to apply function to patron\n * @url https://silentium-lab.github.io/silentium/#/patron/patron-applied\n */\nexport const patronApplied = <T, R>(\n baseGuest: GuestType<R>,\n applier: (value: T) => R,\n): GuestObjectType<T> => {\n const applied = guestApplied(baseGuest, applier);\n\n const result = {\n give(value: T) {\n applied.give(value);\n return result;\n },\n introduction,\n };\n\n return result;\n};\n","import { introduction } from \"../Patron/Patron\";\nimport { GuestExecutorType, GuestType } from \"../Guest/Guest\";\nimport { guestExecutorApplied } from \"../Guest/GuestExecutorApplied\";\n\n/**\n * Helps to apply function to patrons executor\n * @url https://silentium-lab.github.io/silentium/#/patron/patron-executor-applied\n */\nexport const patronExecutorApplied = <T>(\n baseGuest: GuestType<T>,\n applier: (executor: GuestExecutorType) => GuestExecutorType,\n) => {\n const guestApplied = guestExecutorApplied(baseGuest, applier);\n\n const result = {\n give(value: T) {\n guestApplied.give(value);\n return result;\n },\n introduction,\n };\n\n return result;\n};\n","import { guest, GuestObjectType, GuestType } from \"../Guest/Guest\";\nimport { isPatron } from \"../Patron/Patron\";\nimport { patronOnce } from \"../Patron/PatronOnce\";\nimport { PatronPool } from \"../Patron/PatronPool\";\nimport {\n isSource,\n SourceDataType,\n SourceObjectType,\n SourceType,\n value,\n} from \"./Source\";\n\nexport type SourceChangeableType<T = any> = SourceObjectType<T> &\n GuestObjectType<T>;\n\n/**\n * Ability to create source what can be changed later\n * @url https://silentium-lab.github.io/silentium/#/source/source-of\n */\nexport const sourceOf = <T>(source?: SourceType<T>) => {\n const createdSource = {} as SourceChangeableType<T>;\n const thePool = new PatronPool(createdSource);\n let isEmpty = source === undefined;\n\n if (source !== undefined && isSource(source)) {\n value(\n source,\n patronOnce((unwrappedSourceDocument) => {\n isEmpty = unwrappedSourceDocument === undefined;\n source = unwrappedSourceDocument as SourceDataType<T>;\n }),\n );\n } else {\n isEmpty = source === undefined;\n }\n\n createdSource.value = (g: GuestType<T>) => {\n if (isEmpty) {\n if (isPatron(g)) {\n thePool.add(g);\n }\n return createdSource;\n }\n\n if (typeof g === \"function\") {\n thePool.distribute(source, guest(g));\n } else {\n thePool.distribute(source, g);\n }\n\n return createdSource;\n };\n\n createdSource.give = (value: T) => {\n isEmpty = false;\n source = value as SourceDataType<T>;\n thePool.give(source);\n return createdSource;\n };\n\n return createdSource as SourceChangeableType<T>;\n};\n","import { subSource } from \"../Patron/PatronPool\";\nimport { give, guest, GuestType } from \"../Guest/Guest\";\nimport { guestCast } from \"../Guest/GuestCast\";\nimport { patron } from \"../Patron/Patron\";\nimport { SourceType, value } from \"./Source\";\nimport { sourceOf } from \"./SourceChangeable\";\n\ntype ExtractType<T> = T extends SourceType<infer U> ? U : never;\n\nexport type ExtractTypesFromArray<T extends SourceType<any>[]> = {\n [K in keyof T]: ExtractType<T[K]>;\n};\n\n/**\n * Represents common value as Array of bunch of sources,\n * when all sources will gets it's values\n * @url https://silentium-lab.github.io/silentium/#/source/source-all\n */\nexport const sourceAll = <const T extends SourceType[]>(\n sources: T,\n): SourceType<ExtractTypesFromArray<T>> => {\n const keysKnown = new Set<string>(Object.keys(sources));\n const keysFilled = new Set();\n const isAllFilled = () => {\n return keysFilled.size > 0 && keysFilled.size === keysKnown.size;\n };\n const theAll = sourceOf({});\n\n Object.entries(sources).forEach(([key, source]) => {\n subSource(theAll, source);\n keysKnown.add(key);\n value(\n source,\n patron((v) => {\n theAll.value(\n guest((all: Record<string, unknown>) => {\n keysFilled.add(key);\n const lastAll = {\n ...all,\n [key]: v,\n };\n theAll.give(lastAll);\n }),\n );\n }),\n );\n });\n\n return (guest: GuestType<ExtractTypesFromArray<T>>) => {\n value((g) => {\n theAll.value(\n guestCast(g, (value) => {\n if (isAllFilled()) {\n give(Object.values(value) as ExtractTypesFromArray<T>, g);\n }\n }),\n );\n }, guest);\n };\n};\n","import { give, GuestType } from \"../Guest/Guest\";\nimport { guestCast } from \"../Guest/GuestCast\";\nimport { patronOnce } from \"../Patron/PatronOnce\";\nimport { PersonalType } from \"../Personal/Personal\";\nimport { isSource, SourceType, value } from \"./Source\";\nimport { sourceAll } from \"./SourceAll\";\nimport { sourceOf, SourceChangeableType } from \"./SourceChangeable\";\n\n/**\n * Ability to apply source to source of array values sequentially\n * @url https://silentium-lab.github.io/silentium/#/source/source-sequence\n */\nexport const sourceSequence = <T, TG>(\n baseSource: SourceType<T[]>,\n targetSource: PersonalType<SourceType<TG>>,\n) => {\n if (baseSource === undefined) {\n throw new Error(\"SourceSequence didn't receive baseSource argument\");\n }\n if (targetSource === undefined) {\n throw new Error(\"SourceSequence didn't receive targetSource argument\");\n }\n\n return (guest: GuestType<TG[]>) => {\n const sequenceSource = sourceOf();\n const source = targetSource.get(sequenceSource);\n\n value(\n baseSource,\n guestCast(guest, (theValue) => {\n let index = 0;\n\n const sources: SourceChangeableType[] = [];\n theValue.forEach(() => {\n sources.push(sourceOf());\n });\n\n const nextItemHandle = () => {\n if (theValue[index + 1] !== undefined) {\n index = index + 1;\n handle();\n }\n };\n\n function handle() {\n const currentSource = sources[index];\n const nextValue = theValue[index];\n if (isSource(nextValue)) {\n value(\n nextValue,\n patronOnce((theNextValue) => {\n sequenceSource.give(theNextValue);\n value(source, currentSource);\n nextItemHandle();\n }),\n );\n } else {\n sequenceSource.give(nextValue);\n value(source, currentSource);\n nextItemHandle();\n }\n }\n\n if (theValue[index] !== undefined) {\n handle();\n value(sourceAll(sources), guest);\n } else {\n give([], guest);\n }\n }),\n );\n };\n};\n","import { GuestType } from \"../Guest/Guest\";\nimport { guestCast } from \"../Guest/GuestCast\";\nimport { PersonalType } from \"../Personal/Personal\";\nimport { SourceType, value } from \"./Source\";\nimport { sourceAll } from \"./SourceAll\";\n\n/**\n * Helps to modify many sources with one private source\n * @url https://silentium-lab.github.io/silentium/#/source/source-map\n */\nexport const sourceMap = <T, TG>(\n baseSource: SourceType<T[]>,\n targetSource: PersonalType<SourceType<TG>>,\n) => {\n if (baseSource === undefined) {\n throw new Error(\"SourceMap didn't receive baseSource argument\");\n }\n if (targetSource === undefined) {\n throw new Error(\"SourceMap didn't receive targetSource argument\");\n }\n\n return (guest: GuestType<TG[]>) => {\n value(\n baseSource,\n guestCast(<GuestType>guest, (theValue) => {\n const sources: SourceType[] = [];\n theValue.forEach((val) => {\n const source = targetSource.get(val);\n sources.push(source);\n });\n value(sourceAll(sources), guest);\n }),\n );\n return this;\n };\n};\n","import { give, GuestType } from \"../Guest/Guest\";\nimport { guestCast } from \"../Guest/GuestCast\";\nimport { SourceType, value } from \"./Source\";\n\n/**\n * Connects guest with source what give response faster than others\n * @url https://silentium-lab.github.io/silentium/#/source/source-race\n */\nexport const sourceRace = <T>(sources: SourceType<T>[]) => {\n if (sources === undefined) {\n throw new Error(\"SourceRace didnt receive sources argument\");\n }\n\n return (guest: GuestType<T>) => {\n let connectedWithSource: SourceType | null = null;\n sources.forEach((source) => {\n value(\n source,\n guestCast(<GuestType>guest, (value) => {\n if (!connectedWithSource || connectedWithSource === source) {\n give(value as T, guest);\n connectedWithSource = source;\n }\n }),\n );\n });\n };\n};\n","import { give, GuestType } from \"../Guest/Guest\";\nimport { SourceType, value } from \"./Source\";\nimport { SourceChangeableType } from \"./SourceChangeable\";\n\n/**\n * Ability to build common changeable source from different guest and source\n * @url https://silentium-lab.github.io/silentium/#/source/source-dynamic\n */\nexport const sourceDynamic = <T>(\n baseGuest: GuestType<T>,\n baseSource: SourceType<T>,\n): SourceChangeableType<T> => {\n if (baseGuest === undefined) {\n throw new Error(\"SourceDynamic didn't receive baseGuest argument\");\n }\n if (baseSource === undefined) {\n throw new Error(\"SourceDynamic didn't receive baseSource argument\");\n }\n\n const sourceObject = {\n value(guest: GuestType<T>) {\n value(baseSource, guest);\n return sourceObject;\n },\n give(value: T) {\n give(value, baseGuest);\n return this;\n },\n };\n\n return sourceObject;\n};\n","import { give, GuestType } from \"../Guest/Guest\";\nimport { guestCast } from \"../Guest/GuestCast\";\nimport { SourceType, value } from \"../Source/Source\";\n\n/**\n * Gives ability to apply function to source value\n * @url https://silentium-lab.github.io/silentium/#/source/source-applied\n */\nexport const sourceApplied = <T, R>(\n baseSource: SourceType<T>,\n applier: (v: T) => R,\n) => {\n return (guest: GuestType<R>) => {\n value(\n baseSource,\n guestCast(guest, (v) => {\n give(applier(v), guest);\n }),\n );\n };\n};\n","import { SourceExecutorType, SourceType, value } from \"../Source/Source\";\n\n/**\n * Ability to apply function to source executor, helpful when need to apply throttling or debounce\n * @url https://silentium-lab.github.io/silentium/#/source/source-executor-applied\n */\nexport const sourceExecutorApplied = <T>(\n source: SourceType<T>,\n applier: (executor: SourceExecutorType<T>) => SourceExecutorType<T>,\n) => {\n return applier((g) => {\n value(source, g);\n });\n};\n","import { give, GuestType } from \"../Guest/Guest\";\nimport { guestCast } from \"../Guest/GuestCast\";\nimport { SourceType, value } from \"../Source/Source\";\n\n/**\n * Helps not to respond with information what checked by predicate function\n * @url https://silentium-lab.github.io/silentium/#/source/source-filtered\n */\nexport const sourceFiltered = <T>(\n baseSource: SourceType<T>,\n predicate: (v: T) => boolean,\n) => {\n return (g: GuestType<T>) => {\n value(\n baseSource,\n guestCast(g, (v) => {\n if (predicate(v) === true) {\n give(v, g);\n }\n }),\n );\n };\n};\n","import { GuestType } from \"../Guest/Guest\";\nimport { SourceType, value } from \"./Source\";\nimport { sourceOf } from \"./SourceChangeable\";\n\n/**\n * Ability set the value only once\n * @url https://silentium-lab.github.io/silentium/#/source/source-once\n */\nexport const sourceOnce = <T>(initialValue?: SourceType<T>) => {\n let isFilled = initialValue !== undefined;\n const source = sourceOf(initialValue);\n\n return {\n value(guest: GuestType<T>) {\n value(source, guest);\n return this;\n },\n give(value: T) {\n if (!isFilled) {\n source.give(value);\n isFilled = true;\n }\n return this;\n },\n };\n};\n","import { GuestType } from \"../Guest/Guest\";\nimport { guestSync } from \"../Guest/GuestSync\";\nimport { patron } from \"../Patron/Patron\";\nimport { SourceObjectType, SourceType, value } from \"../Source/Source\";\n\n/**\n * Helps to represent source value as sync value, what can be returned\n * useful for example in tests\n * @url https://silentium-lab.github.io/silentium/#/source/source-sync\n */\nexport const sourceSync = <T>(\n baseSource: SourceType<T>,\n defaultValue?: unknown,\n): SourceObjectType<T> & { syncValue(): T } => {\n const syncGuest = guestSync<T>(defaultValue as T);\n value(baseSource, patron(syncGuest));\n\n return {\n value(guest: GuestType<T>) {\n value(baseSource, guest);\n return this;\n },\n syncValue() {\n try {\n return syncGuest.value() as T;\n } catch {\n throw new Error(\"No value in SourceSync\");\n }\n },\n };\n};\n","import { GuestType } from \"../Guest/Guest\";\nimport { patron } from \"../Patron/Patron\";\nimport { subSourceMany } from \"../Patron/PatronPool\";\nimport { SourceType, value } from \"../Source/Source\";\nimport { ExtractTypesFromArray, sourceAll } from \"../Source/SourceAll\";\nimport { sourceOf } from \"../Source/SourceChangeable\";\n\n/**\n * Simplifies sources combination, when we need to create value depending on many sources\n * @url https://silentium-lab.github.io/silentium/#/source/source-combined\n */\nexport const sourceCombined =\n <const T extends SourceType[]>(...sources: T) =>\n <R>(\n source: (\n guest: GuestType<R>,\n ...sourcesValues: ExtractTypesFromArray<T>\n ) => void,\n ): SourceType<R> => {\n const result = sourceOf<R>();\n subSourceMany(result, sources);\n\n value(\n sourceAll(sources),\n patron((actualValues) => {\n source(result.give, ...actualValues);\n }),\n );\n\n return result.value;\n };\n","import { PersonalType } from \"./Personal\";\n\ninterface Constructable<T> {\n new (...args: unknown[]): T;\n}\n\ninterface Prototyped<T> {\n prototype: T;\n}\n\nexport const personalClass = <T>(\n constructorFn: Prototyped<T>,\n modules: Record<string, unknown> = {},\n): PersonalType<T> => {\n if (constructorFn === undefined) {\n throw new Error(\"PrivateClass didn't receive constructorFn argument\");\n }\n\n return {\n get<R extends unknown[], CT = null>(...args: R): CT extends null ? T : CT {\n return new (constructorFn as Constructable<T>)(\n ...args,\n modules,\n ) as CT extends null ? T : CT;\n },\n };\n};\n","export interface PersonalType<T> {\n get<R extends unknown[], CT = null>(...args: R): CT extends null ? T : CT;\n}\n\n/**\n * Helps to get personal instance of dependency\n * @url https://silentium-lab.github.io/silentium/#/utils/private\n */\nexport const personal = <T>(\n buildingFn: (...args: any[]) => T,\n): PersonalType<T> => {\n if (buildingFn === undefined) {\n throw new Error(\"personal didn't receive buildingFn argument\");\n }\n\n return {\n get<R extends unknown[], CT = null>(...args: R): CT extends null ? T : CT {\n return buildingFn(...args) as CT extends null ? T : CT;\n },\n };\n};\n"],"names":["source","guest","subSource","value"],"mappings":"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"}
1
+ {"version":3,"file":"silentium.cjs","sources":["../src/Source/Source.ts","../src/Guest/Guest.ts","../src/Guest/GuestCast.ts","../src/Guest/GuestSync.ts","../src/Guest/GuestDisposable.ts","../src/Guest/GuestApplied.ts","../src/Guest/GuestExecutorApplied.ts","../src/Patron/Patron.ts","../src/Patron/PatronOnce.ts","../src/Patron/PatronPool.ts","../src/Patron/PatronApplied.ts","../src/Patron/PatronExecutorApplied.ts","../src/Source/SourceChangeable.ts","../src/Source/SourceAll.ts","../src/Source/SourceSequence.ts","../src/Source/SourceMap.ts","../src/Source/SourceRace.ts","../src/Source/SourceDynamic.ts","../src/Source/SourceApplied.ts","../src/Source/SourceExecutorApplied.ts","../src/Source/SourceFiltered.ts","../src/Source/SourceOnce.ts","../src/Source/SourceSync.ts","../src/Source/SourceCombined.ts","../src/Source/SourceAny.ts","../src/Personal/PersonalClass.ts","../src/Personal/Personal.ts"],"sourcesContent":["import { give, GuestType } from \"../Guest/Guest\";\n\nexport type SourceExecutorType<T> = (guest: GuestType<T>) => unknown;\n\nexport interface SourceObjectType<T> {\n value: SourceExecutorType<T>;\n}\n\nexport type SourceDataType<T> = Extract<\n T,\n string | number | boolean | Date | object | Array<unknown> | symbol\n>;\n\nexport type SourceType<T = any> =\n | SourceExecutorType<T>\n | SourceObjectType<T>\n | SourceDataType<T>;\n\n/**\n * Helps to connect source and guest, if you need to get value in guest from source\n * helpful because we don't know what shape of source do we have, it can be function or object or primitive\n * @url https://silentium-lab.github.io/silentium/#/utils/value\n */\nexport const value = <T>(source: SourceType<T>, guest: GuestType<T>) => {\n if (source === undefined || source === null) {\n throw new Error(\"value didn't receive source argument\");\n }\n if (guest === undefined || source === null) {\n throw new Error(\"value didn't receive guest argument\");\n }\n if (typeof source === \"function\") {\n source(guest);\n } else if (\n typeof source === \"object\" &&\n \"value\" in source &&\n typeof source.value === \"function\"\n ) {\n source.value(guest);\n } else {\n give(source as T, guest);\n }\n\n return source;\n};\n\n/**\n * Helps to check what some information is of source shape\n * @url https://silentium-lab.github.io/silentium/#/utils/is-source\n */\nexport const isSource = <T>(\n mbSource: T | SourceType<T>,\n): mbSource is SourceType<T> => {\n if (\n mbSource !== null &&\n typeof mbSource === \"object\" &&\n \"value\" in mbSource &&\n typeof mbSource.value === \"function\"\n ) {\n return true;\n }\n return mbSource !== null && mbSource !== undefined;\n};\n\n/**\n * Represents source as function\n * @url https://silentium-lab.github.io/silentium/#/source\n */\nexport const source = <T>(source: SourceType<T>): SourceExecutorType<T> => {\n if (source === undefined) {\n throw new Error(\"Source constructor didn't receive executor function\");\n }\n\n return (guest: GuestType<T>) => {\n value(source, guest);\n };\n};\n","import { source, SourceExecutorType, SourceType } from \"../Source/Source\";\n\ntype GuestIntroduction = \"guest\" | \"patron\";\n\nexport type GuestExecutorType<T = any, This = void> = (value: T) => This;\n\nexport interface GuestObjectType<T = any> {\n give(value: T): this;\n introduction?(): GuestIntroduction;\n}\n\nexport type GuestType<T = any> = GuestExecutorType<T> | GuestObjectType<T>;\n\n/**\n * Helps to give data to guest, guests can be of different shapes\n * function guest or object guest\n * @url https://silentium-lab.github.io/silentium/#/utils/give\n */\nexport const give = <T>(\n data: T,\n guest?: GuestType<T>,\n): GuestType<T> | SourceExecutorType<T> => {\n if (data === undefined) {\n throw new Error(\"give didn't receive data argument\");\n }\n if (guest === undefined) {\n return source<T>(data as SourceType<T>) as SourceExecutorType<T>;\n }\n if (typeof guest === \"function\") {\n guest(data);\n } else {\n guest.give(data);\n }\n return guest;\n};\n\n/**\n * Helps to check if mbGuest can be used to retrieve value\n * @url https://silentium-lab.github.io/silentium/#/utils/is-guest\n */\nexport const isGuest = (mbGuest: any): mbGuest is GuestType => {\n if (mbGuest === undefined) {\n throw new Error(\"isGuest didnt receive mbGuest argument\");\n }\n return typeof mbGuest === \"function\" || typeof mbGuest?.give === \"function\";\n};\n\n/**\n * Helps to create guest of object type\n * @url https://silentium-lab.github.io/silentium/#/guest\n */\nexport const guest = <T>(receiver: GuestExecutorType<T>) => {\n if (!receiver) {\n throw new Error(\"receiver function was not passed to Guest constructor\");\n }\n const result = {\n give(value: T) {\n receiver(value);\n return result;\n },\n };\n return result;\n};\n","import { give, GuestType } from \"./Guest\";\nimport { GuestDisposableType, MaybeDisposableType } from \"./GuestDisposable\";\n\n/**\n * Helps to inherit guest behavior, its introduction and dispose settings\n * @url https://silentium-lab.github.io/silentium/#/guest/guest-cast\n */\nexport const guestCast = <T>(\n sourceGuest: GuestType<any>,\n targetGuest: GuestType<T>,\n): GuestDisposableType<T> => {\n if (sourceGuest === undefined) {\n throw new Error(\"GuestCast didn't receive sourceGuest argument\");\n }\n if (targetGuest === undefined) {\n throw new Error(\"GuestCast didn't receive targetGuest argument\");\n }\n\n const result = {\n disposed(value: T | null): boolean {\n const maybeDisposable = sourceGuest as MaybeDisposableType;\n return maybeDisposable.disposed ? maybeDisposable.disposed(value) : false;\n },\n give(value: T) {\n give(value, targetGuest);\n return result;\n },\n introduction() {\n if (typeof sourceGuest === \"function\") {\n return \"guest\";\n }\n if (!sourceGuest.introduction) {\n return \"guest\";\n }\n return sourceGuest.introduction();\n },\n };\n\n return result;\n};\n","import { GuestObjectType } from \"./Guest\";\n\nexport interface GuestValueType<T = any> extends GuestObjectType<T> {\n value(): T;\n}\n\n/**\n * @url https://silentium-lab.github.io/silentium/#/guest/guest-sync\n */\nexport const guestSync = <T>(theValue?: T): GuestValueType<T> => {\n const result = {\n give(value: T) {\n theValue = value;\n return result;\n },\n value() {\n if (theValue === undefined) {\n throw new Error(\"no value in GuestSync!\");\n }\n return theValue;\n },\n };\n\n return result;\n};\n","import { give, GuestObjectType, GuestType } from \"./Guest\";\n\nexport interface GuestDisposableType<T = any> extends GuestObjectType<T> {\n disposed(value: T | null): boolean;\n}\n\nexport type MaybeDisposableType<T = any> = Partial<GuestDisposableType<T>>;\n\n/**\n * Connects to guest logic what can tell PatronPool\n * what guest don't need to receive new values\n * @url https://silentium-lab.github.io/silentium/#/guest/guest-disposable\n */\nexport const guestDisposable = <T>(\n guest: GuestType,\n disposeCheck: (value: T | null) => boolean,\n): GuestDisposableType<T> => {\n if (guest === undefined) {\n throw new Error(\"GuestDisposable didn't receive guest argument\");\n }\n if (disposeCheck === undefined) {\n throw new Error(\"GuestDisposable didn't receive disposeCheck argument\");\n }\n\n const result = {\n disposed(value: T | null): boolean {\n return disposeCheck(value);\n },\n give(value: T) {\n give(value, guest);\n return result;\n },\n };\n\n return result;\n};\n","import { give, GuestObjectType, GuestType } from \"../Guest/Guest\";\n\n/**\n * Helps to apply function to value before baseGuest will receive it\n * @url https://silentium-lab.github.io/silentium/#/guest/guest-applied\n */\nexport const guestApplied = <T, R>(\n baseGuest: GuestType<R>,\n applier: (value: T) => R,\n): GuestObjectType<T> => {\n const result = {\n give(value: T) {\n give(applier(value), baseGuest);\n return result;\n },\n };\n return result;\n};\n","import {\n give,\n GuestExecutorType,\n GuestObjectType,\n GuestType,\n} from \"../Guest/Guest\";\n\n/**\n * Apply function to guest function of receiving value, useful for debouncing or throttling\n * @url https://silentium-lab.github.io/silentium/#/guest/guest-executor-applied\n */\nexport const guestExecutorApplied = <T>(\n baseGuest: GuestType<T>,\n applier: (executor: GuestExecutorType<T>) => GuestExecutorType<T>,\n): GuestObjectType<T> => {\n const result = {\n give: applier((v) => give(v, baseGuest)),\n };\n\n return result as GuestObjectType<T>;\n};\n","import { give, GuestType } from \"../Guest/Guest\";\nimport { GuestDisposableType } from \"../Guest/GuestDisposable\";\n\nexport type PatronType<T> = GuestDisposableType<T> & {\n introduction(): \"patron\";\n};\n\n/**\n * Helps to check what incoming object is patron\n * @url https://silentium-lab.github.io/silentium/#/utils/is-patron\n */\nexport const isPatron = (guest: GuestType): guest is PatronType<unknown> =>\n typeof guest === \"object\" &&\n guest !== null &&\n guest?.introduction?.() === \"patron\";\n\nexport const introduction = () => \"patron\" as const;\n\n/**\n * Help to turn existed guest intro patron\n * @url https://silentium-lab.github.io/silentium/#/patron\n */\nexport const patron = <T>(\n willBePatron: GuestType<T>,\n): GuestDisposableType<T> => {\n if (willBePatron === undefined) {\n throw new Error(\"Patron didn't receive willBePatron argument\");\n }\n\n const result = {\n give(value: T) {\n give(value, willBePatron);\n return result;\n },\n disposed(value: T | null): boolean {\n const maybeDisposable = willBePatron as GuestDisposableType;\n return maybeDisposable?.disposed?.(value) || false;\n },\n introduction,\n };\n\n return result;\n};\n","import { introduction } from \"../Patron/Patron\";\nimport { give, GuestType } from \"../Guest/Guest\";\nimport {\n GuestDisposableType,\n MaybeDisposableType,\n} from \"../Guest/GuestDisposable\";\n\n/**\n * Helps to call patron only once, this will be helpful when you\n * need value but you know what value can not be existed at a time of requesting\n * @url https://silentium-lab.github.io/silentium/#/patron/patron-once\n */\nexport const patronOnce = <T>(\n baseGuest: GuestType<T>,\n): GuestDisposableType<T> => {\n if (baseGuest === undefined) {\n throw new Error(\"PatronOnce didn't receive baseGuest argument\");\n }\n\n let received = false;\n\n const result = {\n give(value: T) {\n if (!received) {\n received = true;\n give(value, baseGuest);\n }\n return result;\n },\n disposed(value: T | null): boolean {\n if (received) {\n return true;\n }\n const maybeDisposable = baseGuest as MaybeDisposableType;\n return maybeDisposable.disposed ? maybeDisposable.disposed(value) : false;\n },\n introduction,\n };\n\n return result;\n};\n","import { source, SourceType } from \"../Source/Source\";\nimport { give, GuestObjectType, GuestType } from \"../Guest/Guest\";\nimport { GuestDisposableType } from \"../Guest/GuestDisposable\";\n\nconst poolSets = new Map<PoolType, Set<GuestObjectType>>();\nconst poolsOfInitiators = new Map<SourceType, PoolType>();\nconst subSources = new Map<SourceType, SourceType[]>();\n\nconst poolsChangeFns: (() => void)[] = [];\nconst notifyPoolsChange = () => {\n poolsChangeFns.forEach((fn) => fn());\n};\nconst lastPatronPoolsStatistic = {\n poolsCount: 0,\n patronsCount: 0,\n};\n/**\n * Helps to debug application and see is it have problems with frozen pools\n * @url https://silentium-lab.github.io/silentium/#/utils/patron-pools-statistic\n */\nexport const patronPoolsStatistic = source<{\n poolsCount: number;\n patronsCount: number;\n}>((g) => {\n give(lastPatronPoolsStatistic, g);\n poolsChangeFns.push(() => {\n let patronsCount = 0;\n poolSets.forEach((set) => {\n patronsCount += set.size;\n });\n lastPatronPoolsStatistic.poolsCount = poolSets.size;\n lastPatronPoolsStatistic.patronsCount = patronsCount;\n give(lastPatronPoolsStatistic, g);\n });\n});\n\n/**\n * Helps to connect source and subsource, needed to destroy all sub sources\n * when base source will be destroyed\n * @url https://silentium-lab.github.io/silentium/#/utils/sub-source\n */\nexport const subSource = <T>(\n subSource: SourceType,\n source: SourceType<T>,\n): SourceType<T> => {\n // sub sources can appear only on SourceObjectType\n if (source !== null && typeof source !== \"object\") {\n return source;\n }\n\n if (!subSources.has(source)) {\n subSources.set(source, []);\n }\n\n subSources.get(source)?.push(subSource);\n\n return subSource;\n};\n\n/**\n * Helps to define many sources of one sub source\n */\nexport const subSourceMany = <T>(\n subSourceSrc: SourceType<T>,\n sourcesSrc: SourceType[],\n): SourceType<T> => {\n sourcesSrc.forEach((source) => {\n subSource(subSourceSrc, source);\n });\n return subSourceSrc;\n};\n\n/**\n * Helps to remove all pools of related initiators\n * @url https://silentium-lab.github.io/silentium/#/utils/destroy\n */\nexport const destroy = (initiators: SourceType[]) => {\n initiators.forEach((initiator) => {\n const pool = poolsOfInitiators.get(initiator);\n pool?.destroy();\n const relatedInitiators = subSources.get(initiator);\n if (relatedInitiators) {\n destroy(relatedInitiators);\n }\n });\n};\n\n/**\n * Returns all pools related to one patron\n * @url https://silentium-lab.github.io/silentium/#/utils/patron-pools\n */\nexport const patronPools = (patron: GuestObjectType) => {\n const pools: PoolType[] = [];\n poolSets.forEach((pool, poolInstance) => {\n if (pool.has(patron)) {\n pools.push(poolInstance);\n }\n });\n return pools;\n};\n\n/**\n * Removes patron from all existed pools\n * @url https://silentium-lab.github.io/silentium/#/utils/remove-patron-from-pools\n */\nexport const removePatronFromPools = (patron: GuestObjectType) => {\n if (patron === undefined) {\n throw new Error(\"removePatronFromPools didn't receive patron argument\");\n }\n poolSets.forEach((pool) => {\n pool.delete(patron);\n });\n};\n\n/**\n * Checks what patron is connected with any pool\n * @url https://silentium-lab.github.io/silentium/#/utils/is-patron-in-pools\n */\nexport const isPatronInPools = (patron: GuestObjectType) => {\n if (patron === undefined) {\n throw new Error(\"isPatronInPools didn't receive patron argument\");\n }\n let inPool = false;\n poolSets.forEach((pool) => {\n if (!inPool) {\n inPool = pool.has(patron);\n }\n });\n return inPool;\n};\n\nexport interface PoolType<T = any> extends GuestObjectType<T> {\n add(guest: GuestObjectType<T>): this;\n distribute(receiving: T, possiblePatron: GuestObjectType<T>): this;\n remove(patron: GuestObjectType<T>): this;\n size(): number;\n destroy(): void;\n}\n\n/**\n * Pool class helps to implement dispatching for patron about new values\n * what may appear in sources\n * @url https://silentium-lab.github.io/silentium/#/patron/patron-pool\n */\nexport class PatronPool<T> implements PoolType<T> {\n private patrons: Set<GuestObjectType<T>>;\n\n public give: (value: T) => this;\n\n public constructor(private initiator: SourceType) {\n this.patrons = new Set<GuestObjectType<T>>();\n poolSets.set(this, this.patrons);\n poolsOfInitiators.set(this.initiator, this);\n const doReceive = (value: T) => {\n this.patrons.forEach((target) => {\n this.sendValueToGuest(value, target);\n });\n };\n this.give = (value: T) => {\n doReceive(value);\n return this;\n };\n notifyPoolsChange();\n }\n\n public size(): number {\n return this.patrons.size;\n }\n\n public add(shouldBePatron: GuestType<T>) {\n if (!shouldBePatron) {\n throw new Error(\"PatronPool add method received nothing!\");\n }\n if (\n typeof shouldBePatron !== \"function\" &&\n shouldBePatron.introduction &&\n shouldBePatron.introduction() === \"patron\"\n ) {\n this.patrons.add(shouldBePatron);\n }\n notifyPoolsChange();\n return this;\n }\n\n public remove(patron: GuestObjectType<T>) {\n this.patrons.delete(patron);\n notifyPoolsChange();\n return this;\n }\n\n public distribute(receiving: T, possiblePatron: GuestType<T>): this {\n this.add(possiblePatron);\n this.sendValueToGuest(receiving, possiblePatron);\n return this;\n }\n\n public destroy() {\n this.patrons.forEach((patron) => {\n this.remove(patron);\n });\n poolSets.delete(this);\n poolsOfInitiators.delete(this.initiator);\n notifyPoolsChange();\n return this;\n }\n\n private sendValueToGuest(value: T, guest: GuestType<T>) {\n const isDisposed = this.guestDisposed(value, guest);\n if (!isDisposed) {\n give(value, guest);\n }\n return this;\n }\n\n private guestDisposed(value: T, guest: GuestType<T>) {\n if ((guest as GuestDisposableType).disposed?.(value)) {\n this.remove(guest as GuestObjectType);\n return true;\n }\n return false;\n }\n}\n","import { introduction } from \"../Patron/Patron\";\nimport { GuestObjectType, GuestType } from \"../Guest/Guest\";\nimport { guestApplied } from \"../Guest/GuestApplied\";\n\n/**\n * Helps to apply function to patron\n * @url https://silentium-lab.github.io/silentium/#/patron/patron-applied\n */\nexport const patronApplied = <T, R>(\n baseGuest: GuestType<R>,\n applier: (value: T) => R,\n): GuestObjectType<T> => {\n const applied = guestApplied(baseGuest, applier);\n\n const result = {\n give(value: T) {\n applied.give(value);\n return result;\n },\n introduction,\n };\n\n return result;\n};\n","import { introduction } from \"../Patron/Patron\";\nimport { GuestExecutorType, GuestType } from \"../Guest/Guest\";\nimport { guestExecutorApplied } from \"../Guest/GuestExecutorApplied\";\n\n/**\n * Helps to apply function to patrons executor\n * @url https://silentium-lab.github.io/silentium/#/patron/patron-executor-applied\n */\nexport const patronExecutorApplied = <T>(\n baseGuest: GuestType<T>,\n applier: (executor: GuestExecutorType) => GuestExecutorType,\n) => {\n const guestApplied = guestExecutorApplied(baseGuest, applier);\n\n const result = {\n give(value: T) {\n guestApplied.give(value);\n return result;\n },\n introduction,\n };\n\n return result;\n};\n","import { guest, GuestObjectType, GuestType } from \"../Guest/Guest\";\nimport { isPatron } from \"../Patron/Patron\";\nimport { patronOnce } from \"../Patron/PatronOnce\";\nimport { PatronPool } from \"../Patron/PatronPool\";\nimport {\n isSource,\n SourceDataType,\n SourceObjectType,\n SourceType,\n value,\n} from \"./Source\";\n\nexport type SourceChangeableType<T = any> = SourceObjectType<T> &\n GuestObjectType<T>;\n\n/**\n * Ability to create source what can be changed later\n * @url https://silentium-lab.github.io/silentium/#/source/source-of\n */\nexport const sourceOf = <T>(source?: SourceType<T>) => {\n const createdSource = {} as SourceChangeableType<T>;\n const thePool = new PatronPool(createdSource);\n let isEmpty = source === undefined;\n\n if (source !== undefined && isSource(source)) {\n value(\n source,\n patronOnce((unwrappedSourceDocument) => {\n isEmpty = unwrappedSourceDocument === undefined;\n source = unwrappedSourceDocument as SourceDataType<T>;\n }),\n );\n } else {\n isEmpty = source === undefined;\n }\n\n createdSource.value = (g: GuestType<T>) => {\n if (isEmpty) {\n if (isPatron(g)) {\n thePool.add(g);\n }\n return createdSource;\n }\n\n if (typeof g === \"function\") {\n thePool.distribute(source, guest(g));\n } else {\n thePool.distribute(source, g);\n }\n\n return createdSource;\n };\n\n createdSource.give = (value: T) => {\n isEmpty = false;\n source = value as SourceDataType<T>;\n thePool.give(source);\n return createdSource;\n };\n\n return createdSource as SourceChangeableType<T>;\n};\n","import { subSource } from \"../Patron/PatronPool\";\nimport { give, guest, GuestType } from \"../Guest/Guest\";\nimport { guestCast } from \"../Guest/GuestCast\";\nimport { patron } from \"../Patron/Patron\";\nimport { SourceType, value } from \"./Source\";\nimport { sourceOf } from \"./SourceChangeable\";\n\ntype ExtractType<T> = T extends SourceType<infer U> ? U : never;\n\nexport type ExtractTypesFromArray<T extends SourceType<any>[]> = {\n [K in keyof T]: ExtractType<T[K]>;\n};\n\n/**\n * Represents common value as Array of bunch of sources,\n * when all sources will gets it's values\n * @url https://silentium-lab.github.io/silentium/#/source/source-all\n */\nexport const sourceAll = <const T extends SourceType[]>(\n sources: T,\n): SourceType<ExtractTypesFromArray<T>> => {\n const keysKnown = new Set<string>(Object.keys(sources));\n const keysFilled = new Set();\n const isAllFilled = () => {\n return keysFilled.size > 0 && keysFilled.size === keysKnown.size;\n };\n const theAll = sourceOf({});\n\n Object.entries(sources).forEach(([key, source]) => {\n subSource(theAll, source);\n keysKnown.add(key);\n value(\n source,\n patron((v) => {\n theAll.value(\n guest((all: Record<string, unknown>) => {\n keysFilled.add(key);\n const lastAll = {\n ...all,\n [key]: v,\n };\n theAll.give(lastAll);\n }),\n );\n }),\n );\n });\n\n return (guest: GuestType<ExtractTypesFromArray<T>>) => {\n value((g) => {\n theAll.value(\n guestCast(g, (value) => {\n if (isAllFilled()) {\n give(Object.values(value) as ExtractTypesFromArray<T>, g);\n }\n }),\n );\n }, guest);\n };\n};\n","import { give, GuestType } from \"../Guest/Guest\";\nimport { guestCast } from \"../Guest/GuestCast\";\nimport { patronOnce } from \"../Patron/PatronOnce\";\nimport { PersonalType } from \"../Personal/Personal\";\nimport { isSource, SourceType, value } from \"./Source\";\nimport { sourceAll } from \"./SourceAll\";\nimport { sourceOf, SourceChangeableType } from \"./SourceChangeable\";\n\n/**\n * Ability to apply source to source of array values sequentially\n * @url https://silentium-lab.github.io/silentium/#/source/source-sequence\n */\nexport const sourceSequence = <T, TG>(\n baseSource: SourceType<T[]>,\n targetSource: PersonalType<SourceType<TG>>,\n) => {\n if (baseSource === undefined) {\n throw new Error(\"SourceSequence didn't receive baseSource argument\");\n }\n if (targetSource === undefined) {\n throw new Error(\"SourceSequence didn't receive targetSource argument\");\n }\n\n return (guest: GuestType<TG[]>) => {\n const sequenceSource = sourceOf();\n const source = targetSource.get(sequenceSource);\n\n value(\n baseSource,\n guestCast(guest, (theValue) => {\n let index = 0;\n\n const sources: SourceChangeableType[] = [];\n theValue.forEach(() => {\n sources.push(sourceOf());\n });\n\n const nextItemHandle = () => {\n if (theValue[index + 1] !== undefined) {\n index = index + 1;\n handle();\n }\n };\n\n function handle() {\n const currentSource = sources[index];\n const nextValue = theValue[index];\n if (isSource(nextValue)) {\n value(\n nextValue,\n patronOnce((theNextValue) => {\n sequenceSource.give(theNextValue);\n value(source, currentSource);\n nextItemHandle();\n }),\n );\n } else {\n sequenceSource.give(nextValue);\n value(source, currentSource);\n nextItemHandle();\n }\n }\n\n if (theValue[index] !== undefined) {\n handle();\n value(sourceAll(sources), guest);\n } else {\n give([], guest);\n }\n }),\n );\n };\n};\n","import { GuestType } from \"../Guest/Guest\";\nimport { guestCast } from \"../Guest/GuestCast\";\nimport { PersonalType } from \"../Personal/Personal\";\nimport { SourceType, value } from \"./Source\";\nimport { sourceAll } from \"./SourceAll\";\n\n/**\n * Helps to modify many sources with one private source\n * @url https://silentium-lab.github.io/silentium/#/source/source-map\n */\nexport const sourceMap = <T, TG>(\n baseSource: SourceType<T[]>,\n targetSource: PersonalType<SourceType<TG>>,\n) => {\n if (baseSource === undefined) {\n throw new Error(\"SourceMap didn't receive baseSource argument\");\n }\n if (targetSource === undefined) {\n throw new Error(\"SourceMap didn't receive targetSource argument\");\n }\n\n return (guest: GuestType<TG[]>) => {\n value(\n baseSource,\n guestCast(<GuestType>guest, (theValue) => {\n const sources: SourceType[] = [];\n theValue.forEach((val) => {\n const source = targetSource.get(val);\n sources.push(source);\n });\n value(sourceAll(sources), guest);\n }),\n );\n return this;\n };\n};\n","import { give, GuestType } from \"../Guest/Guest\";\nimport { guestCast } from \"../Guest/GuestCast\";\nimport { SourceType, value } from \"./Source\";\n\n/**\n * Connects guest with source what give response faster than others\n * @url https://silentium-lab.github.io/silentium/#/source/source-race\n */\nexport const sourceRace = <T>(sources: SourceType<T>[]) => {\n if (sources === undefined) {\n throw new Error(\"SourceRace didnt receive sources argument\");\n }\n\n return (guest: GuestType<T>) => {\n let connectedWithSource: SourceType | null = null;\n sources.forEach((source) => {\n value(\n source,\n guestCast(<GuestType>guest, (value) => {\n if (!connectedWithSource || connectedWithSource === source) {\n give(value as T, guest);\n connectedWithSource = source;\n }\n }),\n );\n });\n };\n};\n","import { give, GuestType } from \"../Guest/Guest\";\nimport { SourceType, value } from \"./Source\";\nimport { SourceChangeableType } from \"./SourceChangeable\";\n\n/**\n * Ability to build common changeable source from different guest and source\n * @url https://silentium-lab.github.io/silentium/#/source/source-dynamic\n */\nexport const sourceDynamic = <T>(\n baseGuest: GuestType<T>,\n baseSource: SourceType<T>,\n): SourceChangeableType<T> => {\n if (baseGuest === undefined) {\n throw new Error(\"SourceDynamic didn't receive baseGuest argument\");\n }\n if (baseSource === undefined) {\n throw new Error(\"SourceDynamic didn't receive baseSource argument\");\n }\n\n const sourceObject = {\n value(guest: GuestType<T>) {\n value(baseSource, guest);\n return sourceObject;\n },\n give(value: T) {\n give(value, baseGuest);\n return this;\n },\n };\n\n return sourceObject;\n};\n","import { give, GuestType } from \"../Guest/Guest\";\nimport { guestCast } from \"../Guest/GuestCast\";\nimport { SourceType, value } from \"../Source/Source\";\n\n/**\n * Gives ability to apply function to source value\n * @url https://silentium-lab.github.io/silentium/#/source/source-applied\n */\nexport const sourceApplied = <T, R>(\n baseSource: SourceType<T>,\n applier: (v: T) => R,\n) => {\n return (guest: GuestType<R>) => {\n value(\n baseSource,\n guestCast(guest, (v) => {\n give(applier(v), guest);\n }),\n );\n };\n};\n","import { SourceExecutorType, SourceType, value } from \"../Source/Source\";\n\n/**\n * Ability to apply function to source executor, helpful when need to apply throttling or debounce\n * @url https://silentium-lab.github.io/silentium/#/source/source-executor-applied\n */\nexport const sourceExecutorApplied = <T>(\n source: SourceType<T>,\n applier: (executor: SourceExecutorType<T>) => SourceExecutorType<T>,\n) => {\n return applier((g) => {\n value(source, g);\n });\n};\n","import { give, GuestType } from \"../Guest/Guest\";\nimport { guestCast } from \"../Guest/GuestCast\";\nimport { SourceType, value } from \"../Source/Source\";\n\n/**\n * Helps not to respond with information what checked by predicate function\n * @url https://silentium-lab.github.io/silentium/#/source/source-filtered\n */\nexport const sourceFiltered = <T>(\n baseSource: SourceType<T>,\n predicate: (v: T) => boolean,\n) => {\n return (g: GuestType<T>) => {\n value(\n baseSource,\n guestCast(g, (v) => {\n if (predicate(v) === true) {\n give(v, g);\n }\n }),\n );\n };\n};\n","import { GuestType } from \"../Guest/Guest\";\nimport { SourceType, value } from \"./Source\";\nimport { sourceOf } from \"./SourceChangeable\";\n\n/**\n * Ability set the value only once\n * @url https://silentium-lab.github.io/silentium/#/source/source-once\n */\nexport const sourceOnce = <T>(initialValue?: SourceType<T>) => {\n let isFilled = initialValue !== undefined;\n const source = sourceOf(initialValue);\n\n return {\n value(guest: GuestType<T>) {\n value(source, guest);\n return this;\n },\n give(value: T) {\n if (!isFilled) {\n source.give(value);\n isFilled = true;\n }\n return this;\n },\n };\n};\n","import { GuestType } from \"../Guest/Guest\";\nimport { guestSync } from \"../Guest/GuestSync\";\nimport { patron } from \"../Patron/Patron\";\nimport { SourceObjectType, SourceType, value } from \"../Source/Source\";\n\n/**\n * Helps to represent source value as sync value, what can be returned\n * useful for example in tests\n * @url https://silentium-lab.github.io/silentium/#/source/source-sync\n */\nexport const sourceSync = <T>(\n baseSource: SourceType<T>,\n defaultValue?: unknown,\n): SourceObjectType<T> & { syncValue(): T } => {\n const syncGuest = guestSync<T>(defaultValue as T);\n value(baseSource, patron(syncGuest));\n\n return {\n value(guest: GuestType<T>) {\n value(baseSource, guest);\n return this;\n },\n syncValue() {\n try {\n return syncGuest.value() as T;\n } catch {\n throw new Error(\"No value in SourceSync\");\n }\n },\n };\n};\n","import { GuestType } from \"../Guest/Guest\";\nimport { patron } from \"../Patron/Patron\";\nimport { subSourceMany } from \"../Patron/PatronPool\";\nimport { SourceType, value } from \"../Source/Source\";\nimport { ExtractTypesFromArray, sourceAll } from \"../Source/SourceAll\";\nimport { sourceOf } from \"../Source/SourceChangeable\";\n\n/**\n * Simplifies sources combination, when we need to create value depending on many sources\n * @url https://silentium-lab.github.io/silentium/#/source/source-combined\n */\nexport const sourceCombined =\n <const T extends SourceType[]>(...sources: T) =>\n <R>(\n source: (\n guest: GuestType<R>,\n ...sourcesValues: ExtractTypesFromArray<T>\n ) => void,\n ): SourceType<R> => {\n const result = sourceOf<R>();\n subSourceMany(result, sources);\n\n value(\n sourceAll(sources),\n patron((actualValues) => {\n source(result.give, ...actualValues);\n }),\n );\n\n return result.value;\n };\n","import { patron } from \"../Patron/Patron\";\nimport { SourceType, value } from \"../Source/Source\";\nimport { sourceOf } from \"../Source/SourceChangeable\";\n\n/**\n * Present source of value what was last appeared in any\n * of given sources, can be used as default value, when some source\n * don't respond\n * @url https://silentium-lab.github.io/silentium/#/source/source-any\n */\nexport const sourceAny = <T>(sources: SourceType<T>[]) => {\n const lastSrc = sourceOf<T>();\n sources.forEach((source) => {\n value(source, patron(lastSrc));\n });\n\n return lastSrc;\n};\n","import { PersonalType } from \"./Personal\";\n\ninterface Constructable<T> {\n new (...args: unknown[]): T;\n}\n\ninterface Prototyped<T> {\n prototype: T;\n}\n\nexport const personalClass = <T>(\n constructorFn: Prototyped<T>,\n modules: Record<string, unknown> = {},\n): PersonalType<T> => {\n if (constructorFn === undefined) {\n throw new Error(\"PrivateClass didn't receive constructorFn argument\");\n }\n\n return {\n get<R extends unknown[], CT = null>(...args: R): CT extends null ? T : CT {\n return new (constructorFn as Constructable<T>)(\n ...args,\n modules,\n ) as CT extends null ? T : CT;\n },\n };\n};\n","export interface PersonalType<T> {\n get<R extends unknown[], CT = null>(...args: R): CT extends null ? T : CT;\n}\n\n/**\n * Helps to get personal instance of dependency\n * @url https://silentium-lab.github.io/silentium/#/utils/private\n */\nexport const personal = <T>(\n buildingFn: (...args: any[]) => T,\n): PersonalType<T> => {\n if (buildingFn === undefined) {\n throw new Error(\"personal didn't receive buildingFn argument\");\n }\n\n return {\n get<R extends unknown[], CT = null>(...args: R): CT extends null ? T : CT {\n return buildingFn(...args) as CT extends null ? T : CT;\n },\n };\n};\n"],"names":["source","guest","subSource","value"],"mappings":"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"}
@@ -278,9 +278,17 @@ declare const sourceSync: <T>(baseSource: SourceType<T>, defaultValue?: unknown)
278
278
  */
279
279
  declare const sourceCombined: <const T extends SourceType[]>(...sources: T) => <R>(source: (guest: GuestType<R>, ...sourcesValues: ExtractTypesFromArray<T>) => void) => SourceType<R>;
280
280
 
281
+ /**
282
+ * Present source of value what was last appeared in any
283
+ * of given sources, can be used as default value, when some source
284
+ * don't respond
285
+ * @url https://silentium-lab.github.io/silentium/#/source/source-any
286
+ */
287
+ declare const sourceAny: <T>(sources: SourceType<T>[]) => SourceChangeableType<T>;
288
+
281
289
  interface Prototyped<T> {
282
290
  prototype: T;
283
291
  }
284
292
  declare const personalClass: <T>(constructorFn: Prototyped<T>, modules?: Record<string, unknown>) => PersonalType<T>;
285
293
 
286
- export { type ExtractTypesFromArray, type GuestDisposableType, type GuestExecutorType, type GuestObjectType, type GuestType, type GuestValueType, type MaybeDisposableType, PatronPool, type PatronType, type PersonalType, type PoolType, type SourceChangeableType, type SourceDataType, type SourceExecutorType, type SourceObjectType, type SourceType, destroy, give, guest, guestApplied, guestCast, guestDisposable, guestExecutorApplied, guestSync, introduction, isGuest, isPatron, isPatronInPools, isSource, patron, patronApplied, patronExecutorApplied, patronOnce, patronPools, patronPoolsStatistic, personal, personalClass, removePatronFromPools, source, sourceAll, sourceApplied, sourceCombined, sourceDynamic, sourceExecutorApplied, sourceFiltered, sourceMap, sourceOf, sourceOnce, sourceRace, sourceSequence, sourceSync, subSource, subSourceMany, value };
294
+ export { type ExtractTypesFromArray, type GuestDisposableType, type GuestExecutorType, type GuestObjectType, type GuestType, type GuestValueType, type MaybeDisposableType, PatronPool, type PatronType, type PersonalType, type PoolType, type SourceChangeableType, type SourceDataType, type SourceExecutorType, type SourceObjectType, type SourceType, destroy, give, guest, guestApplied, guestCast, guestDisposable, guestExecutorApplied, guestSync, introduction, isGuest, isPatron, isPatronInPools, isSource, patron, patronApplied, patronExecutorApplied, patronOnce, patronPools, patronPoolsStatistic, personal, personalClass, removePatronFromPools, source, sourceAll, sourceAny, sourceApplied, sourceCombined, sourceDynamic, sourceExecutorApplied, sourceFiltered, sourceMap, sourceOf, sourceOnce, sourceRace, sourceSequence, sourceSync, subSource, subSourceMany, value };
package/dist/silentium.js CHANGED
@@ -631,6 +631,14 @@ const sourceCombined = (...sources) => (source) => {
631
631
  return result.value;
632
632
  };
633
633
 
634
+ const sourceAny = (sources) => {
635
+ const lastSrc = sourceOf();
636
+ sources.forEach((source) => {
637
+ value(source, patron(lastSrc));
638
+ });
639
+ return lastSrc;
640
+ };
641
+
634
642
  const personalClass = (constructorFn, modules = {}) => {
635
643
  if (constructorFn === void 0) {
636
644
  throw new Error("PrivateClass didn't receive constructorFn argument");
@@ -656,5 +664,5 @@ const personal = (buildingFn) => {
656
664
  };
657
665
  };
658
666
 
659
- export { PatronPool, destroy, give, guest, guestApplied, guestCast, guestDisposable, guestExecutorApplied, guestSync, introduction, isGuest, isPatron, isPatronInPools, isSource, patron, patronApplied, patronExecutorApplied, patronOnce, patronPools, patronPoolsStatistic, personal, personalClass, removePatronFromPools, source, sourceAll, sourceApplied, sourceCombined, sourceDynamic, sourceExecutorApplied, sourceFiltered, sourceMap, sourceOf, sourceOnce, sourceRace, sourceSequence, sourceSync, subSource, subSourceMany, value };
667
+ export { PatronPool, destroy, give, guest, guestApplied, guestCast, guestDisposable, guestExecutorApplied, guestSync, introduction, isGuest, isPatron, isPatronInPools, isSource, patron, patronApplied, patronExecutorApplied, patronOnce, patronPools, patronPoolsStatistic, personal, personalClass, removePatronFromPools, source, sourceAll, sourceAny, sourceApplied, sourceCombined, sourceDynamic, sourceExecutorApplied, sourceFiltered, sourceMap, sourceOf, sourceOnce, sourceRace, sourceSequence, sourceSync, subSource, subSourceMany, value };
660
668
  //# sourceMappingURL=silentium.js.map