@nice2dev/game-engine 0.1.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 (519) hide show
  1. package/CHANGELOG.md +33 -0
  2. package/LICENSE +21 -0
  3. package/README.md +105 -0
  4. package/dist/cjs/accessibility/Accessibility.js +162 -0
  5. package/dist/cjs/accessibility/Accessibility.js.map +1 -0
  6. package/dist/cjs/ai/AI.js +321 -0
  7. package/dist/cjs/ai/AI.js.map +1 -0
  8. package/dist/cjs/animation/Animation.js +233 -0
  9. package/dist/cjs/animation/Animation.js.map +1 -0
  10. package/dist/cjs/audio/AudioAdvanced.js +262 -0
  11. package/dist/cjs/audio/AudioAdvanced.js.map +1 -0
  12. package/dist/cjs/audio/AudioManager.js +248 -0
  13. package/dist/cjs/audio/AudioManager.js.map +1 -0
  14. package/dist/cjs/core/EventBus.js +63 -0
  15. package/dist/cjs/core/EventBus.js.map +1 -0
  16. package/dist/cjs/core/GameClock.js +70 -0
  17. package/dist/cjs/core/GameClock.js.map +1 -0
  18. package/dist/cjs/core/GameConfig.js +86 -0
  19. package/dist/cjs/core/GameConfig.js.map +1 -0
  20. package/dist/cjs/core/GameLoop.js +93 -0
  21. package/dist/cjs/core/GameLoop.js.map +1 -0
  22. package/dist/cjs/core/ServiceLocator.js +73 -0
  23. package/dist/cjs/core/ServiceLocator.js.map +1 -0
  24. package/dist/cjs/core/Validation.js +119 -0
  25. package/dist/cjs/core/Validation.js.map +1 -0
  26. package/dist/cjs/core/math.js +116 -0
  27. package/dist/cjs/core/math.js.map +1 -0
  28. package/dist/cjs/devtools/DevTools.js +560 -0
  29. package/dist/cjs/devtools/DevTools.js.map +1 -0
  30. package/dist/cjs/devtools/DeveloperExperience.js +562 -0
  31. package/dist/cjs/devtools/DeveloperExperience.js.map +1 -0
  32. package/dist/cjs/docs/DocGenerator.js +357 -0
  33. package/dist/cjs/docs/DocGenerator.js.map +1 -0
  34. package/dist/cjs/ecs/World.js +280 -0
  35. package/dist/cjs/ecs/World.js.map +1 -0
  36. package/dist/cjs/editor/AdvancedEditor.js +149 -0
  37. package/dist/cjs/editor/AdvancedEditor.js.map +1 -0
  38. package/dist/cjs/editor/AssetManager.js +190 -0
  39. package/dist/cjs/editor/AssetManager.js.map +1 -0
  40. package/dist/cjs/editor/DebugTools.js +187 -0
  41. package/dist/cjs/editor/DebugTools.js.map +1 -0
  42. package/dist/cjs/editor/NiceGameEditor.js +361 -0
  43. package/dist/cjs/editor/NiceGameEditor.js.map +1 -0
  44. package/dist/cjs/editor/SceneEditor.js +223 -0
  45. package/dist/cjs/editor/SceneEditor.js.map +1 -0
  46. package/dist/cjs/engine/NiceGameEngine.js +172 -0
  47. package/dist/cjs/engine/NiceGameEngine.js.map +1 -0
  48. package/dist/cjs/enterprise/Enterprise.js +258 -0
  49. package/dist/cjs/enterprise/Enterprise.js.map +1 -0
  50. package/dist/cjs/i18n/I18n.js +634 -0
  51. package/dist/cjs/i18n/I18n.js.map +1 -0
  52. package/dist/cjs/i18n/useTranslation.js +100 -0
  53. package/dist/cjs/i18n/useTranslation.js.map +1 -0
  54. package/dist/cjs/index.js +526 -0
  55. package/dist/cjs/index.js.map +1 -0
  56. package/dist/cjs/input/GamepadNavigation.js +181 -0
  57. package/dist/cjs/input/GamepadNavigation.js.map +1 -0
  58. package/dist/cjs/input/InputManager.js +404 -0
  59. package/dist/cjs/input/InputManager.js.map +1 -0
  60. package/dist/cjs/input/useGamepads.js +86 -0
  61. package/dist/cjs/input/useGamepads.js.map +1 -0
  62. package/dist/cjs/kids/KidMode.js +670 -0
  63. package/dist/cjs/kids/KidMode.js.map +1 -0
  64. package/dist/cjs/kids/KidTools.js +533 -0
  65. package/dist/cjs/kids/KidTools.js.map +1 -0
  66. package/dist/cjs/monetization/Monetization.js +197 -0
  67. package/dist/cjs/monetization/Monetization.js.map +1 -0
  68. package/dist/cjs/multiplayer/LocalMultiplayer.js +288 -0
  69. package/dist/cjs/multiplayer/LocalMultiplayer.js.map +1 -0
  70. package/dist/cjs/multiplayer/MiniGameTypes.js +70 -0
  71. package/dist/cjs/multiplayer/MiniGameTypes.js.map +1 -0
  72. package/dist/cjs/network/MultiplayerTransport.js +109 -0
  73. package/dist/cjs/network/MultiplayerTransport.js.map +1 -0
  74. package/dist/cjs/network/Networking.js +569 -0
  75. package/dist/cjs/network/Networking.js.map +1 -0
  76. package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/AbortController.js +32 -0
  77. package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/AbortController.js.map +1 -0
  78. package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/AccessTokenHttpClient.js +51 -0
  79. package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/AccessTokenHttpClient.js.map +1 -0
  80. package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/DefaultHttpClient.js +46 -0
  81. package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/DefaultHttpClient.js.map +1 -0
  82. package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/DefaultReconnectPolicy.js +18 -0
  83. package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/DefaultReconnectPolicy.js.map +1 -0
  84. package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/Errors.js +145 -0
  85. package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/Errors.js.map +1 -0
  86. package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/FetchHttpClient.js +161 -0
  87. package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/FetchHttpClient.js.map +1 -0
  88. package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/HandshakeProtocol.js +56 -0
  89. package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/HandshakeProtocol.js.map +1 -0
  90. package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/HeaderNames.js +11 -0
  91. package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/HeaderNames.js.map +1 -0
  92. package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/HttpClient.js +52 -0
  93. package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/HttpClient.js.map +1 -0
  94. package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/HttpConnection.js +576 -0
  95. package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/HttpConnection.js.map +1 -0
  96. package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/HubConnection.js +956 -0
  97. package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/HubConnection.js.map +1 -0
  98. package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/HubConnectionBuilder.js +149 -0
  99. package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/HubConnectionBuilder.js.map +1 -0
  100. package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/IHubProtocol.js +25 -0
  101. package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/IHubProtocol.js.map +1 -0
  102. package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/ILogger.js +27 -0
  103. package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/ILogger.js.map +1 -0
  104. package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/ITransport.js +26 -0
  105. package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/ITransport.js.map +1 -0
  106. package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/JsonHubProtocol.js +124 -0
  107. package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/JsonHubProtocol.js.map +1 -0
  108. package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/Loggers.js +17 -0
  109. package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/Loggers.js.map +1 -0
  110. package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/LongPollingTransport.js +188 -0
  111. package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/LongPollingTransport.js.map +1 -0
  112. package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/MessageBuffer.js +199 -0
  113. package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/MessageBuffer.js.map +1 -0
  114. package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/ServerSentEventsTransport.js +108 -0
  115. package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/ServerSentEventsTransport.js.map +1 -0
  116. package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/Subject.js +38 -0
  117. package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/Subject.js.map +1 -0
  118. package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/TextMessageFormat.js +24 -0
  119. package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/TextMessageFormat.js.map +1 -0
  120. package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/Utils.js +264 -0
  121. package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/Utils.js.map +1 -0
  122. package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/WebSocketTransport.js +160 -0
  123. package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/WebSocketTransport.js.map +1 -0
  124. package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/XhrHttpClient.js +88 -0
  125. package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/XhrHttpClient.js.map +1 -0
  126. package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/index.js +50 -0
  127. package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/index.js.map +1 -0
  128. package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/pkg-version.js +6 -0
  129. package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/pkg-version.js.map +1 -0
  130. package/dist/cjs/pathfinding/Pathfinding.js +255 -0
  131. package/dist/cjs/pathfinding/Pathfinding.js.map +1 -0
  132. package/dist/cjs/performance/BenchmarkSuite.js +318 -0
  133. package/dist/cjs/performance/BenchmarkSuite.js.map +1 -0
  134. package/dist/cjs/performance/Performance.js +180 -0
  135. package/dist/cjs/performance/Performance.js.map +1 -0
  136. package/dist/cjs/performance/PerformanceAdvanced.js +628 -0
  137. package/dist/cjs/performance/PerformanceAdvanced.js.map +1 -0
  138. package/dist/cjs/physics/PhysicsAdvanced.js +432 -0
  139. package/dist/cjs/physics/PhysicsAdvanced.js.map +1 -0
  140. package/dist/cjs/physics/PhysicsEngine2D.js +445 -0
  141. package/dist/cjs/physics/PhysicsEngine2D.js.map +1 -0
  142. package/dist/cjs/plugins/PluginSDK.js +488 -0
  143. package/dist/cjs/plugins/PluginSDK.js.map +1 -0
  144. package/dist/cjs/plugins/PluginTestKit.js +368 -0
  145. package/dist/cjs/plugins/PluginTestKit.js.map +1 -0
  146. package/dist/cjs/procedural/Procedural.js +288 -0
  147. package/dist/cjs/procedural/Procedural.js.map +1 -0
  148. package/dist/cjs/procedural/WorldBuilding.js +246 -0
  149. package/dist/cjs/procedural/WorldBuilding.js.map +1 -0
  150. package/dist/cjs/release/MobileExport.js +149 -0
  151. package/dist/cjs/release/MobileExport.js.map +1 -0
  152. package/dist/cjs/release/Release.js +151 -0
  153. package/dist/cjs/release/Release.js.map +1 -0
  154. package/dist/cjs/rendering/Camera2D.js +129 -0
  155. package/dist/cjs/rendering/Camera2D.js.map +1 -0
  156. package/dist/cjs/rendering/Renderer2D.js +337 -0
  157. package/dist/cjs/rendering/Renderer2D.js.map +1 -0
  158. package/dist/cjs/runtime3d/Runtime3D.js +381 -0
  159. package/dist/cjs/runtime3d/Runtime3D.js.map +1 -0
  160. package/dist/cjs/runtime3d/SceneEditor3D.js +316 -0
  161. package/dist/cjs/runtime3d/SceneEditor3D.js.map +1 -0
  162. package/dist/cjs/scene/SceneManager.js +186 -0
  163. package/dist/cjs/scene/SceneManager.js.map +1 -0
  164. package/dist/cjs/scripting/NodeGraph.js +573 -0
  165. package/dist/cjs/scripting/NodeGraph.js.map +1 -0
  166. package/dist/cjs/social/Social.js +91 -0
  167. package/dist/cjs/social/Social.js.map +1 -0
  168. package/dist/cjs/templates/ActionTemplates.js +229 -0
  169. package/dist/cjs/templates/ActionTemplates.js.map +1 -0
  170. package/dist/cjs/templates/PartyTemplates.js +221 -0
  171. package/dist/cjs/templates/PartyTemplates.js.map +1 -0
  172. package/dist/cjs/templates/PuzzleTemplates.js +283 -0
  173. package/dist/cjs/templates/PuzzleTemplates.js.map +1 -0
  174. package/dist/cjs/templates/RPGTemplates.js +209 -0
  175. package/dist/cjs/templates/RPGTemplates.js.map +1 -0
  176. package/dist/cjs/templates/SportsTemplates.js +272 -0
  177. package/dist/cjs/templates/SportsTemplates.js.map +1 -0
  178. package/dist/cjs/templates/StrategyTemplates.js +173 -0
  179. package/dist/cjs/templates/StrategyTemplates.js.map +1 -0
  180. package/dist/cjs/templates/WaveDefense.js +470 -0
  181. package/dist/cjs/templates/WaveDefense.js.map +1 -0
  182. package/dist/cjs/tilemap/Tilemap.js +208 -0
  183. package/dist/cjs/tilemap/Tilemap.js.map +1 -0
  184. package/dist/cjs/tutorials/TutorialBranching.js +392 -0
  185. package/dist/cjs/tutorials/TutorialBranching.js.map +1 -0
  186. package/dist/cjs/tutorials/TutorialEngine.js +903 -0
  187. package/dist/cjs/tutorials/TutorialEngine.js.map +1 -0
  188. package/dist/cjs/tutorials/TutorialOverlay.js +602 -0
  189. package/dist/cjs/tutorials/TutorialOverlay.js.map +1 -0
  190. package/dist/cjs/tutorials/content/Tutorials_T05_T08.js +816 -0
  191. package/dist/cjs/tutorials/content/Tutorials_T05_T08.js.map +1 -0
  192. package/dist/cjs/tutorials/content/Tutorials_T09_T11.js +741 -0
  193. package/dist/cjs/tutorials/content/Tutorials_T09_T11.js.map +1 -0
  194. package/dist/cjs/tutorials/content/Tutorials_T12_T15.js +786 -0
  195. package/dist/cjs/tutorials/content/Tutorials_T12_T15.js.map +1 -0
  196. package/dist/cjs/ui/GameUI.js +312 -0
  197. package/dist/cjs/ui/GameUI.js.map +1 -0
  198. package/dist/cjs/xr/ARVR.js +197 -0
  199. package/dist/cjs/xr/ARVR.js.map +1 -0
  200. package/dist/esm/accessibility/Accessibility.js +153 -0
  201. package/dist/esm/accessibility/Accessibility.js.map +1 -0
  202. package/dist/esm/ai/AI.js +302 -0
  203. package/dist/esm/ai/AI.js.map +1 -0
  204. package/dist/esm/animation/Animation.js +227 -0
  205. package/dist/esm/animation/Animation.js.map +1 -0
  206. package/dist/esm/audio/AudioAdvanced.js +243 -0
  207. package/dist/esm/audio/AudioAdvanced.js.map +1 -0
  208. package/dist/esm/audio/AudioManager.js +246 -0
  209. package/dist/esm/audio/AudioManager.js.map +1 -0
  210. package/dist/esm/core/EventBus.js +61 -0
  211. package/dist/esm/core/EventBus.js.map +1 -0
  212. package/dist/esm/core/GameClock.js +68 -0
  213. package/dist/esm/core/GameClock.js.map +1 -0
  214. package/dist/esm/core/GameConfig.js +80 -0
  215. package/dist/esm/core/GameConfig.js.map +1 -0
  216. package/dist/esm/core/GameLoop.js +91 -0
  217. package/dist/esm/core/GameLoop.js.map +1 -0
  218. package/dist/esm/core/ServiceLocator.js +70 -0
  219. package/dist/esm/core/ServiceLocator.js.map +1 -0
  220. package/dist/esm/core/Validation.js +108 -0
  221. package/dist/esm/core/Validation.js.map +1 -0
  222. package/dist/esm/core/math.js +114 -0
  223. package/dist/esm/core/math.js.map +1 -0
  224. package/dist/esm/devtools/DevTools.js +555 -0
  225. package/dist/esm/devtools/DevTools.js.map +1 -0
  226. package/dist/esm/devtools/DeveloperExperience.js +547 -0
  227. package/dist/esm/devtools/DeveloperExperience.js.map +1 -0
  228. package/dist/esm/docs/DocGenerator.js +353 -0
  229. package/dist/esm/docs/DocGenerator.js.map +1 -0
  230. package/dist/esm/ecs/World.js +276 -0
  231. package/dist/esm/ecs/World.js.map +1 -0
  232. package/dist/esm/editor/AdvancedEditor.js +141 -0
  233. package/dist/esm/editor/AdvancedEditor.js.map +1 -0
  234. package/dist/esm/editor/AssetManager.js +188 -0
  235. package/dist/esm/editor/AssetManager.js.map +1 -0
  236. package/dist/esm/editor/DebugTools.js +179 -0
  237. package/dist/esm/editor/DebugTools.js.map +1 -0
  238. package/dist/esm/editor/NiceGameEditor.js +355 -0
  239. package/dist/esm/editor/NiceGameEditor.js.map +1 -0
  240. package/dist/esm/editor/SceneEditor.js +209 -0
  241. package/dist/esm/editor/SceneEditor.js.map +1 -0
  242. package/dist/esm/engine/NiceGameEngine.js +170 -0
  243. package/dist/esm/engine/NiceGameEngine.js.map +1 -0
  244. package/dist/esm/enterprise/Enterprise.js +246 -0
  245. package/dist/esm/enterprise/Enterprise.js.map +1 -0
  246. package/dist/esm/i18n/I18n.js +622 -0
  247. package/dist/esm/i18n/I18n.js.map +1 -0
  248. package/dist/esm/i18n/useTranslation.js +95 -0
  249. package/dist/esm/i18n/useTranslation.js.map +1 -0
  250. package/dist/esm/index.js +71 -0
  251. package/dist/esm/index.js.map +1 -0
  252. package/dist/esm/input/GamepadNavigation.js +178 -0
  253. package/dist/esm/input/GamepadNavigation.js.map +1 -0
  254. package/dist/esm/input/InputManager.js +399 -0
  255. package/dist/esm/input/InputManager.js.map +1 -0
  256. package/dist/esm/input/useGamepads.js +83 -0
  257. package/dist/esm/input/useGamepads.js.map +1 -0
  258. package/dist/esm/kids/KidMode.js +663 -0
  259. package/dist/esm/kids/KidMode.js.map +1 -0
  260. package/dist/esm/kids/KidTools.js +529 -0
  261. package/dist/esm/kids/KidTools.js.map +1 -0
  262. package/dist/esm/monetization/Monetization.js +186 -0
  263. package/dist/esm/monetization/Monetization.js.map +1 -0
  264. package/dist/esm/multiplayer/LocalMultiplayer.js +284 -0
  265. package/dist/esm/multiplayer/LocalMultiplayer.js.map +1 -0
  266. package/dist/esm/multiplayer/MiniGameTypes.js +60 -0
  267. package/dist/esm/multiplayer/MiniGameTypes.js.map +1 -0
  268. package/dist/esm/network/MultiplayerTransport.js +106 -0
  269. package/dist/esm/network/MultiplayerTransport.js.map +1 -0
  270. package/dist/esm/network/Networking.js +561 -0
  271. package/dist/esm/network/Networking.js.map +1 -0
  272. package/dist/esm/node_modules/@microsoft/signalr/dist/esm/AbortController.js +30 -0
  273. package/dist/esm/node_modules/@microsoft/signalr/dist/esm/AbortController.js.map +1 -0
  274. package/dist/esm/node_modules/@microsoft/signalr/dist/esm/AccessTokenHttpClient.js +49 -0
  275. package/dist/esm/node_modules/@microsoft/signalr/dist/esm/AccessTokenHttpClient.js.map +1 -0
  276. package/dist/esm/node_modules/@microsoft/signalr/dist/esm/DefaultHttpClient.js +44 -0
  277. package/dist/esm/node_modules/@microsoft/signalr/dist/esm/DefaultHttpClient.js.map +1 -0
  278. package/dist/esm/node_modules/@microsoft/signalr/dist/esm/DefaultReconnectPolicy.js +16 -0
  279. package/dist/esm/node_modules/@microsoft/signalr/dist/esm/DefaultReconnectPolicy.js.map +1 -0
  280. package/dist/esm/node_modules/@microsoft/signalr/dist/esm/Errors.js +136 -0
  281. package/dist/esm/node_modules/@microsoft/signalr/dist/esm/Errors.js.map +1 -0
  282. package/dist/esm/node_modules/@microsoft/signalr/dist/esm/FetchHttpClient.js +159 -0
  283. package/dist/esm/node_modules/@microsoft/signalr/dist/esm/FetchHttpClient.js.map +1 -0
  284. package/dist/esm/node_modules/@microsoft/signalr/dist/esm/HandshakeProtocol.js +54 -0
  285. package/dist/esm/node_modules/@microsoft/signalr/dist/esm/HandshakeProtocol.js.map +1 -0
  286. package/dist/esm/node_modules/@microsoft/signalr/dist/esm/HeaderNames.js +9 -0
  287. package/dist/esm/node_modules/@microsoft/signalr/dist/esm/HeaderNames.js.map +1 -0
  288. package/dist/esm/node_modules/@microsoft/signalr/dist/esm/HttpClient.js +49 -0
  289. package/dist/esm/node_modules/@microsoft/signalr/dist/esm/HttpClient.js.map +1 -0
  290. package/dist/esm/node_modules/@microsoft/signalr/dist/esm/HttpConnection.js +573 -0
  291. package/dist/esm/node_modules/@microsoft/signalr/dist/esm/HttpConnection.js.map +1 -0
  292. package/dist/esm/node_modules/@microsoft/signalr/dist/esm/HubConnection.js +954 -0
  293. package/dist/esm/node_modules/@microsoft/signalr/dist/esm/HubConnection.js.map +1 -0
  294. package/dist/esm/node_modules/@microsoft/signalr/dist/esm/HubConnectionBuilder.js +147 -0
  295. package/dist/esm/node_modules/@microsoft/signalr/dist/esm/HubConnectionBuilder.js.map +1 -0
  296. package/dist/esm/node_modules/@microsoft/signalr/dist/esm/IHubProtocol.js +25 -0
  297. package/dist/esm/node_modules/@microsoft/signalr/dist/esm/IHubProtocol.js.map +1 -0
  298. package/dist/esm/node_modules/@microsoft/signalr/dist/esm/ILogger.js +27 -0
  299. package/dist/esm/node_modules/@microsoft/signalr/dist/esm/ILogger.js.map +1 -0
  300. package/dist/esm/node_modules/@microsoft/signalr/dist/esm/ITransport.js +26 -0
  301. package/dist/esm/node_modules/@microsoft/signalr/dist/esm/ITransport.js.map +1 -0
  302. package/dist/esm/node_modules/@microsoft/signalr/dist/esm/JsonHubProtocol.js +122 -0
  303. package/dist/esm/node_modules/@microsoft/signalr/dist/esm/JsonHubProtocol.js.map +1 -0
  304. package/dist/esm/node_modules/@microsoft/signalr/dist/esm/Loggers.js +15 -0
  305. package/dist/esm/node_modules/@microsoft/signalr/dist/esm/Loggers.js.map +1 -0
  306. package/dist/esm/node_modules/@microsoft/signalr/dist/esm/LongPollingTransport.js +186 -0
  307. package/dist/esm/node_modules/@microsoft/signalr/dist/esm/LongPollingTransport.js.map +1 -0
  308. package/dist/esm/node_modules/@microsoft/signalr/dist/esm/MessageBuffer.js +197 -0
  309. package/dist/esm/node_modules/@microsoft/signalr/dist/esm/MessageBuffer.js.map +1 -0
  310. package/dist/esm/node_modules/@microsoft/signalr/dist/esm/ServerSentEventsTransport.js +106 -0
  311. package/dist/esm/node_modules/@microsoft/signalr/dist/esm/ServerSentEventsTransport.js.map +1 -0
  312. package/dist/esm/node_modules/@microsoft/signalr/dist/esm/Subject.js +36 -0
  313. package/dist/esm/node_modules/@microsoft/signalr/dist/esm/Subject.js.map +1 -0
  314. package/dist/esm/node_modules/@microsoft/signalr/dist/esm/TextMessageFormat.js +22 -0
  315. package/dist/esm/node_modules/@microsoft/signalr/dist/esm/TextMessageFormat.js.map +1 -0
  316. package/dist/esm/node_modules/@microsoft/signalr/dist/esm/Utils.js +249 -0
  317. package/dist/esm/node_modules/@microsoft/signalr/dist/esm/Utils.js.map +1 -0
  318. package/dist/esm/node_modules/@microsoft/signalr/dist/esm/WebSocketTransport.js +158 -0
  319. package/dist/esm/node_modules/@microsoft/signalr/dist/esm/WebSocketTransport.js.map +1 -0
  320. package/dist/esm/node_modules/@microsoft/signalr/dist/esm/XhrHttpClient.js +86 -0
  321. package/dist/esm/node_modules/@microsoft/signalr/dist/esm/XhrHttpClient.js.map +1 -0
  322. package/dist/esm/node_modules/@microsoft/signalr/dist/esm/index.js +13 -0
  323. package/dist/esm/node_modules/@microsoft/signalr/dist/esm/index.js.map +1 -0
  324. package/dist/esm/node_modules/@microsoft/signalr/dist/esm/pkg-version.js +4 -0
  325. package/dist/esm/node_modules/@microsoft/signalr/dist/esm/pkg-version.js.map +1 -0
  326. package/dist/esm/pathfinding/Pathfinding.js +250 -0
  327. package/dist/esm/pathfinding/Pathfinding.js.map +1 -0
  328. package/dist/esm/performance/BenchmarkSuite.js +315 -0
  329. package/dist/esm/performance/BenchmarkSuite.js.map +1 -0
  330. package/dist/esm/performance/Performance.js +171 -0
  331. package/dist/esm/performance/Performance.js.map +1 -0
  332. package/dist/esm/performance/PerformanceAdvanced.js +620 -0
  333. package/dist/esm/performance/PerformanceAdvanced.js.map +1 -0
  334. package/dist/esm/physics/PhysicsAdvanced.js +417 -0
  335. package/dist/esm/physics/PhysicsAdvanced.js.map +1 -0
  336. package/dist/esm/physics/PhysicsEngine2D.js +442 -0
  337. package/dist/esm/physics/PhysicsEngine2D.js.map +1 -0
  338. package/dist/esm/plugins/PluginSDK.js +484 -0
  339. package/dist/esm/plugins/PluginSDK.js.map +1 -0
  340. package/dist/esm/plugins/PluginTestKit.js +359 -0
  341. package/dist/esm/plugins/PluginTestKit.js.map +1 -0
  342. package/dist/esm/procedural/Procedural.js +282 -0
  343. package/dist/esm/procedural/Procedural.js.map +1 -0
  344. package/dist/esm/procedural/WorldBuilding.js +225 -0
  345. package/dist/esm/procedural/WorldBuilding.js.map +1 -0
  346. package/dist/esm/release/MobileExport.js +142 -0
  347. package/dist/esm/release/MobileExport.js.map +1 -0
  348. package/dist/esm/release/Release.js +141 -0
  349. package/dist/esm/release/Release.js.map +1 -0
  350. package/dist/esm/rendering/Camera2D.js +127 -0
  351. package/dist/esm/rendering/Camera2D.js.map +1 -0
  352. package/dist/esm/rendering/Renderer2D.js +334 -0
  353. package/dist/esm/rendering/Renderer2D.js.map +1 -0
  354. package/dist/esm/runtime3d/Runtime3D.js +371 -0
  355. package/dist/esm/runtime3d/Runtime3D.js.map +1 -0
  356. package/dist/esm/runtime3d/SceneEditor3D.js +299 -0
  357. package/dist/esm/runtime3d/SceneEditor3D.js.map +1 -0
  358. package/dist/esm/scene/SceneManager.js +184 -0
  359. package/dist/esm/scene/SceneManager.js.map +1 -0
  360. package/dist/esm/scripting/NodeGraph.js +568 -0
  361. package/dist/esm/scripting/NodeGraph.js.map +1 -0
  362. package/dist/esm/social/Social.js +85 -0
  363. package/dist/esm/social/Social.js.map +1 -0
  364. package/dist/esm/templates/ActionTemplates.js +217 -0
  365. package/dist/esm/templates/ActionTemplates.js.map +1 -0
  366. package/dist/esm/templates/PartyTemplates.js +204 -0
  367. package/dist/esm/templates/PartyTemplates.js.map +1 -0
  368. package/dist/esm/templates/PuzzleTemplates.js +267 -0
  369. package/dist/esm/templates/PuzzleTemplates.js.map +1 -0
  370. package/dist/esm/templates/RPGTemplates.js +196 -0
  371. package/dist/esm/templates/RPGTemplates.js.map +1 -0
  372. package/dist/esm/templates/SportsTemplates.js +257 -0
  373. package/dist/esm/templates/SportsTemplates.js.map +1 -0
  374. package/dist/esm/templates/StrategyTemplates.js +157 -0
  375. package/dist/esm/templates/StrategyTemplates.js.map +1 -0
  376. package/dist/esm/templates/WaveDefense.js +467 -0
  377. package/dist/esm/templates/WaveDefense.js.map +1 -0
  378. package/dist/esm/tilemap/Tilemap.js +205 -0
  379. package/dist/esm/tilemap/Tilemap.js.map +1 -0
  380. package/dist/esm/tutorials/TutorialBranching.js +388 -0
  381. package/dist/esm/tutorials/TutorialBranching.js.map +1 -0
  382. package/dist/esm/tutorials/TutorialEngine.js +897 -0
  383. package/dist/esm/tutorials/TutorialEngine.js.map +1 -0
  384. package/dist/esm/tutorials/TutorialOverlay.js +600 -0
  385. package/dist/esm/tutorials/TutorialOverlay.js.map +1 -0
  386. package/dist/esm/tutorials/content/Tutorials_T05_T08.js +810 -0
  387. package/dist/esm/tutorials/content/Tutorials_T05_T08.js.map +1 -0
  388. package/dist/esm/tutorials/content/Tutorials_T09_T11.js +736 -0
  389. package/dist/esm/tutorials/content/Tutorials_T09_T11.js.map +1 -0
  390. package/dist/esm/tutorials/content/Tutorials_T12_T15.js +780 -0
  391. package/dist/esm/tutorials/content/Tutorials_T12_T15.js.map +1 -0
  392. package/dist/esm/ui/GameUI.js +310 -0
  393. package/dist/esm/ui/GameUI.js.map +1 -0
  394. package/dist/esm/xr/ARVR.js +182 -0
  395. package/dist/esm/xr/ARVR.js.map +1 -0
  396. package/dist/types/__tests__/setup.d.ts +1 -0
  397. package/dist/types/accessibility/Accessibility.d.ts +82 -0
  398. package/dist/types/accessibility/index.d.ts +1 -0
  399. package/dist/types/ai/AI.d.ts +140 -0
  400. package/dist/types/ai/index.d.ts +1 -0
  401. package/dist/types/animation/Animation.d.ts +90 -0
  402. package/dist/types/animation/index.d.ts +1 -0
  403. package/dist/types/audio/AudioAdvanced.d.ts +190 -0
  404. package/dist/types/audio/AudioManager.d.ts +55 -0
  405. package/dist/types/audio/index.d.ts +1 -0
  406. package/dist/types/community/Community.d.ts +112 -0
  407. package/dist/types/community/index.d.ts +1 -0
  408. package/dist/types/core/EventBus.d.ts +16 -0
  409. package/dist/types/core/GameClock.d.ts +29 -0
  410. package/dist/types/core/GameConfig.d.ts +20 -0
  411. package/dist/types/core/GameLoop.d.ts +32 -0
  412. package/dist/types/core/ServiceLocator.d.ts +36 -0
  413. package/dist/types/core/TypeSafety.d.ts +190 -0
  414. package/dist/types/core/Validation.d.ts +24 -0
  415. package/dist/types/core/index.d.ts +7 -0
  416. package/dist/types/core/math.d.ts +32 -0
  417. package/dist/types/core/types.d.ts +130 -0
  418. package/dist/types/devtools/AssetStore.d.ts +133 -0
  419. package/dist/types/devtools/DevTools.d.ts +217 -0
  420. package/dist/types/devtools/DeveloperExperience.d.ts +123 -0
  421. package/dist/types/devtools/index.d.ts +3 -0
  422. package/dist/types/docs/APIPlayground.d.ts +26 -0
  423. package/dist/types/docs/Cookbook.d.ts +18 -0
  424. package/dist/types/docs/DocGenerator.d.ts +83 -0
  425. package/dist/types/docs/Guides.d.ts +18 -0
  426. package/dist/types/docs/index.d.ts +4 -0
  427. package/dist/types/ecs/World.d.ts +219 -0
  428. package/dist/types/ecs/index.d.ts +1 -0
  429. package/dist/types/editor/AdvancedEditor.d.ts +267 -0
  430. package/dist/types/editor/AssetManager.d.ts +45 -0
  431. package/dist/types/editor/DebugTools.d.ts +74 -0
  432. package/dist/types/editor/NiceGameEditor.d.ts +115 -0
  433. package/dist/types/editor/SceneEditor.d.ts +37 -0
  434. package/dist/types/editor/index.d.ts +8 -0
  435. package/dist/types/engine/NiceGameEngine.d.ts +53 -0
  436. package/dist/types/engine/index.d.ts +2 -0
  437. package/dist/types/enterprise/Enterprise.d.ts +217 -0
  438. package/dist/types/enterprise/index.d.ts +1 -0
  439. package/dist/types/epic/index.d.ts +10 -0
  440. package/dist/types/i18n/I18n.d.ts +107 -0
  441. package/dist/types/i18n/index.d.ts +2 -0
  442. package/dist/types/i18n/useTranslation.d.ts +74 -0
  443. package/dist/types/index.d.ts +127 -0
  444. package/dist/types/input/GamepadNavigation.d.ts +34 -0
  445. package/dist/types/input/InputManager.d.ts +77 -0
  446. package/dist/types/input/index.d.ts +3 -0
  447. package/dist/types/input/useGamepads.d.ts +39 -0
  448. package/dist/types/kids/KidMode.d.ts +207 -0
  449. package/dist/types/kids/KidTools.d.ts +135 -0
  450. package/dist/types/kids/index.d.ts +2 -0
  451. package/dist/types/legendary/index.d.ts +57 -0
  452. package/dist/types/monetization/Monetization.d.ts +224 -0
  453. package/dist/types/monetization/index.d.ts +1 -0
  454. package/dist/types/multiplayer/LocalMultiplayer.d.ts +61 -0
  455. package/dist/types/multiplayer/MiniGameTypes.d.ts +70 -0
  456. package/dist/types/multiplayer/index.d.ts +3 -0
  457. package/dist/types/network/MultiplayerTransport.d.ts +71 -0
  458. package/dist/types/network/Networking.d.ts +199 -0
  459. package/dist/types/network/index.d.ts +2 -0
  460. package/dist/types/pathfinding/Pathfinding.d.ts +42 -0
  461. package/dist/types/pathfinding/index.d.ts +1 -0
  462. package/dist/types/performance/AssetCompression.d.ts +137 -0
  463. package/dist/types/performance/BenchmarkSuite.d.ts +99 -0
  464. package/dist/types/performance/Performance.d.ts +87 -0
  465. package/dist/types/performance/PerformanceAdvanced.d.ts +220 -0
  466. package/dist/types/performance/WASMModules.d.ts +65 -0
  467. package/dist/types/performance/WebGPUCompute.d.ts +164 -0
  468. package/dist/types/performance/index.d.ts +1 -0
  469. package/dist/types/physics/PhysicsAdvanced.d.ts +148 -0
  470. package/dist/types/physics/PhysicsEngine2D.d.ts +66 -0
  471. package/dist/types/physics/index.d.ts +1 -0
  472. package/dist/types/plugins/PluginSDK.d.ts +134 -0
  473. package/dist/types/plugins/PluginTestKit.d.ts +107 -0
  474. package/dist/types/plugins/index.d.ts +2 -0
  475. package/dist/types/procedural/Procedural.d.ts +90 -0
  476. package/dist/types/procedural/WorldBuilding.d.ts +200 -0
  477. package/dist/types/procedural/index.d.ts +2 -0
  478. package/dist/types/release/MobileExport.d.ts +218 -0
  479. package/dist/types/release/Release.d.ts +81 -0
  480. package/dist/types/release/index.d.ts +1 -0
  481. package/dist/types/rendering/Camera2D.d.ts +39 -0
  482. package/dist/types/rendering/Renderer2D.d.ts +41 -0
  483. package/dist/types/rendering/index.d.ts +2 -0
  484. package/dist/types/runtime3d/Runtime3D.d.ts +259 -0
  485. package/dist/types/runtime3d/SceneEditor3D.d.ts +186 -0
  486. package/dist/types/runtime3d/index.d.ts +2 -0
  487. package/dist/types/scene/SceneManager.d.ts +59 -0
  488. package/dist/types/scene/index.d.ts +2 -0
  489. package/dist/types/scripting/NodeGraph.d.ts +84 -0
  490. package/dist/types/scripting/index.d.ts +2 -0
  491. package/dist/types/social/Social.d.ts +245 -0
  492. package/dist/types/social/index.d.ts +1 -0
  493. package/dist/types/templates/ActionTemplates.d.ts +173 -0
  494. package/dist/types/templates/PartyTemplates.d.ts +195 -0
  495. package/dist/types/templates/PuzzleTemplates.d.ts +127 -0
  496. package/dist/types/templates/RPGTemplates.d.ts +210 -0
  497. package/dist/types/templates/SportsTemplates.d.ts +162 -0
  498. package/dist/types/templates/StrategyTemplates.d.ts +264 -0
  499. package/dist/types/templates/WaveDefense.d.ts +92 -0
  500. package/dist/types/templates/index.d.ts +2 -0
  501. package/dist/types/tilemap/Tilemap.d.ts +66 -0
  502. package/dist/types/tilemap/index.d.ts +1 -0
  503. package/dist/types/tutorials/TutorialBranching.d.ts +132 -0
  504. package/dist/types/tutorials/TutorialEditor.d.ts +43 -0
  505. package/dist/types/tutorials/TutorialEngine.d.ts +237 -0
  506. package/dist/types/tutorials/TutorialOverlay.d.ts +79 -0
  507. package/dist/types/tutorials/VoiceNarration.d.ts +75 -0
  508. package/dist/types/tutorials/content/Tutorials_T04.d.ts +3 -0
  509. package/dist/types/tutorials/content/Tutorials_T05_T08.d.ts +6 -0
  510. package/dist/types/tutorials/content/Tutorials_T09_T11.d.ts +5 -0
  511. package/dist/types/tutorials/content/Tutorials_T12_T15.d.ts +6 -0
  512. package/dist/types/tutorials/content/UITutorials.d.ts +14 -0
  513. package/dist/types/tutorials/content/index.d.ts +5 -0
  514. package/dist/types/tutorials/index.d.ts +6 -0
  515. package/dist/types/ui/GameUI.d.ts +97 -0
  516. package/dist/types/ui/index.d.ts +2 -0
  517. package/dist/types/xr/ARVR.d.ts +252 -0
  518. package/dist/types/xr/index.d.ts +1 -0
  519. package/package.json +88 -0
