patron-oop 1.6.0 → 1.7.0
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 +9 -0
- package/dist/patron.d.ts +61 -80
- package/dist/patron.js +75 -110
- package/dist/patron.js.map +1 -1
- package/dist/patron.min.js +1 -1
- package/dist/patron.mjs +70 -109
- package/dist/patron.mjs.map +1 -1
- package/package.json +1 -1
- package/src/Guest/Guest.test.ts +10 -0
- package/src/Guest/Guest.ts +28 -35
- package/src/Guest/GuestAware.test.ts +6 -8
- package/src/Guest/GuestAware.ts +1 -1
- package/src/Guest/GuestCast.test.ts +6 -6
- package/src/Guest/GuestCast.ts +7 -3
- package/src/Guest/GuestChain.test.ts +12 -12
- package/src/Guest/GuestChain.ts +11 -11
- package/src/Guest/GuestInTheMiddle.test.ts +9 -9
- package/src/Guest/GuestInTheMiddle.ts +3 -3
- package/src/Guest/GuestPool.test.ts +10 -17
- package/src/Guest/GuestPool.ts +10 -6
- package/src/Guest/GuestSync.test.ts +2 -2
- package/src/Guest/GuestSync.ts +2 -2
- package/src/Patron/{PatronOfGuest.test.ts → Patron.test.ts} +4 -7
- package/src/Patron/Patron.ts +16 -12
- package/src/Patron/PatronOnce.test.ts +3 -6
- package/src/Patron/PatronOnce.ts +8 -3
- package/src/Patron/PatronPool.test.ts +9 -14
- package/src/Patron/PatronPool.ts +16 -10
- package/src/Source/SourceOfValue.test.ts +3 -6
- package/src/Source/SourceOfValue.ts +7 -3
- package/src/index.ts +35 -13
- package/src/Guest/GuestCallback.test.ts +0 -13
- package/src/Guest/GuestCallback.ts +0 -21
- package/src/Patron/PatronOfGuest.ts +0 -17
- package/src/Source/Source.ts +0 -12
- package/src/Source/SourcesApplied.test.ts +0 -26
- package/src/Source/SourcesApplied.ts +0 -39
package/dist/patron.mjs
CHANGED
@@ -1,4 +1,11 @@
|
|
1
|
-
|
1
|
+
function give(data, guest, options) {
|
2
|
+
if (typeof guest === "function") {
|
3
|
+
guest(data, options);
|
4
|
+
} else {
|
5
|
+
guest.receive(data, options);
|
6
|
+
}
|
7
|
+
}
|
8
|
+
class Guest {
|
2
9
|
constructor(receiver) {
|
3
10
|
this.receiver = receiver;
|
4
11
|
}
|
@@ -41,7 +48,7 @@ class PatronPool {
|
|
41
48
|
};
|
42
49
|
}
|
43
50
|
add(shouldBePatron) {
|
44
|
-
if (shouldBePatron.introduction && shouldBePatron.introduction() === "patron") {
|
51
|
+
if (typeof shouldBePatron !== "function" && shouldBePatron.introduction && shouldBePatron.introduction() === "patron") {
|
45
52
|
this.patrons.add(shouldBePatron);
|
46
53
|
}
|
47
54
|
return this;
|
@@ -56,7 +63,7 @@ class PatronPool {
|
|
56
63
|
return this;
|
57
64
|
}
|
58
65
|
sendValueToGuest(value, guest, options) {
|
59
|
-
|
66
|
+
give(value, guest, {
|
60
67
|
...options,
|
61
68
|
data: {
|
62
69
|
...options?.data ?? {},
|
@@ -67,6 +74,36 @@ class PatronPool {
|
|
67
74
|
}
|
68
75
|
}
|
69
76
|
|
77
|
+
class GuestAware {
|
78
|
+
constructor(guestReceiver) {
|
79
|
+
this.guestReceiver = guestReceiver;
|
80
|
+
}
|
81
|
+
receiving(guest) {
|
82
|
+
this.guestReceiver(guest);
|
83
|
+
return guest;
|
84
|
+
}
|
85
|
+
}
|
86
|
+
|
87
|
+
class GuestCast {
|
88
|
+
constructor(sourceGuest, targetGuest) {
|
89
|
+
this.sourceGuest = sourceGuest;
|
90
|
+
this.targetGuest = targetGuest;
|
91
|
+
}
|
92
|
+
introduction() {
|
93
|
+
if (typeof this.sourceGuest === "function") {
|
94
|
+
return "guest";
|
95
|
+
}
|
96
|
+
if (!this.sourceGuest.introduction) {
|
97
|
+
return "guest";
|
98
|
+
}
|
99
|
+
return this.sourceGuest.introduction();
|
100
|
+
}
|
101
|
+
receive(value, options) {
|
102
|
+
give(value, this.targetGuest, options);
|
103
|
+
return this;
|
104
|
+
}
|
105
|
+
}
|
106
|
+
|
70
107
|
var __defProp$3 = Object.defineProperty;
|
71
108
|
var __defNormalProp$3 = (obj, key, value) => key in obj ? __defProp$3(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
72
109
|
var __publicField$3 = (obj, key, value) => __defNormalProp$3(obj, typeof key !== "symbol" ? key + "" : key, value);
|
@@ -82,7 +119,7 @@ class GuestPool {
|
|
82
119
|
return this;
|
83
120
|
}
|
84
121
|
add(guest) {
|
85
|
-
if (!guest.introduction || guest.introduction() === "guest") {
|
122
|
+
if (typeof guest === "function" || !guest.introduction || guest.introduction() === "guest") {
|
86
123
|
this.guests.add(guest);
|
87
124
|
}
|
88
125
|
this.patronPool.add(guest);
|
@@ -100,7 +137,7 @@ class GuestPool {
|
|
100
137
|
}
|
101
138
|
deliverToGuests(value, options) {
|
102
139
|
this.guests.forEach((target) => {
|
103
|
-
|
140
|
+
give(value, target, options);
|
104
141
|
});
|
105
142
|
this.guests.clear();
|
106
143
|
}
|
@@ -137,7 +174,11 @@ class SourceOfValue {
|
|
137
174
|
return this;
|
138
175
|
}
|
139
176
|
receiving(guest) {
|
140
|
-
|
177
|
+
if (typeof guest === "function") {
|
178
|
+
this.pool.distribute(this.sourceDocument, new Guest(guest));
|
179
|
+
} else {
|
180
|
+
this.pool.distribute(this.sourceDocument, guest);
|
181
|
+
}
|
141
182
|
return this;
|
142
183
|
}
|
143
184
|
}
|
@@ -162,7 +203,7 @@ class GuestChain {
|
|
162
203
|
);
|
163
204
|
if (this.isChainFilled()) {
|
164
205
|
this.theChain.receiving(
|
165
|
-
new
|
206
|
+
new Guest((chain) => {
|
166
207
|
this.filledChainPool.receive(Object.values(chain));
|
167
208
|
})
|
168
209
|
);
|
@@ -173,7 +214,7 @@ class GuestChain {
|
|
173
214
|
if (this.isChainFilled()) {
|
174
215
|
this.filledChainPool.add(guest);
|
175
216
|
this.theChain.receiving(
|
176
|
-
new
|
217
|
+
new Guest((chain) => {
|
177
218
|
this.filledChainPool.receive(chain);
|
178
219
|
})
|
179
220
|
);
|
@@ -184,10 +225,10 @@ class GuestChain {
|
|
184
225
|
}
|
185
226
|
receiveKey(key) {
|
186
227
|
this.keysKnown.add(key);
|
187
|
-
return new
|
228
|
+
return new Guest((value) => {
|
188
229
|
queueMicrotask(() => {
|
189
230
|
this.theChain.receiving(
|
190
|
-
new
|
231
|
+
new Guest((chain) => {
|
191
232
|
this.keysFilled.add(key);
|
192
233
|
const lastChain = {
|
193
234
|
...chain,
|
@@ -220,58 +261,7 @@ class GuestSync {
|
|
220
261
|
}
|
221
262
|
}
|
222
263
|
|
223
|
-
class
|
224
|
-
constructor(sourceGuest, targetGuest) {
|
225
|
-
this.sourceGuest = sourceGuest;
|
226
|
-
this.targetGuest = targetGuest;
|
227
|
-
}
|
228
|
-
introduction() {
|
229
|
-
if (!this.sourceGuest.introduction) {
|
230
|
-
return "guest";
|
231
|
-
}
|
232
|
-
return this.sourceGuest.introduction();
|
233
|
-
}
|
234
|
-
receive(value, options) {
|
235
|
-
this.targetGuest.receive(value, options);
|
236
|
-
return this;
|
237
|
-
}
|
238
|
-
}
|
239
|
-
|
240
|
-
class GuestAware {
|
241
|
-
constructor(guestReceiver) {
|
242
|
-
this.guestReceiver = guestReceiver;
|
243
|
-
}
|
244
|
-
receiving(guest) {
|
245
|
-
this.guestReceiver(guest);
|
246
|
-
return guest;
|
247
|
-
}
|
248
|
-
}
|
249
|
-
|
250
|
-
class Guest {
|
251
|
-
callback(receiver) {
|
252
|
-
return new GuestCallback(receiver);
|
253
|
-
}
|
254
|
-
chain() {
|
255
|
-
return new GuestChain();
|
256
|
-
}
|
257
|
-
cast(sourceGuest, targetGuest) {
|
258
|
-
return new GuestCast(sourceGuest, targetGuest);
|
259
|
-
}
|
260
|
-
middleware(baseGuest, middleFn) {
|
261
|
-
return new GuestInTheMiddle(baseGuest, middleFn);
|
262
|
-
}
|
263
|
-
pool(initiator) {
|
264
|
-
return new GuestPool(initiator);
|
265
|
-
}
|
266
|
-
aware(guestReceiver) {
|
267
|
-
return new GuestAware(guestReceiver);
|
268
|
-
}
|
269
|
-
sync(value) {
|
270
|
-
return new GuestSync(value);
|
271
|
-
}
|
272
|
-
}
|
273
|
-
|
274
|
-
class PatronOfGuest {
|
264
|
+
class Patron {
|
275
265
|
constructor(willBePatron) {
|
276
266
|
this.willBePatron = willBePatron;
|
277
267
|
}
|
@@ -279,7 +269,7 @@ class PatronOfGuest {
|
|
279
269
|
return "patron";
|
280
270
|
}
|
281
271
|
receive(value, options) {
|
282
|
-
this.willBePatron
|
272
|
+
give(value, this.willBePatron, options);
|
283
273
|
return this;
|
284
274
|
}
|
285
275
|
}
|
@@ -297,7 +287,7 @@ class PatronOnce {
|
|
297
287
|
}
|
298
288
|
receive(value, options) {
|
299
289
|
if (!this.received) {
|
300
|
-
this.baseGuest
|
290
|
+
give(value, this.baseGuest, options);
|
301
291
|
}
|
302
292
|
const data = options?.data;
|
303
293
|
if (data?.pool) {
|
@@ -307,52 +297,23 @@ class PatronOnce {
|
|
307
297
|
}
|
308
298
|
}
|
309
299
|
|
310
|
-
|
311
|
-
|
312
|
-
|
313
|
-
|
314
|
-
|
315
|
-
|
316
|
-
|
317
|
-
|
318
|
-
|
319
|
-
|
320
|
-
|
321
|
-
|
322
|
-
|
323
|
-
|
324
|
-
|
325
|
-
const maybeMethod = target2[property];
|
326
|
-
if (typeof maybeMethod !== "function") {
|
327
|
-
return maybeMethod;
|
328
|
-
}
|
329
|
-
return (...args) => {
|
330
|
-
const appliedArgs = methodsSources[property];
|
331
|
-
if (appliedArgs) {
|
332
|
-
return maybeMethod(...appliedArgs, ...args);
|
333
|
-
}
|
334
|
-
return maybeMethod(...args);
|
335
|
-
};
|
336
|
-
}
|
337
|
-
});
|
338
|
-
};
|
339
|
-
|
340
|
-
class Source {
|
341
|
-
ofValue(sourceDocument) {
|
342
|
-
return new SourceOfValue(sourceDocument);
|
343
|
-
}
|
344
|
-
applySources(target, methodsSources) {
|
345
|
-
return sourcesApplied(target, methodsSources);
|
346
|
-
}
|
347
|
-
}
|
348
|
-
|
349
|
-
if (window) {
|
350
|
-
window["GUEST_LIBRARY"] = {
|
351
|
-
guest: new Guest(),
|
352
|
-
patron: new Patron(),
|
353
|
-
source: new Source()
|
300
|
+
if (globalThis) {
|
301
|
+
globalThis["GUEST_LIBRARY"] = {
|
302
|
+
give,
|
303
|
+
removePatronFromPools,
|
304
|
+
GuestAware,
|
305
|
+
Guest,
|
306
|
+
GuestCast,
|
307
|
+
GuestChain,
|
308
|
+
GuestInTheMiddle,
|
309
|
+
GuestPool,
|
310
|
+
GuestSync,
|
311
|
+
Patron,
|
312
|
+
PatronOnce,
|
313
|
+
PatronPool,
|
314
|
+
SourceOfValue
|
354
315
|
};
|
355
316
|
}
|
356
317
|
|
357
|
-
export { Guest,
|
318
|
+
export { Guest, GuestAware, GuestCast, GuestChain, GuestInTheMiddle, GuestPool, GuestSync, Patron, PatronOnce, PatronPool, SourceOfValue, give, removePatronFromPools };
|
358
319
|
//# sourceMappingURL=patron.mjs.map
|
package/dist/patron.mjs.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"patron.mjs","sources":["../src/Guest/GuestCallback.ts","../src/Patron/PatronPool.ts","../src/Guest/GuestPool.ts","../src/Guest/GuestInTheMiddle.ts","../src/Source/SourceOfValue.ts","../src/Guest/GuestChain.ts","../src/Guest/GuestSync.ts","../src/Guest/GuestCast.ts","../src/Guest/GuestAware.ts","../src/Guest/Guest.ts","../src/Patron/PatronOfGuest.ts","../src/Patron/PatronOnce.ts","../src/Patron/Patron.ts","../src/Source/SourcesApplied.ts","../src/Source/Source.ts","../src/index.ts"],"sourcesContent":["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 GuestCallback<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 { GuestType, ReceiveOptions } from \"../Guest/GuestCallback\";\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 interface PoolType<T = unknown> extends GuestType<T> {\n add(guest: GuestType<T>): this;\n distribute(receiving: T, possiblePatron: GuestType<T>): this;\n remove(patron: GuestType<T>): this;\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 \"../Patron/PatronPool\";\nimport { PoolType } from \"../Patron/PatronPool\";\nimport { GuestType, ReceiveOptions } from \"./GuestCallback\";\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 \"./GuestCallback\";\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 { GuestAwareType } from \"../Guest/GuestAware\";\nimport { GuestType } from \"../Guest/GuestCallback\";\nimport { PatronPool } from \"../Patron/PatronPool\";\n\nexport type SourceType<T = unknown> = GuestAwareType<T> & GuestType<T>;\n\nexport class SourceOfValue<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","import { GuestCallback, GuestType } from \"./GuestCallback\";\nimport { GuestPool } from \"./GuestPool\";\nimport { GuestInTheMiddle } from \"./GuestInTheMiddle\";\nimport { SourceOfValue } from \"../Source/SourceOfValue\";\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 GuestChain<T> implements ChainType<T> {\n private theChain: SourceOfValue<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 SourceOfValue<Record<string, unknown>>({});\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 GuestCallback((chain: Record<string, unknown>) => {\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 GuestCallback((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 GuestCallback((value) => {\n // Обернул в очередь чтобы можно было синхронно наполнить очередь известных ключей\n queueMicrotask(() => {\n this.theChain.receiving(\n new GuestCallback((chain: Record<string, unknown>) => {\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 { GuestType } from \"./GuestCallback\";\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 \"./GuestCallback\";\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 \"./GuestCallback\";\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 {\n GuestCallback,\n GuestExecutorType,\n GuestType,\n ReceiveOptions,\n} from \"./GuestCallback\";\nimport { GuestChain } from \"./GuestChain\";\nimport { GuestCast } from \"./GuestCast\";\nimport { GuestInTheMiddle } from \"./GuestInTheMiddle\";\nimport { GuestPool } from \"./GuestPool\";\nimport { GuestAware } from \"./GuestAware\";\nimport { GuestSync } from \"./GuestSync\";\n\nexport class Guest {\n public callback<P>(receiver: GuestExecutorType<P>) {\n return new GuestCallback(receiver);\n }\n\n public chain() {\n return new GuestChain();\n }\n\n public cast<P>(sourceGuest: GuestType<unknown>, targetGuest: GuestType<P>) {\n return new GuestCast(sourceGuest, targetGuest);\n }\n\n public middleware<P>(\n baseGuest: GuestType<unknown>,\n middleFn: (value: P, options?: ReceiveOptions) => void,\n ) {\n return new GuestInTheMiddle(baseGuest, middleFn);\n }\n\n public pool(initiator: unknown) {\n return new GuestPool(initiator);\n }\n\n public aware<P>(guestReceiver: (guest: GuestType<P>) => void) {\n return new GuestAware(guestReceiver);\n }\n\n public sync<P>(value: P) {\n return new GuestSync(value);\n }\n}\n","import { GuestType, ReceiveOptions } from \"../Guest/GuestCallback\";\n\n/**\n * Патрон - это постоянный посетитель\n */\nexport class PatronOfGuest<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 { PoolType } from \"./PatronPool\";\nimport { GuestType, ReceiveOptions } from \"../Guest/GuestCallback\";\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 { PatronOfGuest } from \"./PatronOfGuest\";\nimport { GuestType } from \"../Guest/GuestCallback\";\nimport { PatronOnce } from \"./PatronOnce\";\nimport { PatronPool } from \"./PatronPool\";\n\nexport class Patron {\n public ofGuest<P>(willBePatron: GuestType<P>) {\n return new PatronOfGuest(willBePatron);\n }\n\n public once<P>(baseGuest: GuestType<P>) {\n return new PatronOnce(baseGuest);\n }\n\n public pool(initiator: unknown) {\n return new PatronPool(initiator);\n }\n}\n","type TupleSplit<\n T,\n N extends number,\n O extends readonly any[] = readonly [],\n> = O[\"length\"] extends N\n ? [O, T]\n : T extends readonly [infer F, ...infer R]\n ? TupleSplit<readonly [...R], N, readonly [...O, F]>\n : [O, T];\n\ntype SkipFirst<T extends readonly any[], N extends number> = TupleSplit<\n T,\n N\n>[1];\n\nexport const sourcesApplied = <T>(\n target: T,\n methodsSources: Record<string, unknown[]>,\n) => {\n return new Proxy(target as object, {\n get: function (target: any, property) {\n const maybeMethod = target[property];\n\n if (typeof maybeMethod !== \"function\") {\n return maybeMethod;\n }\n\n return (...args: any[]) => {\n const appliedArgs = (methodsSources as any)[property];\n\n if (appliedArgs) {\n return maybeMethod(...appliedArgs, ...args);\n }\n\n return maybeMethod(...args);\n };\n },\n });\n};\n","import { SourceOfValue } from \"./SourceOfValue\";\nimport { sourcesApplied } from \"./SourcesApplied\";\n\nexport class Source {\n public ofValue<P>(sourceDocument: P) {\n return new SourceOfValue(sourceDocument);\n }\n\n public applySources<P>(target: P, methodsSources: Record<string, unknown[]>) {\n return sourcesApplied(target, methodsSources);\n }\n}\n","export * from \"./Guest/GuestCallback\";\nexport * from \"./Guest/GuestChain\";\nexport * from \"./Guest/GuestSync\";\nexport * from \"./Patron/PatronPool\";\nexport * from \"./Source/SourceOfValue\";\n\nimport { Guest } from \"./Guest/Guest\";\nimport { Patron } from \"./Patron/Patron\";\nimport { Source } from \"./Source/Source\";\n\nexport { Guest, Patron, Source };\n\ndeclare var window: any;\n\nif (window) {\n window[\"GUEST_LIBRARY\"] = {\n guest: new Guest(),\n patron: new Patron(),\n source: new Source(),\n };\n}\n"],"names":["__publicField","target"],"mappings":"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"}
|
1
|
+
{"version":3,"file":"patron.mjs","sources":["../src/Guest/Guest.ts","../src/Patron/PatronPool.ts","../src/Guest/GuestAware.ts","../src/Guest/GuestCast.ts","../src/Guest/GuestPool.ts","../src/Guest/GuestInTheMiddle.ts","../src/Source/SourceOfValue.ts","../src/Guest/GuestChain.ts","../src/Guest/GuestSync.ts","../src/Patron/Patron.ts","../src/Patron/PatronOnce.ts","../src/index.ts"],"sourcesContent":["type GuestIntroduction = \"guest\" | \"patron\";\n\nexport interface ReceiveOptions {\n data?: unknown;\n}\n\nexport type GuestExecutorType<T = unknown> = (\n value: T,\n options?: ReceiveOptions,\n) => void;\n\nexport interface GuestObjectType<T = unknown> {\n receive(value: T, options?: ReceiveOptions): this;\n introduction?(): GuestIntroduction;\n}\n\nexport type GuestType<T = unknown> = GuestExecutorType<T> | GuestObjectType<T>;\n\nexport function give<T>(\n data: T,\n guest: GuestType<T>,\n options?: ReceiveOptions,\n) {\n if (typeof guest === \"function\") {\n guest(data, options);\n } else {\n guest.receive(data, options);\n }\n}\n\nexport class Guest<T> implements GuestObjectType<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 {\n give,\n GuestObjectType,\n GuestType,\n ReceiveOptions,\n} from \"../Guest/Guest\";\n\nconst poolSets = new Map<PoolType, Set<GuestObjectType>>();\n\n/**\n * Удалить патрон из всех пулов\n */\nexport const removePatronFromPools = (patron: GuestObjectType) => {\n poolSets.forEach((pool) => {\n pool.delete(patron);\n });\n};\n\nexport interface PoolType<T = unknown> extends GuestObjectType<T> {\n add(guest: GuestObjectType<T>): this;\n distribute(receiving: T, possiblePatron: GuestObjectType<T>): this;\n remove(patron: GuestObjectType<T>): this;\n}\n\nexport class PatronPool<T> implements PoolType<T> {\n private patrons = new Set<GuestObjectType<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 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 private sendValueToGuest(\n value: T,\n guest: GuestType<T>,\n options?: ReceiveOptions,\n ) {\n give(value, guest, {\n ...options,\n data: {\n ...((options?.data as Record<string, unknown>) ?? {}),\n initiator: this.initiator,\n pool: this,\n },\n });\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 { give, GuestObjectType, GuestType, ReceiveOptions } from \"./Guest\";\n\nexport class GuestCast<T> implements GuestObjectType<T> {\n public constructor(\n private sourceGuest: GuestType<unknown>,\n private targetGuest: GuestType<T>,\n ) {}\n\n introduction() {\n if (typeof this.sourceGuest === \"function\") {\n return \"guest\";\n }\n\n if (!this.sourceGuest.introduction) {\n return \"guest\";\n }\n return this.sourceGuest.introduction();\n }\n\n receive(value: T, options?: ReceiveOptions): this {\n give(value, this.targetGuest, options);\n return this;\n }\n}\n","import { PatronPool } from \"../Patron/PatronPool\";\nimport { PoolType } from \"../Patron/PatronPool\";\nimport { give, GuestObjectType, GuestType, ReceiveOptions } from \"./Guest\";\n\nexport class GuestPool<T> implements GuestObjectType<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 (\n typeof guest === \"function\" ||\n !guest.introduction ||\n guest.introduction() === \"guest\"\n ) {\n this.guests.add(guest);\n }\n this.patronPool.add(guest);\n return this;\n }\n\n public remove(patron: GuestObjectType<T>): this {\n this.guests.delete(patron);\n this.patronPool.remove(patron);\n return this;\n }\n\n public distribute(receiving: T, possiblePatron: GuestObjectType<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 give(value, target, options);\n });\n this.guests.clear();\n }\n}\n","import { GuestObjectType, ReceiveOptions } from \"./Guest\";\n\nexport class GuestInTheMiddle<T> implements GuestObjectType<T> {\n public constructor(\n private baseGuest: GuestObjectType<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 { GuestAwareType } from \"../Guest/GuestAware\";\nimport { Guest, GuestObjectType, GuestType } from \"../Guest/Guest\";\nimport { PatronPool } from \"../Patron/PatronPool\";\n\nexport type SourceType<T = unknown> = GuestAwareType<T> & GuestObjectType<T>;\n\nexport class SourceOfValue<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 if (typeof guest === \"function\") {\n this.pool.distribute(this.sourceDocument, new Guest(guest));\n } else {\n this.pool.distribute(this.sourceDocument, guest);\n }\n return this;\n }\n}\n","import { Guest, GuestObjectType } from \"./Guest\";\nimport { GuestPool } from \"./GuestPool\";\nimport { GuestInTheMiddle } from \"./GuestInTheMiddle\";\nimport { SourceOfValue } from \"../Source/SourceOfValue\";\n\nexport interface ChainType<T = unknown> {\n result(guest: GuestObjectType<T>): this;\n resultArray(guest: GuestObjectType<T>): this;\n receiveKey<R>(key: string): GuestObjectType<R>;\n}\n\nexport class GuestChain<T> implements ChainType<T> {\n private theChain: SourceOfValue<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 SourceOfValue<Record<string, unknown>>({});\n }\n\n public resultArray(guest: GuestObjectType<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: Record<string, unknown>) => {\n this.filledChainPool.receive(Object.values(chain));\n }),\n );\n }\n\n return this;\n }\n\n public result(guest: GuestObjectType<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): GuestObjectType<R> {\n this.keysKnown.add(key);\n return new Guest((value) => {\n // Обернул в очередь чтобы можно было синхронно наполнить очередь известных ключей\n queueMicrotask(() => {\n this.theChain.receiving(\n new Guest((chain: Record<string, unknown>) => {\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 { GuestObjectType } from \"./Guest\";\n\nexport interface GuestValueType<T = unknown> extends GuestObjectType<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 {\n give,\n GuestObjectType,\n GuestType,\n ReceiveOptions,\n} from \"../Guest/Guest\";\n\n/**\n * Патрон - это постоянный посетитель\n */\nexport class Patron<T> implements GuestObjectType<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 give(value, this.willBePatron, options);\n return this;\n }\n}\n","import { PoolType } from \"./PatronPool\";\nimport {\n give,\n GuestObjectType,\n GuestType,\n ReceiveOptions,\n} from \"../Guest/Guest\";\n\ntype PoolAware = {\n pool?: PoolType;\n};\n\nexport class PatronOnce<T> implements GuestObjectType<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 give(value, this.baseGuest, 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 { give, Guest } from \"./Guest/Guest\";\nimport { PatronPool, removePatronFromPools } from \"./Patron/PatronPool\";\nimport { GuestAware } from \"./Guest/GuestAware\";\nimport { GuestCast } from \"./Guest/GuestCast\";\nimport { GuestChain } from \"./Guest/GuestChain\";\nimport { GuestInTheMiddle } from \"./Guest/GuestInTheMiddle\";\nimport { GuestPool } from \"./Guest/GuestPool\";\nimport { GuestSync } from \"./Guest/GuestSync\";\nimport { Patron } from \"./Patron/Patron\";\nimport { PatronOnce } from \"./Patron/PatronOnce\";\nimport { SourceOfValue } from \"./Source/SourceOfValue\";\n\nexport * from \"./Guest/GuestAware\";\nexport * from \"./Guest/Guest\";\nexport * from \"./Guest/GuestCast\";\nexport * from \"./Guest/GuestChain\";\nexport * from \"./Guest/GuestInTheMiddle\";\nexport * from \"./Guest/GuestPool\";\nexport * from \"./Guest/GuestSync\";\nexport * from \"./Patron/Patron\";\nexport * from \"./Patron/PatronOnce\";\nexport * from \"./Patron/PatronPool\";\nexport * from \"./Source/SourceOfValue\";\n\ndeclare var globalThis: any;\n\nif (globalThis) {\n globalThis[\"GUEST_LIBRARY\"] = {\n give,\n removePatronFromPools,\n GuestAware,\n Guest,\n GuestCast,\n GuestChain,\n GuestInTheMiddle,\n GuestPool,\n GuestSync,\n Patron,\n PatronOnce,\n PatronPool,\n SourceOfValue,\n };\n}\n"],"names":["__publicField"],"mappings":"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"}
|
package/package.json
CHANGED
package/src/Guest/Guest.ts
CHANGED
@@ -1,45 +1,38 @@
|
|
1
|
-
|
2
|
-
GuestCallback,
|
3
|
-
GuestExecutorType,
|
4
|
-
GuestType,
|
5
|
-
ReceiveOptions,
|
6
|
-
} from "./GuestCallback";
|
7
|
-
import { GuestChain } from "./GuestChain";
|
8
|
-
import { GuestCast } from "./GuestCast";
|
9
|
-
import { GuestInTheMiddle } from "./GuestInTheMiddle";
|
10
|
-
import { GuestPool } from "./GuestPool";
|
11
|
-
import { GuestAware } from "./GuestAware";
|
12
|
-
import { GuestSync } from "./GuestSync";
|
1
|
+
type GuestIntroduction = "guest" | "patron";
|
13
2
|
|
14
|
-
export
|
15
|
-
|
16
|
-
|
17
|
-
}
|
3
|
+
export interface ReceiveOptions {
|
4
|
+
data?: unknown;
|
5
|
+
}
|
18
6
|
|
19
|
-
|
20
|
-
|
21
|
-
|
7
|
+
export type GuestExecutorType<T = unknown> = (
|
8
|
+
value: T,
|
9
|
+
options?: ReceiveOptions,
|
10
|
+
) => void;
|
22
11
|
|
23
|
-
|
24
|
-
|
25
|
-
|
12
|
+
export interface GuestObjectType<T = unknown> {
|
13
|
+
receive(value: T, options?: ReceiveOptions): this;
|
14
|
+
introduction?(): GuestIntroduction;
|
15
|
+
}
|
26
16
|
|
27
|
-
|
28
|
-
baseGuest: GuestType<unknown>,
|
29
|
-
middleFn: (value: P, options?: ReceiveOptions) => void,
|
30
|
-
) {
|
31
|
-
return new GuestInTheMiddle(baseGuest, middleFn);
|
32
|
-
}
|
17
|
+
export type GuestType<T = unknown> = GuestExecutorType<T> | GuestObjectType<T>;
|
33
18
|
|
34
|
-
|
35
|
-
|
19
|
+
export function give<T>(
|
20
|
+
data: T,
|
21
|
+
guest: GuestType<T>,
|
22
|
+
options?: ReceiveOptions,
|
23
|
+
) {
|
24
|
+
if (typeof guest === "function") {
|
25
|
+
guest(data, options);
|
26
|
+
} else {
|
27
|
+
guest.receive(data, options);
|
36
28
|
}
|
29
|
+
}
|
37
30
|
|
38
|
-
|
39
|
-
|
40
|
-
}
|
31
|
+
export class Guest<T> implements GuestObjectType<T> {
|
32
|
+
public constructor(private receiver: GuestExecutorType<T>) {}
|
41
33
|
|
42
|
-
public
|
43
|
-
|
34
|
+
public receive(value: T, options?: ReceiveOptions) {
|
35
|
+
this.receiver(value, options);
|
36
|
+
return this;
|
44
37
|
}
|
45
38
|
}
|
@@ -1,15 +1,13 @@
|
|
1
1
|
import { expect, test } from "vitest";
|
2
2
|
import { GuestAware } from "./GuestAware";
|
3
|
-
import {
|
3
|
+
import { give } from "./Guest";
|
4
4
|
|
5
5
|
test("guest aware", () => {
|
6
|
-
const
|
7
|
-
|
6
|
+
const aware = new GuestAware((guest) => {
|
7
|
+
give(111, guest);
|
8
8
|
});
|
9
9
|
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
}),
|
14
|
-
);
|
10
|
+
aware.receiving((value) => {
|
11
|
+
expect(value).toBe(111);
|
12
|
+
});
|
15
13
|
});
|
package/src/Guest/GuestAware.ts
CHANGED
@@ -1,21 +1,21 @@
|
|
1
1
|
import { expect, test } from "vitest";
|
2
2
|
import { SourceOfValue } from "../Source/SourceOfValue";
|
3
|
-
import {
|
4
|
-
import {
|
3
|
+
import { Patron } from "../Patron/Patron";
|
4
|
+
import { give, Guest } from "./Guest";
|
5
5
|
import { GuestCast } from "./GuestCast";
|
6
6
|
|
7
7
|
test("chain guest returns 2 values after result guest", () => {
|
8
8
|
const source = new SourceOfValue(1);
|
9
9
|
let acc = 0;
|
10
|
-
const mainGuest = new
|
11
|
-
new
|
10
|
+
const mainGuest = new Patron(
|
11
|
+
new Guest((value: number) => {
|
12
12
|
acc += value;
|
13
13
|
}),
|
14
14
|
);
|
15
15
|
// Становится патроном тоже, тк наследует это сойство от mainGuest
|
16
16
|
const secondGuest = new GuestCast(
|
17
17
|
mainGuest,
|
18
|
-
new
|
18
|
+
new Guest((value: number) => {
|
19
19
|
acc += value;
|
20
20
|
}),
|
21
21
|
);
|
@@ -23,7 +23,7 @@ test("chain guest returns 2 values after result guest", () => {
|
|
23
23
|
source.receiving(mainGuest);
|
24
24
|
source.receiving(secondGuest);
|
25
25
|
|
26
|
-
|
26
|
+
give(2, source);
|
27
27
|
|
28
28
|
setTimeout(() => {
|
29
29
|
expect(acc).toBe(6);
|
package/src/Guest/GuestCast.ts
CHANGED
@@ -1,12 +1,16 @@
|
|
1
|
-
import { GuestType, ReceiveOptions } from "./
|
1
|
+
import { give, GuestObjectType, GuestType, ReceiveOptions } from "./Guest";
|
2
2
|
|
3
|
-
export class GuestCast<T> implements
|
3
|
+
export class GuestCast<T> implements GuestObjectType<T> {
|
4
4
|
public constructor(
|
5
5
|
private sourceGuest: GuestType<unknown>,
|
6
6
|
private targetGuest: GuestType<T>,
|
7
7
|
) {}
|
8
8
|
|
9
9
|
introduction() {
|
10
|
+
if (typeof this.sourceGuest === "function") {
|
11
|
+
return "guest";
|
12
|
+
}
|
13
|
+
|
10
14
|
if (!this.sourceGuest.introduction) {
|
11
15
|
return "guest";
|
12
16
|
}
|
@@ -14,7 +18,7 @@ export class GuestCast<T> implements GuestType<T> {
|
|
14
18
|
}
|
15
19
|
|
16
20
|
receive(value: T, options?: ReceiveOptions): this {
|
17
|
-
this.targetGuest
|
21
|
+
give(value, this.targetGuest, options);
|
18
22
|
return this;
|
19
23
|
}
|
20
24
|
}
|
@@ -1,8 +1,8 @@
|
|
1
1
|
import { expect, test } from "vitest";
|
2
2
|
import { GuestChain } from "./GuestChain";
|
3
|
-
import {
|
3
|
+
import { Guest } from "./Guest";
|
4
4
|
import { SourceOfValue } from "../Source/SourceOfValue";
|
5
|
-
import {
|
5
|
+
import { Patron } from "../Patron/Patron";
|
6
6
|
|
7
7
|
test("chain guest returns 2 values after result guest", () => {
|
8
8
|
const one = new SourceOfValue(1);
|
@@ -10,7 +10,7 @@ test("chain guest returns 2 values after result guest", () => {
|
|
10
10
|
const chain = new GuestChain<{ one: number; two: number }>();
|
11
11
|
|
12
12
|
chain.result(
|
13
|
-
new
|
13
|
+
new Guest((value) => {
|
14
14
|
expect(Object.values(value).join()).toBe("1,2");
|
15
15
|
}),
|
16
16
|
);
|
@@ -28,7 +28,7 @@ test("chain guest returns 2 values before result guest", () => {
|
|
28
28
|
two.receiving(chain.receiveKey("two"));
|
29
29
|
|
30
30
|
chain.result(
|
31
|
-
new
|
31
|
+
new Guest((value) => {
|
32
32
|
expect(Object.values(value).join()).toBe("1,2");
|
33
33
|
}),
|
34
34
|
);
|
@@ -39,15 +39,15 @@ test("chain with patron", () => {
|
|
39
39
|
const two = new SourceOfValue(2);
|
40
40
|
const chain = new GuestChain<{ one: number; two: number }>();
|
41
41
|
|
42
|
-
one.receiving(new
|
43
|
-
two.receiving(new
|
42
|
+
one.receiving(new Patron(chain.receiveKey("one")));
|
43
|
+
two.receiving(new Patron(chain.receiveKey("two")));
|
44
44
|
|
45
45
|
one.receive(3);
|
46
46
|
one.receive(4);
|
47
47
|
|
48
48
|
chain.result(
|
49
|
-
new
|
50
|
-
new
|
49
|
+
new Patron(
|
50
|
+
new Guest((value: Record<string, unknown>) => {
|
51
51
|
expect(Object.values(value).length).toBe(2);
|
52
52
|
}),
|
53
53
|
),
|
@@ -59,12 +59,12 @@ test("chain as array", () => {
|
|
59
59
|
const two = new SourceOfValue(2);
|
60
60
|
const chain = new GuestChain<[number, number]>();
|
61
61
|
|
62
|
-
one.receiving(new
|
63
|
-
two.receiving(new
|
62
|
+
one.receiving(new Patron(chain.receiveKey("0")));
|
63
|
+
two.receiving(new Patron(chain.receiveKey("1")));
|
64
64
|
|
65
65
|
chain.resultArray(
|
66
|
-
new
|
67
|
-
new
|
66
|
+
new Patron(
|
67
|
+
new Guest((value) => {
|
68
68
|
expect(JSON.stringify(value)).toBe("[1, 2]");
|
69
69
|
}),
|
70
70
|
),
|