patron-oop 1.44.1 → 1.46.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.
Files changed (216) hide show
  1. package/CHANGELOG.md +20 -0
  2. package/dist/patron.cjs +359 -268
  3. package/dist/patron.cjs.map +1 -1
  4. package/dist/patron.d.ts +215 -150
  5. package/dist/patron.js +343 -261
  6. package/dist/patron.js.map +1 -1
  7. package/dist/patron.min.js +1 -1
  8. package/dist/patron.min.mjs +1 -1
  9. package/dist/patron.min.mjs.map +1 -1
  10. package/dist/patron.mjs +343 -261
  11. package/dist/patron.mjs.map +1 -1
  12. package/docs/README.md +3 -0
  13. package/docs/assets/css/base.css +42 -0
  14. package/docs/assets/favicon/android-icon-144x144.png +0 -0
  15. package/docs/assets/favicon/android-icon-192x192.png +0 -0
  16. package/docs/assets/favicon/android-icon-36x36.png +0 -0
  17. package/docs/assets/favicon/android-icon-48x48.png +0 -0
  18. package/docs/assets/favicon/android-icon-72x72.png +0 -0
  19. package/docs/assets/favicon/android-icon-96x96.png +0 -0
  20. package/docs/assets/favicon/apple-icon-114x114.png +0 -0
  21. package/docs/assets/favicon/apple-icon-120x120.png +0 -0
  22. package/docs/assets/favicon/apple-icon-144x144.png +0 -0
  23. package/docs/assets/favicon/apple-icon-152x152.png +0 -0
  24. package/docs/assets/favicon/apple-icon-180x180.png +0 -0
  25. package/docs/assets/favicon/apple-icon-57x57.png +0 -0
  26. package/docs/assets/favicon/apple-icon-60x60.png +0 -0
  27. package/docs/assets/favicon/apple-icon-72x72.png +0 -0
  28. package/docs/assets/favicon/apple-icon-76x76.png +0 -0
  29. package/docs/assets/favicon/apple-icon-precomposed.png +0 -0
  30. package/docs/assets/favicon/apple-icon.png +0 -0
  31. package/docs/assets/favicon/browserconfig.xml +2 -0
  32. package/docs/assets/favicon/favicon-16x16.png +0 -0
  33. package/docs/assets/favicon/favicon-32x32.png +0 -0
  34. package/docs/assets/favicon/favicon-96x96.png +0 -0
  35. package/docs/assets/favicon/favicon.ico +0 -0
  36. package/docs/assets/favicon/manifest.json +41 -0
  37. package/docs/assets/favicon/ms-icon-144x144.png +0 -0
  38. package/docs/assets/favicon/ms-icon-150x150.png +0 -0
  39. package/docs/assets/favicon/ms-icon-310x310.png +0 -0
  40. package/docs/assets/favicon/ms-icon-70x70.png +0 -0
  41. package/docs/assets/img/404.jpg +0 -0
  42. package/docs/assets/img/angular_16.jpg +0 -0
  43. package/docs/assets/img/angular_32.jpg +0 -0
  44. package/docs/assets/img/eo_16.jpg +0 -0
  45. package/docs/assets/img/eo_big.png +0 -0
  46. package/docs/assets/img/github_16.jpg +0 -0
  47. package/docs/assets/img/logo.jpg +0 -0
  48. package/docs/assets/img/philosofy/observable.jpg +0 -0
  49. package/docs/assets/img/philosofy/responsible.jpg +0 -0
  50. package/docs/assets/img/philosofy/result.jpg +0 -0
  51. package/docs/assets/img/philosofy/tell.jpg +0 -0
  52. package/docs/assets/img/react_16.jpg +0 -0
  53. package/docs/assets/img/react_32.jpg +0 -0
  54. package/docs/assets/img/vue_16.jpg +0 -0
  55. package/docs/assets/img/vue_32.jpg +0 -0
  56. package/docs/assets/js/components/linkDynamic.mjs +11 -0
  57. package/docs/assets/js/components/linkReloadable.mjs +13 -0
  58. package/docs/assets/js/entrypoints/compatibility.mjs +31 -0
  59. package/docs/assets/js/entrypoints/components.mjs +2 -0
  60. package/docs/assets/js/entrypoints/examples.mjs +25 -0
  61. package/docs/assets/js/entrypoints/factory.mjs +20 -0
  62. package/docs/assets/js/entrypoints/guest.mjs +61 -0
  63. package/docs/assets/js/entrypoints/index.mjs +110 -0
  64. package/docs/assets/js/entrypoints/integrations.mjs +36 -0
  65. package/docs/assets/js/entrypoints/patron.mjs +46 -0
  66. package/docs/assets/js/entrypoints/source.mjs +76 -0
  67. package/docs/assets/js/entrypoints/terminology.mjs +51 -0
  68. package/docs/assets/js/entrypoints/utils.mjs +61 -0
  69. package/docs/assets/js/lib/StyleFetched.mjs +14 -0
  70. package/docs/assets/js/routing.mjs +110 -0
  71. package/docs/assets/schemes/dip.html +28 -0
  72. package/docs/favicon.ico +0 -0
  73. package/docs/index-dev.html +346 -0
  74. package/docs/index.html +346 -0
  75. package/docs/manifest.json +41 -0
  76. package/docs/pages/404.html +9 -0
  77. package/docs/pages/common/layout.html +17 -0
  78. package/docs/pages/compatibility/dip.html +82 -0
  79. package/docs/pages/compatibility/elegant-objects.html +373 -0
  80. package/docs/pages/compatibility/layout.html +17 -0
  81. package/docs/pages/examples/errors.html +167 -0
  82. package/docs/pages/examples/index.html +10 -0
  83. package/docs/pages/examples.html +41 -0
  84. package/docs/pages/factory/index.html +18 -0
  85. package/docs/pages/factory.html +36 -0
  86. package/docs/pages/guest/guest-applied.html +51 -0
  87. package/docs/pages/guest/guest-cast.html +219 -0
  88. package/docs/pages/guest/guest-disposable.html +147 -0
  89. package/docs/pages/guest/guest-executor-applied.html +65 -0
  90. package/docs/pages/guest/guest-object.html +101 -0
  91. package/docs/pages/guest/guest-pool.html +107 -0
  92. package/docs/pages/guest/guest-sync.html +66 -0
  93. package/docs/pages/guest/index.html +115 -0
  94. package/docs/pages/guest.html +59 -0
  95. package/docs/pages/index.html +72 -0
  96. package/docs/pages/integrations/angular.html +5 -0
  97. package/docs/pages/integrations/layout.html +17 -0
  98. package/docs/pages/integrations/react.html +7 -0
  99. package/docs/pages/integrations/vue.html +102 -0
  100. package/docs/pages/patron/index.html +140 -0
  101. package/docs/pages/patron/patron-applied.html +66 -0
  102. package/docs/pages/patron/patron-executor-applied.html +94 -0
  103. package/docs/pages/patron/patron-once.html +110 -0
  104. package/docs/pages/patron/patron-pool.html +99 -0
  105. package/docs/pages/patron.html +50 -0
  106. package/docs/pages/philosofy.html +210 -0
  107. package/docs/pages/source/index.html +167 -0
  108. package/docs/pages/source/source-active.html +113 -0
  109. package/docs/pages/source/source-all.html +129 -0
  110. package/docs/pages/source/source-applied.html +73 -0
  111. package/docs/pages/source/source-dynamic.html +93 -0
  112. package/docs/pages/source/source-executor-applied.html +64 -0
  113. package/docs/pages/source/source-map.html +192 -0
  114. package/docs/pages/source/source-once.html +73 -0
  115. package/docs/pages/source/source-race.html +171 -0
  116. package/docs/pages/source/source-sequence.html +160 -0
  117. package/docs/pages/source/source-with-pool.html +102 -0
  118. package/docs/pages/source/source.html +167 -0
  119. package/docs/pages/source.html +68 -0
  120. package/docs/pages/terminology/guest.html +14 -0
  121. package/docs/pages/terminology/index.html +6 -0
  122. package/docs/pages/terminology/introduction.html +25 -0
  123. package/docs/pages/terminology/patron.html +10 -0
  124. package/docs/pages/terminology/source.html +55 -0
  125. package/docs/pages/terminology/visitor.html +19 -0
  126. package/docs/pages/terminology.html +53 -0
  127. package/docs/pages/utils/give.html +47 -0
  128. package/docs/pages/utils/index.html +24 -0
  129. package/docs/pages/utils/is-guest-aware.html +22 -0
  130. package/docs/pages/utils/is-guest.html +21 -0
  131. package/docs/pages/utils/is-patron-in-pools.html +53 -0
  132. package/docs/pages/utils/private.html +44 -0
  133. package/docs/pages/utils/remove-patron-from-pools.html +57 -0
  134. package/docs/pages/utils/value.html +47 -0
  135. package/docs/pages/utils.html +61 -0
  136. package/eslint.config.mjs +6 -0
  137. package/package.json +1 -1
  138. package/src/Guest/Guest.test.ts +11 -6
  139. package/src/Guest/Guest.ts +7 -14
  140. package/src/Guest/GuestApplied.test.ts +13 -0
  141. package/src/Guest/GuestApplied.ts +16 -0
  142. package/src/Guest/GuestCast.test.ts +4 -5
  143. package/src/Guest/GuestCast.ts +3 -10
  144. package/src/Guest/GuestDisposable.test.ts +13 -17
  145. package/src/Guest/GuestDisposable.ts +3 -3
  146. package/src/Guest/GuestExecutorApplied.test.ts +27 -0
  147. package/src/Guest/GuestExecutorApplied.ts +23 -0
  148. package/src/Guest/GuestObject.test.ts +6 -6
  149. package/src/Guest/GuestObject.ts +3 -3
  150. package/src/Guest/GuestPool.test.ts +5 -22
  151. package/src/Guest/GuestPool.ts +7 -8
  152. package/src/Guest/GuestSync.test.ts +2 -2
  153. package/src/Patron/Patron.test.ts +4 -5
  154. package/src/Patron/Patron.ts +11 -3
  155. package/src/Patron/PatronApplied.ts +22 -0
  156. package/src/Patron/PatronExecutorApplied.ts +25 -0
  157. package/src/Patron/PatronOnce.sourceEmpty.test.ts +2 -2
  158. package/src/Patron/PatronOnce.test.ts +2 -2
  159. package/src/Patron/PatronOnce.ts +3 -9
  160. package/src/Patron/PatronPool.test.ts +2 -1
  161. package/src/Patron/PatronPool.ts +22 -27
  162. package/src/Private/PrivateClass.modules.test.ts +11 -8
  163. package/src/Private/PrivateClass.test.ts +7 -6
  164. package/src/Source/Source.test.ts +9 -5
  165. package/src/Source/Source.ts +46 -30
  166. package/src/Source/SourceActive.test.ts +13 -0
  167. package/src/Source/SourceActive.ts +41 -0
  168. package/src/Source/SourceAll._asArray.test.ts +22 -0
  169. package/src/Source/SourceAll._twoValuesAfter.test.ts +19 -0
  170. package/src/Source/SourceAll._twoValuesBefore.test.ts +19 -0
  171. package/src/Source/SourceAll._withPatron.test.ts +25 -0
  172. package/src/{Guest/GuestAwareAll.ts → Source/SourceAll.ts} +11 -11
  173. package/src/Source/SourceApplied.test.ts +14 -0
  174. package/src/Source/SourceApplied.ts +23 -0
  175. package/src/Source/SourceDynamic.ofSource.test.ts +12 -12
  176. package/src/Source/SourceDynamic.test.ts +9 -9
  177. package/src/Source/SourceDynamic.ts +7 -7
  178. package/src/Source/SourceExecutorApplied.test.ts +30 -0
  179. package/src/Source/SourceExecutorApplied.ts +22 -0
  180. package/src/Source/SourceMap.defered.test.ts +46 -0
  181. package/src/Source/SourceMap.fn.test.ts +27 -0
  182. package/src/Source/SourceMap.test.ts +32 -0
  183. package/src/Source/SourceMap.ts +48 -0
  184. package/src/Source/SourceOnce.notcalled.test.ts +4 -4
  185. package/src/Source/SourceOnce.test.ts +4 -5
  186. package/src/Source/SourceOnce.ts +7 -13
  187. package/src/Source/SourceRace.test.ts +46 -0
  188. package/src/Source/SourceRace.ts +30 -0
  189. package/src/Source/SourceSequence.defered.test.ts +53 -0
  190. package/src/Source/SourceSequence.test.ts +30 -0
  191. package/src/{Guest/GuestAwareSequence.ts → Source/SourceSequence.ts} +14 -19
  192. package/src/Source/SourceWithPool.empty.test.ts +14 -0
  193. package/src/Source/SourceWithPool.test.ts +10 -0
  194. package/src/Source/SourceWithPool.ts +58 -0
  195. package/src/index.ts +13 -7
  196. package/test-utils/debounce.ts +11 -0
  197. package/test-utils/id.ts +1 -0
  198. package/test-utils/wait.ts +6 -3
  199. package/src/Guest/GuestAware.test.ts +0 -13
  200. package/src/Guest/GuestAware.ts +0 -59
  201. package/src/Guest/GuestAwareActive.test.ts +0 -12
  202. package/src/Guest/GuestAwareActive.ts +0 -42
  203. package/src/Guest/GuestAwareAll._asArray.test.ts +0 -19
  204. package/src/Guest/GuestAwareAll._twoValuesAfter.test.ts +0 -16
  205. package/src/Guest/GuestAwareAll._twoValuesBefore.test.ts +0 -16
  206. package/src/Guest/GuestAwareAll._withPatron.test.ts +0 -22
  207. package/src/Guest/GuestAwareMap.defered.test.ts +0 -46
  208. package/src/Guest/GuestAwareMap.fn.test.ts +0 -27
  209. package/src/Guest/GuestAwareMap.test.ts +0 -29
  210. package/src/Guest/GuestAwareMap.ts +0 -48
  211. package/src/Guest/GuestAwareRace.test.ts +0 -46
  212. package/src/Guest/GuestAwareRace.ts +0 -33
  213. package/src/Guest/GuestAwareSequence.defered.test.ts +0 -58
  214. package/src/Guest/GuestAwareSequence.test.ts +0 -30
  215. package/src/Source/SourceEmpty.test.ts +0 -20
  216. package/src/Source/SourceEmpty.ts +0 -31
