@vnejs/docs 0.2.65 → 0.2.66

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 (261) hide show
  1. package/README.md +35 -35
  2. package/architecture/backends.md +18 -0
  3. package/architecture/build.md +37 -0
  4. package/architecture/bundles.md +20 -0
  5. package/architecture/cli.md +25 -0
  6. package/architecture/compatibility.md +22 -0
  7. package/architecture/configs.md +19 -0
  8. package/architecture/contracts.md +30 -0
  9. package/architecture/dependencies.md +55 -0
  10. package/architecture/editor.md +7 -0
  11. package/architecture/games.md +38 -0
  12. package/architecture/helpers.md +14 -0
  13. package/architecture/model.md +43 -0
  14. package/architecture/modules.md +87 -0
  15. package/architecture/packages.md +43 -0
  16. package/architecture/plugins.md +36 -0
  17. package/architecture/uis.md +23 -0
  18. package/changelog/0.2.18.md +7 -0
  19. package/changelog/0.2.19.md +14 -0
  20. package/changelog/0.2.20.md +10 -0
  21. package/changelog/0.2.21.md +5 -0
  22. package/changelog/0.2.22.md +11 -0
  23. package/changelog/0.2.23.md +4 -0
  24. package/changelog/0.2.25.md +6 -0
  25. package/changelog/0.2.26.md +12 -0
  26. package/changelog/0.2.29.md +10 -0
  27. package/changelog/0.2.31.md +5 -0
  28. package/changelog/0.2.32.md +3 -0
  29. package/changelog/0.2.33.md +5 -0
  30. package/changelog/0.2.34.md +8 -0
  31. package/changelog/0.2.35.md +33 -0
  32. package/changelog/0.2.36.md +10 -0
  33. package/changelog/0.2.38.md +19 -0
  34. package/changelog/0.2.39.md +16 -0
  35. package/changelog/0.2.40.md +9 -0
  36. package/changelog/0.2.42.md +3 -0
  37. package/changelog/0.2.43.md +10 -0
  38. package/changelog/0.2.46.md +3 -0
  39. package/changelog/0.2.47.md +25 -0
  40. package/changelog/0.2.49.md +3 -0
  41. package/changelog/0.2.50.md +6 -0
  42. package/changelog/0.2.51.md +6 -0
  43. package/changelog/0.2.52.md +5 -0
  44. package/changelog/0.2.53.md +12 -0
  45. package/changelog/0.2.55.md +19 -0
  46. package/changelog/0.2.56.md +11 -0
  47. package/changelog/0.2.57.md +7 -0
  48. package/changelog/0.2.58.md +8 -0
  49. package/changelog/0.2.59.md +6 -0
  50. package/changelog/0.2.60.md +5 -0
  51. package/changelog/0.2.61.md +11 -0
  52. package/changelog/0.2.62.md +8 -0
  53. package/changelog/0.2.63.md +4 -0
  54. package/changelog/0.2.64.md +4 -0
  55. package/changelog/0.2.65.md +3 -0
  56. package/changelog/0.2.66.md +5 -0
  57. package/changelog/README.md +43 -0
  58. package/manifest.json +66 -5
  59. package/package.json +6 -4
  60. package/plugins/ai/ai.md +29 -29
  61. package/plugins/ai/checkers.md +26 -26
  62. package/plugins/audio/ambient.md +20 -20
  63. package/plugins/audio/audio.md +40 -40
  64. package/plugins/audio/music.md +20 -20
  65. package/plugins/audio/sound.md +20 -20
  66. package/plugins/audio/voice.md +23 -23
  67. package/plugins/canvas/bg.md +44 -44
  68. package/plugins/canvas/bg.speak.md +34 -34
  69. package/plugins/canvas/fill.md +33 -33
  70. package/plugins/canvas/layer.md +35 -35
  71. package/plugins/canvas/sprite.md +46 -46
  72. package/plugins/canvas/sprite.speak.md +33 -33
  73. package/plugins/canvas/text.md +37 -37
  74. package/plugins/canvas/video.md +37 -37
  75. package/plugins/canvas.layers/bl.md +33 -33
  76. package/plugins/canvas.layers/fl.md +33 -33
  77. package/plugins/canvas.layers/ml.md +33 -33
  78. package/plugins/canvas.layers/ul.md +32 -32
  79. package/plugins/canvas.props/animation.md +25 -25
  80. package/plugins/canvas.props/clip.md +22 -22
  81. package/plugins/canvas.props/filters.md +20 -20
  82. package/plugins/canvas.props/mask.md +23 -23
  83. package/plugins/canvas.props/scale.md +20 -20
  84. package/plugins/common/grid.md +23 -23
  85. package/plugins/common/turn.md +18 -18
  86. package/plugins/controls/controls.md +31 -31
  87. package/plugins/controls/cursor.md +54 -54
  88. package/plugins/controls/gamepad.md +56 -56
  89. package/plugins/controls/keyboard.md +17 -17
  90. package/plugins/core/components.md +28 -28
  91. package/plugins/core/interact.md +26 -26
  92. package/plugins/core/logs.md +28 -28
  93. package/plugins/core/media.md +38 -38
  94. package/plugins/core/memory.md +28 -28
  95. package/plugins/core/platforms.md +19 -19
  96. package/plugins/core/scenario.md +48 -48
  97. package/plugins/core/settings.md +24 -24
  98. package/plugins/core/stack.md +39 -39
  99. package/plugins/core/state.md +30 -30
  100. package/plugins/core/storage.md +56 -56
  101. package/plugins/core/system.md +37 -37
  102. package/plugins/core/vendors.md +19 -19
  103. package/plugins/entities/entities.md +16 -16
  104. package/plugins/entities/wallet.md +27 -27
  105. package/plugins/font/montserrat.md +16 -16
  106. package/plugins/game/checkers.md +38 -38
  107. package/plugins/platform/android.md +17 -17
  108. package/plugins/platform/electron.md +21 -21
  109. package/plugins/platform/metric.md +23 -23
  110. package/plugins/rpg/damage.md +22 -22
  111. package/plugins/rpg/hit.md +24 -24
  112. package/plugins/rpg/skills.md +26 -26
  113. package/plugins/save/auto.md +26 -26
  114. package/plugins/save/continue.md +23 -23
  115. package/plugins/save/quick.md +24 -24
  116. package/plugins/save/save.md +37 -37
  117. package/plugins/scales/health.md +17 -17
  118. package/plugins/scales/mana.md +17 -17
  119. package/plugins/scales/scales.md +31 -31
  120. package/plugins/scenario/autoread.md +36 -36
  121. package/plugins/scenario/choose.md +74 -65
  122. package/plugins/scenario/fastforward.md +46 -46
  123. package/plugins/scenario/history.md +41 -41
  124. package/plugins/scenario/pause.md +27 -27
  125. package/plugins/scenario/point_and_click.md +51 -51
  126. package/plugins/scenario/qte.md +54 -54
  127. package/plugins/scenario/random.md +17 -17
  128. package/plugins/settings/filter.md +19 -19
  129. package/plugins/settings/potato.md +22 -22
  130. package/plugins/settings/ratio.md +19 -19
  131. package/plugins/settings/textsize.md +19 -19
  132. package/plugins/settings/volume.md +21 -21
  133. package/plugins/text/inject.md +22 -22
  134. package/plugins/text/locs.md +36 -36
  135. package/plugins/text/meet.md +19 -19
  136. package/plugins/text/smooth.md +33 -33
  137. package/plugins/text/text.md +76 -69
  138. package/plugins/text/wall.md +20 -20
  139. package/plugins/time/date.md +22 -22
  140. package/plugins/time/time.md +23 -23
  141. package/plugins/vars/counters.md +28 -28
  142. package/plugins/vars/flags.md +24 -24
  143. package/plugins/vars/vars.md +29 -29
  144. package/plugins/views/achievement.md +44 -44
  145. package/plugins/views/comment.md +31 -31
  146. package/plugins/views/controls.hints.md +34 -34
  147. package/plugins/views/cursor.md +19 -19
  148. package/plugins/views/fps.md +33 -33
  149. package/plugins/views/gamepad.debug.md +32 -32
  150. package/plugins/views/settings.md +39 -39
  151. package/plugins/views/video.md +37 -37
  152. package/plugins/views.scenario/choose.md +41 -41
  153. package/plugins/views.scenario/interface.controls.md +31 -31
  154. package/plugins/views.scenario/interface.fastforward.md +29 -29
  155. package/plugins/views.scenario/interface.md +74 -74
  156. package/plugins/views.scenario/point_and_click.md +39 -39
  157. package/plugins/views.scenario/qte.md +51 -51
  158. package/plugins/views.screens/checkers.md +35 -35
  159. package/plugins/views.screens/confirm.md +35 -35
  160. package/plugins/views.screens/credits.md +31 -31
  161. package/plugins/views.screens/disclaimer.md +42 -42
  162. package/plugins/views.screens/eula.md +37 -37
  163. package/plugins/views.screens/gallery.full.md +41 -41
  164. package/plugins/views.screens/gallery.md +75 -75
  165. package/plugins/views.screens/gamemenu.md +41 -41
  166. package/plugins/views.screens/history.md +39 -39
  167. package/plugins/views.screens/intro.md +32 -32
  168. package/plugins/views.screens/loading.md +30 -30
  169. package/plugins/views.screens/mainmenu.md +49 -49
  170. package/plugins/views.screens/mainmenu.socials.md +25 -25
  171. package/plugins/views.screens/save.md +66 -66
  172. package/plugins/views.screens/settings.defaults.md +37 -37
  173. package/plugins/views.screens/settings.md +40 -40
  174. package/scenario.catalog/README.md +13 -13
  175. package/scenario.catalog/index.md +35 -35
  176. package/scenario.catalog/stubs/achievement.md +4 -4
  177. package/scenario.catalog/stubs/audio.ambient.md +4 -4
  178. package/scenario.catalog/stubs/audio.music.md +4 -4
  179. package/scenario.catalog/stubs/audio.sound.md +4 -4
  180. package/scenario.catalog/stubs/audio.voice.md +4 -4
  181. package/scenario.catalog/stubs/bl.animation.md +5 -5
  182. package/scenario.catalog/stubs/bl.bg.md +5 -5
  183. package/scenario.catalog/stubs/bl.clip.md +5 -5
  184. package/scenario.catalog/stubs/bl.fill.md +5 -5
  185. package/scenario.catalog/stubs/bl.filter.md +5 -5
  186. package/scenario.catalog/stubs/bl.mask.md +5 -5
  187. package/scenario.catalog/stubs/bl.scale.md +5 -5
  188. package/scenario.catalog/stubs/bl.sprite.md +5 -5
  189. package/scenario.catalog/stubs/bl.text.md +5 -5
  190. package/scenario.catalog/stubs/bl.video.md +5 -5
  191. package/scenario.catalog/stubs/choose.block.md +7 -7
  192. package/scenario.catalog/stubs/choose.md +4 -4
  193. package/scenario.catalog/stubs/choose.option.md +7 -7
  194. package/scenario.catalog/stubs/comment.md +5 -5
  195. package/scenario.catalog/stubs/counter.md +5 -5
  196. package/scenario.catalog/stubs/credits.md +4 -4
  197. package/scenario.catalog/stubs/date.md +4 -4
  198. package/scenario.catalog/stubs/disclaimer.md +5 -5
  199. package/scenario.catalog/stubs/fl.animation.md +5 -5
  200. package/scenario.catalog/stubs/fl.bg.md +5 -5
  201. package/scenario.catalog/stubs/fl.clip.md +5 -5
  202. package/scenario.catalog/stubs/fl.fill.md +5 -5
  203. package/scenario.catalog/stubs/fl.filter.md +5 -5
  204. package/scenario.catalog/stubs/fl.mask.md +5 -5
  205. package/scenario.catalog/stubs/fl.scale.md +5 -5
  206. package/scenario.catalog/stubs/fl.sprite.md +5 -5
  207. package/scenario.catalog/stubs/fl.text.md +5 -5
  208. package/scenario.catalog/stubs/fl.video.md +5 -5
  209. package/scenario.catalog/stubs/flag.md +13 -13
  210. package/scenario.catalog/stubs/interface.md +4 -4
  211. package/scenario.catalog/stubs/intro.md +4 -4
  212. package/scenario.catalog/stubs/mainmenu.md +4 -4
  213. package/scenario.catalog/stubs/ml.animation.md +5 -5
  214. package/scenario.catalog/stubs/ml.bg.md +5 -5
  215. package/scenario.catalog/stubs/ml.clip.md +5 -5
  216. package/scenario.catalog/stubs/ml.fill.md +5 -5
  217. package/scenario.catalog/stubs/ml.filter.md +5 -5
  218. package/scenario.catalog/stubs/ml.mask.md +5 -5
  219. package/scenario.catalog/stubs/ml.scale.md +5 -5
  220. package/scenario.catalog/stubs/ml.sprite.md +5 -5
  221. package/scenario.catalog/stubs/ml.text.md +5 -5
  222. package/scenario.catalog/stubs/ml.video.md +5 -5
  223. package/scenario.catalog/stubs/other.md +6 -6
  224. package/scenario.catalog/stubs/pause.md +5 -5
  225. package/scenario.catalog/stubs/point-and-click.block.md +4 -4
  226. package/scenario.catalog/stubs/point-and-click.md +4 -4
  227. package/scenario.catalog/stubs/point-and-click.option.md +4 -4
  228. package/scenario.catalog/stubs/qte.md +4 -4
  229. package/scenario.catalog/stubs/random.md +4 -4
  230. package/scenario.catalog/stubs/random.option.md +4 -4
  231. package/scenario.catalog/stubs/save.auto.md +4 -4
  232. package/scenario.catalog/stubs/save.md +5 -5
  233. package/scenario.catalog/stubs/scenario.md +4 -4
  234. package/scenario.catalog/stubs/settings.defaults.md +4 -4
  235. package/scenario.catalog/stubs/stack.md +4 -4
  236. package/scenario.catalog/stubs/text.meet.md +4 -4
  237. package/scenario.catalog/stubs/text.wall.md +4 -4
  238. package/scenario.catalog/stubs/time.md +4 -4
  239. package/scenario.catalog/stubs/ul.animation.md +5 -5
  240. package/scenario.catalog/stubs/ul.bg.md +5 -5
  241. package/scenario.catalog/stubs/ul.clip.md +5 -5
  242. package/scenario.catalog/stubs/ul.fill.md +5 -5
  243. package/scenario.catalog/stubs/ul.filter.md +5 -5
  244. package/scenario.catalog/stubs/ul.mask.md +5 -5
  245. package/scenario.catalog/stubs/ul.scale.md +5 -5
  246. package/scenario.catalog/stubs/ul.sprite.md +5 -5
  247. package/scenario.catalog/stubs/ul.text.md +5 -5
  248. package/scenario.catalog/stubs/video.md +4 -4
  249. package/scenario.catalog/stubs/wallet.md +4 -4
  250. package/scenario.guide/README.md +38 -38
  251. package/scenario.guide/audio.md +11 -11
  252. package/scenario.guide/canvas.md +23 -23
  253. package/scenario.guide/choose.md +28 -28
  254. package/scenario.guide/dialogue.md +23 -23
  255. package/scenario.guide/flow.md +21 -21
  256. package/scenario.guide/point-and-click.md +12 -12
  257. package/scenario.guide/qte-random.md +20 -20
  258. package/scenario.guide/vars.md +19 -19
  259. package/scenario.guide/views.md +20 -20
  260. package/CHANGELOG.md +0 -387
  261. package/architecture.md +0 -566
