patron-oop 1.33.0 → 1.34.0

Sign up to get free protection for your applications and to get access to all the features.
package/CHANGELOG.md CHANGED
@@ -2,6 +2,14 @@
2
2
 
3
3
  All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.
4
4
 
5
+ ## [1.34.0](https://github.com/kosukhin/patron/compare/v1.33.0...v1.34.0) (2025-01-11)
6
+
7
+
8
+ ### Features
9
+
10
+ * **17-need-to-create-guestawaretype-with-functional-variant:** guest aware functional ([1293b93](https://github.com/kosukhin/patron/commit/1293b93113aaa3f23d08ee0170aef1b08e8b13d3))
11
+ * **main:** release 1.33.0 ([291eb6a](https://github.com/kosukhin/patron/commit/291eb6af7d470ca9eb881aa50a0770e1a7887428))
12
+
5
13
  ## [1.33.0](https://github.com/kosukhin/patron/compare/v1.32.0...v1.33.0) (2024-12-23)
6
14
 
7
15
 
package/dist/patron.cjs CHANGED
@@ -1,11 +1,18 @@
1
1
  'use strict';
2
2
 
3
+ function value(guestAware, guest) {
4
+ if (typeof guestAware === "function") {
5
+ return guestAware(guest);
6
+ } else {
7
+ return guestAware.value(guest);
8
+ }
9
+ }
3
10
  class GuestAware {
4
- constructor(guestReceiver) {
5
- this.guestReceiver = guestReceiver;
11
+ constructor(guestAware) {
12
+ this.guestAware = guestAware;
6
13
  }
7
14
  value(guest) {
8
- this.guestReceiver(guest);
15
+ value(this.guestAware, guest);
9
16
  return guest;
10
17
  }
11
18
  }
@@ -331,11 +338,12 @@ class GuestAwareSequence {
331
338
  const targetSource = this.targetSourceFactory.create(
332
339
  sequenceSource
333
340
  );
334
- this.baseSource.value(
335
- new GuestCast(guest, (value) => {
341
+ value(
342
+ this.baseSource,
343
+ new GuestCast(guest, (theValue) => {
336
344
  let index = 0;
337
345
  const nextItemHandle = () => {
338
- if (value[index + 1] !== void 0) {
346
+ if (theValue[index + 1] !== void 0) {
339
347
  index = index + 1;
340
348
  handle();
341
349
  } else {
@@ -343,11 +351,11 @@ class GuestAwareSequence {
343
351
  }
344
352
  };
345
353
  function handle() {
346
- sequenceSource.give(value[index]);
347
- targetSource.value(chain.receiveKey("" + index));
348
- targetSource.value(nextItemHandle);
354
+ sequenceSource.give(theValue[index]);
355
+ value(targetSource, chain.receiveKey("" + index));
356
+ value(targetSource, nextItemHandle);
349
357
  }
350
- if (value[index] !== void 0) {
358
+ if (theValue[index] !== void 0) {
351
359
  handle();
352
360
  } else {
353
361
  give([], guest);
@@ -365,15 +373,16 @@ class GuestAwareMap {
365
373
  }
366
374
  value(guest) {
367
375
  const chain = new GuestChain();
368
- this.baseSource.value(
369
- new GuestCast(guest, (value) => {
370
- value.forEach((val, index) => {
376
+ value(
377
+ this.baseSource,
378
+ new GuestCast(guest, (theValue) => {
379
+ theValue.forEach((val, index) => {
371
380
  const targetSource = this.targetSourceFactory.create(
372
381
  new GuestAware((innerGuest) => {
373
382
  give(val, innerGuest);
374
383
  })
375
384
  );
376
- targetSource.value(chain.receiveKey("" + index));
385
+ value(targetSource, chain.receiveKey("" + index));
377
386
  });
378
387
  })
379
388
  );
@@ -389,10 +398,11 @@ class GuestAwareRace {
389
398
  value(guest) {
390
399
  let connectedWithGuestAware = null;
391
400
  this.guestAwares.forEach((guestAware) => {
392
- guestAware.value(
393
- new GuestCast(guest, (value) => {
401
+ value(
402
+ guestAware,
403
+ new GuestCast(guest, (value2) => {
394
404
  if (!connectedWithGuestAware || connectedWithGuestAware === guestAware) {
395
- give(value, guest);
405
+ give(value2, guest);
396
406
  connectedWithGuestAware = guestAware;
397
407
  }
398
408
  })
@@ -497,11 +507,11 @@ class SourceDynamic {
497
507
  this.baseGuestAware = baseGuestAware;
498
508
  }
499
509
  value(guest) {
500
- this.baseGuestAware.value(guest);
510
+ value(this.baseGuestAware, guest);
501
511
  return this;
502
512
  }
503
- give(value) {
504
- give(value, this.baseGuest);
513
+ give(value2) {
514
+ give(value2, this.baseGuest);
505
515
  return this;
506
516
  }
507
517
  pool() {
@@ -554,4 +564,5 @@ exports.SourceEmpty = SourceEmpty;
554
564
  exports.give = give;
555
565
  exports.isPatronInPools = isPatronInPools;
556
566
  exports.removePatronFromPools = removePatronFromPools;
567
+ exports.value = value;
557
568
  //# sourceMappingURL=patron.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"patron.cjs","sources":["../src/Guest/GuestAware.ts","../src/Guest/Guest.ts","../src/Guest/GuestCast.ts","../src/Patron/PatronPool.ts","../src/Source/Source.ts","../src/Guest/GuestObject.ts","../src/Guest/GuestPool.ts","../src/Guest/GuestChain.ts","../src/Source/SourceEmpty.ts","../src/Guest/GuestAwareSequence.ts","../src/Guest/GuestAwareMap.ts","../src/Guest/GuestAwareRace.ts","../src/Guest/GuestAwareActive.ts","../src/Guest/GuestSync.ts","../src/Guest/GuestDisposable.ts","../src/Patron/Patron.ts","../src/Patron/PatronOnce.ts","../src/Source/SourceDynamic.ts","../src/Factory/Factory.ts","../src/Factory/Module.ts"],"sourcesContent":["import { GuestType } from \"./Guest\";\n\nexport interface GuestAwareType<T = any> {\n value(guest: GuestType<T>): unknown;\n}\n\n/**\n * @url https://kosukhin.github.io/patron.site/#/guest/guest-aware\n */\nexport class GuestAware<T = any> implements GuestAwareType<T> {\n public constructor(private guestReceiver: (guest: GuestType<T>) => void) { }\n\n public value(guest: GuestType<T>): GuestType<T> {\n this.guestReceiver(guest);\n return guest;\n }\n}\n","type GuestIntroduction = \"guest\" | \"patron\";\n\nexport interface GiveOptions {\n data?: unknown;\n}\n\nexport type GuestExecutorType<T = any> = (\n value: T,\n options?: GiveOptions,\n) => void;\n\nexport interface GuestObjectType<T = any> {\n give(value: T, options?: GiveOptions): this;\n introduction?(): GuestIntroduction;\n}\n\nexport type GuestType<T = any> = GuestExecutorType<T> | GuestObjectType<T>;\n\n/**\n * @url https://kosukhin.github.io/patron.site/#/utils/give\n */\nexport function give<T>(data: T, guest: GuestType<T>, options?: GiveOptions) {\n if (typeof guest === \"function\") {\n guest(data, options);\n } else {\n guest.give(data, options);\n }\n}\n\n/**\n * @url https://kosukhin.github.io/patron.site/#/guest\n */\nexport class Guest<T> implements GuestObjectType<T> {\n public constructor(private receiver: GuestExecutorType<T>) { }\n\n public give(value: T, options?: GiveOptions) {\n this.receiver(value, options);\n return this;\n }\n}\n","import {\n GuestDisposableType,\n MaybeDisposableType,\n} from \"./GuestDisposable\";\nimport { give, GiveOptions, GuestType } from \"./Guest\";\n\n/**\n * @url https://kosukhin.github.io/patron.site/#/guest/guest-cast\n */\nexport class GuestCast<T> implements GuestDisposableType<T> {\n public constructor(\n private sourceGuest: GuestType<any>,\n private targetGuest: GuestType<T>,\n ) { }\n\n public introduction() {\n if (typeof this.sourceGuest === \"function\") {\n return \"guest\";\n }\n if (!this.sourceGuest.introduction) {\n return \"guest\";\n }\n return this.sourceGuest.introduction();\n }\n\n public give(value: T, options?: GiveOptions): this {\n give(value, this.targetGuest, options);\n return this;\n }\n\n public disposed(value: T | null): boolean {\n const maybeDisposable = this.sourceGuest as MaybeDisposableType;\n return maybeDisposable.disposed ? maybeDisposable.disposed(value) : false;\n }\n}\n","import { GuestDisposableType } from \"../Guest/GuestDisposable\";\nimport { give, GuestObjectType, GuestType, GiveOptions } from \"../Guest/Guest\";\n\nconst poolSets = new Map<PoolType, Set<GuestObjectType>>();\n\n/**\n * @url https://kosukhin.github.io/patron.site/#/utils/remove-patron-from-pools\n */\nexport const removePatronFromPools = (patron: GuestObjectType) => {\n poolSets.forEach((pool) => {\n pool.delete(patron);\n });\n};\n\n/**\n * @url https://kosukhin.github.io/patron.site/#/utils/is-patron-in-pools\n */\nexport const isPatronInPools = (patron: GuestObjectType) => {\n let inPool = false;\n poolSets.forEach((pool) => {\n if (!inPool) {\n inPool = pool.has(patron);\n }\n });\n return inPool;\n};\n\nexport interface PoolType<T = any> extends GuestObjectType<T> {\n add(guest: GuestObjectType<T>): this;\n distribute(receiving: T, possiblePatron: GuestObjectType<T>): this;\n remove(patron: GuestObjectType<T>): this;\n size(): number;\n}\n\n/**\n * @url https://kosukhin.github.io/patron.site/#/patron/patron-pool\n */\nexport class PatronPool<T> implements PoolType<T> {\n private patrons: Set<GuestObjectType<T>>;\n\n public give: (value: T, options?: GiveOptions) => this;\n\n public constructor(private initiator: unknown) {\n this.patrons = new Set<GuestObjectType<T>>();\n poolSets.set(this, this.patrons);\n let lastMicrotask: (() => void) | null = null;\n const doReceive = (value: T, options?: GiveOptions) => {\n this.patrons.forEach((target) => {\n this.sendValueToGuest(value, target, options);\n });\n };\n this.give = (value: T, options?: GiveOptions) => {\n const currentMicroTask = () => {\n if (currentMicroTask === lastMicrotask) {\n doReceive(value, options);\n }\n };\n lastMicrotask = currentMicroTask;\n queueMicrotask(currentMicroTask);\n return this;\n };\n }\n\n public size(): number {\n return this.patrons.size;\n }\n\n public add(shouldBePatron: GuestType<T>) {\n if (!shouldBePatron) {\n throw new Error(\"PatronPool add method received nothing!\");\n }\n if (\n typeof shouldBePatron !== \"function\" &&\n shouldBePatron.introduction &&\n shouldBePatron.introduction() === \"patron\"\n ) {\n this.patrons.add(shouldBePatron);\n }\n return this;\n }\n\n public remove(patron: GuestObjectType<T>) {\n this.patrons.delete(patron);\n return this;\n }\n\n public distribute(receiving: T, possiblePatron: GuestType<T>): this {\n this.add(possiblePatron);\n this.sendValueToGuest(receiving, possiblePatron, {});\n return this;\n }\n\n private sendValueToGuest(\n value: T,\n guest: GuestType<T>,\n options?: GiveOptions,\n ) {\n const isDisposed = this.guestDisposed(value, guest);\n\n if (!isDisposed) {\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\n private guestDisposed(value: T, guest: GuestType<T>) {\n if ((guest as GuestDisposableType).disposed?.(value)) {\n this.remove(guest as GuestObjectType);\n return true;\n }\n\n return false;\n }\n}\n","import { GuestAwareType } from \"../Guest/GuestAware\";\nimport { Guest, GuestObjectType, GuestType } from \"../Guest/Guest\";\nimport { PatronPool } from \"../Patron/PatronPool\";\n\nexport interface PoolAware<T = any> {\n pool(): PatronPool<T>;\n}\n\n/**\n * @url https://kosukhin.github.io/patron.site/#/source\n */\nexport type SourceType<T = any> = GuestAwareType<T> &\n GuestObjectType<T> &\n PoolAware<T>;\n\nexport class Source<T> implements SourceType<T> {\n private thePool = new PatronPool(this);\n\n public constructor(private sourceDocument: T) { }\n\n public pool() {\n return this.thePool;\n }\n\n public give(value: T): this {\n this.sourceDocument = value;\n this.thePool.give(this.sourceDocument);\n return this;\n }\n\n public value(guest: GuestType<T>): this {\n if (typeof guest === \"function\") {\n this.thePool.distribute(this.sourceDocument, new Guest(guest));\n } else {\n this.thePool.distribute(this.sourceDocument, guest);\n }\n return this;\n }\n}\n","import {\n GuestDisposableType,\n MaybeDisposableType,\n} from \"./GuestDisposable\";\nimport { GiveOptions, Guest, GuestType } from \"./Guest\";\n\n/**\n * @url https://kosukhin.github.io/patron.site/#/guest/guest-object\n */\nexport class GuestObject<T> implements GuestDisposableType<T> {\n public constructor(private baseGuest: GuestType<T>) { }\n\n public give(value: T, options?: GiveOptions): this {\n let guest = this.baseGuest;\n if (typeof guest === \"function\") {\n guest = new Guest(guest);\n }\n guest.give(value, options);\n return this;\n }\n\n public introduction() {\n if (typeof this.baseGuest === \"function\" || !this.baseGuest.introduction) {\n return \"guest\";\n }\n return this.baseGuest.introduction();\n }\n\n public disposed(value: T | null): boolean {\n const maybeDisposable = this.baseGuest as MaybeDisposableType;\n return maybeDisposable.disposed ? maybeDisposable.disposed(value) : false;\n }\n}\n","import { PatronPool } from \"../Patron/PatronPool\";\nimport { PoolType } from \"../Patron/PatronPool\";\nimport { give, GuestObjectType, GuestType, GiveOptions } from \"./Guest\";\n\n/**\n * @url https://kosukhin.github.io/patron.site/#/guest/guest-pool\n */\nexport class GuestPool<T> implements GuestObjectType<T>, PoolType<T> {\n private guests = new Set<GuestType<T>>();\n\n private patronPool: PatronPool<T>;\n\n public constructor(initiator: unknown) {\n this.patronPool = new PatronPool(initiator);\n }\n\n public give(value: T, options?: GiveOptions): this {\n this.deliverToGuests(value, options);\n this.patronPool.give(value, options);\n return this;\n }\n\n public add(guest: GuestType<T>): this {\n if (\n typeof guest === \"function\" ||\n !guest.introduction ||\n guest.introduction() === \"guest\"\n ) {\n this.guests.add(guest);\n }\n this.patronPool.add(guest);\n return this;\n }\n\n public remove(patron: GuestObjectType<T>): this {\n this.guests.delete(patron);\n this.patronPool.remove(patron);\n return this;\n }\n\n public distribute(receiving: T, possiblePatron: GuestObjectType<T>): this {\n this.add(possiblePatron);\n this.give(receiving);\n return this;\n }\n\n public size() {\n return this.patronPool.size() + this.guests.size;\n }\n\n private deliverToGuests(value: T, options?: GiveOptions) {\n this.guests.forEach((target) => {\n give(value, target, options);\n });\n this.guests.clear();\n }\n}\n","import { GuestCast } from \"./GuestCast\";\nimport { Source } from \"../Source/Source\";\nimport { Guest, GuestObjectType, GuestType } from \"./Guest\";\nimport { GuestObject } from \"./GuestObject\";\nimport { GuestPool } from \"./GuestPool\";\n\nexport interface ChainType<T = any> {\n result(guest: GuestObjectType<T>): this;\n resultArray(guest: GuestObjectType<T>): this;\n receiveKey<R>(key: string): GuestObjectType<R>;\n}\n\n/**\n * @url https://kosukhin.github.io/patron.site/#/guest/guest-chain\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 GuestCast(guestObject, (value: Record<string, unknown>) => {\n guestObject.give(Object.values(value) as T);\n }),\n );\n if (this.isChainFilled()) {\n this.theChain.value(\n new Guest((chain: Record<string, unknown>) => {\n this.filledChainPool.give(Object.values(chain));\n }),\n );\n }\n return this;\n }\n\n public result(guest: GuestType<T>) {\n const guestObject = new GuestObject(guest);\n if (this.isChainFilled()) {\n this.filledChainPool.add(guestObject);\n this.theChain.value(\n new Guest((chain) => {\n this.filledChainPool.give(chain);\n }),\n );\n } else {\n this.filledChainPool.add(guestObject);\n }\n return this;\n }\n\n public receiveKey<R>(key: string): GuestObjectType<R> {\n this.keysKnown.add(key);\n return new Guest((value) => {\n // Обернул в очередь чтобы можно было синхронно наполнить очередь известных ключей\n queueMicrotask(() => {\n this.theChain.value(\n new Guest((chain: Record<string, unknown>) => {\n this.keysFilled.add(key);\n const lastChain = {\n ...chain,\n [key]: value,\n };\n this.theChain.give(lastChain);\n if (this.isChainFilled()) {\n this.filledChainPool.give(lastChain);\n }\n }),\n );\n });\n });\n }\n\n private isChainFilled() {\n return (\n this.keysFilled.size > 0 && this.keysFilled.size === this.keysKnown.size\n );\n }\n}\n","import { PatronPool } from \"../Patron/PatronPool\";\nimport { GuestCast } from \"../Guest/GuestCast\";\nimport { give, GuestType } from \"./../Guest/Guest\";\nimport { Source, SourceType } from \"./Source\";\n\n/**\n * @url https://kosukhin.github.io/patron.site/#/source/source-empty\n */\nexport class SourceEmpty<T> implements SourceType<T> {\n private baseSource = new Source<T | null>(null);\n\n public value(guest: GuestType<T>) {\n this.baseSource.value(\n new GuestCast(guest as GuestType, (value) => {\n if (value !== null) {\n give(value, guest);\n }\n }),\n );\n return this;\n }\n\n public give(value: T): this {\n this.baseSource.give(value);\n return this;\n }\n\n public pool(): PatronPool<T> {\n return this.baseSource.pool();\n }\n}\n","import { FactoryType } from \"../Factory/Factory\";\nimport { give } from \"./Guest\";\nimport { GuestAwareType } from \"./GuestAware\";\nimport { GuestCast } from \"./GuestCast\";\nimport { GuestChain } from \"./GuestChain\";\nimport { GuestType } from \"./Guest\";\nimport { SourceEmpty } from \"../Source/SourceEmpty\";\n\n/**\n * @url https://kosukhin.github.io/patron.site/#/guest/guest-aware-sequence\n */\nexport class GuestAwareSequence<T, TG> implements GuestAwareType<TG[]> {\n public constructor(\n private baseSource: GuestAwareType<T[]>,\n private targetSourceFactory: FactoryType<GuestAwareType<TG>>\n ) { }\n\n public value(guest: GuestType<TG[]>) {\n const chain = new GuestChain<TG[]>();\n const sequenceSource = new SourceEmpty();\n const targetSource = this.targetSourceFactory.create(\n sequenceSource\n )\n\n this.baseSource.value(\n new GuestCast(guest, (value) => {\n let index = 0;\n\n const nextItemHandle = () => {\n if (value[index + 1] !== undefined) {\n index = index + 1;\n handle();\n } else {\n chain.resultArray(guest);\n }\n }\n\n function handle() {\n sequenceSource.give(value[index]);\n targetSource.value(chain.receiveKey('' + index));\n targetSource.value(nextItemHandle);\n }\n\n if (value[index] !== undefined) {\n handle();\n } else {\n give([], guest);\n }\n })\n );\n\n return this;\n }\n}\n","import { FactoryType } from \"../Factory/Factory\";\nimport { give } from \"./Guest\";\nimport { GuestAwareType } from \"./GuestAware\";\nimport { GuestCast } from \"./GuestCast\";\nimport { GuestChain } from \"./GuestChain\";\nimport { GuestType } from \"./Guest\";\nimport { GuestAware } from \"./GuestAware\";\n\n/**\n * @url https://kosukhin.github.io/patron.site/#/guest/guest-aware-map\n */\nexport class GuestAwareMap<T, TG> implements GuestAwareType<TG[]> {\n public constructor(\n private baseSource: GuestAwareType<T[]>,\n private targetSourceFactory: FactoryType<GuestAwareType<TG>>\n ) { }\n\n value(guest: GuestType<TG[]>) {\n const chain = new GuestChain();\n this.baseSource.value(\n new GuestCast(<GuestType>guest, (value) => {\n value.forEach((val, index) => {\n const targetSource = this.targetSourceFactory.create(\n new GuestAware((innerGuest) => {\n give(val, innerGuest);\n })\n )\n targetSource.value(chain.receiveKey('' + index));\n });\n })\n );\n chain.resultArray(<GuestType>guest);\n return this;\n }\n}\n","import { give, GuestType } from \"./Guest\";\nimport { GuestAwareType } from \"./GuestAware\";\nimport { GuestCast } from \"./GuestCast\";\n\n/**\n * @url https://kosukhin.github.io/patron.site/#/guest/guest-aware-race\n */\nexport class GuestAwareRace<T> implements GuestAwareType<T> {\n public constructor(private guestAwares: GuestAwareType[]) { }\n\n public value(guest: GuestType<T>): this {\n let connectedWithGuestAware: GuestAwareType | null = null;\n this.guestAwares.forEach(guestAware => {\n guestAware.value(\n new GuestCast(<GuestType>guest, (value) => {\n if (!connectedWithGuestAware || connectedWithGuestAware === guestAware) {\n give(value as T, guest);\n connectedWithGuestAware = guestAware\n }\n })\n )\n });\n\n return this;\n }\n}\n","import { SourceType } from \"../Source/Source\";\nimport { SourceEmpty } from \"../Source/SourceEmpty\";\nimport { GuestType } from \"./Guest\";\nimport { GuestAwareType } from \"./GuestAware\";\n\n/**\n * @url https://kosukhin.github.io/patron.site/#/utils/action-type\n */\nexport interface ActionType<P = any> {\n do(config: P): this;\n}\n\nexport interface GuestAwareAcitveType<R = unknown, T = unknown> extends GuestAwareType<T>, ActionType<R> {\n}\n\n/**\n * @url https://kosukhin.github.io/patron.site/#/guest/guest-aware-active\n */\nexport class GuestAwareActive<R, T> implements GuestAwareAcitveType<R, T> {\n private source = new SourceEmpty<T>();\n\n public constructor(private configExecutor: (config: R, source: SourceType<T>) => void) { }\n\n public do(config: R): this {\n this.configExecutor(config, this.source);\n return this;\n }\n\n public value(guest: GuestType<T>): this {\n this.source.value(guest);\n return this;\n }\n}\n","import { GuestObjectType } from \"./Guest\";\n\nexport interface GuestValueType<T = any> extends GuestObjectType<T> {\n value(): T;\n}\n\n/**\n * @url https://kosukhin.github.io/patron.site/#/guest/guest-sync\n */\nexport class GuestSync<T> implements GuestValueType<T> {\n public constructor(private theValue: T) { }\n\n public give(value: T): this {\n this.theValue = value;\n return this;\n }\n\n public value() {\n return this.theValue;\n }\n}\n","import { give, GiveOptions, GuestObjectType, GuestType } from \"./Guest\";\n\nexport interface GuestDisposableType<T = any> extends GuestObjectType<T> {\n disposed(value: T | null): boolean;\n}\n\nexport type MaybeDisposableType<T = any> = Partial<GuestDisposableType<T>>;\n\n/**\n * @url https://kosukhin.github.io/patron.site/#/guest/guest-disposable\n */\nexport class GuestDisposable<T> implements GuestDisposableType<T> {\n public constructor(\n private guest: GuestType,\n private disposeCheck: (value: T | null) => boolean,\n ) { }\n\n public disposed(value: T | null): boolean {\n return this.disposeCheck(value);\n }\n\n public give(value: T, options?: GiveOptions): this {\n give(value, this.guest, options);\n return this;\n }\n}\n","import { GuestDisposableType } from \"../Guest/GuestDisposable\";\nimport { give, GiveOptions, GuestType } from \"../Guest/Guest\";\n\n/**\n * @url https://kosukhin.github.io/patron.site/#/patron\n */\nexport class Patron<T> implements GuestDisposableType<T> {\n public constructor(private willBePatron: GuestType<T>) { }\n\n public introduction() {\n return \"patron\" as const;\n }\n\n public give(value: T, options?: GiveOptions): this {\n give(value, this.willBePatron, options);\n return this;\n }\n\n public disposed(value: T | null): boolean {\n const maybeDisposable = this.willBePatron as GuestDisposableType;\n return maybeDisposable?.disposed?.(value) || false;\n }\n}\n","import { PoolType } from \"./PatronPool\";\nimport { give, GuestType, GiveOptions } from \"../Guest/Guest\";\nimport {\n GuestDisposableType,\n MaybeDisposableType,\n} from \"../Guest/GuestDisposable\";\n\ntype PoolAware = {\n pool?: PoolType;\n};\n\n/**\n * @url https://kosukhin.github.io/patron.site/#/patron/patron-once\n */\nexport class PatronOnce<T> implements GuestDisposableType<T> {\n private received = false;\n\n public constructor(private baseGuest: GuestType<T>) { }\n\n public introduction() {\n return \"patron\" as const;\n }\n\n public give(value: T, options?: GiveOptions): this {\n if (!this.received) {\n give(value, this.baseGuest, options);\n }\n const data = options?.data as PoolAware;\n if (data?.pool) {\n data.pool.remove(this);\n }\n return this;\n }\n\n public disposed(value: T | null): boolean {\n const maybeDisposable = this.baseGuest as MaybeDisposableType;\n return maybeDisposable.disposed ? maybeDisposable.disposed(value) : false;\n }\n}\n","import { give, GuestType } from \"../Guest/Guest\";\nimport { GuestAwareType } from \"../Guest/GuestAware\";\nimport { PatronPool } from \"../Patron/PatronPool\";\nimport { SourceType } from \"./Source\";\n\n/**\n * @url https://kosukhin.github.io/patron.site/#/source-dynamic\n */\nexport class SourceDynamic<T = unknown> implements SourceType<T> {\n public constructor(\n private baseGuest: GuestType<T>,\n private baseGuestAware: GuestAwareType<T>,\n ) { }\n\n public value(guest: GuestType<T>) {\n this.baseGuestAware.value(guest);\n return this;\n }\n\n public give(value: T) {\n give(value, this.baseGuest);\n return this;\n }\n\n public pool(): PatronPool<T> {\n throw Error('No pool in SourceDynamic');\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\n/**\n * @url https://kosukhin.github.io/patron.site/#/utils/factory\n */\nexport class Factory<T> implements FactoryType<T> {\n public constructor(\n private constructorFn: Prototyped<T>,\n private factories: Record<string, unknown> = {},\n ) { }\n\n public create<R extends unknown[], CT = null>(\n ...args: R\n ): CT extends null ? T : CT {\n return new (this.constructorFn as Constructable<T>)(\n ...args,\n this.factories,\n ) as CT extends null ? T : CT;\n }\n}\n","import { FactoryType } from \"./Factory\";\n\n/**\n * @url https://kosukhin.github.io/patron.site/#/utils/module\n */\nexport class Module<T> implements FactoryType<T> {\n public constructor(private buildingFn: (...args: any[]) => T) { }\n\n public create<R extends unknown[], CT = null>(...args: R): CT extends null ? T : CT {\n return this.buildingFn(...args) as CT extends null ? T : CT;\n }\n}\n"],"names":["__publicField"],"mappings":"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"}
1
+ {"version":3,"file":"patron.cjs","sources":["../src/Guest/GuestAware.ts","../src/Guest/Guest.ts","../src/Guest/GuestCast.ts","../src/Patron/PatronPool.ts","../src/Source/Source.ts","../src/Guest/GuestObject.ts","../src/Guest/GuestPool.ts","../src/Guest/GuestChain.ts","../src/Source/SourceEmpty.ts","../src/Guest/GuestAwareSequence.ts","../src/Guest/GuestAwareMap.ts","../src/Guest/GuestAwareRace.ts","../src/Guest/GuestAwareActive.ts","../src/Guest/GuestSync.ts","../src/Guest/GuestDisposable.ts","../src/Patron/Patron.ts","../src/Patron/PatronOnce.ts","../src/Source/SourceDynamic.ts","../src/Factory/Factory.ts","../src/Factory/Module.ts"],"sourcesContent":["import { GuestType } from \"./Guest\";\n\nexport type GuestAwareExecutorType<T> = (guest: GuestType<T>) => unknown;\n\nexport interface GuestAwareObjectType<T> {\n value: GuestAwareExecutorType<T>\n}\n\nexport type GuestAwareType<T = any> = GuestAwareExecutorType<T> | GuestAwareObjectType<T>\n\nexport function value<T>(guestAware: GuestAwareType<T>, guest: GuestType<T>) {\n if (typeof guestAware === 'function') {\n return guestAware(guest);\n } else {\n return guestAware.value(guest);\n }\n}\n\n/**\n * @url https://kosukhin.github.io/patron.site/#/guest/guest-aware\n */\nexport class GuestAware<T = any> implements GuestAwareObjectType<T> {\n public constructor(private guestAware: GuestAwareType<T>) { }\n\n public value(guest: GuestType<T>): GuestType<T> {\n value(this.guestAware, guest);\n return guest;\n }\n}\n","type GuestIntroduction = \"guest\" | \"patron\";\n\nexport interface GiveOptions {\n data?: unknown;\n}\n\nexport type GuestExecutorType<T = any> = (\n value: T,\n options?: GiveOptions,\n) => void;\n\nexport interface GuestObjectType<T = any> {\n give(value: T, options?: GiveOptions): this;\n introduction?(): GuestIntroduction;\n}\n\nexport type GuestType<T = any> = GuestExecutorType<T> | GuestObjectType<T>;\n\n/**\n * @url https://kosukhin.github.io/patron.site/#/utils/give\n */\nexport function give<T>(data: T, guest: GuestType<T>, options?: GiveOptions) {\n if (typeof guest === \"function\") {\n guest(data, options);\n } else {\n guest.give(data, options);\n }\n}\n\n/**\n * @url https://kosukhin.github.io/patron.site/#/guest\n */\nexport class Guest<T> implements GuestObjectType<T> {\n public constructor(private receiver: GuestExecutorType<T>) { }\n\n public give(value: T, options?: GiveOptions) {\n this.receiver(value, options);\n return this;\n }\n}\n","import {\n GuestDisposableType,\n MaybeDisposableType,\n} from \"./GuestDisposable\";\nimport { give, GiveOptions, GuestType } from \"./Guest\";\n\n/**\n * @url https://kosukhin.github.io/patron.site/#/guest/guest-cast\n */\nexport class GuestCast<T> implements GuestDisposableType<T> {\n public constructor(\n private sourceGuest: GuestType<any>,\n private targetGuest: GuestType<T>,\n ) { }\n\n public introduction() {\n if (typeof this.sourceGuest === \"function\") {\n return \"guest\";\n }\n if (!this.sourceGuest.introduction) {\n return \"guest\";\n }\n return this.sourceGuest.introduction();\n }\n\n public give(value: T, options?: GiveOptions): this {\n give(value, this.targetGuest, options);\n return this;\n }\n\n public disposed(value: T | null): boolean {\n const maybeDisposable = this.sourceGuest as MaybeDisposableType;\n return maybeDisposable.disposed ? maybeDisposable.disposed(value) : false;\n }\n}\n","import { GuestDisposableType } from \"../Guest/GuestDisposable\";\nimport { give, GuestObjectType, GuestType, GiveOptions } from \"../Guest/Guest\";\n\nconst poolSets = new Map<PoolType, Set<GuestObjectType>>();\n\n/**\n * @url https://kosukhin.github.io/patron.site/#/utils/remove-patron-from-pools\n */\nexport const removePatronFromPools = (patron: GuestObjectType) => {\n poolSets.forEach((pool) => {\n pool.delete(patron);\n });\n};\n\n/**\n * @url https://kosukhin.github.io/patron.site/#/utils/is-patron-in-pools\n */\nexport const isPatronInPools = (patron: GuestObjectType) => {\n let inPool = false;\n poolSets.forEach((pool) => {\n if (!inPool) {\n inPool = pool.has(patron);\n }\n });\n return inPool;\n};\n\nexport interface PoolType<T = any> extends GuestObjectType<T> {\n add(guest: GuestObjectType<T>): this;\n distribute(receiving: T, possiblePatron: GuestObjectType<T>): this;\n remove(patron: GuestObjectType<T>): this;\n size(): number;\n}\n\n/**\n * @url https://kosukhin.github.io/patron.site/#/patron/patron-pool\n */\nexport class PatronPool<T> implements PoolType<T> {\n private patrons: Set<GuestObjectType<T>>;\n\n public give: (value: T, options?: GiveOptions) => this;\n\n public constructor(private initiator: unknown) {\n this.patrons = new Set<GuestObjectType<T>>();\n poolSets.set(this, this.patrons);\n let lastMicrotask: (() => void) | null = null;\n const doReceive = (value: T, options?: GiveOptions) => {\n this.patrons.forEach((target) => {\n this.sendValueToGuest(value, target, options);\n });\n };\n this.give = (value: T, options?: GiveOptions) => {\n const currentMicroTask = () => {\n if (currentMicroTask === lastMicrotask) {\n doReceive(value, options);\n }\n };\n lastMicrotask = currentMicroTask;\n queueMicrotask(currentMicroTask);\n return this;\n };\n }\n\n public size(): number {\n return this.patrons.size;\n }\n\n public add(shouldBePatron: GuestType<T>) {\n if (!shouldBePatron) {\n throw new Error(\"PatronPool add method received nothing!\");\n }\n if (\n typeof shouldBePatron !== \"function\" &&\n shouldBePatron.introduction &&\n shouldBePatron.introduction() === \"patron\"\n ) {\n this.patrons.add(shouldBePatron);\n }\n return this;\n }\n\n public remove(patron: GuestObjectType<T>) {\n this.patrons.delete(patron);\n return this;\n }\n\n public distribute(receiving: T, possiblePatron: GuestType<T>): this {\n this.add(possiblePatron);\n this.sendValueToGuest(receiving, possiblePatron, {});\n return this;\n }\n\n private sendValueToGuest(\n value: T,\n guest: GuestType<T>,\n options?: GiveOptions,\n ) {\n const isDisposed = this.guestDisposed(value, guest);\n\n if (!isDisposed) {\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\n private guestDisposed(value: T, guest: GuestType<T>) {\n if ((guest as GuestDisposableType).disposed?.(value)) {\n this.remove(guest as GuestObjectType);\n return true;\n }\n\n return false;\n }\n}\n","import { Guest, GuestObjectType, GuestType } from \"../Guest/Guest\";\nimport { GuestAwareObjectType } from \"../Guest/GuestAware\";\nimport { PatronPool } from \"../Patron/PatronPool\";\n\nexport interface PoolAware<T = any> {\n pool(): PatronPool<T>;\n}\n\n/**\n * @url https://kosukhin.github.io/patron.site/#/source\n */\nexport type SourceType<T = any> = GuestAwareObjectType<T> &\n GuestObjectType<T> &\n PoolAware<T>;\n\nexport class Source<T> implements SourceType<T> {\n private thePool = new PatronPool(this);\n\n public constructor(private sourceDocument: T) { }\n\n public pool() {\n return this.thePool;\n }\n\n public give(value: T): this {\n this.sourceDocument = value;\n this.thePool.give(this.sourceDocument);\n return this;\n }\n\n public value(guest: GuestType<T>): this {\n if (typeof guest === \"function\") {\n this.thePool.distribute(this.sourceDocument, new Guest(guest));\n } else {\n this.thePool.distribute(this.sourceDocument, guest);\n }\n return this;\n }\n}\n","import {\n GuestDisposableType,\n MaybeDisposableType,\n} from \"./GuestDisposable\";\nimport { GiveOptions, Guest, GuestType } from \"./Guest\";\n\n/**\n * @url https://kosukhin.github.io/patron.site/#/guest/guest-object\n */\nexport class GuestObject<T> implements GuestDisposableType<T> {\n public constructor(private baseGuest: GuestType<T>) { }\n\n public give(value: T, options?: GiveOptions): this {\n let guest = this.baseGuest;\n if (typeof guest === \"function\") {\n guest = new Guest(guest);\n }\n guest.give(value, options);\n return this;\n }\n\n public introduction() {\n if (typeof this.baseGuest === \"function\" || !this.baseGuest.introduction) {\n return \"guest\";\n }\n return this.baseGuest.introduction();\n }\n\n public disposed(value: T | null): boolean {\n const maybeDisposable = this.baseGuest as MaybeDisposableType;\n return maybeDisposable.disposed ? maybeDisposable.disposed(value) : false;\n }\n}\n","import { PatronPool } from \"../Patron/PatronPool\";\nimport { PoolType } from \"../Patron/PatronPool\";\nimport { give, GuestObjectType, GuestType, GiveOptions } from \"./Guest\";\n\n/**\n * @url https://kosukhin.github.io/patron.site/#/guest/guest-pool\n */\nexport class GuestPool<T> implements GuestObjectType<T>, PoolType<T> {\n private guests = new Set<GuestType<T>>();\n\n private patronPool: PatronPool<T>;\n\n public constructor(initiator: unknown) {\n this.patronPool = new PatronPool(initiator);\n }\n\n public give(value: T, options?: GiveOptions): this {\n this.deliverToGuests(value, options);\n this.patronPool.give(value, options);\n return this;\n }\n\n public add(guest: GuestType<T>): this {\n if (\n typeof guest === \"function\" ||\n !guest.introduction ||\n guest.introduction() === \"guest\"\n ) {\n this.guests.add(guest);\n }\n this.patronPool.add(guest);\n return this;\n }\n\n public remove(patron: GuestObjectType<T>): this {\n this.guests.delete(patron);\n this.patronPool.remove(patron);\n return this;\n }\n\n public distribute(receiving: T, possiblePatron: GuestObjectType<T>): this {\n this.add(possiblePatron);\n this.give(receiving);\n return this;\n }\n\n public size() {\n return this.patronPool.size() + this.guests.size;\n }\n\n private deliverToGuests(value: T, options?: GiveOptions) {\n this.guests.forEach((target) => {\n give(value, target, options);\n });\n this.guests.clear();\n }\n}\n","import { GuestCast } from \"./GuestCast\";\nimport { Source } from \"../Source/Source\";\nimport { Guest, GuestObjectType, GuestType } from \"./Guest\";\nimport { GuestObject } from \"./GuestObject\";\nimport { GuestPool } from \"./GuestPool\";\n\nexport interface ChainType<T = any> {\n result(guest: GuestObjectType<T>): this;\n resultArray(guest: GuestObjectType<T>): this;\n receiveKey<R>(key: string): GuestObjectType<R>;\n}\n\n/**\n * @url https://kosukhin.github.io/patron.site/#/guest/guest-chain\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 GuestCast(guestObject, (value: Record<string, unknown>) => {\n guestObject.give(Object.values(value) as T);\n }),\n );\n if (this.isChainFilled()) {\n this.theChain.value(\n new Guest((chain: Record<string, unknown>) => {\n this.filledChainPool.give(Object.values(chain));\n }),\n );\n }\n return this;\n }\n\n public result(guest: GuestType<T>) {\n const guestObject = new GuestObject(guest);\n if (this.isChainFilled()) {\n this.filledChainPool.add(guestObject);\n this.theChain.value(\n new Guest((chain) => {\n this.filledChainPool.give(chain);\n }),\n );\n } else {\n this.filledChainPool.add(guestObject);\n }\n return this;\n }\n\n public receiveKey<R>(key: string): GuestObjectType<R> {\n this.keysKnown.add(key);\n return new Guest((value) => {\n // Обернул в очередь чтобы можно было синхронно наполнить очередь известных ключей\n queueMicrotask(() => {\n this.theChain.value(\n new Guest((chain: Record<string, unknown>) => {\n this.keysFilled.add(key);\n const lastChain = {\n ...chain,\n [key]: value,\n };\n this.theChain.give(lastChain);\n if (this.isChainFilled()) {\n this.filledChainPool.give(lastChain);\n }\n }),\n );\n });\n });\n }\n\n private isChainFilled() {\n return (\n this.keysFilled.size > 0 && this.keysFilled.size === this.keysKnown.size\n );\n }\n}\n","import { PatronPool } from \"../Patron/PatronPool\";\nimport { GuestCast } from \"../Guest/GuestCast\";\nimport { give, GuestType } from \"./../Guest/Guest\";\nimport { Source, SourceType } from \"./Source\";\n\n/**\n * @url https://kosukhin.github.io/patron.site/#/source/source-empty\n */\nexport class SourceEmpty<T> implements SourceType<T> {\n private baseSource = new Source<T | null>(null);\n\n public value(guest: GuestType<T>) {\n this.baseSource.value(\n new GuestCast(guest as GuestType, (value) => {\n if (value !== null) {\n give(value, guest);\n }\n }),\n );\n return this;\n }\n\n public give(value: T): this {\n this.baseSource.give(value);\n return this;\n }\n\n public pool(): PatronPool<T> {\n return this.baseSource.pool();\n }\n}\n","import { FactoryType } from \"../Factory/Factory\";\nimport { give } from \"./Guest\";\nimport { GuestAwareObjectType, GuestAwareType, value } from \"./GuestAware\";\nimport { GuestCast } from \"./GuestCast\";\nimport { GuestChain } from \"./GuestChain\";\nimport { GuestType } from \"./Guest\";\nimport { SourceEmpty } from \"../Source/SourceEmpty\";\n\n/**\n * @url https://kosukhin.github.io/patron.site/#/guest/guest-aware-sequence\n */\nexport class GuestAwareSequence<T, TG> implements GuestAwareObjectType<TG[]> {\n public constructor(\n private baseSource: GuestAwareType<T[]>,\n private targetSourceFactory: FactoryType<GuestAwareType<TG>>\n ) { }\n\n public value(guest: GuestType<TG[]>) {\n const chain = new GuestChain<TG[]>();\n const sequenceSource = new SourceEmpty();\n const targetSource = this.targetSourceFactory.create(\n sequenceSource\n )\n\n value(\n this.baseSource,\n new GuestCast(guest, (theValue) => {\n let index = 0;\n\n const nextItemHandle = () => {\n if (theValue[index + 1] !== undefined) {\n index = index + 1;\n handle();\n } else {\n chain.resultArray(guest);\n }\n }\n\n function handle() {\n sequenceSource.give(theValue[index]);\n value(targetSource, chain.receiveKey('' + index));\n value(targetSource, nextItemHandle);\n }\n\n if (theValue[index] !== undefined) {\n handle();\n } else {\n give([], guest);\n }\n })\n );\n return this;\n }\n}\n","import { FactoryType } from \"../Factory/Factory\";\nimport { give } from \"./Guest\";\nimport { GuestAwareObjectType, GuestAwareType, value } from \"./GuestAware\";\nimport { GuestCast } from \"./GuestCast\";\nimport { GuestChain } from \"./GuestChain\";\nimport { GuestType } from \"./Guest\";\nimport { GuestAware } from \"./GuestAware\";\n\n/**\n * @url https://kosukhin.github.io/patron.site/#/guest/guest-aware-map\n */\nexport class GuestAwareMap<T, TG> implements GuestAwareObjectType<TG[]> {\n public constructor(\n private baseSource: GuestAwareType<T[]>,\n private targetSourceFactory: FactoryType<GuestAwareType<TG>>\n ) { }\n\n public value(guest: GuestType<TG[]>) {\n const chain = new GuestChain();\n value(\n this.baseSource,\n new GuestCast(<GuestType>guest, (theValue) => {\n theValue.forEach((val, index) => {\n const targetSource = this.targetSourceFactory.create(\n new GuestAware((innerGuest) => {\n give(val, innerGuest);\n })\n )\n value(targetSource, chain.receiveKey('' + index));\n });\n })\n )\n chain.resultArray(<GuestType>guest);\n return this;\n }\n}\n","import { give, GuestType } from \"./Guest\";\nimport { GuestAwareObjectType, GuestAwareType, value } from \"./GuestAware\";\nimport { GuestCast } from \"./GuestCast\";\n\n/**\n * @url https://kosukhin.github.io/patron.site/#/guest/guest-aware-race\n */\nexport class GuestAwareRace<T> implements GuestAwareObjectType<T> {\n public constructor(private guestAwares: GuestAwareType<T>[]) { }\n\n public value(guest: GuestType<T>): this {\n let connectedWithGuestAware: GuestAwareType | null = null;\n this.guestAwares.forEach(guestAware => {\n value(\n guestAware,\n new GuestCast(<GuestType>guest, (value) => {\n if (!connectedWithGuestAware || connectedWithGuestAware === guestAware) {\n give(value as T, guest);\n connectedWithGuestAware = guestAware\n }\n })\n );\n });\n return this;\n }\n}\n","import { SourceType } from \"../Source/Source\";\nimport { SourceEmpty } from \"../Source/SourceEmpty\";\nimport { GuestType } from \"./Guest\";\nimport { GuestAwareObjectType } from \"./GuestAware\";\n\n/**\n * @url https://kosukhin.github.io/patron.site/#/utils/action-type\n */\nexport interface ActionType<P = any> {\n do(config: P): this;\n}\n\nexport interface GuestAwareAcitveType<R = unknown, T = unknown> extends GuestAwareObjectType<T>, ActionType<R> {\n}\n\n/**\n * @url https://kosukhin.github.io/patron.site/#/guest/guest-aware-active\n */\nexport class GuestAwareActive<R, T> implements GuestAwareAcitveType<R, T> {\n private source = new SourceEmpty<T>();\n\n public constructor(private configExecutor: (config: R, source: SourceType<T>) => void) { }\n\n public do(config: R): this {\n this.configExecutor(config, this.source);\n return this;\n }\n\n public value(guest: GuestType<T>): this {\n this.source.value(guest);\n return this;\n }\n}\n","import { GuestObjectType } from \"./Guest\";\n\nexport interface GuestValueType<T = any> extends GuestObjectType<T> {\n value(): T;\n}\n\n/**\n * @url https://kosukhin.github.io/patron.site/#/guest/guest-sync\n */\nexport class GuestSync<T> implements GuestValueType<T> {\n public constructor(private theValue: T) { }\n\n public give(value: T): this {\n this.theValue = value;\n return this;\n }\n\n public value() {\n return this.theValue;\n }\n}\n","import { give, GiveOptions, GuestObjectType, GuestType } from \"./Guest\";\n\nexport interface GuestDisposableType<T = any> extends GuestObjectType<T> {\n disposed(value: T | null): boolean;\n}\n\nexport type MaybeDisposableType<T = any> = Partial<GuestDisposableType<T>>;\n\n/**\n * @url https://kosukhin.github.io/patron.site/#/guest/guest-disposable\n */\nexport class GuestDisposable<T> implements GuestDisposableType<T> {\n public constructor(\n private guest: GuestType,\n private disposeCheck: (value: T | null) => boolean,\n ) { }\n\n public disposed(value: T | null): boolean {\n return this.disposeCheck(value);\n }\n\n public give(value: T, options?: GiveOptions): this {\n give(value, this.guest, options);\n return this;\n }\n}\n","import { GuestDisposableType } from \"../Guest/GuestDisposable\";\nimport { give, GiveOptions, GuestType } from \"../Guest/Guest\";\n\n/**\n * @url https://kosukhin.github.io/patron.site/#/patron\n */\nexport class Patron<T> implements GuestDisposableType<T> {\n public constructor(private willBePatron: GuestType<T>) { }\n\n public introduction() {\n return \"patron\" as const;\n }\n\n public give(value: T, options?: GiveOptions): this {\n give(value, this.willBePatron, options);\n return this;\n }\n\n public disposed(value: T | null): boolean {\n const maybeDisposable = this.willBePatron as GuestDisposableType;\n return maybeDisposable?.disposed?.(value) || false;\n }\n}\n","import { PoolType } from \"./PatronPool\";\nimport { give, GuestType, GiveOptions } from \"../Guest/Guest\";\nimport {\n GuestDisposableType,\n MaybeDisposableType,\n} from \"../Guest/GuestDisposable\";\n\ntype PoolAware = {\n pool?: PoolType;\n};\n\n/**\n * @url https://kosukhin.github.io/patron.site/#/patron/patron-once\n */\nexport class PatronOnce<T> implements GuestDisposableType<T> {\n private received = false;\n\n public constructor(private baseGuest: GuestType<T>) { }\n\n public introduction() {\n return \"patron\" as const;\n }\n\n public give(value: T, options?: GiveOptions): this {\n if (!this.received) {\n give(value, this.baseGuest, options);\n }\n const data = options?.data as PoolAware;\n if (data?.pool) {\n data.pool.remove(this);\n }\n return this;\n }\n\n public disposed(value: T | null): boolean {\n const maybeDisposable = this.baseGuest as MaybeDisposableType;\n return maybeDisposable.disposed ? maybeDisposable.disposed(value) : false;\n }\n}\n","import { give, GuestType } from \"../Guest/Guest\";\nimport { GuestAwareType, value } from \"../Guest/GuestAware\";\nimport { PatronPool } from \"../Patron/PatronPool\";\nimport { SourceType } from \"./Source\";\n\n/**\n * @url https://kosukhin.github.io/patron.site/#/source-dynamic\n */\nexport class SourceDynamic<T = unknown> implements SourceType<T> {\n public constructor(\n private baseGuest: GuestType<T>,\n private baseGuestAware: GuestAwareType<T>,\n ) { }\n\n public value(guest: GuestType<T>) {\n value(this.baseGuestAware, guest);\n return this;\n }\n\n public give(value: T) {\n give(value, this.baseGuest);\n return this;\n }\n\n public pool(): PatronPool<T> {\n throw Error('No pool in SourceDynamic');\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\n/**\n * @url https://kosukhin.github.io/patron.site/#/utils/factory\n */\nexport class Factory<T> implements FactoryType<T> {\n public constructor(\n private constructorFn: Prototyped<T>,\n private factories: Record<string, unknown> = {},\n ) { }\n\n public create<R extends unknown[], CT = null>(\n ...args: R\n ): CT extends null ? T : CT {\n return new (this.constructorFn as Constructable<T>)(\n ...args,\n this.factories,\n ) as CT extends null ? T : CT;\n }\n}\n","import { FactoryType } from \"./Factory\";\n\n/**\n * @url https://kosukhin.github.io/patron.site/#/utils/module\n */\nexport class Module<T> implements FactoryType<T> {\n public constructor(private buildingFn: (...args: any[]) => T) { }\n\n public create<R extends unknown[], CT = null>(...args: R): CT extends null ? T : CT {\n return this.buildingFn(...args) as CT extends null ? T : CT;\n }\n}\n"],"names":["__publicField","value"],"mappings":"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"}
package/dist/patron.d.ts CHANGED
@@ -21,15 +21,18 @@ declare class Guest<T> implements GuestObjectType<T> {
21
21
  give(value: T, options?: GiveOptions): this;
22
22
  }
23
23
 
24
- interface GuestAwareType<T = any> {
25
- value(guest: GuestType<T>): unknown;
24
+ type GuestAwareExecutorType<T> = (guest: GuestType<T>) => unknown;
25
+ interface GuestAwareObjectType<T> {
26
+ value: GuestAwareExecutorType<T>;
26
27
  }
28
+ type GuestAwareType<T = any> = GuestAwareExecutorType<T> | GuestAwareObjectType<T>;
29
+ declare function value<T>(guestAware: GuestAwareType<T>, guest: GuestType<T>): unknown;
27
30
  /**
28
31
  * @url https://kosukhin.github.io/patron.site/#/guest/guest-aware
29
32
  */
30
- declare class GuestAware<T = any> implements GuestAwareType<T> {
31
- private guestReceiver;
32
- constructor(guestReceiver: (guest: GuestType<T>) => void);
33
+ declare class GuestAware<T = any> implements GuestAwareObjectType<T> {
34
+ private guestAware;
35
+ constructor(guestAware: GuestAwareType<T>);
33
36
  value(guest: GuestType<T>): GuestType<T>;
34
37
  }
35
38
 
@@ -52,7 +55,7 @@ declare class Factory<T> implements FactoryType<T> {
52
55
  /**
53
56
  * @url https://kosukhin.github.io/patron.site/#/guest/guest-aware-sequence
54
57
  */
55
- declare class GuestAwareSequence<T, TG> implements GuestAwareType<TG[]> {
58
+ declare class GuestAwareSequence<T, TG> implements GuestAwareObjectType<TG[]> {
56
59
  private baseSource;
57
60
  private targetSourceFactory;
58
61
  constructor(baseSource: GuestAwareType<T[]>, targetSourceFactory: FactoryType<GuestAwareType<TG>>);
@@ -62,7 +65,7 @@ declare class GuestAwareSequence<T, TG> implements GuestAwareType<TG[]> {
62
65
  /**
63
66
  * @url https://kosukhin.github.io/patron.site/#/guest/guest-aware-map
64
67
  */
65
- declare class GuestAwareMap<T, TG> implements GuestAwareType<TG[]> {
68
+ declare class GuestAwareMap<T, TG> implements GuestAwareObjectType<TG[]> {
66
69
  private baseSource;
67
70
  private targetSourceFactory;
68
71
  constructor(baseSource: GuestAwareType<T[]>, targetSourceFactory: FactoryType<GuestAwareType<TG>>);
@@ -72,9 +75,9 @@ declare class GuestAwareMap<T, TG> implements GuestAwareType<TG[]> {
72
75
  /**
73
76
  * @url https://kosukhin.github.io/patron.site/#/guest/guest-aware-race
74
77
  */
75
- declare class GuestAwareRace<T> implements GuestAwareType<T> {
78
+ declare class GuestAwareRace<T> implements GuestAwareObjectType<T> {
76
79
  private guestAwares;
77
- constructor(guestAwares: GuestAwareType[]);
80
+ constructor(guestAwares: GuestAwareType<T>[]);
78
81
  value(guest: GuestType<T>): this;
79
82
  }
80
83
 
@@ -114,7 +117,7 @@ interface PoolAware<T = any> {
114
117
  /**
115
118
  * @url https://kosukhin.github.io/patron.site/#/source
116
119
  */
117
- type SourceType<T = any> = GuestAwareType<T> & GuestObjectType<T> & PoolAware<T>;
120
+ type SourceType<T = any> = GuestAwareObjectType<T> & GuestObjectType<T> & PoolAware<T>;
118
121
  declare class Source<T> implements SourceType<T> {
119
122
  private sourceDocument;
120
123
  private thePool;
@@ -130,7 +133,7 @@ declare class Source<T> implements SourceType<T> {
130
133
  interface ActionType<P = any> {
131
134
  do(config: P): this;
132
135
  }
133
- interface GuestAwareAcitveType<R = unknown, T = unknown> extends GuestAwareType<T>, ActionType<R> {
136
+ interface GuestAwareAcitveType<R = unknown, T = unknown> extends GuestAwareObjectType<T>, ActionType<R> {
134
137
  }
135
138
  /**
136
139
  * @url https://kosukhin.github.io/patron.site/#/guest/guest-aware-active
@@ -283,4 +286,4 @@ declare class Module<T> implements FactoryType<T> {
283
286
  create<R extends unknown[], CT = null>(...args: R): CT extends null ? T : CT;
284
287
  }
285
288
 
286
- export { type ActionType, type ChainType, Factory, type FactoryType, type GiveOptions, Guest, GuestAware, type GuestAwareAcitveType, GuestAwareActive, GuestAwareMap, GuestAwareRace, GuestAwareSequence, type GuestAwareType, GuestCast, GuestChain, GuestDisposable, type GuestDisposableType, type GuestExecutorType, GuestObject, type GuestObjectType, GuestPool, GuestSync, type GuestType, type GuestValueType, type MaybeDisposableType, Module, Patron, PatronOnce, PatronPool, type PoolAware, type PoolType, Source, SourceDynamic, SourceEmpty, type SourceType, give, isPatronInPools, removePatronFromPools };
289
+ export { type ActionType, type ChainType, Factory, type FactoryType, type GiveOptions, Guest, GuestAware, type GuestAwareAcitveType, GuestAwareActive, type GuestAwareExecutorType, GuestAwareMap, type GuestAwareObjectType, GuestAwareRace, GuestAwareSequence, type GuestAwareType, GuestCast, GuestChain, GuestDisposable, type GuestDisposableType, type GuestExecutorType, GuestObject, type GuestObjectType, GuestPool, GuestSync, type GuestType, type GuestValueType, type MaybeDisposableType, Module, Patron, PatronOnce, PatronPool, type PoolAware, type PoolType, Source, SourceDynamic, SourceEmpty, type SourceType, give, isPatronInPools, removePatronFromPools, value };
package/dist/patron.js CHANGED
@@ -1,9 +1,16 @@
1
+ function value(guestAware, guest) {
2
+ if (typeof guestAware === "function") {
3
+ return guestAware(guest);
4
+ } else {
5
+ return guestAware.value(guest);
6
+ }
7
+ }
1
8
  class GuestAware {
2
- constructor(guestReceiver) {
3
- this.guestReceiver = guestReceiver;
9
+ constructor(guestAware) {
10
+ this.guestAware = guestAware;
4
11
  }
5
12
  value(guest) {
6
- this.guestReceiver(guest);
13
+ value(this.guestAware, guest);
7
14
  return guest;
8
15
  }
9
16
  }
@@ -329,11 +336,12 @@ class GuestAwareSequence {
329
336
  const targetSource = this.targetSourceFactory.create(
330
337
  sequenceSource
331
338
  );
332
- this.baseSource.value(
333
- new GuestCast(guest, (value) => {
339
+ value(
340
+ this.baseSource,
341
+ new GuestCast(guest, (theValue) => {
334
342
  let index = 0;
335
343
  const nextItemHandle = () => {
336
- if (value[index + 1] !== void 0) {
344
+ if (theValue[index + 1] !== void 0) {
337
345
  index = index + 1;
338
346
  handle();
339
347
  } else {
@@ -341,11 +349,11 @@ class GuestAwareSequence {
341
349
  }
342
350
  };
343
351
  function handle() {
344
- sequenceSource.give(value[index]);
345
- targetSource.value(chain.receiveKey("" + index));
346
- targetSource.value(nextItemHandle);
352
+ sequenceSource.give(theValue[index]);
353
+ value(targetSource, chain.receiveKey("" + index));
354
+ value(targetSource, nextItemHandle);
347
355
  }
348
- if (value[index] !== void 0) {
356
+ if (theValue[index] !== void 0) {
349
357
  handle();
350
358
  } else {
351
359
  give([], guest);
@@ -363,15 +371,16 @@ class GuestAwareMap {
363
371
  }
364
372
  value(guest) {
365
373
  const chain = new GuestChain();
366
- this.baseSource.value(
367
- new GuestCast(guest, (value) => {
368
- value.forEach((val, index) => {
374
+ value(
375
+ this.baseSource,
376
+ new GuestCast(guest, (theValue) => {
377
+ theValue.forEach((val, index) => {
369
378
  const targetSource = this.targetSourceFactory.create(
370
379
  new GuestAware((innerGuest) => {
371
380
  give(val, innerGuest);
372
381
  })
373
382
  );
374
- targetSource.value(chain.receiveKey("" + index));
383
+ value(targetSource, chain.receiveKey("" + index));
375
384
  });
376
385
  })
377
386
  );
@@ -387,10 +396,11 @@ class GuestAwareRace {
387
396
  value(guest) {
388
397
  let connectedWithGuestAware = null;
389
398
  this.guestAwares.forEach((guestAware) => {
390
- guestAware.value(
391
- new GuestCast(guest, (value) => {
399
+ value(
400
+ guestAware,
401
+ new GuestCast(guest, (value2) => {
392
402
  if (!connectedWithGuestAware || connectedWithGuestAware === guestAware) {
393
- give(value, guest);
403
+ give(value2, guest);
394
404
  connectedWithGuestAware = guestAware;
395
405
  }
396
406
  })
@@ -495,11 +505,11 @@ class SourceDynamic {
495
505
  this.baseGuestAware = baseGuestAware;
496
506
  }
497
507
  value(guest) {
498
- this.baseGuestAware.value(guest);
508
+ value(this.baseGuestAware, guest);
499
509
  return this;
500
510
  }
501
- give(value) {
502
- give(value, this.baseGuest);
511
+ give(value2) {
512
+ give(value2, this.baseGuest);
503
513
  return this;
504
514
  }
505
515
  pool() {
@@ -529,5 +539,5 @@ class Module {
529
539
  }
530
540
  }
531
541
 
532
- export { Factory, Guest, GuestAware, GuestAwareActive, GuestAwareMap, GuestAwareRace, GuestAwareSequence, GuestCast, GuestChain, GuestDisposable, GuestObject, GuestPool, GuestSync, Module, Patron, PatronOnce, PatronPool, Source, SourceDynamic, SourceEmpty, give, isPatronInPools, removePatronFromPools };
542
+ export { Factory, Guest, GuestAware, GuestAwareActive, GuestAwareMap, GuestAwareRace, GuestAwareSequence, GuestCast, GuestChain, GuestDisposable, GuestObject, GuestPool, GuestSync, Module, Patron, PatronOnce, PatronPool, Source, SourceDynamic, SourceEmpty, give, isPatronInPools, removePatronFromPools, value };
533
543
  //# sourceMappingURL=patron.js.map