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.
Files changed (140) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/dist/patron.cjs +106 -35
  3. package/dist/patron.cjs.map +1 -1
  4. package/dist/patron.d.ts +40 -1
  5. package/dist/patron.js +103 -36
  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 +103 -36
  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/Patron/PatronApplied.ts +22 -0
  139. package/src/Patron/PatronExecutorApplied.ts +25 -0
  140. package/src/index.ts +4 -0
@@ -0,0 +1,25 @@
1
+ <h1 class="pb-3 text-xl font-semibold text-gray-600">Представление</h1>
2
+
3
+ <a
4
+ href="https://github.com/kosukhin/patron/blob/main/src/Guest/Guest.ts#L14"
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
+ introduction на GitHub
14
+ </a>
15
+
16
+ <p class="text-gray-600 text-lg mb-4">
17
+ Объекты-посетители умеют представляться. Это значит, что у таких объектов есть
18
+ метод introduction(), который на текущий момент может вернуть только два
19
+ строковых значения: guest или patron
20
+ </p>
21
+
22
+ <p class="text-gray-600 text-lg mb-4">
23
+ По-умолчанию посетитель считается гостем, например если посетитель - это
24
+ функция, или если посетитель является объектом без метода introduction()
25
+ </p>
@@ -0,0 +1,10 @@
1
+ <h1 class="pb-3 text-xl font-semibold text-gray-600">Патрон</h1>
2
+
3
+ <p class="text-gray-600 text-lg mb-4">
4
+ Патрон - это посетитель, у которого есть метод introduction и этот метод
5
+ возвращает значение 'patron'
6
+ </p>
7
+
8
+ <p class="text-gray-600 text-lg mb-4">
9
+ Объекты патроны получают новые значения от источников данных
10
+ </p>
@@ -0,0 +1,55 @@
1
+ <h1 class="pb-3 text-xl font-semibold text-gray-600">Источник данных</h1>
2
+
3
+ <a
4
+ href="https://github.com/kosukhin/patron/blob/main/src/Source/Source.ts#L3"
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
+ SourceType на 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/Source/Source.ts#L3-L5"
23
+ >
24
+ SourceType
25
+ </a>
26
+ </span>
27
+ У такого объекта должен быть метод value и объект должен ожидать, что к нему
28
+ придет посетитель за значением
29
+ </p>
30
+
31
+ <p class="text-gray-600 text-lg mb-4">
32
+ В библиотеке уже есть готовые решения для источников данных, которые можно
33
+ создать либо на основе функции либо на основе начального значения. Вот эти
34
+ готовые источники:
35
+ <span class="text-gray-600 text-lg mb-4 dynamic-navigation">
36
+ <a
37
+ 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"
38
+ href="/source"
39
+ >
40
+ Source
41
+ </a>
42
+ <a
43
+ 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"
44
+ href="/source"
45
+ >
46
+ Source
47
+ </a>
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="/source/source-empty"
51
+ >
52
+ SourceEmpty
53
+ </a>
54
+ </span>
55
+ </p>
@@ -0,0 +1,19 @@
1
+ <h1 class="pb-3 text-xl font-semibold text-gray-600">Посетитель</h1>
2
+
3
+ <p class="text-gray-600 text-lg mb-4">
4
+ Посетитель - это объект или функция, который приходит к источнику данных,
5
+ чтобы получить какое-то значение
6
+ </p>
7
+
8
+ <p class="text-gray-600 text-lg mb-4">
9
+ Если посетитель - функция, то он по-умолчанию считается гостем
10
+ </p>
11
+
12
+ <p class="text-gray-600 text-lg mb-4">
13
+ Если посетитель - объект без метода introduction, то также считаем его гостем
14
+ </p>
15
+
16
+ <p class="text-gray-600 text-lg mb-4">
17
+ Если посетитель - объект, имеющий метод introduction то при значение guest -
18
+ будет гостем, при значении patron - патроном
19
+ </p>
@@ -0,0 +1,53 @@
1
+ <section class="text-gray-600 body-font">
2
+ <div class="py-1 mx-auto flex flex-col">
3
+ <div class="lg:w-4/6 mx-auto">
4
+ <div class="flex flex-col sm:flex-row">
5
+ <div class="sm:w-1/3 text-center">
6
+ <div
7
+ class="flex flex-col items-center text-center justify-center terminology-menu"
8
+ >
9
+ <h2 class="font-medium title-font text-gray-900 text-lg">
10
+ <a href="/terminology"> Terminology </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="/terminology/introduction"> Представление </a>
16
+ </li>
17
+ <li class="w-full border-b-2 border-neutral-100 py-4">
18
+ <a href="/terminology/visitor"> Посетитель </a>
19
+ </li>
20
+ <li class="w-full border-b-2 border-neutral-100 py-4">
21
+ <a href="/terminology/the-guest"> Гость </a>
22
+ </li>
23
+ <li class="w-full border-b-2 border-neutral-100 py-4">
24
+ <a href="/terminology/the-patron"> Патрон </a>
25
+ </li>
26
+ <li class="w-full border-b-2 border-neutral-100 py-4">
27
+ <a href="/terminology/the-source"> Источник данных </a>
28
+ </li>
29
+ </ul>
30
+ </div>
31
+ </div>
32
+ <div
33
+ 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"
34
+ >
35
+ <div class="terminology-loader">
36
+ <div class="w-full flex justify-center">
37
+ <div
38
+ 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]"
39
+ role="status"
40
+ >
41
+ <span
42
+ class="!absolute !-m-px !h-px !w-px !overflow-hidden !whitespace-nowrap !border-0 !p-0 ![clip:rect(0,0,0,0)]"
43
+ >Loading...</span
44
+ >
45
+ </div>
46
+ </div>
47
+ </div>
48
+ <div class="terminology-page-area"></div>
49
+ </div>
50
+ </div>
51
+ </div>
52
+ </div>
53
+ </section>
@@ -0,0 +1,47 @@
1
+ <h1 class="pb-3 text-xl font-semibold text-gray-600">Функция give</h1>
2
+
3
+ <div class="flex gap-2">
4
+ <a
5
+ href="https://github.com/kosukhin/patron/blob/main/src/Guest/Guest.ts#L19-L25"
6
+ target="_blank"
7
+ 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"
8
+ >
9
+ <img
10
+ src="./assets/img/github_16.jpg"
11
+ width="16"
12
+ height="16"
13
+ />
14
+ give на GitHub
15
+ </a>
16
+
17
+ <a
18
+ href="https://github.com/kosukhin/patron/blob/main/src/Guest/Guest.ts#L17"
19
+ target="_blank"
20
+ 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"
21
+ >
22
+ <img
23
+ src="./assets/img/github_16.jpg"
24
+ width="16"
25
+ height="16"
26
+ />
27
+ GuestType на GitHub
28
+ </a>
29
+ </div>
30
+
31
+ <p class="text-gray-600 text-lg mb-4">
32
+ Из-за того, что гостем может быть как объект удовлетворяющий интерфейсу
33
+ GuestObjectType так и любая функция GuestExecutorType, то появилась функция
34
+ give, которая может передать значение value любому посетителю неважно будет
35
+ это гость патрон или функция
36
+ </p>
37
+
38
+ <div class="font-bold mt-8">Смотрите также</div>
39
+
40
+ <p class="text-gray-600 text-lg mb-4 dynamic-navigation">
41
+ <a
42
+ 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"
43
+ href="/guest"
44
+ >
45
+ Guest
46
+ </a>
47
+ </p>
@@ -0,0 +1,24 @@
1
+ <h1 class="pb-3 text-xl font-semibold text-gray-600">Утилиты</h1>
2
+
3
+ <p class="text-gray-600 text-lg mb-4">
4
+ В этом разделе собрана документация по вспомогательным функциям и классам
5
+ библиотеки Patron
6
+ </p>
7
+
8
+ <p class="text-gray-600 text-lg mb-4">
9
+ Основные классы библиотеки вынесены в верхнее меню сайта(этой документации), а
10
+ все вспомогательные модули будут описаны здесь
11
+ </p>
12
+
13
+ <p class="text-gray-600 text-lg mb-4">
14
+ Нужно отметить, что основные классы библиотеки:
15
+ <link-dynamic href="/guest">Guest</link-dynamic>,
16
+ <link-dynamic href="/patron">Patron</link-dynamic>,
17
+ <link-dynamic href="/source">Source</link-dynamic> и их производные работают
18
+ на уровне человеческой логики, А классы из этого раздела(utils) предназначены
19
+ для работы на уровне компьютера.
20
+ </p>
21
+
22
+ <p class="text-gray-600 text-lg mb-4">
23
+ В левом меню этого раздела вы найдете все утилиты и их описание
24
+ </p>
@@ -0,0 +1,22 @@
1
+ <h1 class="pb-3 text-xl font-semibold text-gray-600">Функция isSource</h1>
2
+
3
+ <a
4
+ href="https://github.com/kosukhin/patron/blob/main/src/Source/Source.ts#L25-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
+ isSource на GitHub
14
+ </a>
15
+
16
+ <p class="text-gray-600 text-lg mb-4">
17
+ Позволяет проверить является ли аргумент
18
+ <link-dynamic href="/source">источником данных</link-dynamic>.
19
+ Источниками данных могут быть функции или объекты имеющие value метод. С этой
20
+ функцией нужно обращаться аккуратно она не может идеально точно отличить
21
+ источник данных от любой другой функции
22
+ </p>
@@ -0,0 +1,21 @@
1
+ <h1 class="pb-3 text-xl font-semibold text-gray-600">Функция isGuest</h1>
2
+
3
+ <a
4
+ href="https://github.com/kosukhin/patron/blob/main/src/Guest/Guest.ts#L33-L35"
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
+ isGuest на GitHub
14
+ </a>
15
+
16
+ <p class="text-gray-600 text-lg mb-4">
17
+ Позволяет проверить является ли аргумент
18
+ <link-dynamic href="/guest">гостем</link-dynamic>. Гостями могут быть функции
19
+ или объекты имеющие give метод. С этой функцией нужно обращаться аккуратно она
20
+ не может идеально точно отличить гостя от любой другой функции
21
+ </p>
@@ -0,0 +1,53 @@
1
+ <h1 class="pb-3 text-xl font-semibold text-gray-600">
2
+ Функция isPatronInPools
3
+ </h1>
4
+
5
+ <a
6
+ href="https://github.com/kosukhin/patron/blob/main/src/Patron/PatronPool.ts#L14-L22"
7
+ target="_blank"
8
+ 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"
9
+ >
10
+ <img
11
+ src="./assets/img/github_16.jpg"
12
+ width="16"
13
+ height="16"
14
+ />
15
+ isPatronInPools на GitHub
16
+ </a>
17
+
18
+ <p class="text-gray-600 text-lg mb-4">
19
+ Эта функция очень полезна для того, чтобы проверить находится ли патрон в
20
+ каком-нибудь пуле. В целях отладки возможных проблем или сцелью принятия
21
+ каких-то решений можно использовать эту функцию
22
+ </p>
23
+
24
+ <p class="text-gray-600 text-lg mb-4">
25
+ Например если в метод объекта приходит гость и мы этому гостю даем значение от
26
+ Source, то в случае появление новых значений в источнике можно проверить
27
+ существует ли патрон в пуле, такое бывает нужно при использовании
28
+ SourceAll в комбинации с GuestCast, потому что в этом случае источник
29
+ будет общаться не с оригинальным патроном а с промежуточным
30
+ </p>
31
+
32
+ <div class="font-bold mt-8">Смотрите также</div>
33
+
34
+ <p class="text-gray-600 text-lg mb-4 dynamic-navigation">
35
+ <a
36
+ 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"
37
+ href="/source"
38
+ >
39
+ Source
40
+ </a>
41
+ <a
42
+ 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"
43
+ href="/source/source-all"
44
+ >
45
+ SourceAll
46
+ </a>
47
+ <a
48
+ 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"
49
+ href="/guest/guest-cast"
50
+ >
51
+ GuestCast
52
+ </a>
53
+ </p>
@@ -0,0 +1,44 @@
1
+ <h1 class="pb-3 text-xl font-semibold text-gray-600">Класс Private</h1>
2
+
3
+ <a
4
+ href="https://github.com/kosukhin/patron/blob/main/src/Private/Private.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
+ Private на GitHub
14
+ </a>
15
+
16
+ <p class="text-gray-600 text-lg mb-4">
17
+ Иногда мы хотим получить зависимость, с которой мы сможем вести
18
+ приватное общение, именно для этого и создан тип
19
+ <link-reloadable
20
+ target-blank
21
+ href="https://github.com/kosukhin/patron/blob/main/src/Private/Private.ts#L4-L6"
22
+ >
23
+ PrivateType
24
+ </link-reloadable>
25
+ </p>
26
+
27
+ <p class="text-gray-600 text-lg mb-4">
28
+ Создавая зависимость от PrivateType мы говорим, что планируем
29
+ отправлять личные сообщения которые никто не должен больше прочитать.
30
+ Для достижения этой цели отправки приватных сообщений есть классы Private и PrivateClass. Private создает объект из функции, а PrivateClass создает частный объект на основе класса.
31
+ </p>
32
+
33
+ <p class="text-gray-600 text-lg mb-0 font-bold">Пример 1.</p>
34
+ <pre class="mb-4"><code class="language-js">class SomeAction {
35
+ public constructor(private source: PrivateType&lt;SourceType&lt;number>>) { }
36
+
37
+ do() {
38
+ // Тут мы уверены что 'hello' передано лично и никто его не получит
39
+ this.source.get('hello').receiving(theNum => {
40
+ console.log('do something with num', theNum);
41
+ })
42
+ }
43
+ }
44
+ </code></pre>
@@ -0,0 +1,57 @@
1
+ <h1 class="pb-3 text-xl font-semibold text-gray-600">
2
+ Функция removePatronFromPools
3
+ </h1>
4
+
5
+ <a
6
+ href="https://github.com/kosukhin/patron/blob/main/src/Patron/PatronPool.ts#L7-L11"
7
+ target="_blank"
8
+ 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"
9
+ >
10
+ <img
11
+ src="./assets/img/github_16.jpg"
12
+ width="16"
13
+ height="16"
14
+ />
15
+ removePatronFromPools на GitHub
16
+ </a>
17
+
18
+ <p class="text-gray-600 text-lg mb-4">
19
+ Позволяет удалить патрона из всех пулов. Полезно в случаях когда по бизнес
20
+ логике патрон больше не должен получать обновления
21
+ </p>
22
+
23
+ <p class="text-gray-600 text-lg mb-4">
24
+ Этого же эффекта - удаление патрона из пула можно добиться другими способами,
25
+ например если у вас есть доступ к объекту-пулу патронов, в этом случае можно
26
+ вызвать метод remove от пула
27
+ </p>
28
+
29
+ <p class="text-gray-600 text-lg mb-4">
30
+ Второй способ использовать класс GuestDisposable, который принимает 2
31
+ аргумента. Первый аргумент - это гость, который мы превращаем в
32
+ самоотменяемого гостя. Второй аргумент - это функция проверки нужно ли
33
+ отменять(удалять) патрон из пулов
34
+ </p>
35
+
36
+ <p class="text-gray-600 text-lg mb-4">
37
+ Третий способ - вы можете сделать собственный класс патрон, имплементировать
38
+ интерфейс GuestDisposableType - в котором описан метод disposed, в случаях,
39
+ когда этот метод возвращает true - патрон удаляется из пула
40
+ </p>
41
+
42
+ <div class="font-bold mt-8">Смотрите также</div>
43
+
44
+ <p class="text-gray-600 text-lg mb-4 dynamic-navigation">
45
+ <a
46
+ 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"
47
+ href="/guest/guest-disposable"
48
+ >
49
+ GuestDisposable
50
+ </a>
51
+ <a
52
+ 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"
53
+ href="/patron/patron-pool"
54
+ >
55
+ PatronPool
56
+ </a>
57
+ </p>
@@ -0,0 +1,47 @@
1
+ <h1 class="pb-3 text-xl font-semibold text-gray-600">Функция value</h1>
2
+
3
+ <div class="flex gap-2">
4
+ <a
5
+ href="https://github.com/kosukhin/patron/blob/main/src/Source/Source.ts#L11"
6
+ target="_blank"
7
+ 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"
8
+ >
9
+ <img
10
+ src="./assets/img/github_16.jpg"
11
+ width="16"
12
+ height="16"
13
+ />
14
+ value на GitHub
15
+ </a>
16
+
17
+ <a
18
+ href="https://github.com/kosukhin/patron/blob/main/src/Source/Source.ts#L9"
19
+ target="_blank"
20
+ 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"
21
+ >
22
+ <img
23
+ src="./assets/img/github_16.jpg"
24
+ width="16"
25
+ height="16"
26
+ />
27
+ SourceType на GitHub
28
+ </a>
29
+ </div>
30
+
31
+ <p class="text-gray-600 text-lg mb-4">
32
+ Из-за того, что источником данных может быть как объект удовлетворяющий
33
+ интерфейсу SourceObjectType так и любая функция SourceExecutorType, то
34
+ появилась функция value, которая может передать значение любому посетителю
35
+ неважно будет это гость патрон или функция
36
+ </p>
37
+
38
+ <div class="font-bold mt-8">Смотрите также</div>
39
+
40
+ <p class="text-gray-600 text-lg mb-4 dynamic-navigation">
41
+ <a
42
+ 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"
43
+ href="/source"
44
+ >
45
+ Source
46
+ </a>
47
+ </p>
@@ -0,0 +1,61 @@
1
+ <section class="text-gray-600 body-font">
2
+ <div class="py-1 mx-auto flex flex-col">
3
+ <div class="lg:w-4/6 mx-auto">
4
+ <div class="flex flex-col sm:flex-row">
5
+ <div class="sm:w-1/3 text-center">
6
+ <div
7
+ class="flex flex-col items-center text-center justify-center utils-menu"
8
+ >
9
+ <h2 class="font-medium title-font text-gray-900 text-lg">
10
+ <a href="/utils"> Utils </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="/utils/private"> Private </a>
16
+ </li>
17
+ <li class="w-full border-b-2 border-neutral-100 py-4">
18
+ <a href="/utils/give"> give </a>
19
+ </li>
20
+ <li class="w-full border-b-2 border-neutral-100 py-4">
21
+ <a href="/utils/value"> value </a>
22
+ </li>
23
+ <li class="w-full border-b-2 border-neutral-100 py-4">
24
+ <a href="/utils/is-patron-in-pools"> isPatronInPools </a>
25
+ </li>
26
+ <li class="w-full border-b-2 border-neutral-100 py-4">
27
+ <a href="/utils/remove-patron-from-pools">
28
+ removePatronFromPools
29
+ </a>
30
+ </li>
31
+ <li class="w-full border-b-2 border-neutral-100 py-4">
32
+ <a href="/utils/is-guest"> isGuest </a>
33
+ </li>
34
+ <li class="w-full border-b-2 border-neutral-100 py-4">
35
+ <a href="/utils/is-source"> isSource </a>
36
+ </li>
37
+ </ul>
38
+ </div>
39
+ </div>
40
+ <div
41
+ 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"
42
+ >
43
+ <div class="utils-loader">
44
+ <div class="w-full flex justify-center">
45
+ <div
46
+ 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]"
47
+ role="status"
48
+ >
49
+ <span
50
+ class="!absolute !-m-px !h-px !w-px !overflow-hidden !whitespace-nowrap !border-0 !p-0 ![clip:rect(0,0,0,0)]"
51
+ >Loading...</span
52
+ >
53
+ </div>
54
+ </div>
55
+ </div>
56
+ <div class="utils-page-area"></div>
57
+ </div>
58
+ </div>
59
+ </div>
60
+ </div>
61
+ </section>
package/eslint.config.mjs CHANGED
@@ -27,6 +27,12 @@ export default [
27
27
  rules: {
28
28
  "@typescript-eslint/no-explicit-any": ["off"],
29
29
  "prettier.bracketSpacing": ["off"],
30
+ "@typescript-eslint/explicit-member-accessibility": [
31
+ "error",
32
+ {
33
+ accessibility: "explicit",
34
+ },
35
+ ],
30
36
  },
31
37
  },
