silentium 0.0.12 → 0.0.13
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +7 -0
- package/dist/silentium.cjs +42 -5
- package/dist/silentium.cjs.map +1 -1
- package/dist/silentium.d.ts +18 -4
- package/dist/silentium.js +41 -6
- package/dist/silentium.js.map +1 -1
- package/dist/silentium.min.js +1 -1
- package/dist/silentium.min.mjs +1 -1
- package/dist/silentium.min.mjs.map +1 -1
- package/dist/silentium.mjs +41 -6
- package/dist/silentium.mjs.map +1 -1
- package/package.json +1 -1
- package/src/Patron/PatronPool.destroy.test.ts +27 -0
- package/src/Patron/PatronPool.statistic.test.ts +28 -0
- package/src/Patron/PatronPool.subSource.test.ts +34 -0
- package/src/Patron/PatronPool.ts +58 -5
- package/src/Source/SourceChangeable.ts +1 -3
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,13 @@
|
|
|
2
2
|
|
|
3
3
|
All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.
|
|
4
4
|
|
|
5
|
+
### [0.0.13](https://github.com/silentium-lab/silentium/compare/v0.0.12...v0.0.13) (2025-04-24)
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
### Features
|
|
9
|
+
|
|
10
|
+
* **19-need-to-create-subsource-function:** subSource function created ([1392bc5](https://github.com/silentium-lab/silentium/commit/1392bc538e88ad97fde4586ab68891932741eaf0))
|
|
11
|
+
|
|
5
12
|
### [0.0.12](https://github.com/silentium-lab/silentium/compare/v0.0.11...v0.0.12) (2025-04-23)
|
|
6
13
|
|
|
7
14
|
|
package/dist/silentium.cjs
CHANGED
|
@@ -195,10 +195,41 @@ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { en
|
|
|
195
195
|
var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
|
|
196
196
|
const poolSets = /* @__PURE__ */ new Map();
|
|
197
197
|
const poolsOfInitiators = /* @__PURE__ */ new Map();
|
|
198
|
+
const subSources = /* @__PURE__ */ new Map();
|
|
199
|
+
const poolsChangeFns = [];
|
|
200
|
+
const notifyPoolsChange = () => {
|
|
201
|
+
poolsChangeFns.forEach((fn) => fn());
|
|
202
|
+
};
|
|
203
|
+
const lastPatronPoolsStatistic = {
|
|
204
|
+
poolsCount: 0,
|
|
205
|
+
patronsCount: 0
|
|
206
|
+
};
|
|
207
|
+
const patronPoolsStatistic = source((g) => {
|
|
208
|
+
give(lastPatronPoolsStatistic, g);
|
|
209
|
+
poolsChangeFns.push(() => {
|
|
210
|
+
let patronsCount = 0;
|
|
211
|
+
poolSets.forEach((set) => {
|
|
212
|
+
patronsCount += set.size;
|
|
213
|
+
});
|
|
214
|
+
lastPatronPoolsStatistic.poolsCount = poolSets.size;
|
|
215
|
+
lastPatronPoolsStatistic.patronsCount = patronsCount;
|
|
216
|
+
give(lastPatronPoolsStatistic, g);
|
|
217
|
+
});
|
|
218
|
+
});
|
|
219
|
+
const subSource = (source2, subSource2) => {
|
|
220
|
+
if (!subSources.has(source2)) {
|
|
221
|
+
subSources.set(source2, []);
|
|
222
|
+
}
|
|
223
|
+
subSources.get(source2)?.push(subSource2);
|
|
224
|
+
};
|
|
198
225
|
const destroy = (initiators) => {
|
|
199
226
|
initiators.forEach((initiator) => {
|
|
200
227
|
const pool = poolsOfInitiators.get(initiator);
|
|
201
228
|
pool?.destroy();
|
|
229
|
+
const relatedInitiators = subSources.get(initiator);
|
|
230
|
+
if (relatedInitiators) {
|
|
231
|
+
destroy(relatedInitiators);
|
|
232
|
+
}
|
|
202
233
|
});
|
|
203
234
|
};
|
|
204
235
|
const patronPools = (patron) => {
|
|
@@ -212,7 +243,7 @@ const patronPools = (patron) => {
|
|
|
212
243
|
};
|
|
213
244
|
const removePatronFromPools = (patron) => {
|
|
214
245
|
if (patron === void 0) {
|
|
215
|
-
throw new Error("removePatronFromPools
|
|
246
|
+
throw new Error("removePatronFromPools didn't receive patron argument");
|
|
216
247
|
}
|
|
217
248
|
poolSets.forEach((pool) => {
|
|
218
249
|
pool.delete(patron);
|
|
@@ -220,7 +251,7 @@ const removePatronFromPools = (patron) => {
|
|
|
220
251
|
};
|
|
221
252
|
const isPatronInPools = (patron) => {
|
|
222
253
|
if (patron === void 0) {
|
|
223
|
-
throw new Error("isPatronInPools
|
|
254
|
+
throw new Error("isPatronInPools didn't receive patron argument");
|
|
224
255
|
}
|
|
225
256
|
let inPool = false;
|
|
226
257
|
poolSets.forEach((pool) => {
|
|
@@ -247,6 +278,7 @@ class PatronPool {
|
|
|
247
278
|
doReceive(value);
|
|
248
279
|
return this;
|
|
249
280
|
};
|
|
281
|
+
notifyPoolsChange();
|
|
250
282
|
}
|
|
251
283
|
size() {
|
|
252
284
|
return this.patrons.size;
|
|
@@ -258,10 +290,12 @@ class PatronPool {
|
|
|
258
290
|
if (typeof shouldBePatron !== "function" && shouldBePatron.introduction && shouldBePatron.introduction() === "patron") {
|
|
259
291
|
this.patrons.add(shouldBePatron);
|
|
260
292
|
}
|
|
293
|
+
notifyPoolsChange();
|
|
261
294
|
return this;
|
|
262
295
|
}
|
|
263
296
|
remove(patron) {
|
|
264
297
|
this.patrons.delete(patron);
|
|
298
|
+
notifyPoolsChange();
|
|
265
299
|
return this;
|
|
266
300
|
}
|
|
267
301
|
distribute(receiving, possiblePatron) {
|
|
@@ -275,12 +309,15 @@ class PatronPool {
|
|
|
275
309
|
});
|
|
276
310
|
poolSets.delete(this);
|
|
277
311
|
poolsOfInitiators.delete(this.initiator);
|
|
312
|
+
notifyPoolsChange();
|
|
313
|
+
return this;
|
|
278
314
|
}
|
|
279
315
|
sendValueToGuest(value, guest) {
|
|
280
316
|
const isDisposed = this.guestDisposed(value, guest);
|
|
281
317
|
if (!isDisposed) {
|
|
282
318
|
give(value, guest);
|
|
283
319
|
}
|
|
320
|
+
return this;
|
|
284
321
|
}
|
|
285
322
|
guestDisposed(value, guest) {
|
|
286
323
|
if (guest.disposed?.(value)) {
|
|
@@ -318,7 +355,6 @@ const patronExecutorApplied = (baseGuest, applier) => {
|
|
|
318
355
|
const sourceChangeable = (source) => {
|
|
319
356
|
const createdSource = {};
|
|
320
357
|
const thePool = new PatronPool(createdSource);
|
|
321
|
-
const theEmptyPool = new PatronPool(createdSource);
|
|
322
358
|
let isEmpty = source === void 0;
|
|
323
359
|
if (source !== void 0 && isSource(source)) {
|
|
324
360
|
value(
|
|
@@ -334,7 +370,7 @@ const sourceChangeable = (source) => {
|
|
|
334
370
|
createdSource.value = (g) => {
|
|
335
371
|
if (isEmpty) {
|
|
336
372
|
if (isPatron(g)) {
|
|
337
|
-
|
|
373
|
+
thePool.add(g);
|
|
338
374
|
}
|
|
339
375
|
return createdSource;
|
|
340
376
|
}
|
|
@@ -349,7 +385,6 @@ const sourceChangeable = (source) => {
|
|
|
349
385
|
isEmpty = false;
|
|
350
386
|
source = value2;
|
|
351
387
|
thePool.give(source);
|
|
352
|
-
theEmptyPool.give(source);
|
|
353
388
|
return createdSource;
|
|
354
389
|
};
|
|
355
390
|
return createdSource;
|
|
@@ -620,6 +655,7 @@ exports.patronApplied = patronApplied;
|
|
|
620
655
|
exports.patronExecutorApplied = patronExecutorApplied;
|
|
621
656
|
exports.patronOnce = patronOnce;
|
|
622
657
|
exports.patronPools = patronPools;
|
|
658
|
+
exports.patronPoolsStatistic = patronPoolsStatistic;
|
|
623
659
|
exports.personal = personal;
|
|
624
660
|
exports.personalClass = personalClass;
|
|
625
661
|
exports.removePatronFromPools = removePatronFromPools;
|
|
@@ -635,5 +671,6 @@ exports.sourceOnce = sourceOnce;
|
|
|
635
671
|
exports.sourceRace = sourceRace;
|
|
636
672
|
exports.sourceSequence = sourceSequence;
|
|
637
673
|
exports.sourceSync = sourceSync;
|
|
674
|
+
exports.subSource = subSource;
|
|
638
675
|
exports.value = value;
|
|
639
676
|
//# sourceMappingURL=silentium.cjs.map
|
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/SourceChangeable.ts","../src/Source/SourceAll.ts","../src/Source/SourceSequence.ts","../src/Source/SourceMap.ts","../src/Source/SourceRace.ts","../src/Source/SourceDynamic.ts","../src/Source/SourceApplied.ts","../src/Source/SourceExecutorApplied.ts","../src/Source/SourceFiltered.ts","../src/Source/SourceOnce.ts","../src/Source/SourceSync.ts","../src/Personal/PersonalClass.ts","../src/Personal/Personal.ts"],"sourcesContent":["import { give, GuestType } from \"../Guest/Guest\";\n\nexport type SourceExecutorType<T> = (guest: GuestType<T>) => unknown;\n\nexport interface SourceObjectType<T> {\n value: SourceExecutorType<T>;\n}\n\nexport type SourceDataType<T> = Extract<\n T,\n string | number | boolean | Date | object | Array<unknown> | symbol\n>;\n\nexport type SourceType<T = any> =\n | SourceExecutorType<T>\n | SourceObjectType<T>\n | SourceDataType<T>;\n\n/**\n * Helps to connect source and guest, if you need to get value in guest from source\n * helpful because we don't know what shape of source do we have, it can be function or object or primitive\n * @url https://silentium-lab.github.io/silentium/#/utils/value\n */\nexport const value = <T>(source: SourceType<T>, guest: GuestType<T>) => {\n if (source === undefined || source === null) {\n throw new Error(\"value didn't receive source argument\");\n }\n if (guest === undefined || source === null) {\n throw new Error(\"value didn't receive guest argument\");\n }\n if (typeof source === \"function\") {\n source(guest);\n } else if (\n typeof source === \"object\" &&\n \"value\" in source &&\n typeof source.value === \"function\"\n ) {\n source.value(guest);\n } else {\n give(source as T, guest);\n }\n\n return source;\n};\n\n/**\n * Helps to check what some information is of source shape\n * @url https://silentium-lab.github.io/silentium/#/utils/is-source\n */\nexport const isSource = <T>(\n mbSource: T | SourceType<T>,\n): mbSource is SourceType<T> => {\n if (\n mbSource !== null &&\n typeof mbSource === \"object\" &&\n \"value\" in mbSource &&\n typeof mbSource.value === \"function\"\n ) {\n return true;\n }\n return mbSource !== null && mbSource !== undefined;\n};\n\n/**\n * Represents source as function\n * @url https://silentium-lab.github.io/silentium/#/source\n */\nexport const source = <T>(source: SourceType<T>): SourceExecutorType<T> => {\n if (source === undefined) {\n throw new Error(\"Source constructor didn't receive executor function\");\n }\n\n return (guest: GuestType<T>) => {\n value(source, guest);\n };\n};\n","import { source, SourceExecutorType, SourceType } from \"../Source/Source\";\n\ntype GuestIntroduction = \"guest\" | \"patron\";\n\nexport type GuestExecutorType<T = any, This = void> = (value: T) => This;\n\nexport interface GuestObjectType<T = any> {\n give(value: T): this;\n introduction?(): GuestIntroduction;\n}\n\nexport type GuestType<T = any> = GuestExecutorType<T> | GuestObjectType<T>;\n\n/**\n * Helps to give data to guest, guests can be of different shapes\n * function guest or object guest\n * @url https://silentium-lab.github.io/silentium/#/utils/give\n */\nexport const give = <T>(\n data: T,\n guest?: GuestType<T>,\n): GuestType<T> | SourceExecutorType<T> => {\n if (data === undefined) {\n throw new Error(\"give didn't receive data argument\");\n }\n if (guest === undefined) {\n return source<T>(data as SourceType<T>) as SourceExecutorType<T>;\n }\n if (typeof guest === \"function\") {\n guest(data);\n } else {\n guest.give(data);\n }\n return guest;\n};\n\n/**\n * Helps to check if mbGuest can be used to retrieve value\n * @url https://silentium-lab.github.io/silentium/#/utils/is-guest\n */\nexport const isGuest = (mbGuest: any): mbGuest is GuestType => {\n if (mbGuest === undefined) {\n throw new Error(\"isGuest didnt receive mbGuest argument\");\n }\n return typeof mbGuest === \"function\" || typeof mbGuest?.give === \"function\";\n};\n\n/**\n * Helps to create guest of object type\n * @url https://silentium-lab.github.io/silentium/#/guest\n */\nexport const guest = <T>(receiver: GuestExecutorType<T>) => {\n if (!receiver) {\n throw new Error(\"receiver function was not passed to Guest constructor\");\n }\n const result = {\n give(value: T) {\n receiver(value);\n return result;\n },\n };\n return result;\n};\n","import { give, GuestType } from \"./Guest\";\nimport { GuestDisposableType, MaybeDisposableType } from \"./GuestDisposable\";\n\n/**\n * Helps to inherit guest behavior, its introduction and dispose settings\n * @url https://silentium-lab.github.io/silentium/#/guest/guest-cast\n */\nexport const guestCast = <T>(\n sourceGuest: GuestType<any>,\n targetGuest: GuestType<T>,\n): GuestDisposableType<T> => {\n if (sourceGuest === undefined) {\n throw new Error(\"GuestCast didn't receive sourceGuest argument\");\n }\n if (targetGuest === undefined) {\n throw new Error(\"GuestCast didn't receive targetGuest argument\");\n }\n\n const result = {\n disposed(value: T | null): boolean {\n const maybeDisposable = sourceGuest as MaybeDisposableType;\n return maybeDisposable.disposed ? maybeDisposable.disposed(value) : false;\n },\n give(value: T) {\n give(value, targetGuest);\n return result;\n },\n introduction() {\n if (typeof sourceGuest === \"function\") {\n return \"guest\";\n }\n if (!sourceGuest.introduction) {\n return \"guest\";\n }\n return sourceGuest.introduction();\n },\n };\n\n return result;\n};\n","import { GuestObjectType } from \"./Guest\";\n\nexport interface GuestValueType<T = any> extends GuestObjectType<T> {\n value(): T;\n}\n\n/**\n * @url https://silentium-lab.github.io/silentium/#/guest/guest-sync\n */\nexport const guestSync = <T>(theValue?: T): GuestValueType<T> => {\n const result = {\n give(value: T) {\n theValue = value;\n return result;\n },\n value() {\n if (theValue === undefined) {\n throw new Error(\"no value in GuestSync!\");\n }\n return theValue;\n },\n };\n\n return result;\n};\n","import { give, GuestObjectType, GuestType } from \"./Guest\";\n\nexport interface GuestDisposableType<T = any> extends GuestObjectType<T> {\n disposed(value: T | null): boolean;\n}\n\nexport type MaybeDisposableType<T = any> = Partial<GuestDisposableType<T>>;\n\n/**\n * Connects to guest logic what can tell PatronPool\n * what guest don't need to receive new values\n * @url https://silentium-lab.github.io/silentium/#/guest/guest-disposable\n */\nexport const guestDisposable = <T>(\n guest: GuestType,\n disposeCheck: (value: T | null) => boolean,\n): GuestDisposableType<T> => {\n if (guest === undefined) {\n throw new Error(\"GuestDisposable didn't receive guest argument\");\n }\n if (disposeCheck === undefined) {\n throw new Error(\"GuestDisposable didn't receive disposeCheck argument\");\n }\n\n const result = {\n disposed(value: T | null): boolean {\n return disposeCheck(value);\n },\n give(value: T) {\n give(value, guest);\n return result;\n },\n };\n\n return result;\n};\n","import { give, GuestObjectType, GuestType } from \"../Guest/Guest\";\n\n/**\n * Helps to apply function to value before baseGuest will receive it\n * @url https://silentium-lab.github.io/silentium/#/guest/guest-applied\n */\nexport const guestApplied = <T, R>(\n baseGuest: GuestType<R>,\n applier: (value: T) => R,\n): GuestObjectType<T> => {\n const result = {\n give(value: T) {\n give(applier(value), baseGuest);\n return result;\n },\n };\n return result;\n};\n","import {\n give,\n GuestExecutorType,\n GuestObjectType,\n GuestType,\n} from \"../Guest/Guest\";\n\n/**\n * Apply function to guest function of receiving value, useful for debouncing or throttling\n * @url https://silentium-lab.github.io/silentium/#/guest/guest-executor-applied\n */\nexport const guestExecutorApplied = <T>(\n baseGuest: GuestType<T>,\n applier: (executor: GuestExecutorType<T>) => GuestExecutorType<T>,\n): GuestObjectType<T> => {\n const result = {\n give: applier((v) => give(v, baseGuest)),\n };\n\n return result as GuestObjectType<T>;\n};\n","import { give, GuestType } from \"../Guest/Guest\";\nimport { GuestDisposableType } from \"../Guest/GuestDisposable\";\n\nexport type PatronType<T> = GuestDisposableType<T> & {\n introduction(): \"patron\";\n};\n\n/**\n * Helps to check what incoming object is patron\n * @url https://silentium-lab.github.io/silentium/#/utils/is-patron\n */\nexport const isPatron = (guest: GuestType): guest is PatronType<unknown> =>\n typeof guest === \"object\" &&\n guest !== null &&\n guest?.introduction?.() === \"patron\";\n\nexport const introduction = () => \"patron\" as const;\n\n/**\n * Help to turn existed guest intro patron\n * @url https://silentium-lab.github.io/silentium/#/patron\n */\nexport const patron = <T>(\n willBePatron: GuestType<T>,\n): GuestDisposableType<T> => {\n if (willBePatron === undefined) {\n throw new Error(\"Patron didn't receive willBePatron argument\");\n }\n\n const result = {\n give(value: T) {\n give(value, willBePatron);\n return result;\n },\n disposed(value: T | null): boolean {\n const maybeDisposable = willBePatron as GuestDisposableType;\n return maybeDisposable?.disposed?.(value) || false;\n },\n introduction,\n };\n\n return result;\n};\n","import { introduction } from \"../Patron/Patron\";\nimport { give, GuestType } from \"../Guest/Guest\";\nimport {\n GuestDisposableType,\n MaybeDisposableType,\n} from \"../Guest/GuestDisposable\";\n\n/**\n * Helps to call patron only once, this will be helpful when you\n * need value but you know what value can not be existed at a time of requesting\n * @url https://silentium-lab.github.io/silentium/#/patron/patron-once\n */\nexport const patronOnce = <T>(\n baseGuest: GuestType<T>,\n): GuestDisposableType<T> => {\n if (baseGuest === undefined) {\n throw new Error(\"PatronOnce didn't receive baseGuest argument\");\n }\n\n let received = false;\n\n const result = {\n give(value: T) {\n if (!received) {\n received = true;\n give(value, baseGuest);\n }\n return result;\n },\n disposed(value: T | null): boolean {\n if (received) {\n return true;\n }\n const maybeDisposable = baseGuest as MaybeDisposableType;\n return maybeDisposable.disposed ? maybeDisposable.disposed(value) : false;\n },\n introduction,\n };\n\n return result;\n};\n","import { give, GuestObjectType, GuestType } from \"../Guest/Guest\";\nimport { GuestDisposableType } from \"../Guest/GuestDisposable\";\n\nconst poolSets = new Map<PoolType, Set<GuestObjectType>>();\nconst poolsOfInitiators = new Map<unknown, PoolType>();\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: unknown[]) => {\n initiators.forEach((initiator) => {\n const pool = poolsOfInitiators.get(initiator);\n pool?.destroy();\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 didnt receive patron argument\");\n }\n poolSets.forEach((pool) => {\n pool.delete(patron);\n });\n};\n\n/**\n * Checks what patron is connected with any pool\n * @url https://silentium-lab.github.io/silentium/#/utils/is-patron-in-pools\n */\nexport const isPatronInPools = (patron: GuestObjectType) => {\n if (patron === undefined) {\n throw new Error(\"isPatronInPools didnt 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: unknown) {\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 }\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 return this;\n }\n\n public remove(patron: GuestObjectType<T>) {\n this.patrons.delete(patron);\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 }\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 }\n\n private guestDisposed(value: T, guest: GuestType<T>) {\n if ((guest as GuestDisposableType).disposed?.(value)) {\n this.remove(guest as GuestObjectType);\n return true;\n }\n return false;\n }\n}\n","import { introduction } from \"../Patron/Patron\";\nimport { GuestObjectType, GuestType } from \"../Guest/Guest\";\nimport { guestApplied } from \"../Guest/GuestApplied\";\n\n/**\n * Helps to apply function to patron\n * @url https://silentium-lab.github.io/silentium/#/patron/patron-applied\n */\nexport const patronApplied = <T, R>(\n baseGuest: GuestType<R>,\n applier: (value: T) => R,\n): GuestObjectType<T> => {\n const applied = guestApplied(baseGuest, applier);\n\n const result = {\n give(value: T) {\n applied.give(value);\n return result;\n },\n introduction,\n };\n\n return result;\n};\n","import { introduction } from \"../Patron/Patron\";\nimport { GuestExecutorType, GuestType } from \"../Guest/Guest\";\nimport { guestExecutorApplied } from \"../Guest/GuestExecutorApplied\";\n\n/**\n * Helps to apply function to patrons executor\n * @url https://silentium-lab.github.io/silentium/#/patron/patron-executor-applied\n */\nexport const patronExecutorApplied = <T>(\n baseGuest: GuestType<T>,\n applier: (executor: GuestExecutorType) => GuestExecutorType,\n) => {\n const guestApplied = guestExecutorApplied(baseGuest, applier);\n\n const result = {\n give(value: T) {\n guestApplied.give(value);\n return result;\n },\n introduction,\n };\n\n return result;\n};\n","import { guest, GuestObjectType, GuestType } from \"../Guest/Guest\";\nimport { isPatron } from \"../Patron/Patron\";\nimport { patronOnce } from \"../Patron/PatronOnce\";\nimport { PatronPool } from \"../Patron/PatronPool\";\nimport {\n isSource,\n SourceDataType,\n SourceObjectType,\n SourceType,\n value,\n} from \"./Source\";\n\nexport type SourceChangeableType<T = any> = SourceObjectType<T> &\n GuestObjectType<T>;\n\n/**\n * Ability to create source what can be changed later\n * @url https://silentium-lab.github.io/silentium/#/source/source-changeable\n */\nexport const sourceChangeable = <T>(source?: SourceType<T>) => {\n const createdSource = {} as SourceChangeableType<T>;\n const thePool = new PatronPool(createdSource);\n const theEmptyPool = new PatronPool(createdSource);\n let isEmpty = source === undefined;\n\n if (source !== undefined && isSource(source)) {\n value(\n source,\n patronOnce((unwrappedSourceDocument) => {\n isEmpty = unwrappedSourceDocument === undefined;\n source = unwrappedSourceDocument as SourceDataType<T>;\n }),\n );\n } else {\n isEmpty = source === undefined;\n }\n\n createdSource.value = (g: GuestType<T>) => {\n if (isEmpty) {\n if (isPatron(g)) {\n theEmptyPool.add(g);\n }\n return createdSource;\n }\n\n if (typeof g === \"function\") {\n thePool.distribute(source, guest(g));\n } else {\n thePool.distribute(source, g);\n }\n\n return createdSource;\n };\n\n createdSource.give = (value: T) => {\n isEmpty = false;\n source = value as SourceDataType<T>;\n thePool.give(source);\n theEmptyPool.give(source);\n return createdSource;\n };\n\n return createdSource as SourceChangeableType<T>;\n};\n","import { give, guest, GuestType } from \"../Guest/Guest\";\nimport { guestCast } from \"../Guest/GuestCast\";\nimport { patron } from \"../Patron/Patron\";\nimport { SourceType, value } from \"./Source\";\nimport { sourceChangeable } from \"./SourceChangeable\";\n\n/**\n * Represents common value as Record or 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 = <T>(\n sources: SourceType<any>[] | Record<string, SourceType<any>>,\n) => {\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 isSourcesArray = Array.isArray(sources);\n const theAll = sourceChangeable<Record<string, unknown>>({});\n\n Object.entries(sources).forEach(([key, source]) => {\n keysKnown.add(key);\n value(\n source,\n patron((v) => {\n theAll.value(\n guest((all: Record<string, unknown>) => {\n keysFilled.add(key);\n const lastAll = {\n ...all,\n [key]: v,\n };\n theAll.give(lastAll);\n }),\n );\n }),\n );\n });\n\n return (guest: GuestType<T>) => {\n value((g) => {\n theAll.value(\n guestCast(g, (value) => {\n if (isAllFilled()) {\n give((isSourcesArray ? Object.values(value) : value) as T, g);\n }\n }),\n );\n }, guest);\n };\n};\n","import { give, GuestType } from \"../Guest/Guest\";\nimport { guestCast } from \"../Guest/GuestCast\";\nimport { patronOnce } from \"../Patron/PatronOnce\";\nimport { PersonalType } from \"../Personal/Personal\";\nimport { isSource, SourceType, value } from \"./Source\";\nimport { sourceAll } from \"./SourceAll\";\nimport { sourceChangeable, SourceChangeableType } from \"./SourceChangeable\";\n\n/**\n * Ability to apply source to source of array values sequentially\n * @url https://silentium-lab.github.io/silentium/#/source/source-sequence\n */\nexport const sourceSequence = <T, TG>(\n baseSource: SourceType<T[]>,\n targetSource: PersonalType<SourceType<TG>>,\n) => {\n if (baseSource === undefined) {\n throw new Error(\"SourceSequence didn't receive baseSource argument\");\n }\n if (targetSource === undefined) {\n throw new Error(\"SourceSequence didn't receive targetSource argument\");\n }\n\n return (guest: GuestType<TG[]>) => {\n const sequenceSource = sourceChangeable();\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(sourceChangeable());\n });\n\n const nextItemHandle = () => {\n if (theValue[index + 1] !== undefined) {\n index = index + 1;\n handle();\n }\n };\n\n function handle() {\n const currentSource = sources[index];\n const nextValue = theValue[index];\n if (isSource(nextValue)) {\n value(\n nextValue,\n patronOnce((theNextValue) => {\n sequenceSource.give(theNextValue);\n value(source, currentSource);\n nextItemHandle();\n }),\n );\n } else {\n sequenceSource.give(nextValue);\n value(source, currentSource);\n nextItemHandle();\n }\n }\n\n if (theValue[index] !== undefined) {\n handle();\n value(sourceAll(sources), guest);\n } else {\n give([], guest);\n }\n }),\n );\n };\n};\n","import { GuestType } from \"../Guest/Guest\";\nimport { guestCast } from \"../Guest/GuestCast\";\nimport { PersonalType } from \"../Personal/Personal\";\nimport { SourceType, value } from \"./Source\";\nimport { sourceAll } from \"./SourceAll\";\n\n/**\n * Helps to modify many sources with one private source\n * @url https://silentium-lab.github.io/silentium/#/source/source-map\n */\nexport const sourceMap = <T, TG>(\n baseSource: SourceType<T[]>,\n targetSource: PersonalType<SourceType<TG>>,\n) => {\n if (baseSource === undefined) {\n throw new Error(\"SourceMap didn't receive baseSource argument\");\n }\n if (targetSource === undefined) {\n throw new Error(\"SourceMap didn't receive targetSource argument\");\n }\n\n return (guest: GuestType<TG[]>) => {\n value(\n baseSource,\n guestCast(<GuestType>guest, (theValue) => {\n const sources: SourceType[] = [];\n theValue.forEach((val) => {\n const source = targetSource.get(val);\n sources.push(source);\n });\n value(sourceAll(sources), guest);\n }),\n );\n return this;\n };\n};\n","import { give, GuestType } from \"../Guest/Guest\";\nimport { guestCast } from \"../Guest/GuestCast\";\nimport { SourceType, value } from \"./Source\";\n\n/**\n * Connects guest with source what give response faster than others\n * @url https://silentium-lab.github.io/silentium/#/source/source-race\n */\nexport const sourceRace = <T>(sources: SourceType<T>[]) => {\n if (sources === undefined) {\n throw new Error(\"SourceRace didnt receive sources argument\");\n }\n\n return (guest: GuestType<T>) => {\n let connectedWithSource: SourceType | null = null;\n sources.forEach((source) => {\n value(\n source,\n guestCast(<GuestType>guest, (value) => {\n if (!connectedWithSource || connectedWithSource === source) {\n give(value as T, guest);\n connectedWithSource = source;\n }\n }),\n );\n });\n };\n};\n","import { give, GuestType } from \"../Guest/Guest\";\nimport { SourceType, value } from \"./Source\";\nimport { SourceChangeableType } from \"./SourceChangeable\";\n\n/**\n * Ability to build common changeable source from different guest and source\n * @url https://silentium-lab.github.io/silentium/#/source/source-dynamic\n */\nexport const sourceDynamic = <T>(\n baseGuest: GuestType<T>,\n baseSource: SourceType<T>,\n): SourceChangeableType<T> => {\n if (baseGuest === undefined) {\n throw new Error(\"SourceDynamic didn't receive baseGuest argument\");\n }\n if (baseSource === undefined) {\n throw new Error(\"SourceDynamic didn't receive baseSource argument\");\n }\n\n const sourceObject = {\n value(guest: GuestType<T>) {\n value(baseSource, guest);\n return sourceObject;\n },\n give(value: T) {\n give(value, baseGuest);\n return this;\n },\n };\n\n return sourceObject;\n};\n","import { give, GuestType } from \"../Guest/Guest\";\nimport { guestCast } from \"../Guest/GuestCast\";\nimport { SourceType, value } from \"../Source/Source\";\n\n/**\n * Gives ability to apply function to source value\n * @url https://silentium-lab.github.io/silentium/#/source/source-applied\n */\nexport const sourceApplied = <T, R>(\n baseSource: SourceType<T>,\n applier: (v: T) => R,\n) => {\n return (guest: GuestType<R>) => {\n value(\n baseSource,\n guestCast(guest, (v) => {\n give(applier(v), guest);\n }),\n );\n };\n};\n","import { SourceExecutorType, SourceType, value } from \"../Source/Source\";\n\n/**\n * Ability to apply function to source executor, helpful when need to apply throttling or debounce\n * @url https://silentium-lab.github.io/silentium/#/source/source-executor-applied\n */\nexport const sourceExecutorApplied = <T>(\n source: SourceType<T>,\n applier: (executor: SourceExecutorType<T>) => SourceExecutorType<T>,\n) => {\n return applier((g) => {\n value(source, g);\n });\n};\n","import { give, GuestType } from \"../Guest/Guest\";\nimport { guestCast } from \"../Guest/GuestCast\";\nimport { SourceType, value } from \"../Source/Source\";\n\n/**\n * Helps not to respond with information what checked by predicate function\n * @url https://silentium-lab.github.io/silentium/#/source/source-filtered\n */\nexport const sourceFiltered = <T>(\n baseSource: SourceType<T>,\n predicate: (v: T) => boolean,\n) => {\n return (g: GuestType<T>) => {\n value(\n baseSource,\n guestCast(g, (v) => {\n if (predicate(v) === true) {\n give(v, g);\n }\n }),\n );\n };\n};\n","import { GuestType } from \"../Guest/Guest\";\nimport { SourceType, value } from \"./Source\";\nimport { sourceChangeable } 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 = sourceChangeable(initialValue);\n\n return {\n value(guest: GuestType<T>) {\n value(source, guest);\n return this;\n },\n give(value: T) {\n if (!isFilled) {\n source.give(value);\n isFilled = true;\n }\n return this;\n },\n };\n};\n","import { GuestType } from \"../Guest/Guest\";\nimport { guestSync } from \"../Guest/GuestSync\";\nimport { patron } from \"../Patron/Patron\";\nimport { SourceObjectType, SourceType, value } from \"../Source/Source\";\n\n/**\n * Helps to represent source value as sync value, what can be returned\n * useful for example in tests\n * @url https://silentium-lab.github.io/silentium/#/source/source-sync\n */\nexport const sourceSync = <T>(\n baseSource: SourceType<T>,\n): SourceObjectType<T> & { syncValue(): T } => {\n const syncGuest = guestSync<T>();\n value(baseSource, patron(syncGuest));\n\n return {\n value(guest: GuestType<T>) {\n value(baseSource, guest);\n return this;\n },\n syncValue() {\n try {\n return syncGuest.value() as T;\n } catch {\n throw new Error(\"No value in SourceSync\");\n }\n },\n };\n};\n","import { PersonalType } from \"./Personal\";\n\ninterface Constructable<T> {\n new (...args: unknown[]): T;\n}\n\ninterface Prototyped<T> {\n prototype: T;\n}\n\nexport const personalClass = <T>(\n constructorFn: Prototyped<T>,\n modules: Record<string, unknown> = {},\n): PersonalType<T> => {\n if (constructorFn === undefined) {\n throw new Error(\"PrivateClass didn't receive constructorFn argument\");\n }\n\n return {\n get<R extends unknown[], CT = null>(...args: R): CT extends null ? T : CT {\n return new (constructorFn as Constructable<T>)(\n ...args,\n modules,\n ) as CT extends null ? T : CT;\n },\n };\n};\n","export interface PersonalType<T> {\n get<R extends unknown[], CT = null>(...args: R): CT extends null ? T : CT;\n}\n\n/**\n * Helps to get personal instance of dependency\n * @url https://silentium-lab.github.io/silentium/#/utils/private\n */\nexport const personal = <T>(\n buildingFn: (...args: any[]) => T,\n): PersonalType<T> => {\n if (buildingFn === undefined) {\n throw new Error(\"personal didn't receive buildingFn argument\");\n }\n\n return {\n get<R extends unknown[], CT = null>(...args: R): CT extends null ? T : CT {\n return buildingFn(...args) as CT extends null ? T : CT;\n },\n };\n};\n"],"names":["source","guest","value"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"silentium.cjs","sources":["../src/Source/Source.ts","../src/Guest/Guest.ts","../src/Guest/GuestCast.ts","../src/Guest/GuestSync.ts","../src/Guest/GuestDisposable.ts","../src/Guest/GuestApplied.ts","../src/Guest/GuestExecutorApplied.ts","../src/Patron/Patron.ts","../src/Patron/PatronOnce.ts","../src/Patron/PatronPool.ts","../src/Patron/PatronApplied.ts","../src/Patron/PatronExecutorApplied.ts","../src/Source/SourceChangeable.ts","../src/Source/SourceAll.ts","../src/Source/SourceSequence.ts","../src/Source/SourceMap.ts","../src/Source/SourceRace.ts","../src/Source/SourceDynamic.ts","../src/Source/SourceApplied.ts","../src/Source/SourceExecutorApplied.ts","../src/Source/SourceFiltered.ts","../src/Source/SourceOnce.ts","../src/Source/SourceSync.ts","../src/Personal/PersonalClass.ts","../src/Personal/Personal.ts"],"sourcesContent":["import { give, GuestType } from \"../Guest/Guest\";\n\nexport type SourceExecutorType<T> = (guest: GuestType<T>) => unknown;\n\nexport interface SourceObjectType<T> {\n value: SourceExecutorType<T>;\n}\n\nexport type SourceDataType<T> = Extract<\n T,\n string | number | boolean | Date | object | Array<unknown> | symbol\n>;\n\nexport type SourceType<T = any> =\n | SourceExecutorType<T>\n | SourceObjectType<T>\n | SourceDataType<T>;\n\n/**\n * Helps to connect source and guest, if you need to get value in guest from source\n * helpful because we don't know what shape of source do we have, it can be function or object or primitive\n * @url https://silentium-lab.github.io/silentium/#/utils/value\n */\nexport const value = <T>(source: SourceType<T>, guest: GuestType<T>) => {\n if (source === undefined || source === null) {\n throw new Error(\"value didn't receive source argument\");\n }\n if (guest === undefined || source === null) {\n throw new Error(\"value didn't receive guest argument\");\n }\n if (typeof source === \"function\") {\n source(guest);\n } else if (\n typeof source === \"object\" &&\n \"value\" in source &&\n typeof source.value === \"function\"\n ) {\n source.value(guest);\n } else {\n give(source as T, guest);\n }\n\n return source;\n};\n\n/**\n * Helps to check what some information is of source shape\n * @url https://silentium-lab.github.io/silentium/#/utils/is-source\n */\nexport const isSource = <T>(\n mbSource: T | SourceType<T>,\n): mbSource is SourceType<T> => {\n if (\n mbSource !== null &&\n typeof mbSource === \"object\" &&\n \"value\" in mbSource &&\n typeof mbSource.value === \"function\"\n ) {\n return true;\n }\n return mbSource !== null && mbSource !== undefined;\n};\n\n/**\n * Represents source as function\n * @url https://silentium-lab.github.io/silentium/#/source\n */\nexport const source = <T>(source: SourceType<T>): SourceExecutorType<T> => {\n if (source === undefined) {\n throw new Error(\"Source constructor didn't receive executor function\");\n }\n\n return (guest: GuestType<T>) => {\n value(source, guest);\n };\n};\n","import { source, SourceExecutorType, SourceType } from \"../Source/Source\";\n\ntype GuestIntroduction = \"guest\" | \"patron\";\n\nexport type GuestExecutorType<T = any, This = void> = (value: T) => This;\n\nexport interface GuestObjectType<T = any> {\n give(value: T): this;\n introduction?(): GuestIntroduction;\n}\n\nexport type GuestType<T = any> = GuestExecutorType<T> | GuestObjectType<T>;\n\n/**\n * Helps to give data to guest, guests can be of different shapes\n * function guest or object guest\n * @url https://silentium-lab.github.io/silentium/#/utils/give\n */\nexport const give = <T>(\n data: T,\n guest?: GuestType<T>,\n): GuestType<T> | SourceExecutorType<T> => {\n if (data === undefined) {\n throw new Error(\"give didn't receive data argument\");\n }\n if (guest === undefined) {\n return source<T>(data as SourceType<T>) as SourceExecutorType<T>;\n }\n if (typeof guest === \"function\") {\n guest(data);\n } else {\n guest.give(data);\n }\n return guest;\n};\n\n/**\n * Helps to check if mbGuest can be used to retrieve value\n * @url https://silentium-lab.github.io/silentium/#/utils/is-guest\n */\nexport const isGuest = (mbGuest: any): mbGuest is GuestType => {\n if (mbGuest === undefined) {\n throw new Error(\"isGuest didnt receive mbGuest argument\");\n }\n return typeof mbGuest === \"function\" || typeof mbGuest?.give === \"function\";\n};\n\n/**\n * Helps to create guest of object type\n * @url https://silentium-lab.github.io/silentium/#/guest\n */\nexport const guest = <T>(receiver: GuestExecutorType<T>) => {\n if (!receiver) {\n throw new Error(\"receiver function was not passed to Guest constructor\");\n }\n const result = {\n give(value: T) {\n receiver(value);\n return result;\n },\n };\n return result;\n};\n","import { give, GuestType } from \"./Guest\";\nimport { GuestDisposableType, MaybeDisposableType } from \"./GuestDisposable\";\n\n/**\n * Helps to inherit guest behavior, its introduction and dispose settings\n * @url https://silentium-lab.github.io/silentium/#/guest/guest-cast\n */\nexport const guestCast = <T>(\n sourceGuest: GuestType<any>,\n targetGuest: GuestType<T>,\n): GuestDisposableType<T> => {\n if (sourceGuest === undefined) {\n throw new Error(\"GuestCast didn't receive sourceGuest argument\");\n }\n if (targetGuest === undefined) {\n throw new Error(\"GuestCast didn't receive targetGuest argument\");\n }\n\n const result = {\n disposed(value: T | null): boolean {\n const maybeDisposable = sourceGuest as MaybeDisposableType;\n return maybeDisposable.disposed ? maybeDisposable.disposed(value) : false;\n },\n give(value: T) {\n give(value, targetGuest);\n return result;\n },\n introduction() {\n if (typeof sourceGuest === \"function\") {\n return \"guest\";\n }\n if (!sourceGuest.introduction) {\n return \"guest\";\n }\n return sourceGuest.introduction();\n },\n };\n\n return result;\n};\n","import { GuestObjectType } from \"./Guest\";\n\nexport interface GuestValueType<T = any> extends GuestObjectType<T> {\n value(): T;\n}\n\n/**\n * @url https://silentium-lab.github.io/silentium/#/guest/guest-sync\n */\nexport const guestSync = <T>(theValue?: T): GuestValueType<T> => {\n const result = {\n give(value: T) {\n theValue = value;\n return result;\n },\n value() {\n if (theValue === undefined) {\n throw new Error(\"no value in GuestSync!\");\n }\n return theValue;\n },\n };\n\n return result;\n};\n","import { give, GuestObjectType, GuestType } from \"./Guest\";\n\nexport interface GuestDisposableType<T = any> extends GuestObjectType<T> {\n disposed(value: T | null): boolean;\n}\n\nexport type MaybeDisposableType<T = any> = Partial<GuestDisposableType<T>>;\n\n/**\n * Connects to guest logic what can tell PatronPool\n * what guest don't need to receive new values\n * @url https://silentium-lab.github.io/silentium/#/guest/guest-disposable\n */\nexport const guestDisposable = <T>(\n guest: GuestType,\n disposeCheck: (value: T | null) => boolean,\n): GuestDisposableType<T> => {\n if (guest === undefined) {\n throw new Error(\"GuestDisposable didn't receive guest argument\");\n }\n if (disposeCheck === undefined) {\n throw new Error(\"GuestDisposable didn't receive disposeCheck argument\");\n }\n\n const result = {\n disposed(value: T | null): boolean {\n return disposeCheck(value);\n },\n give(value: T) {\n give(value, guest);\n return result;\n },\n };\n\n return result;\n};\n","import { give, GuestObjectType, GuestType } from \"../Guest/Guest\";\n\n/**\n * Helps to apply function to value before baseGuest will receive it\n * @url https://silentium-lab.github.io/silentium/#/guest/guest-applied\n */\nexport const guestApplied = <T, R>(\n baseGuest: GuestType<R>,\n applier: (value: T) => R,\n): GuestObjectType<T> => {\n const result = {\n give(value: T) {\n give(applier(value), baseGuest);\n return result;\n },\n };\n return result;\n};\n","import {\n give,\n GuestExecutorType,\n GuestObjectType,\n GuestType,\n} from \"../Guest/Guest\";\n\n/**\n * Apply function to guest function of receiving value, useful for debouncing or throttling\n * @url https://silentium-lab.github.io/silentium/#/guest/guest-executor-applied\n */\nexport const guestExecutorApplied = <T>(\n baseGuest: GuestType<T>,\n applier: (executor: GuestExecutorType<T>) => GuestExecutorType<T>,\n): GuestObjectType<T> => {\n const result = {\n give: applier((v) => give(v, baseGuest)),\n };\n\n return result as GuestObjectType<T>;\n};\n","import { give, GuestType } from \"../Guest/Guest\";\nimport { GuestDisposableType } from \"../Guest/GuestDisposable\";\n\nexport type PatronType<T> = GuestDisposableType<T> & {\n introduction(): \"patron\";\n};\n\n/**\n * Helps to check what incoming object is patron\n * @url https://silentium-lab.github.io/silentium/#/utils/is-patron\n */\nexport const isPatron = (guest: GuestType): guest is PatronType<unknown> =>\n typeof guest === \"object\" &&\n guest !== null &&\n guest?.introduction?.() === \"patron\";\n\nexport const introduction = () => \"patron\" as const;\n\n/**\n * Help to turn existed guest intro patron\n * @url https://silentium-lab.github.io/silentium/#/patron\n */\nexport const patron = <T>(\n willBePatron: GuestType<T>,\n): GuestDisposableType<T> => {\n if (willBePatron === undefined) {\n throw new Error(\"Patron didn't receive willBePatron argument\");\n }\n\n const result = {\n give(value: T) {\n give(value, willBePatron);\n return result;\n },\n disposed(value: T | null): boolean {\n const maybeDisposable = willBePatron as GuestDisposableType;\n return maybeDisposable?.disposed?.(value) || false;\n },\n introduction,\n };\n\n return result;\n};\n","import { introduction } from \"../Patron/Patron\";\nimport { give, GuestType } from \"../Guest/Guest\";\nimport {\n GuestDisposableType,\n MaybeDisposableType,\n} from \"../Guest/GuestDisposable\";\n\n/**\n * Helps to call patron only once, this will be helpful when you\n * need value but you know what value can not be existed at a time of requesting\n * @url https://silentium-lab.github.io/silentium/#/patron/patron-once\n */\nexport const patronOnce = <T>(\n baseGuest: GuestType<T>,\n): GuestDisposableType<T> => {\n if (baseGuest === undefined) {\n throw new Error(\"PatronOnce didn't receive baseGuest argument\");\n }\n\n let received = false;\n\n const result = {\n give(value: T) {\n if (!received) {\n received = true;\n give(value, baseGuest);\n }\n return result;\n },\n disposed(value: T | null): boolean {\n if (received) {\n return true;\n }\n const maybeDisposable = baseGuest as MaybeDisposableType;\n return maybeDisposable.disposed ? maybeDisposable.disposed(value) : false;\n },\n introduction,\n };\n\n return result;\n};\n","import { source, SourceType } from \"../Source/Source\";\nimport { give, GuestObjectType, GuestType } from \"../Guest/Guest\";\nimport { GuestDisposableType } from \"../Guest/GuestDisposable\";\n\nconst poolSets = new Map<PoolType, Set<GuestObjectType>>();\nconst poolsOfInitiators = new Map<SourceType, PoolType>();\nconst subSources = new Map<SourceType, SourceType[]>();\n\nconst poolsChangeFns: (() => void)[] = [];\nconst notifyPoolsChange = () => {\n poolsChangeFns.forEach((fn) => fn());\n};\nconst lastPatronPoolsStatistic = {\n poolsCount: 0,\n patronsCount: 0,\n};\n/**\n * Helps to debug application and see is it have problems with frozen pools\n * @url https://silentium-lab.github.io/silentium/#/utils/patron-pools-statistic\n */\nexport const patronPoolsStatistic = source<{\n poolsCount: number;\n patronsCount: number;\n}>((g) => {\n give(lastPatronPoolsStatistic, g);\n poolsChangeFns.push(() => {\n let patronsCount = 0;\n poolSets.forEach((set) => {\n patronsCount += set.size;\n });\n lastPatronPoolsStatistic.poolsCount = poolSets.size;\n lastPatronPoolsStatistic.patronsCount = patronsCount;\n give(lastPatronPoolsStatistic, g);\n });\n});\n\n/**\n * Helps to connect source and subsource, needed to destroy all sub sources\n * when base source will be destroyed\n * @url https://silentium-lab.github.io/silentium/#/utils/sub-source\n */\nexport const subSource = (source: SourceType, subSource: SourceType) => {\n if (!subSources.has(source)) {\n subSources.set(source, []);\n }\n\n subSources.get(source)?.push(subSource);\n};\n\n/**\n * Helps to remove all pools of related initiators\n * @url https://silentium-lab.github.io/silentium/#/utils/destroy\n */\nexport const destroy = (initiators: SourceType[]) => {\n initiators.forEach((initiator) => {\n const pool = poolsOfInitiators.get(initiator);\n pool?.destroy();\n const relatedInitiators = subSources.get(initiator);\n if (relatedInitiators) {\n destroy(relatedInitiators);\n }\n });\n};\n\n/**\n * Returns all pools related to one patron\n * @url https://silentium-lab.github.io/silentium/#/utils/patron-pools\n */\nexport const patronPools = (patron: GuestObjectType) => {\n const pools: PoolType[] = [];\n poolSets.forEach((pool, poolInstance) => {\n if (pool.has(patron)) {\n pools.push(poolInstance);\n }\n });\n return pools;\n};\n\n/**\n * Removes patron from all existed pools\n * @url https://silentium-lab.github.io/silentium/#/utils/remove-patron-from-pools\n */\nexport const removePatronFromPools = (patron: GuestObjectType) => {\n if (patron === undefined) {\n throw new Error(\"removePatronFromPools didn't receive patron argument\");\n }\n poolSets.forEach((pool) => {\n pool.delete(patron);\n });\n};\n\n/**\n * Checks what patron is connected with any pool\n * @url https://silentium-lab.github.io/silentium/#/utils/is-patron-in-pools\n */\nexport const isPatronInPools = (patron: GuestObjectType) => {\n if (patron === undefined) {\n throw new Error(\"isPatronInPools didn't receive patron argument\");\n }\n let inPool = false;\n poolSets.forEach((pool) => {\n if (!inPool) {\n inPool = pool.has(patron);\n }\n });\n return inPool;\n};\n\nexport interface PoolType<T = any> extends GuestObjectType<T> {\n add(guest: GuestObjectType<T>): this;\n distribute(receiving: T, possiblePatron: GuestObjectType<T>): this;\n remove(patron: GuestObjectType<T>): this;\n size(): number;\n destroy(): void;\n}\n\n/**\n * Pool class helps to implement dispatching for patron about new values\n * what may appear in sources\n * @url https://silentium-lab.github.io/silentium/#/patron/patron-pool\n */\nexport class PatronPool<T> implements PoolType<T> {\n private patrons: Set<GuestObjectType<T>>;\n\n public give: (value: T) => this;\n\n public constructor(private initiator: SourceType) {\n this.patrons = new Set<GuestObjectType<T>>();\n poolSets.set(this, this.patrons);\n poolsOfInitiators.set(this.initiator, this);\n const doReceive = (value: T) => {\n this.patrons.forEach((target) => {\n this.sendValueToGuest(value, target);\n });\n };\n this.give = (value: T) => {\n doReceive(value);\n return this;\n };\n notifyPoolsChange();\n }\n\n public size(): number {\n return this.patrons.size;\n }\n\n public add(shouldBePatron: GuestType<T>) {\n if (!shouldBePatron) {\n throw new Error(\"PatronPool add method received nothing!\");\n }\n if (\n typeof shouldBePatron !== \"function\" &&\n shouldBePatron.introduction &&\n shouldBePatron.introduction() === \"patron\"\n ) {\n this.patrons.add(shouldBePatron);\n }\n notifyPoolsChange();\n return this;\n }\n\n public remove(patron: GuestObjectType<T>) {\n this.patrons.delete(patron);\n notifyPoolsChange();\n return this;\n }\n\n public distribute(receiving: T, possiblePatron: GuestType<T>): this {\n this.add(possiblePatron);\n this.sendValueToGuest(receiving, possiblePatron);\n return this;\n }\n\n public destroy() {\n this.patrons.forEach((patron) => {\n this.remove(patron);\n });\n poolSets.delete(this);\n poolsOfInitiators.delete(this.initiator);\n notifyPoolsChange();\n return this;\n }\n\n private sendValueToGuest(value: T, guest: GuestType<T>) {\n const isDisposed = this.guestDisposed(value, guest);\n if (!isDisposed) {\n give(value, guest);\n }\n return this;\n }\n\n private guestDisposed(value: T, guest: GuestType<T>) {\n if ((guest as GuestDisposableType).disposed?.(value)) {\n this.remove(guest as GuestObjectType);\n return true;\n }\n return false;\n }\n}\n","import { introduction } from \"../Patron/Patron\";\nimport { GuestObjectType, GuestType } from \"../Guest/Guest\";\nimport { guestApplied } from \"../Guest/GuestApplied\";\n\n/**\n * Helps to apply function to patron\n * @url https://silentium-lab.github.io/silentium/#/patron/patron-applied\n */\nexport const patronApplied = <T, R>(\n baseGuest: GuestType<R>,\n applier: (value: T) => R,\n): GuestObjectType<T> => {\n const applied = guestApplied(baseGuest, applier);\n\n const result = {\n give(value: T) {\n applied.give(value);\n return result;\n },\n introduction,\n };\n\n return result;\n};\n","import { introduction } from \"../Patron/Patron\";\nimport { GuestExecutorType, GuestType } from \"../Guest/Guest\";\nimport { guestExecutorApplied } from \"../Guest/GuestExecutorApplied\";\n\n/**\n * Helps to apply function to patrons executor\n * @url https://silentium-lab.github.io/silentium/#/patron/patron-executor-applied\n */\nexport const patronExecutorApplied = <T>(\n baseGuest: GuestType<T>,\n applier: (executor: GuestExecutorType) => GuestExecutorType,\n) => {\n const guestApplied = guestExecutorApplied(baseGuest, applier);\n\n const result = {\n give(value: T) {\n guestApplied.give(value);\n return result;\n },\n introduction,\n };\n\n return result;\n};\n","import { guest, GuestObjectType, GuestType } from \"../Guest/Guest\";\nimport { isPatron } from \"../Patron/Patron\";\nimport { patronOnce } from \"../Patron/PatronOnce\";\nimport { PatronPool } from \"../Patron/PatronPool\";\nimport {\n isSource,\n SourceDataType,\n SourceObjectType,\n SourceType,\n value,\n} from \"./Source\";\n\nexport type SourceChangeableType<T = any> = SourceObjectType<T> &\n GuestObjectType<T>;\n\n/**\n * Ability to create source what can be changed later\n * @url https://silentium-lab.github.io/silentium/#/source/source-changeable\n */\nexport const sourceChangeable = <T>(source?: SourceType<T>) => {\n const createdSource = {} as SourceChangeableType<T>;\n const thePool = new PatronPool(createdSource);\n let isEmpty = source === undefined;\n\n if (source !== undefined && isSource(source)) {\n value(\n source,\n patronOnce((unwrappedSourceDocument) => {\n isEmpty = unwrappedSourceDocument === undefined;\n source = unwrappedSourceDocument as SourceDataType<T>;\n }),\n );\n } else {\n isEmpty = source === undefined;\n }\n\n createdSource.value = (g: GuestType<T>) => {\n if (isEmpty) {\n if (isPatron(g)) {\n thePool.add(g);\n }\n return createdSource;\n }\n\n if (typeof g === \"function\") {\n thePool.distribute(source, guest(g));\n } else {\n thePool.distribute(source, g);\n }\n\n return createdSource;\n };\n\n createdSource.give = (value: T) => {\n isEmpty = false;\n source = value as SourceDataType<T>;\n thePool.give(source);\n return createdSource;\n };\n\n return createdSource as SourceChangeableType<T>;\n};\n","import { give, guest, GuestType } from \"../Guest/Guest\";\nimport { guestCast } from \"../Guest/GuestCast\";\nimport { patron } from \"../Patron/Patron\";\nimport { SourceType, value } from \"./Source\";\nimport { sourceChangeable } from \"./SourceChangeable\";\n\n/**\n * Represents common value as Record or 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 = <T>(\n sources: SourceType<any>[] | Record<string, SourceType<any>>,\n) => {\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 isSourcesArray = Array.isArray(sources);\n const theAll = sourceChangeable<Record<string, unknown>>({});\n\n Object.entries(sources).forEach(([key, source]) => {\n keysKnown.add(key);\n value(\n source,\n patron((v) => {\n theAll.value(\n guest((all: Record<string, unknown>) => {\n keysFilled.add(key);\n const lastAll = {\n ...all,\n [key]: v,\n };\n theAll.give(lastAll);\n }),\n );\n }),\n );\n });\n\n return (guest: GuestType<T>) => {\n value((g) => {\n theAll.value(\n guestCast(g, (value) => {\n if (isAllFilled()) {\n give((isSourcesArray ? Object.values(value) : value) as T, g);\n }\n }),\n );\n }, guest);\n };\n};\n","import { give, GuestType } from \"../Guest/Guest\";\nimport { guestCast } from \"../Guest/GuestCast\";\nimport { patronOnce } from \"../Patron/PatronOnce\";\nimport { PersonalType } from \"../Personal/Personal\";\nimport { isSource, SourceType, value } from \"./Source\";\nimport { sourceAll } from \"./SourceAll\";\nimport { sourceChangeable, SourceChangeableType } from \"./SourceChangeable\";\n\n/**\n * Ability to apply source to source of array values sequentially\n * @url https://silentium-lab.github.io/silentium/#/source/source-sequence\n */\nexport const sourceSequence = <T, TG>(\n baseSource: SourceType<T[]>,\n targetSource: PersonalType<SourceType<TG>>,\n) => {\n if (baseSource === undefined) {\n throw new Error(\"SourceSequence didn't receive baseSource argument\");\n }\n if (targetSource === undefined) {\n throw new Error(\"SourceSequence didn't receive targetSource argument\");\n }\n\n return (guest: GuestType<TG[]>) => {\n const sequenceSource = sourceChangeable();\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(sourceChangeable());\n });\n\n const nextItemHandle = () => {\n if (theValue[index + 1] !== undefined) {\n index = index + 1;\n handle();\n }\n };\n\n function handle() {\n const currentSource = sources[index];\n const nextValue = theValue[index];\n if (isSource(nextValue)) {\n value(\n nextValue,\n patronOnce((theNextValue) => {\n sequenceSource.give(theNextValue);\n value(source, currentSource);\n nextItemHandle();\n }),\n );\n } else {\n sequenceSource.give(nextValue);\n value(source, currentSource);\n nextItemHandle();\n }\n }\n\n if (theValue[index] !== undefined) {\n handle();\n value(sourceAll(sources), guest);\n } else {\n give([], guest);\n }\n }),\n );\n };\n};\n","import { GuestType } from \"../Guest/Guest\";\nimport { guestCast } from \"../Guest/GuestCast\";\nimport { PersonalType } from \"../Personal/Personal\";\nimport { SourceType, value } from \"./Source\";\nimport { sourceAll } from \"./SourceAll\";\n\n/**\n * Helps to modify many sources with one private source\n * @url https://silentium-lab.github.io/silentium/#/source/source-map\n */\nexport const sourceMap = <T, TG>(\n baseSource: SourceType<T[]>,\n targetSource: PersonalType<SourceType<TG>>,\n) => {\n if (baseSource === undefined) {\n throw new Error(\"SourceMap didn't receive baseSource argument\");\n }\n if (targetSource === undefined) {\n throw new Error(\"SourceMap didn't receive targetSource argument\");\n }\n\n return (guest: GuestType<TG[]>) => {\n value(\n baseSource,\n guestCast(<GuestType>guest, (theValue) => {\n const sources: SourceType[] = [];\n theValue.forEach((val) => {\n const source = targetSource.get(val);\n sources.push(source);\n });\n value(sourceAll(sources), guest);\n }),\n );\n return this;\n };\n};\n","import { give, GuestType } from \"../Guest/Guest\";\nimport { guestCast } from \"../Guest/GuestCast\";\nimport { SourceType, value } from \"./Source\";\n\n/**\n * Connects guest with source what give response faster than others\n * @url https://silentium-lab.github.io/silentium/#/source/source-race\n */\nexport const sourceRace = <T>(sources: SourceType<T>[]) => {\n if (sources === undefined) {\n throw new Error(\"SourceRace didnt receive sources argument\");\n }\n\n return (guest: GuestType<T>) => {\n let connectedWithSource: SourceType | null = null;\n sources.forEach((source) => {\n value(\n source,\n guestCast(<GuestType>guest, (value) => {\n if (!connectedWithSource || connectedWithSource === source) {\n give(value as T, guest);\n connectedWithSource = source;\n }\n }),\n );\n });\n };\n};\n","import { give, GuestType } from \"../Guest/Guest\";\nimport { SourceType, value } from \"./Source\";\nimport { SourceChangeableType } from \"./SourceChangeable\";\n\n/**\n * Ability to build common changeable source from different guest and source\n * @url https://silentium-lab.github.io/silentium/#/source/source-dynamic\n */\nexport const sourceDynamic = <T>(\n baseGuest: GuestType<T>,\n baseSource: SourceType<T>,\n): SourceChangeableType<T> => {\n if (baseGuest === undefined) {\n throw new Error(\"SourceDynamic didn't receive baseGuest argument\");\n }\n if (baseSource === undefined) {\n throw new Error(\"SourceDynamic didn't receive baseSource argument\");\n }\n\n const sourceObject = {\n value(guest: GuestType<T>) {\n value(baseSource, guest);\n return sourceObject;\n },\n give(value: T) {\n give(value, baseGuest);\n return this;\n },\n };\n\n return sourceObject;\n};\n","import { give, GuestType } from \"../Guest/Guest\";\nimport { guestCast } from \"../Guest/GuestCast\";\nimport { SourceType, value } from \"../Source/Source\";\n\n/**\n * Gives ability to apply function to source value\n * @url https://silentium-lab.github.io/silentium/#/source/source-applied\n */\nexport const sourceApplied = <T, R>(\n baseSource: SourceType<T>,\n applier: (v: T) => R,\n) => {\n return (guest: GuestType<R>) => {\n value(\n baseSource,\n guestCast(guest, (v) => {\n give(applier(v), guest);\n }),\n );\n };\n};\n","import { SourceExecutorType, SourceType, value } from \"../Source/Source\";\n\n/**\n * Ability to apply function to source executor, helpful when need to apply throttling or debounce\n * @url https://silentium-lab.github.io/silentium/#/source/source-executor-applied\n */\nexport const sourceExecutorApplied = <T>(\n source: SourceType<T>,\n applier: (executor: SourceExecutorType<T>) => SourceExecutorType<T>,\n) => {\n return applier((g) => {\n value(source, g);\n });\n};\n","import { give, GuestType } from \"../Guest/Guest\";\nimport { guestCast } from \"../Guest/GuestCast\";\nimport { SourceType, value } from \"../Source/Source\";\n\n/**\n * Helps not to respond with information what checked by predicate function\n * @url https://silentium-lab.github.io/silentium/#/source/source-filtered\n */\nexport const sourceFiltered = <T>(\n baseSource: SourceType<T>,\n predicate: (v: T) => boolean,\n) => {\n return (g: GuestType<T>) => {\n value(\n baseSource,\n guestCast(g, (v) => {\n if (predicate(v) === true) {\n give(v, g);\n }\n }),\n );\n };\n};\n","import { GuestType } from \"../Guest/Guest\";\nimport { SourceType, value } from \"./Source\";\nimport { sourceChangeable } 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 = sourceChangeable(initialValue);\n\n return {\n value(guest: GuestType<T>) {\n value(source, guest);\n return this;\n },\n give(value: T) {\n if (!isFilled) {\n source.give(value);\n isFilled = true;\n }\n return this;\n },\n };\n};\n","import { GuestType } from \"../Guest/Guest\";\nimport { guestSync } from \"../Guest/GuestSync\";\nimport { patron } from \"../Patron/Patron\";\nimport { SourceObjectType, SourceType, value } from \"../Source/Source\";\n\n/**\n * Helps to represent source value as sync value, what can be returned\n * useful for example in tests\n * @url https://silentium-lab.github.io/silentium/#/source/source-sync\n */\nexport const sourceSync = <T>(\n baseSource: SourceType<T>,\n): SourceObjectType<T> & { syncValue(): T } => {\n const syncGuest = guestSync<T>();\n value(baseSource, patron(syncGuest));\n\n return {\n value(guest: GuestType<T>) {\n value(baseSource, guest);\n return this;\n },\n syncValue() {\n try {\n return syncGuest.value() as T;\n } catch {\n throw new Error(\"No value in SourceSync\");\n }\n },\n };\n};\n","import { PersonalType } from \"./Personal\";\n\ninterface Constructable<T> {\n new (...args: unknown[]): T;\n}\n\ninterface Prototyped<T> {\n prototype: T;\n}\n\nexport const personalClass = <T>(\n constructorFn: Prototyped<T>,\n modules: Record<string, unknown> = {},\n): PersonalType<T> => {\n if (constructorFn === undefined) {\n throw new Error(\"PrivateClass didn't receive constructorFn argument\");\n }\n\n return {\n get<R extends unknown[], CT = null>(...args: R): CT extends null ? T : CT {\n return new (constructorFn as Constructable<T>)(\n ...args,\n modules,\n ) as CT extends null ? T : CT;\n },\n };\n};\n","export interface PersonalType<T> {\n get<R extends unknown[], CT = null>(...args: R): CT extends null ? T : CT;\n}\n\n/**\n * Helps to get personal instance of dependency\n * @url https://silentium-lab.github.io/silentium/#/utils/private\n */\nexport const personal = <T>(\n buildingFn: (...args: any[]) => T,\n): PersonalType<T> => {\n if (buildingFn === undefined) {\n throw new Error(\"personal didn't receive buildingFn argument\");\n }\n\n return {\n get<R extends unknown[], CT = null>(...args: R): CT extends null ? T : CT {\n return buildingFn(...args) as CT extends null ? T : CT;\n },\n };\n};\n"],"names":["source","guest","subSource","value"],"mappings":"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"}
|
package/dist/silentium.d.ts
CHANGED
|
@@ -106,11 +106,25 @@ declare const patron: <T>(willBePatron: GuestType<T>) => GuestDisposableType<T>;
|
|
|
106
106
|
*/
|
|
107
107
|
declare const patronOnce: <T>(baseGuest: GuestType<T>) => GuestDisposableType<T>;
|
|
108
108
|
|
|
109
|
+
/**
|
|
110
|
+
* Helps to debug application and see is it have problems with frozen pools
|
|
111
|
+
* @url https://silentium-lab.github.io/silentium/#/utils/patron-pools-statistic
|
|
112
|
+
*/
|
|
113
|
+
declare const patronPoolsStatistic: SourceExecutorType<{
|
|
114
|
+
poolsCount: number;
|
|
115
|
+
patronsCount: number;
|
|
116
|
+
}>;
|
|
117
|
+
/**
|
|
118
|
+
* Helps to connect source and subsource, needed to destroy all sub sources
|
|
119
|
+
* when base source will be destroyed
|
|
120
|
+
* @url https://silentium-lab.github.io/silentium/#/utils/sub-source
|
|
121
|
+
*/
|
|
122
|
+
declare const subSource: (source: SourceType, subSource: SourceType) => void;
|
|
109
123
|
/**
|
|
110
124
|
* Helps to remove all pools of related initiators
|
|
111
125
|
* @url https://silentium-lab.github.io/silentium/#/utils/destroy
|
|
112
126
|
*/
|
|
113
|
-
declare const destroy: (initiators:
|
|
127
|
+
declare const destroy: (initiators: SourceType[]) => void;
|
|
114
128
|
/**
|
|
115
129
|
* Returns all pools related to one patron
|
|
116
130
|
* @url https://silentium-lab.github.io/silentium/#/utils/patron-pools
|
|
@@ -142,12 +156,12 @@ declare class PatronPool<T> implements PoolType<T> {
|
|
|
142
156
|
private initiator;
|
|
143
157
|
private patrons;
|
|
144
158
|
give: (value: T) => this;
|
|
145
|
-
constructor(initiator:
|
|
159
|
+
constructor(initiator: SourceType);
|
|
146
160
|
size(): number;
|
|
147
161
|
add(shouldBePatron: GuestType<T>): this;
|
|
148
162
|
remove(patron: GuestObjectType<T>): this;
|
|
149
163
|
distribute(receiving: T, possiblePatron: GuestType<T>): this;
|
|
150
|
-
destroy():
|
|
164
|
+
destroy(): this;
|
|
151
165
|
private sendValueToGuest;
|
|
152
166
|
private guestDisposed;
|
|
153
167
|
}
|
|
@@ -255,4 +269,4 @@ interface Prototyped<T> {
|
|
|
255
269
|
}
|
|
256
270
|
declare const personalClass: <T>(constructorFn: Prototyped<T>, modules?: Record<string, unknown>) => PersonalType<T>;
|
|
257
271
|
|
|
258
|
-
export { type GuestDisposableType, type GuestExecutorType, type GuestObjectType, type GuestType, type GuestValueType, type MaybeDisposableType, PatronPool, type PatronType, type PersonalType, type PoolType, type SourceChangeableType, type SourceDataType, type SourceExecutorType, type SourceObjectType, type SourceType, destroy, give, guest, guestApplied, guestCast, guestDisposable, guestExecutorApplied, guestSync, introduction, isGuest, isPatron, isPatronInPools, isSource, patron, patronApplied, patronExecutorApplied, patronOnce, patronPools, personal, personalClass, removePatronFromPools, source, sourceAll, sourceApplied, sourceChangeable, sourceDynamic, sourceExecutorApplied, sourceFiltered, sourceMap, sourceOnce, sourceRace, sourceSequence, sourceSync, value };
|
|
272
|
+
export { type GuestDisposableType, type GuestExecutorType, type GuestObjectType, type GuestType, type GuestValueType, type MaybeDisposableType, PatronPool, type PatronType, type PersonalType, type PoolType, type SourceChangeableType, type SourceDataType, type SourceExecutorType, type SourceObjectType, type SourceType, destroy, give, guest, guestApplied, guestCast, guestDisposable, guestExecutorApplied, guestSync, introduction, isGuest, isPatron, isPatronInPools, isSource, patron, patronApplied, patronExecutorApplied, patronOnce, patronPools, patronPoolsStatistic, personal, personalClass, removePatronFromPools, source, sourceAll, sourceApplied, sourceChangeable, sourceDynamic, sourceExecutorApplied, sourceFiltered, sourceMap, sourceOnce, sourceRace, sourceSequence, sourceSync, subSource, value };
|
package/dist/silentium.js
CHANGED
|
@@ -193,10 +193,41 @@ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { en
|
|
|
193
193
|
var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
|
|
194
194
|
const poolSets = /* @__PURE__ */ new Map();
|
|
195
195
|
const poolsOfInitiators = /* @__PURE__ */ new Map();
|
|
196
|
+
const subSources = /* @__PURE__ */ new Map();
|
|
197
|
+
const poolsChangeFns = [];
|
|
198
|
+
const notifyPoolsChange = () => {
|
|
199
|
+
poolsChangeFns.forEach((fn) => fn());
|
|
200
|
+
};
|
|
201
|
+
const lastPatronPoolsStatistic = {
|
|
202
|
+
poolsCount: 0,
|
|
203
|
+
patronsCount: 0
|
|
204
|
+
};
|
|
205
|
+
const patronPoolsStatistic = source((g) => {
|
|
206
|
+
give(lastPatronPoolsStatistic, g);
|
|
207
|
+
poolsChangeFns.push(() => {
|
|
208
|
+
let patronsCount = 0;
|
|
209
|
+
poolSets.forEach((set) => {
|
|
210
|
+
patronsCount += set.size;
|
|
211
|
+
});
|
|
212
|
+
lastPatronPoolsStatistic.poolsCount = poolSets.size;
|
|
213
|
+
lastPatronPoolsStatistic.patronsCount = patronsCount;
|
|
214
|
+
give(lastPatronPoolsStatistic, g);
|
|
215
|
+
});
|
|
216
|
+
});
|
|
217
|
+
const subSource = (source2, subSource2) => {
|
|
218
|
+
if (!subSources.has(source2)) {
|
|
219
|
+
subSources.set(source2, []);
|
|
220
|
+
}
|
|
221
|
+
subSources.get(source2)?.push(subSource2);
|
|
222
|
+
};
|
|
196
223
|
const destroy = (initiators) => {
|
|
197
224
|
initiators.forEach((initiator) => {
|
|
198
225
|
const pool = poolsOfInitiators.get(initiator);
|
|
199
226
|
pool?.destroy();
|
|
227
|
+
const relatedInitiators = subSources.get(initiator);
|
|
228
|
+
if (relatedInitiators) {
|
|
229
|
+
destroy(relatedInitiators);
|
|
230
|
+
}
|
|
200
231
|
});
|
|
201
232
|
};
|
|
202
233
|
const patronPools = (patron) => {
|
|
@@ -210,7 +241,7 @@ const patronPools = (patron) => {
|
|
|
210
241
|
};
|
|
211
242
|
const removePatronFromPools = (patron) => {
|
|
212
243
|
if (patron === void 0) {
|
|
213
|
-
throw new Error("removePatronFromPools
|
|
244
|
+
throw new Error("removePatronFromPools didn't receive patron argument");
|
|
214
245
|
}
|
|
215
246
|
poolSets.forEach((pool) => {
|
|
216
247
|
pool.delete(patron);
|
|
@@ -218,7 +249,7 @@ const removePatronFromPools = (patron) => {
|
|
|
218
249
|
};
|
|
219
250
|
const isPatronInPools = (patron) => {
|
|
220
251
|
if (patron === void 0) {
|
|
221
|
-
throw new Error("isPatronInPools
|
|
252
|
+
throw new Error("isPatronInPools didn't receive patron argument");
|
|
222
253
|
}
|
|
223
254
|
let inPool = false;
|
|
224
255
|
poolSets.forEach((pool) => {
|
|
@@ -245,6 +276,7 @@ class PatronPool {
|
|
|
245
276
|
doReceive(value);
|
|
246
277
|
return this;
|
|
247
278
|
};
|
|
279
|
+
notifyPoolsChange();
|
|
248
280
|
}
|
|
249
281
|
size() {
|
|
250
282
|
return this.patrons.size;
|
|
@@ -256,10 +288,12 @@ class PatronPool {
|
|
|
256
288
|
if (typeof shouldBePatron !== "function" && shouldBePatron.introduction && shouldBePatron.introduction() === "patron") {
|
|
257
289
|
this.patrons.add(shouldBePatron);
|
|
258
290
|
}
|
|
291
|
+
notifyPoolsChange();
|
|
259
292
|
return this;
|
|
260
293
|
}
|
|
261
294
|
remove(patron) {
|
|
262
295
|
this.patrons.delete(patron);
|
|
296
|
+
notifyPoolsChange();
|
|
263
297
|
return this;
|
|
264
298
|
}
|
|
265
299
|
distribute(receiving, possiblePatron) {
|
|
@@ -273,12 +307,15 @@ class PatronPool {
|
|
|
273
307
|
});
|
|
274
308
|
poolSets.delete(this);
|
|
275
309
|
poolsOfInitiators.delete(this.initiator);
|
|
310
|
+
notifyPoolsChange();
|
|
311
|
+
return this;
|
|
276
312
|
}
|
|
277
313
|
sendValueToGuest(value, guest) {
|
|
278
314
|
const isDisposed = this.guestDisposed(value, guest);
|
|
279
315
|
if (!isDisposed) {
|
|
280
316
|
give(value, guest);
|
|
281
317
|
}
|
|
318
|
+
return this;
|
|
282
319
|
}
|
|
283
320
|
guestDisposed(value, guest) {
|
|
284
321
|
if (guest.disposed?.(value)) {
|
|
@@ -316,7 +353,6 @@ const patronExecutorApplied = (baseGuest, applier) => {
|
|
|
316
353
|
const sourceChangeable = (source) => {
|
|
317
354
|
const createdSource = {};
|
|
318
355
|
const thePool = new PatronPool(createdSource);
|
|
319
|
-
const theEmptyPool = new PatronPool(createdSource);
|
|
320
356
|
let isEmpty = source === void 0;
|
|
321
357
|
if (source !== void 0 && isSource(source)) {
|
|
322
358
|
value(
|
|
@@ -332,7 +368,7 @@ const sourceChangeable = (source) => {
|
|
|
332
368
|
createdSource.value = (g) => {
|
|
333
369
|
if (isEmpty) {
|
|
334
370
|
if (isPatron(g)) {
|
|
335
|
-
|
|
371
|
+
thePool.add(g);
|
|
336
372
|
}
|
|
337
373
|
return createdSource;
|
|
338
374
|
}
|
|
@@ -347,7 +383,6 @@ const sourceChangeable = (source) => {
|
|
|
347
383
|
isEmpty = false;
|
|
348
384
|
source = value2;
|
|
349
385
|
thePool.give(source);
|
|
350
|
-
theEmptyPool.give(source);
|
|
351
386
|
return createdSource;
|
|
352
387
|
};
|
|
353
388
|
return createdSource;
|
|
@@ -599,5 +634,5 @@ const personal = (buildingFn) => {
|
|
|
599
634
|
};
|
|
600
635
|
};
|
|
601
636
|
|
|
602
|
-
export { PatronPool, destroy, give, guest, guestApplied, guestCast, guestDisposable, guestExecutorApplied, guestSync, introduction, isGuest, isPatron, isPatronInPools, isSource, patron, patronApplied, patronExecutorApplied, patronOnce, patronPools, personal, personalClass, removePatronFromPools, source, sourceAll, sourceApplied, sourceChangeable, sourceDynamic, sourceExecutorApplied, sourceFiltered, sourceMap, sourceOnce, sourceRace, sourceSequence, sourceSync, value };
|
|
637
|
+
export { PatronPool, destroy, give, guest, guestApplied, guestCast, guestDisposable, guestExecutorApplied, guestSync, introduction, isGuest, isPatron, isPatronInPools, isSource, patron, patronApplied, patronExecutorApplied, patronOnce, patronPools, patronPoolsStatistic, personal, personalClass, removePatronFromPools, source, sourceAll, sourceApplied, sourceChangeable, sourceDynamic, sourceExecutorApplied, sourceFiltered, sourceMap, sourceOnce, sourceRace, sourceSequence, sourceSync, subSource, value };
|
|
603
638
|
//# sourceMappingURL=silentium.js.map
|