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.
- package/CHANGELOG.md +20 -0
- package/dist/patron.cjs +359 -268
- package/dist/patron.cjs.map +1 -1
- package/dist/patron.d.ts +215 -150
- package/dist/patron.js +343 -261
- package/dist/patron.js.map +1 -1
- package/dist/patron.min.js +1 -1
- package/dist/patron.min.mjs +1 -1
- package/dist/patron.min.mjs.map +1 -1
- package/dist/patron.mjs +343 -261
- package/dist/patron.mjs.map +1 -1
- package/docs/README.md +3 -0
- package/docs/assets/css/base.css +42 -0
- package/docs/assets/favicon/android-icon-144x144.png +0 -0
- package/docs/assets/favicon/android-icon-192x192.png +0 -0
- package/docs/assets/favicon/android-icon-36x36.png +0 -0
- package/docs/assets/favicon/android-icon-48x48.png +0 -0
- package/docs/assets/favicon/android-icon-72x72.png +0 -0
- package/docs/assets/favicon/android-icon-96x96.png +0 -0
- package/docs/assets/favicon/apple-icon-114x114.png +0 -0
- package/docs/assets/favicon/apple-icon-120x120.png +0 -0
- package/docs/assets/favicon/apple-icon-144x144.png +0 -0
- package/docs/assets/favicon/apple-icon-152x152.png +0 -0
- package/docs/assets/favicon/apple-icon-180x180.png +0 -0
- package/docs/assets/favicon/apple-icon-57x57.png +0 -0
- package/docs/assets/favicon/apple-icon-60x60.png +0 -0
- package/docs/assets/favicon/apple-icon-72x72.png +0 -0
- package/docs/assets/favicon/apple-icon-76x76.png +0 -0
- package/docs/assets/favicon/apple-icon-precomposed.png +0 -0
- package/docs/assets/favicon/apple-icon.png +0 -0
- package/docs/assets/favicon/browserconfig.xml +2 -0
- package/docs/assets/favicon/favicon-16x16.png +0 -0
- package/docs/assets/favicon/favicon-32x32.png +0 -0
- package/docs/assets/favicon/favicon-96x96.png +0 -0
- package/docs/assets/favicon/favicon.ico +0 -0
- package/docs/assets/favicon/manifest.json +41 -0
- package/docs/assets/favicon/ms-icon-144x144.png +0 -0
- package/docs/assets/favicon/ms-icon-150x150.png +0 -0
- package/docs/assets/favicon/ms-icon-310x310.png +0 -0
- package/docs/assets/favicon/ms-icon-70x70.png +0 -0
- package/docs/assets/img/404.jpg +0 -0
- package/docs/assets/img/angular_16.jpg +0 -0
- package/docs/assets/img/angular_32.jpg +0 -0
- package/docs/assets/img/eo_16.jpg +0 -0
- package/docs/assets/img/eo_big.png +0 -0
- package/docs/assets/img/github_16.jpg +0 -0
- package/docs/assets/img/logo.jpg +0 -0
- package/docs/assets/img/philosofy/observable.jpg +0 -0
- package/docs/assets/img/philosofy/responsible.jpg +0 -0
- package/docs/assets/img/philosofy/result.jpg +0 -0
- package/docs/assets/img/philosofy/tell.jpg +0 -0
- package/docs/assets/img/react_16.jpg +0 -0
- package/docs/assets/img/react_32.jpg +0 -0
- package/docs/assets/img/vue_16.jpg +0 -0
- package/docs/assets/img/vue_32.jpg +0 -0
- package/docs/assets/js/components/linkDynamic.mjs +11 -0
- package/docs/assets/js/components/linkReloadable.mjs +13 -0
- package/docs/assets/js/entrypoints/compatibility.mjs +31 -0
- package/docs/assets/js/entrypoints/components.mjs +2 -0
- package/docs/assets/js/entrypoints/examples.mjs +25 -0
- package/docs/assets/js/entrypoints/factory.mjs +20 -0
- package/docs/assets/js/entrypoints/guest.mjs +61 -0
- package/docs/assets/js/entrypoints/index.mjs +110 -0
- package/docs/assets/js/entrypoints/integrations.mjs +36 -0
- package/docs/assets/js/entrypoints/patron.mjs +46 -0
- package/docs/assets/js/entrypoints/source.mjs +76 -0
- package/docs/assets/js/entrypoints/terminology.mjs +51 -0
- package/docs/assets/js/entrypoints/utils.mjs +61 -0
- package/docs/assets/js/lib/StyleFetched.mjs +14 -0
- package/docs/assets/js/routing.mjs +110 -0
- package/docs/assets/schemes/dip.html +28 -0
- package/docs/favicon.ico +0 -0
- package/docs/index-dev.html +346 -0
- package/docs/index.html +346 -0
- package/docs/manifest.json +41 -0
- package/docs/pages/404.html +9 -0
- package/docs/pages/common/layout.html +17 -0
- package/docs/pages/compatibility/dip.html +82 -0
- package/docs/pages/compatibility/elegant-objects.html +373 -0
- package/docs/pages/compatibility/layout.html +17 -0
- package/docs/pages/examples/errors.html +167 -0
- package/docs/pages/examples/index.html +10 -0
- package/docs/pages/examples.html +41 -0
- package/docs/pages/factory/index.html +18 -0
- package/docs/pages/factory.html +36 -0
- package/docs/pages/guest/guest-applied.html +51 -0
- package/docs/pages/guest/guest-cast.html +219 -0
- package/docs/pages/guest/guest-disposable.html +147 -0
- package/docs/pages/guest/guest-executor-applied.html +65 -0
- package/docs/pages/guest/guest-object.html +101 -0
- package/docs/pages/guest/guest-pool.html +107 -0
- package/docs/pages/guest/guest-sync.html +66 -0
- package/docs/pages/guest/index.html +115 -0
- package/docs/pages/guest.html +59 -0
- package/docs/pages/index.html +72 -0
- package/docs/pages/integrations/angular.html +5 -0
- package/docs/pages/integrations/layout.html +17 -0
- package/docs/pages/integrations/react.html +7 -0
- package/docs/pages/integrations/vue.html +102 -0
- package/docs/pages/patron/index.html +140 -0
- package/docs/pages/patron/patron-applied.html +66 -0
- package/docs/pages/patron/patron-executor-applied.html +94 -0
- package/docs/pages/patron/patron-once.html +110 -0
- package/docs/pages/patron/patron-pool.html +99 -0
- package/docs/pages/patron.html +50 -0
- package/docs/pages/philosofy.html +210 -0
- package/docs/pages/source/index.html +167 -0
- package/docs/pages/source/source-active.html +113 -0
- package/docs/pages/source/source-all.html +129 -0
- package/docs/pages/source/source-applied.html +73 -0
- package/docs/pages/source/source-dynamic.html +93 -0
- package/docs/pages/source/source-executor-applied.html +64 -0
- package/docs/pages/source/source-map.html +192 -0
- package/docs/pages/source/source-once.html +73 -0
- package/docs/pages/source/source-race.html +171 -0
- package/docs/pages/source/source-sequence.html +160 -0
- package/docs/pages/source/source-with-pool.html +102 -0
- package/docs/pages/source/source.html +167 -0
- package/docs/pages/source.html +68 -0
- package/docs/pages/terminology/guest.html +14 -0
- package/docs/pages/terminology/index.html +6 -0
- package/docs/pages/terminology/introduction.html +25 -0
- package/docs/pages/terminology/patron.html +10 -0
- package/docs/pages/terminology/source.html +55 -0
- package/docs/pages/terminology/visitor.html +19 -0
- package/docs/pages/terminology.html +53 -0
- package/docs/pages/utils/give.html +47 -0
- package/docs/pages/utils/index.html +24 -0
- package/docs/pages/utils/is-guest-aware.html +22 -0
- package/docs/pages/utils/is-guest.html +21 -0
- package/docs/pages/utils/is-patron-in-pools.html +53 -0
- package/docs/pages/utils/private.html +44 -0
- package/docs/pages/utils/remove-patron-from-pools.html +57 -0
- package/docs/pages/utils/value.html +47 -0
- package/docs/pages/utils.html +61 -0
- package/eslint.config.mjs +6 -0
- package/package.json +1 -1
- package/src/Guest/Guest.test.ts +11 -6
- package/src/Guest/Guest.ts +7 -14
- package/src/Guest/GuestApplied.test.ts +13 -0
- package/src/Guest/GuestApplied.ts +16 -0
- package/src/Guest/GuestCast.test.ts +4 -5
- package/src/Guest/GuestCast.ts +3 -10
- package/src/Guest/GuestDisposable.test.ts +13 -17
- package/src/Guest/GuestDisposable.ts +3 -3
- package/src/Guest/GuestExecutorApplied.test.ts +27 -0
- package/src/Guest/GuestExecutorApplied.ts +23 -0
- package/src/Guest/GuestObject.test.ts +6 -6
- package/src/Guest/GuestObject.ts +3 -3
- package/src/Guest/GuestPool.test.ts +5 -22
- package/src/Guest/GuestPool.ts +7 -8
- package/src/Guest/GuestSync.test.ts +2 -2
- package/src/Patron/Patron.test.ts +4 -5
- package/src/Patron/Patron.ts +11 -3
- package/src/Patron/PatronApplied.ts +22 -0
- package/src/Patron/PatronExecutorApplied.ts +25 -0
- package/src/Patron/PatronOnce.sourceEmpty.test.ts +2 -2
- package/src/Patron/PatronOnce.test.ts +2 -2
- package/src/Patron/PatronOnce.ts +3 -9
- package/src/Patron/PatronPool.test.ts +2 -1
- package/src/Patron/PatronPool.ts +22 -27
- package/src/Private/PrivateClass.modules.test.ts +11 -8
- package/src/Private/PrivateClass.test.ts +7 -6
- package/src/Source/Source.test.ts +9 -5
- package/src/Source/Source.ts +46 -30
- package/src/Source/SourceActive.test.ts +13 -0
- package/src/Source/SourceActive.ts +41 -0
- package/src/Source/SourceAll._asArray.test.ts +22 -0
- package/src/Source/SourceAll._twoValuesAfter.test.ts +19 -0
- package/src/Source/SourceAll._twoValuesBefore.test.ts +19 -0
- package/src/Source/SourceAll._withPatron.test.ts +25 -0
- package/src/{Guest/GuestAwareAll.ts → Source/SourceAll.ts} +11 -11
- package/src/Source/SourceApplied.test.ts +14 -0
- package/src/Source/SourceApplied.ts +23 -0
- package/src/Source/SourceDynamic.ofSource.test.ts +12 -12
- package/src/Source/SourceDynamic.test.ts +9 -9
- package/src/Source/SourceDynamic.ts +7 -7
- package/src/Source/SourceExecutorApplied.test.ts +30 -0
- package/src/Source/SourceExecutorApplied.ts +22 -0
- package/src/Source/SourceMap.defered.test.ts +46 -0
- package/src/Source/SourceMap.fn.test.ts +27 -0
- package/src/Source/SourceMap.test.ts +32 -0
- package/src/Source/SourceMap.ts +48 -0
- package/src/Source/SourceOnce.notcalled.test.ts +4 -4
- package/src/Source/SourceOnce.test.ts +4 -5
- package/src/Source/SourceOnce.ts +7 -13
- package/src/Source/SourceRace.test.ts +46 -0
- package/src/Source/SourceRace.ts +30 -0
- package/src/Source/SourceSequence.defered.test.ts +53 -0
- package/src/Source/SourceSequence.test.ts +30 -0
- package/src/{Guest/GuestAwareSequence.ts → Source/SourceSequence.ts} +14 -19
- package/src/Source/SourceWithPool.empty.test.ts +14 -0
- package/src/Source/SourceWithPool.test.ts +10 -0
- package/src/Source/SourceWithPool.ts +58 -0
- package/src/index.ts +13 -7
- package/test-utils/debounce.ts +11 -0
- package/test-utils/id.ts +1 -0
- package/test-utils/wait.ts +6 -3
- package/src/Guest/GuestAware.test.ts +0 -13
- package/src/Guest/GuestAware.ts +0 -59
- package/src/Guest/GuestAwareActive.test.ts +0 -12
- package/src/Guest/GuestAwareActive.ts +0 -42
- package/src/Guest/GuestAwareAll._asArray.test.ts +0 -19
- package/src/Guest/GuestAwareAll._twoValuesAfter.test.ts +0 -16
- package/src/Guest/GuestAwareAll._twoValuesBefore.test.ts +0 -16
- package/src/Guest/GuestAwareAll._withPatron.test.ts +0 -22
- package/src/Guest/GuestAwareMap.defered.test.ts +0 -46
- package/src/Guest/GuestAwareMap.fn.test.ts +0 -27
- package/src/Guest/GuestAwareMap.test.ts +0 -29
- package/src/Guest/GuestAwareMap.ts +0 -48
- package/src/Guest/GuestAwareRace.test.ts +0 -46
- package/src/Guest/GuestAwareRace.ts +0 -33
- package/src/Guest/GuestAwareSequence.defered.test.ts +0 -58
- package/src/Guest/GuestAwareSequence.test.ts +0 -30
- package/src/Source/SourceEmpty.test.ts +0 -20
- 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
|
-
}
|