32
38
  {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "patron-oop",
3
- "version": "1.45.0",
3
+ "version": "1.46.0",
4
4
  "description": "",
5
5
  "type": "module",
6
6
  "main": "dist/patron.js",
@@ -0,0 +1,22 @@
1
+ import { GuestObjectType, GuestType } from "../Guest/Guest";
2
+ import { GuestApplied } from "../Guest/GuestApplied";
3
+
4
+ /**
5
+ * @url https://kosukhin.github.io/patron.site/#/patron/patron-applied
6
+ */
7
+ export class PatronApplied<T, R> implements GuestObjectType<T> {
8
+ private guestApplied: GuestApplied<T, R>;
9
+
10
+ public constructor(baseGuest: GuestType<R>, applier: (value: T) => R) {
11
+ this.guestApplied = new GuestApplied(baseGuest, applier);
12
+ }
13
+
14
+ public give(value: T): this {
15
+ this.guestApplied.give(value);
16
+ return this;
17
+ }
18
+
19
+ public introduction(): "guest" | "patron" {
20
+ return "patron";
21
+ }
22
+ }
@@ -0,0 +1,25 @@
1
+ import { GuestExecutorType, GuestObjectType, GuestType } from "../Guest/Guest";
2
+ import { GuestExecutorApplied } from "../Guest/GuestExecutorApplied";
3
+
4
+ /**
5
+ * @url https://kosukhin.github.io/patron.site/#/patron/patron-executor-applied
6
+ */
7
+ export class PatronExecutorApplied<T> implements GuestObjectType<T> {
8
+ private guestApplied: GuestExecutorApplied<T>;
9
+
10
+ public constructor(
11
+ baseGuest: GuestType<T>,
12
+ applier: (executor: GuestExecutorType) => GuestExecutorType,
13
+ ) {
14
+ this.guestApplied = new GuestExecutorApplied(baseGuest, applier);
15
+ }
16
+
17
+ public give(value: T): this {
18
+ this.guestApplied.give(value);
19
+ return this;
20
+ }
21
+
22
+ public introduction(): "guest" | "patron" {
23
+ return "patron";
24
+ }
25
+ }
package/src/index.ts CHANGED
@@ -5,9 +5,12 @@ export * from "./Guest/GuestSync";
5
5
  export * from "./Guest/GuestObject";
6
6
  export * from "./Guest/GuestDisposable";
7
7
  export * from "./Guest/GuestApplied";
8
+ export * from "./Guest/GuestExecutorApplied";
8
9
  export * from "./Patron/Patron";
9
10
  export * from "./Patron/PatronOnce";
10
11
  export * from "./Patron/PatronPool";
12
+ export * from "./Patron/PatronApplied";
13
+ export * from "./Patron/PatronExecutorApplied";
11
14
  export * from "./Source/SourceAll";
12
15
  export * from "./Source/Source";
13
16
  export * from "./Source/SourceSequence";
@@ -18,5 +21,6 @@ export * from "./Source/SourceWithPool";
18
21
  export * from "./Source/SourceDynamic";
19
22
  export * from "./Source/SourceApplied";
20
23
  export * from "./Source/SourceExecutorApplied";
24
+ export * from "./Source/SourceOnce";
21
25
  export * from "./Private/PrivateClass";
22
26
  export * from "./Private/Private";