@vnejs/docs 0.2.1

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 (191) hide show
  1. package/README.md +49 -0
  2. package/architecture.md +507 -0
  3. package/manifest.json +44 -0
  4. package/package.json +27 -0
  5. package/plugins/audio/ambient.md +39 -0
  6. package/plugins/audio/audio.md +61 -0
  7. package/plugins/audio/music.md +39 -0
  8. package/plugins/audio/sound.md +39 -0
  9. package/plugins/audio/voice.md +43 -0
  10. package/plugins/canvas/bg.md +76 -0
  11. package/plugins/canvas/bg.speak.md +54 -0
  12. package/plugins/canvas/fill.md +66 -0
  13. package/plugins/canvas/layer.md +57 -0
  14. package/plugins/canvas/sprite.md +85 -0
  15. package/plugins/canvas/sprite.speak.md +53 -0
  16. package/plugins/canvas/text.md +63 -0
  17. package/plugins/canvas/video.md +71 -0
  18. package/plugins/canvas.layers/bl.md +47 -0
  19. package/plugins/canvas.layers/fl.md +47 -0
  20. package/plugins/canvas.layers/ml.md +47 -0
  21. package/plugins/canvas.layers/ul.md +46 -0
  22. package/plugins/canvas.props/animation.md +48 -0
  23. package/plugins/canvas.props/clip.md +43 -0
  24. package/plugins/canvas.props/filters.md +39 -0
  25. package/plugins/canvas.props/mask.md +44 -0
  26. package/plugins/canvas.props/scale.md +41 -0
  27. package/plugins/controls/controls.md +41 -0
  28. package/plugins/controls/cursor.md +59 -0
  29. package/plugins/controls/gamepad.md +37 -0
  30. package/plugins/controls/keyboard.md +37 -0
  31. package/plugins/core/components.md +47 -0
  32. package/plugins/core/interact.md +45 -0
  33. package/plugins/core/logs.md +46 -0
  34. package/plugins/core/media.md +59 -0
  35. package/plugins/core/memory.md +44 -0
  36. package/plugins/core/platforms.md +48 -0
  37. package/plugins/core/scenario.md +63 -0
  38. package/plugins/core/settings.md +43 -0
  39. package/plugins/core/stack.md +57 -0
  40. package/plugins/core/state.md +51 -0
  41. package/plugins/core/storage.md +89 -0
  42. package/plugins/core/system.md +56 -0
  43. package/plugins/core/vendors.md +45 -0
  44. package/plugins/entities/entities.md +35 -0
  45. package/plugins/entities/wallet.md +47 -0
  46. package/plugins/font/montserrat.md +35 -0
  47. package/plugins/platform/android.md +38 -0
  48. package/plugins/platform/electron.md +40 -0
  49. package/plugins/platform/metric.md +42 -0
  50. package/plugins/rpg/damage.md +46 -0
  51. package/plugins/rpg/hit.md +46 -0
  52. package/plugins/rpg/skills.md +47 -0
  53. package/plugins/save/auto.md +47 -0
  54. package/plugins/save/continue.md +43 -0
  55. package/plugins/save/save.md +62 -0
  56. package/plugins/scales/health.md +37 -0
  57. package/plugins/scales/mana.md +37 -0
  58. package/plugins/scales/scales.md +54 -0
  59. package/plugins/scenario/autoread.md +50 -0
  60. package/plugins/scenario/choose.md +111 -0
  61. package/plugins/scenario/fastforward.md +61 -0
  62. package/plugins/scenario/pause.md +43 -0
  63. package/plugins/scenario/point_and_click.md +95 -0
  64. package/plugins/scenario/qte.md +97 -0
  65. package/plugins/scenario/random.md +38 -0
  66. package/plugins/settings/filter.md +39 -0
  67. package/plugins/settings/potato.md +41 -0
  68. package/plugins/settings/ratio.md +41 -0
  69. package/plugins/settings/textsize.md +39 -0
  70. package/plugins/settings/volume.md +41 -0
  71. package/plugins/text/inject.md +41 -0
  72. package/plugins/text/locs.md +49 -0
  73. package/plugins/text/meet.md +40 -0
  74. package/plugins/text/smooth.md +51 -0
  75. package/plugins/text/text.md +78 -0
  76. package/plugins/text/wall.md +41 -0
  77. package/plugins/time/date.md +42 -0
  78. package/plugins/time/time.md +43 -0
  79. package/plugins/vars/counters.md +46 -0
  80. package/plugins/vars/flags.md +44 -0
  81. package/plugins/vars/vars.md +51 -0
  82. package/plugins/views/achievement.md +64 -0
  83. package/plugins/views/comment.md +49 -0
  84. package/plugins/views/cursor.md +39 -0
  85. package/plugins/views/fps.md +51 -0
  86. package/plugins/views/video.md +57 -0
  87. package/plugins/views.scenario/choose.md +79 -0
  88. package/plugins/views.scenario/interface.controls.md +50 -0
  89. package/plugins/views.scenario/interface.fastforward.md +50 -0
  90. package/plugins/views.scenario/interface.md +68 -0
  91. package/plugins/views.scenario/point_and_click.md +87 -0
  92. package/plugins/views.scenario/qte.md +105 -0
  93. package/plugins/views.screens/confirm.md +48 -0
  94. package/plugins/views.screens/credits.md +46 -0
  95. package/plugins/views.screens/eula.md +54 -0
  96. package/plugins/views.screens/gallery.full.md +48 -0
  97. package/plugins/views.screens/gallery.md +69 -0
  98. package/plugins/views.screens/gamemenu.md +52 -0
  99. package/plugins/views.screens/history.md +70 -0
  100. package/plugins/views.screens/intro.md +50 -0
  101. package/plugins/views.screens/loading.md +48 -0
  102. package/plugins/views.screens/mainmenu.md +61 -0
  103. package/plugins/views.screens/mainmenu.socials.md +45 -0
  104. package/plugins/views.screens/save.md +63 -0
  105. package/plugins/views.screens/settings.defaults.md +51 -0
  106. package/plugins/views.screens/settings.md +53 -0
  107. package/scenario.catalog/README.md +38 -0
  108. package/scenario.catalog/index.md +109 -0
  109. package/scenario.catalog/stubs/achievement.md +16 -0
  110. package/scenario.catalog/stubs/audio.ambient.md +16 -0
  111. package/scenario.catalog/stubs/audio.music.md +16 -0
  112. package/scenario.catalog/stubs/audio.sound.md +16 -0
  113. package/scenario.catalog/stubs/audio.voice.md +16 -0
  114. package/scenario.catalog/stubs/bl.animation.md +18 -0
  115. package/scenario.catalog/stubs/bl.bg.md +18 -0
  116. package/scenario.catalog/stubs/bl.clip.md +18 -0
  117. package/scenario.catalog/stubs/bl.fill.md +18 -0
  118. package/scenario.catalog/stubs/bl.filter.md +18 -0
  119. package/scenario.catalog/stubs/bl.mask.md +18 -0
  120. package/scenario.catalog/stubs/bl.scale.md +18 -0
  121. package/scenario.catalog/stubs/bl.sprite.md +18 -0
  122. package/scenario.catalog/stubs/bl.text.md +18 -0
  123. package/scenario.catalog/stubs/bl.video.md +18 -0
  124. package/scenario.catalog/stubs/choose.block.md +25 -0
  125. package/scenario.catalog/stubs/choose.md +18 -0
  126. package/scenario.catalog/stubs/choose.option.md +24 -0
  127. package/scenario.catalog/stubs/comment.md +17 -0
  128. package/scenario.catalog/stubs/counter.md +21 -0
  129. package/scenario.catalog/stubs/credits.md +17 -0
  130. package/scenario.catalog/stubs/date.md +17 -0
  131. package/scenario.catalog/stubs/fl.animation.md +18 -0
  132. package/scenario.catalog/stubs/fl.bg.md +18 -0
  133. package/scenario.catalog/stubs/fl.clip.md +18 -0
  134. package/scenario.catalog/stubs/fl.fill.md +18 -0
  135. package/scenario.catalog/stubs/fl.filter.md +18 -0
  136. package/scenario.catalog/stubs/fl.mask.md +18 -0
  137. package/scenario.catalog/stubs/fl.scale.md +18 -0
  138. package/scenario.catalog/stubs/fl.sprite.md +18 -0
  139. package/scenario.catalog/stubs/fl.text.md +18 -0
  140. package/scenario.catalog/stubs/fl.video.md +18 -0
  141. package/scenario.catalog/stubs/flag.md +24 -0
  142. package/scenario.catalog/stubs/interface.md +17 -0
  143. package/scenario.catalog/stubs/intro.md +16 -0
  144. package/scenario.catalog/stubs/mainmenu.md +16 -0
  145. package/scenario.catalog/stubs/ml.animation.md +18 -0
  146. package/scenario.catalog/stubs/ml.bg.md +18 -0
  147. package/scenario.catalog/stubs/ml.clip.md +18 -0
  148. package/scenario.catalog/stubs/ml.fill.md +18 -0
  149. package/scenario.catalog/stubs/ml.filter.md +18 -0
  150. package/scenario.catalog/stubs/ml.mask.md +18 -0
  151. package/scenario.catalog/stubs/ml.scale.md +18 -0
  152. package/scenario.catalog/stubs/ml.sprite.md +18 -0
  153. package/scenario.catalog/stubs/ml.text.md +18 -0
  154. package/scenario.catalog/stubs/ml.video.md +18 -0
  155. package/scenario.catalog/stubs/other.md +17 -0
  156. package/scenario.catalog/stubs/pause.md +16 -0
  157. package/scenario.catalog/stubs/point-and-click.block.md +21 -0
  158. package/scenario.catalog/stubs/point-and-click.md +18 -0
  159. package/scenario.catalog/stubs/point-and-click.option.md +20 -0
  160. package/scenario.catalog/stubs/qte.md +16 -0
  161. package/scenario.catalog/stubs/random.md +16 -0
  162. package/scenario.catalog/stubs/random.option.md +16 -0
  163. package/scenario.catalog/stubs/save.auto.md +16 -0
  164. package/scenario.catalog/stubs/save.md +16 -0
  165. package/scenario.catalog/stubs/scenario.md +17 -0
  166. package/scenario.catalog/stubs/settings.defaults.md +16 -0
  167. package/scenario.catalog/stubs/stack.md +18 -0
  168. package/scenario.catalog/stubs/text.meet.md +16 -0
  169. package/scenario.catalog/stubs/text.wall.md +17 -0
  170. package/scenario.catalog/stubs/time.md +17 -0
  171. package/scenario.catalog/stubs/ul.animation.md +18 -0
  172. package/scenario.catalog/stubs/ul.bg.md +18 -0
  173. package/scenario.catalog/stubs/ul.clip.md +18 -0
  174. package/scenario.catalog/stubs/ul.fill.md +18 -0
  175. package/scenario.catalog/stubs/ul.filter.md +18 -0
  176. package/scenario.catalog/stubs/ul.mask.md +18 -0
  177. package/scenario.catalog/stubs/ul.scale.md +18 -0
  178. package/scenario.catalog/stubs/ul.sprite.md +18 -0
  179. package/scenario.catalog/stubs/ul.text.md +18 -0
  180. package/scenario.catalog/stubs/video.md +16 -0
  181. package/scenario.catalog/stubs/wallet.md +17 -0
  182. package/scenario.guide/README.md +82 -0
  183. package/scenario.guide/audio.md +29 -0
  184. package/scenario.guide/canvas.md +46 -0
  185. package/scenario.guide/choose.md +54 -0
  186. package/scenario.guide/dialogue.md +58 -0
  187. package/scenario.guide/flow.md +71 -0
  188. package/scenario.guide/point-and-click.md +35 -0
  189. package/scenario.guide/qte-random.md +51 -0
  190. package/scenario.guide/vars.md +67 -0
  191. package/scenario.guide/views.md +65 -0