@@ -0,0 +1,368 @@
1
+ 'use strict';
2
+
3
+ var EventBus = require('../core/EventBus.js');
4
+
5
+ /* ────────────────────────────────────────────────────────────────
6
+ Plugin Test Kit — Testing framework for 3rd party plugins
7
+
8
+ Sprint L9: Automated plugin testing with sandboxed context,
9
+ lifecycle assertions, extension point verification, and
10
+ snapshot testing for plugin storage.
11
+ ──────────────────────────────────────────────────────────────── */
12
+ /* ══════════════════════════════════════════════════════════════
13
+ In-Memory Test Storage
14
+ ══════════════════════════════════════════════════════════════ */
15
+ class TestPluginStorage {
16
+ constructor() {
17
+ this.data = new Map();
18
+ }
19
+ get(key) {
20
+ return this.data.get(key);
21
+ }
22
+ set(key, value) {
23
+ this.data.set(key, value);
24
+ }
25
+ remove(key) {
26
+ this.data.delete(key);
27
+ }
28
+ clear() {
29
+ this.data.clear();
30
+ }
31
+ keys() {
32
+ return Array.from(this.data.keys());
33
+ }
34
+ /** Snapshot current storage state for assertions. */
35
+ snapshot() {
36
+ const result = {};
37
+ for (const [k, v] of this.data) {
38
+ result[k] = v;
39
+ }
40
+ return result;
41
+ }
42
+ get size() {
43
+ return this.data.size;
44
+ }
45
+ }
46
+ /* ══════════════════════════════════════════════════════════════
47
+ Test Plugin Context — sandboxed context for testing
48
+ ══════════════════════════════════════════════════════════════ */
49
+ class TestPluginContext {
50
+ constructor(manifest) {
51
+ this.logs = [];
52
+ this.warnings = [];
53
+ this.registeredExtensions = new Map();
54
+ this.log = (message) => {
55
+ this.logs.push(message);
56
+ };
57
+ this.warn = (message) => {
58
+ this.warnings.push(message);
59
+ };
60
+ this.registerExtension = (point, entry) => {
61
+ let list = this.registeredExtensions.get(point);
62
+ if (!list) {
63
+ list = [];
64
+ this.registeredExtensions.set(point, list);
65
+ }
66
+ list.push(entry);
67
+ };
68
+ this.unregisterExtension = (point, entry) => {
69
+ const list = this.registeredExtensions.get(point);
70
+ if (list) {
71
+ const idx = list.indexOf(entry);
72
+ if (idx >= 0)
73
+ list.splice(idx, 1);
74
+ }
75
+ };
76
+ this.manifest = manifest;
77
+ this.events = new EventBus.EventBus();
78
+ this.storage = new TestPluginStorage();
79
+ }
80
+ /* ── Assertion helpers ─────────────────────────────────────── */
81
+ /** Get all extensions registered for a given point. */
82
+ getExtensions(point) {
83
+ var _a;
84
+ return ((_a = this.registeredExtensions.get(point)) !== null && _a !== void 0 ? _a : []);
85
+ }
86
+ /** Count extensions for a given point. */
87
+ extensionCount(point) {
88
+ var _a;
89
+ return ((_a = this.registeredExtensions.get(point)) !== null && _a !== void 0 ? _a : []).length;
90
+ }
91
+ /** Check if any extension was registered for a given point. */
92
+ hasExtension(point) {
93
+ return this.extensionCount(point) > 0;
94
+ }
95
+ /** Get storage snapshot for assertion/comparison. */
96
+ storageSnapshot() {
97
+ return this.storage.snapshot();
98
+ }
99
+ /** Reset context to fresh state (between tests). */
100
+ reset() {
101
+ this.logs.length = 0;
102
+ this.warnings.length = 0;
103
+ this.registeredExtensions.clear();
104
+ this.storage.clear();
105
+ }
106
+ }
107
+ /* ══════════════════════════════════════════════════════════════
108
+ Assertion Utilities
109
+ ══════════════════════════════════════════════════════════════ */
110
+ class PluginAssertionError extends Error {
111
+ constructor(message) {
112
+ super(message);
113
+ this.name = 'PluginAssertionError';
114
+ }
115
+ }
116
+ const pluginAssert = {
117
+ /** Assert value is truthy. */
118
+ ok(value, message) {
119
+ if (!value) {
120
+ throw new PluginAssertionError(message !== null && message !== void 0 ? message : `Expected truthy, got ${String(value)}`);
121
+ }
122
+ },
123
+ /** Assert strict equality. */
124
+ equal(actual, expected, message) {
125
+ if (actual !== expected) {
126
+ throw new PluginAssertionError(message !== null && message !== void 0 ? message : `Expected ${String(expected)}, got ${String(actual)}`);
127
+ }
128
+ },
129
+ /** Assert not equal. */
130
+ notEqual(actual, notExpected, message) {
131
+ if (actual === notExpected) {
132
+ throw new PluginAssertionError(message !== null && message !== void 0 ? message : `Expected not ${String(notExpected)}`);
133
+ }
134
+ },
135
+ /** Assert deep equality (JSON comparison). */
136
+ deepEqual(actual, expected, message) {
137
+ const a = JSON.stringify(actual);
138
+ const b = JSON.stringify(expected);
139
+ if (a !== b) {
140
+ throw new PluginAssertionError(message !== null && message !== void 0 ? message : `Deep equality failed.\nActual: ${a}\nExpected: ${b}`);
141
+ }
142
+ },
143
+ /** Assert that a function throws. */
144
+ throws(fn, message) {
145
+ let threw = false;
146
+ try {
147
+ fn();
148
+ }
149
+ catch (_a) {
150
+ threw = true;
151
+ }
152
+ if (!threw) {
153
+ throw new PluginAssertionError(message !== null && message !== void 0 ? message : 'Expected function to throw');
154
+ }
155
+ },
156
+ /** Assert async function throws. */
157
+ async throwsAsync(fn, message) {
158
+ let threw = false;
159
+ try {
160
+ await fn();
161
+ }
162
+ catch (_a) {
163
+ threw = true;
164
+ }
165
+ if (!threw) {
166
+ throw new PluginAssertionError(message !== null && message !== void 0 ? message : 'Expected async function to throw');
167
+ }
168
+ },
169
+ /** Assert array contains element. */
170
+ contains(arr, item, message) {
171
+ if (arr.indexOf(item) < 0) {
172
+ throw new PluginAssertionError(message !== null && message !== void 0 ? message : `Array does not contain ${String(item)}`);
173
+ }
174
+ },
175
+ /** Assert string includes substring. */
176
+ includes(str, substr, message) {
177
+ if (!str.includes(substr)) {
178
+ throw new PluginAssertionError(message !== null && message !== void 0 ? message : `"${str}" does not include "${substr}"`);
179
+ }
180
+ },
181
+ /** Assert extension was registered. */
182
+ hasExtension(ctx, point, message) {
183
+ if (!ctx.hasExtension(point)) {
184
+ throw new PluginAssertionError(message !== null && message !== void 0 ? message : `No extension registered for "${point}"`);
185
+ }
186
+ },
187
+ /** Assert extension count. */
188
+ extensionCount(ctx, point, expected, message) {
189
+ const actual = ctx.extensionCount(point);
190
+ if (actual !== expected) {
191
+ throw new PluginAssertionError(message !== null && message !== void 0 ? message : `Expected ${expected} extensions for "${point}", got ${actual}`);
192
+ }
193
+ },
194
+ /** Assert log message was emitted. */
195
+ logged(ctx, substr, message) {
196
+ const found = ctx.logs.some(l => l.includes(substr));
197
+ if (!found) {
198
+ throw new PluginAssertionError(message !== null && message !== void 0 ? message : `No log message containing "${substr}". Logs: [${ctx.logs.join(', ')}]`);
199
+ }
200
+ },
201
+ /** Assert warning was emitted. */
202
+ warned(ctx, substr, message) {
203
+ const found = ctx.warnings.some(w => w.includes(substr));
204
+ if (!found) {
205
+ throw new PluginAssertionError(message !== null && message !== void 0 ? message : `No warning containing "${substr}". Warnings: [${ctx.warnings.join(', ')}]`);
206
+ }
207
+ },
208
+ };
209
+ /* ══════════════════════════════════════════════════════════════
210
+ Plugin Test Runner
211
+ ══════════════════════════════════════════════════════════════ */
212
+ class PluginTestRunner {
213
+ constructor() {
214
+ this.tests = [];
215
+ this._beforeEach = null;
216
+ this._afterEach = null;
217
+ }
218
+ /** Add a test case. */
219
+ test(name, fn) {
220
+ this.tests.push({ name, fn });
221
+ return this;
222
+ }
223
+ /** Add a skipped test case. */
224
+ skip(name, fn) {
225
+ this.tests.push({ name, fn, skip: true });
226
+ return this;
227
+ }
228
+ /** Run something before each test. */
229
+ beforeEach(fn) {
230
+ this._beforeEach = fn;
231
+ return this;
232
+ }
233
+ /** Run something after each test. */
234
+ afterEach(fn) {
235
+ this._afterEach = fn;
236
+ return this;
237
+ }
238
+ /** Run all tests against a plugin. */
239
+ async run(plugin, suiteName) {
240
+ const manifest = plugin.manifest;
241
+ const ctx = new TestPluginContext(manifest);
242
+ const results = [];
243
+ let passed = 0;
244
+ let failed = 0;
245
+ let skipped = 0;
246
+ const suiteStart = performance.now();
247
+ for (const tc of this.tests) {
248
+ if (tc.skip) {
249
+ results.push({ name: tc.name, status: 'skipped', duration: 0 });
250
+ skipped++;
251
+ continue;
252
+ }
253
+ ctx.reset();
254
+ const start = performance.now();
255
+ try {
256
+ if (this._beforeEach)
257
+ await this._beforeEach(ctx);
258
+ await tc.fn(ctx);
259
+ if (this._afterEach)
260
+ await this._afterEach(ctx);
261
+ results.push({
262
+ name: tc.name,
263
+ status: 'passed',
264
+ duration: performance.now() - start,
265
+ });
266
+ passed++;
267
+ }
268
+ catch (err) {
269
+ results.push({
270
+ name: tc.name,
271
+ status: 'failed',
272
+ duration: performance.now() - start,
273
+ error: err instanceof Error ? err.message : String(err),
274
+ });
275
+ failed++;
276
+ }
277
+ }
278
+ return {
279
+ pluginId: manifest.id,
280
+ suiteName: suiteName !== null && suiteName !== void 0 ? suiteName : `${manifest.name} tests`,
281
+ results,
282
+ passed,
283
+ failed,
284
+ skipped,
285
+ totalDuration: performance.now() - suiteStart,
286
+ };
287
+ }
288
+ }
289
+ /* ══════════════════════════════════════════════════════════════
290
+ Convenience: Quick Plugin Test
291
+ ══════════════════════════════════════════════════════════════ */
292
+ /** Create a default manifest for testing. */
293
+ function createTestManifest(overrides) {
294
+ return {
295
+ id: 'com.test.plugin',
296
+ name: 'Test Plugin',
297
+ version: '1.0.0',
298
+ description: 'A plugin for testing',
299
+ author: 'Test',
300
+ types: ['component'],
301
+ engineVersion: '>=0.1.0',
302
+ ...overrides,
303
+ };
304
+ }
305
+ /** Quick lifecycle test — activate, verify, deactivate. */
306
+ async function testPluginLifecycle(plugin) {
307
+ const runner = new PluginTestRunner();
308
+ runner
309
+ .test('should activate without errors', async (ctx) => {
310
+ await plugin.activate(ctx);
311
+ })
312
+ .test('should register at least one extension', async (ctx) => {
313
+ await plugin.activate(ctx);
314
+ let total = 0;
315
+ for (const [, entries] of ctx.registeredExtensions) {
316
+ total += entries.length;
317
+ }
318
+ pluginAssert.ok(total > 0, 'Plugin should register at least one extension');
319
+ })
320
+ .test('should deactivate without errors', async (ctx) => {
321
+ await plugin.activate(ctx);
322
+ if (plugin.deactivate) {
323
+ await plugin.deactivate(ctx);
324
+ }
325
+ })
326
+ .test('should survive activate → deactivate → activate cycle', async (ctx) => {
327
+ await plugin.activate(ctx);
328
+ if (plugin.deactivate)
329
+ await plugin.deactivate(ctx);
330
+ ctx.reset();
331
+ await plugin.activate(ctx);
332
+ })
333
+ .test('should produce log output', async (ctx) => {
334
+ await plugin.activate(ctx);
335
+ pluginAssert.ok(ctx.logs.length > 0, 'Plugin should log something on activation');
336
+ });
337
+ return runner.run(plugin, `${plugin.manifest.name} lifecycle`);
338
+ }
339
+ /** Format test results as a readable string. */
340
+ function formatTestResults(suite) {
341
+ const lines = [
342
+ `━━━ ${suite.suiteName} (${suite.pluginId}) ━━━`,
343
+ '',
344
+ ];
345
+ for (const r of suite.results) {
346
+ const icon = r.status === 'passed' ? '✓' : r.status === 'failed' ? '✗' : '○';
347
+ const ms = r.duration.toFixed(1);
348
+ lines.push(` ${icon} ${r.name} (${ms}ms)`);
349
+ if (r.error) {
350
+ lines.push(` → ${r.error}`);
351
+ }
352
+ }
353
+ lines.push('');
354
+ lines.push(` ${suite.passed} passed, ${suite.failed} failed, ${suite.skipped} skipped`);
355
+ lines.push(` Total: ${suite.totalDuration.toFixed(1)}ms`);
356
+ lines.push('');
357
+ return lines.join('\n');
358
+ }
359
+
360
+ exports.PluginAssertionError = PluginAssertionError;
361
+ exports.PluginTestRunner = PluginTestRunner;
362
+ exports.TestPluginContext = TestPluginContext;
363
+ exports.TestPluginStorage = TestPluginStorage;
364
+ exports.createTestManifest = createTestManifest;
365
+ exports.formatTestResults = formatTestResults;
366
+ exports.pluginAssert = pluginAssert;
367
+ exports.testPluginLifecycle = testPluginLifecycle;
368
+ //# sourceMappingURL=PluginTestKit.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PluginTestKit.js","sources":["../../../src/plugins/PluginTestKit.ts"],"sourcesContent":[null],"names":["EventBus"],"mappings":";;;;AAAA;;;;;;AAMmE;AAwCnE;;AAEoE;MAEvD,iBAAiB,CAAA;AAA9B,IAAA,WAAA,GAAA;AACU,QAAA,IAAA,CAAA,IAAI,GAAG,IAAI,GAAG,EAAmB;IAkC3C;AAhCE,IAAA,GAAG,CAAI,GAAW,EAAA;QAChB,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAkB;IAC5C;IAEA,GAAG,CAAI,GAAW,EAAE,KAAQ,EAAA;QAC1B,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC;IAC3B;AAEA,IAAA,MAAM,CAAC,GAAW,EAAA;AAChB,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC;IACvB;IAEA,KAAK,GAAA;AACH,QAAA,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE;IACnB;IAEA,IAAI,GAAA;QACF,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;IACrC;;IAGA,QAAQ,GAAA;QACN,MAAM,MAAM,GAA4B,EAAE;QAC1C,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,EAAE;AAC9B,YAAA,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC;QACf;AACA,QAAA,OAAO,MAAM;IACf;AAEA,IAAA,IAAI,IAAI,GAAA;AACN,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI;IACvB;AACD;AAED;;AAEoE;MAEvD,iBAAiB,CAAA;AAQ5B,IAAA,WAAA,CAAY,QAAwB,EAAA;QAJ3B,IAAA,CAAA,IAAI,GAAa,EAAE;QACnB,IAAA,CAAA,QAAQ,GAAa,EAAE;AACvB,QAAA,IAAA,CAAA,oBAAoB,GAAmC,IAAI,GAAG,EAAE;AAQzE,QAAA,IAAA,CAAA,GAAG,GAAG,CAAC,OAAe,KAAU;AAC9B,YAAA,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC;AACzB,QAAA,CAAC;AAED,QAAA,IAAA,CAAA,IAAI,GAAG,CAAC,OAAe,KAAU;AAC/B,YAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC;AAC7B,QAAA,CAAC;AAED,QAAA,IAAA,CAAA,iBAAiB,GAAG,CAAI,KAAqB,EAAE,KAAQ,KAAU;YAC/D,IAAI,IAAI,GAAG,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,KAAK,CAAC;YAC/C,IAAI,CAAC,IAAI,EAAE;gBACT,IAAI,GAAG,EAAE;gBACT,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC;YAC5C;AACA,YAAA,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;AAClB,QAAA,CAAC;AAED,QAAA,IAAA,CAAA,mBAAmB,GAAG,CAAI,KAAqB,EAAE,KAAQ,KAAU;YACjE,MAAM,IAAI,GAAG,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,KAAK,CAAC;YACjD,IAAI,IAAI,EAAE;gBACR,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC;gBAC/B,IAAI,GAAG,IAAI,CAAC;AAAE,oBAAA,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC;YACnC;AACF,QAAA,CAAC;AA5BC,QAAA,IAAI,CAAC,QAAQ,GAAG,QAAQ;AACxB,QAAA,IAAI,CAAC,MAAM,GAAG,IAAIA,iBAAQ,EAAE;AAC5B,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI,iBAAiB,EAAE;IACxC;;;AA8BA,IAAA,aAAa,CAAI,KAAqB,EAAA;;AACpC,QAAA,QAAQ,CAAA,EAAA,GAAA,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,KAAK,CAAC,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,EAAE;IACpD;;AAGA,IAAA,cAAc,CAAC,KAAqB,EAAA;;AAClC,QAAA,OAAO,CAAC,CAAA,EAAA,GAAA,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,KAAK,CAAC,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,EAAE,EAAE,MAAM;IAC5D;;AAGA,IAAA,YAAY,CAAC,KAAqB,EAAA;QAChC,OAAO,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,GAAG,CAAC;IACvC;;IAGA,eAAe,GAAA;AACb,QAAA,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE;IAChC;;IAGA,KAAK,GAAA;AACH,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC;AACpB,QAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC;AACxB,QAAA,IAAI,CAAC,oBAAoB,CAAC,KAAK,EAAE;AACjC,QAAA,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE;IACtB;AACD;AAED;;AAEoE;AAE9D,MAAO,oBAAqB,SAAQ,KAAK,CAAA;AAC7C,IAAA,WAAA,CAAY,OAAe,EAAA;QACzB,KAAK,CAAC,OAAO,CAAC;AACd,QAAA,IAAI,CAAC,IAAI,GAAG,sBAAsB;IACpC;AACD;AAEM,MAAM,YAAY,GAAG;;IAE1B,EAAE,CAAC,KAAc,EAAE,OAAgB,EAAA;QACjC,IAAI,CAAC,KAAK,EAAE;AACV,YAAA,MAAM,IAAI,oBAAoB,CAAC,OAAO,KAAA,IAAA,IAAP,OAAO,KAAA,MAAA,GAAP,OAAO,GAAI,CAAA,qBAAA,EAAwB,MAAM,CAAC,KAAK,CAAC,CAAA,CAAE,CAAC;QACpF;IACF,CAAC;;AAGD,IAAA,KAAK,CAAI,MAAS,EAAE,QAAW,EAAE,OAAgB,EAAA;AAC/C,QAAA,IAAI,MAAM,KAAK,QAAQ,EAAE;YACvB,MAAM,IAAI,oBAAoB,CAC5B,OAAO,aAAP,OAAO,KAAA,MAAA,GAAP,OAAO,GAAI,CAAA,SAAA,EAAY,MAAM,CAAC,QAAQ,CAAC,CAAA,MAAA,EAAS,MAAM,CAAC,MAAM,CAAC,CAAA,CAAE,CACjE;QACH;IACF,CAAC;;AAGD,IAAA,QAAQ,CAAI,MAAS,EAAE,WAAc,EAAE,OAAgB,EAAA;AACrD,QAAA,IAAI,MAAM,KAAK,WAAW,EAAE;AAC1B,YAAA,MAAM,IAAI,oBAAoB,CAC5B,OAAO,KAAA,IAAA,IAAP,OAAO,KAAA,MAAA,GAAP,OAAO,GAAI,CAAA,aAAA,EAAgB,MAAM,CAAC,WAAW,CAAC,CAAA,CAAE,CACjD;QACH;IACF,CAAC;;AAGD,IAAA,SAAS,CAAC,MAAe,EAAE,QAAiB,EAAE,OAAgB,EAAA;QAC5D,MAAM,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC;QAChC,MAAM,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC;AAClC,QAAA,IAAI,CAAC,KAAK,CAAC,EAAE;AACX,YAAA,MAAM,IAAI,oBAAoB,CAC5B,OAAO,aAAP,OAAO,KAAA,MAAA,GAAP,OAAO,GAAI,kCAAkC,CAAC,CAAA,YAAA,EAAe,CAAC,CAAA,CAAE,CACjE;QACH;IACF,CAAC;;IAGD,MAAM,CAAC,EAAiB,EAAE,OAAgB,EAAA;QACxC,IAAI,KAAK,GAAG,KAAK;AACjB,QAAA,IAAI;AACF,YAAA,EAAE,EAAE;QACN;AAAE,QAAA,OAAA,EAAA,EAAM;YACN,KAAK,GAAG,IAAI;QACd;QACA,IAAI,CAAC,KAAK,EAAE;YACV,MAAM,IAAI,oBAAoB,CAAC,OAAO,KAAA,IAAA,IAAP,OAAO,KAAA,MAAA,GAAP,OAAO,GAAI,4BAA4B,CAAC;QACzE;IACF,CAAC;;AAGD,IAAA,MAAM,WAAW,CAAC,EAA0B,EAAE,OAAgB,EAAA;QAC5D,IAAI,KAAK,GAAG,KAAK;AACjB,QAAA,IAAI;YACF,MAAM,EAAE,EAAE;QACZ;AAAE,QAAA,OAAA,EAAA,EAAM;YACN,KAAK,GAAG,IAAI;QACd;QACA,IAAI,CAAC,KAAK,EAAE;YACV,MAAM,IAAI,oBAAoB,CAAC,OAAO,KAAA,IAAA,IAAP,OAAO,KAAA,MAAA,GAAP,OAAO,GAAI,kCAAkC,CAAC;QAC/E;IACF,CAAC;;AAGD,IAAA,QAAQ,CAAI,GAAiB,EAAE,IAAO,EAAE,OAAgB,EAAA;QACtD,IAAI,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;AACzB,YAAA,MAAM,IAAI,oBAAoB,CAC5B,OAAO,KAAA,IAAA,IAAP,OAAO,KAAA,MAAA,GAAP,OAAO,GAAI,CAAA,uBAAA,EAA0B,MAAM,CAAC,IAAI,CAAC,CAAA,CAAE,CACpD;QACH;IACF,CAAC;;AAGD,IAAA,QAAQ,CAAC,GAAW,EAAE,MAAc,EAAE,OAAgB,EAAA;QACpD,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;AACzB,YAAA,MAAM,IAAI,oBAAoB,CAC5B,OAAO,aAAP,OAAO,KAAA,MAAA,GAAP,OAAO,GAAI,IAAI,GAAG,CAAA,oBAAA,EAAuB,MAAM,CAAA,CAAA,CAAG,CACnD;QACH;IACF,CAAC;;AAGD,IAAA,YAAY,CAAC,GAAsB,EAAE,KAAqB,EAAE,OAAgB,EAAA;QAC1E,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE;AAC5B,YAAA,MAAM,IAAI,oBAAoB,CAC5B,OAAO,KAAA,IAAA,IAAP,OAAO,KAAA,MAAA,GAAP,OAAO,GAAI,CAAA,6BAAA,EAAgC,KAAK,CAAA,CAAA,CAAG,CACpD;QACH;IACF,CAAC;;AAGD,IAAA,cAAc,CAAC,GAAsB,EAAE,KAAqB,EAAE,QAAgB,EAAE,OAAgB,EAAA;QAC9F,MAAM,MAAM,GAAG,GAAG,CAAC,cAAc,CAAC,KAAK,CAAC;AACxC,QAAA,IAAI,MAAM,KAAK,QAAQ,EAAE;AACvB,YAAA,MAAM,IAAI,oBAAoB,CAC5B,OAAO,KAAA,IAAA,IAAP,OAAO,KAAA,MAAA,GAAP,OAAO,GAAI,CAAA,SAAA,EAAY,QAAQ,CAAA,iBAAA,EAAoB,KAAK,UAAU,MAAM,CAAA,CAAE,CAC3E;QACH;IACF,CAAC;;AAGD,IAAA,MAAM,CAAC,GAAsB,EAAE,MAAc,EAAE,OAAgB,EAAA;AAC7D,QAAA,MAAM,KAAK,GAAG,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QACpD,IAAI,CAAC,KAAK,EAAE;YACV,MAAM,IAAI,oBAAoB,CAC5B,OAAO,aAAP,OAAO,KAAA,MAAA,GAAP,OAAO,GAAI,CAAA,2BAAA,EAA8B,MAAM,aAAa,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA,CAAA,CAAG,CACnF;QACH;IACF,CAAC;;AAGD,IAAA,MAAM,CAAC,GAAsB,EAAE,MAAc,EAAE,OAAgB,EAAA;AAC7D,QAAA,MAAM,KAAK,GAAG,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QACxD,IAAI,CAAC,KAAK,EAAE;YACV,MAAM,IAAI,oBAAoB,CAC5B,OAAO,aAAP,OAAO,KAAA,MAAA,GAAP,OAAO,GAAI,CAAA,uBAAA,EAA0B,MAAM,iBAAiB,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA,CAAA,CAAG,CACvF;QACH;IACF,CAAC;;AAGH;;AAEoE;MAEvD,gBAAgB,CAAA;AAA7B,IAAA,WAAA,GAAA;QACU,IAAA,CAAA,KAAK,GAAqB,EAAE;QAC5B,IAAA,CAAA,WAAW,GAA8D,IAAI;QAC7E,IAAA,CAAA,UAAU,GAA8D,IAAI;IA+EtF;;IA5EE,IAAI,CAAC,IAAY,EAAE,EAAoD,EAAA;QACrE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;AAC7B,QAAA,OAAO,IAAI;IACb;;IAGA,IAAI,CAAC,IAAY,EAAE,EAAoD,EAAA;AACrE,QAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;AACzC,QAAA,OAAO,IAAI;IACb;;AAGA,IAAA,UAAU,CAAC,EAAoD,EAAA;AAC7D,QAAA,IAAI,CAAC,WAAW,GAAG,EAAE;AACrB,QAAA,OAAO,IAAI;IACb;;AAGA,IAAA,SAAS,CAAC,EAAoD,EAAA;AAC5D,QAAA,IAAI,CAAC,UAAU,GAAG,EAAE;AACpB,QAAA,OAAO,IAAI;IACb;;AAGA,IAAA,MAAM,GAAG,CAAC,MAAwB,EAAE,SAAkB,EAAA;AACpD,QAAA,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ;AAChC,QAAA,MAAM,GAAG,GAAG,IAAI,iBAAiB,CAAC,QAAQ,CAAC;QAE3C,MAAM,OAAO,GAAiB,EAAE;QAChC,IAAI,MAAM,GAAG,CAAC;QACd,IAAI,MAAM,GAAG,CAAC;QACd,IAAI,OAAO,GAAG,CAAC;AACf,QAAA,MAAM,UAAU,GAAG,WAAW,CAAC,GAAG,EAAE;AAEpC,QAAA,KAAK,MAAM,EAAE,IAAI,IAAI,CAAC,KAAK,EAAE;AAC3B,YAAA,IAAI,EAAE,CAAC,IAAI,EAAE;AACX,gBAAA,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC;AAC/D,gBAAA,OAAO,EAAE;gBACT;YACF;YAEA,GAAG,CAAC,KAAK,EAAE;AACX,YAAA,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,EAAE;AAE/B,YAAA,IAAI;gBACF,IAAI,IAAI,CAAC,WAAW;AAAE,oBAAA,MAAM,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC;AACjD,gBAAA,MAAM,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC;gBAChB,IAAI,IAAI,CAAC,UAAU;AAAE,oBAAA,MAAM,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;gBAE/C,OAAO,CAAC,IAAI,CAAC;oBACX,IAAI,EAAE,EAAE,CAAC,IAAI;AACb,oBAAA,MAAM,EAAE,QAAQ;AAChB,oBAAA,QAAQ,EAAE,WAAW,CAAC,GAAG,EAAE,GAAG,KAAK;AACpC,iBAAA,CAAC;AACF,gBAAA,MAAM,EAAE;YACV;YAAE,OAAO,GAAG,EAAE;gBACZ,OAAO,CAAC,IAAI,CAAC;oBACX,IAAI,EAAE,EAAE,CAAC,IAAI;AACb,oBAAA,MAAM,EAAE,QAAQ;AAChB,oBAAA,QAAQ,EAAE,WAAW,CAAC,GAAG,EAAE,GAAG,KAAK;AACnC,oBAAA,KAAK,EAAE,GAAG,YAAY,KAAK,GAAG,GAAG,CAAC,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC;AACxD,iBAAA,CAAC;AACF,gBAAA,MAAM,EAAE;YACV;QACF;QAEA,OAAO;YACL,QAAQ,EAAE,QAAQ,CAAC,EAAE;YACrB,SAAS,EAAE,SAAS,KAAA,IAAA,IAAT,SAAS,KAAA,MAAA,GAAT,SAAS,GAAI,CAAA,EAAG,QAAQ,CAAC,IAAI,CAAA,MAAA,CAAQ;YAChD,OAAO;YACP,MAAM;YACN,MAAM;YACN,OAAO;AACP,YAAA,aAAa,EAAE,WAAW,CAAC,GAAG,EAAE,GAAG,UAAU;SAC9C;IACH;AACD;AAED;;AAEoE;AAEpE;AACM,SAAU,kBAAkB,CAAC,SAAmC,EAAA;IACpE,OAAO;AACL,QAAA,EAAE,EAAE,iBAAiB;AACrB,QAAA,IAAI,EAAE,aAAa;AACnB,QAAA,OAAO,EAAE,OAAO;AAChB,QAAA,WAAW,EAAE,sBAAsB;AACnC,QAAA,MAAM,EAAE,MAAM;QACd,KAAK,EAAE,CAAC,WAAW,CAAC;AACpB,QAAA,aAAa,EAAE,SAAS;AACxB,QAAA,GAAG,SAAS;KACb;AACH;AAEA;AACO,eAAe,mBAAmB,CAAC,MAAwB,EAAA;AAChE,IAAA,MAAM,MAAM,GAAG,IAAI,gBAAgB,EAAE;IAErC;AACG,SAAA,IAAI,CAAC,gCAAgC,EAAE,OAAO,GAAG,KAAI;AACpD,QAAA,MAAM,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC;AAC5B,IAAA,CAAC;AACA,SAAA,IAAI,CAAC,wCAAwC,EAAE,OAAO,GAAG,KAAI;AAC5D,QAAA,MAAM,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC;QAC1B,IAAI,KAAK,GAAG,CAAC;QACb,KAAK,MAAM,GAAG,OAAO,CAAC,IAAI,GAAG,CAAC,oBAAoB,EAAE;AAClD,YAAA,KAAK,IAAI,OAAO,CAAC,MAAM;QACzB;QACA,YAAY,CAAC,EAAE,CAAC,KAAK,GAAG,CAAC,EAAE,+CAA+C,CAAC;AAC7E,IAAA,CAAC;AACA,SAAA,IAAI,CAAC,kCAAkC,EAAE,OAAO,GAAG,KAAI;AACtD,QAAA,MAAM,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC;AAC1B,QAAA,IAAI,MAAM,CAAC,UAAU,EAAE;AACrB,YAAA,MAAM,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC;QAC9B;AACF,IAAA,CAAC;AACA,SAAA,IAAI,CAAC,uDAAuD,EAAE,OAAO,GAAG,KAAI;AAC3E,QAAA,MAAM,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC;QAC1B,IAAI,MAAM,CAAC,UAAU;AAAE,YAAA,MAAM,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC;QACnD,GAAG,CAAC,KAAK,EAAE;AACX,QAAA,MAAM,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC;AAC5B,IAAA,CAAC;AACA,SAAA,IAAI,CAAC,2BAA2B,EAAE,OAAO,GAAG,KAAI;AAC/C,QAAA,MAAM,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC;AAC1B,QAAA,YAAY,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,2CAA2C,CAAC;AACnF,IAAA,CAAC,CAAC;AAEJ,IAAA,OAAO,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,CAAA,EAAG,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAA,UAAA,CAAY,CAAC;AAChE;AAEA;AACM,SAAU,iBAAiB,CAAC,KAAsB,EAAA;AACtD,IAAA,MAAM,KAAK,GAAa;AACtB,QAAA,CAAA,IAAA,EAAO,KAAK,CAAC,SAAS,KAAK,KAAK,CAAC,QAAQ,CAAA,KAAA,CAAO;QAChD,EAAE;KACH;AAED,IAAA,KAAK,MAAM,CAAC,IAAI,KAAK,CAAC,OAAO,EAAE;QAC7B,MAAM,IAAI,GAAG,CAAC,CAAC,MAAM,KAAK,QAAQ,GAAG,GAAG,GAAG,CAAC,CAAC,MAAM,KAAK,QAAQ,GAAG,GAAG,GAAG,GAAG;QAC5E,MAAM,EAAE,GAAG,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;AAChC,QAAA,KAAK,CAAC,IAAI,CAAC,CAAA,EAAA,EAAK,IAAI,CAAA,CAAA,EAAI,CAAC,CAAC,IAAI,CAAA,EAAA,EAAK,EAAE,CAAA,GAAA,CAAK,CAAC;AAC3C,QAAA,IAAI,CAAC,CAAC,KAAK,EAAE;YACX,KAAK,CAAC,IAAI,CAAC,CAAA,MAAA,EAAS,CAAC,CAAC,KAAK,CAAA,CAAE,CAAC;QAChC;IACF;AAEA,IAAA,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;AACd,IAAA,KAAK,CAAC,IAAI,CAAC,CAAA,EAAA,EAAK,KAAK,CAAC,MAAM,CAAA,SAAA,EAAY,KAAK,CAAC,MAAM,CAAA,SAAA,EAAY,KAAK,CAAC,OAAO,CAAA,QAAA,CAAU,CAAC;AACxF,IAAA,KAAK,CAAC,IAAI,CAAC,CAAA,SAAA,EAAY,KAAK,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA,EAAA,CAAI,CAAC;AAC1D,IAAA,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;AAEd,IAAA,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;AACzB;;;;;;;;;;;"}
@@ -0,0 +1,288 @@
1
+ 'use strict';
2
+
3
+ /* ────────────────────────────────────────────────────────────────
4
+ Procedural Generation — Random, Noise, Wave, LootTable
5
+ ──────────────────────────────────────────────────────────────── */
6
+ /* ────────────────────────────────────────────────────────────────
7
+ SEEDED RANDOM (xoshiro128**)
8
+ ──────────────────────────────────────────────────────────────── */
9
+ class SeededRandom {
10
+ constructor(seed = Date.now()) {
11
+ this.s = new Uint32Array(4);
12
+ // SplitMix32 seed expansion
13
+ let z = seed >>> 0;
14
+ for (let i = 0; i < 4; i++) {
15
+ z = (z + 0x9e3779b9) >>> 0;
16
+ let t = z ^ (z >>> 16);
17
+ t = Math.imul(t, 0x21f0aaad);
18
+ t = t ^ (t >>> 15);
19
+ t = Math.imul(t, 0x735a2d97);
20
+ t = t ^ (t >>> 15);
21
+ this.s[i] = t >>> 0;
22
+ }
23
+ }
24
+ /** Returns [0, 1). */
25
+ next() {
26
+ const s = this.s;
27
+ const result = Math.imul(rotl(Math.imul(s[1], 5), 7), 9) >>> 0;
28
+ const t = s[1] << 9;
29
+ s[2] ^= s[0];
30
+ s[3] ^= s[1];
31
+ s[1] ^= s[2];
32
+ s[0] ^= s[3];
33
+ s[2] ^= t;
34
+ s[3] = rotl(s[3], 11);
35
+ return (result >>> 0) / 0x100000000;
36
+ }
37
+ /** Returns integer in [min, max] (inclusive). */
38
+ int(min, max) {
39
+ return min + Math.floor(this.next() * (max - min + 1));
40
+ }
41
+ /** Returns float in [min, max). */
42
+ float(min, max) {
43
+ return min + this.next() * (max - min);
44
+ }
45
+ /** Returns true with given probability (0-1). */
46
+ chance(probability) {
47
+ return this.next() < probability;
48
+ }
49
+ /** Pick a random element from an array. */
50
+ pick(arr) {
51
+ return arr[Math.floor(this.next() * arr.length)];
52
+ }
53
+ /** Shuffle array in-place (Fisher-Yates). */
54
+ shuffle(arr) {
55
+ for (let i = arr.length - 1; i > 0; i--) {
56
+ const j = Math.floor(this.next() * (i + 1));
57
+ const tmp = arr[i];
58
+ arr[i] = arr[j];
59
+ arr[j] = tmp;
60
+ }
61
+ return arr;
62
+ }
63
+ /** Weighted random pick. Returns index. */
64
+ weighted(weights) {
65
+ let total = 0;
66
+ for (const w of weights)
67
+ total += w;
68
+ let r = this.next() * total;
69
+ for (let i = 0; i < weights.length; i++) {
70
+ r -= weights[i];
71
+ if (r <= 0)
72
+ return i;
73
+ }
74
+ return weights.length - 1;
75
+ }
76
+ /** Random color. */
77
+ color(alpha = 1) {
78
+ return { r: this.next(), g: this.next(), b: this.next(), a: alpha };
79
+ }
80
+ /** Random unit vector. */
81
+ unitVec2() {
82
+ const angle = this.next() * Math.PI * 2;
83
+ return { x: Math.cos(angle), y: Math.sin(angle) };
84
+ }
85
+ /** Random point inside a circle. */
86
+ insideCircle(radius) {
87
+ const a = this.next() * Math.PI * 2;
88
+ const r = Math.sqrt(this.next()) * radius;
89
+ return { x: Math.cos(a) * r, y: Math.sin(a) * r };
90
+ }
91
+ }
92
+ function rotl(x, k) {
93
+ return ((x << k) | (x >>> (32 - k))) >>> 0;
94
+ }
95
+ /* ────────────────────────────────────────────────────────────────
96
+ PERLIN NOISE (2D, improved)
97
+ ──────────────────────────────────────────────────────────────── */
98
+ class PerlinNoise {
99
+ constructor(seed = 0) {
100
+ this.perm = new Uint8Array(512);
101
+ const rng = new SeededRandom(seed);
102
+ const p = new Uint8Array(256);
103
+ for (let i = 0; i < 256; i++)
104
+ p[i] = i;
105
+ // Shuffle
106
+ for (let i = 255; i > 0; i--) {
107
+ const j = rng.int(0, i);
108
+ const tmp = p[i];
109
+ p[i] = p[j];
110
+ p[j] = tmp;
111
+ }
112
+ for (let i = 0; i < 512; i++)
113
+ this.perm[i] = p[i & 255];
114
+ }
115
+ /** Get noise value at (x, y) → [-1, 1]. */
116
+ noise2D(x, y) {
117
+ const X = Math.floor(x) & 255;
118
+ const Y = Math.floor(y) & 255;
119
+ const xf = x - Math.floor(x);
120
+ const yf = y - Math.floor(y);
121
+ const u = fade(xf);
122
+ const v = fade(yf);
123
+ const p = this.perm;
124
+ const A = p[X] + Y;
125
+ const B = p[X + 1] + Y;
126
+ return lerp(lerp(grad(p[A], xf, yf), grad(p[B], xf - 1, yf), u), lerp(grad(p[A + 1], xf, yf - 1), grad(p[B + 1], xf - 1, yf - 1), u), v);
127
+ }
128
+ /** Fractal Brownian Motion (layered noise). */
129
+ fbm(x, y, octaves = 4, lacunarity = 2, gain = 0.5) {
130
+ let value = 0;
131
+ let amplitude = 1;
132
+ let frequency = 1;
133
+ let maxValue = 0;
134
+ for (let i = 0; i < octaves; i++) {
135
+ value += this.noise2D(x * frequency, y * frequency) * amplitude;
136
+ maxValue += amplitude;
137
+ amplitude *= gain;
138
+ frequency *= lacunarity;
139
+ }
140
+ return value / maxValue;
141
+ }
142
+ }
143
+ function fade(t) {
144
+ return t * t * t * (t * (t * 6 - 15) + 10);
145
+ }
146
+ function lerp(a, b, t) {
147
+ return a + t * (b - a);
148
+ }
149
+ function grad(hash, x, y) {
150
+ const h = hash & 3;
151
+ const u = h < 2 ? x : y;
152
+ const v = h < 2 ? y : x;
153
+ return ((h & 1) === 0 ? u : -u) + ((h & 2) === 0 ? v : -v);
154
+ }
155
+ class WaveGenerator {
156
+ constructor(seed) {
157
+ this.rng = new SeededRandom(seed);
158
+ }
159
+ generateWave(waveNumber, config) {
160
+ const totalEnemies = Math.floor(config.baseEnemyCount * Math.pow(config.countGrowth, waveNumber - 1));
161
+ // Filter types available at this wave
162
+ const available = config.typeProbabilities.filter(tp => waveNumber >= tp.minWave);
163
+ if (available.length === 0)
164
+ return [];
165
+ const weights = available.map(a => a.weight);
166
+ const entries = [];
167
+ let remaining = totalEnemies;
168
+ let cumulativeDelay = 0;
169
+ while (remaining > 0) {
170
+ const groupCount = Math.min(remaining, this.rng.int(config.groupSize[0], config.groupSize[1]));
171
+ const typeIdx = this.rng.weighted(weights);
172
+ entries.push({
173
+ type: available[typeIdx].type,
174
+ count: groupCount,
175
+ delay: cumulativeDelay,
176
+ spawnInterval: this.rng.float(config.spawnInterval[0], config.spawnInterval[1]),
177
+ });
178
+ remaining -= groupCount;
179
+ cumulativeDelay += this.rng.float(config.groupDelay[0], config.groupDelay[1]);
180
+ }
181
+ return entries;
182
+ }
183
+ }
184
+ class LootTable {
185
+ constructor(drops, seed) {
186
+ this.drops = drops;
187
+ this.rng = new SeededRandom(seed);
188
+ }
189
+ /** Roll N items from the table. */
190
+ roll(count, level = 1) {
191
+ var _a;
192
+ const eligible = this.drops.filter(d => !d.minLevel || level >= d.minLevel);
193
+ if (eligible.length === 0)
194
+ return [];
195
+ const weights = eligible.map(d => d.weight);
196
+ const results = [];
197
+ const rollCounts = new Map();
198
+ for (let i = 0; i < count; i++) {
199
+ // rebuild weights excluding maxed-out items
200
+ const currentWeights = eligible.map((d, idx) => {
201
+ var _a;
202
+ if (d.maxPerRoll != null) {
203
+ const used = (_a = rollCounts.get(d.id)) !== null && _a !== void 0 ? _a : 0;
204
+ if (used >= d.maxPerRoll)
205
+ return 0;
206
+ }
207
+ return weights[idx];
208
+ });
209
+ if (currentWeights.every(w => w === 0))
210
+ break;
211
+ const idx = this.rng.weighted(currentWeights);
212
+ const drop = eligible[idx];
213
+ const qty = this.rng.int(drop.quantity[0], drop.quantity[1]);
214
+ results.push({ id: drop.id, quantity: qty });
215
+ rollCounts.set(drop.id, ((_a = rollCounts.get(drop.id)) !== null && _a !== void 0 ? _a : 0) + 1);
216
+ }
217
+ return results;
218
+ }
219
+ /** Simple yes/no chance to drop each item independently. */
220
+ rollEach(level = 1) {
221
+ const results = [];
222
+ for (const drop of this.drops) {
223
+ if (drop.minLevel != null && level < drop.minLevel)
224
+ continue;
225
+ // Normalize weight as probability (assume max total = 100)
226
+ if (this.rng.chance(drop.weight / 100)) {
227
+ results.push({ id: drop.id, quantity: this.rng.int(drop.quantity[0], drop.quantity[1]) });
228
+ }
229
+ }
230
+ return results;
231
+ }
232
+ }
233
+ /* ────────────────────────────────────────────────────────────────
234
+ PROCEDURAL SPRITE — Generate simple procedural sprites
235
+ ──────────────────────────────────────────────────────────────── */
236
+ class ProceduralSprite {
237
+ constructor(seed) {
238
+ this.rng = new SeededRandom(seed);
239
+ }
240
+ /**
241
+ * Generate a symmetrical pixel art sprite as ImageData.
242
+ * Good for enemies, ships, items.
243
+ */
244
+ generate(width, height, palette, symmetry = 'horizontal') {
245
+ const data = new ImageData(width, height);
246
+ const halfW = symmetry === 'horizontal' || symmetry === 'both' ? Math.ceil(width / 2) : width;
247
+ const halfH = symmetry === 'vertical' || symmetry === 'both' ? Math.ceil(height / 2) : height;
248
+ // Generate half, then mirror
249
+ const grid = new Array(halfW * halfH).fill(false);
250
+ const colors = new Array(halfW * halfH).fill(0);
251
+ for (let i = 0; i < grid.length; i++) {
252
+ if (this.rng.chance(0.45)) {
253
+ grid[i] = true;
254
+ colors[i] = this.rng.int(0, palette.length - 1);
255
+ }
256
+ }
257
+ // Write to ImageData
258
+ for (let y = 0; y < height; y++) {
259
+ for (let x = 0; x < width; x++) {
260
+ let sx = x;
261
+ let sy = y;
262
+ if ((symmetry === 'horizontal' || symmetry === 'both') && x >= halfW) {
263
+ sx = width - 1 - x;
264
+ }
265
+ if ((symmetry === 'vertical' || symmetry === 'both') && y >= halfH) {
266
+ sy = height - 1 - y;
267
+ }
268
+ const idx = sy * halfW + sx;
269
+ if (grid[idx]) {
270
+ const c = palette[colors[idx]];
271
+ const px = (y * width + x) * 4;
272
+ data.data[px] = (c.r * 255) | 0;
273
+ data.data[px + 1] = (c.g * 255) | 0;
274
+ data.data[px + 2] = (c.b * 255) | 0;
275
+ data.data[px + 3] = (c.a * 255) | 0;
276
+ }
277
+ }
278
+ }
279
+ return data;
280
+ }
281
+ }
282
+
283
+ exports.LootTable = LootTable;
284
+ exports.PerlinNoise = PerlinNoise;
285
+ exports.ProceduralSprite = ProceduralSprite;
286
+ exports.SeededRandom = SeededRandom;
287
+ exports.WaveGenerator = WaveGenerator;
288
+ //# sourceMappingURL=Procedural.js.map