silentium 0.0.34 → 0.0.36
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/.github/workflows/node.js.yml +31 -0
- package/CHANGELOG.md +22 -0
- package/README.md +32 -2
- package/dist/silentium.cjs +37 -10
- package/dist/silentium.cjs.map +1 -1
- package/dist/silentium.d.ts +9 -2
- package/dist/silentium.js +37 -11
- 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 +37 -11
- package/dist/silentium.mjs.map +1 -1
- package/docs/assets/js/index.mjs +11 -1
- package/docs/build.sh +3 -3
- package/docs/buildRoutes.sh +1 -1
- package/docs/index-dev.html +2 -2
- package/docs/index.html +5 -5
- package/docs/pages/compatibility/dip.html +3 -3
- package/docs/pages/en/compatibility/dip.html +3 -3
- package/docs/pages/en/examples/errors.html +55 -116
- package/docs/pages/en/guest/guest-applied.html +9 -19
- package/docs/pages/en/guest/guest-cast.html +70 -140
- package/docs/pages/en/guest/guest-disposable.html +30 -58
- package/docs/pages/en/guest/guest-executor-applied.html +15 -34
- package/docs/pages/en/guest/guest-sync.html +13 -22
- package/docs/pages/en/guest/index.html +3 -3
- package/docs/pages/en/guest.html +22 -37
- package/docs/pages/en/patron/index.html +1 -1
- package/docs/pages/en/patron/patron-applied.html +17 -32
- package/docs/pages/en/patron/patron-executor-applied.html +14 -40
- package/docs/pages/en/patron/patron-once.html +18 -35
- package/docs/pages/en/patron/patron-pool.html +5 -20
- package/docs/pages/en/patron.html +21 -23
- package/docs/pages/en/philosofy.html +2 -2
- package/docs/pages/en/source/index.html +2 -2
- package/docs/pages/en/source/source-all.html +12 -69
- package/docs/pages/en/source/source-applied.html +29 -40
- package/docs/pages/en/source/source-changeable.html +18 -37
- package/docs/pages/en/source/source-dynamic.html +25 -44
- package/docs/pages/en/source/source-executor-applied.html +21 -42
- package/docs/pages/en/source/source-filtered.html +16 -32
- package/docs/pages/en/source/source-map.html +44 -105
- package/docs/pages/en/source/source-once.html +10 -32
- package/docs/pages/en/source/source-race.html +16 -57
- package/docs/pages/en/source/source-sequence.html +23 -82
- package/docs/pages/en/source/source-sync.html +11 -17
- package/docs/pages/en/source/source.html +2 -2
- package/docs/pages/en/source.html +46 -82
- package/docs/pages/en/terminology/introduction.html +1 -1
- package/docs/pages/en/terminology/source.html +2 -2
- package/docs/pages/en/utils/give.html +2 -2
- package/docs/pages/en/utils/is-guest-aware.html +1 -1
- package/docs/pages/en/utils/is-guest.html +1 -1
- package/docs/pages/en/utils/is-patron-in-pools.html +1 -1
- package/docs/pages/en/utils/is-source.html +1 -1
- package/docs/pages/en/utils/private.html +2 -2
- package/docs/pages/en/utils/remove-patron-from-pools.html +1 -1
- package/docs/pages/en/utils/source-of.html +1 -1
- package/docs/pages/en/utils/value.html +2 -2
- package/docs/pages/examples/errors.html +54 -115
- package/docs/pages/guest/guest-applied.html +8 -25
- package/docs/pages/guest/guest-cast.html +69 -144
- package/docs/pages/guest/guest-disposable.html +8 -37
- package/docs/pages/guest/guest-executor-applied.html +15 -38
- package/docs/pages/guest/guest-sync.html +12 -19
- package/docs/pages/guest/index.html +3 -3
- package/docs/pages/guest.html +24 -39
- package/docs/pages/patron/index.html +1 -1
- package/docs/pages/patron/patron-applied.html +17 -32
- package/docs/pages/patron/patron-executor-applied.html +26 -52
- package/docs/pages/patron/patron-once.html +13 -30
- package/docs/pages/patron/patron-pool.html +16 -31
- package/docs/pages/patron.html +40 -74
- package/docs/pages/philosofy.html +2 -2
- package/docs/pages/source/index.html +2 -2
- package/docs/pages/source/source-all.html +11 -68
- package/docs/pages/source/source-applied.html +9 -32
- package/docs/pages/source/source-changeable.html +14 -33
- package/docs/pages/source/source-dynamic.html +25 -44
- package/docs/pages/source/source-executor-applied.html +20 -41
- package/docs/pages/source/source-filtered.html +16 -32
- package/docs/pages/source/source-map.html +44 -105
- package/docs/pages/source/source-once.html +7 -29
- package/docs/pages/source/source-race.html +16 -57
- package/docs/pages/source/source-sequence.html +22 -81
- package/docs/pages/source/source-sync.html +11 -17
- package/docs/pages/source/source.html +2 -2
- package/docs/pages/source.html +45 -82
- package/docs/pages/terminology/introduction.html +1 -1
- package/docs/pages/terminology/source.html +2 -2
- package/docs/pages/utils/give.html +2 -2
- package/docs/pages/utils/is-guest-aware.html +1 -1
- package/docs/pages/utils/is-guest.html +1 -1
- package/docs/pages/utils/is-patron-in-pools.html +1 -1
- package/docs/pages/utils/is-source.html +1 -1
- package/docs/pages/utils/private.html +2 -2
- package/docs/pages/utils/remove-patron-from-pools.html +1 -1
- package/docs/pages/utils/source-of.html +1 -1
- package/docs/pages/utils/value.html +2 -2
- package/docs/routes.json +1 -1
- package/docs/template.html +2 -2
- package/package.json +1 -1
- package/src/Source/SourceLazy.ts +23 -10
- package/src/index.ts +1 -0
- package/docs/assets/js/lib/StyleFetched.mjs +0 -19
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
# This workflow will do a clean installation of node dependencies, cache/restore them, build the source code and run tests across different versions of node
|
|
2
|
+
# For more information see: https://docs.github.com/en/actions/automating-builds-and-tests/building-and-testing-nodejs
|
|
3
|
+
|
|
4
|
+
name: Node.js CI
|
|
5
|
+
|
|
6
|
+
on:
|
|
7
|
+
push:
|
|
8
|
+
branches: [ "main" ]
|
|
9
|
+
pull_request:
|
|
10
|
+
branches: [ "main" ]
|
|
11
|
+
|
|
12
|
+
jobs:
|
|
13
|
+
build:
|
|
14
|
+
|
|
15
|
+
runs-on: ubuntu-latest
|
|
16
|
+
|
|
17
|
+
strategy:
|
|
18
|
+
matrix:
|
|
19
|
+
node-version: [18.x, 20.x, 22.x]
|
|
20
|
+
# See supported Node.js release schedule at https://nodejs.org/en/about/releases/
|
|
21
|
+
|
|
22
|
+
steps:
|
|
23
|
+
- uses: actions/checkout@v4
|
|
24
|
+
- name: Use Node.js ${{ matrix.node-version }}
|
|
25
|
+
uses: actions/setup-node@v4
|
|
26
|
+
with:
|
|
27
|
+
node-version: ${{ matrix.node-version }}
|
|
28
|
+
cache: 'npm'
|
|
29
|
+
- run: npm ci
|
|
30
|
+
- run: npm run build --if-present
|
|
31
|
+
- run: npm test
|
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,28 @@
|
|
|
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.36](https://github.com/silentium-lab/silentium/compare/v0.0.35...v0.0.36) (2025-05-31)
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
### Features
|
|
9
|
+
|
|
10
|
+
* **47-sourcelazy-component:** source lazy done ([ed97056](https://github.com/silentium-lab/silentium/commit/ed9705603913451e22ed6994005f6a5b656dacde))
|
|
11
|
+
|
|
12
|
+
### [0.0.35](https://github.com/silentium-lab/silentium/compare/v0.0.34...v0.0.35) (2025-05-25)
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
### Features
|
|
16
|
+
|
|
17
|
+
* **main:** fix docs ([9aa9c9d](https://github.com/silentium-lab/silentium/commit/9aa9c9d01b1e7c40691a94eb8fc53b3c4fb5c2d6))
|
|
18
|
+
* **main:** fixes for code examples ([a2ce207](https://github.com/silentium-lab/silentium/commit/a2ce2071ea8cb3be1c7976f2d6c4c29e7bfae97a))
|
|
19
|
+
* **main:** guest applied en done ([4fee232](https://github.com/silentium-lab/silentium/commit/4fee23232873f188a3f4d8f963502460a85742ad))
|
|
20
|
+
* **main:** guest cast done ([8c3632d](https://github.com/silentium-lab/silentium/commit/8c3632dd86dc52d0cb9ec4ad99667748e26d6a9d))
|
|
21
|
+
* **main:** guest cast ru done ([db0cbcd](https://github.com/silentium-lab/silentium/commit/db0cbcd0ab5d2d3f040aeaba360013b5a12bffc8))
|
|
22
|
+
* **main:** guest disposable done ([dcebfff](https://github.com/silentium-lab/silentium/commit/dcebfff46621785b34c4747be417211292b944f0))
|
|
23
|
+
* **main:** guest syn and guest done ([ced7528](https://github.com/silentium-lab/silentium/commit/ced7528175223289e5666ffcb76e94438a351c05))
|
|
24
|
+
* **main:** patron page ([54da1c0](https://github.com/silentium-lab/silentium/commit/54da1c0b175615a8e8aff3d61529ea15ac804150))
|
|
25
|
+
* **main:** source sync and errors done ([4210875](https://github.com/silentium-lab/silentium/commit/4210875d2e0259c56d4ac586c8ca15c34c4a6ef7))
|
|
26
|
+
|
|
5
27
|
### [0.0.34](https://github.com/silentium-lab/silentium/compare/v0.0.33...v0.0.34) (2025-05-21)
|
|
6
28
|
|
|
7
29
|
|
package/README.md
CHANGED
|
@@ -1,3 +1,33 @@
|
|
|
1
|
-
|
|
1
|
+
<p align="center">
|
|
2
|
+
<a href="https://silentium-lab.github.io/silentium/#/en/" target="_blank" rel="noopener noreferrer" style="display:flex">
|
|
3
|
+
<img width="180" src="https://silentium-lab.github.io/silentium/assets/img/logo.svg" alt="logo">
|
|
4
|
+
</a>
|
|
5
|
+
</p>
|
|
6
|
+
<h1 align="center">Silentium</h1>
|
|
7
|
+
<br/>
|
|
8
|
+
<p align="center">
|
|
9
|
+
<a href="https://npmjs.com/package/silentium"><img src="https://img.shields.io/npm/v/silentium.svg" alt="npm package"></a>
|
|
10
|
+
<a href="https://github.com/silentium-lab/silentium/actions/workflows/node.js.yml"><img src="https://github.com/silentium-lab/silentium/actions/workflows/node.js.yml/badge.svg?branch=main" alt="build status"></a>
|
|
11
|
+
</p>
|
|
12
|
+
<br/>
|
|
2
13
|
|
|
3
|
-
[
|
|
14
|
+
[Documentation](https://silentium-lab.github.io/silentium/#/en/)
|
|
15
|
+
|
|
16
|
+
To install the library you can use the command.
|
|
17
|
+
|
|
18
|
+
```bash
|
|
19
|
+
npm install silentium
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
The library helps you create abstractions for information in your system. Instead of working with data abstractions and operations abstractions, you can combine them into a common information abstraction. The approach in which we combine data and operations under information abstractions is object-oriented programming.
|
|
23
|
+
|
|
24
|
+
The idea for the project was born from the ideas of eolang and was inspired by this paper, 𝜑-calculus:
|
|
25
|
+
https://arxiv.org/pdf/2111.13384
|
|
26
|
+
|
|
27
|
+
## Difference from eolang
|
|
28
|
+
|
|
29
|
+
Unlike eolang, where the program starts working at the moment when some method receives data, which is called dataization, Silentium starts executing the program at the moment when a guest comes to the information source, requesting data, this difference allows the Silentium library to work on top of JavaScript events, creating abstractions of information around some event models.
|
|
30
|
+
|
|
31
|
+
## Is silentium reactive?
|
|
32
|
+
|
|
33
|
+
Silentium is not a reactive programming library, chains of objects only interact with each other through message passing, but due to the fact that Silentium is developed with the idea of working on top of events, it allows for easy integration with any reactive library or framework, transferring event sources to the reactive mechanisms of the required frameworks.
|
package/dist/silentium.cjs
CHANGED
|
@@ -714,15 +714,22 @@ const sourceLazy = (lazySrc, args, resetSrc) => {
|
|
|
714
714
|
let instance = null;
|
|
715
715
|
const result = sourceOf();
|
|
716
716
|
const resultResettable = sourceResettable(result, resetSrc ?? sourceOf());
|
|
717
|
-
|
|
718
|
-
|
|
719
|
-
|
|
720
|
-
|
|
721
|
-
|
|
722
|
-
|
|
723
|
-
|
|
724
|
-
|
|
725
|
-
|
|
717
|
+
let wasInstantiated = false;
|
|
718
|
+
const instantiate = () => {
|
|
719
|
+
if (wasInstantiated) {
|
|
720
|
+
return;
|
|
721
|
+
}
|
|
722
|
+
wasInstantiated = true;
|
|
723
|
+
value(
|
|
724
|
+
sourceAll(args),
|
|
725
|
+
patron(() => {
|
|
726
|
+
if (!instance) {
|
|
727
|
+
instance = lazySrc.get(...args);
|
|
728
|
+
value(instance, patron(result));
|
|
729
|
+
}
|
|
730
|
+
})
|
|
731
|
+
);
|
|
732
|
+
};
|
|
726
733
|
if (resetSrc) {
|
|
727
734
|
value(
|
|
728
735
|
resetSrc,
|
|
@@ -732,7 +739,26 @@ const sourceLazy = (lazySrc, args, resetSrc) => {
|
|
|
732
739
|
})
|
|
733
740
|
);
|
|
734
741
|
}
|
|
735
|
-
return
|
|
742
|
+
return (g) => {
|
|
743
|
+
instantiate();
|
|
744
|
+
resultResettable.value(g);
|
|
745
|
+
};
|
|
746
|
+
};
|
|
747
|
+
|
|
748
|
+
const sourceDestroyable = (source) => {
|
|
749
|
+
let destructor = null;
|
|
750
|
+
return {
|
|
751
|
+
value(g) {
|
|
752
|
+
destructor = source(g);
|
|
753
|
+
return this;
|
|
754
|
+
},
|
|
755
|
+
destroy() {
|
|
756
|
+
if (destructor !== null && typeof destructor === "function") {
|
|
757
|
+
destructor();
|
|
758
|
+
}
|
|
759
|
+
return this;
|
|
760
|
+
}
|
|
761
|
+
};
|
|
736
762
|
};
|
|
737
763
|
|
|
738
764
|
const lazyClass = (constructorFn, modules = {}) => {
|
|
@@ -790,6 +816,7 @@ exports.sourceAny = sourceAny;
|
|
|
790
816
|
exports.sourceApplied = sourceApplied;
|
|
791
817
|
exports.sourceChain = sourceChain;
|
|
792
818
|
exports.sourceCombined = sourceCombined;
|
|
819
|
+
exports.sourceDestroyable = sourceDestroyable;
|
|
793
820
|
exports.sourceDynamic = sourceDynamic;
|
|
794
821
|
exports.sourceExecutorApplied = sourceExecutorApplied;
|
|
795
822
|
exports.sourceFiltered = sourceFiltered;
|
package/dist/silentium.cjs.map
CHANGED
|
@@ -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/SourceSync.ts","../src/Source/SourceChangeable.ts","../src/Source/SourceAll.ts","../src/Source/SourceSequence.ts","../src/Source/SourceMap.ts","../src/Source/SourceRace.ts","../src/Source/SourceChain.ts","../src/Source/SourceDynamic.ts","../src/Source/SourceApplied.ts","../src/Source/SourceExecutorApplied.ts","../src/Source/SourceFiltered.ts","../src/Source/SourceOnce.ts","../src/Source/SourceCombined.ts","../src/Source/SourceResettable.ts","../src/Source/SourceAny.ts","../src/Source/SourceLazy.ts","../src/Lazy/LazyClass.ts","../src/Lazy/Lazy.ts"],"sourcesContent":["import { give, GuestType } from \"../Guest/Guest\";\n\nexport type SourceExecutorType<T, R = unknown> = (guest: GuestType<T>) => R;\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\";\nimport { DestroyableType } from \"../Source/SourceDestroyable\";\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/**\n * Helps debug the application and detect issues 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 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 check what given source is destroyable\n * @url https://silentium-lab.github.io/silentium/#/utils/is-destroyable\n */\nexport const isDestroyable = (s: unknown): s is DestroyableType => {\n return (\n typeof s === \"object\" &&\n s !== null &&\n \"destroy\" in s &&\n typeof s.destroy === \"function\"\n );\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 if (isDestroyable(initiator)) {\n initiator.destroy();\n }\n const pool = poolsOfInitiators.get(initiator);\n pool?.destroy();\n const foundSubSources = subSources.get(initiator);\n subSources.delete(initiator);\n if (foundSubSources) {\n destroy(...foundSubSources);\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 notifyPoolsChange();\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 { subSource } from \"../Patron/PatronPool\";\nimport { 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 const result = {\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 subSource(result, baseSource);\n\n return result;\n};\n","import { sourceSync } from \"../Source/SourceSync\";\nimport { give, 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\nconst sourceIsEmpty = (source: unknown) =>\n source === undefined || source === null;\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 = sourceIsEmpty(source);\n\n if (!isEmpty && isSource(source)) {\n value(\n source,\n patronOnce((unwrappedSourceDocument) => {\n isEmpty = sourceIsEmpty(unwrappedSourceDocument);\n source = unwrappedSourceDocument as SourceDataType<T>;\n }),\n );\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 = sourceIsEmpty(value);\n source = value as SourceDataType<T>;\n\n if (!isEmpty) {\n thePool.give(source);\n }\n\n return createdSource;\n };\n\n return createdSource as SourceChangeableType<T>;\n};\n\n/**\n * Changeable source what can be changed only once with specified value\n * @url https://silentium-lab.github.io/silentium/#/source/source-memo-of\n */\nexport const sourceMemoOf = <T>(\n source?: SourceType<T>,\n): SourceChangeableType<T> => {\n const result = sourceOf(source);\n const baseSrcSync = sourceSync(result, null);\n\n const resultMemo = {\n value: result.value,\n give(value: T) {\n if (baseSrcSync.syncValue() !== value) {\n give(value, result.give);\n }\n return resultMemo;\n },\n };\n\n return resultMemo;\n};\n","import { removePatronFromPools, subSource } from \"../Patron/PatronPool\";\nimport { give, guest, GuestObjectType, GuestType } from \"../Guest/Guest\";\nimport { guestCast } from \"../Guest/GuestCast\";\nimport { patron } from \"../Patron/Patron\";\nimport { SourceObjectType, SourceType, value } from \"./Source\";\nimport { sourceOf } from \"./SourceChangeable\";\nimport { DestroyableType } from \"src/Source/SourceDestroyable\";\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): SourceObjectType<ExtractTypesFromArray<T>> & DestroyableType => {\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 const patrons: GuestObjectType[] = [];\n\n Object.entries(sources).forEach(([key, source]) => {\n subSource(theAll, source);\n keysKnown.add(key);\n const keyPatron = 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 patrons.push(keyPatron);\n value(source, keyPatron);\n });\n\n return {\n value(guest: GuestType<ExtractTypesFromArray<T>>) {\n const mbPatron = guestCast(guest, (value: T) => {\n if (isAllFilled()) {\n give(Object.values(value) as ExtractTypesFromArray<T>, guest);\n }\n });\n patrons.push(mbPatron);\n theAll.value(mbPatron);\n },\n destroy() {\n patrons.forEach((patron) => {\n removePatronFromPools(patron);\n });\n },\n };\n};\n","import { give, GuestType } from \"../Guest/Guest\";\nimport { guestCast } from \"../Guest/GuestCast\";\nimport { patronOnce } from \"../Patron/PatronOnce\";\nimport { LazyType } from \"../Lazy/Lazy\";\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: LazyType<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 { patron } from \"../Patron/Patron\";\nimport { patronOnce } from \"../Patron/PatronOnce\";\nimport { sourceOf } from \"../Source/SourceChangeable\";\nimport { give } from \"../Guest/Guest\";\nimport { LazyType } from \"../Lazy/Lazy\";\nimport { destroy, subSource } from \"../Patron/PatronPool\";\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: LazyType<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 const result = sourceOf<TG[]>();\n\n value(\n baseSource,\n patron((theValue) => {\n const sources: SourceType[] = [];\n theValue.forEach((val) => {\n const source = targetSource.get(val);\n subSource(source, baseSource);\n sources.push(source);\n });\n value(\n sourceAll(sources),\n patronOnce((v) => {\n destroy(...sources);\n give(v, result);\n }),\n );\n }),\n );\n\n return result.value;\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 { patron } from \"../Patron/Patron\";\nimport { SourceType, value } from \"../Source/Source\";\nimport { sourceOf } from \"../Source/SourceChangeable\";\n\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\ntype Last<T extends any[]> = T extends [...infer U, infer L] ? L : never;\n\n/**\n * Returns value of some source when all sources before it gives their response\n * @url https://silentium-lab.github.io/silentium/#/source/source-chain\n */\nexport const sourceChain = <T extends SourceType[]>(\n ...sources: T\n): SourceType<Last<T>> => {\n const resultSrc = sourceOf<Last<T>>();\n const respondedSources = new Set();\n let lastSourceValue: any = null;\n sources.forEach((source, index) => {\n value(\n source,\n patron((value) => {\n respondedSources.add(index);\n if (index === sources.length - 1) {\n lastSourceValue = value;\n }\n if (\n respondedSources.size === sources.length &&\n lastSourceValue !== null\n ) {\n resultSrc.give(lastSourceValue);\n }\n }),\n );\n });\n\n return resultSrc.value;\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 defaultValue?: T,\n) => {\n return (g: GuestType<T>) => {\n value(\n baseSource,\n guestCast(g, (v) => {\n if (predicate(v) === true) {\n give(v, g);\n } else if (defaultValue !== undefined) {\n give(defaultValue, 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 { 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 { give } from \"../Guest/Guest\";\nimport { patron } from \"../Patron/Patron\";\nimport { subSource } from \"../Patron/PatronPool\";\nimport { SourceType, value } from \"../Source/Source\";\nimport { sourceOf } from \"../Source/SourceChangeable\";\n\n/**\n * @url https://silentium-lab.github.io/silentium/#/source/source-resettable\n */\nexport const sourceResettable = <T>(\n baseSrc: SourceType<T>,\n resettableSrc: SourceType<unknown>,\n) => {\n const result = sourceOf<T>();\n\n value(\n resettableSrc,\n patron(() => {\n give(null, result);\n }),\n );\n\n value(baseSrc, patron(result));\n subSource(result, baseSrc);\n\n return result;\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 { LazyType } from \"../Lazy/Lazy\";\nimport { patron } from \"../Patron/Patron\";\nimport { destroy } from \"../Patron/PatronPool\";\nimport { SourceType, value } from \"../Source/Source\";\nimport { sourceAll } from \"../Source/SourceAll\";\nimport { sourceOf } from \"../Source/SourceChangeable\";\nimport { sourceResettable } from \"../Source/SourceResettable\";\n\n/**\n * Helps to build source only when all sources will give its values\n * @url https://silentium-lab.github.io/silentium/#/source/source-lazy\n */\nexport const sourceLazy = <T>(\n lazySrc: LazyType<SourceType<T>>,\n args: SourceType[],\n resetSrc?: SourceType<unknown>,\n) => {\n let instance: SourceType<T> | null = null;\n const result = sourceOf<T>();\n const resultResettable = sourceResettable(result, resetSrc ?? sourceOf());\n\n value(\n sourceAll(args),\n patron(() => {\n if (!instance) {\n instance = lazySrc.get(...args);\n value(instance, patron(result));\n }\n }),\n );\n\n if (resetSrc) {\n value(\n resetSrc,\n patron(() => {\n destroy(instance);\n instance = null;\n }),\n );\n }\n\n return resultResettable;\n};\n","import { LazyType } from \"./Lazy\";\n\ninterface Constructable<T> {\n new (...args: unknown[]): T;\n}\n\ninterface Prototyped<T> {\n prototype: T;\n}\n\nexport const lazyClass = <T>(\n constructorFn: Prototyped<T>,\n modules: Record<string, unknown> = {},\n): LazyType<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 LazyType<T> {\n get<R extends unknown[], CT = null>(...args: R): CT extends null ? T : CT;\n}\n\n/**\n * Helps to get lazy instance of dependency\n * @url https://silentium-lab.github.io/silentium/#/utils/lazy\n */\nexport const lazy = <T>(buildingFn: (...args: any[]) => T): LazyType<T> => {\n if (buildingFn === undefined) {\n throw new Error(\"lazy 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","patron"],"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/SourceSync.ts","../src/Source/SourceChangeable.ts","../src/Source/SourceAll.ts","../src/Source/SourceSequence.ts","../src/Source/SourceMap.ts","../src/Source/SourceRace.ts","../src/Source/SourceChain.ts","../src/Source/SourceDynamic.ts","../src/Source/SourceApplied.ts","../src/Source/SourceExecutorApplied.ts","../src/Source/SourceFiltered.ts","../src/Source/SourceOnce.ts","../src/Source/SourceCombined.ts","../src/Source/SourceResettable.ts","../src/Source/SourceAny.ts","../src/Source/SourceLazy.ts","../src/Source/SourceDestroyable.ts","../src/Lazy/LazyClass.ts","../src/Lazy/Lazy.ts"],"sourcesContent":["import { give, GuestType } from \"../Guest/Guest\";\n\nexport type SourceExecutorType<T, R = unknown> = (guest: GuestType<T>) => R;\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\";\nimport { DestroyableType } from \"../Source/SourceDestroyable\";\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/**\n * Helps debug the application and detect issues 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 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 check what given source is destroyable\n * @url https://silentium-lab.github.io/silentium/#/utils/is-destroyable\n */\nexport const isDestroyable = (s: unknown): s is DestroyableType => {\n return (\n typeof s === \"object\" &&\n s !== null &&\n \"destroy\" in s &&\n typeof s.destroy === \"function\"\n );\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 if (isDestroyable(initiator)) {\n initiator.destroy();\n }\n const pool = poolsOfInitiators.get(initiator);\n pool?.destroy();\n const foundSubSources = subSources.get(initiator);\n subSources.delete(initiator);\n if (foundSubSources) {\n destroy(...foundSubSources);\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 notifyPoolsChange();\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 { subSource } from \"../Patron/PatronPool\";\nimport { 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 const result = {\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 subSource(result, baseSource);\n\n return result;\n};\n","import { sourceSync } from \"../Source/SourceSync\";\nimport { give, 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\nconst sourceIsEmpty = (source: unknown) =>\n source === undefined || source === null;\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 = sourceIsEmpty(source);\n\n if (!isEmpty && isSource(source)) {\n value(\n source,\n patronOnce((unwrappedSourceDocument) => {\n isEmpty = sourceIsEmpty(unwrappedSourceDocument);\n source = unwrappedSourceDocument as SourceDataType<T>;\n }),\n );\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 = sourceIsEmpty(value);\n source = value as SourceDataType<T>;\n\n if (!isEmpty) {\n thePool.give(source);\n }\n\n return createdSource;\n };\n\n return createdSource as SourceChangeableType<T>;\n};\n\n/**\n * Changeable source what can be changed only once with specified value\n * @url https://silentium-lab.github.io/silentium/#/source/source-memo-of\n */\nexport const sourceMemoOf = <T>(\n source?: SourceType<T>,\n): SourceChangeableType<T> => {\n const result = sourceOf(source);\n const baseSrcSync = sourceSync(result, null);\n\n const resultMemo = {\n value: result.value,\n give(value: T) {\n if (baseSrcSync.syncValue() !== value) {\n give(value, result.give);\n }\n return resultMemo;\n },\n };\n\n return resultMemo;\n};\n","import { removePatronFromPools, subSource } from \"../Patron/PatronPool\";\nimport { give, guest, GuestObjectType, GuestType } from \"../Guest/Guest\";\nimport { guestCast } from \"../Guest/GuestCast\";\nimport { patron } from \"../Patron/Patron\";\nimport { SourceObjectType, SourceType, value } from \"./Source\";\nimport { sourceOf } from \"./SourceChangeable\";\nimport { DestroyableType } from \"src/Source/SourceDestroyable\";\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): SourceObjectType<ExtractTypesFromArray<T>> & DestroyableType => {\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 const patrons: GuestObjectType[] = [];\n\n Object.entries(sources).forEach(([key, source]) => {\n subSource(theAll, source);\n keysKnown.add(key);\n const keyPatron = 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 patrons.push(keyPatron);\n value(source, keyPatron);\n });\n\n return {\n value(guest: GuestType<ExtractTypesFromArray<T>>) {\n const mbPatron = guestCast(guest, (value: T) => {\n if (isAllFilled()) {\n give(Object.values(value) as ExtractTypesFromArray<T>, guest);\n }\n });\n patrons.push(mbPatron);\n theAll.value(mbPatron);\n },\n destroy() {\n patrons.forEach((patron) => {\n removePatronFromPools(patron);\n });\n },\n };\n};\n","import { give, GuestType } from \"../Guest/Guest\";\nimport { guestCast } from \"../Guest/GuestCast\";\nimport { patronOnce } from \"../Patron/PatronOnce\";\nimport { LazyType } from \"../Lazy/Lazy\";\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: LazyType<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 { patron } from \"../Patron/Patron\";\nimport { patronOnce } from \"../Patron/PatronOnce\";\nimport { sourceOf } from \"../Source/SourceChangeable\";\nimport { give } from \"../Guest/Guest\";\nimport { LazyType } from \"../Lazy/Lazy\";\nimport { destroy, subSource } from \"../Patron/PatronPool\";\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: LazyType<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 const result = sourceOf<TG[]>();\n\n value(\n baseSource,\n patron((theValue) => {\n const sources: SourceType[] = [];\n theValue.forEach((val) => {\n const source = targetSource.get(val);\n subSource(source, baseSource);\n sources.push(source);\n });\n value(\n sourceAll(sources),\n patronOnce((v) => {\n destroy(...sources);\n give(v, result);\n }),\n );\n }),\n );\n\n return result.value;\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 { patron } from \"../Patron/Patron\";\nimport { SourceType, value } from \"../Source/Source\";\nimport { sourceOf } from \"../Source/SourceChangeable\";\n\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\ntype Last<T extends any[]> = T extends [...infer U, infer L] ? L : never;\n\n/**\n * Returns value of some source when all sources before it gives their response\n * @url https://silentium-lab.github.io/silentium/#/source/source-chain\n */\nexport const sourceChain = <T extends SourceType[]>(\n ...sources: T\n): SourceType<Last<T>> => {\n const resultSrc = sourceOf<Last<T>>();\n const respondedSources = new Set();\n let lastSourceValue: any = null;\n sources.forEach((source, index) => {\n value(\n source,\n patron((value) => {\n respondedSources.add(index);\n if (index === sources.length - 1) {\n lastSourceValue = value;\n }\n if (\n respondedSources.size === sources.length &&\n lastSourceValue !== null\n ) {\n resultSrc.give(lastSourceValue);\n }\n }),\n );\n });\n\n return resultSrc.value;\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 defaultValue?: T,\n) => {\n return (g: GuestType<T>) => {\n value(\n baseSource,\n guestCast(g, (v) => {\n if (predicate(v) === true) {\n give(v, g);\n } else if (defaultValue !== undefined) {\n give(defaultValue, 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 { 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 { give } from \"../Guest/Guest\";\nimport { patron } from \"../Patron/Patron\";\nimport { subSource } from \"../Patron/PatronPool\";\nimport { SourceType, value } from \"../Source/Source\";\nimport { sourceOf } from \"../Source/SourceChangeable\";\n\n/**\n * @url https://silentium-lab.github.io/silentium/#/source/source-resettable\n */\nexport const sourceResettable = <T>(\n baseSrc: SourceType<T>,\n resettableSrc: SourceType<unknown>,\n) => {\n const result = sourceOf<T>();\n\n value(\n resettableSrc,\n patron(() => {\n give(null, result);\n }),\n );\n\n value(baseSrc, patron(result));\n subSource(result, baseSrc);\n\n return result;\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 { GuestType } from \"src/Guest/Guest\";\nimport { LazyType } from \"../Lazy/Lazy\";\nimport { patron } from \"../Patron/Patron\";\nimport { destroy } from \"../Patron/PatronPool\";\nimport { SourceType, value } from \"../Source/Source\";\nimport { sourceAll } from \"../Source/SourceAll\";\nimport { sourceOf } from \"../Source/SourceChangeable\";\nimport { sourceResettable } from \"../Source/SourceResettable\";\n\n/**\n * Helps to build source only when all sources will give its values\n * and only after some guest visit source\n * @url https://silentium-lab.github.io/silentium/#/source/source-lazy\n */\nexport const sourceLazy = <T>(\n lazySrc: LazyType<SourceType<T>>,\n args: SourceType[],\n resetSrc?: SourceType<unknown>,\n) => {\n let instance: SourceType<T> | null = null;\n const result = sourceOf<T>();\n const resultResettable = sourceResettable(result, resetSrc ?? sourceOf());\n let wasInstantiated = false;\n\n const instantiate = () => {\n if (wasInstantiated) {\n return;\n }\n\n wasInstantiated = true;\n value(\n sourceAll(args),\n patron(() => {\n if (!instance) {\n instance = lazySrc.get(...args);\n value(instance, patron(result));\n }\n }),\n );\n };\n\n if (resetSrc) {\n value(\n resetSrc,\n patron(() => {\n destroy(instance);\n instance = null;\n }),\n );\n }\n\n return (g: GuestType<T>) => {\n instantiate();\n resultResettable.value(g);\n };\n};\n","import { SourceExecutorType, SourceObjectType } from \"./Source\";\n\nexport type DestructorType = () => void;\n\nexport interface DestroyableType {\n destroy: DestructorType;\n}\n\n/**\n * Ability to create sources that support special destruction logic\n * @url https://silentium-lab.github.io/silentium/#/source/source-destroyable\n */\nexport const sourceDestroyable = <T>(\n source: SourceExecutorType<T, DestructorType>,\n): SourceObjectType<T> & DestroyableType => {\n let destructor: DestructorType | null = null;\n return {\n value(g) {\n destructor = source(g);\n return this;\n },\n destroy() {\n if (destructor !== null && typeof destructor === \"function\") {\n destructor();\n }\n return this;\n },\n };\n};\n","import { LazyType } from \"./Lazy\";\n\ninterface Constructable<T> {\n new (...args: unknown[]): T;\n}\n\ninterface Prototyped<T> {\n prototype: T;\n}\n\nexport const lazyClass = <T>(\n constructorFn: Prototyped<T>,\n modules: Record<string, unknown> = {},\n): LazyType<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 LazyType<T> {\n get<R extends unknown[], CT = null>(...args: R): CT extends null ? T : CT;\n}\n\n/**\n * Helps to get lazy instance of dependency\n * @url https://silentium-lab.github.io/silentium/#/utils/lazy\n */\nexport const lazy = <T>(buildingFn: (...args: any[]) => T): LazyType<T> => {\n if (buildingFn === undefined) {\n throw new Error(\"lazy 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","patron"],"mappings":";;AAuBa,MAAA,KAAA,GAAQ,CAAIA,OAAAA,EAAuB,KAAwB,KAAA;AACtE,EAAIA,IAAAA,OAAAA,KAAW,MAAaA,IAAAA,OAAAA,KAAW,IAAM,EAAA;AAC3C,IAAM,MAAA,IAAI,MAAM,sCAAsC,CAAA;AAAA;AAExD,EAAI,IAAA,KAAA,KAAU,MAAaA,IAAAA,OAAAA,KAAW,IAAM,EAAA;AAC1C,IAAM,MAAA,IAAI,MAAM,qCAAqC,CAAA;AAAA;AAEvD,EAAI,IAAA,OAAOA,YAAW,UAAY,EAAA;AAChC,IAAAA,QAAO,KAAK,CAAA;AAAA,GACd,MAAA,IACE,OAAOA,OAAW,KAAA,QAAA,IAClB,WAAWA,OACX,IAAA,OAAOA,OAAO,CAAA,KAAA,KAAU,UACxB,EAAA;AACA,IAAAA,OAAAA,CAAO,MAAM,KAAK,CAAA;AAAA,GACb,MAAA;AACL,IAAA,IAAA,CAAKA,SAAa,KAAK,CAAA;AAAA;AAGzB,EAAOA,OAAAA,OAAAA;AACT;AAMa,MAAA,QAAA,GAAW,CACtB,QAC8B,KAAA;AAC9B,EACE,IAAA,QAAA,KAAa,IACb,IAAA,OAAO,QAAa,KAAA,QAAA,IACpB,WAAW,QACX,IAAA,OAAO,QAAS,CAAA,KAAA,KAAU,UAC1B,EAAA;AACA,IAAO,OAAA,IAAA;AAAA;AAET,EAAO,OAAA,QAAA,KAAa,QAAQ,QAAa,KAAA,MAAA;AAC3C;AAMa,MAAA,MAAA,GAAS,CAAIA,OAAiD,KAAA;AACzE,EAAA,IAAIA,YAAW,MAAW,EAAA;AACxB,IAAM,MAAA,IAAI,MAAM,qDAAqD,CAAA;AAAA;AAGvE,EAAA,OAAO,CAAC,KAAwB,KAAA;AAC9B,IAAA,KAAA,CAAMA,SAAQ,KAAK,CAAA;AAAA,GACrB;AACF;;ACzDa,MAAA,IAAA,GAAO,CAClB,IAAA,EACAC,MACyC,KAAA;AACzC,EAAA,IAAI,SAAS,MAAW,EAAA;AACtB,IAAM,MAAA,IAAI,MAAM,mCAAmC,CAAA;AAAA;AAErD,EAAA,IAAIA,WAAU,MAAW,EAAA;AACvB,IAAA,OAAO,OAAU,IAAqB,CAAA;AAAA;AAExC,EAAI,IAAA,OAAOA,WAAU,UAAY,EAAA;AAC/B,IAAAA,OAAM,IAAI,CAAA;AAAA,GACL,MAAA;AACL,IAAAA,MAAAA,CAAM,KAAK,IAAI,CAAA;AAAA;AAEjB,EAAOA,OAAAA,MAAAA;AACT;AAMa,MAAA,OAAA,GAAU,CAAC,OAAuC,KAAA;AAC7D,EAAA,IAAI,YAAY,MAAW,EAAA;AACzB,IAAM,MAAA,IAAI,MAAM,wCAAwC,CAAA;AAAA;AAE1D,EAAA,OAAO,OAAO,OAAA,KAAY,UAAc,IAAA,OAAO,SAAS,IAAS,KAAA,UAAA;AACnE;AAMa,MAAA,KAAA,GAAQ,CAAI,QAAmC,KAAA;AAC1D,EAAA,IAAI,CAAC,QAAU,EAAA;AACb,IAAM,MAAA,IAAI,MAAM,uDAAuD,CAAA;AAAA;AAEzE,EAAA,MAAM,MAAS,GAAA;AAAA,IACb,KAAK,KAAU,EAAA;AACb,MAAA,QAAA,CAAS,KAAK,CAAA;AACd,MAAO,OAAA,MAAA;AAAA;AACT,GACF;AACA,EAAO,OAAA,MAAA;AACT;;ACvDa,MAAA,SAAA,GAAY,CACvB,WAAA,EACA,WAC2B,KAAA;AAC3B,EAAA,IAAI,gBAAgB,MAAW,EAAA;AAC7B,IAAM,MAAA,IAAI,MAAM,+CAA+C,CAAA;AAAA;AAEjE,EAAA,IAAI,gBAAgB,MAAW,EAAA;AAC7B,IAAM,MAAA,IAAI,MAAM,+CAA+C,CAAA;AAAA;AAGjE,EAAA,MAAM,MAAS,GAAA;AAAA,IACb,SAAS,KAA0B,EAAA;AACjC,MAAA,MAAM,eAAkB,GAAA,WAAA;AACxB,MAAA,OAAO,eAAgB,CAAA,QAAA,GAAW,eAAgB,CAAA,QAAA,CAAS,KAAK,CAAI,GAAA,KAAA;AAAA,KACtE;AAAA,IACA,KAAK,KAAU,EAAA;AACb,MAAA,IAAA,CAAK,OAAO,WAAW,CAAA;AACvB,MAAO,OAAA,MAAA;AAAA,KACT;AAAA,IACA,YAAe,GAAA;AACb,MAAI,IAAA,OAAO,gBAAgB,UAAY,EAAA;AACrC,QAAO,OAAA,OAAA;AAAA;AAET,MAAI,IAAA,CAAC,YAAY,YAAc,EAAA;AAC7B,QAAO,OAAA,OAAA;AAAA;AAET,MAAA,OAAO,YAAY,YAAa,EAAA;AAAA;AAClC,GACF;AAEA,EAAO,OAAA,MAAA;AACT;;AC9Ba,MAAA,SAAA,GAAY,CAAI,QAAoC,KAAA;AAC/D,EAAA,MAAM,MAAS,GAAA;AAAA,IACb,KAAK,KAAU,EAAA;AACb,MAAW,QAAA,GAAA,KAAA;AACX,MAAO,OAAA,MAAA;AAAA,KACT;AAAA,IACA,KAAQ,GAAA;AACN,MAAA,IAAI,aAAa,MAAW,EAAA;AAC1B,QAAM,MAAA,IAAI,MAAM,wBAAwB,CAAA;AAAA;AAE1C,MAAO,OAAA,QAAA;AAAA;AACT,GACF;AAEA,EAAO,OAAA,MAAA;AACT;;ACXa,MAAA,eAAA,GAAkB,CAC7B,KAAA,EACA,YAC2B,KAAA;AAC3B,EAAA,IAAI,UAAU,MAAW,EAAA;AACvB,IAAM,MAAA,IAAI,MAAM,+CAA+C,CAAA;AAAA;AAEjE,EAAA,IAAI,iBAAiB,MAAW,EAAA;AAC9B,IAAM,MAAA,IAAI,MAAM,sDAAsD,CAAA;AAAA;AAGxE,EAAA,MAAM,MAAS,GAAA;AAAA,IACb,SAAS,KAA0B,EAAA;AACjC,MAAA,OAAO,aAAa,KAAK,CAAA;AAAA,KAC3B;AAAA,IACA,KAAK,KAAU,EAAA;AACb,MAAA,IAAA,CAAK,OAAO,KAAK,CAAA;AACjB,MAAO,OAAA,MAAA;AAAA;AACT,GACF;AAEA,EAAO,OAAA,MAAA;AACT;;AC7Ba,MAAA,YAAA,GAAe,CAC1B,SAAA,EACA,OACuB,KAAA;AACvB,EAAA,MAAM,MAAS,GAAA;AAAA,IACb,KAAK,KAAU,EAAA;AACb,MAAK,IAAA,CAAA,OAAA,CAAQ,KAAK,CAAA,EAAG,SAAS,CAAA;AAC9B,MAAO,OAAA,MAAA;AAAA;AACT,GACF;AACA,EAAO,OAAA,MAAA;AACT;;ACNa,MAAA,oBAAA,GAAuB,CAClC,SAAA,EACA,OACuB,KAAA;AACvB,EAAA,MAAM,MAAS,GAAA;AAAA,IACb,MAAM,OAAQ,CAAA,CAAC,MAAM,IAAK,CAAA,CAAA,EAAG,SAAS,CAAC;AAAA,GACzC;AAEA,EAAO,OAAA,MAAA;AACT;;ACTa,MAAA,QAAA,GAAW,CAAC,KAAA,KACvB,OAAO,KAAA,KAAU,YACjB,KAAU,KAAA,IAAA,IACV,KAAO,EAAA,YAAA,IAAqB,KAAA;AAEvB,MAAM,eAAe,MAAM;AAMrB,MAAA,MAAA,GAAS,CACpB,YAC2B,KAAA;AAC3B,EAAA,IAAI,iBAAiB,MAAW,EAAA;AAC9B,IAAM,MAAA,IAAI,MAAM,6CAA6C,CAAA;AAAA;AAG/D,EAAA,MAAM,MAAS,GAAA;AAAA,IACb,KAAK,KAAU,EAAA;AACb,MAAA,IAAA,CAAK,OAAO,YAAY,CAAA;AACxB,MAAO,OAAA,MAAA;AAAA,KACT;AAAA,IACA,SAAS,KAA0B,EAAA;AACjC,MAAA,MAAM,eAAkB,GAAA,YAAA;AACxB,MAAO,OAAA,eAAA,EAAiB,QAAW,GAAA,KAAK,CAAK,IAAA,KAAA;AAAA,KAC/C;AAAA,IACA;AAAA,GACF;AAEA,EAAO,OAAA,MAAA;AACT;;AC9Ba,MAAA,UAAA,GAAa,CACxB,SAC2B,KAAA;AAC3B,EAAA,IAAI,cAAc,MAAW,EAAA;AAC3B,IAAM,MAAA,IAAI,MAAM,8CAA8C,CAAA;AAAA;AAGhE,EAAA,IAAI,QAAW,GAAA,KAAA;AAEf,EAAA,MAAM,MAAS,GAAA;AAAA,IACb,KAAK,KAAU,EAAA;AACb,MAAA,IAAI,CAAC,QAAU,EAAA;AACb,QAAW,QAAA,GAAA,IAAA;AACX,QAAA,IAAA,CAAK,OAAO,SAAS,CAAA;AAAA;AAEvB,MAAO,OAAA,MAAA;AAAA,KACT;AAAA,IACA,SAAS,KAA0B,EAAA;AACjC,MAAA,IAAI,QAAU,EAAA;AACZ,QAAO,OAAA,IAAA;AAAA;AAET,MAAA,MAAM,eAAkB,GAAA,SAAA;AACxB,MAAA,OAAO,eAAgB,CAAA,QAAA,GAAW,eAAgB,CAAA,QAAA,CAAS,KAAK,CAAI,GAAA,KAAA;AAAA,KACtE;AAAA,IACA;AAAA,GACF;AAEA,EAAO,OAAA,MAAA;AACT;;;;;ACnCA,MAAM,QAAA,uBAAe,GAAoC,EAAA;AACzD,MAAM,iBAAA,uBAAwB,GAA0B,EAAA;AACxD,MAAM,UAAA,uBAAiB,GAA8B,EAAA;AAErD,MAAM,iBAAiC,EAAC;AACxC,MAAM,oBAAoB,MAAM;AAC9B,EAAA,cAAA,CAAe,OAAQ,CAAA,CAAC,EAAO,KAAA,EAAA,EAAI,CAAA;AACrC,CAAA;AACA,MAAM,wBAA2B,GAAA;AAAA,EAC/B,UAAY,EAAA,CAAA;AAAA,EACZ,YAAc,EAAA;AAChB,CAAA;AAMa,MAAA,oBAAA,GAAuB,MAGjC,CAAA,CAAC,CAAM,KAAA;AACR,EAAA,IAAA,CAAK,0BAA0B,CAAC,CAAA;AAChC,EAAA,cAAA,CAAe,KAAK,MAAM;AACxB,IAAA,IAAI,YAAe,GAAA,CAAA;AACnB,IAAS,QAAA,CAAA,OAAA,CAAQ,CAAC,GAAQ,KAAA;AACxB,MAAA,YAAA,IAAgB,GAAI,CAAA,IAAA;AAAA,KACrB,CAAA;AACD,IAAA,wBAAA,CAAyB,aAAa,QAAS,CAAA,IAAA;AAC/C,IAAA,wBAAA,CAAyB,YAAe,GAAA,YAAA;AACxC,IAAA,IAAA,CAAK,0BAA0B,CAAC,CAAA;AAAA,GACjC,CAAA;AACH,CAAC;AAOY,MAAA,SAAA,GAAY,CACvBC,UAAAA,EACAF,OACkB,KAAA;AAClB,EAAA,IAAI,CAAC,UAAA,CAAW,GAAIA,CAAAA,OAAM,CAAG,EAAA;AAC3B,IAAW,UAAA,CAAA,GAAA,CAAIA,OAAQ,EAAA,EAAE,CAAA;AAAA;AAG3B,EAAA,UAAA,CAAW,GAAIA,CAAAA,OAAM,CAAG,EAAA,IAAA,CAAKE,UAAS,CAAA;AAEtC,EAAOA,OAAAA,UAAAA;AACT;AAKa,MAAA,aAAA,GAAgB,CAC3B,YAAA,EACA,UACkB,KAAA;AAClB,EAAW,UAAA,CAAA,OAAA,CAAQ,CAACF,OAAW,KAAA;AAC7B,IAAA,SAAA,CAAU,cAAcA,OAAM,CAAA;AAAA,GAC/B,CAAA;AACD,EAAO,OAAA,YAAA;AACT;AAMa,MAAA,aAAA,GAAgB,CAAC,CAAqC,KAAA;AACjE,EACE,OAAA,OAAO,MAAM,QACb,IAAA,CAAA,KAAM,QACN,SAAa,IAAA,CAAA,IACb,OAAO,CAAA,CAAE,OAAY,KAAA,UAAA;AAEzB;AAMa,MAAA,OAAA,GAAU,IAAI,UAA6B,KAAA;AACtD,EAAW,UAAA,CAAA,OAAA,CAAQ,CAAC,SAAc,KAAA;AAChC,IAAI,IAAA,aAAA,CAAc,SAAS,CAAG,EAAA;AAC5B,MAAA,SAAA,CAAU,OAAQ,EAAA;AAAA;AAEpB,IAAM,MAAA,IAAA,GAAO,iBAAkB,CAAA,GAAA,CAAI,SAAS,CAAA;AAC5C,IAAA,IAAA,EAAM,OAAQ,EAAA;AACd,IAAM,MAAA,eAAA,GAAkB,UAAW,CAAA,GAAA,CAAI,SAAS,CAAA;AAChD,IAAA,UAAA,CAAW,OAAO,SAAS,CAAA;AAC3B,IAAA,IAAI,eAAiB,EAAA;AACnB,MAAA,OAAA,CAAQ,GAAG,eAAe,CAAA;AAAA;AAC5B,GACD,CAAA;AACH;AAMa,MAAA,WAAA,GAAc,CAAC,MAA4B,KAAA;AACtD,EAAA,MAAM,QAAoB,EAAC;AAC3B,EAAS,QAAA,CAAA,OAAA,CAAQ,CAAC,IAAA,EAAM,YAAiB,KAAA;AACvC,IAAI,IAAA,IAAA,CAAK,GAAI,CAAA,MAAM,CAAG,EAAA;AACpB,MAAA,KAAA,CAAM,KAAK,YAAY,CAAA;AAAA;AACzB,GACD,CAAA;AACD,EAAO,OAAA,KAAA;AACT;AAMa,MAAA,qBAAA,GAAwB,CAAC,MAA4B,KAAA;AAChE,EAAA,IAAI,WAAW,MAAW,EAAA;AACxB,IAAM,MAAA,IAAI,MAAM,sDAAsD,CAAA;AAAA;AAExE,EAAS,QAAA,CAAA,OAAA,CAAQ,CAAC,IAAS,KAAA;AACzB,IAAA,IAAA,CAAK,OAAO,MAAM,CAAA;AAAA,GACnB,CAAA;AACD,EAAkB,iBAAA,EAAA;AACpB;AAMa,MAAA,eAAA,GAAkB,CAAC,MAA4B,KAAA;AAC1D,EAAA,IAAI,WAAW,MAAW,EAAA;AACxB,IAAM,MAAA,IAAI,MAAM,gDAAgD,CAAA;AAAA;AAElE,EAAA,IAAI,MAAS,GAAA,KAAA;AACb,EAAS,QAAA,CAAA,OAAA,CAAQ,CAAC,IAAS,KAAA;AACzB,IAAA,IAAI,CAAC,MAAQ,EAAA;AACX,MAAS,MAAA,GAAA,IAAA,CAAK,IAAI,MAAM,CAAA;AAAA;AAC1B,GACD,CAAA;AACD,EAAO,OAAA,MAAA;AACT;AAeO,MAAM,UAAqC,CAAA;AAAA,EAKzC,YAAoB,SAAuB,EAAA;AAAvB,IAAA,IAAA,CAAA,SAAA,GAAA,SAAA;AAJ3B,IAAQ,aAAA,CAAA,IAAA,EAAA,SAAA,CAAA;AAER,IAAO,aAAA,CAAA,IAAA,EAAA,MAAA,CAAA;AAGL,IAAK,IAAA,CAAA,OAAA,uBAAc,GAAwB,EAAA;AAC3C,IAAS,QAAA,CAAA,GAAA,CAAI,IAAM,EAAA,IAAA,CAAK,OAAO,CAAA;AAC/B,IAAkB,iBAAA,CAAA,GAAA,CAAI,IAAK,CAAA,SAAA,EAAW,IAAI,CAAA;AAC1C,IAAM,MAAA,SAAA,GAAY,CAAC,KAAa,KAAA;AAC9B,MAAK,IAAA,CAAA,OAAA,CAAQ,OAAQ,CAAA,CAAC,MAAW,KAAA;AAC/B,QAAK,IAAA,CAAA,gBAAA,CAAiB,OAAO,MAAM,CAAA;AAAA,OACpC,CAAA;AAAA,KACH;AACA,IAAK,IAAA,CAAA,IAAA,GAAO,CAAC,KAAa,KAAA;AACxB,MAAA,SAAA,CAAU,KAAK,CAAA;AACf,MAAO,OAAA,IAAA;AAAA,KACT;AACA,IAAkB,iBAAA,EAAA;AAAA;AACpB,EAEO,IAAe,GAAA;AACpB,IAAA,OAAO,KAAK,OAAQ,CAAA,IAAA;AAAA;AACtB,EAEO,IAAI,cAA8B,EAAA;AACvC,IAAA,IAAI,CAAC,cAAgB,EAAA;AACnB,MAAM,MAAA,IAAI,MAAM,yCAAyC,CAAA;AAAA;AAE3D,IACE,IAAA,OAAO,mBAAmB,UAC1B,IAAA,cAAA,CAAe,gBACf,cAAe,CAAA,YAAA,OAAmB,QAClC,EAAA;AACA,MAAK,IAAA,CAAA,OAAA,CAAQ,IAAI,cAAc,CAAA;AAAA;AAEjC,IAAkB,iBAAA,EAAA;AAClB,IAAO,OAAA,IAAA;AAAA;AACT,EAEO,OAAO,MAA4B,EAAA;AACxC,IAAK,IAAA,CAAA,OAAA,CAAQ,OAAO,MAAM,CAAA;AAC1B,IAAkB,iBAAA,EAAA;AAClB,IAAO,OAAA,IAAA;AAAA;AACT,EAEO,UAAA,CAAW,WAAc,cAAoC,EAAA;AAClE,IAAA,IAAA,CAAK,IAAI,cAAc,CAAA;AACvB,IAAK,IAAA,CAAA,gBAAA,CAAiB,WAAW,cAAc,CAAA;AAC/C,IAAO,OAAA,IAAA;AAAA;AACT,EAEO,OAAU,GAAA;AACf,IAAK,IAAA,CAAA,OAAA,CAAQ,OAAQ,CAAA,CAAC,MAAW,KAAA;AAC/B,MAAA,IAAA,CAAK,OAAO,MAAM,CAAA;AAAA,KACnB,CAAA;AACD,IAAA,QAAA,CAAS,OAAO,IAAI,CAAA;AACpB,IAAkB,iBAAA,CAAA,MAAA,CAAO,KAAK,SAAS,CAAA;AACvC,IAAkB,iBAAA,EAAA;AAClB,IAAO,OAAA,IAAA;AAAA;AACT,EAEQ,gBAAA,CAAiB,OAAU,KAAqB,EAAA;AACtD,IAAA,MAAM,UAAa,GAAA,IAAA,CAAK,aAAc,CAAA,KAAA,EAAO,KAAK,CAAA;AAClD,IAAA,IAAI,CAAC,UAAY,EAAA;AACf,MAAA,IAAA,CAAK,OAAO,KAAK,CAAA;AAAA;AAEnB,IAAO,OAAA,IAAA;AAAA;AACT,EAEQ,aAAA,CAAc,OAAU,KAAqB,EAAA;AACnD,IAAK,IAAA,KAAA,CAA8B,QAAW,GAAA,KAAK,CAAG,EAAA;AACpD,MAAA,IAAA,CAAK,OAAO,KAAwB,CAAA;AACpC,MAAO,OAAA,IAAA;AAAA;AAET,IAAO,OAAA,KAAA;AAAA;AAEX;;ACpOa,MAAA,aAAA,GAAgB,CAC3B,SAAA,EACA,OACuB,KAAA;AACvB,EAAM,MAAA,OAAA,GAAU,YAAa,CAAA,SAAA,EAAW,OAAO,CAAA;AAE/C,EAAA,MAAM,MAAS,GAAA;AAAA,IACb,KAAK,KAAU,EAAA;AACb,MAAA,OAAA,CAAQ,KAAK,KAAK,CAAA;AAClB,MAAO,OAAA,MAAA;AAAA,KACT;AAAA,IACA;AAAA,GACF;AAEA,EAAO,OAAA,MAAA;AACT;;ACfa,MAAA,qBAAA,GAAwB,CACnC,SAAA,EACA,OACG,KAAA;AACH,EAAM,MAAA,YAAA,GAAe,oBAAqB,CAAA,SAAA,EAAW,OAAO,CAAA;AAE5D,EAAA,MAAM,MAAS,GAAA;AAAA,IACb,KAAK,KAAU,EAAA;AACb,MAAA,YAAA,CAAa,KAAK,KAAK,CAAA;AACvB,MAAO,OAAA,MAAA;AAAA,KACT;AAAA,IACA;AAAA,GACF;AAEA,EAAO,OAAA,MAAA;AACT;;ACZa,MAAA,UAAA,GAAa,CACxB,UAAA,EACA,YAC6C,KAAA;AAC7C,EAAM,MAAA,SAAA,GAAY,UAAa,YAAiB,CAAA;AAChD,EAAM,KAAA,CAAA,UAAA,EAAY,MAAO,CAAA,SAAS,CAAC,CAAA;AAEnC,EAAA,MAAM,MAAS,GAAA;AAAA,IACb,MAAM,KAAqB,EAAA;AACzB,MAAA,KAAA,CAAM,YAAY,KAAK,CAAA;AACvB,MAAO,OAAA,IAAA;AAAA,KACT;AAAA,IACA,SAAY,GAAA;AACV,MAAI,IAAA;AACF,QAAA,OAAO,UAAU,KAAM,EAAA;AAAA,OACjB,CAAA,MAAA;AACN,QAAM,MAAA,IAAI,MAAM,wBAAwB,CAAA;AAAA;AAC1C;AACF,GACF;AAEA,EAAA,SAAA,CAAU,QAAQ,UAAU,CAAA;AAE5B,EAAO,OAAA,MAAA;AACT;;ACnBA,MAAM,aAAgB,GAAA,CAAC,MACrB,KAAA,MAAA,KAAW,UAAa,MAAW,KAAA,IAAA;AAMxB,MAAA,QAAA,GAAW,CAAI,MAA2B,KAAA;AACrD,EAAA,MAAM,gBAAgB,EAAC;AACvB,EAAM,MAAA,OAAA,GAAU,IAAI,UAAA,CAAW,aAAa,CAAA;AAC5C,EAAI,IAAA,OAAA,GAAU,cAAc,MAAM,CAAA;AAElC,EAAA,IAAI,CAAC,OAAA,IAAW,QAAS,CAAA,MAAM,CAAG,EAAA;AAChC,IAAA,KAAA;AAAA,MACE,MAAA;AAAA,MACA,UAAA,CAAW,CAAC,uBAA4B,KAAA;AACtC,QAAA,OAAA,GAAU,cAAc,uBAAuB,CAAA;AAC/C,QAAS,MAAA,GAAA,uBAAA;AAAA,OACV;AAAA,KACH;AAAA;AAGF,EAAc,aAAA,CAAA,KAAA,GAAQ,CAAC,CAAoB,KAAA;AACzC,IAAA,IAAI,OAAS,EAAA;AACX,MAAI,IAAA,QAAA,CAAS,CAAC,CAAG,EAAA;AACf,QAAA,OAAA,CAAQ,IAAI,CAAC,CAAA;AAAA;AAEf,MAAO,OAAA,aAAA;AAAA;AAGT,IAAI,IAAA,OAAO,MAAM,UAAY,EAAA;AAC3B,MAAA,OAAA,CAAQ,UAAW,CAAA,MAAA,EAAQ,KAAM,CAAA,CAAC,CAAC,CAAA;AAAA,KAC9B,MAAA;AACL,MAAQ,OAAA,CAAA,UAAA,CAAW,QAAQ,CAAC,CAAA;AAAA;AAG9B,IAAO,OAAA,aAAA;AAAA,GACT;AAEA,EAAc,aAAA,CAAA,IAAA,GAAO,CAACG,MAAa,KAAA;AACjC,IAAA,OAAA,GAAU,cAAcA,MAAK,CAAA;AAC7B,IAASA,MAAAA,GAAAA,MAAAA;AAET,IAAA,IAAI,CAAC,OAAS,EAAA;AACZ,MAAA,OAAA,CAAQ,KAAK,MAAM,CAAA;AAAA;AAGrB,IAAO,OAAA,aAAA;AAAA,GACT;AAEA,EAAO,OAAA,aAAA;AACT;AAMa,MAAA,YAAA,GAAe,CAC1B,MAC4B,KAAA;AAC5B,EAAM,MAAA,MAAA,GAAS,SAAS,MAAM,CAAA;AAC9B,EAAM,MAAA,WAAA,GAAc,UAAW,CAAA,MAAA,EAAQ,IAAI,CAAA;AAE3C,EAAA,MAAM,UAAa,GAAA;AAAA,IACjB,OAAO,MAAO,CAAA,KAAA;AAAA,IACd,KAAKA,MAAU,EAAA;AACb,MAAI,IAAA,WAAA,CAAY,SAAU,EAAA,KAAMA,MAAO,EAAA;AACrC,QAAKA,IAAAA,CAAAA,MAAAA,EAAO,OAAO,IAAI,CAAA;AAAA;AAEzB,MAAO,OAAA,UAAA;AAAA;AACT,GACF;AAEA,EAAO,OAAA,UAAA;AACT;;ACvEa,MAAA,SAAA,GAAY,CACvB,OACiE,KAAA;AACjE,EAAA,MAAM,YAAY,IAAI,GAAA,CAAY,MAAO,CAAA,IAAA,CAAK,OAAO,CAAC,CAAA;AACtD,EAAM,MAAA,UAAA,uBAAiB,GAAI,EAAA;AAC3B,EAAA,MAAM,cAAc,MAAM;AACxB,IAAA,OAAO,UAAW,CAAA,IAAA,GAAO,CAAK,IAAA,UAAA,CAAW,SAAS,SAAU,CAAA,IAAA;AAAA,GAC9D;AACA,EAAM,MAAA,MAAA,GAAS,QAAS,CAAA,EAAE,CAAA;AAC1B,EAAA,MAAM,UAA6B,EAAC;AAEpC,EAAO,MAAA,CAAA,OAAA,CAAQ,OAAO,CAAE,CAAA,OAAA,CAAQ,CAAC,CAAC,GAAA,EAAK,MAAM,CAAM,KAAA;AACjD,IAAA,SAAA,CAAU,QAAQ,MAAM,CAAA;AACxB,IAAA,SAAA,CAAU,IAAI,GAAG,CAAA;AACjB,IAAM,MAAA,SAAA,GAAY,MAAO,CAAA,CAAC,CAAM,KAAA;AAC9B,MAAO,MAAA,CAAA,KAAA;AAAA,QACL,KAAA,CAAM,CAAC,GAAiC,KAAA;AACtC,UAAA,UAAA,CAAW,IAAI,GAAG,CAAA;AAClB,UAAA,MAAM,OAAU,GAAA;AAAA,YACd,GAAG,GAAA;AAAA,YACH,CAAC,GAAG,GAAG;AAAA,WACT;AACA,UAAA,MAAA,CAAO,KAAK,OAAO,CAAA;AAAA,SACpB;AAAA,OACH;AAAA,KACD,CAAA;AACD,IAAA,OAAA,CAAQ,KAAK,SAAS,CAAA;AACtB,IAAA,KAAA,CAAM,QAAQ,SAAS,CAAA;AAAA,GACxB,CAAA;AAED,EAAO,OAAA;AAAA,IACL,MAAMF,MAA4C,EAAA;AAChD,MAAA,MAAM,QAAW,GAAA,SAAA,CAAUA,MAAO,EAAA,CAACE,MAAa,KAAA;AAC9C,QAAA,IAAI,aAAe,EAAA;AACjB,UAAA,IAAA,CAAK,MAAO,CAAA,MAAA,CAAOA,MAAK,CAAA,EAA+BF,MAAK,CAAA;AAAA;AAC9D,OACD,CAAA;AACD,MAAA,OAAA,CAAQ,KAAK,QAAQ,CAAA;AACrB,MAAA,MAAA,CAAO,MAAM,QAAQ,CAAA;AAAA,KACvB;AAAA,IACA,OAAU,GAAA;AACR,MAAQ,OAAA,CAAA,OAAA,CAAQ,CAACG,OAAW,KAAA;AAC1B,QAAA,qBAAA,CAAsBA,OAAM,CAAA;AAAA,OAC7B,CAAA;AAAA;AACH,GACF;AACF;;ACrDa,MAAA,cAAA,GAAiB,CAC5B,UAAA,EACA,YACG,KAAA;AACH,EAAA,IAAI,eAAe,MAAW,EAAA;AAC5B,IAAM,MAAA,IAAI,MAAM,mDAAmD,CAAA;AAAA;AAErE,EAAA,IAAI,iBAAiB,MAAW,EAAA;AAC9B,IAAM,MAAA,IAAI,MAAM,qDAAqD,CAAA;AAAA;AAGvE,EAAA,OAAO,CAAC,KAA2B,KAAA;AACjC,IAAA,MAAM,iBAAiB,QAAS,EAAA;AAChC,IAAM,MAAA,MAAA,GAAS,YAAa,CAAA,GAAA,CAAI,cAAc,CAAA;AAE9C,IAAA,KAAA;AAAA,MACE,UAAA;AAAA,MACA,SAAA,CAAU,KAAO,EAAA,CAAC,QAAa,KAAA;AAC7B,QAAA,IAAI,KAAQ,GAAA,CAAA;AAEZ,QAAA,MAAM,UAAkC,EAAC;AACzC,QAAA,QAAA,CAAS,QAAQ,MAAM;AACrB,UAAQ,OAAA,CAAA,IAAA,CAAK,UAAU,CAAA;AAAA,SACxB,CAAA;AAED,QAAA,MAAM,iBAAiB,MAAM;AAC3B,UAAA,IAAI,QAAS,CAAA,KAAA,GAAQ,CAAC,CAAA,KAAM,MAAW,EAAA;AACrC,YAAA,KAAA,GAAQ,KAAQ,GAAA,CAAA;AAChB,YAAO,MAAA,EAAA;AAAA;AACT,SACF;AAEA,QAAA,SAAS,MAAS,GAAA;AAChB,UAAM,MAAA,aAAA,GAAgB,QAAQ,KAAK,CAAA;AACnC,UAAM,MAAA,SAAA,GAAY,SAAS,KAAK,CAAA;AAChC,UAAI,IAAA,QAAA,CAAS,SAAS,CAAG,EAAA;AACvB,YAAA,KAAA;AAAA,cACE,SAAA;AAAA,cACA,UAAA,CAAW,CAAC,YAAiB,KAAA;AAC3B,gBAAA,cAAA,CAAe,KAAK,YAAY,CAAA;AAChC,gBAAA,KAAA,CAAM,QAAQ,aAAa,CAAA;AAC3B,gBAAe,cAAA,EAAA;AAAA,eAChB;AAAA,aACH;AAAA,WACK,MAAA;AACL,YAAA,cAAA,CAAe,KAAK,SAAS,CAAA;AAC7B,YAAA,KAAA,CAAM,QAAQ,aAAa,CAAA;AAC3B,YAAe,cAAA,EAAA;AAAA;AACjB;AAGF,QAAI,IAAA,QAAA,CAAS,KAAK,CAAA,KAAM,MAAW,EAAA;AACjC,UAAO,MAAA,EAAA;AACP,UAAM,KAAA,CAAA,SAAA,CAAU,OAAO,CAAA,EAAG,KAAK,CAAA;AAAA,SAC1B,MAAA;AACL,UAAK,IAAA,CAAA,IAAI,KAAK,CAAA;AAAA;AAChB,OACD;AAAA,KACH;AAAA,GACF;AACF;;AC3Da,MAAA,SAAA,GAAY,CACvB,UAAA,EACA,YACG,KAAA;AACH,EAAA,IAAI,eAAe,MAAW,EAAA;AAC5B,IAAM,MAAA,IAAI,MAAM,8CAA8C,CAAA;AAAA;AAEhE,EAAA,IAAI,iBAAiB,MAAW,EAAA;AAC9B,IAAM,MAAA,IAAI,MAAM,gDAAgD,CAAA;AAAA;AAGlE,EAAA,MAAM,SAAS,QAAe,EAAA;AAE9B,EAAA,KAAA;AAAA,IACE,UAAA;AAAA,IACA,MAAA,CAAO,CAAC,QAAa,KAAA;AACnB,MAAA,MAAM,UAAwB,EAAC;AAC/B,MAAS,QAAA,CAAA,OAAA,CAAQ,CAAC,GAAQ,KAAA;AACxB,QAAM,MAAA,MAAA,GAAS,YAAa,CAAA,GAAA,CAAI,GAAG,CAAA;AACnC,QAAA,SAAA,CAAU,QAAQ,UAAU,CAAA;AAC5B,QAAA,OAAA,CAAQ,KAAK,MAAM,CAAA;AAAA,OACpB,CAAA;AACD,MAAA,KAAA;AAAA,QACE,UAAU,OAAO,CAAA;AAAA,QACjB,UAAA,CAAW,CAAC,CAAM,KAAA;AAChB,UAAA,OAAA,CAAQ,GAAG,OAAO,CAAA;AAClB,UAAA,IAAA,CAAK,GAAG,MAAM,CAAA;AAAA,SACf;AAAA,OACH;AAAA,KACD;AAAA,GACH;AAEA,EAAA,OAAO,MAAO,CAAA,KAAA;AAChB;;ACtCa,MAAA,UAAA,GAAa,CAAI,OAA6B,KAAA;AACzD,EAAA,IAAI,YAAY,MAAW,EAAA;AACzB,IAAM,MAAA,IAAI,MAAM,2CAA2C,CAAA;AAAA;AAG7D,EAAA,OAAO,CAAC,KAAwB,KAAA;AAC9B,IAAA,IAAI,mBAAyC,GAAA,IAAA;AAC7C,IAAQ,OAAA,CAAA,OAAA,CAAQ,CAAC,MAAW,KAAA;AAC1B,MAAA,KAAA;AAAA,QACE,MAAA;AAAA,QACA,SAAA,CAAqB,KAAO,EAAA,CAACD,MAAU,KAAA;AACrC,UAAI,IAAA,CAAC,mBAAuB,IAAA,mBAAA,KAAwB,MAAQ,EAAA;AAC1D,YAAA,IAAA,CAAKA,QAAY,KAAK,CAAA;AACtB,YAAsB,mBAAA,GAAA,MAAA;AAAA;AACxB,SACD;AAAA,OACH;AAAA,KACD,CAAA;AAAA,GACH;AACF;;AChBa,MAAA,WAAA,GAAc,IACtB,OACqB,KAAA;AACxB,EAAA,MAAM,YAAY,QAAkB,EAAA;AACpC,EAAM,MAAA,gBAAA,uBAAuB,GAAI,EAAA;AACjC,EAAA,IAAI,eAAuB,GAAA,IAAA;AAC3B,EAAQ,OAAA,CAAA,OAAA,CAAQ,CAAC,MAAA,EAAQ,KAAU,KAAA;AACjC,IAAA,KAAA;AAAA,MACE,MAAA;AAAA,MACA,MAAA,CAAO,CAACA,MAAU,KAAA;AAChB,QAAA,gBAAA,CAAiB,IAAI,KAAK,CAAA;AAC1B,QAAI,IAAA,KAAA,KAAU,OAAQ,CAAA,MAAA,GAAS,CAAG,EAAA;AAChC,UAAkBA,eAAAA,GAAAA,MAAAA;AAAA;AAEpB,QAAA,IACE,gBAAiB,CAAA,IAAA,KAAS,OAAQ,CAAA,MAAA,IAClC,oBAAoB,IACpB,EAAA;AACA,UAAA,SAAA,CAAU,KAAK,eAAe,CAAA;AAAA;AAChC,OACD;AAAA,KACH;AAAA,GACD,CAAA;AAED,EAAA,OAAO,SAAU,CAAA,KAAA;AACnB;;AC5Ba,MAAA,aAAA,GAAgB,CAC3B,SAAA,EACA,UAC4B,KAAA;AAC5B,EAAA,IAAI,cAAc,MAAW,EAAA;AAC3B,IAAM,MAAA,IAAI,MAAM,iDAAiD,CAAA;AAAA;AAEnE,EAAA,IAAI,eAAe,MAAW,EAAA;AAC5B,IAAM,MAAA,IAAI,MAAM,kDAAkD,CAAA;AAAA;AAGpE,EAAA,MAAM,YAAe,GAAA;AAAA,IACnB,MAAM,KAAqB,EAAA;AACzB,MAAA,KAAA,CAAM,YAAY,KAAK,CAAA;AACvB,MAAO,OAAA,YAAA;AAAA,KACT;AAAA,IACA,KAAKA,MAAU,EAAA;AACb,MAAA,IAAA,CAAKA,QAAO,SAAS,CAAA;AACrB,MAAO,OAAA,IAAA;AAAA;AACT,GACF;AAEA,EAAO,OAAA,YAAA;AACT;;ACvBa,MAAA,aAAA,GAAgB,CAC3B,UAAA,EACA,OACG,KAAA;AACH,EAAA,OAAO,CAAC,KAAwB,KAAA;AAC9B,IAAA,KAAA;AAAA,MACE,UAAA;AAAA,MACA,SAAA,CAAU,KAAO,EAAA,CAAC,CAAM,KAAA;AACtB,QAAK,IAAA,CAAA,OAAA,CAAQ,CAAC,CAAA,EAAG,KAAK,CAAA;AAAA,OACvB;AAAA,KACH;AAAA,GACF;AACF;;ACda,MAAA,qBAAA,GAAwB,CACnC,MAAA,EACA,OACG,KAAA;AACH,EAAO,OAAA,OAAA,CAAQ,CAAC,CAAM,KAAA;AACpB,IAAA,KAAA,CAAM,QAAQ,CAAC,CAAA;AAAA,GAChB,CAAA;AACH;;ACLO,MAAM,cAAiB,GAAA,CAC5B,UACA,EAAA,SAAA,EACA,YACG,KAAA;AACH,EAAA,OAAO,CAAC,CAAoB,KAAA;AAC1B,IAAA,KAAA;AAAA,MACE,UAAA;AAAA,MACA,SAAA,CAAU,CAAG,EAAA,CAAC,CAAM,KAAA;AAClB,QAAI,IAAA,SAAA,CAAU,CAAC,CAAA,KAAM,IAAM,EAAA;AACzB,UAAA,IAAA,CAAK,GAAG,CAAC,CAAA;AAAA,SACX,MAAA,IAAW,iBAAiB,MAAW,EAAA;AACrC,UAAA,IAAA,CAAK,cAAc,CAAC,CAAA;AAAA;AACtB,OACD;AAAA,KACH;AAAA,GACF;AACF;;ACjBa,MAAA,UAAA,GAAa,CAAI,YAAiC,KAAA;AAC7D,EAAA,IAAI,WAAW,YAAiB,KAAA,MAAA;AAChC,EAAM,MAAA,MAAA,GAAS,SAAS,YAAY,CAAA;AAEpC,EAAO,OAAA;AAAA,IACL,MAAM,KAAqB,EAAA;AACzB,MAAA,KAAA,CAAM,QAAQ,KAAK,CAAA;AACnB,MAAO,OAAA,IAAA;AAAA,KACT;AAAA,IACA,KAAKA,MAAU,EAAA;AACb,MAAA,IAAI,CAAC,QAAU,EAAA;AACb,QAAA,MAAA,CAAO,KAAKA,MAAK,CAAA;AACjB,QAAW,QAAA,GAAA,IAAA;AAAA;AAEb,MAAO,OAAA,IAAA;AAAA;AACT,GACF;AACF;;ACdO,MAAM,cACX,GAAA,CAAA,GAAkC,OAClC,KAAA,CACE,MAIkB,KAAA;AAClB,EAAA,MAAM,SAAS,QAAY,EAAA;AAC3B,EAAA,aAAA,CAAc,QAAQ,OAAO,CAAA;AAE7B,EAAA,KAAA;AAAA,IACE,UAAU,OAAO,CAAA;AAAA,IACjB,MAAA,CAAO,CAAC,YAAiB,KAAA;AACvB,MAAO,MAAA,CAAA,MAAA,CAAO,IAAM,EAAA,GAAG,YAAY,CAAA;AAAA,KACpC;AAAA,GACH;AAEA,EAAA,OAAO,MAAO,CAAA,KAAA;AAChB;;ACrBW,MAAA,gBAAA,GAAmB,CAC9B,OAAA,EACA,aACG,KAAA;AACH,EAAA,MAAM,SAAS,QAAY,EAAA;AAE3B,EAAA,KAAA;AAAA,IACE,aAAA;AAAA,IACA,OAAO,MAAM;AACX,MAAA,IAAA,CAAK,MAAM,MAAM,CAAA;AAAA,KAClB;AAAA,GACH;AAEA,EAAM,KAAA,CAAA,OAAA,EAAS,MAAO,CAAA,MAAM,CAAC,CAAA;AAC7B,EAAA,SAAA,CAAU,QAAQ,OAAO,CAAA;AAEzB,EAAO,OAAA,MAAA;AACT;;AChBa,MAAA,SAAA,GAAY,CAAI,OAA6B,KAAA;AACxD,EAAA,MAAM,UAAU,QAAY,EAAA;AAC5B,EAAQ,OAAA,CAAA,OAAA,CAAQ,CAAC,MAAW,KAAA;AAC1B,IAAM,KAAA,CAAA,MAAA,EAAQ,MAAO,CAAA,OAAO,CAAC,CAAA;AAAA,GAC9B,CAAA;AAED,EAAO,OAAA,OAAA;AACT;;ACHO,MAAM,UAAa,GAAA,CACxB,OACA,EAAA,IAAA,EACA,QACG,KAAA;AACH,EAAA,IAAI,QAAiC,GAAA,IAAA;AACrC,EAAA,MAAM,SAAS,QAAY,EAAA;AAC3B,EAAA,MAAM,gBAAmB,GAAA,gBAAA,CAAiB,MAAQ,EAAA,QAAA,IAAY,UAAU,CAAA;AACxE,EAAA,IAAI,eAAkB,GAAA,KAAA;AAEtB,EAAA,MAAM,cAAc,MAAM;AACxB,IAAA,IAAI,eAAiB,EAAA;AACnB,MAAA;AAAA;AAGF,IAAkB,eAAA,GAAA,IAAA;AAClB,IAAA,KAAA;AAAA,MACE,UAAU,IAAI,CAAA;AAAA,MACd,OAAO,MAAM;AACX,QAAA,IAAI,CAAC,QAAU,EAAA;AACb,UAAW,QAAA,GAAA,OAAA,CAAQ,GAAI,CAAA,GAAG,IAAI,CAAA;AAC9B,UAAM,KAAA,CAAA,QAAA,EAAU,MAAO,CAAA,MAAM,CAAC,CAAA;AAAA;AAChC,OACD;AAAA,KACH;AAAA,GACF;AAEA,EAAA,IAAI,QAAU,EAAA;AACZ,IAAA,KAAA;AAAA,MACE,QAAA;AAAA,MACA,OAAO,MAAM;AACX,QAAA,OAAA,CAAQ,QAAQ,CAAA;AAChB,QAAW,QAAA,GAAA,IAAA;AAAA,OACZ;AAAA,KACH;AAAA;AAGF,EAAA,OAAO,CAAC,CAAoB,KAAA;AAC1B,IAAY,WAAA,EAAA;AACZ,IAAA,gBAAA,CAAiB,MAAM,CAAC,CAAA;AAAA,GAC1B;AACF;;AC3Ca,MAAA,iBAAA,GAAoB,CAC/B,MAC0C,KAAA;AAC1C,EAAA,IAAI,UAAoC,GAAA,IAAA;AACxC,EAAO,OAAA;AAAA,IACL,MAAM,CAAG,EAAA;AACP,MAAA,UAAA,GAAa,OAAO,CAAC,CAAA;AACrB,MAAO,OAAA,IAAA;AAAA,KACT;AAAA,IACA,OAAU,GAAA;AACR,MAAA,IAAI,UAAe,KAAA,IAAA,IAAQ,OAAO,UAAA,KAAe,UAAY,EAAA;AAC3D,QAAW,UAAA,EAAA;AAAA;AAEb,MAAO,OAAA,IAAA;AAAA;AACT,GACF;AACF;;AClBO,MAAM,SAAY,GAAA,CACvB,aACA,EAAA,OAAA,GAAmC,EACnB,KAAA;AAChB,EAAA,IAAI,kBAAkB,MAAW,EAAA;AAC/B,IAAM,MAAA,IAAI,MAAM,oDAAoD,CAAA;AAAA;AAGtE,EAAO,OAAA;AAAA,IACL,OAAuC,IAAmC,EAAA;AACxE,MAAA,OAAO,IAAK,aAAA;AAAA,QACV,GAAG,IAAA;AAAA,QACH;AAAA,OACF;AAAA;AACF,GACF;AACF;;AClBa,MAAA,IAAA,GAAO,CAAI,UAAmD,KAAA;AACzE,EAAA,IAAI,eAAe,MAAW,EAAA;AAC5B,IAAM,MAAA,IAAI,MAAM,yCAAyC,CAAA;AAAA;AAG3D,EAAO,OAAA;AAAA,IACL,OAAuC,IAAmC,EAAA;AACxE,MAAO,OAAA,UAAA,CAAW,GAAG,IAAI,CAAA;AAAA;AAC3B,GACF;AACF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
package/dist/silentium.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { DestroyableType as DestroyableType$1 } from 'src/Source/SourceDestroyable';
|
|
2
|
+
import { GuestType as GuestType$1 } from 'src/Guest/Guest';
|
|
2
3
|
|
|
3
4
|
type SourceExecutorType<T, R = unknown> = (guest: GuestType<T>) => R;
|
|
4
5
|
interface SourceObjectType<T> {
|
|
@@ -112,6 +113,11 @@ type DestructorType = () => void;
|
|
|
112
113
|
interface DestroyableType {
|
|
113
114
|
destroy: DestructorType;
|
|
114
115
|
}
|
|
116
|
+
/**
|
|
117
|
+
* Ability to create sources that support special destruction logic
|
|
118
|
+
* @url https://silentium-lab.github.io/silentium/#/source/source-destroyable
|
|
119
|
+
*/
|
|
120
|
+
declare const sourceDestroyable: <T>(source: SourceExecutorType<T, DestructorType>) => SourceObjectType<T> & DestroyableType;
|
|
115
121
|
|
|
116
122
|
/**
|
|
117
123
|
* Helps debug the application and detect issues with frozen pools
|
|
@@ -317,13 +323,14 @@ declare const sourceAny: <T>(sources: SourceType<T>[]) => SourceChangeableType<T
|
|
|
317
323
|
|
|
318
324
|
/**
|
|
319
325
|
* Helps to build source only when all sources will give its values
|
|
326
|
+
* and only after some guest visit source
|
|
320
327
|
* @url https://silentium-lab.github.io/silentium/#/source/source-lazy
|
|
321
328
|
*/
|
|
322
|
-
declare const sourceLazy: <T>(lazySrc: LazyType<SourceType<T>>, args: SourceType[], resetSrc?: SourceType<unknown>) =>
|
|
329
|
+
declare const sourceLazy: <T>(lazySrc: LazyType<SourceType<T>>, args: SourceType[], resetSrc?: SourceType<unknown>) => (g: GuestType$1<T>) => void;
|
|
323
330
|
|
|
324
331
|
interface Prototyped<T> {
|
|
325
332
|
prototype: T;
|
|
326
333
|
}
|
|
327
334
|
declare const lazyClass: <T>(constructorFn: Prototyped<T>, modules?: Record<string, unknown>) => LazyType<T>;
|
|
328
335
|
|
|
329
|
-
export { type ExtractTypesFromArray, type GuestDisposableType, type GuestExecutorType, type GuestObjectType, type GuestType, type GuestValueType, type LazyType, type MaybeDisposableType, PatronPool, type PatronType, type PoolType, type SourceChangeableType, type SourceDataType, type SourceExecutorType, type SourceObjectType, type SourceType, destroy, give, guest, guestApplied, guestCast, guestDisposable, guestExecutorApplied, guestSync, introduction, isDestroyable, isGuest, isPatron, isPatronInPools, isSource, lazy, lazyClass, patron, patronApplied, patronExecutorApplied, patronOnce, patronPools, patronPoolsStatistic, removePatronFromPools, source, sourceAll, sourceAny, sourceApplied, sourceChain, sourceCombined, sourceDynamic, sourceExecutorApplied, sourceFiltered, sourceLazy, sourceMap, sourceMemoOf, sourceOf, sourceOnce, sourceRace, sourceResettable, sourceSequence, sourceSync, subSource, subSourceMany, value };
|
|
336
|
+
export { type DestroyableType, type DestructorType, type ExtractTypesFromArray, type GuestDisposableType, type GuestExecutorType, type GuestObjectType, type GuestType, type GuestValueType, type LazyType, type MaybeDisposableType, PatronPool, type PatronType, type PoolType, type SourceChangeableType, type SourceDataType, type SourceExecutorType, type SourceObjectType, type SourceType, destroy, give, guest, guestApplied, guestCast, guestDisposable, guestExecutorApplied, guestSync, introduction, isDestroyable, isGuest, isPatron, isPatronInPools, isSource, lazy, lazyClass, patron, patronApplied, patronExecutorApplied, patronOnce, patronPools, patronPoolsStatistic, removePatronFromPools, source, sourceAll, sourceAny, sourceApplied, sourceChain, sourceCombined, sourceDestroyable, sourceDynamic, sourceExecutorApplied, sourceFiltered, sourceLazy, sourceMap, sourceMemoOf, sourceOf, sourceOnce, sourceRace, sourceResettable, sourceSequence, sourceSync, subSource, subSourceMany, value };
|
package/dist/silentium.js
CHANGED
|
@@ -712,15 +712,22 @@ const sourceLazy = (lazySrc, args, resetSrc) => {
|
|
|
712
712
|
let instance = null;
|
|
713
713
|
const result = sourceOf();
|
|
714
714
|
const resultResettable = sourceResettable(result, resetSrc ?? sourceOf());
|
|
715
|
-
|
|
716
|
-
|
|
717
|
-
|
|
718
|
-
|
|
719
|
-
|
|
720
|
-
|
|
721
|
-
|
|
722
|
-
|
|
723
|
-
|
|
715
|
+
let wasInstantiated = false;
|
|
716
|
+
const instantiate = () => {
|
|
717
|
+
if (wasInstantiated) {
|
|
718
|
+
return;
|
|
719
|
+
}
|
|
720
|
+
wasInstantiated = true;
|
|
721
|
+
value(
|
|
722
|
+
sourceAll(args),
|
|
723
|
+
patron(() => {
|
|
724
|
+
if (!instance) {
|
|
725
|
+
instance = lazySrc.get(...args);
|
|
726
|
+
value(instance, patron(result));
|
|
727
|
+
}
|
|
728
|
+
})
|
|
729
|
+
);
|
|
730
|
+
};
|
|
724
731
|
if (resetSrc) {
|
|
725
732
|
value(
|
|
726
733
|
resetSrc,
|
|
@@ -730,7 +737,26 @@ const sourceLazy = (lazySrc, args, resetSrc) => {
|
|
|
730
737
|
})
|
|
731
738
|
);
|
|
732
739
|
}
|
|
733
|
-
return
|
|
740
|
+
return (g) => {
|
|
741
|
+
instantiate();
|
|
742
|
+
resultResettable.value(g);
|
|
743
|
+
};
|
|
744
|
+
};
|
|
745
|
+
|
|
746
|
+
const sourceDestroyable = (source) => {
|
|
747
|
+
let destructor = null;
|
|
748
|
+
return {
|
|
749
|
+
value(g) {
|
|
750
|
+
destructor = source(g);
|
|
751
|
+
return this;
|
|
752
|
+
},
|
|
753
|
+
destroy() {
|
|
754
|
+
if (destructor !== null && typeof destructor === "function") {
|
|
755
|
+
destructor();
|
|
756
|
+
}
|
|
757
|
+
return this;
|
|
758
|
+
}
|
|
759
|
+
};
|
|
734
760
|
};
|
|
735
761
|
|
|
736
762
|
const lazyClass = (constructorFn, modules = {}) => {
|
|
@@ -758,5 +784,5 @@ const lazy = (buildingFn) => {
|
|
|
758
784
|
};
|
|
759
785
|
};
|
|
760
786
|
|
|
761
|
-
export { PatronPool, destroy, give, guest, guestApplied, guestCast, guestDisposable, guestExecutorApplied, guestSync, introduction, isDestroyable, isGuest, isPatron, isPatronInPools, isSource, lazy, lazyClass, patron, patronApplied, patronExecutorApplied, patronOnce, patronPools, patronPoolsStatistic, removePatronFromPools, source, sourceAll, sourceAny, sourceApplied, sourceChain, sourceCombined, sourceDynamic, sourceExecutorApplied, sourceFiltered, sourceLazy, sourceMap, sourceMemoOf, sourceOf, sourceOnce, sourceRace, sourceResettable, sourceSequence, sourceSync, subSource, subSourceMany, value };
|
|
787
|
+
export { PatronPool, destroy, give, guest, guestApplied, guestCast, guestDisposable, guestExecutorApplied, guestSync, introduction, isDestroyable, isGuest, isPatron, isPatronInPools, isSource, lazy, lazyClass, patron, patronApplied, patronExecutorApplied, patronOnce, patronPools, patronPoolsStatistic, removePatronFromPools, source, sourceAll, sourceAny, sourceApplied, sourceChain, sourceCombined, sourceDestroyable, sourceDynamic, sourceExecutorApplied, sourceFiltered, sourceLazy, sourceMap, sourceMemoOf, sourceOf, sourceOnce, sourceRace, sourceResettable, sourceSequence, sourceSync, subSource, subSourceMany, value };
|
|
762
788
|
//# sourceMappingURL=silentium.js.map
|