patron-oop 1.3.0 → 1.4.0
Sign up to get free protection for your applications and to get access to all the features.
- package/CHANGELOG.md +8 -0
- package/README.md +60 -0
- package/dist/patron.d.ts +18 -24
- package/dist/patron.js.map +1 -1
- package/dist/patron.mjs.map +1 -1
- package/package.json +1 -1
- package/src/Cache.ts +4 -2
- package/src/Chain.ts +7 -3
- package/src/Factory.ts +4 -2
- package/src/FactoryDynamic.ts +1 -1
- package/src/FactoryWithFactories.ts +1 -1
- package/src/Guest.ts +12 -2
- package/src/GuestAware.ts +5 -2
- package/src/GuestCast.ts +1 -1
- package/src/GuestInTheMiddle.ts +1 -1
- package/src/GuestPool.ts +1 -1
- package/src/GuestSync.ts +5 -1
- package/src/Patron.ts +1 -1
- package/src/PatronOnce.ts +2 -2
- package/src/PatronPool.ts +1 -1
- package/src/PoolType.ts +1 -1
- package/src/Source.ts +4 -2
- package/src/index.ts +0 -1
- package/src/CacheType.ts +0 -4
- package/src/ChainType.ts +0 -7
- package/src/FactoryType.ts +0 -3
- package/src/GuestAwareType.ts +0 -5
- package/src/GuestExecutorType.ts +0 -3
- package/src/GuestType.ts +0 -10
- package/src/GuestValueType.ts +0 -5
- package/src/SourceType.ts +0 -4
package/CHANGELOG.md
CHANGED
@@ -2,6 +2,14 @@
|
|
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
|
+
## [1.4.0](https://github.com/kosukhin/patron/compare/v1.3.0...v1.4.0) (2024-10-13)
|
6
|
+
|
7
|
+
|
8
|
+
### Features
|
9
|
+
|
10
|
+
* **main:** заготовка для описания каждого класса ([03344dd](https://github.com/kosukhin/patron/commit/03344dd86952422e055c581a5b38944d89240db1))
|
11
|
+
* **main:** убрать типы из отдельных файлов ([1b27b36](https://github.com/kosukhin/patron/commit/1b27b36870a3fb07ce5eb875f88a88d6efa86e65))
|
12
|
+
|
5
13
|
## [1.3.0](https://github.com/kosukhin/patron/compare/v1.2.1...v1.3.0) (2024-10-13)
|
6
14
|
|
7
15
|
|
package/README.md
CHANGED
@@ -7,3 +7,63 @@ Patron JS - это библиотека для ООП программирова
|
|
7
7
|
|
8
8
|
Patron - это сущность, которая является посетителем какого-либо объекта и приходит к объекту за результатом вычисления.
|
9
9
|
Guest - это почти такая же сущность как и Patron, разница только в том что Patron нужно постоянно уведомлять об изменениях а Guest не нужно.
|
10
|
+
|
11
|
+
# Guest
|
12
|
+
|
13
|
+
TODO
|
14
|
+
|
15
|
+
# GuestAware
|
16
|
+
|
17
|
+
TODO
|
18
|
+
|
19
|
+
# GuestCast
|
20
|
+
|
21
|
+
TODO
|
22
|
+
|
23
|
+
# GuestInTheMiddle
|
24
|
+
|
25
|
+
TODO
|
26
|
+
|
27
|
+
# GuestPool
|
28
|
+
|
29
|
+
TODO
|
30
|
+
|
31
|
+
# GuestSync
|
32
|
+
|
33
|
+
TODO
|
34
|
+
|
35
|
+
# Patron
|
36
|
+
|
37
|
+
TODO
|
38
|
+
|
39
|
+
# PatronOnce
|
40
|
+
|
41
|
+
TODO
|
42
|
+
|
43
|
+
# PatronPool
|
44
|
+
|
45
|
+
TODO
|
46
|
+
|
47
|
+
# Source
|
48
|
+
|
49
|
+
TODO
|
50
|
+
|
51
|
+
# Factory
|
52
|
+
|
53
|
+
TODO
|
54
|
+
|
55
|
+
# FactoryDynamic
|
56
|
+
|
57
|
+
TODO
|
58
|
+
|
59
|
+
# FactoryWithFactories
|
60
|
+
|
61
|
+
TODO
|
62
|
+
|
63
|
+
# Chain
|
64
|
+
|
65
|
+
TODO
|
66
|
+
|
67
|
+
# Cache
|
68
|
+
|
69
|
+
TODO
|
package/dist/patron.d.ts
CHANGED
@@ -1,18 +1,30 @@
|
|
1
|
+
import { GuestAwareType as GuestAwareType$1 } from 'src/GuestAware';
|
2
|
+
|
1
3
|
type GuestIntroduction = "guest" | "patron";
|
2
4
|
interface ReceiveOptions {
|
3
5
|
data?: unknown;
|
4
6
|
}
|
7
|
+
type GuestExecutorType<T> = (value: T, options?: ReceiveOptions) => void;
|
5
8
|
interface GuestType<T = unknown> {
|
6
9
|
receive(value: T, options?: ReceiveOptions): this;
|
7
10
|
introduction?(): GuestIntroduction;
|
8
11
|
}
|
12
|
+
declare class Guest<T> implements GuestType<T> {
|
13
|
+
private receiver;
|
14
|
+
constructor(receiver: GuestExecutorType<T>);
|
15
|
+
receive(value: T, options?: ReceiveOptions): this;
|
16
|
+
}
|
9
17
|
|
10
18
|
interface GuestAwareType<T = unknown> {
|
11
19
|
receiving(guest: GuestType<T>): unknown;
|
12
20
|
}
|
21
|
+
declare class GuestAware<T = unknown> implements GuestAwareType<T> {
|
22
|
+
private guestReceiver;
|
23
|
+
constructor(guestReceiver: (guest: GuestType<T>) => void);
|
24
|
+
receiving(guest: GuestType<T>): GuestType<T>;
|
25
|
+
}
|
13
26
|
|
14
27
|
type CacheType<T = unknown> = GuestType<T> & GuestAwareType<T>;
|
15
|
-
|
16
28
|
declare class Cache<T> implements CacheType<T> {
|
17
29
|
private defaultValue;
|
18
30
|
private theCache;
|
@@ -27,7 +39,6 @@ interface ChainType<T = unknown> {
|
|
27
39
|
resultArray(guest: GuestType<T>): this;
|
28
40
|
receiveKey<R>(key: string): GuestType<R>;
|
29
41
|
}
|
30
|
-
|
31
42
|
declare class Chain<T> implements ChainType<T> {
|
32
43
|
private theChain;
|
33
44
|
private keysKnown;
|
@@ -40,13 +51,12 @@ declare class Chain<T> implements ChainType<T> {
|
|
40
51
|
private isChainFilled;
|
41
52
|
}
|
42
53
|
|
43
|
-
interface FactoryType<T> {
|
44
|
-
create<R extends unknown[], CT = null>(...args: R): CT extends null ? T : CT;
|
45
|
-
}
|
46
|
-
|
47
54
|
interface Prototyped$1<T> {
|
48
55
|
prototype: T;
|
49
56
|
}
|
57
|
+
interface FactoryType<T> {
|
58
|
+
create<R extends unknown[], CT = null>(...args: R): CT extends null ? T : CT;
|
59
|
+
}
|
50
60
|
declare class Factory<T> implements FactoryType<T> {
|
51
61
|
private constructorFn;
|
52
62
|
constructor(constructorFn: Prototyped$1<T>);
|
@@ -69,20 +79,6 @@ declare class FactoryWithFactories<T> implements FactoryType<T> {
|
|
69
79
|
create<R extends unknown[], CT = null>(...args: R): CT extends null ? T : CT;
|
70
80
|
}
|
71
81
|
|
72
|
-
type GuestExecutorType<T> = (value: T, options?: ReceiveOptions) => void;
|
73
|
-
|
74
|
-
declare class Guest<T> implements GuestType<T> {
|
75
|
-
private receiver;
|
76
|
-
constructor(receiver: GuestExecutorType<T>);
|
77
|
-
receive(value: T, options?: ReceiveOptions): this;
|
78
|
-
}
|
79
|
-
|
80
|
-
declare class GuestAware<T = unknown> implements GuestAwareType<T> {
|
81
|
-
private guestReceiver;
|
82
|
-
constructor(guestReceiver: (guest: GuestType<T>) => void);
|
83
|
-
receiving(guest: GuestType<T>): GuestType<T>;
|
84
|
-
}
|
85
|
-
|
86
82
|
declare class GuestCast<T> implements GuestType<T> {
|
87
83
|
private sourceGuest;
|
88
84
|
private targetGuest;
|
@@ -119,7 +115,6 @@ declare class GuestPool<T> implements GuestType<T>, PoolType<T> {
|
|
119
115
|
interface GuestValueType<T = unknown> extends GuestType<T> {
|
120
116
|
value(): T;
|
121
117
|
}
|
122
|
-
|
123
118
|
declare class GuestSync<T> implements GuestValueType<T> {
|
124
119
|
private theValue;
|
125
120
|
constructor(theValue: T);
|
@@ -160,8 +155,7 @@ declare class PatronPool<T> implements PoolType<T> {
|
|
160
155
|
private sendValueToGuest;
|
161
156
|
}
|
162
157
|
|
163
|
-
type SourceType<T = unknown> = GuestAwareType<T> & GuestType<T>;
|
164
|
-
|
158
|
+
type SourceType<T = unknown> = GuestAwareType$1<T> & GuestType<T>;
|
165
159
|
declare class Source<T> implements SourceType<T> {
|
166
160
|
private sourceDocument;
|
167
161
|
private pool;
|
@@ -170,4 +164,4 @@ declare class Source<T> implements SourceType<T> {
|
|
170
164
|
receiving(guest: GuestType<T>): this;
|
171
165
|
}
|
172
166
|
|
173
|
-
export { Cache, Chain, Factory, FactoryDynamic, type FactoryType, FactoryWithFactories, Guest, GuestAware, GuestCast, GuestInTheMiddle, GuestPool, GuestSync, Patron, PatronOnce, PatronPool, Source, removePatronFromPools };
|
167
|
+
export { Cache, type CacheType, Chain, type ChainType, Factory, FactoryDynamic, type FactoryType, FactoryWithFactories, Guest, GuestAware, type GuestAwareType, GuestCast, type GuestExecutorType, GuestInTheMiddle, GuestPool, GuestSync, type GuestType, type GuestValueType, Patron, PatronOnce, PatronPool, type ReceiveOptions, Source, type SourceType, removePatronFromPools };
|
package/dist/patron.js.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"patron.js","sources":["../src/PatronPool.ts","../src/Cache.ts","../src/Guest.ts","../src/GuestPool.ts","../src/GuestInTheMiddle.ts","../src/Chain.ts","../src/Factory.ts","../src/FactoryDynamic.ts","../src/FactoryWithFactories.ts","../src/GuestAware.ts","../src/GuestCast.ts","../src/GuestSync.ts","../src/Patron.ts","../src/PatronOnce.ts","../src/Source.ts"],"sourcesContent":["import { PoolType } from \"./PoolType\";\nimport { GuestType, ReceiveOptions } from \"./GuestType\";\n\nconst poolSets = new Map<PoolType, Set<GuestType>>();\n\n/**\n * Удалить патрон из всех пулов\n */\nexport const removePatronFromPools = (patron: GuestType) => {\n poolSets.forEach((pool) => {\n pool.delete(patron);\n });\n};\n\nexport class PatronPool<T> implements PoolType<T> {\n private patrons = new Set<GuestType<T>>();\n\n public receive: (value: T, options?: ReceiveOptions) => this;\n\n public constructor(private initiator: unknown) {\n poolSets.set(this, this.patrons);\n\n let lastMicrotask: (() => void) | null = null;\n const doReceive = (value: T, options?: ReceiveOptions) => {\n this.patrons.forEach((target) => {\n this.sendValueToGuest(value, target, options);\n });\n };\n this.receive = (value: T, options?: ReceiveOptions) => {\n const currentMicroTask = () => {\n if (currentMicroTask === lastMicrotask) {\n doReceive(value, options);\n }\n };\n lastMicrotask = currentMicroTask;\n queueMicrotask(currentMicroTask);\n return this;\n };\n }\n\n public add(shouldBePatron: GuestType<T>) {\n if (\n shouldBePatron.introduction &&\n shouldBePatron.introduction() === \"patron\"\n ) {\n this.patrons.add(shouldBePatron);\n }\n return this;\n }\n\n public remove(patron: GuestType<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 private sendValueToGuest(\n value: T,\n guest: GuestType<T>,\n options?: ReceiveOptions,\n ) {\n guest.receive(value, {\n ...options,\n data: {\n ...((options?.data as Record<string, unknown>) ?? {}),\n initiator: this.initiator,\n pool: this,\n },\n });\n }\n}\n","import { PatronPool } from \"./PatronPool\";\nimport { CacheType } from \"./CacheType\";\nimport { GuestType, ReceiveOptions } from \"./GuestType\";\n\nexport class Cache<T> implements CacheType<T> {\n private pool: PatronPool<T>;\n\n public constructor(\n initiator: unknown,\n private defaultValue: T | null = null,\n private theCache: T | null = null,\n ) {\n this.pool = new PatronPool<T>(initiator);\n }\n\n public receive(value: T, options?: ReceiveOptions): this {\n this.theCache = value;\n this.pool.receive(value, options);\n return this;\n }\n\n public receiving(guest: GuestType<T>): this {\n if (this.theCache !== null) {\n guest.receive(this.theCache);\n } else if (this.defaultValue !== null) {\n guest.receive(this.defaultValue);\n }\n this.pool.add(guest);\n return this;\n }\n}\n","import { GuestExecutorType } from \"./GuestExecutorType\";\nimport { GuestType, ReceiveOptions } from \"./GuestType\";\n\nexport class Guest<T> implements GuestType<T> {\n public constructor(private receiver: GuestExecutorType<T>) {}\n\n public receive(value: T, options?: ReceiveOptions) {\n this.receiver(value, options);\n return this;\n }\n}\n","import { PatronPool } from \"./PatronPool\";\nimport { PoolType } from \"./PoolType\";\nimport { GuestType, ReceiveOptions } from \"./GuestType\";\n\nexport class GuestPool<T> implements GuestType<T>, PoolType<T> {\n private guests = new Set<GuestType<T>>();\n\n private patronPool: PatronPool<T>;\n\n public constructor(initiator: unknown) {\n this.patronPool = new PatronPool(initiator);\n }\n\n public receive(value: T, options?: ReceiveOptions): this {\n this.deliverToGuests(value, options);\n this.patronPool.receive(value, options);\n return this;\n }\n\n public add(guest: GuestType<T>): this {\n if (!guest.introduction || guest.introduction() === \"guest\") {\n this.guests.add(guest);\n }\n this.patronPool.add(guest);\n return this;\n }\n\n public remove(patron: GuestType<T>): this {\n this.guests.delete(patron);\n this.patronPool.remove(patron);\n return this;\n }\n\n public distribute(receiving: T, possiblePatron: GuestType<T>): this {\n this.add(possiblePatron);\n this.receive(receiving);\n return this;\n }\n\n private deliverToGuests(value: T, options?: ReceiveOptions) {\n this.guests.forEach((target) => {\n target.receive(value, options);\n });\n this.guests.clear();\n }\n}\n","import { GuestType, ReceiveOptions } from \"./GuestType\";\n\nexport class GuestInTheMiddle<T> implements GuestType<T> {\n public constructor(\n private baseGuest: GuestType<unknown>,\n private middleFn: (value: T, options?: ReceiveOptions) => void,\n ) {}\n\n introduction() {\n if (!this.baseGuest.introduction) {\n return \"guest\";\n }\n return this.baseGuest.introduction();\n }\n\n receive(value: T, options?: ReceiveOptions): this {\n this.middleFn(value, options);\n return this;\n }\n}\n","import { Cache } from \"./Cache\";\nimport { Guest } from \"./Guest\";\nimport { GuestPool } from \"./GuestPool\";\nimport { ChainType } from \"./ChainType\";\nimport { GuestInTheMiddle } from \"./GuestInTheMiddle\";\nimport { GuestType } from \"./GuestType\";\n\nexport class Chain<T> implements ChainType<T> {\n private theChain: Cache<Record<string, unknown>>;\n\n private keysKnown = new Set();\n\n private keysFilled = new Set();\n\n private filledChainPool = new GuestPool(this);\n\n public constructor() {\n this.theChain = new Cache<Record<string, unknown>>(this, {});\n }\n\n public resultArray(guest: GuestType<T>) {\n this.filledChainPool.add(\n new GuestInTheMiddle(guest, (value: Record<string, unknown>) =>\n Object.values(value),\n ),\n );\n if (this.isChainFilled()) {\n this.theChain.receiving(\n new Guest((chain) => {\n this.filledChainPool.receive(Object.values(chain));\n }),\n );\n }\n\n return this;\n }\n\n public result(guest: GuestType<T>) {\n if (this.isChainFilled()) {\n this.filledChainPool.add(guest);\n this.theChain.receiving(\n new Guest((chain) => {\n this.filledChainPool.receive(chain);\n }),\n );\n } else {\n this.filledChainPool.add(guest);\n }\n return this;\n }\n\n public receiveKey<R>(key: string): GuestType<R> {\n this.keysKnown.add(key);\n return new Guest((value) => {\n // Обернул в очередь чтобы можно было синхронно наполнить очередь известных ключей\n queueMicrotask(() => {\n this.theChain.receiving(\n new Guest((chain) => {\n this.keysFilled.add(key);\n const lastChain = {\n ...chain,\n [key]: value,\n };\n this.theChain.receive(lastChain);\n if (this.isChainFilled()) {\n this.filledChainPool.receive(lastChain);\n }\n }),\n );\n });\n });\n }\n\n private isChainFilled() {\n return (\n this.keysFilled.size > 0 && this.keysFilled.size === this.keysKnown.size\n );\n }\n}\n","import { FactoryType } from \"./FactoryType\";\n\ninterface Constructable<T> {\n new (...args: unknown[]): T;\n}\n\ninterface Prototyped<T> {\n prototype: T;\n}\n\nexport class Factory<T> implements FactoryType<T> {\n public constructor(private constructorFn: Prototyped<T>) {}\n\n public create<R extends unknown[], CT = null>(\n ...args: R\n ): CT extends null ? T : CT {\n return new (this.constructorFn as Constructable<T>)(\n ...args,\n ) as CT extends null ? T : CT;\n }\n}\n","import { FactoryType } from \"./FactoryType\";\n\nexport class FactoryDynamic<T> implements FactoryType<T> {\n public constructor(private creationFn: (...args: unknown[]) => T) {}\n\n public create<R extends unknown[], CT = null>(\n ...args: R\n ): CT extends null ? T : CT {\n return this.creationFn(...args) as CT extends null ? T : CT;\n }\n}\n","import { FactoryType } from \"./FactoryType\";\n\ninterface Constructable<T> {\n new (...args: unknown[]): T;\n}\n\ninterface Prototyped<T> {\n prototype: T;\n}\n\nexport class FactoryWithFactories<T> implements FactoryType<T> {\n public constructor(\n private constructorFn: Prototyped<T>,\n private factories: Record<string, unknown> = {},\n ) {}\n\n public create<R extends unknown[], CT = null>(\n ...args: R\n ): CT extends null ? T : CT {\n return new (this.constructorFn as Constructable<T>)(\n ...args,\n this.factories,\n ) as CT extends null ? T : CT;\n }\n}\n","import { GuestType } from \"./GuestType\";\nimport { GuestAwareType } from \"./GuestAwareType\";\n\nexport class GuestAware<T = unknown> implements GuestAwareType<T> {\n public constructor(private guestReceiver: (guest: GuestType<T>) => void) {}\n\n public receiving(guest: GuestType<T>): GuestType<T> {\n this.guestReceiver(guest);\n return guest;\n }\n}\n","import { GuestType, ReceiveOptions } from \"./GuestType\";\n\nexport class GuestCast<T> implements GuestType<T> {\n public constructor(\n private sourceGuest: GuestType<unknown>,\n private targetGuest: GuestType<T>,\n ) {}\n\n introduction() {\n if (!this.sourceGuest.introduction) {\n return \"guest\";\n }\n return this.sourceGuest.introduction();\n }\n\n receive(value: T, options?: ReceiveOptions): this {\n this.targetGuest.receive(value, options);\n return this;\n }\n}\n","import { GuestValueType } from \"./GuestValueType\";\n\nexport class GuestSync<T> implements GuestValueType<T> {\n public constructor(private theValue: T) {}\n\n public receive(value: T): this {\n this.theValue = value;\n return this;\n }\n\n public value() {\n return this.theValue;\n }\n}\n","import { GuestType, ReceiveOptions } from \"./GuestType\";\n\n/**\n * Патрон - это постоянный посетитель\n */\nexport class Patron<T> implements GuestType<T> {\n public constructor(private willBePatron: GuestType<T>) {}\n\n public introduction() {\n return \"patron\" as const;\n }\n\n public receive(value: T, options?: ReceiveOptions): this {\n this.willBePatron.receive(value, options);\n return this;\n }\n}\n","import { GuestType, ReceiveOptions } from \"./GuestType\";\nimport { PoolType } from \"./PoolType\";\n\ntype PoolAware = {\n pool?: PoolType;\n};\n\nexport class PatronOnce<T> implements GuestType<T> {\n private received = false;\n\n public constructor(private baseGuest: GuestType<T>) {}\n\n public introduction() {\n return \"patron\" as const;\n }\n\n public receive(value: T, options?: ReceiveOptions): this {\n if (!this.received) {\n this.baseGuest.receive(value, options);\n }\n\n const data = options?.data as PoolAware;\n // Если есть пул, то удаляем себя из пула\n if (data?.pool) {\n data.pool.remove(this);\n }\n\n return this;\n }\n}\n","import { GuestType } from \"./GuestType\";\nimport { PatronPool } from \"./PatronPool\";\nimport { SourceType } from \"./SourceType\";\n\nexport class Source<T> implements SourceType<T> {\n private pool = new PatronPool(this);\n\n public constructor(private sourceDocument: T) {}\n\n public receive(value: T): this {\n this.sourceDocument = value;\n this.pool.receive(this.sourceDocument);\n return this;\n }\n\n public receiving(guest: GuestType<T>): this {\n this.pool.distribute(this.sourceDocument, guest);\n return this;\n }\n}\n"],"names":["__publicField"],"mappings":"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"}
|
1
|
+
{"version":3,"file":"patron.js","sources":["../src/PatronPool.ts","../src/Cache.ts","../src/Guest.ts","../src/GuestPool.ts","../src/GuestInTheMiddle.ts","../src/Chain.ts","../src/Factory.ts","../src/FactoryDynamic.ts","../src/FactoryWithFactories.ts","../src/GuestAware.ts","../src/GuestCast.ts","../src/GuestSync.ts","../src/Patron.ts","../src/PatronOnce.ts","../src/Source.ts"],"sourcesContent":["import { PoolType } from \"./PoolType\";\nimport { GuestType, ReceiveOptions } from \"./Guest\";\n\nconst poolSets = new Map<PoolType, Set<GuestType>>();\n\n/**\n * Удалить патрон из всех пулов\n */\nexport const removePatronFromPools = (patron: GuestType) => {\n poolSets.forEach((pool) => {\n pool.delete(patron);\n });\n};\n\nexport class PatronPool<T> implements PoolType<T> {\n private patrons = new Set<GuestType<T>>();\n\n public receive: (value: T, options?: ReceiveOptions) => this;\n\n public constructor(private initiator: unknown) {\n poolSets.set(this, this.patrons);\n\n let lastMicrotask: (() => void) | null = null;\n const doReceive = (value: T, options?: ReceiveOptions) => {\n this.patrons.forEach((target) => {\n this.sendValueToGuest(value, target, options);\n });\n };\n this.receive = (value: T, options?: ReceiveOptions) => {\n const currentMicroTask = () => {\n if (currentMicroTask === lastMicrotask) {\n doReceive(value, options);\n }\n };\n lastMicrotask = currentMicroTask;\n queueMicrotask(currentMicroTask);\n return this;\n };\n }\n\n public add(shouldBePatron: GuestType<T>) {\n if (\n shouldBePatron.introduction &&\n shouldBePatron.introduction() === \"patron\"\n ) {\n this.patrons.add(shouldBePatron);\n }\n return this;\n }\n\n public remove(patron: GuestType<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 private sendValueToGuest(\n value: T,\n guest: GuestType<T>,\n options?: ReceiveOptions,\n ) {\n guest.receive(value, {\n ...options,\n data: {\n ...((options?.data as Record<string, unknown>) ?? {}),\n initiator: this.initiator,\n pool: this,\n },\n });\n }\n}\n","import { PatronPool } from \"./PatronPool\";\nimport { GuestType, ReceiveOptions } from \"./Guest\";\nimport { GuestAwareType } from \"./GuestAware\";\n\nexport type CacheType<T = unknown> = GuestType<T> & GuestAwareType<T>;\n\nexport class Cache<T> implements CacheType<T> {\n private pool: PatronPool<T>;\n\n public constructor(\n initiator: unknown,\n private defaultValue: T | null = null,\n private theCache: T | null = null,\n ) {\n this.pool = new PatronPool<T>(initiator);\n }\n\n public receive(value: T, options?: ReceiveOptions): this {\n this.theCache = value;\n this.pool.receive(value, options);\n return this;\n }\n\n public receiving(guest: GuestType<T>): this {\n if (this.theCache !== null) {\n guest.receive(this.theCache);\n } else if (this.defaultValue !== null) {\n guest.receive(this.defaultValue);\n }\n this.pool.add(guest);\n return this;\n }\n}\n","type GuestIntroduction = \"guest\" | \"patron\";\n\nexport interface ReceiveOptions {\n data?: unknown;\n}\n\nexport type GuestExecutorType<T> = (value: T, options?: ReceiveOptions) => void;\n\nexport interface GuestType<T = unknown> {\n receive(value: T, options?: ReceiveOptions): this;\n introduction?(): GuestIntroduction;\n}\n\nexport class Guest<T> implements GuestType<T> {\n public constructor(private receiver: GuestExecutorType<T>) {}\n\n public receive(value: T, options?: ReceiveOptions) {\n this.receiver(value, options);\n return this;\n }\n}\n","import { PatronPool } from \"./PatronPool\";\nimport { PoolType } from \"./PoolType\";\nimport { GuestType, ReceiveOptions } from \"./Guest\";\n\nexport class GuestPool<T> implements GuestType<T>, PoolType<T> {\n private guests = new Set<GuestType<T>>();\n\n private patronPool: PatronPool<T>;\n\n public constructor(initiator: unknown) {\n this.patronPool = new PatronPool(initiator);\n }\n\n public receive(value: T, options?: ReceiveOptions): this {\n this.deliverToGuests(value, options);\n this.patronPool.receive(value, options);\n return this;\n }\n\n public add(guest: GuestType<T>): this {\n if (!guest.introduction || guest.introduction() === \"guest\") {\n this.guests.add(guest);\n }\n this.patronPool.add(guest);\n return this;\n }\n\n public remove(patron: GuestType<T>): this {\n this.guests.delete(patron);\n this.patronPool.remove(patron);\n return this;\n }\n\n public distribute(receiving: T, possiblePatron: GuestType<T>): this {\n this.add(possiblePatron);\n this.receive(receiving);\n return this;\n }\n\n private deliverToGuests(value: T, options?: ReceiveOptions) {\n this.guests.forEach((target) => {\n target.receive(value, options);\n });\n this.guests.clear();\n }\n}\n","import { GuestType, ReceiveOptions } from \"./Guest\";\n\nexport class GuestInTheMiddle<T> implements GuestType<T> {\n public constructor(\n private baseGuest: GuestType<unknown>,\n private middleFn: (value: T, options?: ReceiveOptions) => void,\n ) {}\n\n introduction() {\n if (!this.baseGuest.introduction) {\n return \"guest\";\n }\n return this.baseGuest.introduction();\n }\n\n receive(value: T, options?: ReceiveOptions): this {\n this.middleFn(value, options);\n return this;\n }\n}\n","import { Cache } from \"./Cache\";\nimport { Guest, GuestType } from \"./Guest\";\nimport { GuestPool } from \"./GuestPool\";\nimport { GuestInTheMiddle } from \"./GuestInTheMiddle\";\n\nexport interface ChainType<T = unknown> {\n result(guest: GuestType<T>): this;\n resultArray(guest: GuestType<T>): this;\n receiveKey<R>(key: string): GuestType<R>;\n}\n\nexport class Chain<T> implements ChainType<T> {\n private theChain: Cache<Record<string, unknown>>;\n\n private keysKnown = new Set();\n\n private keysFilled = new Set();\n\n private filledChainPool = new GuestPool(this);\n\n public constructor() {\n this.theChain = new Cache<Record<string, unknown>>(this, {});\n }\n\n public resultArray(guest: GuestType<T>) {\n this.filledChainPool.add(\n new GuestInTheMiddle(guest, (value: Record<string, unknown>) =>\n Object.values(value),\n ),\n );\n if (this.isChainFilled()) {\n this.theChain.receiving(\n new Guest((chain) => {\n this.filledChainPool.receive(Object.values(chain));\n }),\n );\n }\n\n return this;\n }\n\n public result(guest: GuestType<T>) {\n if (this.isChainFilled()) {\n this.filledChainPool.add(guest);\n this.theChain.receiving(\n new Guest((chain) => {\n this.filledChainPool.receive(chain);\n }),\n );\n } else {\n this.filledChainPool.add(guest);\n }\n return this;\n }\n\n public receiveKey<R>(key: string): GuestType<R> {\n this.keysKnown.add(key);\n return new Guest((value) => {\n // Обернул в очередь чтобы можно было синхронно наполнить очередь известных ключей\n queueMicrotask(() => {\n this.theChain.receiving(\n new Guest((chain) => {\n this.keysFilled.add(key);\n const lastChain = {\n ...chain,\n [key]: value,\n };\n this.theChain.receive(lastChain);\n if (this.isChainFilled()) {\n this.filledChainPool.receive(lastChain);\n }\n }),\n );\n });\n });\n }\n\n private isChainFilled() {\n return (\n this.keysFilled.size > 0 && this.keysFilled.size === this.keysKnown.size\n );\n }\n}\n","interface Constructable<T> {\n new (...args: unknown[]): T;\n}\n\ninterface Prototyped<T> {\n prototype: T;\n}\n\nexport interface FactoryType<T> {\n create<R extends unknown[], CT = null>(...args: R): CT extends null ? T : CT;\n}\n\nexport class Factory<T> implements FactoryType<T> {\n public constructor(private constructorFn: Prototyped<T>) {}\n\n public create<R extends unknown[], CT = null>(\n ...args: R\n ): CT extends null ? T : CT {\n return new (this.constructorFn as Constructable<T>)(\n ...args,\n ) as CT extends null ? T : CT;\n }\n}\n","import { FactoryType } from \"./Factory\";\n\nexport class FactoryDynamic<T> implements FactoryType<T> {\n public constructor(private creationFn: (...args: unknown[]) => T) {}\n\n public create<R extends unknown[], CT = null>(\n ...args: R\n ): CT extends null ? T : CT {\n return this.creationFn(...args) as CT extends null ? T : CT;\n }\n}\n","import { FactoryType } from \"./Factory\";\n\ninterface Constructable<T> {\n new (...args: unknown[]): T;\n}\n\ninterface Prototyped<T> {\n prototype: T;\n}\n\nexport class FactoryWithFactories<T> implements FactoryType<T> {\n public constructor(\n private constructorFn: Prototyped<T>,\n private factories: Record<string, unknown> = {},\n ) {}\n\n public create<R extends unknown[], CT = null>(\n ...args: R\n ): CT extends null ? T : CT {\n return new (this.constructorFn as Constructable<T>)(\n ...args,\n this.factories,\n ) as CT extends null ? T : CT;\n }\n}\n","import { GuestType } from \"./Guest\";\n\nexport interface GuestAwareType<T = unknown> {\n receiving(guest: GuestType<T>): unknown;\n}\n\nexport class GuestAware<T = unknown> implements GuestAwareType<T> {\n public constructor(private guestReceiver: (guest: GuestType<T>) => void) {}\n\n public receiving(guest: GuestType<T>): GuestType<T> {\n this.guestReceiver(guest);\n return guest;\n }\n}\n","import { GuestType, ReceiveOptions } from \"./Guest\";\n\nexport class GuestCast<T> implements GuestType<T> {\n public constructor(\n private sourceGuest: GuestType<unknown>,\n private targetGuest: GuestType<T>,\n ) {}\n\n introduction() {\n if (!this.sourceGuest.introduction) {\n return \"guest\";\n }\n return this.sourceGuest.introduction();\n }\n\n receive(value: T, options?: ReceiveOptions): this {\n this.targetGuest.receive(value, options);\n return this;\n }\n}\n","import { GuestType } from \"./Guest\";\n\nexport interface GuestValueType<T = unknown> extends GuestType<T> {\n value(): T;\n}\n\nexport class GuestSync<T> implements GuestValueType<T> {\n public constructor(private theValue: T) {}\n\n public receive(value: T): this {\n this.theValue = value;\n return this;\n }\n\n public value() {\n return this.theValue;\n }\n}\n","import { GuestType, ReceiveOptions } from \"./Guest\";\n\n/**\n * Патрон - это постоянный посетитель\n */\nexport class Patron<T> implements GuestType<T> {\n public constructor(private willBePatron: GuestType<T>) {}\n\n public introduction() {\n return \"patron\" as const;\n }\n\n public receive(value: T, options?: ReceiveOptions): this {\n this.willBePatron.receive(value, options);\n return this;\n }\n}\n","import { GuestType, ReceiveOptions } from \"./Guest\";\nimport { PoolType } from \"./PoolType\";\n\ntype PoolAware = {\n pool?: PoolType;\n};\n\nexport class PatronOnce<T> implements GuestType<T> {\n private received = false;\n\n public constructor(private baseGuest: GuestType<T>) {}\n\n public introduction() {\n return \"patron\" as const;\n }\n\n public receive(value: T, options?: ReceiveOptions): this {\n if (!this.received) {\n this.baseGuest.receive(value, options);\n }\n\n const data = options?.data as PoolAware;\n\n if (data?.pool) {\n data.pool.remove(this);\n }\n\n return this;\n }\n}\n","import { GuestAwareType } from \"src/GuestAware\";\nimport { GuestType } from \"./Guest\";\nimport { PatronPool } from \"./PatronPool\";\n\nexport type SourceType<T = unknown> = GuestAwareType<T> & GuestType<T>;\n\nexport class Source<T> implements SourceType<T> {\n private pool = new PatronPool(this);\n\n public constructor(private sourceDocument: T) {}\n\n public receive(value: T): this {\n this.sourceDocument = value;\n this.pool.receive(this.sourceDocument);\n return this;\n }\n\n public receiving(guest: GuestType<T>): this {\n this.pool.distribute(this.sourceDocument, guest);\n return this;\n }\n}\n"],"names":["__publicField"],"mappings":"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"}
|
package/dist/patron.mjs.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"patron.mjs","sources":["../src/PatronPool.ts","../src/Cache.ts","../src/Guest.ts","../src/GuestPool.ts","../src/GuestInTheMiddle.ts","../src/Chain.ts","../src/Factory.ts","../src/FactoryDynamic.ts","../src/FactoryWithFactories.ts","../src/GuestAware.ts","../src/GuestCast.ts","../src/GuestSync.ts","../src/Patron.ts","../src/PatronOnce.ts","../src/Source.ts"],"sourcesContent":["import { PoolType } from \"./PoolType\";\nimport { GuestType, ReceiveOptions } from \"./GuestType\";\n\nconst poolSets = new Map<PoolType, Set<GuestType>>();\n\n/**\n * Удалить патрон из всех пулов\n */\nexport const removePatronFromPools = (patron: GuestType) => {\n poolSets.forEach((pool) => {\n pool.delete(patron);\n });\n};\n\nexport class PatronPool<T> implements PoolType<T> {\n private patrons = new Set<GuestType<T>>();\n\n public receive: (value: T, options?: ReceiveOptions) => this;\n\n public constructor(private initiator: unknown) {\n poolSets.set(this, this.patrons);\n\n let lastMicrotask: (() => void) | null = null;\n const doReceive = (value: T, options?: ReceiveOptions) => {\n this.patrons.forEach((target) => {\n this.sendValueToGuest(value, target, options);\n });\n };\n this.receive = (value: T, options?: ReceiveOptions) => {\n const currentMicroTask = () => {\n if (currentMicroTask === lastMicrotask) {\n doReceive(value, options);\n }\n };\n lastMicrotask = currentMicroTask;\n queueMicrotask(currentMicroTask);\n return this;\n };\n }\n\n public add(shouldBePatron: GuestType<T>) {\n if (\n shouldBePatron.introduction &&\n shouldBePatron.introduction() === \"patron\"\n ) {\n this.patrons.add(shouldBePatron);\n }\n return this;\n }\n\n public remove(patron: GuestType<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 private sendValueToGuest(\n value: T,\n guest: GuestType<T>,\n options?: ReceiveOptions,\n ) {\n guest.receive(value, {\n ...options,\n data: {\n ...((options?.data as Record<string, unknown>) ?? {}),\n initiator: this.initiator,\n pool: this,\n },\n });\n }\n}\n","import { PatronPool } from \"./PatronPool\";\nimport { CacheType } from \"./CacheType\";\nimport { GuestType, ReceiveOptions } from \"./GuestType\";\n\nexport class Cache<T> implements CacheType<T> {\n private pool: PatronPool<T>;\n\n public constructor(\n initiator: unknown,\n private defaultValue: T | null = null,\n private theCache: T | null = null,\n ) {\n this.pool = new PatronPool<T>(initiator);\n }\n\n public receive(value: T, options?: ReceiveOptions): this {\n this.theCache = value;\n this.pool.receive(value, options);\n return this;\n }\n\n public receiving(guest: GuestType<T>): this {\n if (this.theCache !== null) {\n guest.receive(this.theCache);\n } else if (this.defaultValue !== null) {\n guest.receive(this.defaultValue);\n }\n this.pool.add(guest);\n return this;\n }\n}\n","import { GuestExecutorType } from \"./GuestExecutorType\";\nimport { GuestType, ReceiveOptions } from \"./GuestType\";\n\nexport class Guest<T> implements GuestType<T> {\n public constructor(private receiver: GuestExecutorType<T>) {}\n\n public receive(value: T, options?: ReceiveOptions) {\n this.receiver(value, options);\n return this;\n }\n}\n","import { PatronPool } from \"./PatronPool\";\nimport { PoolType } from \"./PoolType\";\nimport { GuestType, ReceiveOptions } from \"./GuestType\";\n\nexport class GuestPool<T> implements GuestType<T>, PoolType<T> {\n private guests = new Set<GuestType<T>>();\n\n private patronPool: PatronPool<T>;\n\n public constructor(initiator: unknown) {\n this.patronPool = new PatronPool(initiator);\n }\n\n public receive(value: T, options?: ReceiveOptions): this {\n this.deliverToGuests(value, options);\n this.patronPool.receive(value, options);\n return this;\n }\n\n public add(guest: GuestType<T>): this {\n if (!guest.introduction || guest.introduction() === \"guest\") {\n this.guests.add(guest);\n }\n this.patronPool.add(guest);\n return this;\n }\n\n public remove(patron: GuestType<T>): this {\n this.guests.delete(patron);\n this.patronPool.remove(patron);\n return this;\n }\n\n public distribute(receiving: T, possiblePatron: GuestType<T>): this {\n this.add(possiblePatron);\n this.receive(receiving);\n return this;\n }\n\n private deliverToGuests(value: T, options?: ReceiveOptions) {\n this.guests.forEach((target) => {\n target.receive(value, options);\n });\n this.guests.clear();\n }\n}\n","import { GuestType, ReceiveOptions } from \"./GuestType\";\n\nexport class GuestInTheMiddle<T> implements GuestType<T> {\n public constructor(\n private baseGuest: GuestType<unknown>,\n private middleFn: (value: T, options?: ReceiveOptions) => void,\n ) {}\n\n introduction() {\n if (!this.baseGuest.introduction) {\n return \"guest\";\n }\n return this.baseGuest.introduction();\n }\n\n receive(value: T, options?: ReceiveOptions): this {\n this.middleFn(value, options);\n return this;\n }\n}\n","import { Cache } from \"./Cache\";\nimport { Guest } from \"./Guest\";\nimport { GuestPool } from \"./GuestPool\";\nimport { ChainType } from \"./ChainType\";\nimport { GuestInTheMiddle } from \"./GuestInTheMiddle\";\nimport { GuestType } from \"./GuestType\";\n\nexport class Chain<T> implements ChainType<T> {\n private theChain: Cache<Record<string, unknown>>;\n\n private keysKnown = new Set();\n\n private keysFilled = new Set();\n\n private filledChainPool = new GuestPool(this);\n\n public constructor() {\n this.theChain = new Cache<Record<string, unknown>>(this, {});\n }\n\n public resultArray(guest: GuestType<T>) {\n this.filledChainPool.add(\n new GuestInTheMiddle(guest, (value: Record<string, unknown>) =>\n Object.values(value),\n ),\n );\n if (this.isChainFilled()) {\n this.theChain.receiving(\n new Guest((chain) => {\n this.filledChainPool.receive(Object.values(chain));\n }),\n );\n }\n\n return this;\n }\n\n public result(guest: GuestType<T>) {\n if (this.isChainFilled()) {\n this.filledChainPool.add(guest);\n this.theChain.receiving(\n new Guest((chain) => {\n this.filledChainPool.receive(chain);\n }),\n );\n } else {\n this.filledChainPool.add(guest);\n }\n return this;\n }\n\n public receiveKey<R>(key: string): GuestType<R> {\n this.keysKnown.add(key);\n return new Guest((value) => {\n // Обернул в очередь чтобы можно было синхронно наполнить очередь известных ключей\n queueMicrotask(() => {\n this.theChain.receiving(\n new Guest((chain) => {\n this.keysFilled.add(key);\n const lastChain = {\n ...chain,\n [key]: value,\n };\n this.theChain.receive(lastChain);\n if (this.isChainFilled()) {\n this.filledChainPool.receive(lastChain);\n }\n }),\n );\n });\n });\n }\n\n private isChainFilled() {\n return (\n this.keysFilled.size > 0 && this.keysFilled.size === this.keysKnown.size\n );\n }\n}\n","import { FactoryType } from \"./FactoryType\";\n\ninterface Constructable<T> {\n new (...args: unknown[]): T;\n}\n\ninterface Prototyped<T> {\n prototype: T;\n}\n\nexport class Factory<T> implements FactoryType<T> {\n public constructor(private constructorFn: Prototyped<T>) {}\n\n public create<R extends unknown[], CT = null>(\n ...args: R\n ): CT extends null ? T : CT {\n return new (this.constructorFn as Constructable<T>)(\n ...args,\n ) as CT extends null ? T : CT;\n }\n}\n","import { FactoryType } from \"./FactoryType\";\n\nexport class FactoryDynamic<T> implements FactoryType<T> {\n public constructor(private creationFn: (...args: unknown[]) => T) {}\n\n public create<R extends unknown[], CT = null>(\n ...args: R\n ): CT extends null ? T : CT {\n return this.creationFn(...args) as CT extends null ? T : CT;\n }\n}\n","import { FactoryType } from \"./FactoryType\";\n\ninterface Constructable<T> {\n new (...args: unknown[]): T;\n}\n\ninterface Prototyped<T> {\n prototype: T;\n}\n\nexport class FactoryWithFactories<T> implements FactoryType<T> {\n public constructor(\n private constructorFn: Prototyped<T>,\n private factories: Record<string, unknown> = {},\n ) {}\n\n public create<R extends unknown[], CT = null>(\n ...args: R\n ): CT extends null ? T : CT {\n return new (this.constructorFn as Constructable<T>)(\n ...args,\n this.factories,\n ) as CT extends null ? T : CT;\n }\n}\n","import { GuestType } from \"./GuestType\";\nimport { GuestAwareType } from \"./GuestAwareType\";\n\nexport class GuestAware<T = unknown> implements GuestAwareType<T> {\n public constructor(private guestReceiver: (guest: GuestType<T>) => void) {}\n\n public receiving(guest: GuestType<T>): GuestType<T> {\n this.guestReceiver(guest);\n return guest;\n }\n}\n","import { GuestType, ReceiveOptions } from \"./GuestType\";\n\nexport class GuestCast<T> implements GuestType<T> {\n public constructor(\n private sourceGuest: GuestType<unknown>,\n private targetGuest: GuestType<T>,\n ) {}\n\n introduction() {\n if (!this.sourceGuest.introduction) {\n return \"guest\";\n }\n return this.sourceGuest.introduction();\n }\n\n receive(value: T, options?: ReceiveOptions): this {\n this.targetGuest.receive(value, options);\n return this;\n }\n}\n","import { GuestValueType } from \"./GuestValueType\";\n\nexport class GuestSync<T> implements GuestValueType<T> {\n public constructor(private theValue: T) {}\n\n public receive(value: T): this {\n this.theValue = value;\n return this;\n }\n\n public value() {\n return this.theValue;\n }\n}\n","import { GuestType, ReceiveOptions } from \"./GuestType\";\n\n/**\n * Патрон - это постоянный посетитель\n */\nexport class Patron<T> implements GuestType<T> {\n public constructor(private willBePatron: GuestType<T>) {}\n\n public introduction() {\n return \"patron\" as const;\n }\n\n public receive(value: T, options?: ReceiveOptions): this {\n this.willBePatron.receive(value, options);\n return this;\n }\n}\n","import { GuestType, ReceiveOptions } from \"./GuestType\";\nimport { PoolType } from \"./PoolType\";\n\ntype PoolAware = {\n pool?: PoolType;\n};\n\nexport class PatronOnce<T> implements GuestType<T> {\n private received = false;\n\n public constructor(private baseGuest: GuestType<T>) {}\n\n public introduction() {\n return \"patron\" as const;\n }\n\n public receive(value: T, options?: ReceiveOptions): this {\n if (!this.received) {\n this.baseGuest.receive(value, options);\n }\n\n const data = options?.data as PoolAware;\n // Если есть пул, то удаляем себя из пула\n if (data?.pool) {\n data.pool.remove(this);\n }\n\n return this;\n }\n}\n","import { GuestType } from \"./GuestType\";\nimport { PatronPool } from \"./PatronPool\";\nimport { SourceType } from \"./SourceType\";\n\nexport class Source<T> implements SourceType<T> {\n private pool = new PatronPool(this);\n\n public constructor(private sourceDocument: T) {}\n\n public receive(value: T): this {\n this.sourceDocument = value;\n this.pool.receive(this.sourceDocument);\n return this;\n }\n\n public receiving(guest: GuestType<T>): this {\n this.pool.distribute(this.sourceDocument, guest);\n return this;\n }\n}\n"],"names":["__publicField"],"mappings":"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"}
|
1
|
+
{"version":3,"file":"patron.mjs","sources":["../src/PatronPool.ts","../src/Cache.ts","../src/Guest.ts","../src/GuestPool.ts","../src/GuestInTheMiddle.ts","../src/Chain.ts","../src/Factory.ts","../src/FactoryDynamic.ts","../src/FactoryWithFactories.ts","../src/GuestAware.ts","../src/GuestCast.ts","../src/GuestSync.ts","../src/Patron.ts","../src/PatronOnce.ts","../src/Source.ts"],"sourcesContent":["import { PoolType } from \"./PoolType\";\nimport { GuestType, ReceiveOptions } from \"./Guest\";\n\nconst poolSets = new Map<PoolType, Set<GuestType>>();\n\n/**\n * Удалить патрон из всех пулов\n */\nexport const removePatronFromPools = (patron: GuestType) => {\n poolSets.forEach((pool) => {\n pool.delete(patron);\n });\n};\n\nexport class PatronPool<T> implements PoolType<T> {\n private patrons = new Set<GuestType<T>>();\n\n public receive: (value: T, options?: ReceiveOptions) => this;\n\n public constructor(private initiator: unknown) {\n poolSets.set(this, this.patrons);\n\n let lastMicrotask: (() => void) | null = null;\n const doReceive = (value: T, options?: ReceiveOptions) => {\n this.patrons.forEach((target) => {\n this.sendValueToGuest(value, target, options);\n });\n };\n this.receive = (value: T, options?: ReceiveOptions) => {\n const currentMicroTask = () => {\n if (currentMicroTask === lastMicrotask) {\n doReceive(value, options);\n }\n };\n lastMicrotask = currentMicroTask;\n queueMicrotask(currentMicroTask);\n return this;\n };\n }\n\n public add(shouldBePatron: GuestType<T>) {\n if (\n shouldBePatron.introduction &&\n shouldBePatron.introduction() === \"patron\"\n ) {\n this.patrons.add(shouldBePatron);\n }\n return this;\n }\n\n public remove(patron: GuestType<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 private sendValueToGuest(\n value: T,\n guest: GuestType<T>,\n options?: ReceiveOptions,\n ) {\n guest.receive(value, {\n ...options,\n data: {\n ...((options?.data as Record<string, unknown>) ?? {}),\n initiator: this.initiator,\n pool: this,\n },\n });\n }\n}\n","import { PatronPool } from \"./PatronPool\";\nimport { GuestType, ReceiveOptions } from \"./Guest\";\nimport { GuestAwareType } from \"./GuestAware\";\n\nexport type CacheType<T = unknown> = GuestType<T> & GuestAwareType<T>;\n\nexport class Cache<T> implements CacheType<T> {\n private pool: PatronPool<T>;\n\n public constructor(\n initiator: unknown,\n private defaultValue: T | null = null,\n private theCache: T | null = null,\n ) {\n this.pool = new PatronPool<T>(initiator);\n }\n\n public receive(value: T, options?: ReceiveOptions): this {\n this.theCache = value;\n this.pool.receive(value, options);\n return this;\n }\n\n public receiving(guest: GuestType<T>): this {\n if (this.theCache !== null) {\n guest.receive(this.theCache);\n } else if (this.defaultValue !== null) {\n guest.receive(this.defaultValue);\n }\n this.pool.add(guest);\n return this;\n }\n}\n","type GuestIntroduction = \"guest\" | \"patron\";\n\nexport interface ReceiveOptions {\n data?: unknown;\n}\n\nexport type GuestExecutorType<T> = (value: T, options?: ReceiveOptions) => void;\n\nexport interface GuestType<T = unknown> {\n receive(value: T, options?: ReceiveOptions): this;\n introduction?(): GuestIntroduction;\n}\n\nexport class Guest<T> implements GuestType<T> {\n public constructor(private receiver: GuestExecutorType<T>) {}\n\n public receive(value: T, options?: ReceiveOptions) {\n this.receiver(value, options);\n return this;\n }\n}\n","import { PatronPool } from \"./PatronPool\";\nimport { PoolType } from \"./PoolType\";\nimport { GuestType, ReceiveOptions } from \"./Guest\";\n\nexport class GuestPool<T> implements GuestType<T>, PoolType<T> {\n private guests = new Set<GuestType<T>>();\n\n private patronPool: PatronPool<T>;\n\n public constructor(initiator: unknown) {\n this.patronPool = new PatronPool(initiator);\n }\n\n public receive(value: T, options?: ReceiveOptions): this {\n this.deliverToGuests(value, options);\n this.patronPool.receive(value, options);\n return this;\n }\n\n public add(guest: GuestType<T>): this {\n if (!guest.introduction || guest.introduction() === \"guest\") {\n this.guests.add(guest);\n }\n this.patronPool.add(guest);\n return this;\n }\n\n public remove(patron: GuestType<T>): this {\n this.guests.delete(patron);\n this.patronPool.remove(patron);\n return this;\n }\n\n public distribute(receiving: T, possiblePatron: GuestType<T>): this {\n this.add(possiblePatron);\n this.receive(receiving);\n return this;\n }\n\n private deliverToGuests(value: T, options?: ReceiveOptions) {\n this.guests.forEach((target) => {\n target.receive(value, options);\n });\n this.guests.clear();\n }\n}\n","import { GuestType, ReceiveOptions } from \"./Guest\";\n\nexport class GuestInTheMiddle<T> implements GuestType<T> {\n public constructor(\n private baseGuest: GuestType<unknown>,\n private middleFn: (value: T, options?: ReceiveOptions) => void,\n ) {}\n\n introduction() {\n if (!this.baseGuest.introduction) {\n return \"guest\";\n }\n return this.baseGuest.introduction();\n }\n\n receive(value: T, options?: ReceiveOptions): this {\n this.middleFn(value, options);\n return this;\n }\n}\n","import { Cache } from \"./Cache\";\nimport { Guest, GuestType } from \"./Guest\";\nimport { GuestPool } from \"./GuestPool\";\nimport { GuestInTheMiddle } from \"./GuestInTheMiddle\";\n\nexport interface ChainType<T = unknown> {\n result(guest: GuestType<T>): this;\n resultArray(guest: GuestType<T>): this;\n receiveKey<R>(key: string): GuestType<R>;\n}\n\nexport class Chain<T> implements ChainType<T> {\n private theChain: Cache<Record<string, unknown>>;\n\n private keysKnown = new Set();\n\n private keysFilled = new Set();\n\n private filledChainPool = new GuestPool(this);\n\n public constructor() {\n this.theChain = new Cache<Record<string, unknown>>(this, {});\n }\n\n public resultArray(guest: GuestType<T>) {\n this.filledChainPool.add(\n new GuestInTheMiddle(guest, (value: Record<string, unknown>) =>\n Object.values(value),\n ),\n );\n if (this.isChainFilled()) {\n this.theChain.receiving(\n new Guest((chain) => {\n this.filledChainPool.receive(Object.values(chain));\n }),\n );\n }\n\n return this;\n }\n\n public result(guest: GuestType<T>) {\n if (this.isChainFilled()) {\n this.filledChainPool.add(guest);\n this.theChain.receiving(\n new Guest((chain) => {\n this.filledChainPool.receive(chain);\n }),\n );\n } else {\n this.filledChainPool.add(guest);\n }\n return this;\n }\n\n public receiveKey<R>(key: string): GuestType<R> {\n this.keysKnown.add(key);\n return new Guest((value) => {\n // Обернул в очередь чтобы можно было синхронно наполнить очередь известных ключей\n queueMicrotask(() => {\n this.theChain.receiving(\n new Guest((chain) => {\n this.keysFilled.add(key);\n const lastChain = {\n ...chain,\n [key]: value,\n };\n this.theChain.receive(lastChain);\n if (this.isChainFilled()) {\n this.filledChainPool.receive(lastChain);\n }\n }),\n );\n });\n });\n }\n\n private isChainFilled() {\n return (\n this.keysFilled.size > 0 && this.keysFilled.size === this.keysKnown.size\n );\n }\n}\n","interface Constructable<T> {\n new (...args: unknown[]): T;\n}\n\ninterface Prototyped<T> {\n prototype: T;\n}\n\nexport interface FactoryType<T> {\n create<R extends unknown[], CT = null>(...args: R): CT extends null ? T : CT;\n}\n\nexport class Factory<T> implements FactoryType<T> {\n public constructor(private constructorFn: Prototyped<T>) {}\n\n public create<R extends unknown[], CT = null>(\n ...args: R\n ): CT extends null ? T : CT {\n return new (this.constructorFn as Constructable<T>)(\n ...args,\n ) as CT extends null ? T : CT;\n }\n}\n","import { FactoryType } from \"./Factory\";\n\nexport class FactoryDynamic<T> implements FactoryType<T> {\n public constructor(private creationFn: (...args: unknown[]) => T) {}\n\n public create<R extends unknown[], CT = null>(\n ...args: R\n ): CT extends null ? T : CT {\n return this.creationFn(...args) as CT extends null ? T : CT;\n }\n}\n","import { FactoryType } from \"./Factory\";\n\ninterface Constructable<T> {\n new (...args: unknown[]): T;\n}\n\ninterface Prototyped<T> {\n prototype: T;\n}\n\nexport class FactoryWithFactories<T> implements FactoryType<T> {\n public constructor(\n private constructorFn: Prototyped<T>,\n private factories: Record<string, unknown> = {},\n ) {}\n\n public create<R extends unknown[], CT = null>(\n ...args: R\n ): CT extends null ? T : CT {\n return new (this.constructorFn as Constructable<T>)(\n ...args,\n this.factories,\n ) as CT extends null ? T : CT;\n }\n}\n","import { GuestType } from \"./Guest\";\n\nexport interface GuestAwareType<T = unknown> {\n receiving(guest: GuestType<T>): unknown;\n}\n\nexport class GuestAware<T = unknown> implements GuestAwareType<T> {\n public constructor(private guestReceiver: (guest: GuestType<T>) => void) {}\n\n public receiving(guest: GuestType<T>): GuestType<T> {\n this.guestReceiver(guest);\n return guest;\n }\n}\n","import { GuestType, ReceiveOptions } from \"./Guest\";\n\nexport class GuestCast<T> implements GuestType<T> {\n public constructor(\n private sourceGuest: GuestType<unknown>,\n private targetGuest: GuestType<T>,\n ) {}\n\n introduction() {\n if (!this.sourceGuest.introduction) {\n return \"guest\";\n }\n return this.sourceGuest.introduction();\n }\n\n receive(value: T, options?: ReceiveOptions): this {\n this.targetGuest.receive(value, options);\n return this;\n }\n}\n","import { GuestType } from \"./Guest\";\n\nexport interface GuestValueType<T = unknown> extends GuestType<T> {\n value(): T;\n}\n\nexport class GuestSync<T> implements GuestValueType<T> {\n public constructor(private theValue: T) {}\n\n public receive(value: T): this {\n this.theValue = value;\n return this;\n }\n\n public value() {\n return this.theValue;\n }\n}\n","import { GuestType, ReceiveOptions } from \"./Guest\";\n\n/**\n * Патрон - это постоянный посетитель\n */\nexport class Patron<T> implements GuestType<T> {\n public constructor(private willBePatron: GuestType<T>) {}\n\n public introduction() {\n return \"patron\" as const;\n }\n\n public receive(value: T, options?: ReceiveOptions): this {\n this.willBePatron.receive(value, options);\n return this;\n }\n}\n","import { GuestType, ReceiveOptions } from \"./Guest\";\nimport { PoolType } from \"./PoolType\";\n\ntype PoolAware = {\n pool?: PoolType;\n};\n\nexport class PatronOnce<T> implements GuestType<T> {\n private received = false;\n\n public constructor(private baseGuest: GuestType<T>) {}\n\n public introduction() {\n return \"patron\" as const;\n }\n\n public receive(value: T, options?: ReceiveOptions): this {\n if (!this.received) {\n this.baseGuest.receive(value, options);\n }\n\n const data = options?.data as PoolAware;\n\n if (data?.pool) {\n data.pool.remove(this);\n }\n\n return this;\n }\n}\n","import { GuestAwareType } from \"src/GuestAware\";\nimport { GuestType } from \"./Guest\";\nimport { PatronPool } from \"./PatronPool\";\n\nexport type SourceType<T = unknown> = GuestAwareType<T> & GuestType<T>;\n\nexport class Source<T> implements SourceType<T> {\n private pool = new PatronPool(this);\n\n public constructor(private sourceDocument: T) {}\n\n public receive(value: T): this {\n this.sourceDocument = value;\n this.pool.receive(this.sourceDocument);\n return this;\n }\n\n public receiving(guest: GuestType<T>): this {\n this.pool.distribute(this.sourceDocument, guest);\n return this;\n }\n}\n"],"names":["__publicField"],"mappings":"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"}
|
package/package.json
CHANGED
package/src/Cache.ts
CHANGED
@@ -1,6 +1,8 @@
|
|
1
1
|
import { PatronPool } from "./PatronPool";
|
2
|
-
import {
|
3
|
-
import {
|
2
|
+
import { GuestType, ReceiveOptions } from "./Guest";
|
3
|
+
import { GuestAwareType } from "./GuestAware";
|
4
|
+
|
5
|
+
export type CacheType<T = unknown> = GuestType<T> & GuestAwareType<T>;
|
4
6
|
|
5
7
|
export class Cache<T> implements CacheType<T> {
|
6
8
|
private pool: PatronPool<T>;
|
package/src/Chain.ts
CHANGED
@@ -1,9 +1,13 @@
|
|
1
1
|
import { Cache } from "./Cache";
|
2
|
-
import { Guest } from "./Guest";
|
2
|
+
import { Guest, GuestType } from "./Guest";
|
3
3
|
import { GuestPool } from "./GuestPool";
|
4
|
-
import { ChainType } from "./ChainType";
|
5
4
|
import { GuestInTheMiddle } from "./GuestInTheMiddle";
|
6
|
-
|
5
|
+
|
6
|
+
export interface ChainType<T = unknown> {
|
7
|
+
result(guest: GuestType<T>): this;
|
8
|
+
resultArray(guest: GuestType<T>): this;
|
9
|
+
receiveKey<R>(key: string): GuestType<R>;
|
10
|
+
}
|
7
11
|
|
8
12
|
export class Chain<T> implements ChainType<T> {
|
9
13
|
private theChain: Cache<Record<string, unknown>>;
|
package/src/Factory.ts
CHANGED
@@ -1,5 +1,3 @@
|
|
1
|
-
import { FactoryType } from "./FactoryType";
|
2
|
-
|
3
1
|
interface Constructable<T> {
|
4
2
|
new (...args: unknown[]): T;
|
5
3
|
}
|
@@ -8,6 +6,10 @@ interface Prototyped<T> {
|
|
8
6
|
prototype: T;
|
9
7
|
}
|
10
8
|
|
9
|
+
export interface FactoryType<T> {
|
10
|
+
create<R extends unknown[], CT = null>(...args: R): CT extends null ? T : CT;
|
11
|
+
}
|
12
|
+
|
11
13
|
export class Factory<T> implements FactoryType<T> {
|
12
14
|
public constructor(private constructorFn: Prototyped<T>) {}
|
13
15
|
|
package/src/FactoryDynamic.ts
CHANGED
package/src/Guest.ts
CHANGED
@@ -1,5 +1,15 @@
|
|
1
|
-
|
2
|
-
|
1
|
+
type GuestIntroduction = "guest" | "patron";
|
2
|
+
|
3
|
+
export interface ReceiveOptions {
|
4
|
+
data?: unknown;
|
5
|
+
}
|
6
|
+
|
7
|
+
export type GuestExecutorType<T> = (value: T, options?: ReceiveOptions) => void;
|
8
|
+
|
9
|
+
export interface GuestType<T = unknown> {
|
10
|
+
receive(value: T, options?: ReceiveOptions): this;
|
11
|
+
introduction?(): GuestIntroduction;
|
12
|
+
}
|
3
13
|
|
4
14
|
export class Guest<T> implements GuestType<T> {
|
5
15
|
public constructor(private receiver: GuestExecutorType<T>) {}
|
package/src/GuestAware.ts
CHANGED
@@ -1,5 +1,8 @@
|
|
1
|
-
import { GuestType } from "./
|
2
|
-
|
1
|
+
import { GuestType } from "./Guest";
|
2
|
+
|
3
|
+
export interface GuestAwareType<T = unknown> {
|
4
|
+
receiving(guest: GuestType<T>): unknown;
|
5
|
+
}
|
3
6
|
|
4
7
|
export class GuestAware<T = unknown> implements GuestAwareType<T> {
|
5
8
|
public constructor(private guestReceiver: (guest: GuestType<T>) => void) {}
|
package/src/GuestCast.ts
CHANGED
package/src/GuestInTheMiddle.ts
CHANGED
package/src/GuestPool.ts
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
import { PatronPool } from "./PatronPool";
|
2
2
|
import { PoolType } from "./PoolType";
|
3
|
-
import { GuestType, ReceiveOptions } from "./
|
3
|
+
import { GuestType, ReceiveOptions } from "./Guest";
|
4
4
|
|
5
5
|
export class GuestPool<T> implements GuestType<T>, PoolType<T> {
|
6
6
|
private guests = new Set<GuestType<T>>();
|
package/src/GuestSync.ts
CHANGED
@@ -1,4 +1,8 @@
|
|
1
|
-
import {
|
1
|
+
import { GuestType } from "./Guest";
|
2
|
+
|
3
|
+
export interface GuestValueType<T = unknown> extends GuestType<T> {
|
4
|
+
value(): T;
|
5
|
+
}
|
2
6
|
|
3
7
|
export class GuestSync<T> implements GuestValueType<T> {
|
4
8
|
public constructor(private theValue: T) {}
|
package/src/Patron.ts
CHANGED
package/src/PatronOnce.ts
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
import { GuestType, ReceiveOptions } from "./
|
1
|
+
import { GuestType, ReceiveOptions } from "./Guest";
|
2
2
|
import { PoolType } from "./PoolType";
|
3
3
|
|
4
4
|
type PoolAware = {
|
@@ -20,7 +20,7 @@ export class PatronOnce<T> implements GuestType<T> {
|
|
20
20
|
}
|
21
21
|
|
22
22
|
const data = options?.data as PoolAware;
|
23
|
-
|
23
|
+
|
24
24
|
if (data?.pool) {
|
25
25
|
data.pool.remove(this);
|
26
26
|
}
|
package/src/PatronPool.ts
CHANGED
package/src/PoolType.ts
CHANGED
package/src/Source.ts
CHANGED
@@ -1,6 +1,8 @@
|
|
1
|
-
import {
|
1
|
+
import { GuestAwareType } from "src/GuestAware";
|
2
|
+
import { GuestType } from "./Guest";
|
2
3
|
import { PatronPool } from "./PatronPool";
|
3
|
-
|
4
|
+
|
5
|
+
export type SourceType<T = unknown> = GuestAwareType<T> & GuestType<T>;
|
4
6
|
|
5
7
|
export class Source<T> implements SourceType<T> {
|
6
8
|
private pool = new PatronPool(this);
|
package/src/index.ts
CHANGED
package/src/CacheType.ts
DELETED
package/src/ChainType.ts
DELETED
package/src/FactoryType.ts
DELETED
package/src/GuestAwareType.ts
DELETED
package/src/GuestExecutorType.ts
DELETED
package/src/GuestType.ts
DELETED
package/src/GuestValueType.ts
DELETED
package/src/SourceType.ts
DELETED