package/README.md ADDED
@@ -0,0 +1,49 @@
1
+ # Документация VNEJS
2
+
3
+ Монорепозиторий движка визуальных новелл **VNEJS** — plugin-архитектура на TypeScript с событийной шиной и композицией через `bundles/`.
4
+
5
+ Публикуемый пакет: **`@vnejs/docs`**. Установка у потребителя:
6
+
7
+ ```bash
8
+ npm i @vnejs/docs
9
+ ```
10
+
11
+ Машинное оглавление: [`manifest.json`](./manifest.json).
12
+
13
+ ## Для агента / автора сценария
14
+
15
+ Пишете или правите `.vne` во внешней игре — **сначала** смотрите сценарные разделы, не архитектуру плагинов.
16
+
17
+ | Приоритет | Раздел | Когда открывать |
18
+ |-----------|--------|-----------------|
19
+ | 1 | [`scenario.guide/`](./scenario.guide/) | Авторские гайды с примерами (вариант B) |
20
+ | 1 | [`scenario.catalog/`](./scenario.catalog/) | Полный индекс команд из `SCENARIO_COMMANDS` + stubs (вариант C) |
21
+ | 2 | [`plugins/`](./plugins/) | События, модули, internals плагина |
22
+ | 3 | [`architecture.md`](./architecture.md) | Модель монорепы — редко, не для написания реплик |
23
+
24
+ Сейчас в пакете **два** параллельных входа для сценария — сравните и выберите удобный. Оба ссылаются на `plugins/` за деталями.
25
+
26
+ ## Содержание
27
+
28
+ - [Сценарий — guide](./scenario.guide/README.md) — синтаксис `.vne` и тематические гайды
29
+ - [Сценарий — catalog](./scenario.catalog/README.md) — каталог `$` / `%` команд
30
+ - [Архитектура](./architecture.md) — каталоги монорепы и их связи, mermaid-диаграммы
31
+
32
+ ## Быстрый ориентир по монорепе
33
+
34
+ | Каталог | Роль |
35
+ | ------------------------------------------------------------- | ---------------------------------------- |
36
+ | [`packages/`](./architecture.md#packages) | Runtime: `shared`, `observer`, `core`, … |
37
+ | [`modules_extensions/`](./architecture.md#modules_extensions) | Базовые классы модулей |
38
+ | [`configs/`](./architecture.md#configs) | Общие TypeScript-конфиги |
39
+ | [`contracts/`](./architecture.md#contracts) | Публичный API плагина |
40
+ | [`plugins/`](./architecture.md#plugins) | Реализация поведения |
41
+ | [`compatibility/`](./architecture.md#compatibility) | Связка между плагинами |
42
+ | [`bundles/`](./architecture.md#bundles) | Сборка набора плагинов для игры |
43
+ | [`helpers/`](./architecture.md#helpers) | Утилиты без привязки к движку |
44
+ | [`uis/`](./architecture.md#uis) | React-компоненты для view-плагинов |
45
+ | [`cli/`](./architecture.md#cli) | Сборка монорепы и игр |
46
+ | [`games/`](./architecture.md#games) | Проекты игр: сценарий, entry, dist |
47
+ | [`vs_code_extensions/`](./architecture.md#vs_code_extensions) | Подсветка `.vne` в редакторе |
48
+
49
+ `games/` подключает один `bundles/` и получает `VneCore` — точку входа в движок.
@@ -0,0 +1,507 @@
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 → init`).
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
+ B --> P[plugins/]
44
+ B --> C[compatibility/]
45
+ P --> CT[contracts/]
46
+ C --> CT
47
+ P --> H[helpers/]
48
+ P --> U[uis/]
49
+ P --> ME[modules_extensions/]
50
+ ME --> PKG[packages/]
51
+ CT --> PKG
52
+ CFG[configs/] --> P
53
+ CFG --> PKG
54
+ CFG --> U
55
+ VSC[vs_code_extensions/] -.->|"подсветка .vne"| G
56
+ ```
57
+
58
+ **Направление зависимостей:**
59
+
60
+ | От | К | Смысл |
61
+ |----|---|-------|
62
+ | `games/` | `bundles/`, `cli/` | Игра не знает про отдельные плагины; сборка через `cli/` |
63
+ | `bundles/` | `plugins/`, `compatibility/` | Только импорт нужного набора |
64
+ | `plugins/` | `contracts/` | Реализация следует объявленному API |
65
+ | `plugins/` | `modules_extensions/` → `packages/` | Модули наследуют базы, базы опираются на shared/observer |
66
+ | `compatibility/` | `contracts/` (2+) | Связка по событиям, без импорта реализаций |
67
+ | `plugins/` | `helpers/`, `uis/` | Горизонтальные утилиты и UI |
68
+ | `plugins/` | — другой `plugins/` | **Напрямую не зависит** |
69
+ | `configs/` | пакеты workspace | Общие tsconfig, не runtime |
70
+
71
+ ---
72
+
73
+ ## packages/
74
+
75
+ **Runtime-основа движка** — публикуемые npm-пакеты `@vnejs/*`, на которых держатся `plugins/`, `bundles/` и `VneCore`.
76
+
77
+ ### Состав и зависимости
78
+
79
+ ```mermaid
80
+ flowchart BT
81
+ CONST["constants"]
82
+ OBS["observer"]
83
+ SH["shared"]
84
+ SS["sources-set"]
85
+ SEM["semaphore"]
86
+ HELP["helpers/"]
87
+ CR["core — VneCore"]
88
+
89
+ CONST --> CR
90
+ OBS --> CR
91
+ SH --> CR
92
+ HELP --> CR
93
+ SS --> CT[contracts/ / plugins/]
94
+ SEM --> PL[plugins/]
95
+ SH --> PL
96
+ OBS --> ME[modules_extensions/]
97
+ SH --> ME
98
+ ```
99
+
100
+ | Пакет | Назначение |
101
+ |-------|------------|
102
+ | **`@vnejs/shared`** | Реестр **`VNE`**, массив **`VNE_MODULES`**, **`regPlugin`** / **`regModule`**, типы для module augmentation |
103
+ | **`@vnejs/observer`** | **`Observer`** — pub/sub: `subscribe`, `emit`, `emitOne`, `emitReal`, `emitReals` |
104
+ | **`@vnejs/core`** | **`VneCore`**: модули из `VNE_MODULES`, lifecycle, загрузка `mods.json` / media, `reset` |
105
+ | **`@vnejs/constants`** | Общие константы-заглушки (`EMPTY_OBJECT`, `EMPTY_ARRAY`) |
106
+ | **`@vnejs/sources-set`** | **`SourcesSet`** — управление множеством «источников» (text и связанная логика) |
107
+ | **`@vnejs/semaphore`** | **`Semaphore`** — очередь задач с весами и ограничением параллелизма |
108
+ | **`@vnejs/test-utils`** | Harness для тестов модулей: observer stubs, `createTestModule`, spies, DOM mocks |
109
+
110
+ ### Принципы
111
+
112
+ - **`shared` + `observer`** — фундамент; почти все плагины и модули зависят от них.
113
+ - **`core`** — точка сборки runtime; `games/` создают `new VneCore()` после импорта `bundles/`.
114
+ - **`test-utils`** — только для тестов workspace-пакетов; не часть игрового runtime.
115
+ - Пакеты **не содержат** игровой логики и **не привязаны** к конкретному `bundles/`.
116
+
117
+ ---
118
+
119
+ ## modules_extensions/
120
+
121
+ **Иерархия базовых классов** для модулей внутри `plugins/`.
122
+
123
+ ### Иерархия классов
124
+
125
+ ```mermaid
126
+ flowchart TD
127
+ M["@vnejs/module<br/>Module"]
128
+ MC["@vnejs/module.core<br/>ModuleCore"]
129
+ MH["@vnejs/module.handlers<br/>ModuleHandlers"]
130
+ MR["@vnejs/module.replace<br/>ModuleReplace"]
131
+ MRE["@vnejs/module.replace.exec<br/>ModuleReplaceExec"]
132
+ MCO["@vnejs/module.components<br/>ModuleController, ModuleView"]
133
+ ML["@vnejs/module.layer<br/>canvas-слои"]
134
+ MA["@vnejs/module.audio"]
135
+ MCA["@vnejs/module.controller.audio"]
136
+ MCT["@vnejs/module.controller.tabs"]
137
+ MSC["@vnejs/module.scales.common"]
138
+
139
+ M --> MC
140
+ MC --> MH
141
+ MC --> MR
142
+ MC --> MRE
143
+ MC --> MCO
144
+ MC --> MA
145
+ MC --> MCA
146
+ MC --> MCT
147
+ MC --> MSC
148
+ MCO --> ML
149
+ ```
150
+
151
+ | Пакет | Назначение |
152
+ |-------|------------|
153
+ | **`@vnejs/module`** | **`Module`**: `VNE`, `on`/`emit`, `inject`, state, shared, media, lifecycle |
154
+ | **`@vnejs/module.core`** | **`ModuleCore`** — типизированный доступ к **core-контрактам**; `emitLog`, `emitNext`, … |
155
+ | **`@vnejs/module.handlers`** | **`ModuleHandlers`** — параллельные обработчики emit-событий с приоритетами (side effects) |
156
+ | **`@vnejs/module.replace`** | **`ModuleReplace`** — последовательная подмена значения поля payload через `REPLACE_KEY` и цепочку handlers |
157
+ | **`@vnejs/module.replace.exec`** | **`ModuleReplaceExec`** — реестр exec-handlers по имени модуля (`EXEC_REG` / `EXEC_GET`) |
158
+ | **`@vnejs/module.components`** | **`ModuleView`**, **`ModuleController`** — React-view, zustand, media, controls |
159
+ | **`@vnejs/module.layer`** | Canvas layers: controller, image, sprite, text, video, props, view |
160
+ | **`@vnejs/module.audio`** | База для audio-плагинов scenario-слоёв (`music` / `sound` / …) |
161
+ | **`@vnejs/module.controller.audio`** | Overlay-BGM для view-экранов: pause global / play `view` / resume на SHOW/HIDE/PRELOAD |
162
+ | **`@vnejs/module.controller.tabs`** | Навигация по вкладкам view-экранов: TAB_PREV/TAB_NEXT → `TAB_SET`, PUSH/POP controls на SHOW/HIDE |
163
+ | **`@vnejs/module.scales.common`** | База для scales / RPG-модулей |
164
+
165
+ ### Принципы
166
+
167
+ - Плагин берёт нужную базу (`ModuleCore`, `ModuleView`, `ModuleLayerController`, …), а не `Module` напрямую.
168
+ - Базы тянут **контракты** из `contracts/` — отсюда типизация `EVENTS` / `CONST`.
169
+ - **`ModuleCore`** — `plugins/core/` и `compatibility/`; **`ModuleView` / `ModuleLayer*`** — view/canvas + **`@vnejs/uis.react`**.
170
+
171
+ | | `packages/` | `modules_extensions/` |
172
+ |---|-------------|------------------------|
173
+ | Роль | Runtime и инфраструктура | Шаблоны для модулей плагинов |
174
+ | Регистрация в VNE | да (`shared`, `core`) | нет |
175
+ | Наследование | — | `plugins/` наследуют базы |
176
+
177
+ ---
178
+
179
+ ## configs/
180
+
181
+ **Общие конфигурации сборки** — переиспользуемые TypeScript-настройки, не runtime.
182
+
183
+ | Пакет | Назначение |
184
+ |-------|------------|
185
+ | **`@vnejs/configs.ts-common`** | tsconfig для `plugins/`, `contracts/`, `packages/`, `modules_extensions/`, `helpers/` |
186
+ | **`@vnejs/configs.ts-uis`** | tsconfig для `uis/react/` и view-кода `games/` (JSX, React-типы) |
187
+ | **`@vnejs/configs.vitest`** | Общий Vitest-конфиг (`create-config.js`, `setup.js`) для пакетов с тестами |
188
+
189
+ ```mermaid
190
+ flowchart LR
191
+ TC[configs.ts-common] --> PL[plugins/ / contracts/ / packages/]
192
+ TU[configs.ts-uis] --> UI[uis/react/]
193
+ TU --> GM[games/]
194
+ TV[configs.vitest] --> TEST[пакеты с vitest]
195
+ ```
196
+
197
+ Пакеты `ts-*` экспортируют json; локальный `tsconfig.json` пакета **extends** общий и задаёт `rootDir` / `outDir`. Vitest-конфиг — JS-хелперы, не tsconfig.
198
+
199
+ ---
200
+
201
+ ## contracts/
202
+
203
+ **Контракт** — публичный API одного плагина: **спецификация**, не поведение.
204
+
205
+ ### Что входит в контракт
206
+
207
+ - **`PLUGIN_NAME`** — namespace в реестре `VNE`.
208
+ - **`CONSTANTS`**, **`SUBSCRIBE_EVENTS`**, **`PARAMS`**, **`SETTINGS_KEYS`**.
209
+ - **Типы** — payload событий, shape глобального state, shared-поля.
210
+
211
+ ### TypeScript augmentation
212
+
213
+ Контракт расширяет типы через `declare module`:
214
+
215
+ - `@vnejs/shared` — `VnePluginEventsMap`, `VnePluginConstantsMap`, …
216
+ - `@vnejs/module` — `ModuleGlobalState`, `ModuleShared`
217
+ - другие контракты — при cross-cutting типах
218
+
219
+ ### Принципы
220
+
221
+ - Один контракт обычно соответствует **одному плагину** в `plugins/` (1:1).
222
+ - Контракт **не импортирует** реализацию из `plugins/`.
223
+ - Доменная структура `contracts/` зеркалит таксономию `plugins/`.
224
+
225
+ ```mermaid
226
+ flowchart LR
227
+ CT[contracts/] -->|"declare module"| TS[Типы VNE / Module]
228
+ CT -->|"CONSTANTS, EVENTS, PARAMS"| REG[regPlugin при загрузке plugins/]
229
+ PL[plugins/] -->|"import"| CT
230
+ ```
231
+
232
+ ---
233
+
234
+ ## plugins/
235
+
236
+ **Плагин** — реализация поведения, описанного в `contracts/`.
237
+
238
+ ### Регистрация
239
+
240
+ 1. Импорт контракта из `contracts/`.
241
+ 2. `regPlugin(PLUGIN_NAME, { constants, events, params, settings }, [ModuleClasses])`.
242
+ 3. Классы попадают в `VNE_MODULES` через `regModule`.
243
+
244
+ ### Модули и lifecycle
245
+
246
+ Плагин — **набор модулей** с уникальным `name`. После `new VneCore()`:
247
+
248
+ 1. **`inject`** — observer, global state, shared, media.
249
+ 2. **`subscribe`** — подписки на события.
250
+ 3. **`init`** — асинхронная инициализация.
251
+
252
+ ```mermaid
253
+ sequenceDiagram
254
+ participant A as Модуль plugins/ A
255
+ participant OBS as Observer
256
+ participant B as Модуль plugins/ B
257
+
258
+ A->>OBS: emit(EVENT_A.DONE, payload)
259
+ OBS->>B: handler
260
+ B->>OBS: emit(EVENT_B.START)
261
+ ```
262
+
263
+ Пакеты из `plugins/` **не импортируют** код соседних плагинов — только контракт и `VNE`.
264
+
265
+ ### Зависимости
266
+
267
+ - `contracts/`, **`@vnejs/module.*`**, **`@vnejs/helpers`**, **`@vnejs/uis.*`** (view).
268
+
269
+ ---
270
+
271
+ ## compatibility/
272
+
273
+ **Опциональная интеграция** между независимыми плагинами — включается в `bundles/`, не зашивается внутрь `plugins/`.
274
+
275
+ - Один модуль, наследник `ModuleCore`.
276
+ - В **`subscribe`** слушает A, эмитит B.
277
+ - **`regModule`** без `regPlugin` — нет своего namespace в `VNE`.
278
+ - Зависит только от **контрактов** из `contracts/`, не от реализаций в `plugins/`.
279
+
280
+ Именование: `@vnejs/compatibility.{источник}-with-{цель}` → путь `compatibility/{источник}/{цель}/`.
281
+
282
+ ```mermaid
283
+ flowchart LR
284
+ PA[plugins/ A] -->|"emit EVENT_A"| OBS[Observer]
285
+ OBS --> CM[compatibility/]
286
+ CM -->|"emit EVENT_B"| OBS
287
+ OBS --> PB[plugins/ B]
288
+
289
+ PA -.->|"не импортирует"| PB
290
+ CM --> CTA[contracts/ A]
291
+ CM --> CTB[contracts/ B]
292
+ ```
293
+
294
+ ---
295
+
296
+ ## bundles/
297
+
298
+ **Композиция** без бизнес-логики — цепочка side-effect импортов из `plugins/` и `compatibility/`.
299
+
300
+ - Определяет **набор возможностей** для `games/`.
301
+ - Экспортирует **`VneCore`**.
302
+ - Дочерний пакет в `bundles/` импортирует родительский и **добавляет** плагины.
303
+
304
+ ```mermaid
305
+ flowchart BT
306
+ CORE["bundles/core/"]
307
+ CANVAS["bundles/canvas.react/"]
308
+ SKEL["bundles/vn.skeleton/"]
309
+ BASE["bundles/vn.base/"]
310
+ GAME["bundles/coraline/"]
311
+
312
+ CORE --> CANVAS --> SKEL --> BASE --> GAME
313
+ ```
314
+
315
+ Entry point: re-export `VneCore` → импорт `plugins/` → импорт `compatibility/`.
316
+
317
+ ---
318
+
319
+ ## helpers/
320
+
321
+ **Чистые утилиты** вне event-архитектуры.
322
+
323
+ - **`helpers/primitives/`** — атомарные функции (`tokenize-*`, `get-id`, `to-json`, …).
324
+ - **`helpers/composites/`** — составные утилиты поверх primitives (например `call-all-promises`).
325
+ - **`helpers/base/`** — barrel **`@vnejs/helpers`** (реэкспорт primitives и composites).
326
+
327
+ ```mermaid
328
+ flowchart LR
329
+ H[helpers/] --> P[plugins/]
330
+ H --> CORE[VneCore]
331
+ H -.->|"не связан"| VNE[(VNE / Observer)]
332
+ ```
333
+
334
+ ---
335
+
336
+ ## uis/
337
+
338
+ **Презентационный слой** для view-плагинов — не плагин, не в `VNE`.
339
+
340
+ | Часть | Назначение |
341
+ |-------|------------|
342
+ | **`uis/utils/`** | `cn`, `injectStyles`, `sel` |
343
+ | **`uis/react/primitives/`** | Атомы (button, text, icon, …) |
344
+ | **`uis/react/composites/`** | Составные компоненты |
345
+ | **`uis/react/complex/`** | Крупные UI-блоки |
346
+ | **`uis/react/hooks/`** | React-хуки |
347
+ | **`uis/react/base/`** | Barrel **`@vnejs/uis.react`** |
348
+
349
+ View-плагины в `plugins/`: **`ModuleView`** + render на компонентах из `uis/`.
350
+
351
+ ```mermaid
352
+ flowchart TD
353
+ VP[plugins/ view / ModuleView]
354
+ VP --> UIR["@vnejs/uis.react"]
355
+ VP --> UU["@vnejs/uis.utils"]
356
+ VP --> OBS[Observer]
357
+ UIR -.->|"не использует"| VNE
358
+ ```
359
+
360
+ ---
361
+
362
+ ## cli/
363
+
364
+ **CLI** для монорепы и сборки `games/` (`npx @vnejs/*`).
365
+
366
+ ```mermaid
367
+ flowchart LR
368
+ MR["@vnejs/monorepo"]
369
+ BD["@vnejs/build"]
370
+ DS["@vnejs/desktop"]
371
+ TL["@vnejs/tools"]
372
+
373
+ MR --> WS[workspace-пакеты]
374
+ BD --> G[games/]
375
+ DS --> G
376
+ TL --> G
377
+ ```
378
+
379
+ | CLI | Роль |
380
+ |-----|------|
381
+ | **`@vnejs/monorepo`** | `build`, `package`, `publish`, `bump`, `sync-deps`, `graph`, `run-changed`, `clear` |
382
+ | **`@vnejs/build`** | **`data`** — `game/` → JSON в `dist/`; **`client`** — Vite entry → `dist/` |
383
+ | **`@vnejs/desktop`** | **`web`** — static-сервер для `dist/` |
384
+ | **`@vnejs/tools`** | Resize image/video/audio, контент-пайплайн |
385
+
386
+ Корень: `npm run build` → monorepo build; **Turbo** кэширует `build` с `dependsOn: ["^build"]`.
387
+
388
+ ---
389
+
390
+ ## games/
391
+
392
+ **Проекты игр** — потребители `bundles/` + `cli/`.
393
+
394
+ ```
395
+ games/<name>/
396
+ ├── entry/ # index.ts, index.html → импорт bundles/, new VneCore()
397
+ ├── game/<mod>/ # scenario (.vne), scripts, media, public
398
+ ├── desktop/ # Electron dev/prod
399
+ ├── dist/ # JSON + JS после сборки
400
+ └── package.json
401
+ ```
402
+
403
+ ```mermaid
404
+ flowchart LR
405
+ SC["game/**/*.vne"]
406
+ DATA["build data"]
407
+ JSON["dist/*.json"]
408
+ ENTRY["entry/index.ts"]
409
+ CLIENT["build client"]
410
+ DIST["dist/"]
411
+ SRV["desktop web"]
412
+
413
+ SC --> DATA --> JSON
414
+ ENTRY --> CLIENT --> DIST
415
+ JSON --> RUN[Browser / Electron]
416
+ DIST --> RUN
417
+ SRV --> RUN
418
+ ```
419
+
420
+ 1. **`build:data`** — JSON для **`VneCore.init()`** (`mods.json`, labels, media).
421
+ 2. **`build:client`** — Vite + `bundles/`.
422
+ 3. **`entry/`** — `new VneCore()`, `await init()`.
423
+
424
+ `games/` **не собирает** `plugins/` — выбирает `bundles/` и добавляет контент.
425
+
426
+ ---
427
+
428
+ ## vs_code_extensions/
429
+
430
+ **Расширения редактора** для формата сценария — не runtime.
431
+
432
+ | Расширение | Назначение |
433
+ |------------|------------|
434
+ | **`@vnejs/language`** | Подсветка **`.vne`** в `games/*/game/**/scenario/` |
435
+
436
+ ---
437
+
438
+ ## Именование npm-пакетов
439
+
440
+ ```
441
+ plugins/core/system/ → @vnejs/plugins.core.system
442
+ contracts/text/text/ → @vnejs/contracts.text
443
+ compatibility/text/scenario.autoread/ → @vnejs/compatibility.text-with-scenario.autoread
444
+ ```
445
+
446
+ Слеш в пути → точка в имени; `compatibility/` — суффикс **`-with-`**.
447
+
448
+ ---
449
+
450
+ ## Сборка end-to-end
451
+
452
+ ```mermaid
453
+ flowchart TD
454
+ subgraph repo ["Монорепозиторий"]
455
+ CFG[configs/]
456
+ PKG[packages/]
457
+ ME[modules_extensions/]
458
+ CT[contracts/]
459
+ PL[plugins/]
460
+ CP[compatibility/]
461
+ BD[bundles/]
462
+ CL[cli/]
463
+ end
464
+
465
+ subgraph game_proj ["games/my-game/"]
466
+ SC[scenario .vne]
467
+ EN[entry/]
468
+ end
469
+
470
+ CFG --> PL
471
+ PKG --> ME --> PL
472
+ CT --> PL
473
+ CT --> CP
474
+ PL --> BD
475
+ CP --> BD
476
+ BD --> EN
477
+ SC --> CL
478
+ CL -->|"data + client"| ART[dist/]
479
+ EN --> ART
480
+ ART --> PLAY[Browser / Electron]
481
+ ```
482
+
483
+ 1. `bundles/` регистрирует `plugins/` и `compatibility/` в `VNE`.
484
+ 2. `cli/` собирает сценарий в JSON и клиент в `dist/`.
485
+ 3. `new VneCore().init()` — модули, media, `SYSTEM.STARTED`.
486
+ 4. Игра живёт на событиях шины; cross-plugin связи — через `compatibility/` из `bundles/`.
487
+
488
+ ---
489
+
490
+ ## Резюме
491
+
492
+ | Каталог | Одной фразой |
493
+ |---------|----------------|
494
+ | **`packages/`** | Реестр, шина, VneCore |
495
+ | **`modules_extensions/`** | Базовые классы модулей |
496
+ | **`configs/`** | Общие tsconfig |
497
+ | **`contracts/`** | API плагина: события, типы |
498
+ | **`plugins/`** | Реализация на шине |
499
+ | **`compatibility/`** | Opt-in связка двух плагинов |
500
+ | **`bundles/`** | Набор способностей для игры |
501
+ | **`helpers/`** | Утилиты без движка |
502
+ | **`uis/`** | React/UI для view |
503
+ | **`cli/`** | Сборка монорепы и игр |
504
+ | **`games/`** | Сценарий + entry + dist |
505
+ | **`vs_code_extensions/`** | Подсветка `.vne` |
506
+
507
+ **Главное правило:** `plugins/` не знают друг о друге; интеграция — через события по `contracts/` и явный `compatibility/` в `bundles/`.
package/manifest.json ADDED
@@ -0,0 +1,44 @@
1
+ {
2
+ "name": "@vnejs/docs",
3
+ "readOrder": [
4
+ "scenario.guide/README.md",
5
+ "scenario.catalog/README.md",
6
+ "scenario.catalog/index.md",
7
+ "plugins/",
8
+ "architecture.md"
9
+ ],
10
+ "sections": {
11
+ "scenario.guide": {
12
+ "path": "scenario.guide/",
13
+ "role": "Author-facing .vne guides (variant B)",
14
+ "entry": "scenario.guide/README.md",
15
+ "pages": [
16
+ "scenario.guide/README.md",
17
+ "scenario.guide/dialogue.md",
18
+ "scenario.guide/flow.md",
19
+ "scenario.guide/vars.md",
20
+ "scenario.guide/choose.md",
21
+ "scenario.guide/point-and-click.md",
22
+ "scenario.guide/qte-random.md",
23
+ "scenario.guide/audio.md",
24
+ "scenario.guide/canvas.md",
25
+ "scenario.guide/views.md"
26
+ ]
27
+ },
28
+ "scenario.catalog": {
29
+ "path": "scenario.catalog/",
30
+ "role": "Command catalog from SCENARIO_COMMANDS (variant C)",
31
+ "entry": "scenario.catalog/README.md",
32
+ "index": "scenario.catalog/index.md",
33
+ "stubs": "scenario.catalog/stubs/"
34
+ },
35
+ "plugins": {
36
+ "path": "plugins/",
37
+ "role": "Plugin internals: events, modules, contracts"
38
+ },
39
+ "architecture": {
40
+ "path": "architecture.md",
41
+ "role": "Monorepo architecture (read rarely for scenario authoring)"
42
+ }
43
+ }
44
+ }
package/package.json ADDED
@@ -0,0 +1,27 @@
1
+ {
2
+ "name": "@vnejs/docs",
3
+ "version": "0.2.1",
4
+ "description": "VNEJS documentation for engine consumers and coding agents",
5
+ "files": [
6
+ "*.md",
7
+ "*.json",
8
+ "plugins/**/*.md",
9
+ "scenario.guide/**/*.md",
10
+ "scenario.catalog/**/*.md"
11
+ ],
12
+ "exports": {
13
+ "./package.json": "./package.json",
14
+ "./manifest.json": "./manifest.json",
15
+ "./README.md": "./README.md",
16
+ "./architecture.md": "./architecture.md",
17
+ "./plugins/*": "./plugins/*",
18
+ "./scenario.guide/*": "./scenario.guide/*",
19
+ "./scenario.catalog/*": "./scenario.catalog/*"
20
+ },
21
+ "scripts": {
22
+ "publish:major": "npx @vnejs/monorepo publish major --access public",
23
+ "publish:minor": "npx @vnejs/monorepo publish minor --access public",
24
+ "publish:patch": "npx @vnejs/monorepo publish patch --access public"
25
+ },
26
+ "license": "ISC"
27
+ }
@@ -0,0 +1,39 @@
1
+ # plugins/audio/ambient/
2
+
3
+ Пакет: `@vnejs/plugins.audio.ambient` · namespace: `AMBIENT`
4
+
5
+ Воспроизведение зацикленного ambient-аудио из сценария с отдельной громкостью.
6
+
7
+ ## События
8
+
9
+ Нет.
10
+
11
+ ## Константы
12
+
13
+ Нет.
14
+
15
+ ## Параметры
16
+
17
+ Нет.
18
+
19
+ ## Настройки
20
+
21
+ | Ключ | Тип | Смысл |
22
+ |------|-----|-------|
23
+ | `VOLUME` (`vne:ambient:volume`) | `number` | Уровень громкости. |
24
+
25
+ ## Модули
26
+
27
+ | Модуль | Зона ответственности |
28
+ |--------|----------------------|
29
+ | `ambient` | Модуль `ambient`. |
30
+
31
+ ## Близкие плагины
32
+
33
+ ### plugins/core/
34
+
35
+ — нет
36
+
37
+ ### Остальные
38
+
39
+ — нет