@@ -1,46 +0,0 @@
1
- import { wait } from "./../../test-utils/wait";
2
- import { Private } from "../Private/Private";
3
- import { afterEach, beforeEach, expect, test, vi } from "vitest";
4
- import { Source } from "../Source/Source";
5
- import { give, GuestType } from "./Guest";
6
- import { GuestAware, GuestAwareType, value } from "./GuestAware";
7
- import { GuestAwareMap } from "./GuestAwareMap";
8
- import { GuestCast } from "./GuestCast";
9
-
10
- beforeEach(() => {
11
- vi.useFakeTimers({ shouldAdvanceTime: true });
12
- });
13
-
14
- afterEach(() => {
15
- vi.runOnlyPendingTimers();
16
- vi.useRealTimers();
17
- });
18
-
19
- function x2(baseNumber: GuestAwareType<number>) {
20
- return (guest: GuestType<number>) => {
21
- value(
22
- baseNumber,
23
- new GuestCast(guest, (v) => {
24
- give(v * 2, guest);
25
- }),
26
- );
27
- return guest;
28
- };
29
- }
30
-
31
- test("GuestAwareMap.defered.test", async () => {
32
- const guestAwareOf = (val: number) =>
33
- new GuestAware(async (guest) => {
34
- await wait(5);
35
- give(val, guest);
36
- });
37
- const source = new Source([1, 2, 3, 9].map(guestAwareOf));
38
- const guestMapped = new GuestAwareMap(source, new Private(x2));
39
- const callFn = vi.fn();
40
- guestMapped.value((v) => {
41
- expect(v.join()).toBe("2,4,6,18");
42
- callFn();
43
- });
44
- await wait(50);
45
- expect(callFn).toBeCalled();
46
- });
@@ -1,27 +0,0 @@
1
- import { Private } from "../Private/Private";
2
- import { expect, test } from "vitest";
3
- import { Source } from "../Source/Source";
4
- import { give, GuestType } from "./Guest";
5
- import { GuestAwareType, value } from "./GuestAware";
6
- import { GuestAwareMap } from "./GuestAwareMap";
7
- import { GuestCast } from "./GuestCast";
8
-
9
- function x2(baseNumber: GuestAwareType<number>) {
10
- return (guest: GuestType<number>) => {
11
- value(
12
- baseNumber,
13
- new GuestCast(<GuestType>guest, (v) => {
14
- give(v * 2, guest);
15
- }),
16
- );
17
- return guest;
18
- };
19
- }
20
-
21
- test("GuestAwareMap.test", () => {
22
- const source = new Source([1, 2, 3, 9]);
23
- const guestMapped = new GuestAwareMap(source, new Private(x2));
24
- guestMapped.value((v) => {
25
- expect(v.join()).toBe("2,4,6,18");
26
- });
27
- });
@@ -1,29 +0,0 @@
1
- import { expect, test } from "vitest";
2
- import { give, GuestType } from "./Guest";
3
- import { GuestAwareObjectType, GuestAwareType, value } from "./GuestAware";
4
- import { GuestAwareMap } from "./GuestAwareMap";
5
- import { GuestCast } from "./GuestCast";
6
- import { Source } from "../Source/Source";
7
- import { PrivateClass } from "../Private/PrivateClass";
8
-
9
- class X2 implements GuestAwareObjectType<number> {
10
- public constructor(private baseNumber: GuestAwareType<number>) {}
11
-
12
- public value(guest: GuestType<number>) {
13
- value(
14
- this.baseNumber,
15
- new GuestCast(<GuestType>guest, (v) => {
16
- give(v * 2, guest);
17
- }),
18
- );
19
- return this;
20
- }
21
- }
22
-
23
- test("GuestAwareMap.test", () => {
24
- const source = new Source([1, 2, 3, 9]);
25
- const guestMapped = new GuestAwareMap(source, new PrivateClass(X2));
26
- guestMapped.value((v) => {
27
- expect(v.join()).toBe("2,4,6,18");
28
- });
29
- });
@@ -1,48 +0,0 @@
1
- import { PrivateType } from "../Private/Private";
2
- import { give, GuestType } from "./Guest";
3
- import {
4
- GuestAware,
5
- GuestAwareObjectType,
6
- GuestAwareType,
7
- isGuestAware,
8
- value,
9
- } from "./GuestAware";
10
- import { GuestAwareAll } from "./GuestAwareAll";
11
- import { GuestCast } from "./GuestCast";
12
-
13
- /**
14
- * @url https://kosukhin.github.io/patron.site/#/guest/guest-aware-map
15
- */
16
- export class GuestAwareMap<T, TG> implements GuestAwareObjectType<TG[]> {
17
- public constructor(
18
- private baseSource: GuestAwareType<T[]>,
19
- private targetSource: PrivateType<GuestAwareType<TG>>,
20
- ) {
21
- if (baseSource === undefined) {
22
- throw new Error("GuestAwareMap didnt receive baseSource argument");
23
- }
24
- if (targetSource === undefined) {
25
- throw new Error("GuestAwareMap didnt receive targetSource argument");
26
- }
27
- }
28
-
29
- public value(guest: GuestType<TG[]>) {
30
- const all = new GuestAwareAll();
31
- value(
32
- this.baseSource,
33
- new GuestCast(<GuestType>guest, (theValue) => {
34
- theValue.forEach((val, index) => {
35
- const valueSource = isGuestAware(val)
36
- ? val
37
- : new GuestAware((innerGuest) => {
38
- give(val, innerGuest);
39
- });
40
- const targetSource = this.targetSource.get(valueSource);
41
- value(targetSource, all.guestKey(index.toString()));
42
- });
43
- }),
44
- );
45
- all.valueArray(<GuestType>guest);
46
- return this;
47
- }
48
- }
@@ -1,46 +0,0 @@
1
- import { GuestAwareRace } from "./GuestAwareRace";
2
- import { afterEach, beforeEach, expect, test, vi } from "vitest";
3
- import { SourceEmpty } from "../Source/SourceEmpty";
4
-
5
- beforeEach(() => {
6
- vi.useFakeTimers();
7
- });
8
-
9
- afterEach(() => {
10
- vi.useRealTimers();
11
- });
12
-
13
- test("GuestAwareRace.test", async () => {
14
- const sBuild = (result: number, delay: number) => {
15
- const s = new SourceEmpty();
16
-
17
- setTimeout(() => {
18
- s.give(result);
19
- }, delay);
20
-
21
- return s;
22
- };
23
-
24
- const s2 = sBuild(2, 100);
25
- const s1 = sBuild(1, 200);
26
-
27
- const sAny = new GuestAwareRace([s1, s2]);
28
-
29
- await vi.advanceTimersByTime(201);
30
-
31
- sAny.value((v) => {
32
- expect(v).toBe(1);
33
- });
34
-
35
- setTimeout(() => {
36
- s1.give(3);
37
- s2.give(4);
38
- }, 300);
39
-
40
- await vi.advanceTimersByTime(301);
41
-
42
- sAny.value((v) => {
43
- // ignores second value
44
- expect(v).toBe(3);
45
- });
46
- });
@@ -1,33 +0,0 @@
1
- import { give, GuestType } from "./Guest";
2
- import { GuestAwareObjectType, GuestAwareType, value } from "./GuestAware";
3
- import { GuestCast } from "./GuestCast";
4
-
5
- /**
6
- * @url https://kosukhin.github.io/patron.site/#/guest/guest-aware-race
7
- */
8
- export class GuestAwareRace<T> implements GuestAwareObjectType<T> {
9
- public constructor(private guestAwares: GuestAwareType<T>[]) {
10
- if (guestAwares === undefined) {
11
- throw new Error("GuestAwareRace didnt receive guestAwares argument");
12
- }
13
- }
14
-
15
- public value(guest: GuestType<T>): this {
16
- let connectedWithGuestAware: GuestAwareType | null = null;
17
- this.guestAwares.forEach((guestAware) => {
18
- value(
19
- guestAware,
20
- new GuestCast(<GuestType>guest, (value) => {
21
- if (
22
- !connectedWithGuestAware ||
23
- connectedWithGuestAware === guestAware
24
- ) {
25
- give(value as T, guest);
26
- connectedWithGuestAware = guestAware;
27
- }
28
- }),
29
- );
30
- });
31
- return this;
32
- }
33
- }
@@ -1,58 +0,0 @@
1
- import { GuestAwareSequence } from "./GuestAwareSequence";
2
- import { give } from "./Guest";
3
- import {
4
- GuestAware,
5
- GuestAwareObjectType,
6
- GuestAwareType,
7
- value,
8
- } from "./GuestAware";
9
- import { GuestCast } from "./GuestCast";
10
- import { GuestType } from "./Guest";
11
- import { afterEach, beforeEach, expect, test, vi } from "vitest";
12
- import { Source } from "../Source/Source";
13
- import { PrivateClass } from "../Private/PrivateClass";
14
- import { wait } from "../../test-utils/wait";
15
-
16
- beforeEach(() => {
17
- vi.useFakeTimers({ shouldAdvanceTime: true });
18
- });
19
-
20
- afterEach(() => {
21
- vi.runOnlyPendingTimers();
22
- vi.useRealTimers();
23
- });
24
-
25
- class X2 implements GuestAwareObjectType<number> {
26
- public constructor(private baseNumber: GuestAwareType<number>) {}
27
-
28
- public value(guest: GuestType<number>) {
29
- value(
30
- this.baseNumber,
31
- new GuestCast(<GuestType>guest, (v) => {
32
- give(v * 2, guest);
33
- }),
34
- );
35
- return this;
36
- }
37
- }
38
-
39
- test("GuestAwareSequence.defered.test", async () => {
40
- const guestAwareOf = (val: number) =>
41
- new GuestAware((guest) => {
42
- setTimeout(() => {
43
- give(val, guest);
44
- }, 10);
45
- });
46
- const source = new Source([1, 2, 3, 9].map(guestAwareOf));
47
-
48
- const sequence = new GuestAwareSequence(source, new PrivateClass(X2));
49
-
50
- const callFn = vi.fn();
51
- sequence.value((v) => {
52
- expect(v.join()).toBe("2,4,6,18");
53
- callFn();
54
- });
55
-
56
- await wait(51);
57
- expect(callFn).toBeCalled();
58
- });
@@ -1,30 +0,0 @@
1
- import { GuestAwareSequence } from "./GuestAwareSequence";
2
- import { give } from "./Guest";
3
- import { GuestAwareObjectType, GuestAwareType, value } from "./GuestAware";
4
- import { GuestCast } from "./GuestCast";
5
- import { GuestType } from "./Guest";
6
- import { expect, test } from "vitest";
7
- import { Source } from "../Source/Source";
8
- import { PrivateClass } from "../Private/PrivateClass";
9
-
10
- class X2 implements GuestAwareObjectType<number> {
11
- public constructor(private baseNumber: GuestAwareType<number>) {}
12
-
13
- public value(guest: GuestType<number>) {
14
- value(
15
- this.baseNumber,
16
- new GuestCast(<GuestType>guest, (v) => {
17
- give(v * 2, guest);
18
- }),
19
- );
20
- return this;
21
- }
22
- }
23
-
24
- test("GuestAwareSequence.test", () => {
25
- const source = new Source([1, 2, 3, 9]);
26
- const guestMapped = new GuestAwareSequence(source, new PrivateClass(X2));
27
- guestMapped.value((v) => {
28
- expect(v.join()).toBe("2,4,6,18");
29
- });
30
- });
@@ -1,20 +0,0 @@
1
- import { SourceEmpty } from "./SourceEmpty";
2
- import { expect, test } from "vitest";
3
-
4
- test("SourceEmpty.test", () => {
5
- const source = new SourceEmpty<number>();
6
- let accumulator = 0;
7
-
8
- // Не вызывается потому что нет значения
9
- source.value(() => {
10
- accumulator += 100;
11
- });
12
-
13
- // Вызывается после прихода значения
14
- source.give(200);
15
- source.value((value) => {
16
- accumulator += value;
17
- });
18
-
19
- expect(accumulator).toBe(200);
20
- });
@@ -1,31 +0,0 @@
1
- import { PatronPool } from "../Patron/PatronPool";
2
- import { GuestCast } from "../Guest/GuestCast";
3
- import { give, GuestType } from "./../Guest/Guest";
4
- import { Source, SourceType } from "./Source";
5
-
6
- /**
7
- * @url https://kosukhin.github.io/patron.site/#/source/source-empty
8
- */
9
- export class SourceEmpty<T> implements SourceType<T> {
10
- private baseSource = new Source<T | null>(null);
11
-
12
- public value(guest: GuestType<T>) {
13
- this.baseSource.value(
14
- new GuestCast(guest as GuestType, (value, options) => {
15
- if (value !== null) {
16
- give(value, guest, options);
17
- }
18
- }),
19
- );
20
- return this;
21
- }
22
-
23
- public give(value: T): this {
24
- this.baseSource.give(value);
25
- return this;
26
- }
27
-
28
- public pool(): PatronPool<T> {
29
- return this.baseSource.pool();
30
- }
31
- }