patron-oop 1.45.0 → 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 +12 -0
- package/dist/patron.cjs +106 -35
- package/dist/patron.cjs.map +1 -1
- package/dist/patron.d.ts +40 -1
- package/dist/patron.js +103 -36
- 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 +103 -36
- 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/Patron/PatronApplied.ts +22 -0
- package/src/Patron/PatronExecutorApplied.ts +25 -0
- package/src/index.ts +4 -0
@@ -0,0 +1,147 @@
|
|
1
|
+
<h1 class="pb-3 text-xl font-semibold text-gray-600">Класс GuestDisposable</h1>
|
2
|
+
|
3
|
+
<a
|
4
|
+
href="https://github.com/kosukhin/patron/blob/main/src/Guest/GuestDisposable.ts"
|
5
|
+
target="_blank"
|
6
|
+
class="inline-flex gap-1 items-center bg-gray-100 border-0 py-1 px-3 focus:outline-none hover:bg-gray-200 rounded text-base mt-4 md:mt-0 mb-4"
|
7
|
+
>
|
8
|
+
<img
|
9
|
+
src="./assets/img/github_16.jpg"
|
10
|
+
width="16"
|
11
|
+
height="16"
|
12
|
+
/>
|
13
|
+
GuestDisposable на GitHub
|
14
|
+
</a>
|
15
|
+
|
16
|
+
<p class="text-gray-600 text-lg mb-4">
|
17
|
+
Предназначен для динамического создания
|
18
|
+
<span class="dynamic-navigation">
|
19
|
+
<a
|
20
|
+
class="inline-block whitespace-nowrap rounded-[0.27rem] bg-primary-100 px-[0.65em] pb-[0.25em] pt-[0.35em] text-center align-baseline text-[0.75em] font-bold leading-none text-white bg-slate-900"
|
21
|
+
href="/terminology/the-guest"
|
22
|
+
>
|
23
|
+
гостя
|
24
|
+
</a>
|
25
|
+
</span>
|
26
|
+
с функциональностью его удаления из
|
27
|
+
<span class="dynamic-navigation">
|
28
|
+
<a
|
29
|
+
class="inline-block whitespace-nowrap rounded-[0.27rem] bg-primary-100 px-[0.65em] pb-[0.25em] pt-[0.35em] text-center align-baseline text-[0.75em] font-bold leading-none text-white bg-slate-900"
|
30
|
+
href="/patron/patron-pool"
|
31
|
+
>
|
32
|
+
пула патронов
|
33
|
+
</a>
|
34
|
+
</span>
|
35
|
+
, на случай, если гость станет
|
36
|
+
<span class="dynamic-navigation">
|
37
|
+
<a
|
38
|
+
class="inline-block whitespace-nowrap rounded-[0.27rem] bg-primary-100 px-[0.65em] pb-[0.25em] pt-[0.35em] text-center align-baseline text-[0.75em] font-bold leading-none text-white bg-slate-900"
|
39
|
+
href="/terminology/the-patron"
|
40
|
+
>
|
41
|
+
патроном
|
42
|
+
</a>
|
43
|
+
</span>
|
44
|
+
</p>
|
45
|
+
|
46
|
+
<p class="text-gray-600 text-lg mb-4">
|
47
|
+
Полезно в случаях, когда гость сделал свою работу и должен быть удален из пула
|
48
|
+
патронов, но в случае если гость стал патрном. У класса Patron есть метод
|
49
|
+
disposed, который берется от гостя. В логике PatronPool после каждой передачи
|
50
|
+
значения патрону идет проверка не нужно ли удалить этот патрон из пула вызовом
|
51
|
+
метода disposed
|
52
|
+
</p>
|
53
|
+
|
54
|
+
<p class="text-gray-600 text-lg mb-4">
|
55
|
+
Вместо класса GuestDisposable можно использовать функцию
|
56
|
+
<span class="dynamic-navigation">
|
57
|
+
<a
|
58
|
+
class="inline-block whitespace-nowrap rounded-[0.27rem] bg-primary-100 px-[0.65em] pb-[0.25em] pt-[0.35em] text-center align-baseline text-[0.75em] font-bold leading-none text-white bg-slate-900"
|
59
|
+
href="/utils/remove-patron-from-pools"
|
60
|
+
>
|
61
|
+
removePatronFromPools
|
62
|
+
</a>
|
63
|
+
</span>
|
64
|
+
- для того чтобы удалить патрон из всех пулов. либо функцию
|
65
|
+
<span class="dynamic-navigation">
|
66
|
+
<a
|
67
|
+
class="inline-block whitespace-nowrap rounded-[0.27rem] bg-primary-100 px-[0.65em] pb-[0.25em] pt-[0.35em] text-center align-baseline text-[0.75em] font-bold leading-none text-white bg-slate-900"
|
68
|
+
href="/utils/is-patron-in-pools"
|
69
|
+
>
|
70
|
+
isPatronInPools
|
71
|
+
</a>
|
72
|
+
</span>
|
73
|
+
- проверяет есть ли патрон в каком-либо пуле
|
74
|
+
</p>
|
75
|
+
|
76
|
+
<p class="text-gray-600 text-lg mb-0 font-bold">Пример 1.</p>
|
77
|
+
<pre class="mb-4"><code class="language-js">import { SourceWithPool, Patron, GuestDisposable } from "patron-oop";
|
78
|
+
|
79
|
+
const source = new SourceWithPool("Один");
|
80
|
+
|
81
|
+
source.value(
|
82
|
+
new Patron(
|
83
|
+
new GuestDisposable(
|
84
|
+
(value) => {
|
85
|
+
document.querySelector(".guest-result").textContent = value;
|
86
|
+
},
|
87
|
+
(value) => {
|
88
|
+
return value !== "Один";
|
89
|
+
}
|
90
|
+
)
|
91
|
+
)
|
92
|
+
);
|
93
|
+
|
94
|
+
setTimeout(() => {
|
95
|
+
source.give("Два");
|
96
|
+
});
|
97
|
+
|
98
|
+
setTimeout(() => {
|
99
|
+
source.give("Три");
|
100
|
+
}, 100);
|
101
|
+
</code></pre>
|
102
|
+
|
103
|
+
<p class="text-gray-600 text-lg mb-0 font-bold">Результат 1.</p>
|
104
|
+
<div class="example mb-4">
|
105
|
+
<span class="guest-result">Нет значения</span>
|
106
|
+
</div>
|
107
|
+
<script type="module">
|
108
|
+
import { SourceWithPool, Patron, GuestDisposable } from "patron-oop";
|
109
|
+
|
110
|
+
const source = new SourceWithPool("Один");
|
111
|
+
|
112
|
+
source.value(
|
113
|
+
new Patron(
|
114
|
+
new GuestDisposable(
|
115
|
+
(value) => {
|
116
|
+
document.querySelector(".guest-result").textContent = value;
|
117
|
+
},
|
118
|
+
(value) => {
|
119
|
+
return value !== "Один";
|
120
|
+
}
|
121
|
+
)
|
122
|
+
)
|
123
|
+
);
|
124
|
+
|
125
|
+
setTimeout(() => {
|
126
|
+
source.give("Два");
|
127
|
+
});
|
128
|
+
|
129
|
+
setTimeout(() => {
|
130
|
+
source.give("Три");
|
131
|
+
}, 100);
|
132
|
+
</script>
|
133
|
+
|
134
|
+
<div class="font-bold mt-8">Смотрите также</div>
|
135
|
+
|
136
|
+
<p class="text-gray-600 text-lg mb-4 dynamic-navigation">
|
137
|
+
<a
|
138
|
+
class="inline-block whitespace-nowrap rounded-[0.27rem] bg-primary-100 px-[0.65em] pb-[0.25em] pt-[0.35em] text-center align-baseline text-[0.75em] font-bold leading-none text-white bg-slate-900"
|
139
|
+
href="/source"
|
140
|
+
>Source</a
|
141
|
+
>
|
142
|
+
<a
|
143
|
+
class="inline-block whitespace-nowrap rounded-[0.27rem] bg-primary-100 px-[0.65em] pb-[0.25em] pt-[0.35em] text-center align-baseline text-[0.75em] font-bold leading-none text-white bg-slate-900"
|
144
|
+
href="/patron"
|
145
|
+
>Patron</a
|
146
|
+
>
|
147
|
+
</p>
|
@@ -0,0 +1,65 @@
|
|
1
|
+
<h1 class="pb-3 text-xl font-semibold text-gray-600">Класс GuestExecutorApplied</h1>
|
2
|
+
|
3
|
+
<a
|
4
|
+
href="https://github.com/kosukhin/patron/blob/main/src/Guest/GuestExecutorApplied.ts"
|
5
|
+
target="_blank"
|
6
|
+
class="inline-flex gap-1 items-center bg-gray-100 border-0 py-1 px-3 focus:outline-none hover:bg-gray-200 rounded text-base mt-4 md:mt-0 mb-4"
|
7
|
+
>
|
8
|
+
<img
|
9
|
+
src="./assets/img/github_16.jpg"
|
10
|
+
width="16"
|
11
|
+
height="16"
|
12
|
+
/>
|
13
|
+
GuestExecutorApplied на GitHub
|
14
|
+
</a>
|
15
|
+
|
16
|
+
<p class="text-gray-600 text-lg mb-4">
|
17
|
+
Иногда нам нужно контроллировать не значение, которое приходит гостю, а процесс передачи значения, например если мы хотим применить к гостю функцию debounce или функцию throttle, чтобы снизить количество срабатываний логики гостя.
|
18
|
+
</p>
|
19
|
+
|
20
|
+
|
21
|
+
<p class="text-gray-600 text-lg mb-0 font-bold">Пример 1.</p>
|
22
|
+
<pre
|
23
|
+
class="mb-4 w-full"
|
24
|
+
><code class="language-js">import { Guest, GuestExecutorApplied, sourceOf } from "patron-oop";
|
25
|
+
|
26
|
+
const guest = new Guest((value) => {
|
27
|
+
document.querySelector(
|
28
|
+
".guest-result"
|
29
|
+
).textContent = `value is ${value}`;
|
30
|
+
});
|
31
|
+
|
32
|
+
sourceOf(40).value(
|
33
|
+
new GuestExecutorApplied(guest, (guestFn) => {
|
34
|
+
return v => {
|
35
|
+
setTimeout(() => {
|
36
|
+
guestFn(v);
|
37
|
+
}, 5000)
|
38
|
+
}
|
39
|
+
})
|
40
|
+
);
|
41
|
+
</code></pre>
|
42
|
+
|
43
|
+
<p class="text-gray-600 text-lg mb-0 font-bold">Результат 1.</p>
|
44
|
+
<div class="example mb-4">
|
45
|
+
<span class="guest-result">Результат через 5 сек...</span>
|
46
|
+
</div>
|
47
|
+
<script type="module">
|
48
|
+
import { Guest, GuestExecutorApplied, sourceOf } from "patron-oop";
|
49
|
+
|
50
|
+
const guest = new Guest((value) => {
|
51
|
+
document.querySelector(
|
52
|
+
".guest-result"
|
53
|
+
).textContent = `value is ${value}`;
|
54
|
+
});
|
55
|
+
|
56
|
+
sourceOf(40).value(
|
57
|
+
new GuestExecutorApplied(guest, (guestFn) => {
|
58
|
+
return v => {
|
59
|
+
setTimeout(() => {
|
60
|
+
guestFn(v);
|
61
|
+
}, 5000)
|
62
|
+
}
|
63
|
+
})
|
64
|
+
);
|
65
|
+
</script>
|
@@ -0,0 +1,101 @@
|
|
1
|
+
<h1 class="pb-3 text-xl font-semibold text-gray-600">Класс GuestObject</h1>
|
2
|
+
|
3
|
+
<a
|
4
|
+
href="https://github.com/kosukhin/patron/blob/main/src/Guest/GuestObject.ts"
|
5
|
+
target="_blank"
|
6
|
+
class="inline-flex gap-1 items-center bg-gray-100 border-0 py-1 px-3 focus:outline-none hover:bg-gray-200 rounded text-base mt-4 md:mt-0 mb-4"
|
7
|
+
>
|
8
|
+
<img
|
9
|
+
src="./assets/img/github_16.jpg"
|
10
|
+
width="16"
|
11
|
+
height="16"
|
12
|
+
/>
|
13
|
+
GuestObject на GitHub
|
14
|
+
</a>
|
15
|
+
|
16
|
+
<p class="text-gray-600 text-lg mb-4">
|
17
|
+
Предназначен для перевода любого
|
18
|
+
<span class="dynamic-navigation">
|
19
|
+
<a
|
20
|
+
class="inline-block whitespace-nowrap rounded-[0.27rem] bg-primary-100 px-[0.65em] pb-[0.25em] pt-[0.35em] text-center align-baseline text-[0.75em] font-bold leading-none text-white bg-slate-900"
|
21
|
+
href="/terminology/visitor"
|
22
|
+
>
|
23
|
+
посетителя
|
24
|
+
</a>
|
25
|
+
</span>
|
26
|
+
в объектный вид, чтобы можно было вызывать .give метод
|
27
|
+
</p>
|
28
|
+
|
29
|
+
<p class="text-gray-600 text-lg mb-4">
|
30
|
+
Этот функционал может быть полезен, если нужно написать код в котором мы будем
|
31
|
+
уверены, что посетитель - это объект, вне зависимости будет это патрон или
|
32
|
+
гость
|
33
|
+
</p>
|
34
|
+
|
35
|
+
<p class="text-gray-600 text-lg mb-4">
|
36
|
+
Этот класс может быть заменен функцией give, которой неважно какой посетитель
|
37
|
+
к ней пришел функция,
|
38
|
+
<span class="dynamic-navigation">
|
39
|
+
<a
|
40
|
+
class="inline-block whitespace-nowrap rounded-[0.27rem] bg-primary-100 px-[0.65em] pb-[0.25em] pt-[0.35em] text-center align-baseline text-[0.75em] font-bold leading-none text-white bg-slate-900"
|
41
|
+
href="/terminology/the-guest"
|
42
|
+
>
|
43
|
+
гость
|
44
|
+
</a>
|
45
|
+
</span>
|
46
|
+
или
|
47
|
+
<span class="dynamic-navigation">
|
48
|
+
<a
|
49
|
+
class="inline-block whitespace-nowrap rounded-[0.27rem] bg-primary-100 px-[0.65em] pb-[0.25em] pt-[0.35em] text-center align-baseline text-[0.75em] font-bold leading-none text-white bg-slate-900"
|
50
|
+
href="/terminology/the-patron"
|
51
|
+
>
|
52
|
+
патрон
|
53
|
+
</a>
|
54
|
+
</span>
|
55
|
+
</p>
|
56
|
+
|
57
|
+
<p class="text-gray-600 text-lg mb-0 font-bold">Пример 1.</p>
|
58
|
+
<pre
|
59
|
+
class="mb-4"
|
60
|
+
><code class="language-js">import { GuestObject } from 'patron-oop';
|
61
|
+
|
62
|
+
class HelloWorld {
|
63
|
+
greeting(guest) {
|
64
|
+
new GuestObject(guest).give('Hello world!');
|
65
|
+
}
|
66
|
+
}
|
67
|
+
|
68
|
+
const fnGuest = (value) => {
|
69
|
+
document.querySelector('.guest-result').textContent = value;
|
70
|
+
}
|
71
|
+
new HelloWorld().greeting(fnGuest);
|
72
|
+
</code></pre>
|
73
|
+
|
74
|
+
<p class="text-gray-600 text-lg mb-0 font-bold">Результат 1.</p>
|
75
|
+
<div class="example mb-4">
|
76
|
+
<span class="guest-result">Ждем результат</span>
|
77
|
+
</div>
|
78
|
+
<script type="module">
|
79
|
+
import { GuestObject } from "patron-oop";
|
80
|
+
|
81
|
+
class HelloWorld {
|
82
|
+
greeting(guest) {
|
83
|
+
new GuestObject(guest).give("Hello world!");
|
84
|
+
}
|
85
|
+
}
|
86
|
+
|
87
|
+
const fnGuest = (value) => {
|
88
|
+
document.querySelector(".guest-result").textContent = value;
|
89
|
+
};
|
90
|
+
new HelloWorld().greeting(fnGuest);
|
91
|
+
</script>
|
92
|
+
|
93
|
+
<div class="font-bold mt-8">Смотрите также</div>
|
94
|
+
|
95
|
+
<p class="text-gray-600 text-lg mb-4 dynamic-navigation">
|
96
|
+
<a
|
97
|
+
class="inline-block whitespace-nowrap rounded-[0.27rem] bg-primary-100 px-[0.65em] pb-[0.25em] pt-[0.35em] text-center align-baseline text-[0.75em] font-bold leading-none text-white bg-slate-900"
|
98
|
+
href="/utils/give"
|
99
|
+
>give</a
|
100
|
+
>
|
101
|
+
</p>
|
@@ -0,0 +1,107 @@
|
|
1
|
+
<h1 class="pb-3 text-xl font-semibold text-gray-600">Класс GuestPool</h1>
|
2
|
+
|
3
|
+
<a
|
4
|
+
href="https://github.com/kosukhin/patron/blob/main/src/Guest/GuestPool.ts"
|
5
|
+
target="_blank"
|
6
|
+
class="inline-flex gap-1 items-center bg-gray-100 border-0 py-1 px-3 focus:outline-none hover:bg-gray-200 rounded text-base mt-4 md:mt-0 mb-4"
|
7
|
+
>
|
8
|
+
<img
|
9
|
+
src="./assets/img/github_16.jpg"
|
10
|
+
width="16"
|
11
|
+
height="16"
|
12
|
+
/>
|
13
|
+
GuestPool на GitHub
|
14
|
+
</a>
|
15
|
+
|
16
|
+
<p class="text-gray-600 text-lg mb-4">
|
17
|
+
Предназначен для подписки на отложенное значение не только
|
18
|
+
<span class="dynamic-navigation">
|
19
|
+
<a
|
20
|
+
class="inline-block whitespace-nowrap rounded-[0.27rem] bg-primary-100 px-[0.65em] pb-[0.25em] pt-[0.35em] text-center align-baseline text-[0.75em] font-bold leading-none text-white bg-slate-900"
|
21
|
+
href="/terminology/the-patron"
|
22
|
+
>
|
23
|
+
патрона
|
24
|
+
</a>
|
25
|
+
</span>
|
26
|
+
|
27
|
+
но и
|
28
|
+
<span class="dynamic-navigation">
|
29
|
+
<a
|
30
|
+
class="inline-block whitespace-nowrap rounded-[0.27rem] bg-primary-100 px-[0.65em] pb-[0.25em] pt-[0.35em] text-center align-baseline text-[0.75em] font-bold leading-none text-white bg-slate-900"
|
31
|
+
href="/terminology/the-guest"
|
32
|
+
>
|
33
|
+
гостя
|
34
|
+
</a>
|
35
|
+
</span>
|
36
|
+
</p>
|
37
|
+
|
38
|
+
<p class="text-gray-600 text-lg mb-4">
|
39
|
+
Полезным это поведение может быть в случаях, когда значение заранее не
|
40
|
+
известно, но пришедший посетитель в случае если он гость не должен быть
|
41
|
+
проигнорирован, а должен получить первое установленное значение, после чего
|
42
|
+
все гости из пула удаляются, а все патроны остаются внутри PatronPool
|
43
|
+
</p>
|
44
|
+
|
45
|
+
<p class="text-gray-600 text-lg mb-0 font-bold">Пример 1.</p>
|
46
|
+
<pre
|
47
|
+
class="mb-4"
|
48
|
+
><code class="language-js">import { GuestPool } from 'patron-oop';
|
49
|
+
|
50
|
+
class ValueAfterDelay {
|
51
|
+
constructor(theValue, delay) {
|
52
|
+
this.theValue = theValue;
|
53
|
+
this.delay = delay;
|
54
|
+
this.pool = new GuestPool();
|
55
|
+
}
|
56
|
+
|
57
|
+
value(guest) {
|
58
|
+
this.pool.add(guest);
|
59
|
+
setTimeout(() => {
|
60
|
+
this.pool.give(this.theValue);
|
61
|
+
}, this.delay);
|
62
|
+
}
|
63
|
+
}
|
64
|
+
|
65
|
+
const fnGuest = (value) => {
|
66
|
+
document.querySelector('.guest-result').textContent = value;
|
67
|
+
}
|
68
|
+
new ValueAfterDelay(42, 5000).value(fnGuest);
|
69
|
+
</code></pre>
|
70
|
+
|
71
|
+
<p class="text-gray-600 text-lg mb-0 font-bold">Результат 1.</p>
|
72
|
+
<div class="example mb-4">
|
73
|
+
<span class="guest-result">Ждем значение через 5 секунд...</span>
|
74
|
+
</div>
|
75
|
+
<script type="module">
|
76
|
+
import { GuestPool } from "patron-oop";
|
77
|
+
|
78
|
+
class ValueAfterDelay {
|
79
|
+
constructor(theValue, delay) {
|
80
|
+
this.theValue = theValue;
|
81
|
+
this.delay = delay;
|
82
|
+
this.pool = new GuestPool();
|
83
|
+
}
|
84
|
+
|
85
|
+
value(guest) {
|
86
|
+
this.pool.add(guest);
|
87
|
+
setTimeout(() => {
|
88
|
+
this.pool.give(this.theValue);
|
89
|
+
}, this.delay);
|
90
|
+
}
|
91
|
+
}
|
92
|
+
|
93
|
+
const fnGuest = (value) => {
|
94
|
+
document.querySelector(".guest-result").textContent = value;
|
95
|
+
};
|
96
|
+
new ValueAfterDelay(42, 5000).value(fnGuest);
|
97
|
+
</script>
|
98
|
+
|
99
|
+
<div class="font-bold mt-8">Смотрите также</div>
|
100
|
+
|
101
|
+
<p class="text-gray-600 text-lg mb-4 dynamic-navigation">
|
102
|
+
<a
|
103
|
+
class="inline-block whitespace-nowrap rounded-[0.27rem] bg-primary-100 px-[0.65em] pb-[0.25em] pt-[0.35em] text-center align-baseline text-[0.75em] font-bold leading-none text-white bg-slate-900"
|
104
|
+
href="/patron/patron-pool"
|
105
|
+
>PatronPool</a
|
106
|
+
>
|
107
|
+
</p>
|
@@ -0,0 +1,66 @@
|
|
1
|
+
<h1 class="pb-3 text-xl font-semibold text-gray-600">Класс GuestSync</h1>
|
2
|
+
|
3
|
+
<a
|
4
|
+
href="https://github.com/kosukhin/patron/blob/main/src/Guest/GuestSync.ts"
|
5
|
+
target="_blank"
|
6
|
+
class="inline-flex gap-1 items-center bg-gray-100 border-0 py-1 px-3 focus:outline-none hover:bg-gray-200 rounded text-base mt-4 md:mt-0 mb-4"
|
7
|
+
>
|
8
|
+
<img
|
9
|
+
src="./assets/img/github_16.jpg"
|
10
|
+
width="16"
|
11
|
+
height="16"
|
12
|
+
/>
|
13
|
+
GuestSync на GitHub
|
14
|
+
</a>
|
15
|
+
|
16
|
+
<p class="text-gray-600 text-lg mb-4">
|
17
|
+
Предназначен для синхронного возвращения значения из объекта
|
18
|
+
</p>
|
19
|
+
|
20
|
+
<p class="text-gray-600 text-lg mb-4">
|
21
|
+
Полезно в случаях работы с синхронным(процедурным) кодом, когда нужно вынуть
|
22
|
+
значение из объекта и передать в виде чистых данных(nacked data). Использовать
|
23
|
+
этот класс часто не рекомендуется, наиболее вероятная область применения -
|
24
|
+
создание адаптеров с процедурным кодом
|
25
|
+
</p>
|
26
|
+
|
27
|
+
<p class="text-gray-600 text-lg mb-4">
|
28
|
+
Значение внутри <b>GuestSync</b> мутируется! Стоит быть аккуратным при
|
29
|
+
использовании и учитывать это
|
30
|
+
</p>
|
31
|
+
|
32
|
+
<p class="text-gray-600 text-lg mb-0 font-bold">Пример 1.</p>
|
33
|
+
<pre
|
34
|
+
class="mb-4"
|
35
|
+
><code class="language-js">import { SourceWithPool, GuestSync } from 'patron-oop';
|
36
|
+
|
37
|
+
const source = new SourceWithPool('Успешно установлено синхронно!');
|
38
|
+
const syncGuest = new GuestSync('');
|
39
|
+
source.value(syncGuest);
|
40
|
+
|
41
|
+
document.querySelector('.guest-result').textContent = syncGuest.value();
|
42
|
+
</code></pre>
|
43
|
+
|
44
|
+
<p class="text-gray-600 text-lg mb-0 font-bold">Результат 1.</p>
|
45
|
+
<div class="example mb-4">
|
46
|
+
<span class="guest-result">Значение установится синхронно!</span>
|
47
|
+
</div>
|
48
|
+
<script type="module">
|
49
|
+
import { SourceWithPool, GuestSync } from "patron-oop";
|
50
|
+
|
51
|
+
const source = new SourceWithPool("Успешно установлено синхронно!");
|
52
|
+
const syncGuest = new GuestSync('');
|
53
|
+
source.value(syncGuest);
|
54
|
+
|
55
|
+
document.querySelector(".guest-result").textContent = syncGuest.value();
|
56
|
+
</script>
|
57
|
+
|
58
|
+
<div class="font-bold mt-8">Смотрите также</div>
|
59
|
+
|
60
|
+
<p class="text-gray-600 text-lg mb-4 dynamic-navigation">
|
61
|
+
<a
|
62
|
+
class="inline-block whitespace-nowrap rounded-[0.27rem] bg-primary-100 px-[0.65em] pb-[0.25em] pt-[0.35em] text-center align-baseline text-[0.75em] font-bold leading-none text-white bg-slate-900"
|
63
|
+
href="/source"
|
64
|
+
>Source</a
|
65
|
+
>
|
66
|
+
</p>
|
@@ -0,0 +1,115 @@
|
|
1
|
+
<h1 class="pb-3 text-xl font-semibold text-gray-600">Класс Guest</h1>
|
2
|
+
|
3
|
+
<a
|
4
|
+
href="https://github.com/kosukhin/patron/blob/main/src/Guest/Guest.ts#L27"
|
5
|
+
target="_blank"
|
6
|
+
class="inline-flex gap-1 items-center bg-gray-100 border-0 py-1 px-3 focus:outline-none hover:bg-gray-200 rounded text-base mt-4 md:mt-0 mb-4"
|
7
|
+
>
|
8
|
+
<img
|
9
|
+
src="./assets/img/github_16.jpg"
|
10
|
+
width="16"
|
11
|
+
height="16"
|
12
|
+
/>
|
13
|
+
Guest на GitHub
|
14
|
+
</a>
|
15
|
+
|
16
|
+
<p class="text-gray-600 text-lg mb-4">
|
17
|
+
Предназначен для создания новых экземпляров
|
18
|
+
<span class="dynamic-navigation">
|
19
|
+
<a
|
20
|
+
class="inline-block whitespace-nowrap rounded-[0.27rem] bg-primary-100 px-[0.65em] pb-[0.25em] pt-[0.35em] text-center align-baseline text-[0.75em] font-bold leading-none text-white bg-slate-900"
|
21
|
+
target="_blank"
|
22
|
+
href="https://github.com/kosukhin/patron/blob/main/src/Guest/Guest.ts#L12"
|
23
|
+
>
|
24
|
+
GuestObjectType
|
25
|
+
</a>
|
26
|
+
</span>
|
27
|
+
из функции-колбэка
|
28
|
+
</p>
|
29
|
+
|
30
|
+
<p class="text-gray-600 text-lg mb-4">
|
31
|
+
Это поведение полезно в случаях, когда нужно динамически построить
|
32
|
+
<span class="dynamic-navigation">
|
33
|
+
<a
|
34
|
+
class="inline-block whitespace-nowrap rounded-[0.27rem] bg-primary-100 px-[0.65em] pb-[0.25em] pt-[0.35em] text-center align-baseline text-[0.75em] font-bold leading-none text-white bg-slate-900"
|
35
|
+
href="/terminology/visitor"
|
36
|
+
>
|
37
|
+
посетителя
|
38
|
+
</a>
|
39
|
+
</span>
|
40
|
+
на основе функции, используя какие-то переменные из скоупа, где создана
|
41
|
+
функция
|
42
|
+
</p>
|
43
|
+
|
44
|
+
<p class="text-gray-600 text-lg mb-0 font-bold">Пример 1.</p>
|
45
|
+
<pre
|
46
|
+
class="mb-4 w-full"
|
47
|
+
><code class="language-js">import { Guest } from 'patron-oop';
|
48
|
+
|
49
|
+
class Timestamp {
|
50
|
+
seconds(guest) {
|
51
|
+
guest.give(Date.now())
|
52
|
+
}
|
53
|
+
}
|
54
|
+
|
55
|
+
const timestamp = new Timestamp();
|
56
|
+
timestamp.seconds(new Guest((timestamp) => {
|
57
|
+
console.log('timestamp is', timestamp);
|
58
|
+
}));
|
59
|
+
</code></pre>
|
60
|
+
|
61
|
+
<p class="text-gray-600 text-lg mb-0 font-bold">Результат 1.</p>
|
62
|
+
<div class="example mb-4">
|
63
|
+
<span class="guest-result">Result here</span>
|
64
|
+
</div>
|
65
|
+
<script type="module">
|
66
|
+
import { Guest } from "patron-oop";
|
67
|
+
|
68
|
+
class Timestamp {
|
69
|
+
seconds(guest) {
|
70
|
+
guest.give(Date.now());
|
71
|
+
}
|
72
|
+
}
|
73
|
+
|
74
|
+
const timestamp = new Timestamp();
|
75
|
+
timestamp.seconds(
|
76
|
+
new Guest((timestamp) => {
|
77
|
+
document.querySelector(
|
78
|
+
".guest-result"
|
79
|
+
).textContent = `timestamp is ${timestamp}`;
|
80
|
+
})
|
81
|
+
);
|
82
|
+
</script>
|
83
|
+
|
84
|
+
<p class="text-gray-600 text-lg mb-4">
|
85
|
+
Возможность создавать объект-посетитель из функции была
|
86
|
+
единственной в первых версиях библиотеки. На текущий момент вы можете также
|
87
|
+
передать функцию-колбэк в качестве посетителя, тк функция соответствует типу
|
88
|
+
<span class="dynamic-navigation">
|
89
|
+
<a
|
90
|
+
class="inline-block whitespace-nowrap rounded-[0.27rem] bg-primary-100 px-[0.65em] pb-[0.25em] pt-[0.35em] text-center align-baseline text-[0.75em] font-bold leading-none text-white bg-slate-900"
|
91
|
+
target="_blank"
|
92
|
+
href="https://github.com/kosukhin/patron/blob/main/src/Guest/Guest.ts#L17"
|
93
|
+
>
|
94
|
+
GuestType
|
95
|
+
</a>
|
96
|
+
</span>
|
97
|
+
Это позволяет не создавать лишних объектных-оберток
|
98
|
+
</p>
|
99
|
+
|
100
|
+
<p class="text-gray-600 text-lg font-bold mb-0">Пример 2.</p>
|
101
|
+
<pre
|
102
|
+
class="mt-0 w-full"
|
103
|
+
><code class="language-js">import { Guest } from 'patron-oop';
|
104
|
+
|
105
|
+
class Timestamp {
|
106
|
+
seconds(guest) {
|
107
|
+
give(Date.now(), guest);
|
108
|
+
}
|
109
|
+
}
|
110
|
+
|
111
|
+
const timestamp = new Timestamp();
|
112
|
+
timestamp.seconds((timestamp) => {
|
113
|
+
console.log('timestamp is', timestamp);
|
114
|
+
});
|
115
|
+
</code></pre>
|
@@ -0,0 +1,59 @@
|
|
1
|
+
<section class="text-gray-600 body-font">
|
2
|
+
<div class="py-1 flex flex-col w-full">
|
3
|
+
<div class="lg:w-4/6 mx-auto w-full">
|
4
|
+
<div class="flex flex-col sm:flex-row w-full">
|
5
|
+
<div class="sm:w-1/3 text-center">
|
6
|
+
<div
|
7
|
+
class="flex flex-col items-center text-center justify-center guest-menu"
|
8
|
+
>
|
9
|
+
<h2 class="font-medium title-font text-gray-900 text-lg">
|
10
|
+
<a href="/guest"> Guest </a>
|
11
|
+
</h2>
|
12
|
+
<div class="w-12 h-1 bg-indigo-500 rounded mt-2 mb-4"></div>
|
13
|
+
<ul class="text-gray-900">
|
14
|
+
<li class="w-full border-b-2 border-neutral-100 py-4">
|
15
|
+
<a href="/guest/guest-object"> GuestObject </a>
|
16
|
+
</li>
|
17
|
+
<li class="w-full border-b-2 border-neutral-100 py-4">
|
18
|
+
<a href="/guest/guest-sync"> GuestSync </a>
|
19
|
+
</li>
|
20
|
+
<li class="w-full py-4">
|
21
|
+
<a href="/guest/guest-disposable"> GuestDisposable </a>
|
22
|
+
</li>
|
23
|
+
<li class="w-full border-b-2 border-neutral-100 py-4">
|
24
|
+
<a href="/guest/guest-cast"> GuestCast </a>
|
25
|
+
</li>
|
26
|
+
<li class="w-full border-b-2 border-neutral-100 py-4">
|
27
|
+
<a href="/guest/guest-pool"> GuestPool </a>
|
28
|
+
</li>
|
29
|
+
<li class="w-full border-b-2 border-neutral-100 py-4">
|
30
|
+
<a href="/guest/guest-applied"> GuestApplied </a>
|
31
|
+
</li>
|
32
|
+
<li class="w-full border-b-2 border-neutral-100 py-4">
|
33
|
+
<a href="/guest/guest-executor-applied"> GuestExecutorApplied </a>
|
34
|
+
</li>
|
35
|
+
</ul>
|
36
|
+
</div>
|
37
|
+
</div>
|
38
|
+
<div
|
39
|
+
class="w-full sm:w-2/3 sm:pl-8 sm:border-l border-gray-200 sm:border-t-0 border-t mt-4 sm:mt-0"
|
40
|
+
>
|
41
|
+
<div class="guest-loader">
|
42
|
+
<div class="w-full flex justify-center">
|
43
|
+
<div
|
44
|
+
class="inline-block h-8 w-8 animate-spin rounded-full border-4 border-solid border-current border-e-transparent align-[-0.125em] text-indigo-500 motion-reduce:animate-[spin_1.5s_linear_infinite]"
|
45
|
+
role="status"
|
46
|
+
>
|
47
|
+
<span
|
48
|
+
class="!absolute !-m-px !h-px !w-px !overflow-hidden !whitespace-nowrap !border-0 !p-0 ![clip:rect(0,0,0,0)]"
|
49
|
+
>Loading...</span
|
50
|
+
>
|
51
|
+
</div>
|
52
|
+
</div>
|
53
|
+
</div>
|
54
|
+
<div class="guest-page-area"></div>
|
55
|
+
</div>
|
56
|
+
</div>
|
57
|
+
</div>
|
58
|
+
</div>
|
59
|
+
</section>
|