patron-oop 1.15.0 → 1.17.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (43) hide show
  1. package/CHANGELOG.md +14 -0
  2. package/dist/patron.cjs +376 -0
  3. package/dist/patron.cjs.map +1 -0
  4. package/dist/patron.d.ts +21 -27
  5. package/dist/patron.js +34 -48
  6. package/dist/patron.js.map +1 -1
  7. package/dist/patron.min.js +1 -1
  8. package/dist/patron.min.mjs +1 -1
  9. package/dist/patron.min.mjs.map +1 -1
  10. package/dist/patron.mjs +33 -30
  11. package/dist/patron.mjs.map +1 -1
  12. package/examples/elegant_objects.html +8 -8
  13. package/examples/reactive.html +6 -6
  14. package/package.json +1 -1
  15. package/rollup.config.js +6 -1
  16. package/src/Factory/Factory.test.ts +28 -26
  17. package/src/Factory/Factory.ts +15 -10
  18. package/src/Guest/Guest.test.ts +1 -1
  19. package/src/Guest/Guest.ts +6 -10
  20. package/src/Guest/GuestAware.test.ts +1 -1
  21. package/src/Guest/GuestAware.ts +2 -2
  22. package/src/Guest/GuestCast.test.ts +2 -2
  23. package/src/Guest/GuestCast.ts +3 -4
  24. package/src/Guest/GuestChain.test.ts +10 -10
  25. package/src/Guest/GuestChain.ts +7 -8
  26. package/src/Guest/GuestMiddle.test.ts +11 -11
  27. package/src/Guest/GuestMiddle.ts +4 -4
  28. package/src/Guest/GuestObject.test.ts +1 -1
  29. package/src/Guest/GuestObject.ts +3 -4
  30. package/src/Guest/GuestPool.test.ts +2 -2
  31. package/src/Guest/GuestPool.ts +5 -5
  32. package/src/Guest/GuestSync.test.ts +2 -2
  33. package/src/Guest/GuestSync.ts +1 -1
  34. package/src/Patron/Patron.test.ts +2 -2
  35. package/src/Patron/Patron.ts +2 -10
  36. package/src/Patron/PatronOnce.test.ts +4 -2
  37. package/src/Patron/PatronOnce.ts +2 -10
  38. package/src/Patron/PatronPool.test.ts +1 -1
  39. package/src/Patron/PatronPool.ts +6 -14
  40. package/src/Source/Source.test.ts +1 -1
  41. package/src/Source/Source.ts +3 -3
  42. package/src/Source/SourceEmpty.test.ts +3 -3
  43. package/src/Source/SourceEmpty.ts +4 -4
