patron-oop 1.12.0 → 1.14.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/.vscode/settings.json +4 -0
- package/CHANGELOG.md +14 -0
- package/dist/patron.d.ts +10 -1
- package/dist/patron.js +82 -76
- package/dist/patron.js.map +1 -1
- package/dist/patron.min.js +1 -1
- package/dist/patron.mjs +82 -77
- package/dist/patron.mjs.map +1 -1
- package/package.json +1 -1
- package/src/Source/SourceEmpty.test.ts +20 -0
- package/src/Source/SourceEmpty.ts +23 -0
- package/src/index.ts +1 -36
    
        package/CHANGELOG.md
    CHANGED
    
    | @@ -2,6 +2,20 @@ | |
| 2 2 |  | 
| 3 3 | 
             
            All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.
         | 
| 4 4 |  | 
| 5 | 
            +
            ## [1.14.0](https://github.com/kosukhin/patron/compare/v1.13.0...v1.14.0) (2024-11-01)
         | 
| 6 | 
            +
             | 
| 7 | 
            +
             | 
| 8 | 
            +
            ### Features
         | 
| 9 | 
            +
             | 
| 10 | 
            +
            * **main:** новый класс SourceEmpty ([184232c](https://github.com/kosukhin/patron/commit/184232cf30a88c7902b2d6be5d6f6f378905e57f))
         | 
| 11 | 
            +
             | 
| 12 | 
            +
            ## [1.13.0](https://github.com/kosukhin/patron/compare/v1.12.0...v1.13.0) (2024-10-30)
         | 
| 13 | 
            +
             | 
| 14 | 
            +
             | 
| 15 | 
            +
            ### Features
         | 
| 16 | 
            +
             | 
| 17 | 
            +
            * **main:** исправить импорт factory ([6637a59](https://github.com/kosukhin/patron/commit/6637a59fe54e2a15c96ee1f77fdee394528f1efb))
         | 
| 18 | 
            +
             | 
| 5 19 | 
             
            ## [1.12.0](https://github.com/kosukhin/patron/compare/v1.11.0...v1.12.0) (2024-10-30)
         | 
| 6 20 |  | 
| 7 21 |  | 
    
        package/dist/patron.d.ts
    CHANGED
    
    | @@ -1,3 +1,6 @@ | |
| 1 | 
            +
            import { GuestType as GuestType$1 } from 'src/Guest/Guest';
         | 
| 2 | 
            +
            import { SourceType as SourceType$1 } from 'src/Source/Source';
         | 
| 3 | 
            +
             | 
| 1 4 | 
             
            type GuestIntroduction = "guest" | "patron";
         | 
| 2 5 | 
             
            interface ReceiveOptions {
         | 
| 3 6 | 
             
                data?: unknown;
         | 
| @@ -125,6 +128,12 @@ declare class Source<T> implements SourceType<T> { | |
| 125 128 | 
             
                receiving(guest: GuestType<T>): this;
         | 
| 126 129 | 
             
            }
         | 
| 127 130 |  | 
| 131 | 
            +
            declare class SourceEmpty<T> implements SourceType$1<T> {
         | 
| 132 | 
            +
                private baseSource;
         | 
| 133 | 
            +
                receiving(guest: GuestType$1<T>): this;
         | 
| 134 | 
            +
                receive(value: T): this;
         | 
| 135 | 
            +
            }
         | 
| 136 | 
            +
             | 
| 128 137 | 
             
            declare class GuestObject<T> implements GuestObjectType<T> {
         | 
| 129 138 | 
             
                private baseGuest;
         | 
| 130 139 | 
             
                constructor(baseGuest: GuestType<T>);
         | 
| @@ -145,4 +154,4 @@ declare class Factory<T> implements FactoryType<T> { | |
| 145 154 | 
             
                create<R extends unknown[], CT = null>(...args: R): CT extends null ? T : CT;
         | 
| 146 155 | 
             
            }
         | 
| 147 156 |  | 
| 148 | 
            -
            export { type ChainType, Factory, type FactoryType, Guest, GuestAware, type GuestAwareType, GuestCast, GuestChain, type GuestExecutorType, GuestMiddle, GuestObject, type GuestObjectType, GuestPool, GuestSync, type GuestType, type GuestValueType, Patron, PatronOnce, PatronPool, type PoolType, type ReceiveOptions, Source, type SourceType, give, removePatronFromPools };
         | 
| 157 | 
            +
            export { type ChainType, Factory, type FactoryType, Guest, GuestAware, type GuestAwareType, GuestCast, GuestChain, type GuestExecutorType, GuestMiddle, GuestObject, type GuestObjectType, GuestPool, GuestSync, type GuestType, type GuestValueType, Patron, PatronOnce, PatronPool, type PoolType, type ReceiveOptions, Source, SourceEmpty, type SourceType, give, removePatronFromPools };
         | 
    
        package/dist/patron.js
    CHANGED
    
    | @@ -1,6 +1,18 @@ | |
| 1 1 | 
             
            'use strict';
         | 
| 2 2 |  | 
| 3 | 
            -
            var  | 
| 3 | 
            +
            var Guest$1 = require('src/Guest/Guest');
         | 
| 4 | 
            +
            var GuestMiddle$1 = require('src/Guest/GuestMiddle');
         | 
| 5 | 
            +
            var Source$1 = require('src/Source/Source');
         | 
| 6 | 
            +
             | 
| 7 | 
            +
            class GuestAware {
         | 
| 8 | 
            +
              constructor(guestReceiver) {
         | 
| 9 | 
            +
                this.guestReceiver = guestReceiver;
         | 
| 10 | 
            +
              }
         | 
| 11 | 
            +
              receiving(guest) {
         | 
| 12 | 
            +
                this.guestReceiver(guest);
         | 
| 13 | 
            +
                return guest;
         | 
| 14 | 
            +
              }
         | 
| 15 | 
            +
            }
         | 
| 4 16 |  | 
| 5 17 | 
             
            function give(data, guest, options) {
         | 
| 6 18 | 
             
              if (typeof guest === "function") {
         | 
| @@ -19,9 +31,29 @@ class Guest { | |
| 19 31 | 
             
              }
         | 
| 20 32 | 
             
            }
         | 
| 21 33 |  | 
| 22 | 
            -
             | 
| 23 | 
            -
             | 
| 24 | 
            -
             | 
| 34 | 
            +
            class GuestCast {
         | 
| 35 | 
            +
              constructor(sourceGuest, targetGuest) {
         | 
| 36 | 
            +
                this.sourceGuest = sourceGuest;
         | 
| 37 | 
            +
                this.targetGuest = targetGuest;
         | 
| 38 | 
            +
              }
         | 
| 39 | 
            +
              introduction() {
         | 
| 40 | 
            +
                if (typeof this.sourceGuest === "function") {
         | 
| 41 | 
            +
                  return "guest";
         | 
| 42 | 
            +
                }
         | 
| 43 | 
            +
                if (!this.sourceGuest.introduction) {
         | 
| 44 | 
            +
                  return "guest";
         | 
| 45 | 
            +
                }
         | 
| 46 | 
            +
                return this.sourceGuest.introduction();
         | 
| 47 | 
            +
              }
         | 
| 48 | 
            +
              receive(value, options) {
         | 
| 49 | 
            +
                give(value, this.targetGuest, options);
         | 
| 50 | 
            +
                return this;
         | 
| 51 | 
            +
              }
         | 
| 52 | 
            +
            }
         | 
| 53 | 
            +
             | 
| 54 | 
            +
            var __defProp$5 = Object.defineProperty;
         | 
| 55 | 
            +
            var __defNormalProp$5 = (obj, key, value) => key in obj ? __defProp$5(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
         | 
| 56 | 
            +
            var __publicField$5 = (obj, key, value) => __defNormalProp$5(obj, typeof key !== "symbol" ? key + "" : key, value);
         | 
| 25 57 | 
             
            const poolSets = /* @__PURE__ */ new Map();
         | 
| 26 58 | 
             
            const removePatronFromPools = (patron) => {
         | 
| 27 59 | 
             
              poolSets.forEach((pool) => {
         | 
| @@ -31,8 +63,8 @@ const removePatronFromPools = (patron) => { | |
| 31 63 | 
             
            class PatronPool {
         | 
| 32 64 | 
             
              constructor(initiator) {
         | 
| 33 65 | 
             
                this.initiator = initiator;
         | 
| 34 | 
            -
                __publicField$ | 
| 35 | 
            -
                __publicField$ | 
| 66 | 
            +
                __publicField$5(this, "patrons", /* @__PURE__ */ new Set());
         | 
| 67 | 
            +
                __publicField$5(this, "receive");
         | 
| 36 68 | 
             
                poolSets.set(this, this.patrons);
         | 
| 37 69 | 
             
                let lastMicrotask = null;
         | 
| 38 70 | 
             
                const doReceive = (value, options) => {
         | 
| @@ -78,43 +110,13 @@ class PatronPool { | |
| 78 110 | 
             
              }
         | 
| 79 111 | 
             
            }
         | 
| 80 112 |  | 
| 81 | 
            -
             | 
| 82 | 
            -
             | 
| 83 | 
            -
             | 
| 84 | 
            -
              }
         | 
| 85 | 
            -
              receiving(guest) {
         | 
| 86 | 
            -
                this.guestReceiver(guest);
         | 
| 87 | 
            -
                return guest;
         | 
| 88 | 
            -
              }
         | 
| 89 | 
            -
            }
         | 
| 90 | 
            -
             | 
| 91 | 
            -
            class GuestCast {
         | 
| 92 | 
            -
              constructor(sourceGuest, targetGuest) {
         | 
| 93 | 
            -
                this.sourceGuest = sourceGuest;
         | 
| 94 | 
            -
                this.targetGuest = targetGuest;
         | 
| 95 | 
            -
              }
         | 
| 96 | 
            -
              introduction() {
         | 
| 97 | 
            -
                if (typeof this.sourceGuest === "function") {
         | 
| 98 | 
            -
                  return "guest";
         | 
| 99 | 
            -
                }
         | 
| 100 | 
            -
                if (!this.sourceGuest.introduction) {
         | 
| 101 | 
            -
                  return "guest";
         | 
| 102 | 
            -
                }
         | 
| 103 | 
            -
                return this.sourceGuest.introduction();
         | 
| 104 | 
            -
              }
         | 
| 105 | 
            -
              receive(value, options) {
         | 
| 106 | 
            -
                give(value, this.targetGuest, options);
         | 
| 107 | 
            -
                return this;
         | 
| 108 | 
            -
              }
         | 
| 109 | 
            -
            }
         | 
| 110 | 
            -
             | 
| 111 | 
            -
            var __defProp$3 = Object.defineProperty;
         | 
| 112 | 
            -
            var __defNormalProp$3 = (obj, key, value) => key in obj ? __defProp$3(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
         | 
| 113 | 
            -
            var __publicField$3 = (obj, key, value) => __defNormalProp$3(obj, typeof key !== "symbol" ? key + "" : key, value);
         | 
| 113 | 
            +
            var __defProp$4 = Object.defineProperty;
         | 
| 114 | 
            +
            var __defNormalProp$4 = (obj, key, value) => key in obj ? __defProp$4(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
         | 
| 115 | 
            +
            var __publicField$4 = (obj, key, value) => __defNormalProp$4(obj, typeof key !== "symbol" ? key + "" : key, value);
         | 
| 114 116 | 
             
            class GuestPool {
         | 
| 115 117 | 
             
              constructor(initiator) {
         | 
| 116 | 
            -
                __publicField$ | 
| 117 | 
            -
                __publicField$ | 
| 118 | 
            +
                __publicField$4(this, "guests", /* @__PURE__ */ new Set());
         | 
| 119 | 
            +
                __publicField$4(this, "patronPool");
         | 
| 118 120 | 
             
                this.patronPool = new PatronPool(initiator);
         | 
| 119 121 | 
             
              }
         | 
| 120 122 | 
             
              receive(value, options) {
         | 
| @@ -164,13 +166,13 @@ class GuestMiddle { | |
| 164 166 | 
             
              }
         | 
| 165 167 | 
             
            }
         | 
| 166 168 |  | 
| 167 | 
            -
            var __defProp$ | 
| 168 | 
            -
            var __defNormalProp$ | 
| 169 | 
            -
            var __publicField$ | 
| 169 | 
            +
            var __defProp$3 = Object.defineProperty;
         | 
| 170 | 
            +
            var __defNormalProp$3 = (obj, key, value) => key in obj ? __defProp$3(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
         | 
| 171 | 
            +
            var __publicField$3 = (obj, key, value) => __defNormalProp$3(obj, key + "" , value);
         | 
| 170 172 | 
             
            class Source {
         | 
| 171 173 | 
             
              constructor(sourceDocument) {
         | 
| 172 174 | 
             
                this.sourceDocument = sourceDocument;
         | 
| 173 | 
            -
                __publicField$ | 
| 175 | 
            +
                __publicField$3(this, "pool", new PatronPool(this));
         | 
| 174 176 | 
             
              }
         | 
| 175 177 | 
             
              receive(value) {
         | 
| 176 178 | 
             
                this.sourceDocument = value;
         | 
| @@ -207,15 +209,15 @@ class GuestObject { | |
| 207 209 | 
             
              }
         | 
| 208 210 | 
             
            }
         | 
| 209 211 |  | 
| 210 | 
            -
            var __defProp$ | 
| 211 | 
            -
            var __defNormalProp$ | 
| 212 | 
            -
            var __publicField$ | 
| 212 | 
            +
            var __defProp$2 = Object.defineProperty;
         | 
| 213 | 
            +
            var __defNormalProp$2 = (obj, key, value) => key in obj ? __defProp$2(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
         | 
| 214 | 
            +
            var __publicField$2 = (obj, key, value) => __defNormalProp$2(obj, typeof key !== "symbol" ? key + "" : key, value);
         | 
| 213 215 | 
             
            class GuestChain {
         | 
| 214 216 | 
             
              constructor() {
         | 
| 215 | 
            -
                __publicField$ | 
| 216 | 
            -
                __publicField$ | 
| 217 | 
            -
                __publicField$ | 
| 218 | 
            -
                __publicField$ | 
| 217 | 
            +
                __publicField$2(this, "theChain");
         | 
| 218 | 
            +
                __publicField$2(this, "keysKnown", /* @__PURE__ */ new Set());
         | 
| 219 | 
            +
                __publicField$2(this, "keysFilled", /* @__PURE__ */ new Set());
         | 
| 220 | 
            +
                __publicField$2(this, "filledChainPool", new GuestPool(this));
         | 
| 219 221 | 
             
                this.theChain = new Source({});
         | 
| 220 222 | 
             
              }
         | 
| 221 223 | 
             
              resultArray(guest) {
         | 
| @@ -300,13 +302,13 @@ class Patron { | |
| 300 302 | 
             
              }
         | 
| 301 303 | 
             
            }
         | 
| 302 304 |  | 
| 303 | 
            -
            var __defProp = Object.defineProperty;
         | 
| 304 | 
            -
            var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
         | 
| 305 | 
            -
            var __publicField = (obj, key, value) => __defNormalProp(obj, key + "" , value);
         | 
| 305 | 
            +
            var __defProp$1 = Object.defineProperty;
         | 
| 306 | 
            +
            var __defNormalProp$1 = (obj, key, value) => key in obj ? __defProp$1(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
         | 
| 307 | 
            +
            var __publicField$1 = (obj, key, value) => __defNormalProp$1(obj, key + "" , value);
         | 
| 306 308 | 
             
            class PatronOnce {
         | 
| 307 309 | 
             
              constructor(baseGuest) {
         | 
| 308 310 | 
             
                this.baseGuest = baseGuest;
         | 
| 309 | 
            -
                __publicField(this, "received", false);
         | 
| 311 | 
            +
                __publicField$1(this, "received", false);
         | 
| 310 312 | 
             
              }
         | 
| 311 313 | 
             
              introduction() {
         | 
| 312 314 | 
             
                return "patron";
         | 
| @@ -323,6 +325,29 @@ class PatronOnce { | |
| 323 325 | 
             
              }
         | 
| 324 326 | 
             
            }
         | 
| 325 327 |  | 
| 328 | 
            +
            var __defProp = Object.defineProperty;
         | 
| 329 | 
            +
            var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
         | 
| 330 | 
            +
            var __publicField = (obj, key, value) => __defNormalProp(obj, key + "" , value);
         | 
| 331 | 
            +
            class SourceEmpty {
         | 
| 332 | 
            +
              constructor() {
         | 
| 333 | 
            +
                __publicField(this, "baseSource", new Source$1.Source(null));
         | 
| 334 | 
            +
              }
         | 
| 335 | 
            +
              receiving(guest) {
         | 
| 336 | 
            +
                this.baseSource.receiving(
         | 
| 337 | 
            +
                  new GuestMiddle$1.GuestMiddle(guest, (value) => {
         | 
| 338 | 
            +
                    if (value !== null) {
         | 
| 339 | 
            +
                      Guest$1.give(value, guest);
         | 
| 340 | 
            +
                    }
         | 
| 341 | 
            +
                  })
         | 
| 342 | 
            +
                );
         | 
| 343 | 
            +
                return this;
         | 
| 344 | 
            +
              }
         | 
| 345 | 
            +
              receive(value) {
         | 
| 346 | 
            +
                this.baseSource.receive(value);
         | 
| 347 | 
            +
                return this;
         | 
| 348 | 
            +
              }
         | 
| 349 | 
            +
            }
         | 
| 350 | 
            +
             | 
| 326 351 | 
             
            class Factory {
         | 
| 327 352 | 
             
              constructor(constructorFn, factories = {}) {
         | 
| 328 353 | 
             
                this.constructorFn = constructorFn;
         | 
| @@ -333,26 +358,6 @@ class Factory { | |
| 333 358 | 
             
              }
         | 
| 334 359 | 
             
            }
         | 
| 335 360 |  | 
| 336 | 
            -
            if (globalThis) {
         | 
| 337 | 
            -
              globalThis["GUEST_LIBRARY"] = {
         | 
| 338 | 
            -
                give,
         | 
| 339 | 
            -
                removePatronFromPools,
         | 
| 340 | 
            -
                GuestAware,
         | 
| 341 | 
            -
                Guest,
         | 
| 342 | 
            -
                GuestCast,
         | 
| 343 | 
            -
                GuestChain,
         | 
| 344 | 
            -
                GuestMiddle,
         | 
| 345 | 
            -
                GuestPool,
         | 
| 346 | 
            -
                GuestSync,
         | 
| 347 | 
            -
                GuestObject,
         | 
| 348 | 
            -
                Patron,
         | 
| 349 | 
            -
                PatronOnce,
         | 
| 350 | 
            -
                PatronPool,
         | 
| 351 | 
            -
                Source,
         | 
| 352 | 
            -
                Factory: Factory$1.Factory
         | 
| 353 | 
            -
              };
         | 
| 354 | 
            -
            }
         | 
| 355 | 
            -
             | 
| 356 361 | 
             
            exports.Factory = Factory;
         | 
| 357 362 | 
             
            exports.Guest = Guest;
         | 
| 358 363 | 
             
            exports.GuestAware = GuestAware;
         | 
| @@ -366,6 +371,7 @@ exports.Patron = Patron; | |
| 366 371 | 
             
            exports.PatronOnce = PatronOnce;
         | 
| 367 372 | 
             
            exports.PatronPool = PatronPool;
         | 
| 368 373 | 
             
            exports.Source = Source;
         | 
| 374 | 
            +
            exports.SourceEmpty = SourceEmpty;
         | 
| 369 375 | 
             
            exports.give = give;
         | 
| 370 376 | 
             
            exports.removePatronFromPools = removePatronFromPools;
         | 
| 371 377 | 
             
            //# sourceMappingURL=patron.js.map
         | 
    
        package/dist/patron.js.map
    CHANGED
    
    | @@ -1 +1 @@ | |
| 1 | 
            -
            {"version":3,"file":"patron.js","sources":["../src/Guest/Guest.ts","../src/Patron/PatronPool.ts","../src/Guest/GuestAware.ts","../src/Guest/GuestCast.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/Factory/Factory.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, 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","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","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 { GuestMiddle } from \"./Guest/GuestMiddle\";\nimport { GuestPool } from \"./Guest/GuestPool\";\nimport { GuestSync } from \"./Guest/GuestSync\";\nimport { GuestObject } from \"./Guest/GuestObject\";\nimport { Patron } from \"./Patron/Patron\";\nimport { PatronOnce } from \"./Patron/PatronOnce\";\nimport { Source } from \"./Source/Source\";\nimport { Factory } from \"src/Factory/Factory\";\n\nexport * from \"./Guest/GuestAware\";\nexport * from \"./Guest/Guest\";\nexport * from \"./Guest/GuestCast\";\nexport * from \"./Guest/GuestChain\";\nexport * from \"./Guest/GuestMiddle\";\nexport * from \"./Guest/GuestPool\";\nexport * from \"./Guest/GuestSync\";\nexport * from \"./Patron/Patron\";\nexport * from \"./Patron/PatronOnce\";\nexport * from \"./Patron/PatronPool\";\nexport * from \"./Source/Source\";\nexport * from \"./Guest/GuestObject\";\nexport * from \"./Factory/Factory\";\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    GuestMiddle,\n    GuestPool,\n    GuestSync,\n    GuestObject,\n    Patron,\n    PatronOnce,\n    PatronPool,\n    Source,\n    Factory,\n  };\n}\n"],"names":["__publicField","Factory"],"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  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 \"src/Guest/Guest\";\nimport { GuestMiddle } from \"src/Guest/GuestMiddle\";\nimport { Source, SourceType } from \"src/Source/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","Source","GuestMiddle","give"],"mappings":";;;;;;AAMO,MAAM,UAAqD,CAAA;AAAA,EACzD,YAAoB,aAA8C,EAAA;AAA9C,IAAA,IAAA,CAAA,aAAA,GAAA,aAAA,CAAA;AAAA,GAA+C;AAAA,EAEnE,UAAU,KAAmC,EAAA;AAClD,IAAA,IAAA,CAAK,cAAc,KAAK,CAAA,CAAA;AACxB,IAAO,OAAA,KAAA,CAAA;AAAA,GACT;AACF;;ACKgB,SAAA,IAAA,CACd,IACA,EAAA,KAAA,EACA,OACA,EAAA;AACA,EAAI,IAAA,OAAO,UAAU,UAAY,EAAA;AAC/B,IAAA,KAAA,CAAM,MAAM,OAAO,CAAA,CAAA;AAAA,GACd,MAAA;AACL,IAAM,KAAA,CAAA,OAAA,CAAQ,MAAM,OAAO,CAAA,CAAA;AAAA,GAC7B;AACF,CAAA;AAEO,MAAM,KAAuC,CAAA;AAAA,EAC3C,YAAoB,QAAgC,EAAA;AAAhC,IAAA,IAAA,CAAA,QAAA,GAAA,QAAA,CAAA;AAAA,GAAiC;AAAA,EAErD,OAAA,CAAQ,OAAU,OAA0B,EAAA;AACjD,IAAK,IAAA,CAAA,QAAA,CAAS,OAAO,OAAO,CAAA,CAAA;AAC5B,IAAO,OAAA,IAAA,CAAA;AAAA,GACT;AACF;;ACnCO,MAAM,SAA2C,CAAA;AAAA,EAC/C,WAAA,CACG,aACA,WACR,EAAA;AAFQ,IAAA,IAAA,CAAA,WAAA,GAAA,WAAA,CAAA;AACA,IAAA,IAAA,CAAA,WAAA,GAAA,WAAA,CAAA;AAAA,GACP;AAAA,EAEH,YAAe,GAAA;AACb,IAAI,IAAA,OAAO,IAAK,CAAA,WAAA,KAAgB,UAAY,EAAA;AAC1C,MAAO,OAAA,OAAA,CAAA;AAAA,KACT;AAEA,IAAI,IAAA,CAAC,IAAK,CAAA,WAAA,CAAY,YAAc,EAAA;AAClC,MAAO,OAAA,OAAA,CAAA;AAAA,KACT;AACA,IAAO,OAAA,IAAA,CAAK,YAAY,YAAa,EAAA,CAAA;AAAA,GACvC;AAAA,EAEA,OAAA,CAAQ,OAAU,OAAgC,EAAA;AAChD,IAAK,IAAA,CAAA,KAAA,EAAO,IAAK,CAAA,WAAA,EAAa,OAAO,CAAA,CAAA;AACrC,IAAO,OAAA,IAAA,CAAA;AAAA,GACT;AACF;;;;;AChBA,MAAM,QAAA,uBAAe,GAAoC,EAAA,CAAA;AAK5C,MAAA,qBAAA,GAAwB,CAAC,MAA4B,KAAA;AAChE,EAAS,QAAA,CAAA,OAAA,CAAQ,CAAC,IAAS,KAAA;AACzB,IAAA,IAAA,CAAK,OAAO,MAAM,CAAA,CAAA;AAAA,GACnB,CAAA,CAAA;AACH,EAAA;AAQO,MAAM,UAAqC,CAAA;AAAA,EAKzC,YAAoB,SAAoB,EAAA;AAApB,IAAA,IAAA,CAAA,SAAA,GAAA,SAAA,CAAA;AAJ3B,IAAQA,eAAA,CAAA,IAAA,EAAA,SAAA,sBAAc,GAAwB,EAAA,CAAA,CAAA;AAE9C,IAAOA,eAAA,CAAA,IAAA,EAAA,SAAA,CAAA,CAAA;AAGL,IAAS,QAAA,CAAA,GAAA,CAAI,IAAM,EAAA,IAAA,CAAK,OAAO,CAAA,CAAA;AAE/B,IAAA,IAAI,aAAqC,GAAA,IAAA,CAAA;AACzC,IAAM,MAAA,SAAA,GAAY,CAAC,KAAA,EAAU,OAA6B,KAAA;AACxD,MAAK,IAAA,CAAA,OAAA,CAAQ,OAAQ,CAAA,CAAC,MAAW,KAAA;AAC/B,QAAK,IAAA,CAAA,gBAAA,CAAiB,KAAO,EAAA,MAAA,EAAQ,OAAO,CAAA,CAAA;AAAA,OAC7C,CAAA,CAAA;AAAA,KACH,CAAA;AACA,IAAK,IAAA,CAAA,OAAA,GAAU,CAAC,KAAA,EAAU,OAA6B,KAAA;AACrD,MAAA,MAAM,mBAAmB,MAAM;AAC7B,QAAA,IAAI,qBAAqB,aAAe,EAAA;AACtC,UAAA,SAAA,CAAU,OAAO,OAAO,CAAA,CAAA;AAAA,SAC1B;AAAA,OACF,CAAA;AACA,MAAgB,aAAA,GAAA,gBAAA,CAAA;AAChB,MAAA,cAAA,CAAe,gBAAgB,CAAA,CAAA;AAC/B,MAAO,OAAA,IAAA,CAAA;AAAA,KACT,CAAA;AAAA,GACF;AAAA,EAEO,IAAI,cAA8B,EAAA;AACvC,IACE,IAAA,OAAO,mBAAmB,UAC1B,IAAA,cAAA,CAAe,gBACf,cAAe,CAAA,YAAA,OAAmB,QAClC,EAAA;AACA,MAAK,IAAA,CAAA,OAAA,CAAQ,IAAI,cAAc,CAAA,CAAA;AAAA,KACjC;AACA,IAAO,OAAA,IAAA,CAAA;AAAA,GACT;AAAA,EAEO,OAAO,MAA4B,EAAA;AACxC,IAAK,IAAA,CAAA,OAAA,CAAQ,OAAO,MAAM,CAAA,CAAA;AAC1B,IAAO,OAAA,IAAA,CAAA;AAAA,GACT;AAAA,EAEO,UAAA,CAAW,WAAc,cAAoC,EAAA;AAClE,IAAA,IAAA,CAAK,IAAI,cAAc,CAAA,CAAA;AACvB,IAAA,IAAA,CAAK,gBAAiB,CAAA,SAAA,EAAW,cAAgB,EAAA,EAAE,CAAA,CAAA;AACnD,IAAO,OAAA,IAAA,CAAA;AAAA,GACT;AAAA,EAEQ,gBAAA,CACN,KACA,EAAA,KAAA,EACA,OACA,EAAA;AACA,IAAA,IAAA,CAAK,OAAO,KAAO,EAAA;AAAA,MACjB,GAAG,OAAA;AAAA,MACH,IAAM,EAAA;AAAA,QACJ,GAAK,OAAS,EAAA,IAAA,IAAoC,EAAC;AAAA,QACnD,WAAW,IAAK,CAAA,SAAA;AAAA,QAChB,IAAM,EAAA,IAAA;AAAA,OACR;AAAA,KACD,CAAA,CAAA;AAAA,GACH;AACF;;;;;AClFO,MAAM,SAAwD,CAAA;AAAA,EAK5D,YAAY,SAAoB,EAAA;AAJvC,IAAQA,eAAA,CAAA,IAAA,EAAA,QAAA,sBAAa,GAAkB,EAAA,CAAA,CAAA;AAEvC,IAAQA,eAAA,CAAA,IAAA,EAAA,YAAA,CAAA,CAAA;AAGN,IAAK,IAAA,CAAA,UAAA,GAAa,IAAI,UAAA,CAAW,SAAS,CAAA,CAAA;AAAA,GAC5C;AAAA,EAEO,OAAA,CAAQ,OAAU,OAAgC,EAAA;AACvD,IAAK,IAAA,CAAA,eAAA,CAAgB,OAAO,OAAO,CAAA,CAAA;AACnC,IAAK,IAAA,CAAA,UAAA,CAAW,OAAQ,CAAA,KAAA,EAAO,OAAO,CAAA,CAAA;AACtC,IAAO,OAAA,IAAA,CAAA;AAAA,GACT;AAAA,EAEO,IAAI,KAA2B,EAAA;AACpC,IACE,IAAA,OAAO,UAAU,UACjB,IAAA,CAAC,MAAM,YACP,IAAA,KAAA,CAAM,YAAa,EAAA,KAAM,OACzB,EAAA;AACA,MAAK,IAAA,CAAA,MAAA,CAAO,IAAI,KAAK,CAAA,CAAA;AAAA,KACvB;AACA,IAAK,IAAA,CAAA,UAAA,CAAW,IAAI,KAAK,CAAA,CAAA;AACzB,IAAO,OAAA,IAAA,CAAA;AAAA,GACT;AAAA,EAEO,OAAO,MAAkC,EAAA;AAC9C,IAAK,IAAA,CAAA,MAAA,CAAO,OAAO,MAAM,CAAA,CAAA;AACzB,IAAK,IAAA,CAAA,UAAA,CAAW,OAAO,MAAM,CAAA,CAAA;AAC7B,IAAO,OAAA,IAAA,CAAA;AAAA,GACT;AAAA,EAEO,UAAA,CAAW,WAAc,cAA0C,EAAA;AACxE,IAAA,IAAA,CAAK,IAAI,cAAc,CAAA,CAAA;AACvB,IAAA,IAAA,CAAK,QAAQ,SAAS,CAAA,CAAA;AACtB,IAAO,OAAA,IAAA,CAAA;AAAA,GACT;AAAA,EAEQ,eAAA,CAAgB,OAAU,OAA0B,EAAA;AAC1D,IAAK,IAAA,CAAA,MAAA,CAAO,OAAQ,CAAA,CAAC,MAAW,KAAA;AAC9B,MAAK,IAAA,CAAA,KAAA,EAAO,QAAQ,OAAO,CAAA,CAAA;AAAA,KAC5B,CAAA,CAAA;AACD,IAAA,IAAA,CAAK,OAAO,KAAM,EAAA,CAAA;AAAA,GACpB;AACF;;AC/CO,MAAM,WAA6C,CAAA;AAAA,EACjD,WAAA,CACG,WACA,QACR,EAAA;AAFQ,IAAA,IAAA,CAAA,SAAA,GAAA,SAAA,CAAA;AACA,IAAA,IAAA,CAAA,QAAA,GAAA,QAAA,CAAA;AAAA,GACP;AAAA,EAEH,YAAe,GAAA;AACb,IAAA,IAAI,OAAO,IAAK,CAAA,SAAA,KAAc,cAAc,CAAC,IAAA,CAAK,UAAU,YAAc,EAAA;AACxE,MAAO,OAAA,OAAA,CAAA;AAAA,KACT;AACA,IAAO,OAAA,IAAA,CAAK,UAAU,YAAa,EAAA,CAAA;AAAA,GACrC;AAAA,EAEA,OAAA,CAAQ,OAAU,OAAgC,EAAA;AAChD,IAAK,IAAA,CAAA,QAAA,CAAS,OAAO,OAAO,CAAA,CAAA;AAC5B,IAAO,OAAA,IAAA,CAAA;AAAA,GACT;AACF;;;;;ACbO,MAAM,MAAmC,CAAA;AAAA,EAGvC,YAAoB,cAAmB,EAAA;AAAnB,IAAA,IAAA,CAAA,cAAA,GAAA,cAAA,CAAA;AAF3B,IAAQA,eAAA,CAAA,IAAA,EAAA,MAAA,EAAO,IAAI,UAAA,CAAW,IAAI,CAAA,CAAA,CAAA;AAAA,GAEa;AAAA,EAExC,QAAQ,KAAgB,EAAA;AAC7B,IAAA,IAAA,CAAK,cAAiB,GAAA,KAAA,CAAA;AACtB,IAAK,IAAA,CAAA,IAAA,CAAK,OAAQ,CAAA,IAAA,CAAK,cAAc,CAAA,CAAA;AACrC,IAAO,OAAA,IAAA,CAAA;AAAA,GACT;AAAA,EAEO,UAAU,KAA2B,EAAA;AAC1C,IAAI,IAAA,OAAO,UAAU,UAAY,EAAA;AAC/B,MAAA,IAAA,CAAK,KAAK,UAAW,CAAA,IAAA,CAAK,gBAAgB,IAAI,KAAA,CAAM,KAAK,CAAC,CAAA,CAAA;AAAA,KACrD,MAAA;AACL,MAAA,IAAA,CAAK,IAAK,CAAA,UAAA,CAAW,IAAK,CAAA,cAAA,EAAgB,KAAK,CAAA,CAAA;AAAA,KACjD;AACA,IAAO,OAAA,IAAA,CAAA;AAAA,GACT;AACF;;ACvBO,MAAM,WAA6C,CAAA;AAAA,EACjD,YAAoB,SAAyB,EAAA;AAAzB,IAAA,IAAA,CAAA,SAAA,GAAA,SAAA,CAAA;AAAA,GAA0B;AAAA,EAE9C,OAAA,CAAQ,OAAU,OAAgC,EAAA;AACvD,IAAA,IAAI,QAAQ,IAAK,CAAA,SAAA,CAAA;AACjB,IAAI,IAAA,OAAO,UAAU,UAAY,EAAA;AAC/B,MAAQ,KAAA,GAAA,IAAI,MAAM,KAAK,CAAA,CAAA;AAAA,KACzB;AACA,IAAM,KAAA,CAAA,OAAA,CAAQ,OAAO,OAAO,CAAA,CAAA;AAC5B,IAAO,OAAA,IAAA,CAAA;AAAA,GACT;AAAA,EAEO,YAAe,GAAA;AACpB,IAAA,IAAI,OAAO,IAAK,CAAA,SAAA,KAAc,cAAc,CAAC,IAAA,CAAK,UAAU,YAAc,EAAA;AACxE,MAAO,OAAA,OAAA,CAAA;AAAA,KACT;AAEA,IAAO,OAAA,IAAA,CAAK,UAAU,YAAa,EAAA,CAAA;AAAA,GACrC;AACF;;;;;ACTO,MAAM,UAAsC,CAAA;AAAA,EAS1C,WAAc,GAAA;AARrB,IAAQA,eAAA,CAAA,IAAA,EAAA,UAAA,CAAA,CAAA;AAER,IAAQA,eAAA,CAAA,IAAA,EAAA,WAAA,sBAAgB,GAAI,EAAA,CAAA,CAAA;AAE5B,IAAQA,eAAA,CAAA,IAAA,EAAA,YAAA,sBAAiB,GAAI,EAAA,CAAA,CAAA;AAE7B,IAAQA,eAAA,CAAA,IAAA,EAAA,iBAAA,EAAkB,IAAI,SAAA,CAAU,IAAI,CAAA,CAAA,CAAA;AAG1C,IAAA,IAAA,CAAK,QAAW,GAAA,IAAI,MAAgC,CAAA,EAAE,CAAA,CAAA;AAAA,GACxD;AAAA,EAEO,YAAY,KAAqB,EAAA;AACtC,IAAM,MAAA,WAAA,GAAc,IAAI,WAAA,CAAY,KAAK,CAAA,CAAA;AACzC,IAAA,IAAA,CAAK,eAAgB,CAAA,GAAA;AAAA,MACnB,IAAI,WAAA;AAAA,QAAY,WAAA;AAAA,QAAa,CAAC,KAAA,KAC5B,MAAO,CAAA,MAAA,CAAO,KAAK,CAAA;AAAA,OACrB;AAAA,KACF,CAAA;AACA,IAAI,IAAA,IAAA,CAAK,eAAiB,EAAA;AACxB,MAAA,IAAA,CAAK,QAAS,CAAA,SAAA;AAAA,QACZ,IAAI,KAAM,CAAA,CAAC,KAAmC,KAAA;AAC5C,UAAA,IAAA,CAAK,eAAgB,CAAA,OAAA,CAAQ,MAAO,CAAA,MAAA,CAAO,KAAK,CAAC,CAAA,CAAA;AAAA,SAClD,CAAA;AAAA,OACH,CAAA;AAAA,KACF;AAEA,IAAO,OAAA,IAAA,CAAA;AAAA,GACT;AAAA,EAEO,OAAO,KAAqB,EAAA;AACjC,IAAM,MAAA,WAAA,GAAc,IAAI,WAAA,CAAY,KAAK,CAAA,CAAA;AACzC,IAAI,IAAA,IAAA,CAAK,eAAiB,EAAA;AACxB,MAAK,IAAA,CAAA,eAAA,CAAgB,IAAI,WAAW,CAAA,CAAA;AACpC,MAAA,IAAA,CAAK,QAAS,CAAA,SAAA;AAAA,QACZ,IAAI,KAAM,CAAA,CAAC,KAAU,KAAA;AACnB,UAAK,IAAA,CAAA,eAAA,CAAgB,QAAQ,KAAK,CAAA,CAAA;AAAA,SACnC,CAAA;AAAA,OACH,CAAA;AAAA,KACK,MAAA;AACL,MAAK,IAAA,CAAA,eAAA,CAAgB,IAAI,WAAW,CAAA,CAAA;AAAA,KACtC;AACA,IAAO,OAAA,IAAA,CAAA;AAAA,GACT;AAAA,EAEO,WAAc,GAAiC,EAAA;AACpD,IAAK,IAAA,CAAA,SAAA,CAAU,IAAI,GAAG,CAAA,CAAA;AACtB,IAAO,OAAA,IAAI,KAAM,CAAA,CAAC,KAAU,KAAA;AAE1B,MAAA,cAAA,CAAe,MAAM;AACnB,QAAA,IAAA,CAAK,QAAS,CAAA,SAAA;AAAA,UACZ,IAAI,KAAM,CAAA,CAAC,KAAmC,KAAA;AAC5C,YAAK,IAAA,CAAA,UAAA,CAAW,IAAI,GAAG,CAAA,CAAA;AACvB,YAAA,MAAM,SAAY,GAAA;AAAA,cAChB,GAAG,KAAA;AAAA,cACH,CAAC,GAAG,GAAG,KAAA;AAAA,aACT,CAAA;AACA,YAAK,IAAA,CAAA,QAAA,CAAS,QAAQ,SAAS,CAAA,CAAA;AAC/B,YAAI,IAAA,IAAA,CAAK,eAAiB,EAAA;AACxB,cAAK,IAAA,CAAA,eAAA,CAAgB,QAAQ,SAAS,CAAA,CAAA;AAAA,aACxC;AAAA,WACD,CAAA;AAAA,SACH,CAAA;AAAA,OACD,CAAA,CAAA;AAAA,KACF,CAAA,CAAA;AAAA,GACH;AAAA,EAEQ,aAAgB,GAAA;AACtB,IACE,OAAA,IAAA,CAAK,WAAW,IAAO,GAAA,CAAA,IAAK,KAAK,UAAW,CAAA,IAAA,KAAS,KAAK,SAAU,CAAA,IAAA,CAAA;AAAA,GAExE;AACF;;AC/EO,MAAM,SAA0C,CAAA;AAAA,EAC9C,YAAoB,QAAa,EAAA;AAAb,IAAA,IAAA,CAAA,QAAA,GAAA,QAAA,CAAA;AAAA,GAAc;AAAA,EAElC,QAAQ,KAAgB,EAAA;AAC7B,IAAA,IAAA,CAAK,QAAW,GAAA,KAAA,CAAA;AAChB,IAAO,OAAA,IAAA,CAAA;AAAA,GACT;AAAA,EAEO,KAAQ,GAAA;AACb,IAAA,OAAO,IAAK,CAAA,QAAA,CAAA;AAAA,GACd;AACF;;ACPO,MAAM,MAAwC,CAAA;AAAA,EAC5C,YAAoB,YAA4B,EAAA;AAA5B,IAAA,IAAA,CAAA,YAAA,GAAA,YAAA,CAAA;AAAA,GAA6B;AAAA,EAEjD,YAAe,GAAA;AACpB,IAAO,OAAA,QAAA,CAAA;AAAA,GACT;AAAA,EAEO,OAAA,CAAQ,OAAU,OAAgC,EAAA;AACvD,IAAK,IAAA,CAAA,KAAA,EAAO,IAAK,CAAA,YAAA,EAAc,OAAO,CAAA,CAAA;AACtC,IAAO,OAAA,IAAA,CAAA;AAAA,GACT;AACF;;;;;ACTO,MAAM,UAA4C,CAAA;AAAA,EAGhD,YAAoB,SAAyB,EAAA;AAAzB,IAAA,IAAA,CAAA,SAAA,GAAA,SAAA,CAAA;AAF3B,IAAAA,eAAA,CAAA,IAAA,EAAQ,UAAW,EAAA,KAAA,CAAA,CAAA;AAAA,GAEkC;AAAA,EAE9C,YAAe,GAAA;AACpB,IAAO,OAAA,QAAA,CAAA;AAAA,GACT;AAAA,EAEO,OAAA,CAAQ,OAAU,OAAgC,EAAA;AACvD,IAAI,IAAA,CAAC,KAAK,QAAU,EAAA;AAClB,MAAK,IAAA,CAAA,KAAA,EAAO,IAAK,CAAA,SAAA,EAAW,OAAO,CAAA,CAAA;AAAA,KACrC;AAEA,IAAA,MAAM,OAAO,OAAS,EAAA,IAAA,CAAA;AAEtB,IAAA,IAAI,MAAM,IAAM,EAAA;AACd,MAAK,IAAA,CAAA,IAAA,CAAK,OAAO,IAAI,CAAA,CAAA;AAAA,KACvB;AAEA,IAAO,OAAA,IAAA,CAAA;AAAA,GACT;AACF;;;;;AC9BO,MAAM,WAAwC,CAAA;AAAA,EAA9C,WAAA,GAAA;AACL,IAAQ,aAAA,CAAA,IAAA,EAAA,YAAA,EAAa,IAAIC,eAAA,CAAiB,IAAI,CAAA,CAAA,CAAA;AAAA,GAAA;AAAA,EAEvC,UAAU,KAAqB,EAAA;AACpC,IAAA,IAAA,CAAK,UAAW,CAAA,SAAA;AAAA,MACd,IAAIC,yBAAA,CAAY,KAAoB,EAAA,CAAC,KAAU,KAAA;AAC7C,QAAA,IAAI,UAAU,IAAM,EAAA;AAClB,UAAAC,YAAA,CAAK,OAAO,KAAK,CAAA,CAAA;AAAA,SACnB;AAAA,OACD,CAAA;AAAA,KACH,CAAA;AACA,IAAO,OAAA,IAAA,CAAA;AAAA,GACT;AAAA,EAEO,QAAQ,KAAgB,EAAA;AAC7B,IAAK,IAAA,CAAA,UAAA,CAAW,QAAQ,KAAK,CAAA,CAAA;AAC7B,IAAO,OAAA,IAAA,CAAA;AAAA,GACT;AACF;;ACVO,MAAM,OAAqC,CAAA;AAAA,EACvC,WACK,CAAA,aAAA,EACA,SAAqC,GAAA,EAC/C,EAAA;AAFU,IAAA,IAAA,CAAA,aAAA,GAAA,aAAA,CAAA;AACA,IAAA,IAAA,CAAA,SAAA,GAAA,SAAA,CAAA;AAAA,GACR;AAAA,EAEG,UAA0C,IAAmC,EAAA;AAChF,IAAA,OAAO,IAAK,IAAK,CAAA,aAAA,CAAmC,GAAG,IAAA,EAAM,KAAK,SAAS,CAAA,CAAA;AAAA,GAC/E;AACJ;;;;;;;;;;;;;;;;;;;"}
         | 
    
        package/dist/patron.min.js
    CHANGED
    
    | @@ -1 +1 @@ | |
| 1 | 
            -
            !function(e,t){"use strict";function  | 
| 1 | 
            +
            !function(e,t,i,s){"use strict";function r(e,t,i){"function"==typeof t?t(e,i):t.receive(e,i)}class n{constructor(e){this.receiver=e}receive(e,t){return this.receiver(e,t),this}}var o=Object.defineProperty,u=(e,t,i)=>((e,t,i)=>t in e?o(e,t,{enumerable:!0,configurable:!0,writable:!0,value:i}):e[t]=i)(e,"symbol"!=typeof t?t+"":t,i);const c=new Map;class h{constructor(e){this.initiator=e,u(this,"patrons",new Set),u(this,"receive"),c.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,t,i){r(e,t,{...i,data:{...i?.data??{},initiator:this.initiator,pool:this}})}}var a=Object.defineProperty,l=(e,t,i)=>((e,t,i)=>t in e?a(e,t,{enumerable:!0,configurable:!0,writable:!0,value:i}):e[t]=i)(e,"symbol"!=typeof t?t+"":t,i);class d{constructor(e){l(this,"guests",new Set),l(this,"patronPool"),this.patronPool=new h(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,t){this.guests.forEach((i=>{r(e,i,t)})),this.guests.clear()}}class v{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 b=Object.defineProperty,f=(e,t,i)=>((e,t,i)=>t in e?b(e,t,{enumerable:!0,configurable:!0,writable:!0,value:i}):e[t]=i)(e,t+"",i);class p{constructor(e){this.sourceDocument=e,f(this,"pool",new h(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 n(e)):this.pool.distribute(this.sourceDocument,e),this}}class w{constructor(e){this.baseGuest=e}receive(e,t){let i=this.baseGuest;return"function"==typeof i&&(i=new n(i)),i.receive(e,t),this}introduction(){return"function"!=typeof this.baseGuest&&this.baseGuest.introduction?this.baseGuest.introduction():"guest"}}var G=Object.defineProperty,y=(e,t,i)=>((e,t,i)=>t in e?G(e,t,{enumerable:!0,configurable:!0,writable:!0,value:i}):e[t]=i)(e,"symbol"!=typeof t?t+"":t,i);var g=Object.defineProperty,P=(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);var m=Object.defineProperty,C=(e,t,i)=>((e,t,i)=>t in e?m(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=n,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,t){return r(e,this.targetGuest,t),this}},e.GuestChain=class{constructor(){y(this,"theChain"),y(this,"keysKnown",new Set),y(this,"keysFilled",new Set),y(this,"filledChainPool",new d(this)),this.theChain=new p({})}resultArray(e){const t=new w(e);return this.filledChainPool.add(new v(t,(e=>Object.values(e)))),this.isChainFilled()&&this.theChain.receiving(new n((e=>{this.filledChainPool.receive(Object.values(e))}))),this}result(e){const t=new w(e);return this.isChainFilled()?(this.filledChainPool.add(t),this.theChain.receiving(new n((e=>{this.filledChainPool.receive(e)})))):this.filledChainPool.add(t),this}receiveKey(e){return this.keysKnown.add(e),new n((t=>{queueMicrotask((()=>{this.theChain.receiving(new n((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=v,e.GuestObject=w,e.GuestPool=d,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,t){return r(e,this.willBePatron,t),this}},e.PatronOnce=class{constructor(e){this.baseGuest=e,P(this,"received",!1)}introduction(){return"patron"}receive(e,t){this.received||r(e,this.baseGuest,t);const i=t?.data;return i?.pool&&i.pool.remove(this),this}},e.PatronPool=h,e.Source=p,e.SourceEmpty=class{constructor(){C(this,"baseSource",new s.Source(null))}receiving(e){return this.baseSource.receiving(new i.GuestMiddle(e,(i=>{null!==i&&t.give(i,e)}))),this}receive(e){return this.baseSource.receive(e),this}},e.give=r,e.removePatronFromPools=e=>{c.forEach((t=>{t.delete(e)}))}}({},Guest$1,GuestMiddle$1,Source$1);
         | 
    
        package/dist/patron.mjs
    CHANGED
    
    | @@ -1,4 +1,16 @@ | |
| 1 | 
            -
            import {  | 
| 1 | 
            +
            import { give as give$1 } from 'src/Guest/Guest';
         | 
| 2 | 
            +
            import { GuestMiddle as GuestMiddle$1 } from 'src/Guest/GuestMiddle';
         | 
| 3 | 
            +
            import { Source as Source$1 } from 'src/Source/Source';
         | 
| 4 | 
            +
             | 
| 5 | 
            +
            class GuestAware {
         | 
| 6 | 
            +
              constructor(guestReceiver) {
         | 
| 7 | 
            +
                this.guestReceiver = guestReceiver;
         | 
| 8 | 
            +
              }
         | 
| 9 | 
            +
              receiving(guest) {
         | 
| 10 | 
            +
                this.guestReceiver(guest);
         | 
| 11 | 
            +
                return guest;
         | 
| 12 | 
            +
              }
         | 
| 13 | 
            +
            }
         | 
| 2 14 |  | 
| 3 15 | 
             
            function give(data, guest, options) {
         | 
| 4 16 | 
             
              if (typeof guest === "function") {
         | 
| @@ -17,9 +29,29 @@ class Guest { | |
| 17 29 | 
             
              }
         | 
| 18 30 | 
             
            }
         | 
| 19 31 |  | 
| 20 | 
            -
             | 
| 21 | 
            -
             | 
| 22 | 
            -
             | 
| 32 | 
            +
            class GuestCast {
         | 
| 33 | 
            +
              constructor(sourceGuest, targetGuest) {
         | 
| 34 | 
            +
                this.sourceGuest = sourceGuest;
         | 
| 35 | 
            +
                this.targetGuest = targetGuest;
         | 
| 36 | 
            +
              }
         | 
| 37 | 
            +
              introduction() {
         | 
| 38 | 
            +
                if (typeof this.sourceGuest === "function") {
         | 
| 39 | 
            +
                  return "guest";
         | 
| 40 | 
            +
                }
         | 
| 41 | 
            +
                if (!this.sourceGuest.introduction) {
         | 
| 42 | 
            +
                  return "guest";
         | 
| 43 | 
            +
                }
         | 
| 44 | 
            +
                return this.sourceGuest.introduction();
         | 
| 45 | 
            +
              }
         | 
| 46 | 
            +
              receive(value, options) {
         | 
| 47 | 
            +
                give(value, this.targetGuest, options);
         | 
| 48 | 
            +
                return this;
         | 
| 49 | 
            +
              }
         | 
| 50 | 
            +
            }
         | 
| 51 | 
            +
             | 
| 52 | 
            +
            var __defProp$5 = Object.defineProperty;
         | 
| 53 | 
            +
            var __defNormalProp$5 = (obj, key, value) => key in obj ? __defProp$5(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
         | 
| 54 | 
            +
            var __publicField$5 = (obj, key, value) => __defNormalProp$5(obj, typeof key !== "symbol" ? key + "" : key, value);
         | 
| 23 55 | 
             
            const poolSets = /* @__PURE__ */ new Map();
         | 
| 24 56 | 
             
            const removePatronFromPools = (patron) => {
         | 
| 25 57 | 
             
              poolSets.forEach((pool) => {
         | 
| @@ -29,8 +61,8 @@ const removePatronFromPools = (patron) => { | |
| 29 61 | 
             
            class PatronPool {
         | 
| 30 62 | 
             
              constructor(initiator) {
         | 
| 31 63 | 
             
                this.initiator = initiator;
         | 
| 32 | 
            -
                __publicField$ | 
| 33 | 
            -
                __publicField$ | 
| 64 | 
            +
                __publicField$5(this, "patrons", /* @__PURE__ */ new Set());
         | 
| 65 | 
            +
                __publicField$5(this, "receive");
         | 
| 34 66 | 
             
                poolSets.set(this, this.patrons);
         | 
| 35 67 | 
             
                let lastMicrotask = null;
         | 
| 36 68 | 
             
                const doReceive = (value, options) => {
         | 
| @@ -76,43 +108,13 @@ class PatronPool { | |
| 76 108 | 
             
              }
         | 
| 77 109 | 
             
            }
         | 
| 78 110 |  | 
| 79 | 
            -
             | 
| 80 | 
            -
             | 
| 81 | 
            -
             | 
| 82 | 
            -
              }
         | 
| 83 | 
            -
              receiving(guest) {
         | 
| 84 | 
            -
                this.guestReceiver(guest);
         | 
| 85 | 
            -
                return guest;
         | 
| 86 | 
            -
              }
         | 
| 87 | 
            -
            }
         | 
| 88 | 
            -
             | 
| 89 | 
            -
            class GuestCast {
         | 
| 90 | 
            -
              constructor(sourceGuest, targetGuest) {
         | 
| 91 | 
            -
                this.sourceGuest = sourceGuest;
         | 
| 92 | 
            -
                this.targetGuest = targetGuest;
         | 
| 93 | 
            -
              }
         | 
| 94 | 
            -
              introduction() {
         | 
| 95 | 
            -
                if (typeof this.sourceGuest === "function") {
         | 
| 96 | 
            -
                  return "guest";
         | 
| 97 | 
            -
                }
         | 
| 98 | 
            -
                if (!this.sourceGuest.introduction) {
         | 
| 99 | 
            -
                  return "guest";
         | 
| 100 | 
            -
                }
         | 
| 101 | 
            -
                return this.sourceGuest.introduction();
         | 
| 102 | 
            -
              }
         | 
| 103 | 
            -
              receive(value, options) {
         | 
| 104 | 
            -
                give(value, this.targetGuest, options);
         | 
| 105 | 
            -
                return this;
         | 
| 106 | 
            -
              }
         | 
| 107 | 
            -
            }
         | 
| 108 | 
            -
             | 
| 109 | 
            -
            var __defProp$3 = Object.defineProperty;
         | 
| 110 | 
            -
            var __defNormalProp$3 = (obj, key, value) => key in obj ? __defProp$3(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
         | 
| 111 | 
            -
            var __publicField$3 = (obj, key, value) => __defNormalProp$3(obj, typeof key !== "symbol" ? key + "" : key, value);
         | 
| 111 | 
            +
            var __defProp$4 = Object.defineProperty;
         | 
| 112 | 
            +
            var __defNormalProp$4 = (obj, key, value) => key in obj ? __defProp$4(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
         | 
| 113 | 
            +
            var __publicField$4 = (obj, key, value) => __defNormalProp$4(obj, typeof key !== "symbol" ? key + "" : key, value);
         | 
| 112 114 | 
             
            class GuestPool {
         | 
| 113 115 | 
             
              constructor(initiator) {
         | 
| 114 | 
            -
                __publicField$ | 
| 115 | 
            -
                __publicField$ | 
| 116 | 
            +
                __publicField$4(this, "guests", /* @__PURE__ */ new Set());
         | 
| 117 | 
            +
                __publicField$4(this, "patronPool");
         | 
| 116 118 | 
             
                this.patronPool = new PatronPool(initiator);
         | 
| 117 119 | 
             
              }
         | 
| 118 120 | 
             
              receive(value, options) {
         | 
| @@ -162,13 +164,13 @@ class GuestMiddle { | |
| 162 164 | 
             
              }
         | 
| 163 165 | 
             
            }
         | 
| 164 166 |  | 
| 165 | 
            -
            var __defProp$ | 
| 166 | 
            -
            var __defNormalProp$ | 
| 167 | 
            -
            var __publicField$ | 
| 167 | 
            +
            var __defProp$3 = Object.defineProperty;
         | 
| 168 | 
            +
            var __defNormalProp$3 = (obj, key, value) => key in obj ? __defProp$3(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
         | 
| 169 | 
            +
            var __publicField$3 = (obj, key, value) => __defNormalProp$3(obj, key + "" , value);
         | 
| 168 170 | 
             
            class Source {
         | 
| 169 171 | 
             
              constructor(sourceDocument) {
         | 
| 170 172 | 
             
                this.sourceDocument = sourceDocument;
         | 
| 171 | 
            -
                __publicField$ | 
| 173 | 
            +
                __publicField$3(this, "pool", new PatronPool(this));
         | 
| 172 174 | 
             
              }
         | 
| 173 175 | 
             
              receive(value) {
         | 
| 174 176 | 
             
                this.sourceDocument = value;
         | 
| @@ -205,15 +207,15 @@ class GuestObject { | |
| 205 207 | 
             
              }
         | 
| 206 208 | 
             
            }
         | 
| 207 209 |  | 
| 208 | 
            -
            var __defProp$ | 
| 209 | 
            -
            var __defNormalProp$ | 
| 210 | 
            -
            var __publicField$ | 
| 210 | 
            +
            var __defProp$2 = Object.defineProperty;
         | 
| 211 | 
            +
            var __defNormalProp$2 = (obj, key, value) => key in obj ? __defProp$2(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
         | 
| 212 | 
            +
            var __publicField$2 = (obj, key, value) => __defNormalProp$2(obj, typeof key !== "symbol" ? key + "" : key, value);
         | 
| 211 213 | 
             
            class GuestChain {
         | 
| 212 214 | 
             
              constructor() {
         | 
| 213 | 
            -
                __publicField$ | 
| 214 | 
            -
                __publicField$ | 
| 215 | 
            -
                __publicField$ | 
| 216 | 
            -
                __publicField$ | 
| 215 | 
            +
                __publicField$2(this, "theChain");
         | 
| 216 | 
            +
                __publicField$2(this, "keysKnown", /* @__PURE__ */ new Set());
         | 
| 217 | 
            +
                __publicField$2(this, "keysFilled", /* @__PURE__ */ new Set());
         | 
| 218 | 
            +
                __publicField$2(this, "filledChainPool", new GuestPool(this));
         | 
| 217 219 | 
             
                this.theChain = new Source({});
         | 
| 218 220 | 
             
              }
         | 
| 219 221 | 
             
              resultArray(guest) {
         | 
| @@ -298,13 +300,13 @@ class Patron { | |
| 298 300 | 
             
              }
         | 
| 299 301 | 
             
            }
         | 
| 300 302 |  | 
| 301 | 
            -
            var __defProp = Object.defineProperty;
         | 
| 302 | 
            -
            var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
         | 
| 303 | 
            -
            var __publicField = (obj, key, value) => __defNormalProp(obj, key + "" , value);
         | 
| 303 | 
            +
            var __defProp$1 = Object.defineProperty;
         | 
| 304 | 
            +
            var __defNormalProp$1 = (obj, key, value) => key in obj ? __defProp$1(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
         | 
| 305 | 
            +
            var __publicField$1 = (obj, key, value) => __defNormalProp$1(obj, key + "" , value);
         | 
| 304 306 | 
             
            class PatronOnce {
         | 
| 305 307 | 
             
              constructor(baseGuest) {
         | 
| 306 308 | 
             
                this.baseGuest = baseGuest;
         | 
| 307 | 
            -
                __publicField(this, "received", false);
         | 
| 309 | 
            +
                __publicField$1(this, "received", false);
         | 
| 308 310 | 
             
              }
         | 
| 309 311 | 
             
              introduction() {
         | 
| 310 312 | 
             
                return "patron";
         | 
| @@ -321,6 +323,29 @@ class PatronOnce { | |
| 321 323 | 
             
              }
         | 
| 322 324 | 
             
            }
         | 
| 323 325 |  | 
| 326 | 
            +
            var __defProp = Object.defineProperty;
         | 
| 327 | 
            +
            var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
         | 
| 328 | 
            +
            var __publicField = (obj, key, value) => __defNormalProp(obj, key + "" , value);
         | 
| 329 | 
            +
            class SourceEmpty {
         | 
| 330 | 
            +
              constructor() {
         | 
| 331 | 
            +
                __publicField(this, "baseSource", new Source$1(null));
         | 
| 332 | 
            +
              }
         | 
| 333 | 
            +
              receiving(guest) {
         | 
| 334 | 
            +
                this.baseSource.receiving(
         | 
| 335 | 
            +
                  new GuestMiddle$1(guest, (value) => {
         | 
| 336 | 
            +
                    if (value !== null) {
         | 
| 337 | 
            +
                      give$1(value, guest);
         | 
| 338 | 
            +
                    }
         | 
| 339 | 
            +
                  })
         | 
| 340 | 
            +
                );
         | 
| 341 | 
            +
                return this;
         | 
| 342 | 
            +
              }
         | 
| 343 | 
            +
              receive(value) {
         | 
| 344 | 
            +
                this.baseSource.receive(value);
         | 
| 345 | 
            +
                return this;
         | 
| 346 | 
            +
              }
         | 
| 347 | 
            +
            }
         | 
| 348 | 
            +
             | 
| 324 349 | 
             
            class Factory {
         | 
| 325 350 | 
             
              constructor(constructorFn, factories = {}) {
         | 
| 326 351 | 
             
                this.constructorFn = constructorFn;
         | 
| @@ -331,25 +356,5 @@ class Factory { | |
| 331 356 | 
             
              }
         | 
| 332 357 | 
             
            }
         | 
| 333 358 |  | 
| 334 | 
            -
             | 
| 335 | 
            -
              globalThis["GUEST_LIBRARY"] = {
         | 
| 336 | 
            -
                give,
         | 
| 337 | 
            -
                removePatronFromPools,
         | 
| 338 | 
            -
                GuestAware,
         | 
| 339 | 
            -
                Guest,
         | 
| 340 | 
            -
                GuestCast,
         | 
| 341 | 
            -
                GuestChain,
         | 
| 342 | 
            -
                GuestMiddle,
         | 
| 343 | 
            -
                GuestPool,
         | 
| 344 | 
            -
                GuestSync,
         | 
| 345 | 
            -
                GuestObject,
         | 
| 346 | 
            -
                Patron,
         | 
| 347 | 
            -
                PatronOnce,
         | 
| 348 | 
            -
                PatronPool,
         | 
| 349 | 
            -
                Source,
         | 
| 350 | 
            -
                Factory: Factory$1
         | 
| 351 | 
            -
              };
         | 
| 352 | 
            -
            }
         | 
| 353 | 
            -
             | 
| 354 | 
            -
            export { Factory, Guest, GuestAware, GuestCast, GuestChain, GuestMiddle, GuestObject, GuestPool, GuestSync, Patron, PatronOnce, PatronPool, Source, give, removePatronFromPools };
         | 
| 359 | 
            +
            export { Factory, Guest, GuestAware, GuestCast, GuestChain, GuestMiddle, GuestObject, GuestPool, GuestSync, Patron, PatronOnce, PatronPool, Source, SourceEmpty, give, removePatronFromPools };
         | 
| 355 360 | 
             
            //# sourceMappingURL=patron.mjs.map
         | 
    
        package/dist/patron.mjs.map
    CHANGED
    
    | @@ -1 +1 @@ | |
| 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/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/Factory/Factory.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, 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","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","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 { GuestMiddle } from \"./Guest/GuestMiddle\";\nimport { GuestPool } from \"./Guest/GuestPool\";\nimport { GuestSync } from \"./Guest/GuestSync\";\nimport { GuestObject } from \"./Guest/GuestObject\";\nimport { Patron } from \"./Patron/Patron\";\nimport { PatronOnce } from \"./Patron/PatronOnce\";\nimport { Source } from \"./Source/Source\";\nimport { Factory } from \"src/Factory/Factory\";\n\nexport * from \"./Guest/GuestAware\";\nexport * from \"./Guest/Guest\";\nexport * from \"./Guest/GuestCast\";\nexport * from \"./Guest/GuestChain\";\nexport * from \"./Guest/GuestMiddle\";\nexport * from \"./Guest/GuestPool\";\nexport * from \"./Guest/GuestSync\";\nexport * from \"./Patron/Patron\";\nexport * from \"./Patron/PatronOnce\";\nexport * from \"./Patron/PatronPool\";\nexport * from \"./Source/Source\";\nexport * from \"./Guest/GuestObject\";\nexport * from \"./Factory/Factory\";\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    GuestMiddle,\n    GuestPool,\n    GuestSync,\n    GuestObject,\n    Patron,\n    PatronOnce,\n    PatronPool,\n    Source,\n    Factory,\n  };\n}\n"],"names":["__publicField","Factory"],"mappings":"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"}
         | 
| 1 | 
            +
            {"version":3,"file":"patron.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 \"src/Guest/Guest\";\nimport { GuestMiddle } from \"src/Guest/GuestMiddle\";\nimport { Source, SourceType } from \"src/Source/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","Source","GuestMiddle","give"],"mappings":"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"}
         | 
    
        package/package.json
    CHANGED
    
    
| @@ -0,0 +1,20 @@ | |
| 1 | 
            +
            import { SourceEmpty } from "src/Source/SourceEmpty";
         | 
| 2 | 
            +
            import { expect, test } from "vitest";
         | 
| 3 | 
            +
             | 
| 4 | 
            +
            test("source", () => {
         | 
| 5 | 
            +
              const source = new SourceEmpty<number>();
         | 
| 6 | 
            +
              let accumulator = 0;
         | 
| 7 | 
            +
             | 
| 8 | 
            +
              // Не вызывается потому что нет значения
         | 
| 9 | 
            +
              source.receiving(() => {
         | 
| 10 | 
            +
                accumulator += 100;
         | 
| 11 | 
            +
              });
         | 
| 12 | 
            +
             | 
| 13 | 
            +
              // Вызывается после прихода значения
         | 
| 14 | 
            +
              source.receive(200);
         | 
| 15 | 
            +
              source.receiving((value) => {
         | 
| 16 | 
            +
                accumulator += value;
         | 
| 17 | 
            +
              });
         | 
| 18 | 
            +
             | 
| 19 | 
            +
              expect(accumulator).toBe(200);
         | 
| 20 | 
            +
            });
         | 
| @@ -0,0 +1,23 @@ | |
| 1 | 
            +
            import { give, GuestType } from "src/Guest/Guest";
         | 
| 2 | 
            +
            import { GuestMiddle } from "src/Guest/GuestMiddle";
         | 
| 3 | 
            +
            import { Source, SourceType } from "src/Source/Source";
         | 
| 4 | 
            +
             | 
| 5 | 
            +
            export class SourceEmpty<T> implements SourceType<T> {
         | 
| 6 | 
            +
              private baseSource = new Source<T | null>(null);
         | 
| 7 | 
            +
             | 
| 8 | 
            +
              public receiving(guest: GuestType<T>) {
         | 
| 9 | 
            +
                this.baseSource.receiving(
         | 
| 10 | 
            +
                  new GuestMiddle(guest as GuestType, (value) => {
         | 
| 11 | 
            +
                    if (value !== null) {
         | 
| 12 | 
            +
                      give(value, guest);
         | 
| 13 | 
            +
                    }
         | 
| 14 | 
            +
                  }),
         | 
| 15 | 
            +
                );
         | 
| 16 | 
            +
                return this;
         | 
| 17 | 
            +
              }
         | 
| 18 | 
            +
             | 
| 19 | 
            +
              public receive(value: T): this {
         | 
| 20 | 
            +
                this.baseSource.receive(value);
         | 
| 21 | 
            +
                return this;
         | 
| 22 | 
            +
              }
         | 
| 23 | 
            +
            }
         | 
    
        package/src/index.ts
    CHANGED
    
    | @@ -1,17 +1,3 @@ | |
| 1 | 
            -
            import { give, Guest } from "./Guest/Guest";
         | 
| 2 | 
            -
            import { PatronPool, removePatronFromPools } from "./Patron/PatronPool";
         | 
| 3 | 
            -
            import { GuestAware } from "./Guest/GuestAware";
         | 
| 4 | 
            -
            import { GuestCast } from "./Guest/GuestCast";
         | 
| 5 | 
            -
            import { GuestChain } from "./Guest/GuestChain";
         | 
| 6 | 
            -
            import { GuestMiddle } from "./Guest/GuestMiddle";
         | 
| 7 | 
            -
            import { GuestPool } from "./Guest/GuestPool";
         | 
| 8 | 
            -
            import { GuestSync } from "./Guest/GuestSync";
         | 
| 9 | 
            -
            import { GuestObject } from "./Guest/GuestObject";
         | 
| 10 | 
            -
            import { Patron } from "./Patron/Patron";
         | 
| 11 | 
            -
            import { PatronOnce } from "./Patron/PatronOnce";
         | 
| 12 | 
            -
            import { Source } from "./Source/Source";
         | 
| 13 | 
            -
            import { Factory } from "src/Factory/Factory";
         | 
| 14 | 
            -
             | 
| 15 1 | 
             
            export * from "./Guest/GuestAware";
         | 
| 16 2 | 
             
            export * from "./Guest/Guest";
         | 
| 17 3 | 
             
            export * from "./Guest/GuestCast";
         | 
| @@ -23,27 +9,6 @@ export * from "./Patron/Patron"; | |
| 23 9 | 
             
            export * from "./Patron/PatronOnce";
         | 
| 24 10 | 
             
            export * from "./Patron/PatronPool";
         | 
| 25 11 | 
             
            export * from "./Source/Source";
         | 
| 12 | 
            +
            export * from "./Source/SourceEmpty";
         | 
| 26 13 | 
             
            export * from "./Guest/GuestObject";
         | 
| 27 14 | 
             
            export * from "./Factory/Factory";
         | 
| 28 | 
            -
             | 
| 29 | 
            -
            declare var globalThis: any;
         | 
| 30 | 
            -
             | 
| 31 | 
            -
            if (globalThis) {
         | 
| 32 | 
            -
              globalThis["GUEST_LIBRARY"] = {
         | 
| 33 | 
            -
                give,
         | 
| 34 | 
            -
                removePatronFromPools,
         | 
| 35 | 
            -
                GuestAware,
         | 
| 36 | 
            -
                Guest,
         | 
| 37 | 
            -
                GuestCast,
         | 
| 38 | 
            -
                GuestChain,
         | 
| 39 | 
            -
                GuestMiddle,
         | 
| 40 | 
            -
                GuestPool,
         | 
| 41 | 
            -
                GuestSync,
         | 
| 42 | 
            -
                GuestObject,
         | 
| 43 | 
            -
                Patron,
         | 
| 44 | 
            -
                PatronOnce,
         | 
| 45 | 
            -
                PatronPool,
         | 
| 46 | 
            -
                Source,
         | 
| 47 | 
            -
                Factory,
         | 
| 48 | 
            -
              };
         | 
| 49 | 
            -
            }
         |