package/architecture.md DELETED
@@ -1,566 +0,0 @@
1
- # Архитектура монорепозитория VNEJS
2
-
3
- Документ описывает **общую модель** монорепозитория: каталоги движка, направление зависимостей и сборку игры. Конкретные пакеты не перечисляются — только принципы и связи.
4
-
5
- ## Суть модели
6
-
7
- Движок построен на **событийной шине** и **глобальном реестре**:
8
-
9
- - **`Observer`** — шина событий; модули подписываются (`on`) и публикуют (`emit`) по строковым ключам.
10
- - **`VNE`** — реестр, заполняемый при загрузке: `CONST`, `EVENTS`, `SETTINGS`, `PARAMS` — по namespace каждого плагина.
11
- - **`VneCore`** — runtime: собирает зарегистрированные модули, инжектит зависимости и запускает lifecycle (`inject → subscribe → setup → init → start`).
12
-
13
- Регистрация происходит **side-effect импортами** — при импорте пакета код сразу вызывает `regPlugin` или `regModule`, не дожидаясь явного вызова API.
14
-
15
- ```mermaid
16
- flowchart LR
17
- subgraph load ["Загрузка bundles/"]
18
- I[side-effect import]
19
- RP[regPlugin / regModule]
20
- VNE[(VNE + VNE_MODULES)]
21
- I --> RP --> VNE
22
- end
23
-
24
- subgraph runtime ["Runtime"]
25
- VC[VneCore]
26
- OBS[Observer]
27
- VC -->|"создаёт модули из VNE_MODULES"| MOD[Модули]
28
- MOD -->|"on / emit"| OBS
29
- MOD -->|"читает"| VNE
30
- end
31
-
32
- VNE --> VC
33
- ```
34
-
35
- ---
36
-
37
- ## Граф зависимостей между каталогами
38
-
39
- ```mermaid
40
- flowchart TD
41
- G[games/] --> B[bundles/]
42
- G --> CLI[cli/]
43
- G -.->|HTTP| BE[backends/]
44
- B --> P[plugins/]
45
- B --> C[compatibility/]
46
- P --> CT[contracts/]
47
- C --> CT
48
- P --> H[helpers/]
49
- P --> U[uis/]
50
- P --> ME[modules_extensions/]
51
- ME --> PKG[packages/]
52
- CT --> PKG
53
- CFG[configs/] --> P
54
- CFG --> PKG
55
- CFG --> U
56
- VSC[vs_code_extensions/] -.->|"подсветка .vne"| G
57
- ```
58
-
59
- **Направление зависимостей:**
60
-
61
- | От | К | Смысл |
62
- | ---------------- | ----------------------------------- | -------------------------------------------------------- |
63
- | `games/` | `bundles/`, `cli/` | Игра не знает про отдельные плагины; сборка через `cli/` |
64
- | `games/` | `backends/` | HTTP к воркерам токена и меток, без импорта пакетов |
65
- | `bundles/` | `plugins/`, `compatibility/` | Только импорт нужного набора |
66
- | `plugins/` | `contracts/` | Реализация следует объявленному API |
67
- | `plugins/` | `modules_extensions/` → `packages/` | Модули наследуют базы, базы опираются на shared/observer |
68
- | `compatibility/` | `contracts/` (2+) | Связка по событиям, без импорта реализаций |
69
- | `plugins/` | `helpers/`, `uis/` | Горизонтальные утилиты и UI |
70
- | `plugins/` | — другой `plugins/` | **Напрямую не зависит** |
71
- | `configs/` | пакеты workspace | Общие tsconfig, не runtime |
72
-
73
- ---
74
-
75
- ## packages/
76
-
77
- **Runtime-основа движка** — публикуемые npm-пакеты `@vnejs/*`, на которых держатся `plugins/`, `bundles/` и `VneCore`.
78
-
79
- ### Состав и зависимости
80
-
81
- ```mermaid
82
- flowchart BT
83
- CONST["constants"]
84
- OBS["observer"]
85
- SH["shared"]
86
- SS["sources-set"]
87
- SEM["semaphore"]
88
- HELP["helpers/"]
89
- CR["core — VneCore"]
90
-
91
- CONST --> CR
92
- OBS --> CR
93
- SH --> CR
94
- HELP --> CR
95
- SS --> CT[contracts/ / plugins/]
96
- SEM --> PL[plugins/]
97
- SH --> PL
98
- OBS --> ME[modules_extensions/]
99
- SH --> ME
100
- ```
101
-
102
- | Пакет | Назначение |
103
- | ------------------------ | ----------------------------------------------------------------------------------------------------------------------- |
104
- | **`@vnejs/shared`** | Реестр **`VNE`**, массив **`VNE_MODULES`**, **`regPlugin`** / **`regModule`**, типы для module augmentation |
105
- | **`@vnejs/observer`** | **`Observer`** — pub/sub: `subscribe` / `emit` с `priority` (группы по возрастанию), `emitOne`, `emitReal`, `emitReals` |
106
- | **`@vnejs/core`** | **`VneCore`**: модули из `VNE_MODULES`, lifecycle, загрузка `mods.json` / `media_info/`, `reset` |
107
- | **`@vnejs/constants`** | Общие константы-заглушки (`EMPTY_OBJECT`, `EMPTY_ARRAY`) |
108
- | **`@vnejs/sources-set`** | **`SourcesSet`** — управление множеством «источников» (text и связанная логика) |
109
- | **`@vnejs/semaphore`** | **`Semaphore`** — очередь задач с весами и ограничением параллелизма |
110
- | **`@vnejs/test-utils`** | Harness для тестов модулей: observer stubs, `createTestModule`, spies, DOM mocks |
111
-
112
- ### Принципы
113
-
114
- - **`shared` + `observer`** — фундамент; почти все плагины и модули зависят от них.
115
- - **`core`** — точка сборки runtime; `games/` создают `new VneCore()` после импорта `bundles/`.
116
- - **`test-utils`** — только для тестов workspace-пакетов; не часть игрового runtime.
117
- - Пакеты **не содержат** игровой логики и **не привязаны** к конкретному `bundles/`.
118
-
119
- ---
120
-
121
- ## modules_extensions/
122
-
123
- **Иерархия базовых классов** для модулей внутри `plugins/`.
124
-
125
- ### Иерархия классов
126
-
127
- ```mermaid
128
- flowchart TD
129
- M["@vnejs/module<br/>Module"]
130
- MC["@vnejs/module.core<br/>ModuleCore"]
131
- MR["@vnejs/module.replace<br/>ModuleReplace"]
132
- MRE["@vnejs/module.replace.exec<br/>ModuleReplaceExec"]
133
- MCO["@vnejs/module.components<br/>ModuleController, ModuleView"]
134
- ML["@vnejs/module.layer<br/>canvas-слои"]
135
- MA["@vnejs/module.audio"]
136
- MCA["@vnejs/module.controller.audio"]
137
- MCT["@vnejs/module.controller.tabs"]
138
- MCP["@vnejs/module.controller.preload"]
139
- MCB["@vnejs/module.controller.backgrounds"]
140
- MCBG["@vnejs/module.controller.bg"]
141
- MCAC["@vnejs/module.controller.accept"]
142
- MCIN["@vnejs/module.controller.interact"]
143
- MCAV["@vnejs/module.controller.arrows.vertical"]
144
- MCAH["@vnejs/module.controller.arrows.horizontal"]
145
- MCAG["@vnejs/module.controller.arrows.grid"]
146
- MCPG["@vnejs/module.controller.pages"]
147
- MCHS["@vnejs/module.controller.hide.on.state"]
148
- MCHC["@vnejs/module.controller.hide.on.controls"]
149
- MSC["@vnejs/module.scales.common"]
150
-
151
- M --> MC
152
- MC --> MR
153
- MC --> MRE
154
- MC --> MCO
155
- MC --> MA
156
- MC --> MCA
157
- MC --> MCT
158
- MC --> MCP
159
- MC --> MCB
160
- MC --> MCBG
161
- MC --> MCAC
162
- MC --> MCIN
163
- MC --> MCAV
164
- MC --> MCAH
165
- MC --> MCAG
166
- MC --> MCPG
167
- MC --> MCHS
168
- MC --> MCHC
169
- MC --> MSC
170
- MCO --> ML
171
- ```
172
-
173
- | Пакет | Назначение |
174
- | ------------------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
175
- | **`@vnejs/module`** | **`Module`**: `VNE`, `on`/`emit`, `inject`, state, shared, media, lifecycle |
176
- | **`@vnejs/module.core`** | **`ModuleCore`** — типизированный доступ к **core-контрактам** |
177
- | **`@vnejs/module.replace`** | **`ModuleReplace`** — последовательная подмена значения поля payload через `REPLACE_KEY` и цепочку handlers |
178
- | **`@vnejs/module.replace.exec`** | **`ModuleReplaceExec`** — реестр exec-handlers по имени модуля (`EXEC_REG` / `EXEC_GET`) |
179
- | **`@vnejs/module.components`** | **`ModuleView`**, **`ModuleController`** — React-view, zustand, media, controls. `SHOW`: `GATE` `-200`, `BEFORE` `-100`, `MAIN` `0`, `CONTROLS` `100`, `AFTER` `200`, `CLEANUP` `300`. `HIDE`: `GATE` `-300`, `CONTROLS` `-200`, `BEFORE` `-100`, `MAIN` `0`, `AFTER` `100`, `CLEANUP` `200`. `setShow` эмитит `UPDATE_STATE` `{ isShow }`, затем `updateView(isForce, false)`. `UPDATE_FAST`, `EXTERNAL_UPDATE` (`isShow` → `updateViewFast`) |
180
- | **`@vnejs/module.layer`** | Canvas layers: controller, image, sprite, text, video, props, view |
181
- | **`@vnejs/module.audio`** | База для audio-плагинов scenario-слоёв (`music` / `sound` / …) |
182
- | **`@vnejs/module.controller.audio`** | Overlay-BGM для view-экранов: pause global / play `view` / resume на `SHOW.AFTER` / `HIDE.AFTER` / PRELOAD |
183
- | **`@vnejs/module.controller.tabs`** | Навигация по вкладкам: TAB_PREV/TAB_NEXT → `TAB_SET`; guard + `applyTab` (`UPDATE_STATE` `{ tab }`) + abstract `onTabSet`; вкладка на `SHOW.BEFORE`, PUSH/POP на `CONTROLS` |
184
- | **`@vnejs/module.controller.preload`** | Предзагрузка меток и событий на `SHOW.BEFORE` (эмитит PRELOAD) и по PRELOAD. `isShow` из `UPDATE_STATE`; `MEMORY.CLEARED` — только при `isShow`. События задаёт плагин (`EVENT_SHOW` / `EVENT_HIDE` / `EVENT_PRELOAD` / `EVENT_UPDATE_STATE`) |
185
- | **`@vnejs/module.controller.backgrounds`** | Ротация списка фонов на `SHOW.AFTER` / таймеру / `MEMORY.CLEARED` при `isShow` из `UPDATE_STATE`. Таймер на `HIDE.AFTER` снимается всегда. События и список задаёт плагин |
186
- | **`@vnejs/module.controller.bg`** | Статичный фон экрана: `SHOW.BEFORE` пишет `bgSrc` через `UPDATE_STATE`; `isShow` приходит из `UPDATE_STATE`. Опционально PRELOAD / start / STATE.CLEAR; `MEMORY.CLEARED` — preload и/или refresh при `isShow` |
187
- | **`@vnejs/module.controller.accept`** | ACCEPT / INTERACT → событие ACCEPT плагина; PUSH/POP controls на `SHOW.CONTROLS` / `HIDE.CONTROLS` |
188
- | **`@vnejs/module.controller.interact`** | `BUTTONS.ANY` → `INTERACT.EMIT`; после показа `INTERACT.PUSH` (`onInteract`), перед скрытием `INTERACT.POP`; PUSH/POP controls на `SHOW.CONTROLS` / `HIDE.CONTROLS` |
189
- | **`@vnejs/module.controller.arrows.vertical`** | ARROW_UP / ARROW_BOTTOM по видимым пунктам; PUSH/POP controls на `SHOW.CONTROLS` / `HIDE.CONTROLS`; индекс через `UPDATE_STATE`; на `HIDE.CLEANUP` `currentArrowVerticalItem` становится `undefined` через `UPDATE_STATE`, затем `UPDATE_FAST` |
190
- | **`@vnejs/module.controller.arrows.horizontal`** | ARROW_LEFT / ARROW_RIGHT по пунктам; PUSH/POP controls на `SHOW.CONTROLS` / `HIDE.CONTROLS`; индекс через `UPDATE_STATE`; на `HIDE.CLEANUP` `currentArrowHorizontalItem` становится `undefined` через `UPDATE_STATE`, затем `UPDATE_FAST` |
191
- | **`@vnejs/module.controller.arrows.grid`** | Четыре стрелки по сетке; `GRID_NEXT` / `GRID_PREV` на краю; PUSH/POP на `SHOW.CONTROLS` / `HIDE.CONTROLS`; `GRID_UPDATE_ITEMS` без payload, meta через `UPDATE_STATE`; на `HIDE.CLEANUP` `gridRow` / `gridColumn` становятся `undefined` через `UPDATE_STATE`, затем `UPDATE_FAST` |
192
- | **`@vnejs/module.controller.pages`** | Пагинация: `PAGE_SET` / `PAGE_NEXT` / `PAGE_PREV` → `setPage` → `UPDATE_STATE` (`pageIndex`) + abstract `applyPage` + `UPDATE_FAST` |
193
- | **`@vnejs/module.controller.hide.on.state`** | STATE.SET / STATE.CLEAR → emit HIDE плагина (`isForce` задаёт наследник) |
194
- | **`@vnejs/module.controller.hide.on.controls`** | BACK / MENU / GAMEMENU → emit HIDE плагина; PUSH/POP controls на `SHOW.CONTROLS` / `HIDE.CONTROLS` |
195
- | **`@vnejs/module.scales.common`** | База для scales / RPG-модулей |
196
-
197
- ### Принципы
198
-
199
- - Плагин берёт нужную базу (`ModuleCore`, `ModuleView`, `ModuleLayerController`, …), а не `Module` напрямую.
200
- - Базы тянут **контракты** из `contracts/` — отсюда типизация `EVENTS` / `CONST`.
201
- - **`ModuleCore`** — `plugins/core/` и `compatibility/`; **`ModuleView` / `ModuleLayer*`** — view/canvas + **`@vnejs/uis.react`**.
202
-
203
- | | `packages/` | `modules_extensions/` |
204
- | ----------------- | ------------------------ | ---------------------------- |
205
- | Роль | Runtime и инфраструктура | Шаблоны для модулей плагинов |
206
- | Регистрация в VNE | да (`shared`, `core`) | нет |
207
- | Наследование | — | `plugins/` наследуют базы |
208
-
209
- ---
210
-
211
- ## configs/
212
-
213
- **Общие конфигурации сборки** — переиспользуемые TypeScript-настройки, не runtime.
214
-
215
- | Пакет | Назначение |
216
- | ------------------------------ | ------------------------------------------------------------------------------------- |
217
- | **`@vnejs/configs.ts-common`** | tsconfig для `plugins/`, `contracts/`, `packages/`, `modules_extensions/`, `helpers/` |
218
- | **`@vnejs/configs.ts-uis`** | tsconfig для `uis/react/` и view-кода `games/` (JSX, React-типы) |
219
- | **`@vnejs/configs.vitest`** | Общий Vitest-конфиг (`create-config.js`, `setup.js`) для пакетов с тестами |
220
-
221
- ```mermaid
222
- flowchart LR
223
- TC[configs.ts-common] --> PL[plugins/ / contracts/ / packages/]
224
- TU[configs.ts-uis] --> UI[uis/react/]
225
- TU --> GM[games/]
226
- TV[configs.vitest] --> TEST[пакеты с vitest]
227
- ```
228
-
229
- Пакеты `ts-*` экспортируют json; локальный `tsconfig.json` пакета **extends** общий и задаёт `rootDir` / `outDir`. Vitest-конфиг — JS-хелперы, не tsconfig.
230
-
231
- ---
232
-
233
- ## contracts/
234
-
235
- **Контракт** — публичный API одного плагина: **спецификация**, не поведение.
236
-
237
- ### Что входит в контракт
238
-
239
- - **`PLUGIN_NAME`** — namespace в реестре `VNE`.
240
- - **`CONSTANTS`**, **`SUBSCRIBE_EVENTS`**, **`PARAMS`**, **`SETTINGS_KEYS`**.
241
- - **Типы** — payload событий, shape глобального state, shared-поля.
242
-
243
- ### TypeScript augmentation
244
-
245
- Контракт расширяет типы через `declare module`:
246
-
247
- - `@vnejs/shared` — `VnePluginEventsMap`, `VnePluginConstantsMap`, …
248
- - `@vnejs/module` — `ModuleGlobalState`, `ModuleShared`
249
- - другие контракты — при cross-cutting типах
250
-
251
- ### Принципы
252
-
253
- - Один контракт обычно соответствует **одному плагину** в `plugins/` (1:1).
254
- - Контракт **не импортирует** реализацию из `plugins/`.
255
- - Доменная структура `contracts/` зеркалит таксономию `plugins/`.
256
-
257
- ```mermaid
258
- flowchart LR
259
- CT[contracts/] -->|"declare module"| TS[Типы VNE / Module]
260
- CT -->|"CONSTANTS, EVENTS, PARAMS"| REG[regPlugin при загрузке plugins/]
261
- PL[plugins/] -->|"import"| CT
262
- ```
263
-
264
- ---
265
-
266
- ## plugins/
267
-
268
- **Плагин** — реализация поведения, описанного в `contracts/`.
269
-
270
- ### Регистрация
271
-
272
- 1. Импорт контракта из `contracts/`.
273
- 2. `regPlugin(PLUGIN_NAME, { constants, events, params, settings }, [ModuleClasses])`.
274
- 3. Классы попадают в `VNE_MODULES` через `regModule`.
275
-
276
- ### Модули и lifecycle
277
-
278
- Плагин — **набор модулей** с уникальным `name`. После `new VneCore()`:
279
-
280
- 1. **`inject`** — observer, global state, shared, media. В конце, если метод есть, вызывается `postinject`.
281
- 2. **`subscribe`** — подписки на события.
282
- 3. **`setup`** — подготовка до `init` (все `setup` завершаются раньше любого `init`).
283
- 4. **`init`** — асинхронная инициализация.
284
- 5. **`start`** — после всех `init` (все `init` завершаются раньше любого `start`).
285
-
286
- ```mermaid
287
- sequenceDiagram
288
- participant A as Модуль plugins/ A
289
- participant OBS as Observer
290
- participant B as Модуль plugins/ B
291
-
292
- A->>OBS: emit(EVENT_A.DONE, payload)
293
- OBS->>B: handler
294
- B->>OBS: emit(EVENT_B.START)
295
- ```
296
-
297
- Пакеты из `plugins/` **не импортируют** код соседних плагинов — только контракт и `VNE`.
298
-
299
- ### Зависимости
300
-
301
- - `contracts/`, **`@vnejs/module.*`**, **`@vnejs/helpers`**, **`@vnejs/uis.*`** (view).
302
-
303
- ---
304
-
305
- ## compatibility/
306
-
307
- **Опциональная интеграция** между независимыми плагинами — включается в `bundles/`, не зашивается внутрь `plugins/`.
308
-
309
- - Один модуль, наследник `ModuleCore`.
310
- - В **`subscribe`** слушает A, эмитит B.
311
- - **`regModule`** без `regPlugin` — нет своего namespace в `VNE`.
312
- - Зависит только от **контрактов** из `contracts/`, не от реализаций в `plugins/`.
313
-
314
- Именование: `@vnejs/compatibility.{источник}-with-{цель}` → путь `compatibility/{источник}/{цель}/`.
315
-
316
- ```mermaid
317
- flowchart LR
318
- PA[plugins/ A] -->|"emit EVENT_A"| OBS[Observer]
319
- OBS --> CM[compatibility/]
320
- CM -->|"emit EVENT_B"| OBS
321
- OBS --> PB[plugins/ B]
322
-
323
- PA -.->|"не импортирует"| PB
324
- CM --> CTA[contracts/ A]
325
- CM --> CTB[contracts/ B]
326
- ```
327
-
328
- ---
329
-
330
- ## bundles/
331
-
332
- **Композиция** без бизнес-логики — цепочка side-effect импортов из `plugins/` и `compatibility/`.
333
-
334
- - Определяет **набор возможностей** для `games/`.
335
- - Экспортирует **`VneCore`**.
336
- - Дочерний пакет в `bundles/` импортирует родительский и **добавляет** плагины.
337
-
338
- ```mermaid
339
- flowchart BT
340
- CORE["bundles/core/"]
341
- CANVAS["bundles/canvas.react/"]
342
- SKEL["bundles/vn.skeleton/"]
343
- BASE["bundles/vn.base/"]
344
- GAME["bundles/coraline/"]
345
-
346
- CORE --> CANVAS --> SKEL --> BASE --> GAME
347
- ```
348
-
349
- Entry point: re-export `VneCore` → импорт `plugins/` → импорт `compatibility/`.
350
-
351
- ---
352
-
353
- ## helpers/
354
-
355
- **Чистые утилиты** вне event-архитектуры.
356
-
357
- - **`helpers/primitives/`** — атомарные функции (`tokenize-*`, `get-id`, `to-json`, …).
358
- - **`helpers/composites/`** — составные утилиты поверх primitives (например `call-all-promises`).
359
- - **`helpers/base/`** — barrel **`@vnejs/helpers`** (реэкспорт primitives и composites).
360
-
361
- ```mermaid
362
- flowchart LR
363
- H[helpers/] --> P[plugins/]
364
- H --> CORE[VneCore]
365
- H -.->|"не связан"| VNE[(VNE / Observer)]
366
- ```
367
-
368
- ---
369
-
370
- ## uis/
371
-
372
- **Презентационный слой** для view-плагинов — не плагин, не в `VNE`.
373
-
374
- | Часть | Назначение |
375
- | --------------------------- | ----------------------------- |
376
- | **`uis/utils/`** | `cn`, `injectStyles`, `sel` |
377
- | **`uis/react/primitives/`** | Атомы (button, text, icon, …) |
378
- | **`uis/react/composites/`** | Составные компоненты |
379
- | **`uis/react/complex/`** | Крупные UI-блоки |
380
- | **`uis/react/hooks/`** | React-хуки |
381
- | **`uis/react/base/`** | Barrel **`@vnejs/uis.react`** |
382
-
383
- View-плагины в `plugins/`: **`ModuleView`** + render на компонентах из `uis/`.
384
-
385
- ```mermaid
386
- flowchart TD
387
- VP[plugins/ view / ModuleView]
388
- VP --> UIR["@vnejs/uis.react"]
389
- VP --> UU["@vnejs/uis.utils"]
390
- VP --> OBS[Observer]
391
- UIR -.->|"не использует"| VNE
392
- ```
393
-
394
- ---
395
-
396
- ## cli/
397
-
398
- **CLI** для монорепы и сборки `games/` (`npx @vnejs/*`).
399
-
400
- ```mermaid
401
- flowchart LR
402
- MR["@vnejs/monorepo"]
403
- BD["@vnejs/build"]
404
- DS["@vnejs/desktop"]
405
- TL["@vnejs/tools"]
406
-
407
- MR --> WS[workspace-пакеты]
408
- BD --> G[games/]
409
- DS --> G
410
- TL --> G
411
- ```
412
-
413
- | CLI | Роль |
414
- | --------------------- | ----------------------------------------------------------------------------------- |
415
- | **`@vnejs/monorepo`** | `build`, `package`, `publish`, `bump`, `sync-deps`, `graph`, `run-changed`, `clear` |
416
- | **`@vnejs/build`** | **`data`** — `game/` → JSON в `dist/`; **`client`** — Vite entry → `dist/` |
417
- | **`@vnejs/desktop`** | **`web`** — static-сервер для `dist/` |
418
- | **`@vnejs/tools`** | Resize image/video/audio, контент-пайплайн |
419
-
420
- Корень: `npm run build` → monorepo build; **Turbo** кэширует `build` с `dependsOn: ["^build"]`.
421
-
422
- ---
423
-
424
- ## games/
425
-
426
- **Проекты игр** — потребители `bundles/` + `cli/`.
427
-
428
- ```
429
- games/<name>/
430
- ├── entry/ # index.ts, index.html → импорт bundles/, new VneCore()
431
- ├── game/<mod>/ # scenario (.vne), scripts, media, public
432
- ├── desktop/ # Electron dev/prod
433
- ├── dist/ # JSON + JS после сборки
434
- │ ├── mods.json
435
- │ ├── label/ # label/<path>.json (например label/prologue/1.json)
436
- │ └── media_info/ # media_info/<mod>.json (не путать с /media/ ассетов)
437
- └── package.json
438
- ```
439
-
440
- ```mermaid
441
- flowchart LR
442
- SC["game/**/*.vne"]
443
- DATA["build data"]
444
- JSON["dist mods.json label/ media_info/"]
445
- ENTRY["entry/index.ts"]
446
- CLIENT["build client"]
447
- DIST["dist/"]
448
- SRV["desktop web"]
449
-
450
- SC --> DATA --> JSON
451
- ENTRY --> CLIENT --> DIST
452
- JSON --> RUN[Browser / Electron]
453
- DIST --> RUN
454
- SRV --> RUN
455
- ```
456
-
457
- 1. **`build:data`** — JSON для **`VneCore.init()`**: `mods.json`, `label/<path>.json`, `media_info/<mod>.json`.
458
- 2. **`build:client`** — Vite + `bundles/`.
459
- 3. **`entry/`** — `new VneCore()`, `await init()`.
460
-
461
- `games/` **не собирает** `plugins/` — выбирает `bundles/` и добавляет контент.
462
-
463
- ---
464
-
465
- ## backends/
466
-
467
- **Отдельные Cloudflare Workers** — не плагины и не часть `VneCore`. Игра ходит к ним по HTTP. Пакеты в `plugins/` их не импортируют.
468
-
469
- | Пакет | Назначение |
470
- | ---------------------- | ------------------------------------------------------------------------------------------------------------------------------ |
471
- | **`backends/auth`** | Steam OpenID и проверка покупки своего AppID. Отдаёт подписанный JWT (`steamId`, `ownsApp`, `exp`). |
472
- | **`backends/content`** | `GET /label/*` — JSON меток из `dist/label`. Пускает только запрос с тем же JWT и `ownsApp`. Картинки и `mods.json` не отдаёт. |
473
-
474
- Оба воркера знают один `AUTH_SECRET`. Контент-воркер Steam не вызывает. Каталог ассетов при деплое указывает на `dist` игры, сами JSON в репозиторий воркера не копируются. Закрытый деплой не кладёт то же дерево `label/` рядом со статикой игры.
475
-
476
- ```mermaid
477
- flowchart LR
478
- Game[games/] -->|popup OpenID| Auth[backends/auth]
479
- Auth --> Steam[steamcommunity.com]
480
- Game -->|GET /label Bearer| Content[backends/content]
481
- Auth -.->|общий AUTH_SECRET| Content
482
- ```
483
-
484
- ---
485
-
486
- ## vs_code_extensions/
487
-
488
- **Расширения редактора** для формата сценария — не runtime.
489
-
490
- | Расширение | Назначение |
491
- | --------------------- | -------------------------------------------------- |
492
- | **`@vnejs/language`** | Подсветка **`.vne`** в `games/*/game/**/scenario/` |
493
-
494
- ---
495
-
496
- ## Именование npm-пакетов
497
-
498
- ```
499
- plugins/core/system/ → @vnejs/plugins.core.system
500
- contracts/text/text/ → @vnejs/contracts.text
501
- compatibility/text/scenario.autoread/ → @vnejs/compatibility.text-with-scenario.autoread
502
- ```
503
-
504
- Слеш в пути → точка в имени; `compatibility/` — суффикс **`-with-`**.
505
-
506
- ---
507
-
508
- ## Сборка end-to-end
509
-
510
- ```mermaid
511
- flowchart TD
512
- subgraph repo ["Монорепозиторий"]
513
- CFG[configs/]
514
- PKG[packages/]
515
- ME[modules_extensions/]
516
- CT[contracts/]
517
- PL[plugins/]
518
- CP[compatibility/]
519
- BD[bundles/]
520
- CL[cli/]
521
- end
522
-
523
- subgraph game_proj ["games/my-game/"]
524
- SC[scenario .vne]
525
- EN[entry/]
526
- end
527
-
528
- CFG --> PL
529
- PKG --> ME --> PL
530
- CT --> PL
531
- CT --> CP
532
- PL --> BD
533
- CP --> BD
534
- BD --> EN
535
- SC --> CL
536
- CL -->|"data + client"| ART[dist/]
537
- EN --> ART
538
- ART --> PLAY[Browser / Electron]
539
- ```
540
-
541
- 1. `bundles/` регистрирует `plugins/` и `compatibility/` в `VNE`.
542
- 2. `cli/` собирает сценарий в JSON и клиент в `dist/`.
543
- 3. `new VneCore().init()` — модули, media, lifecycle до `start`.
544
- 4. Игра живёт на событиях шины; cross-plugin связи — через `compatibility/` из `bundles/`.
545
-
546
- ---
547
-
548
- ## Резюме
549
-
550
- | Каталог | Одной фразой |
551
- | ------------------------- | --------------------------------- |
552
- | **`packages/`** | Реестр, шина, VneCore |
553
- | **`modules_extensions/`** | Базовые классы модулей |
554
- | **`configs/`** | Общие tsconfig |
555
- | **`contracts/`** | API плагина: события, типы |
556
- | **`plugins/`** | Реализация на шине |
557
- | **`compatibility/`** | Opt-in связка двух плагинов |
558
- | **`bundles/`** | Набор способностей для игры |
559
- | **`helpers/`** | Утилиты без движка |
560
- | **`uis/`** | React/UI для view |
561
- | **`cli/`** | Сборка монорепы и игр |
562
- | **`games/`** | Сценарий + entry + dist |
563
- | **`backends/`** | Workers: токен Steam и JSON меток |
564
- | **`vs_code_extensions/`** | Подсветка `.vne` |
565
-
566
- **Главное правило:** `plugins/` не знают друг о друге; интеграция — через события по `contracts/` и явный `compatibility/` в `bundles/`.