package/dist/patron.js CHANGED
@@ -1,10 +1,8 @@
1
- 'use strict';
2
-
3
1
  class GuestAware {
4
2
  constructor(guestReceiver) {
5
3
  this.guestReceiver = guestReceiver;
6
4
  }
7
- receiving(guest) {
5
+ value(guest) {
8
6
  this.guestReceiver(guest);
9
7
  return guest;
10
8
  }
@@ -14,14 +12,14 @@ function give(data, guest, options) {
14
12
  if (typeof guest === "function") {
15
13
  guest(data, options);
16
14
  } else {
17
- guest.receive(data, options);
15
+ guest.give(data, options);
18
16
  }
19
17
  }
20
18
  class Guest {
21
19
  constructor(receiver) {
22
20
  this.receiver = receiver;
23
21
  }
24
- receive(value, options) {
22
+ give(value, options) {
25
23
  this.receiver(value, options);
26
24
  return this;
27
25
  }
@@ -41,7 +39,7 @@ class GuestCast {
41
39
  }
42
40
  return this.sourceGuest.introduction();
43
41
  }
44
- receive(value, options) {
42
+ give(value, options) {
45
43
  give(value, this.targetGuest, options);
46
44
  return this;
47
45
  }
@@ -60,7 +58,7 @@ class PatronPool {
60
58
  constructor(initiator) {
61
59
  this.initiator = initiator;
62
60
  __publicField$5(this, "patrons", /* @__PURE__ */ new Set());
63
- __publicField$5(this, "receive");
61
+ __publicField$5(this, "give");
64
62
  poolSets.set(this, this.patrons);
65
63
  let lastMicrotask = null;
66
64
  const doReceive = (value, options) => {
@@ -68,7 +66,7 @@ class PatronPool {
68
66
  this.sendValueToGuest(value, target, options);
69
67
  });
70
68
  };
71
- this.receive = (value, options) => {
69
+ this.give = (value, options) => {
72
70
  const currentMicroTask = () => {
73
71
  if (currentMicroTask === lastMicrotask) {
74
72
  doReceive(value, options);
@@ -115,9 +113,9 @@ class GuestPool {
115
113
  __publicField$4(this, "patronPool");
116
114
  this.patronPool = new PatronPool(initiator);
117
115
  }
118
- receive(value, options) {
116
+ give(value, options) {
119
117
  this.deliverToGuests(value, options);
120
- this.patronPool.receive(value, options);
118
+ this.patronPool.give(value, options);
121
119
  return this;
122
120
  }
123
121
  add(guest) {
@@ -134,7 +132,7 @@ class GuestPool {
134
132
  }
135
133
  distribute(receiving, possiblePatron) {
136
134
  this.add(possiblePatron);
137
- this.receive(receiving);
135
+ this.give(receiving);
138
136
  return this;
139
137
  }
140
138
  deliverToGuests(value, options) {
@@ -156,7 +154,7 @@ class GuestMiddle {
156
154
  }
157
155
  return this.baseGuest.introduction();
158
156
  }
159
- receive(value, options) {
157
+ give(value, options) {
160
158
  this.middleFn(value, options);
161
159
  return this;
162
160
  }
@@ -170,12 +168,12 @@ class Source {
170
168
  this.sourceDocument = sourceDocument;
171
169
  __publicField$3(this, "pool", new PatronPool(this));
172
170
  }
173
- receive(value) {
171
+ give(value) {
174
172
  this.sourceDocument = value;
175
- this.pool.receive(this.sourceDocument);
173
+ this.pool.give(this.sourceDocument);
176
174
  return this;
177
175
  }
178
- receiving(guest) {
176
+ value(guest) {
179
177
  if (typeof guest === "function") {
180
178
  this.pool.distribute(this.sourceDocument, new Guest(guest));
181
179
  } else {
@@ -189,12 +187,12 @@ class GuestObject {
189
187
  constructor(baseGuest) {
190
188
  this.baseGuest = baseGuest;
191
189
  }
192
- receive(value, options) {
190
+ give(value, options) {
193
191
  let guest = this.baseGuest;
194
192
  if (typeof guest === "function") {
195
193
  guest = new Guest(guest);
196
194
  }
197
- guest.receive(value, options);
195
+ guest.give(value, options);
198
196
  return this;
199
197
  }
200
198
  introduction() {
@@ -225,9 +223,9 @@ class GuestChain {
225
223
  )
226
224
  );
227
225
  if (this.isChainFilled()) {
228
- this.theChain.receiving(
226
+ this.theChain.value(
229
227
  new Guest((chain) => {
230
- this.filledChainPool.receive(Object.values(chain));
228
+ this.filledChainPool.give(Object.values(chain));
231
229
  })
232
230
  );
233
231
  }
@@ -237,9 +235,9 @@ class GuestChain {
237
235
  const guestObject = new GuestObject(guest);
238
236
  if (this.isChainFilled()) {
239
237
  this.filledChainPool.add(guestObject);
240
- this.theChain.receiving(
238
+ this.theChain.value(
241
239
  new Guest((chain) => {
242
- this.filledChainPool.receive(chain);
240
+ this.filledChainPool.give(chain);
243
241
  })
244
242
  );
245
243
  } else {
@@ -251,16 +249,16 @@ class GuestChain {
251
249
  this.keysKnown.add(key);
252
250
  return new Guest((value) => {
253
251
  queueMicrotask(() => {
254
- this.theChain.receiving(
252
+ this.theChain.value(
255
253
  new Guest((chain) => {
256
254
  this.keysFilled.add(key);
257
255
  const lastChain = {
258
256
  ...chain,
259
257
  [key]: value
260
258
  };
261
- this.theChain.receive(lastChain);
259
+ this.theChain.give(lastChain);
262
260
  if (this.isChainFilled()) {
263
- this.filledChainPool.receive(lastChain);
261
+ this.filledChainPool.give(lastChain);
264
262
  }
265
263
  })
266
264
  );
@@ -276,7 +274,7 @@ class GuestSync {
276
274
  constructor(theValue) {
277
275
  this.theValue = theValue;
278
276
  }
279
- receive(value) {
277
+ give(value) {
280
278
  this.theValue = value;
281
279
  return this;
282
280
  }
@@ -292,7 +290,7 @@ class Patron {
292
290
  introduction() {
293
291
  return "patron";
294
292
  }
295
- receive(value, options) {
293
+ give(value, options) {
296
294
  give(value, this.willBePatron, options);
297
295
  return this;
298
296
  }
@@ -309,7 +307,7 @@ class PatronOnce {
309
307
  introduction() {
310
308
  return "patron";
311
309
  }
312
- receive(value, options) {
310
+ give(value, options) {
313
311
  if (!this.received) {
314
312
  give(value, this.baseGuest, options);
315
313
  }
@@ -328,8 +326,8 @@ class SourceEmpty {
328
326
  constructor() {
329
327
  __publicField(this, "baseSource", new Source(null));
330
328
  }
331
- receiving(guest) {
332
- this.baseSource.receiving(
329
+ value(guest) {
330
+ this.baseSource.value(
333
331
  new GuestMiddle(guest, (value) => {
334
332
  if (value !== null) {
335
333
  give(value, guest);
@@ -338,8 +336,8 @@ class SourceEmpty {
338
336
  );
339
337
  return this;
340
338
  }
341
- receive(value) {
342
- this.baseSource.receive(value);
339
+ give(value) {
340
+ this.baseSource.give(value);
343
341
  return this;
344
342
  }
345
343
  }
@@ -350,24 +348,12 @@ class Factory {
350
348
  this.factories = factories;
351
349
  }
352
350
  create(...args) {
353
- return new this.constructorFn(...args, this.factories);
351
+ return new this.constructorFn(
352
+ ...args,
353
+ this.factories
354
+ );
354
355
  }
355
356
  }
356
357
 
357
- exports.Factory = Factory;
358
- exports.Guest = Guest;
359
- exports.GuestAware = GuestAware;
360
- exports.GuestCast = GuestCast;
361
- exports.GuestChain = GuestChain;
362
- exports.GuestMiddle = GuestMiddle;
363
- exports.GuestObject = GuestObject;
364
- exports.GuestPool = GuestPool;
365
- exports.GuestSync = GuestSync;
366
- exports.Patron = Patron;
367
- exports.PatronOnce = PatronOnce;
368
- exports.PatronPool = PatronPool;
369
- exports.Source = Source;
370
- exports.SourceEmpty = SourceEmpty;
371
- exports.give = give;
372
- exports.removePatronFromPools = removePatronFromPools;
358
+ export { Factory, Guest, GuestAware, GuestCast, GuestChain, GuestMiddle, GuestObject, GuestPool, GuestSync, Patron, PatronOnce, PatronPool, Source, SourceEmpty, give, removePatronFromPools };
373
359
  //# sourceMappingURL=patron.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"patron.js","sources":["../src/Guest/GuestAware.ts","../src/Guest/Guest.ts","../src/Guest/GuestCast.ts","../src/Patron/PatronPool.ts","../src/Guest/GuestPool.ts","../src/Guest/GuestMiddle.ts","../src/Source/Source.ts","../src/Guest/GuestObject.ts","../src/Guest/GuestChain.ts","../src/Guest/GuestSync.ts","../src/Patron/Patron.ts","../src/Patron/PatronOnce.ts","../src/Source/SourceEmpty.ts","../src/Factory/Factory.ts"],"sourcesContent":["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","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 { 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 {\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 { 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, GuestType, ReceiveOptions } from \"./Guest\";\n\nexport class GuestMiddle<T> implements GuestObjectType<T> {\n public constructor(\n private baseGuest: GuestType<unknown>,\n private middleFn: (value: T, options?: ReceiveOptions) => void,\n ) {}\n\n introduction() {\n if (typeof this.baseGuest === \"function\" || !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 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 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, GuestType, ReceiveOptions } from \"./Guest\";\n\nexport class GuestObject<T> implements GuestObjectType<T> {\n public constructor(private baseGuest: GuestType<T>) {}\n\n public receive(value: T, options?: ReceiveOptions): this {\n let guest = this.baseGuest;\n if (typeof guest === \"function\") {\n guest = new Guest(guest);\n }\n guest.receive(value, options);\n return this;\n }\n\n public introduction() {\n if (typeof this.baseGuest === \"function\" || !this.baseGuest.introduction) {\n return \"guest\";\n }\n\n return this.baseGuest.introduction();\n }\n}\n","import { Guest, GuestObjectType, GuestType } from \"./Guest\";\nimport { GuestPool } from \"./GuestPool\";\nimport { GuestMiddle } from \"./GuestMiddle\";\nimport { Source } from \"../Source/Source\";\nimport { GuestObject } from \"./GuestObject\";\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: Source<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 Source<Record<string, unknown>>({});\n }\n\n public resultArray(guest: GuestType<T>) {\n const guestObject = new GuestObject(guest);\n this.filledChainPool.add(\n new GuestMiddle(guestObject, (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: GuestType<T>) {\n const guestObject = new GuestObject(guest);\n if (this.isChainFilled()) {\n this.filledChainPool.add(guestObject);\n this.theChain.receiving(\n new Guest((chain) => {\n this.filledChainPool.receive(chain);\n }),\n );\n } else {\n this.filledChainPool.add(guestObject);\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, GuestType } from \"./../Guest/Guest\";\nimport { GuestMiddle } from \"./../Guest/GuestMiddle\";\nimport { Source, SourceType } from \"./Source\";\n\nexport class SourceEmpty<T> implements SourceType<T> {\n private baseSource = new Source<T | null>(null);\n\n public receiving(guest: GuestType<T>) {\n this.baseSource.receiving(\n new GuestMiddle(guest as GuestType, (value) => {\n if (value !== null) {\n give(value, guest);\n }\n }),\n );\n return this;\n }\n\n public receive(value: T): this {\n this.baseSource.receive(value);\n return this;\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(\n private constructorFn: Prototyped<T>,\n private factories: Record<string, unknown> = {},\n ) { }\n\n public create<R extends unknown[], CT = null>(...args: R): CT extends null ? T : CT {\n return new (this.constructorFn as Constructable<T>)(...args, this.factories) as CT extends null ? T : CT;\n }\n}\n"],"names":["__publicField"],"mappings":"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"}
1
+ {"version":3,"file":"patron.js","sources":["../src/Guest/GuestAware.ts","../src/Guest/Guest.ts","../src/Guest/GuestCast.ts","../src/Patron/PatronPool.ts","../src/Guest/GuestPool.ts","../src/Guest/GuestMiddle.ts","../src/Source/Source.ts","../src/Guest/GuestObject.ts","../src/Guest/GuestChain.ts","../src/Guest/GuestSync.ts","../src/Patron/Patron.ts","../src/Patron/PatronOnce.ts","../src/Source/SourceEmpty.ts","../src/Factory/Factory.ts"],"sourcesContent":["import { GuestType } from \"./Guest\";\n\nexport interface GuestAwareType<T = unknown> {\n value(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 value(guest: GuestType<T>): GuestType<T> {\n this.guestReceiver(guest);\n return guest;\n }\n}\n","type GuestIntroduction = \"guest\" | \"patron\";\n\nexport interface GiveOptions {\n data?: unknown;\n}\n\nexport type GuestExecutorType<T = unknown> = (\n value: T,\n options?: GiveOptions,\n) => void;\n\nexport interface GuestObjectType<T = unknown> {\n give(value: T, options?: GiveOptions): this;\n introduction?(): GuestIntroduction;\n}\n\nexport type GuestType<T = unknown> = GuestExecutorType<T> | GuestObjectType<T>;\n\nexport function give<T>(data: T, guest: GuestType<T>, options?: GiveOptions) {\n if (typeof guest === \"function\") {\n guest(data, options);\n } else {\n guest.give(data, options);\n }\n}\n\nexport class Guest<T> implements GuestObjectType<T> {\n public constructor(private receiver: GuestExecutorType<T>) {}\n\n public give(value: T, options?: GiveOptions) {\n this.receiver(value, options);\n return this;\n }\n}\n","import { give, GuestObjectType, GuestType, GiveOptions } 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 public introduction() {\n if (typeof this.sourceGuest === \"function\") {\n return \"guest\";\n }\n if (!this.sourceGuest.introduction) {\n return \"guest\";\n }\n return this.sourceGuest.introduction();\n }\n\n public give(value: T, options?: GiveOptions): this {\n give(value, this.targetGuest, options);\n return this;\n }\n}\n","import { give, GuestObjectType, GuestType, GiveOptions } from \"../Guest/Guest\";\n\nconst poolSets = new Map<PoolType, Set<GuestObjectType>>();\n\n// remove patron from all pools\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 give: (value: T, options?: GiveOptions) => this;\n\n public constructor(private initiator: unknown) {\n poolSets.set(this, this.patrons);\n let lastMicrotask: (() => void) | null = null;\n const doReceive = (value: T, options?: GiveOptions) => {\n this.patrons.forEach((target) => {\n this.sendValueToGuest(value, target, options);\n });\n };\n this.give = (value: T, options?: GiveOptions) => {\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?: GiveOptions,\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 { PatronPool } from \"../Patron/PatronPool\";\nimport { PoolType } from \"../Patron/PatronPool\";\nimport { give, GuestObjectType, GuestType, GiveOptions } 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 give(value: T, options?: GiveOptions): this {\n this.deliverToGuests(value, options);\n this.patronPool.give(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.give(receiving);\n return this;\n }\n\n private deliverToGuests(value: T, options?: GiveOptions) {\n this.guests.forEach((target) => {\n give(value, target, options);\n });\n this.guests.clear();\n }\n}\n","import { GuestObjectType, GuestType, GiveOptions } from \"./Guest\";\n\nexport class GuestMiddle<T> implements GuestObjectType<T> {\n public constructor(\n private baseGuest: GuestType<unknown>,\n private middleFn: (value: T, options?: GiveOptions) => void,\n ) {}\n\n public introduction() {\n if (typeof this.baseGuest === \"function\" || !this.baseGuest.introduction) {\n return \"guest\";\n }\n return this.baseGuest.introduction();\n }\n\n public give(value: T, options?: GiveOptions): 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 Source<T> implements SourceType<T> {\n private pool = new PatronPool(this);\n\n public constructor(private sourceDocument: T) {}\n\n public give(value: T): this {\n this.sourceDocument = value;\n this.pool.give(this.sourceDocument);\n return this;\n }\n\n public value(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, GuestType, GiveOptions } from \"./Guest\";\n\nexport class GuestObject<T> implements GuestObjectType<T> {\n public constructor(private baseGuest: GuestType<T>) {}\n\n public give(value: T, options?: GiveOptions): this {\n let guest = this.baseGuest;\n if (typeof guest === \"function\") {\n guest = new Guest(guest);\n }\n guest.give(value, options);\n return this;\n }\n\n public introduction() {\n if (typeof this.baseGuest === \"function\" || !this.baseGuest.introduction) {\n return \"guest\";\n }\n return this.baseGuest.introduction();\n }\n}\n","import { Guest, GuestObjectType, GuestType } from \"./Guest\";\nimport { GuestPool } from \"./GuestPool\";\nimport { GuestMiddle } from \"./GuestMiddle\";\nimport { Source } from \"../Source/Source\";\nimport { GuestObject } from \"./GuestObject\";\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: Source<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 Source<Record<string, unknown>>({});\n }\n\n public resultArray(guest: GuestType<T>) {\n const guestObject = new GuestObject(guest);\n this.filledChainPool.add(\n new GuestMiddle(guestObject, (value: Record<string, unknown>) =>\n Object.values(value),\n ),\n );\n if (this.isChainFilled()) {\n this.theChain.value(\n new Guest((chain: Record<string, unknown>) => {\n this.filledChainPool.give(Object.values(chain));\n }),\n );\n }\n return this;\n }\n\n public result(guest: GuestType<T>) {\n const guestObject = new GuestObject(guest);\n if (this.isChainFilled()) {\n this.filledChainPool.add(guestObject);\n this.theChain.value(\n new Guest((chain) => {\n this.filledChainPool.give(chain);\n }),\n );\n } else {\n this.filledChainPool.add(guestObject);\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.value(\n new Guest((chain: Record<string, unknown>) => {\n this.keysFilled.add(key);\n const lastChain = {\n ...chain,\n [key]: value,\n };\n this.theChain.give(lastChain);\n if (this.isChainFilled()) {\n this.filledChainPool.give(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 give(value: T): this {\n this.theValue = value;\n return this;\n }\n\n public value() {\n return this.theValue;\n }\n}\n","import { give, GuestObjectType, GuestType, GiveOptions } from \"../Guest/Guest\";\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 give(value: T, options?: GiveOptions): this {\n give(value, this.willBePatron, options);\n return this;\n }\n}\n","import { PoolType } from \"./PatronPool\";\nimport { give, GuestObjectType, GuestType, GiveOptions } 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 give(value: T, options?: GiveOptions): this {\n if (!this.received) {\n give(value, this.baseGuest, options);\n }\n const data = options?.data as PoolAware;\n if (data?.pool) {\n data.pool.remove(this);\n }\n return this;\n }\n}\n","import { give, GuestType } from \"./../Guest/Guest\";\nimport { GuestMiddle } from \"./../Guest/GuestMiddle\";\nimport { Source, SourceType } from \"./Source\";\n\nexport class SourceEmpty<T> implements SourceType<T> {\n private baseSource = new Source<T | null>(null);\n\n public value(guest: GuestType<T>) {\n this.baseSource.value(\n new GuestMiddle(guest as GuestType, (value) => {\n if (value !== null) {\n give(value, guest);\n }\n }),\n );\n return this;\n }\n\n public give(value: T): this {\n this.baseSource.give(value);\n return this;\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(\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"],"names":["__publicField"],"mappings":"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"}
@@ -1 +1 @@
1
- !function(e){"use strict";function t(e,t,i){"function"==typeof t?t(e,i):t.receive(e,i)}class i{constructor(e){this.receiver=e}receive(e,t){return this.receiver(e,t),this}}var s=Object.defineProperty,r=(e,t,i)=>((e,t,i)=>t in e?s(e,t,{enumerable:!0,configurable:!0,writable:!0,value:i}):e[t]=i)(e,"symbol"!=typeof t?t+"":t,i);const n=new Map;class o{constructor(e){this.initiator=e,r(this,"patrons",new Set),r(this,"receive"),n.set(this,this.patrons);let t=null;const i=(e,t)=>{this.patrons.forEach((i=>{this.sendValueToGuest(e,i,t)}))};this.receive=(e,s)=>{const r=()=>{r===t&&i(e,s)};return t=r,queueMicrotask(r),this}}add(e){return"function"!=typeof e&&e.introduction&&"patron"===e.introduction()&&this.patrons.add(e),this}remove(e){return this.patrons.delete(e),this}distribute(e,t){return this.add(t),this.sendValueToGuest(e,t,{}),this}sendValueToGuest(e,i,s){t(e,i,{...s,data:{...s?.data??{},initiator:this.initiator,pool:this}})}}var u=Object.defineProperty,c=(e,t,i)=>((e,t,i)=>t in e?u(e,t,{enumerable:!0,configurable:!0,writable:!0,value:i}):e[t]=i)(e,"symbol"!=typeof t?t+"":t,i);class h{constructor(e){c(this,"guests",new Set),c(this,"patronPool"),this.patronPool=new o(e)}receive(e,t){return this.deliverToGuests(e,t),this.patronPool.receive(e,t),this}add(e){return"function"!=typeof e&&e.introduction&&"guest"!==e.introduction()||this.guests.add(e),this.patronPool.add(e),this}remove(e){return this.guests.delete(e),this.patronPool.remove(e),this}distribute(e,t){return this.add(t),this.receive(e),this}deliverToGuests(e,i){this.guests.forEach((s=>{t(e,s,i)})),this.guests.clear()}}class a{constructor(e,t){this.baseGuest=e,this.middleFn=t}introduction(){return"function"!=typeof this.baseGuest&&this.baseGuest.introduction?this.baseGuest.introduction():"guest"}receive(e,t){return this.middleFn(e,t),this}}var l=Object.defineProperty,d=(e,t,i)=>((e,t,i)=>t in e?l(e,t,{enumerable:!0,configurable:!0,writable:!0,value:i}):e[t]=i)(e,t+"",i);class v{constructor(e){this.sourceDocument=e,d(this,"pool",new o(this))}receive(e){return this.sourceDocument=e,this.pool.receive(this.sourceDocument),this}receiving(e){return"function"==typeof e?this.pool.distribute(this.sourceDocument,new i(e)):this.pool.distribute(this.sourceDocument,e),this}}class b{constructor(e){this.baseGuest=e}receive(e,t){let s=this.baseGuest;return"function"==typeof s&&(s=new i(s)),s.receive(e,t),this}introduction(){return"function"!=typeof this.baseGuest&&this.baseGuest.introduction?this.baseGuest.introduction():"guest"}}var f=Object.defineProperty,p=(e,t,i)=>((e,t,i)=>t in e?f(e,t,{enumerable:!0,configurable:!0,writable:!0,value:i}):e[t]=i)(e,"symbol"!=typeof t?t+"":t,i);var w=Object.defineProperty,y=(e,t,i)=>((e,t,i)=>t in e?w(e,t,{enumerable:!0,configurable:!0,writable:!0,value:i}):e[t]=i)(e,t+"",i);var G=Object.defineProperty,g=(e,t,i)=>((e,t,i)=>t in e?G(e,t,{enumerable:!0,configurable:!0,writable:!0,value:i}):e[t]=i)(e,t+"",i);e.Factory=class{constructor(e,t={}){this.constructorFn=e,this.factories=t}create(...e){return new this.constructorFn(...e,this.factories)}},e.Guest=i,e.GuestAware=class{constructor(e){this.guestReceiver=e}receiving(e){return this.guestReceiver(e),e}},e.GuestCast=class{constructor(e,t){this.sourceGuest=e,this.targetGuest=t}introduction(){return"function"==typeof this.sourceGuest?"guest":this.sourceGuest.introduction?this.sourceGuest.introduction():"guest"}receive(e,i){return t(e,this.targetGuest,i),this}},e.GuestChain=class{constructor(){p(this,"theChain"),p(this,"keysKnown",new Set),p(this,"keysFilled",new Set),p(this,"filledChainPool",new h(this)),this.theChain=new v({})}resultArray(e){const t=new b(e);return this.filledChainPool.add(new a(t,(e=>Object.values(e)))),this.isChainFilled()&&this.theChain.receiving(new i((e=>{this.filledChainPool.receive(Object.values(e))}))),this}result(e){const t=new b(e);return this.isChainFilled()?(this.filledChainPool.add(t),this.theChain.receiving(new i((e=>{this.filledChainPool.receive(e)})))):this.filledChainPool.add(t),this}receiveKey(e){return this.keysKnown.add(e),new i((t=>{queueMicrotask((()=>{this.theChain.receiving(new i((i=>{this.keysFilled.add(e);const s={...i,[e]:t};this.theChain.receive(s),this.isChainFilled()&&this.filledChainPool.receive(s)})))}))}))}isChainFilled(){return this.keysFilled.size>0&&this.keysFilled.size===this.keysKnown.size}},e.GuestMiddle=a,e.GuestObject=b,e.GuestPool=h,e.GuestSync=class{constructor(e){this.theValue=e}receive(e){return this.theValue=e,this}value(){return this.theValue}},e.Patron=class{constructor(e){this.willBePatron=e}introduction(){return"patron"}receive(e,i){return t(e,this.willBePatron,i),this}},e.PatronOnce=class{constructor(e){this.baseGuest=e,y(this,"received",!1)}introduction(){return"patron"}receive(e,i){this.received||t(e,this.baseGuest,i);const s=i?.data;return s?.pool&&s.pool.remove(this),this}},e.PatronPool=o,e.Source=v,e.SourceEmpty=class{constructor(){g(this,"baseSource",new v(null))}receiving(e){return this.baseSource.receiving(new a(e,(i=>{null!==i&&t(i,e)}))),this}receive(e){return this.baseSource.receive(e),this}},e.give=t,e.removePatronFromPools=e=>{n.forEach((t=>{t.delete(e)}))}}({});
1
+ !function(t){"use strict";function e(t,e,s){"function"==typeof e?e(t,s):e.give(t,s)}class s{constructor(t){this.receiver=t}give(t,e){return this.receiver(t,e),this}}var i=Object.defineProperty,r=(t,e,s)=>((t,e,s)=>e in t?i(t,e,{enumerable:!0,configurable:!0,writable:!0,value:s}):t[e]=s)(t,"symbol"!=typeof e?e+"":e,s);const n=new Map;class o{constructor(t){this.initiator=t,r(this,"patrons",new Set),r(this,"give"),n.set(this,this.patrons);let e=null;const s=(t,e)=>{this.patrons.forEach((s=>{this.sendValueToGuest(t,s,e)}))};this.give=(t,i)=>{const r=()=>{r===e&&s(t,i)};return e=r,queueMicrotask(r),this}}add(t){return"function"!=typeof t&&t.introduction&&"patron"===t.introduction()&&this.patrons.add(t),this}remove(t){return this.patrons.delete(t),this}distribute(t,e){return this.add(e),this.sendValueToGuest(t,e,{}),this}sendValueToGuest(t,s,i){e(t,s,{...i,data:{...i?.data??{},initiator:this.initiator,pool:this}})}}var u=Object.defineProperty,h=(t,e,s)=>((t,e,s)=>e in t?u(t,e,{enumerable:!0,configurable:!0,writable:!0,value:s}):t[e]=s)(t,"symbol"!=typeof e?e+"":e,s);class a{constructor(t){h(this,"guests",new Set),h(this,"patronPool"),this.patronPool=new o(t)}give(t,e){return this.deliverToGuests(t,e),this.patronPool.give(t,e),this}add(t){return"function"!=typeof t&&t.introduction&&"guest"!==t.introduction()||this.guests.add(t),this.patronPool.add(t),this}remove(t){return this.guests.delete(t),this.patronPool.remove(t),this}distribute(t,e){return this.add(e),this.give(t),this}deliverToGuests(t,s){this.guests.forEach((i=>{e(t,i,s)})),this.guests.clear()}}class c{constructor(t,e){this.baseGuest=t,this.middleFn=e}introduction(){return"function"!=typeof this.baseGuest&&this.baseGuest.introduction?this.baseGuest.introduction():"guest"}give(t,e){return this.middleFn(t,e),this}}var l=Object.defineProperty,d=(t,e,s)=>((t,e,s)=>e in t?l(t,e,{enumerable:!0,configurable:!0,writable:!0,value:s}):t[e]=s)(t,e+"",s);class v{constructor(t){this.sourceDocument=t,d(this,"pool",new o(this))}give(t){return this.sourceDocument=t,this.pool.give(this.sourceDocument),this}value(t){return"function"==typeof t?this.pool.distribute(this.sourceDocument,new s(t)):this.pool.distribute(this.sourceDocument,t),this}}class b{constructor(t){this.baseGuest=t}give(t,e){let i=this.baseGuest;return"function"==typeof i&&(i=new s(i)),i.give(t,e),this}introduction(){return"function"!=typeof this.baseGuest&&this.baseGuest.introduction?this.baseGuest.introduction():"guest"}}var f=Object.defineProperty,g=(t,e,s)=>((t,e,s)=>e in t?f(t,e,{enumerable:!0,configurable:!0,writable:!0,value:s}):t[e]=s)(t,"symbol"!=typeof e?e+"":e,s);var p=Object.defineProperty,w=(t,e,s)=>((t,e,s)=>e in t?p(t,e,{enumerable:!0,configurable:!0,writable:!0,value:s}):t[e]=s)(t,e+"",s);var y=Object.defineProperty,G=(t,e,s)=>((t,e,s)=>e in t?y(t,e,{enumerable:!0,configurable:!0,writable:!0,value:s}):t[e]=s)(t,e+"",s);t.Factory=class{constructor(t,e={}){this.constructorFn=t,this.factories=e}create(...t){return new this.constructorFn(...t,this.factories)}},t.Guest=s,t.GuestAware=class{constructor(t){this.guestReceiver=t}value(t){return this.guestReceiver(t),t}},t.GuestCast=class{constructor(t,e){this.sourceGuest=t,this.targetGuest=e}introduction(){return"function"==typeof this.sourceGuest?"guest":this.sourceGuest.introduction?this.sourceGuest.introduction():"guest"}give(t,s){return e(t,this.targetGuest,s),this}},t.GuestChain=class{constructor(){g(this,"theChain"),g(this,"keysKnown",new Set),g(this,"keysFilled",new Set),g(this,"filledChainPool",new a(this)),this.theChain=new v({})}resultArray(t){const e=new b(t);return this.filledChainPool.add(new c(e,(t=>Object.values(t)))),this.isChainFilled()&&this.theChain.value(new s((t=>{this.filledChainPool.give(Object.values(t))}))),this}result(t){const e=new b(t);return this.isChainFilled()?(this.filledChainPool.add(e),this.theChain.value(new s((t=>{this.filledChainPool.give(t)})))):this.filledChainPool.add(e),this}receiveKey(t){return this.keysKnown.add(t),new s((e=>{queueMicrotask((()=>{this.theChain.value(new s((s=>{this.keysFilled.add(t);const i={...s,[t]:e};this.theChain.give(i),this.isChainFilled()&&this.filledChainPool.give(i)})))}))}))}isChainFilled(){return this.keysFilled.size>0&&this.keysFilled.size===this.keysKnown.size}},t.GuestMiddle=c,t.GuestObject=b,t.GuestPool=a,t.GuestSync=class{constructor(t){this.theValue=t}give(t){return this.theValue=t,this}value(){return this.theValue}},t.Patron=class{constructor(t){this.willBePatron=t}introduction(){return"patron"}give(t,s){return e(t,this.willBePatron,s),this}},t.PatronOnce=class{constructor(t){this.baseGuest=t,w(this,"received",!1)}introduction(){return"patron"}give(t,s){this.received||e(t,this.baseGuest,s);const i=s?.data;return i?.pool&&i.pool.remove(this),this}},t.PatronPool=o,t.Source=v,t.SourceEmpty=class{constructor(){G(this,"baseSource",new v(null))}value(t){return this.baseSource.value(new c(t,(s=>{null!==s&&e(s,t)}))),this}give(t){return this.baseSource.give(t),this}},t.give=e,t.removePatronFromPools=t=>{n.forEach((e=>{e.delete(t)}))}}({});
@@ -1,2 +1,2 @@
1
- class e{constructor(e){this.guestReceiver=e}receiving(e){return this.guestReceiver(e),e}}function t(e,t,i){"function"==typeof t?t(e,i):t.receive(e,i)}class i{constructor(e){this.receiver=e}receive(e,t){return this.receiver(e,t),this}}class s{constructor(e,t){this.sourceGuest=e,this.targetGuest=t}introduction(){return"function"==typeof this.sourceGuest?"guest":this.sourceGuest.introduction?this.sourceGuest.introduction():"guest"}receive(e,i){return t(e,this.targetGuest,i),this}}var r=Object.defineProperty,n=(e,t,i)=>((e,t,i)=>t in e?r(e,t,{enumerable:!0,configurable:!0,writable:!0,value:i}):e[t]=i)(e,"symbol"!=typeof t?t+"":t,i);const o=new Map,u=e=>{o.forEach((t=>{t.delete(e)}))};class c{constructor(e){this.initiator=e,n(this,"patrons",new Set),n(this,"receive"),o.set(this,this.patrons);let t=null;const i=(e,t)=>{this.patrons.forEach((i=>{this.sendValueToGuest(e,i,t)}))};this.receive=(e,s)=>{const r=()=>{r===t&&i(e,s)};return t=r,queueMicrotask(r),this}}add(e){return"function"!=typeof e&&e.introduction&&"patron"===e.introduction()&&this.patrons.add(e),this}remove(e){return this.patrons.delete(e),this}distribute(e,t){return this.add(t),this.sendValueToGuest(e,t,{}),this}sendValueToGuest(e,i,s){t(e,i,{...s,data:{...s?.data??{},initiator:this.initiator,pool:this}})}}var h=Object.defineProperty,a=(e,t,i)=>((e,t,i)=>t in e?h(e,t,{enumerable:!0,configurable:!0,writable:!0,value:i}):e[t]=i)(e,"symbol"!=typeof t?t+"":t,i);class l{constructor(e){a(this,"guests",new Set),a(this,"patronPool"),this.patronPool=new c(e)}receive(e,t){return this.deliverToGuests(e,t),this.patronPool.receive(e,t),this}add(e){return"function"!=typeof e&&e.introduction&&"guest"!==e.introduction()||this.guests.add(e),this.patronPool.add(e),this}remove(e){return this.guests.delete(e),this.patronPool.remove(e),this}distribute(e,t){return this.add(t),this.receive(e),this}deliverToGuests(e,i){this.guests.forEach((s=>{t(e,s,i)})),this.guests.clear()}}class d{constructor(e,t){this.baseGuest=e,this.middleFn=t}introduction(){return"function"!=typeof this.baseGuest&&this.baseGuest.introduction?this.baseGuest.introduction():"guest"}receive(e,t){return this.middleFn(e,t),this}}var v=Object.defineProperty,b=(e,t,i)=>((e,t,i)=>t in e?v(e,t,{enumerable:!0,configurable:!0,writable:!0,value:i}):e[t]=i)(e,t+"",i);class f{constructor(e){this.sourceDocument=e,b(this,"pool",new c(this))}receive(e){return this.sourceDocument=e,this.pool.receive(this.sourceDocument),this}receiving(e){return"function"==typeof e?this.pool.distribute(this.sourceDocument,new i(e)):this.pool.distribute(this.sourceDocument,e),this}}class p{constructor(e){this.baseGuest=e}receive(e,t){let s=this.baseGuest;return"function"==typeof s&&(s=new i(s)),s.receive(e,t),this}introduction(){return"function"!=typeof this.baseGuest&&this.baseGuest.introduction?this.baseGuest.introduction():"guest"}}var w=Object.defineProperty,y=(e,t,i)=>((e,t,i)=>t in e?w(e,t,{enumerable:!0,configurable:!0,writable:!0,value:i}):e[t]=i)(e,"symbol"!=typeof t?t+"":t,i);class g{constructor(){y(this,"theChain"),y(this,"keysKnown",new Set),y(this,"keysFilled",new Set),y(this,"filledChainPool",new l(this)),this.theChain=new f({})}resultArray(e){const t=new p(e);return this.filledChainPool.add(new d(t,(e=>Object.values(e)))),this.isChainFilled()&&this.theChain.receiving(new i((e=>{this.filledChainPool.receive(Object.values(e))}))),this}result(e){const t=new p(e);return this.isChainFilled()?(this.filledChainPool.add(t),this.theChain.receiving(new i((e=>{this.filledChainPool.receive(e)})))):this.filledChainPool.add(t),this}receiveKey(e){return this.keysKnown.add(e),new i((t=>{queueMicrotask((()=>{this.theChain.receiving(new i((i=>{this.keysFilled.add(e);const s={...i,[e]:t};this.theChain.receive(s),this.isChainFilled()&&this.filledChainPool.receive(s)})))}))}))}isChainFilled(){return this.keysFilled.size>0&&this.keysFilled.size===this.keysKnown.size}}class G{constructor(e){this.theValue=e}receive(e){return this.theValue=e,this}value(){return this.theValue}}class m{constructor(e){this.willBePatron=e}introduction(){return"patron"}receive(e,i){return t(e,this.willBePatron,i),this}}var P=Object.defineProperty,C=(e,t,i)=>((e,t,i)=>t in e?P(e,t,{enumerable:!0,configurable:!0,writable:!0,value:i}):e[t]=i)(e,t+"",i);class F{constructor(e){this.baseGuest=e,C(this,"received",!1)}introduction(){return"patron"}receive(e,i){this.received||t(e,this.baseGuest,i);const s=i?.data;return s?.pool&&s.pool.remove(this),this}}var k=Object.defineProperty,j=(e,t,i)=>((e,t,i)=>t in e?k(e,t,{enumerable:!0,configurable:!0,writable:!0,value:i}):e[t]=i)(e,t+"",i);class O{constructor(){j(this,"baseSource",new f(null))}receiving(e){return this.baseSource.receiving(new d(e,(i=>{null!==i&&t(i,e)}))),this}receive(e){return this.baseSource.receive(e),this}}class S{constructor(e,t={}){this.constructorFn=e,this.factories=t}create(...e){return new this.constructorFn(...e,this.factories)}}export{S as Factory,i as Guest,e as GuestAware,s as GuestCast,g as GuestChain,d as GuestMiddle,p as GuestObject,l as GuestPool,G as GuestSync,m as Patron,F as PatronOnce,c as PatronPool,f as Source,O as SourceEmpty,t as give,u as removePatronFromPools};
1
+ class t{constructor(t){this.guestReceiver=t}value(t){return this.guestReceiver(t),t}}function e(t,e,i){"function"==typeof e?e(t,i):e.give(t,i)}class i{constructor(t){this.receiver=t}give(t,e){return this.receiver(t,e),this}}class s{constructor(t,e){this.sourceGuest=t,this.targetGuest=e}introduction(){return"function"==typeof this.sourceGuest?"guest":this.sourceGuest.introduction?this.sourceGuest.introduction():"guest"}give(t,i){return e(t,this.targetGuest,i),this}}var r=Object.defineProperty,n=(t,e,i)=>((t,e,i)=>e in t?r(t,e,{enumerable:!0,configurable:!0,writable:!0,value:i}):t[e]=i)(t,"symbol"!=typeof e?e+"":e,i);const o=new Map,u=t=>{o.forEach((e=>{e.delete(t)}))};class h{constructor(t){this.initiator=t,n(this,"patrons",new Set),n(this,"give"),o.set(this,this.patrons);let e=null;const i=(t,e)=>{this.patrons.forEach((i=>{this.sendValueToGuest(t,i,e)}))};this.give=(t,s)=>{const r=()=>{r===e&&i(t,s)};return e=r,queueMicrotask(r),this}}add(t){return"function"!=typeof t&&t.introduction&&"patron"===t.introduction()&&this.patrons.add(t),this}remove(t){return this.patrons.delete(t),this}distribute(t,e){return this.add(e),this.sendValueToGuest(t,e,{}),this}sendValueToGuest(t,i,s){e(t,i,{...s,data:{...s?.data??{},initiator:this.initiator,pool:this}})}}var a=Object.defineProperty,l=(t,e,i)=>((t,e,i)=>e in t?a(t,e,{enumerable:!0,configurable:!0,writable:!0,value:i}):t[e]=i)(t,"symbol"!=typeof e?e+"":e,i);class c{constructor(t){l(this,"guests",new Set),l(this,"patronPool"),this.patronPool=new h(t)}give(t,e){return this.deliverToGuests(t,e),this.patronPool.give(t,e),this}add(t){return"function"!=typeof t&&t.introduction&&"guest"!==t.introduction()||this.guests.add(t),this.patronPool.add(t),this}remove(t){return this.guests.delete(t),this.patronPool.remove(t),this}distribute(t,e){return this.add(e),this.give(t),this}deliverToGuests(t,i){this.guests.forEach((s=>{e(t,s,i)})),this.guests.clear()}}class d{constructor(t,e){this.baseGuest=t,this.middleFn=e}introduction(){return"function"!=typeof this.baseGuest&&this.baseGuest.introduction?this.baseGuest.introduction():"guest"}give(t,e){return this.middleFn(t,e),this}}var v=Object.defineProperty,b=(t,e,i)=>((t,e,i)=>e in t?v(t,e,{enumerable:!0,configurable:!0,writable:!0,value:i}):t[e]=i)(t,e+"",i);class f{constructor(t){this.sourceDocument=t,b(this,"pool",new h(this))}give(t){return this.sourceDocument=t,this.pool.give(this.sourceDocument),this}value(t){return"function"==typeof t?this.pool.distribute(this.sourceDocument,new i(t)):this.pool.distribute(this.sourceDocument,t),this}}class g{constructor(t){this.baseGuest=t}give(t,e){let s=this.baseGuest;return"function"==typeof s&&(s=new i(s)),s.give(t,e),this}introduction(){return"function"!=typeof this.baseGuest&&this.baseGuest.introduction?this.baseGuest.introduction():"guest"}}var p=Object.defineProperty,w=(t,e,i)=>((t,e,i)=>e in t?p(t,e,{enumerable:!0,configurable:!0,writable:!0,value:i}):t[e]=i)(t,"symbol"!=typeof e?e+"":e,i);class y{constructor(){w(this,"theChain"),w(this,"keysKnown",new Set),w(this,"keysFilled",new Set),w(this,"filledChainPool",new c(this)),this.theChain=new f({})}resultArray(t){const e=new g(t);return this.filledChainPool.add(new d(e,(t=>Object.values(t)))),this.isChainFilled()&&this.theChain.value(new i((t=>{this.filledChainPool.give(Object.values(t))}))),this}result(t){const e=new g(t);return this.isChainFilled()?(this.filledChainPool.add(e),this.theChain.value(new i((t=>{this.filledChainPool.give(t)})))):this.filledChainPool.add(e),this}receiveKey(t){return this.keysKnown.add(t),new i((e=>{queueMicrotask((()=>{this.theChain.value(new i((i=>{this.keysFilled.add(t);const s={...i,[t]:e};this.theChain.give(s),this.isChainFilled()&&this.filledChainPool.give(s)})))}))}))}isChainFilled(){return this.keysFilled.size>0&&this.keysFilled.size===this.keysKnown.size}}class G{constructor(t){this.theValue=t}give(t){return this.theValue=t,this}value(){return this.theValue}}class m{constructor(t){this.willBePatron=t}introduction(){return"patron"}give(t,i){return e(t,this.willBePatron,i),this}}var P=Object.defineProperty,C=(t,e,i)=>((t,e,i)=>e in t?P(t,e,{enumerable:!0,configurable:!0,writable:!0,value:i}):t[e]=i)(t,e+"",i);class F{constructor(t){this.baseGuest=t,C(this,"received",!1)}introduction(){return"patron"}give(t,i){this.received||e(t,this.baseGuest,i);const s=i?.data;return s?.pool&&s.pool.remove(this),this}}var k=Object.defineProperty,j=(t,e,i)=>((t,e,i)=>e in t?k(t,e,{enumerable:!0,configurable:!0,writable:!0,value:i}):t[e]=i)(t,e+"",i);class O{constructor(){j(this,"baseSource",new f(null))}value(t){return this.baseSource.value(new d(t,(i=>{null!==i&&e(i,t)}))),this}give(t){return this.baseSource.give(t),this}}class S{constructor(t,e={}){this.constructorFn=t,this.factories=e}create(...t){return new this.constructorFn(...t,this.factories)}}export{S as Factory,i as Guest,t as GuestAware,s as GuestCast,y as GuestChain,d as GuestMiddle,g as GuestObject,c as GuestPool,G as GuestSync,m as Patron,F as PatronOnce,h as PatronPool,f as Source,O as SourceEmpty,e as give,u as removePatronFromPools};
2
2
  //# sourceMappingURL=patron.min.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"patron.min.mjs","sources":["../src/Guest/GuestAware.ts","../src/Guest/Guest.ts","../src/Guest/GuestCast.ts","../src/Patron/PatronPool.ts","../src/Guest/GuestPool.ts","../src/Guest/GuestMiddle.ts","../src/Source/Source.ts","../src/Guest/GuestObject.ts","../src/Guest/GuestChain.ts","../src/Guest/GuestSync.ts","../src/Patron/Patron.ts","../src/Patron/PatronOnce.ts","../src/Source/SourceEmpty.ts","../src/Factory/Factory.ts"],"sourcesContent":["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","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 { 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 {\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 { 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, GuestType, ReceiveOptions } from \"./Guest\";\n\nexport class GuestMiddle<T> implements GuestObjectType<T> {\n public constructor(\n private baseGuest: GuestType<unknown>,\n private middleFn: (value: T, options?: ReceiveOptions) => void,\n ) {}\n\n introduction() {\n if (typeof this.baseGuest === \"function\" || !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 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 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, GuestType, ReceiveOptions } from \"./Guest\";\n\nexport class GuestObject<T> implements GuestObjectType<T> {\n public constructor(private baseGuest: GuestType<T>) {}\n\n public receive(value: T, options?: ReceiveOptions): this {\n let guest = this.baseGuest;\n if (typeof guest === \"function\") {\n guest = new Guest(guest);\n }\n guest.receive(value, options);\n return this;\n }\n\n public introduction() {\n if (typeof this.baseGuest === \"function\" || !this.baseGuest.introduction) {\n return \"guest\";\n }\n\n return this.baseGuest.introduction();\n }\n}\n","import { Guest, GuestObjectType, GuestType } from \"./Guest\";\nimport { GuestPool } from \"./GuestPool\";\nimport { GuestMiddle } from \"./GuestMiddle\";\nimport { Source } from \"../Source/Source\";\nimport { GuestObject } from \"./GuestObject\";\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: Source<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 Source<Record<string, unknown>>({});\n }\n\n public resultArray(guest: GuestType<T>) {\n const guestObject = new GuestObject(guest);\n this.filledChainPool.add(\n new GuestMiddle(guestObject, (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: GuestType<T>) {\n const guestObject = new GuestObject(guest);\n if (this.isChainFilled()) {\n this.filledChainPool.add(guestObject);\n this.theChain.receiving(\n new Guest((chain) => {\n this.filledChainPool.receive(chain);\n }),\n );\n } else {\n this.filledChainPool.add(guestObject);\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, GuestType } from \"./../Guest/Guest\";\nimport { GuestMiddle } from \"./../Guest/GuestMiddle\";\nimport { Source, SourceType } from \"./Source\";\n\nexport class SourceEmpty<T> implements SourceType<T> {\n private baseSource = new Source<T | null>(null);\n\n public receiving(guest: GuestType<T>) {\n this.baseSource.receiving(\n new GuestMiddle(guest as GuestType, (value) => {\n if (value !== null) {\n give(value, guest);\n }\n }),\n );\n return this;\n }\n\n public receive(value: T): this {\n this.baseSource.receive(value);\n return this;\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(\n private constructorFn: Prototyped<T>,\n private factories: Record<string, unknown> = {},\n ) { }\n\n public create<R extends unknown[], CT = null>(...args: R): CT extends null ? T : CT {\n return new (this.constructorFn as Constructable<T>)(...args, this.factories) as CT extends null ? T : CT;\n }\n}\n"],"names":["GuestAware","constructor","guestReceiver","this","receiving","guest","give","data","options","receive","Guest","receiver","value","GuestCast","sourceGuest","targetGuest","introduction","poolSets","Map","removePatronFromPools","patron","forEach","pool","delete","PatronPool","initiator","__publicField","Set","set","patrons","lastMicrotask","doReceive","target","sendValueToGuest","currentMicroTask","queueMicrotask","add","shouldBePatron","remove","distribute","possiblePatron","GuestPool","patronPool","deliverToGuests","guests","clear","GuestMiddle","baseGuest","middleFn","Source","sourceDocument","GuestObject","GuestChain","theChain","resultArray","guestObject","filledChainPool","Object","values","isChainFilled","chain","result","receiveKey","key","keysKnown","keysFilled","lastChain","size","GuestSync","theValue","Patron","willBePatron","PatronOnce","received","SourceEmpty","baseSource","Factory","constructorFn","factories","create","args"],"mappings":"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"}
1
+ {"version":3,"file":"patron.min.mjs","sources":["../src/Guest/GuestAware.ts","../src/Guest/Guest.ts","../src/Guest/GuestCast.ts","../src/Patron/PatronPool.ts","../src/Guest/GuestPool.ts","../src/Guest/GuestMiddle.ts","../src/Source/Source.ts","../src/Guest/GuestObject.ts","../src/Guest/GuestChain.ts","../src/Guest/GuestSync.ts","../src/Patron/Patron.ts","../src/Patron/PatronOnce.ts","../src/Source/SourceEmpty.ts","../src/Factory/Factory.ts"],"sourcesContent":["import { GuestType } from \"./Guest\";\n\nexport interface GuestAwareType<T = unknown> {\n value(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 value(guest: GuestType<T>): GuestType<T> {\n this.guestReceiver(guest);\n return guest;\n }\n}\n","type GuestIntroduction = \"guest\" | \"patron\";\n\nexport interface GiveOptions {\n data?: unknown;\n}\n\nexport type GuestExecutorType<T = unknown> = (\n value: T,\n options?: GiveOptions,\n) => void;\n\nexport interface GuestObjectType<T = unknown> {\n give(value: T, options?: GiveOptions): this;\n introduction?(): GuestIntroduction;\n}\n\nexport type GuestType<T = unknown> = GuestExecutorType<T> | GuestObjectType<T>;\n\nexport function give<T>(data: T, guest: GuestType<T>, options?: GiveOptions) {\n if (typeof guest === \"function\") {\n guest(data, options);\n } else {\n guest.give(data, options);\n }\n}\n\nexport class Guest<T> implements GuestObjectType<T> {\n public constructor(private receiver: GuestExecutorType<T>) {}\n\n public give(value: T, options?: GiveOptions) {\n this.receiver(value, options);\n return this;\n }\n}\n","import { give, GuestObjectType, GuestType, GiveOptions } 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 public introduction() {\n if (typeof this.sourceGuest === \"function\") {\n return \"guest\";\n }\n if (!this.sourceGuest.introduction) {\n return \"guest\";\n }\n return this.sourceGuest.introduction();\n }\n\n public give(value: T, options?: GiveOptions): this {\n give(value, this.targetGuest, options);\n return this;\n }\n}\n","import { give, GuestObjectType, GuestType, GiveOptions } from \"../Guest/Guest\";\n\nconst poolSets = new Map<PoolType, Set<GuestObjectType>>();\n\n// remove patron from all pools\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 give: (value: T, options?: GiveOptions) => this;\n\n public constructor(private initiator: unknown) {\n poolSets.set(this, this.patrons);\n let lastMicrotask: (() => void) | null = null;\n const doReceive = (value: T, options?: GiveOptions) => {\n this.patrons.forEach((target) => {\n this.sendValueToGuest(value, target, options);\n });\n };\n this.give = (value: T, options?: GiveOptions) => {\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?: GiveOptions,\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 { PatronPool } from \"../Patron/PatronPool\";\nimport { PoolType } from \"../Patron/PatronPool\";\nimport { give, GuestObjectType, GuestType, GiveOptions } 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 give(value: T, options?: GiveOptions): this {\n this.deliverToGuests(value, options);\n this.patronPool.give(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.give(receiving);\n return this;\n }\n\n private deliverToGuests(value: T, options?: GiveOptions) {\n this.guests.forEach((target) => {\n give(value, target, options);\n });\n this.guests.clear();\n }\n}\n","import { GuestObjectType, GuestType, GiveOptions } from \"./Guest\";\n\nexport class GuestMiddle<T> implements GuestObjectType<T> {\n public constructor(\n private baseGuest: GuestType<unknown>,\n private middleFn: (value: T, options?: GiveOptions) => void,\n ) {}\n\n public introduction() {\n if (typeof this.baseGuest === \"function\" || !this.baseGuest.introduction) {\n return \"guest\";\n }\n return this.baseGuest.introduction();\n }\n\n public give(value: T, options?: GiveOptions): 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 Source<T> implements SourceType<T> {\n private pool = new PatronPool(this);\n\n public constructor(private sourceDocument: T) {}\n\n public give(value: T): this {\n this.sourceDocument = value;\n this.pool.give(this.sourceDocument);\n return this;\n }\n\n public value(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, GuestType, GiveOptions } from \"./Guest\";\n\nexport class GuestObject<T> implements GuestObjectType<T> {\n public constructor(private baseGuest: GuestType<T>) {}\n\n public give(value: T, options?: GiveOptions): this {\n let guest = this.baseGuest;\n if (typeof guest === \"function\") {\n guest = new Guest(guest);\n }\n guest.give(value, options);\n return this;\n }\n\n public introduction() {\n if (typeof this.baseGuest === \"function\" || !this.baseGuest.introduction) {\n return \"guest\";\n }\n return this.baseGuest.introduction();\n }\n}\n","import { Guest, GuestObjectType, GuestType } from \"./Guest\";\nimport { GuestPool } from \"./GuestPool\";\nimport { GuestMiddle } from \"./GuestMiddle\";\nimport { Source } from \"../Source/Source\";\nimport { GuestObject } from \"./GuestObject\";\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: Source<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 Source<Record<string, unknown>>({});\n }\n\n public resultArray(guest: GuestType<T>) {\n const guestObject = new GuestObject(guest);\n this.filledChainPool.add(\n new GuestMiddle(guestObject, (value: Record<string, unknown>) =>\n Object.values(value),\n ),\n );\n if (this.isChainFilled()) {\n this.theChain.value(\n new Guest((chain: Record<string, unknown>) => {\n this.filledChainPool.give(Object.values(chain));\n }),\n );\n }\n return this;\n }\n\n public result(guest: GuestType<T>) {\n const guestObject = new GuestObject(guest);\n if (this.isChainFilled()) {\n this.filledChainPool.add(guestObject);\n this.theChain.value(\n new Guest((chain) => {\n this.filledChainPool.give(chain);\n }),\n );\n } else {\n this.filledChainPool.add(guestObject);\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.value(\n new Guest((chain: Record<string, unknown>) => {\n this.keysFilled.add(key);\n const lastChain = {\n ...chain,\n [key]: value,\n };\n this.theChain.give(lastChain);\n if (this.isChainFilled()) {\n this.filledChainPool.give(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 give(value: T): this {\n this.theValue = value;\n return this;\n }\n\n public value() {\n return this.theValue;\n }\n}\n","import { give, GuestObjectType, GuestType, GiveOptions } from \"../Guest/Guest\";\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 give(value: T, options?: GiveOptions): this {\n give(value, this.willBePatron, options);\n return this;\n }\n}\n","import { PoolType } from \"./PatronPool\";\nimport { give, GuestObjectType, GuestType, GiveOptions } 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 give(value: T, options?: GiveOptions): this {\n if (!this.received) {\n give(value, this.baseGuest, options);\n }\n const data = options?.data as PoolAware;\n if (data?.pool) {\n data.pool.remove(this);\n }\n return this;\n }\n}\n","import { give, GuestType } from \"./../Guest/Guest\";\nimport { GuestMiddle } from \"./../Guest/GuestMiddle\";\nimport { Source, SourceType } from \"./Source\";\n\nexport class SourceEmpty<T> implements SourceType<T> {\n private baseSource = new Source<T | null>(null);\n\n public value(guest: GuestType<T>) {\n this.baseSource.value(\n new GuestMiddle(guest as GuestType, (value) => {\n if (value !== null) {\n give(value, guest);\n }\n }),\n );\n return this;\n }\n\n public give(value: T): this {\n this.baseSource.give(value);\n return this;\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(\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"],"names":["GuestAware","constructor","guestReceiver","this","value","guest","give","data","options","Guest","receiver","GuestCast","sourceGuest","targetGuest","introduction","poolSets","Map","removePatronFromPools","patron","forEach","pool","delete","PatronPool","initiator","__publicField","Set","set","patrons","lastMicrotask","doReceive","target","sendValueToGuest","currentMicroTask","queueMicrotask","add","shouldBePatron","remove","distribute","receiving","possiblePatron","GuestPool","patronPool","deliverToGuests","guests","clear","GuestMiddle","baseGuest","middleFn","Source","sourceDocument","GuestObject","GuestChain","theChain","resultArray","guestObject","filledChainPool","Object","values","isChainFilled","chain","result","receiveKey","key","keysKnown","keysFilled","lastChain","size","GuestSync","theValue","Patron","willBePatron","PatronOnce","received","SourceEmpty","baseSource","Factory","constructorFn","factories","create","args"],"mappings":"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"}