@caperjs/core 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 (600) hide show
  1. package/LICENSE +22 -0
  2. package/README.md +62 -0
  3. package/cli/add.mjs +197 -0
  4. package/cli/audio/cc.mjs +128 -0
  5. package/cli/audio/index.mjs +42 -0
  6. package/cli/audio/utils.mjs +56 -0
  7. package/cli/create-caper.mjs +8 -0
  8. package/cli/create.mjs +351 -0
  9. package/cli/install-peerdeps.mjs +57 -0
  10. package/cli/update.mjs +9 -0
  11. package/cli/utils.mjs +81 -0
  12. package/cli/vite.mjs +55 -0
  13. package/cli/voiceover/generateVoiceoverCSV.mjs +158 -0
  14. package/cli/voiceover/index.mjs +1 -0
  15. package/cli.mjs +157 -0
  16. package/client.d.ts +7 -0
  17. package/config/assetpack.mjs +212 -0
  18. package/config/tsconfig.base.json +28 -0
  19. package/config/vite.mjs +2464 -0
  20. package/extras/css/accessibility.css +9 -0
  21. package/extras/css/fullscreen.css +28 -0
  22. package/extras/css/loader.css +67 -0
  23. package/extras/llms.txt +1602 -0
  24. package/lib/CaptionsPlugin-Dc8fIrjy.js +277 -0
  25. package/lib/CaptionsPlugin-Dc8fIrjy.js.map +1 -0
  26. package/lib/DataAdapter-BY2114sp.js +84 -0
  27. package/lib/DataAdapter-BY2114sp.js.map +1 -0
  28. package/lib/DebugRenderer-BJMLILqI.js +1385 -0
  29. package/lib/DebugRenderer-BJMLILqI.js.map +1 -0
  30. package/lib/DevToolsPlugin-wQ5rOkn0.js +31 -0
  31. package/lib/DevToolsPlugin-wQ5rOkn0.js.map +1 -0
  32. package/lib/GSAPPlugin-DHhSZKv8.js +350 -0
  33. package/lib/GSAPPlugin-DHhSZKv8.js.map +1 -0
  34. package/lib/LayoutPlugin-B-DF9SYM.js +1271 -0
  35. package/lib/LayoutPlugin-B-DF9SYM.js.map +1 -0
  36. package/lib/SpinePlugin-Dz_3dljz.js +6077 -0
  37. package/lib/SpinePlugin-Dz_3dljz.js.map +1 -0
  38. package/lib/StatsPlugin-Cg82JMBD.js +70 -0
  39. package/lib/StatsPlugin-Cg82JMBD.js.map +1 -0
  40. package/lib/VoiceOverPlugin-BR3ImT8C.js +114 -0
  41. package/lib/VoiceOverPlugin-BR3ImT8C.js.map +1 -0
  42. package/lib/caper.mjs +1233 -0
  43. package/lib/caper.mjs.map +1 -0
  44. package/lib/core/Application.d.ts +268 -0
  45. package/lib/core/Application.d.ts.map +1 -0
  46. package/lib/core/config.d.ts +39 -0
  47. package/lib/core/config.d.ts.map +1 -0
  48. package/lib/core/create.d.ts +41 -0
  49. package/lib/core/create.d.ts.map +1 -0
  50. package/lib/core/globals.d.ts +51 -0
  51. package/lib/core/globals.d.ts.map +1 -0
  52. package/lib/core/index.d.ts +7 -0
  53. package/lib/core/index.d.ts.map +1 -0
  54. package/lib/core/interfaces/IApplication.d.ts +566 -0
  55. package/lib/core/interfaces/IApplication.d.ts.map +1 -0
  56. package/lib/core/interfaces/IApplicationOptions.d.ts +65 -0
  57. package/lib/core/interfaces/IApplicationOptions.d.ts.map +1 -0
  58. package/lib/core/interfaces/ICoreFunctions.d.ts +49 -0
  59. package/lib/core/interfaces/ICoreFunctions.d.ts.map +1 -0
  60. package/lib/core/interfaces/ICoreSignals.d.ts +57 -0
  61. package/lib/core/interfaces/ICoreSignals.d.ts.map +1 -0
  62. package/lib/core/interfaces/IStorageCapability.d.ts +20 -0
  63. package/lib/core/interfaces/IStorageCapability.d.ts.map +1 -0
  64. package/lib/core/interfaces/IStorageCapability.test.d.ts +2 -0
  65. package/lib/core/interfaces/IStorageCapability.test.d.ts.map +1 -0
  66. package/lib/core/interfaces/index.d.ts +7 -0
  67. package/lib/core/interfaces/index.d.ts.map +1 -0
  68. package/lib/core/registries.d.ts +8 -0
  69. package/lib/core/registries.d.ts.map +1 -0
  70. package/lib/core/types.d.ts +12 -0
  71. package/lib/core/types.d.ts.map +1 -0
  72. package/lib/display/AnimatedSprite.d.ts +40 -0
  73. package/lib/display/AnimatedSprite.d.ts.map +1 -0
  74. package/lib/display/Camera.d.ts +102 -0
  75. package/lib/display/Camera.d.ts.map +1 -0
  76. package/lib/display/Container.d.ts +115 -0
  77. package/lib/display/Container.d.ts.map +1 -0
  78. package/lib/display/Entity.d.ts +46 -0
  79. package/lib/display/Entity.d.ts.map +1 -0
  80. package/lib/display/ParticleContainer.d.ts +58 -0
  81. package/lib/display/ParticleContainer.d.ts.map +1 -0
  82. package/lib/display/Scene.d.ts +250 -0
  83. package/lib/display/Scene.d.ts.map +1 -0
  84. package/lib/display/SceneTransition.d.ts +41 -0
  85. package/lib/display/SceneTransition.d.ts.map +1 -0
  86. package/lib/display/SpineAnimation.d.ts +76 -0
  87. package/lib/display/SpineAnimation.d.ts.map +1 -0
  88. package/lib/display/Svg.d.ts +5 -0
  89. package/lib/display/Svg.d.ts.map +1 -0
  90. package/lib/display/index.d.ts +10 -0
  91. package/lib/display/index.d.ts.map +1 -0
  92. package/lib/env.d.ts +6 -0
  93. package/lib/hello.d.ts +2 -0
  94. package/lib/hello.d.ts.map +1 -0
  95. package/lib/index.d.ts +15 -0
  96. package/lib/index.d.ts.map +1 -0
  97. package/lib/mixins/animated.d.ts +53 -0
  98. package/lib/mixins/animated.d.ts.map +1 -0
  99. package/lib/mixins/factory/Factory.d.ts +8 -0
  100. package/lib/mixins/factory/Factory.d.ts.map +1 -0
  101. package/lib/mixins/factory/const.d.ts +67 -0
  102. package/lib/mixins/factory/const.d.ts.map +1 -0
  103. package/lib/mixins/factory/index.d.ts +8 -0
  104. package/lib/mixins/factory/index.d.ts.map +1 -0
  105. package/lib/mixins/factory/methods.d.ts +3 -0
  106. package/lib/mixins/factory/methods.d.ts.map +1 -0
  107. package/lib/mixins/factory/props.d.ts +160 -0
  108. package/lib/mixins/factory/props.d.ts.map +1 -0
  109. package/lib/mixins/factory/registry.d.ts +27 -0
  110. package/lib/mixins/factory/registry.d.ts.map +1 -0
  111. package/lib/mixins/factory/registry.test.d.ts +2 -0
  112. package/lib/mixins/factory/registry.test.d.ts.map +1 -0
  113. package/lib/mixins/factory/schema.d.ts +71 -0
  114. package/lib/mixins/factory/schema.d.ts.map +1 -0
  115. package/lib/mixins/factory/ui-registry.d.ts +20 -0
  116. package/lib/mixins/factory/ui-registry.d.ts.map +1 -0
  117. package/lib/mixins/factory/utils.d.ts +11 -0
  118. package/lib/mixins/factory/utils.d.ts.map +1 -0
  119. package/lib/mixins/focus.d.ts +15 -0
  120. package/lib/mixins/focus.d.ts.map +1 -0
  121. package/lib/mixins/index.d.ts +6 -0
  122. package/lib/mixins/index.d.ts.map +1 -0
  123. package/lib/mixins/interaction.d.ts +20 -0
  124. package/lib/mixins/interaction.d.ts.map +1 -0
  125. package/lib/mixins/signals.d.ts +15 -0
  126. package/lib/mixins/signals.d.ts.map +1 -0
  127. package/lib/plugins/AssetsPlugin.d.ts +79 -0
  128. package/lib/plugins/AssetsPlugin.d.ts.map +1 -0
  129. package/lib/plugins/DataAdapter.d.ts +95 -0
  130. package/lib/plugins/DataAdapter.d.ts.map +1 -0
  131. package/lib/plugins/DevToolsPlugin.d.ts +97 -0
  132. package/lib/plugins/DevToolsPlugin.d.ts.map +1 -0
  133. package/lib/plugins/FullScreenPlugin.d.ts +240 -0
  134. package/lib/plugins/FullScreenPlugin.d.ts.map +1 -0
  135. package/lib/plugins/GSAPPlugin.d.ts +634 -0
  136. package/lib/plugins/GSAPPlugin.d.ts.map +1 -0
  137. package/lib/plugins/KeyboardPlugin.d.ts +53 -0
  138. package/lib/plugins/KeyboardPlugin.d.ts.map +1 -0
  139. package/lib/plugins/LayoutPlugin.d.ts +100 -0
  140. package/lib/plugins/LayoutPlugin.d.ts.map +1 -0
  141. package/lib/plugins/LookupPlugin.d.ts +223 -0
  142. package/lib/plugins/LookupPlugin.d.ts.map +1 -0
  143. package/lib/plugins/Plugin.d.ts +132 -0
  144. package/lib/plugins/Plugin.d.ts.map +1 -0
  145. package/lib/plugins/Plugin.test.d.ts +2 -0
  146. package/lib/plugins/Plugin.test.d.ts.map +1 -0
  147. package/lib/plugins/PopupManagerPlugin.d.ts +108 -0
  148. package/lib/plugins/PopupManagerPlugin.d.ts.map +1 -0
  149. package/lib/plugins/ResizerPlugin.d.ts +62 -0
  150. package/lib/plugins/ResizerPlugin.d.ts.map +1 -0
  151. package/lib/plugins/SceneManagerPlugin.d.ts +122 -0
  152. package/lib/plugins/SceneManagerPlugin.d.ts.map +1 -0
  153. package/lib/plugins/StatsPlugin.d.ts +8 -0
  154. package/lib/plugins/StatsPlugin.d.ts.map +1 -0
  155. package/lib/plugins/TimerPlugin.d.ts +401 -0
  156. package/lib/plugins/TimerPlugin.d.ts.map +1 -0
  157. package/lib/plugins/WebEventsPlugin.d.ts +60 -0
  158. package/lib/plugins/WebEventsPlugin.d.ts.map +1 -0
  159. package/lib/plugins/actions/ActionsPlugin.d.ts +39 -0
  160. package/lib/plugins/actions/ActionsPlugin.d.ts.map +1 -0
  161. package/lib/plugins/actions/constants.d.ts +52 -0
  162. package/lib/plugins/actions/constants.d.ts.map +1 -0
  163. package/lib/plugins/actions/index.d.ts +5 -0
  164. package/lib/plugins/actions/index.d.ts.map +1 -0
  165. package/lib/plugins/actions/methods.d.ts +11 -0
  166. package/lib/plugins/actions/methods.d.ts.map +1 -0
  167. package/lib/plugins/actions/types.d.ts +25 -0
  168. package/lib/plugins/actions/types.d.ts.map +1 -0
  169. package/lib/plugins/audio/AudioChannel.d.ts +46 -0
  170. package/lib/plugins/audio/AudioChannel.d.ts.map +1 -0
  171. package/lib/plugins/audio/AudioChannel.test.d.ts +2 -0
  172. package/lib/plugins/audio/AudioChannel.test.d.ts.map +1 -0
  173. package/lib/plugins/audio/AudioInstance.d.ts +79 -0
  174. package/lib/plugins/audio/AudioInstance.d.ts.map +1 -0
  175. package/lib/plugins/audio/AudioManagerPlugin.d.ts +323 -0
  176. package/lib/plugins/audio/AudioManagerPlugin.d.ts.map +1 -0
  177. package/lib/plugins/audio/VoiceOverPlugin.d.ts +69 -0
  178. package/lib/plugins/audio/VoiceOverPlugin.d.ts.map +1 -0
  179. package/lib/plugins/audio/index.d.ts +4 -0
  180. package/lib/plugins/audio/index.d.ts.map +1 -0
  181. package/lib/plugins/breakpoints/BreakpointPlugin.d.ts +109 -0
  182. package/lib/plugins/breakpoints/BreakpointPlugin.d.ts.map +1 -0
  183. package/lib/plugins/breakpoints/BreakpointPlugin.test.d.ts +2 -0
  184. package/lib/plugins/breakpoints/BreakpointPlugin.test.d.ts.map +1 -0
  185. package/lib/plugins/breakpoints/evaluate.d.ts +53 -0
  186. package/lib/plugins/breakpoints/evaluate.d.ts.map +1 -0
  187. package/lib/plugins/breakpoints/evaluate.test.d.ts +2 -0
  188. package/lib/plugins/breakpoints/evaluate.test.d.ts.map +1 -0
  189. package/lib/plugins/breakpoints/index.d.ts +4 -0
  190. package/lib/plugins/breakpoints/index.d.ts.map +1 -0
  191. package/lib/plugins/breakpoints/methods.d.ts +23 -0
  192. package/lib/plugins/breakpoints/methods.d.ts.map +1 -0
  193. package/lib/plugins/breakpoints/types.d.ts +70 -0
  194. package/lib/plugins/breakpoints/types.d.ts.map +1 -0
  195. package/lib/plugins/captions/CaptionsPlugin.d.ts +150 -0
  196. package/lib/plugins/captions/CaptionsPlugin.d.ts.map +1 -0
  197. package/lib/plugins/captions/CaptionsRenderer.d.ts +37 -0
  198. package/lib/plugins/captions/CaptionsRenderer.d.ts.map +1 -0
  199. package/lib/plugins/captions/index.d.ts +3 -0
  200. package/lib/plugins/captions/index.d.ts.map +1 -0
  201. package/lib/plugins/defaults.d.ts +4 -0
  202. package/lib/plugins/defaults.d.ts.map +1 -0
  203. package/lib/plugins/focus/FocusManagerPlugin.d.ts +148 -0
  204. package/lib/plugins/focus/FocusManagerPlugin.d.ts.map +1 -0
  205. package/lib/plugins/focus/FocusOutliner.d.ts +32 -0
  206. package/lib/plugins/focus/FocusOutliner.d.ts.map +1 -0
  207. package/lib/plugins/focus/index.d.ts +3 -0
  208. package/lib/plugins/focus/index.d.ts.map +1 -0
  209. package/lib/plugins/i18nPlugin.d.ts +128 -0
  210. package/lib/plugins/i18nPlugin.d.ts.map +1 -0
  211. package/lib/plugins/index.d.ts +18 -0
  212. package/lib/plugins/index.d.ts.map +1 -0
  213. package/lib/plugins/input/AbstractControls.d.ts +8 -0
  214. package/lib/plugins/input/AbstractControls.d.ts.map +1 -0
  215. package/lib/plugins/input/Controls.d.ts +16 -0
  216. package/lib/plugins/input/Controls.d.ts.map +1 -0
  217. package/lib/plugins/input/InputPlugin.d.ts +52 -0
  218. package/lib/plugins/input/InputPlugin.d.ts.map +1 -0
  219. package/lib/plugins/input/constants.d.ts +8 -0
  220. package/lib/plugins/input/constants.d.ts.map +1 -0
  221. package/lib/plugins/input/index.d.ts +10 -0
  222. package/lib/plugins/input/index.d.ts.map +1 -0
  223. package/lib/plugins/input/interfaces.d.ts +30 -0
  224. package/lib/plugins/input/interfaces.d.ts.map +1 -0
  225. package/lib/plugins/input/keyboard/KeyboardContols.d.ts +28 -0
  226. package/lib/plugins/input/keyboard/KeyboardContols.d.ts.map +1 -0
  227. package/lib/plugins/input/keyboard/index.d.ts +3 -0
  228. package/lib/plugins/input/keyboard/index.d.ts.map +1 -0
  229. package/lib/plugins/input/keyboard/interfaces.d.ts +18 -0
  230. package/lib/plugins/input/keyboard/interfaces.d.ts.map +1 -0
  231. package/lib/plugins/input/methods.d.ts +4 -0
  232. package/lib/plugins/input/methods.d.ts.map +1 -0
  233. package/lib/plugins/input/touch/TouchControls.d.ts +35 -0
  234. package/lib/plugins/input/touch/TouchControls.d.ts.map +1 -0
  235. package/lib/plugins/input/touch/constants.d.ts +14 -0
  236. package/lib/plugins/input/touch/constants.d.ts.map +1 -0
  237. package/lib/plugins/input/touch/index.d.ts +4 -0
  238. package/lib/plugins/input/touch/index.d.ts.map +1 -0
  239. package/lib/plugins/input/touch/interfaces.d.ts +15 -0
  240. package/lib/plugins/input/touch/interfaces.d.ts.map +1 -0
  241. package/lib/plugins/input/types.d.ts +32 -0
  242. package/lib/plugins/input/types.d.ts.map +1 -0
  243. package/lib/plugins/input/utils.d.ts +23 -0
  244. package/lib/plugins/input/utils.d.ts.map +1 -0
  245. package/lib/plugins/spine/SpinePlugin.d.ts +6 -0
  246. package/lib/plugins/spine/SpinePlugin.d.ts.map +1 -0
  247. package/lib/plugins/spine/pixi-spine/BatchableSpineSlot.d.ts +31 -0
  248. package/lib/plugins/spine/pixi-spine/BatchableSpineSlot.d.ts.map +1 -0
  249. package/lib/plugins/spine/pixi-spine/Spine.d.ts +211 -0
  250. package/lib/plugins/spine/pixi-spine/Spine.d.ts.map +1 -0
  251. package/lib/plugins/spine/pixi-spine/SpineDebugRenderer.d.ts +81 -0
  252. package/lib/plugins/spine/pixi-spine/SpineDebugRenderer.d.ts.map +1 -0
  253. package/lib/plugins/spine/pixi-spine/SpinePipe.d.ts +21 -0
  254. package/lib/plugins/spine/pixi-spine/SpinePipe.d.ts.map +1 -0
  255. package/lib/plugins/spine/pixi-spine/SpineTexture.d.ts +16 -0
  256. package/lib/plugins/spine/pixi-spine/SpineTexture.d.ts.map +1 -0
  257. package/lib/plugins/spine/pixi-spine/assets/atlasLoader.d.ts +10 -0
  258. package/lib/plugins/spine/pixi-spine/assets/atlasLoader.d.ts.map +1 -0
  259. package/lib/plugins/spine/pixi-spine/assets/skeletonLoader.d.ts +6 -0
  260. package/lib/plugins/spine/pixi-spine/assets/skeletonLoader.d.ts.map +1 -0
  261. package/lib/plugins/spine/pixi-spine/darktint/DarkTintBatchGeometry.d.ts +5 -0
  262. package/lib/plugins/spine/pixi-spine/darktint/DarkTintBatchGeometry.d.ts.map +1 -0
  263. package/lib/plugins/spine/pixi-spine/darktint/DarkTintBatcher.d.ts +22 -0
  264. package/lib/plugins/spine/pixi-spine/darktint/DarkTintBatcher.d.ts.map +1 -0
  265. package/lib/plugins/spine/pixi-spine/darktint/DarkTintShader.d.ts +5 -0
  266. package/lib/plugins/spine/pixi-spine/darktint/DarkTintShader.d.ts.map +1 -0
  267. package/lib/plugins/spine/pixi-spine/darktint/darkTintBit.d.ts +51 -0
  268. package/lib/plugins/spine/pixi-spine/darktint/darkTintBit.d.ts.map +1 -0
  269. package/lib/plugins/spine/pixi-spine/index.d.ts +9 -0
  270. package/lib/plugins/spine/pixi-spine/index.d.ts.map +1 -0
  271. package/lib/plugins/spine/pixi-spine/require-shim.d.ts +34 -0
  272. package/lib/plugins/spine/pixi-spine/require-shim.d.ts.map +1 -0
  273. package/lib/registries-CYCaYKZI.js +6885 -0
  274. package/lib/registries-CYCaYKZI.js.map +1 -0
  275. package/lib/signals/Signal.d.ts +16 -0
  276. package/lib/signals/Signal.d.ts.map +1 -0
  277. package/lib/signals/Signal.test.d.ts +2 -0
  278. package/lib/signals/Signal.test.d.ts.map +1 -0
  279. package/lib/signals/index.d.ts +3 -0
  280. package/lib/signals/index.d.ts.map +1 -0
  281. package/lib/store/Store.d.ts +56 -0
  282. package/lib/store/Store.d.ts.map +1 -0
  283. package/lib/store/Store.test.d.ts +2 -0
  284. package/lib/store/Store.test.d.ts.map +1 -0
  285. package/lib/store/index.d.ts +2 -0
  286. package/lib/store/index.d.ts.map +1 -0
  287. package/lib/types/framework.d.ts +46 -0
  288. package/lib/types/gsap.d.ts +23 -0
  289. package/lib/ui/Button.d.ts +162 -0
  290. package/lib/ui/Button.d.ts.map +1 -0
  291. package/lib/ui/FlexContainer.d.ts +109 -0
  292. package/lib/ui/FlexContainer.d.ts.map +1 -0
  293. package/lib/ui/Input.d.ts +384 -0
  294. package/lib/ui/Input.d.ts.map +1 -0
  295. package/lib/ui/Joystick.d.ts +61 -0
  296. package/lib/ui/Joystick.d.ts.map +1 -0
  297. package/lib/ui/Popup.d.ts +109 -0
  298. package/lib/ui/Popup.d.ts.map +1 -0
  299. package/lib/ui/Toast.d.ts +131 -0
  300. package/lib/ui/Toast.d.ts.map +1 -0
  301. package/lib/ui/Toaster.d.ts +188 -0
  302. package/lib/ui/Toaster.d.ts.map +1 -0
  303. package/lib/ui/UICanvas.d.ts +155 -0
  304. package/lib/ui/UICanvas.d.ts.map +1 -0
  305. package/lib/ui/index.d.ts +9 -0
  306. package/lib/ui/index.d.ts.map +1 -0
  307. package/lib/utils/array.d.ts +11 -0
  308. package/lib/utils/array.d.ts.map +1 -0
  309. package/lib/utils/bind.d.ts +21 -0
  310. package/lib/utils/bind.d.ts.map +1 -0
  311. package/lib/utils/canvas.d.ts +2 -0
  312. package/lib/utils/canvas.d.ts.map +1 -0
  313. package/lib/utils/color.d.ts +66 -0
  314. package/lib/utils/color.d.ts.map +1 -0
  315. package/lib/utils/console/Logger.d.ts +15 -0
  316. package/lib/utils/console/Logger.d.ts.map +1 -0
  317. package/lib/utils/console/index.d.ts +2 -0
  318. package/lib/utils/console/index.d.ts.map +1 -0
  319. package/lib/utils/debug.d.ts +34 -0
  320. package/lib/utils/debug.d.ts.map +1 -0
  321. package/lib/utils/define.d.ts +100 -0
  322. package/lib/utils/define.d.ts.map +1 -0
  323. package/lib/utils/env.d.ts +4 -0
  324. package/lib/utils/env.d.ts.map +1 -0
  325. package/lib/utils/events.d.ts +12 -0
  326. package/lib/utils/events.d.ts.map +1 -0
  327. package/lib/utils/framework.d.ts +12 -0
  328. package/lib/utils/framework.d.ts.map +1 -0
  329. package/lib/utils/index.d.ts +28 -0
  330. package/lib/utils/index.d.ts.map +1 -0
  331. package/lib/utils/map.d.ts +31 -0
  332. package/lib/utils/map.d.ts.map +1 -0
  333. package/lib/utils/math.d.ts +15 -0
  334. package/lib/utils/math.d.ts.map +1 -0
  335. package/lib/utils/misc.d.ts +13 -0
  336. package/lib/utils/misc.d.ts.map +1 -0
  337. package/lib/utils/number.d.ts +2 -0
  338. package/lib/utils/number.d.ts.map +1 -0
  339. package/lib/utils/object.d.ts +21 -0
  340. package/lib/utils/object.d.ts.map +1 -0
  341. package/lib/utils/padding.d.ts +4 -0
  342. package/lib/utils/padding.d.ts.map +1 -0
  343. package/lib/utils/pixi.d.ts +42 -0
  344. package/lib/utils/pixi.d.ts.map +1 -0
  345. package/lib/utils/platform.d.ts +20 -0
  346. package/lib/utils/platform.d.ts.map +1 -0
  347. package/lib/utils/point.d.ts +66 -0
  348. package/lib/utils/point.d.ts.map +1 -0
  349. package/lib/utils/promise/Queue.d.ts +60 -0
  350. package/lib/utils/promise/Queue.d.ts.map +1 -0
  351. package/lib/utils/promise/functions.d.ts +14 -0
  352. package/lib/utils/promise/functions.d.ts.map +1 -0
  353. package/lib/utils/promise/index.d.ts +3 -0
  354. package/lib/utils/promise/index.d.ts.map +1 -0
  355. package/lib/utils/random.d.ts +42 -0
  356. package/lib/utils/random.d.ts.map +1 -0
  357. package/lib/utils/rect.d.ts +26 -0
  358. package/lib/utils/rect.d.ts.map +1 -0
  359. package/lib/utils/set.d.ts +15 -0
  360. package/lib/utils/set.d.ts.map +1 -0
  361. package/lib/utils/string.d.ts +3 -0
  362. package/lib/utils/string.d.ts.map +1 -0
  363. package/lib/utils/text.d.ts +3 -0
  364. package/lib/utils/text.d.ts.map +1 -0
  365. package/lib/utils/typefilters.d.ts +4 -0
  366. package/lib/utils/typefilters.d.ts.map +1 -0
  367. package/lib/utils/types.d.ts +209 -0
  368. package/lib/utils/types.d.ts.map +1 -0
  369. package/lib/utils/vite.d.ts +25 -0
  370. package/lib/utils/vite.d.ts.map +1 -0
  371. package/lib/utils/web.d.ts +3 -0
  372. package/lib/utils/web.d.ts.map +1 -0
  373. package/lib/version.d.ts +3 -0
  374. package/lib/version.d.ts.map +1 -0
  375. package/lib/webgl-check.d.ts +2 -0
  376. package/lib/webgl-check.d.ts.map +1 -0
  377. package/package.json +138 -0
  378. package/src/core/Application.ts +1091 -0
  379. package/src/core/config.ts +168 -0
  380. package/src/core/create.ts +186 -0
  381. package/src/core/globals.ts +299 -0
  382. package/src/core/index.ts +6 -0
  383. package/src/core/interfaces/IApplication.ts +628 -0
  384. package/src/core/interfaces/IApplicationOptions.ts +81 -0
  385. package/src/core/interfaces/ICoreFunctions.ts +86 -0
  386. package/src/core/interfaces/ICoreSignals.ts +77 -0
  387. package/src/core/interfaces/IStorageCapability.test.ts +27 -0
  388. package/src/core/interfaces/IStorageCapability.ts +26 -0
  389. package/src/core/interfaces/index.ts +6 -0
  390. package/src/core/registries.ts +7 -0
  391. package/src/core/types.ts +13 -0
  392. package/src/display/AnimatedSprite.ts +227 -0
  393. package/src/display/Camera.ts +371 -0
  394. package/src/display/Container.ts +240 -0
  395. package/src/display/Entity.ts +50 -0
  396. package/src/display/ParticleContainer.ts +107 -0
  397. package/src/display/Scene.ts +305 -0
  398. package/src/display/SceneTransition.ts +108 -0
  399. package/src/display/SpineAnimation.ts +170 -0
  400. package/src/display/Svg.ts +9 -0
  401. package/src/display/index.ts +11 -0
  402. package/src/env.d.ts +6 -0
  403. package/src/hello.ts +20 -0
  404. package/src/index.ts +17 -0
  405. package/src/mixins/animated.ts +340 -0
  406. package/src/mixins/factory/Factory.ts +24 -0
  407. package/src/mixins/factory/const.ts +363 -0
  408. package/src/mixins/factory/index.ts +7 -0
  409. package/src/mixins/factory/methods.ts +21 -0
  410. package/src/mixins/factory/props.ts +207 -0
  411. package/src/mixins/factory/registry.test.ts +83 -0
  412. package/src/mixins/factory/registry.ts +61 -0
  413. package/src/mixins/factory/schema.ts +153 -0
  414. package/src/mixins/factory/ui-registry.ts +54 -0
  415. package/src/mixins/factory/utils.ts +130 -0
  416. package/src/mixins/focus.ts +124 -0
  417. package/src/mixins/index.ts +5 -0
  418. package/src/mixins/interaction.ts +74 -0
  419. package/src/mixins/signals.ts +49 -0
  420. package/src/plugins/AssetsPlugin.ts +407 -0
  421. package/src/plugins/DataAdapter.ts +259 -0
  422. package/src/plugins/DevToolsPlugin.ts +103 -0
  423. package/src/plugins/FullScreenPlugin.ts +359 -0
  424. package/src/plugins/GSAPPlugin.ts +811 -0
  425. package/src/plugins/KeyboardPlugin.ts +160 -0
  426. package/src/plugins/LayoutPlugin.ts +127 -0
  427. package/src/plugins/LookupPlugin.ts +308 -0
  428. package/src/plugins/Plugin.test.ts +73 -0
  429. package/src/plugins/Plugin.ts +200 -0
  430. package/src/plugins/PopupManagerPlugin.ts +263 -0
  431. package/src/plugins/ResizerPlugin.ts +220 -0
  432. package/src/plugins/SceneManagerPlugin.ts +669 -0
  433. package/src/plugins/StatsPlugin.ts +24 -0
  434. package/src/plugins/TimerPlugin.ts +841 -0
  435. package/src/plugins/WebEventsPlugin.ts +132 -0
  436. package/src/plugins/actions/ActionsPlugin.ts +113 -0
  437. package/src/plugins/actions/constants.ts +45 -0
  438. package/src/plugins/actions/index.ts +4 -0
  439. package/src/plugins/actions/methods.ts +28 -0
  440. package/src/plugins/actions/types.ts +47 -0
  441. package/src/plugins/audio/AudioChannel.test.ts +101 -0
  442. package/src/plugins/audio/AudioChannel.ts +164 -0
  443. package/src/plugins/audio/AudioInstance.ts +228 -0
  444. package/src/plugins/audio/AudioManagerPlugin.ts +903 -0
  445. package/src/plugins/audio/VoiceOverPlugin.ts +354 -0
  446. package/src/plugins/audio/index.ts +3 -0
  447. package/src/plugins/breakpoints/BreakpointPlugin.test.ts +228 -0
  448. package/src/plugins/breakpoints/BreakpointPlugin.ts +293 -0
  449. package/src/plugins/breakpoints/evaluate.test.ts +239 -0
  450. package/src/plugins/breakpoints/evaluate.ts +201 -0
  451. package/src/plugins/breakpoints/index.ts +3 -0
  452. package/src/plugins/breakpoints/methods.ts +22 -0
  453. package/src/plugins/breakpoints/types.ts +86 -0
  454. package/src/plugins/captions/CaptionsPlugin.ts +468 -0
  455. package/src/plugins/captions/CaptionsRenderer.ts +184 -0
  456. package/src/plugins/captions/font/Sans.fnt +116 -0
  457. package/src/plugins/captions/font/Sans.png +0 -0
  458. package/src/plugins/captions/index.ts +2 -0
  459. package/src/plugins/defaults.ts +95 -0
  460. package/src/plugins/focus/FocusManagerPlugin.ts +773 -0
  461. package/src/plugins/focus/FocusOutliner.ts +111 -0
  462. package/src/plugins/focus/index.ts +2 -0
  463. package/src/plugins/i18nPlugin.ts +284 -0
  464. package/src/plugins/index.ts +17 -0
  465. package/src/plugins/input/AbstractControls.ts +15 -0
  466. package/src/plugins/input/Controls.ts +55 -0
  467. package/src/plugins/input/InputPlugin.ts +168 -0
  468. package/src/plugins/input/constants.ts +12 -0
  469. package/src/plugins/input/index.ts +9 -0
  470. package/src/plugins/input/interfaces.ts +37 -0
  471. package/src/plugins/input/keyboard/KeyboardContols.ts +182 -0
  472. package/src/plugins/input/keyboard/index.ts +2 -0
  473. package/src/plugins/input/keyboard/interfaces.ts +21 -0
  474. package/src/plugins/input/methods.ts +9 -0
  475. package/src/plugins/input/touch/TouchControls.ts +237 -0
  476. package/src/plugins/input/touch/constants.ts +34 -0
  477. package/src/plugins/input/touch/index.ts +3 -0
  478. package/src/plugins/input/touch/interfaces.ts +15 -0
  479. package/src/plugins/input/types.ts +41 -0
  480. package/src/plugins/input/utils.ts +10 -0
  481. package/src/plugins/spine/SpinePlugin.ts +14 -0
  482. package/src/plugins/spine/pixi-spine/BatchableSpineSlot.ts +138 -0
  483. package/src/plugins/spine/pixi-spine/Spine.ts +897 -0
  484. package/src/plugins/spine/pixi-spine/SpineDebugRenderer.ts +615 -0
  485. package/src/plugins/spine/pixi-spine/SpinePipe.ts +197 -0
  486. package/src/plugins/spine/pixi-spine/SpineTexture.ts +143 -0
  487. package/src/plugins/spine/pixi-spine/assets/atlasLoader.ts +156 -0
  488. package/src/plugins/spine/pixi-spine/assets/skeletonLoader.ts +80 -0
  489. package/src/plugins/spine/pixi-spine/darktint/DarkTintBatchGeometry.ts +92 -0
  490. package/src/plugins/spine/pixi-spine/darktint/DarkTintBatcher.ts +186 -0
  491. package/src/plugins/spine/pixi-spine/darktint/DarkTintShader.ts +74 -0
  492. package/src/plugins/spine/pixi-spine/darktint/darkTintBit.ts +77 -0
  493. package/src/plugins/spine/pixi-spine/index.ts +43 -0
  494. package/src/plugins/spine/pixi-spine/require-shim.ts +43 -0
  495. package/src/signals/Signal.test.ts +54 -0
  496. package/src/signals/Signal.ts +68 -0
  497. package/src/signals/index.ts +10 -0
  498. package/src/store/Store.test.ts +146 -0
  499. package/src/store/Store.ts +192 -0
  500. package/src/store/index.ts +1 -0
  501. package/src/types/framework.d.ts +47 -0
  502. package/src/types/gsap.d.ts +26 -0
  503. package/src/ui/Button.ts +454 -0
  504. package/src/ui/FlexContainer.ts +526 -0
  505. package/src/ui/Input.ts +1274 -0
  506. package/src/ui/Joystick.ts +288 -0
  507. package/src/ui/Popup.ts +242 -0
  508. package/src/ui/Toast.ts +399 -0
  509. package/src/ui/Toaster.ts +409 -0
  510. package/src/ui/UICanvas.ts +812 -0
  511. package/src/ui/index.ts +8 -0
  512. package/src/utils/array.ts +24 -0
  513. package/src/utils/bind.ts +79 -0
  514. package/src/utils/canvas.ts +26 -0
  515. package/src/utils/color.ts +126 -0
  516. package/src/utils/console/Logger.ts +86 -0
  517. package/src/utils/console/index.ts +1 -0
  518. package/src/utils/debug.ts +69 -0
  519. package/src/utils/define.ts +120 -0
  520. package/src/utils/env.ts +3 -0
  521. package/src/utils/events.ts +10 -0
  522. package/src/utils/framework.ts +45 -0
  523. package/src/utils/index.ts +27 -0
  524. package/src/utils/map.ts +59 -0
  525. package/src/utils/math.ts +19 -0
  526. package/src/utils/misc.ts +45 -0
  527. package/src/utils/number.ts +3 -0
  528. package/src/utils/object.ts +43 -0
  529. package/src/utils/padding.ts +43 -0
  530. package/src/utils/pixi.ts +116 -0
  531. package/src/utils/platform.ts +33 -0
  532. package/src/utils/point.ts +123 -0
  533. package/src/utils/promise/Queue.ts +125 -0
  534. package/src/utils/promise/functions.ts +16 -0
  535. package/src/utils/promise/index.ts +2 -0
  536. package/src/utils/random.ts +69 -0
  537. package/src/utils/rect.ts +50 -0
  538. package/src/utils/set.ts +32 -0
  539. package/src/utils/string.ts +9 -0
  540. package/src/utils/text.ts +30 -0
  541. package/src/utils/typefilters.ts +29 -0
  542. package/src/utils/types.ts +426 -0
  543. package/src/utils/vite.ts +41 -0
  544. package/src/utils/web.ts +7 -0
  545. package/src/version.ts +3 -0
  546. package/src/webgl-check.ts +12 -0
  547. package/templates/app/default/.eslintrc.json +21 -0
  548. package/templates/app/default/.meta.json +4 -0
  549. package/templates/app/default/.nvmrc +1 -0
  550. package/templates/app/default/.prettierrc.json +7 -0
  551. package/templates/app/default/README.md +8 -0
  552. package/templates/app/default/assets/audio{m}/music/Cheerful Annoyance.ogg +0 -0
  553. package/templates/app/default/assets/audio{m}/music/Drumming Sticks.ogg +0 -0
  554. package/templates/app/default/assets/audio{m}/music/Game Over.ogg +0 -0
  555. package/templates/app/default/assets/audio{m}/music/Mishief Stroll.ogg +0 -0
  556. package/templates/app/default/assets/audio{m}/music/Night at the Beach.ogg +0 -0
  557. package/templates/app/default/assets/audio{m}/sfx/click.ogg +0 -0
  558. package/templates/app/default/assets/audio{m}/sfx/hover.ogg +0 -0
  559. package/templates/app/default/assets/required{m}/caper.png +0 -0
  560. package/templates/app/default/assets/required{m}/fonts{fix}/SpaceGrotesk-Bold{family=Space Grotesk}{wf}.ttf +0 -0
  561. package/templates/app/default/assets/required{m}/fonts{fix}/SpaceGrotesk-Medium{family=Space Grotesk}{wf}.ttf +0 -0
  562. package/templates/app/default/assets/required{m}/fonts{fix}/SpaceGrotesk-Regular{family=Space Grotesk}{wf}.ttf +0 -0
  563. package/templates/app/default/assets/required{m}/fonts{fix}/Syncopate-Bold{family=Syncopate}{wf}.ttf +0 -0
  564. package/templates/app/default/assets/required{m}/ui{tps}/btn/blue.png +0 -0
  565. package/templates/app/default/assets/required{m}/ui{tps}/btn/green.png +0 -0
  566. package/templates/app/default/assets/required{m}/ui{tps}/btn/grey.png +0 -0
  567. package/templates/app/default/assets/required{m}/ui{tps}/btn/orange.png +0 -0
  568. package/templates/app/default/assets/required{m}/ui{tps}/btn/purple.png +0 -0
  569. package/templates/app/default/assets/required{m}/ui{tps}/btn/red.png +0 -0
  570. package/templates/app/default/assets/required{m}/ui{tps}/btn/yellow.png +0 -0
  571. package/templates/app/default/assets/required{m}/ui{tps}/btn_a/down.png +0 -0
  572. package/templates/app/default/assets/required{m}/ui{tps}/btn_a/over.png +0 -0
  573. package/templates/app/default/assets/required{m}/ui{tps}/btn_a/up.png +0 -0
  574. package/templates/app/default/assets/required{m}/ui{tps}/btn_b/down.png +0 -0
  575. package/templates/app/default/assets/required{m}/ui{tps}/btn_b/over.png +0 -0
  576. package/templates/app/default/assets/required{m}/ui{tps}/btn_b/up.png +0 -0
  577. package/templates/app/default/assets/required{m}/ui{tps}/joystick/base.png +0 -0
  578. package/templates/app/default/assets/required{m}/ui{tps}/joystick/handle.png +0 -0
  579. package/templates/app/default/assets/required{m}/wordmark.svg +1 -0
  580. package/templates/app/default/assets/spine{m}/spineboy-pro.png +0 -0
  581. package/templates/app/default/assets/spine{m}/spineboy-pro.skel +0 -0
  582. package/templates/app/default/assets/spine{m}/spineboy-pro{fix}.atlas +94 -0
  583. package/templates/app/default/caper.config.ts +60 -0
  584. package/templates/app/default/index.html +23 -0
  585. package/templates/app/default/package.template.json +17 -0
  586. package/templates/app/default/public/favicon.ico +0 -0
  587. package/templates/app/default/src/__APPLICATION_NAME__.ts +3 -0
  588. package/templates/app/default/src/main.ts +9 -0
  589. package/templates/app/default/src/scenes/Base.ts +39 -0
  590. package/templates/app/default/src/scenes/Game.ts +34 -0
  591. package/templates/app/default/src/scenes/Splash.ts +70 -0
  592. package/templates/app/default/src/scenes/Start.ts +90 -0
  593. package/templates/app/default/src/utils/Constants.ts +3 -0
  594. package/templates/app/default/tsconfig.json +1 -0
  595. package/templates/plugin/package.template.json +33 -0
  596. package/templates/plugin/src/Plugin.template.ts +24 -0
  597. package/templates/plugin/src/index.template.ts +3 -0
  598. package/templates/plugin/tsconfig.template.json +43 -0
  599. package/templates/plugin/vite-env.template.d.ts +16 -0
  600. package/templates/plugin/vite.config.template.ts +19 -0
@@ -0,0 +1,158 @@
1
+ import fs from 'node:fs';
2
+
3
+ // Default voiceover attributes
4
+ const defaultVoice = 'en-US-Wavenet-D'; // Example Google voice ID
5
+ const defaultGender = 'female';
6
+ const defaultLanguage = 'en-US';
7
+ const defaultCaption = 'Y';
8
+
9
+ // Function to load existing CSV data into a map
10
+ function loadExistingCsv(filePath) {
11
+ const csvMap = new Map();
12
+ if (fs.existsSync(filePath)) {
13
+ const csvData = fs.readFileSync(filePath, 'utf8');
14
+ const lines = csvData.split('\n');
15
+ lines.forEach((line, index) => {
16
+ if (line && index > 0) {
17
+ // Skip header
18
+ const parts = line.split('\t'); // Use tab to split
19
+ const filename = parts[0];
20
+ csvMap.set(filename, parts);
21
+ }
22
+ });
23
+ }
24
+ return csvMap;
25
+ }
26
+
27
+ function updateOrAddLine(filename, lineText, csvMap) {
28
+ lineText = stripHtmlTags(lineText);
29
+
30
+ if (csvMap.has(filename)) {
31
+ const parts = csvMap.get(filename);
32
+ parts[1] = lineText; // Update the line text
33
+ } else {
34
+ // Create new line with defaults if they are not present
35
+ const newLine = [filename, lineText, defaultVoice, defaultGender, defaultLanguage, defaultCaption];
36
+ csvMap.set(filename, newLine);
37
+ }
38
+ }
39
+
40
+ function stripHtmlTags(str) {
41
+ // Replace <strong> tag with asterisks for emphasis
42
+ str = str.replace(/<strong>/g, '*');
43
+ str = str.replace(/<\/strong>/g, '*');
44
+
45
+ // Replace <em> tag with underscores for emphasis
46
+ str = str.replace(/<em>/g, '_');
47
+ str = str.replace(/<\/em>/g, '_');
48
+
49
+ // Remove other HTML tags
50
+ str = str.replace(/<[^>]*>/g, '');
51
+ return str;
52
+ }
53
+
54
+ // Function to parse the object and create CSV content
55
+ function parseOrUpdateVoiceoverData(data, existingCsvMap) {
56
+ let csvContent = 'FILENAME\tLINE\tSCRATCH_VOICE\tSCRATCH_GENDER\tSCRATCH_LANGUAGE\tCAPTION\n';
57
+
58
+ for (const key in data) {
59
+ const value = data[key];
60
+
61
+ // Handle replace object structure
62
+ if (value && typeof value === 'object' && 'replace' in value) {
63
+ const { replace, replaceOpts } = value;
64
+
65
+ // Parse replacement options
66
+ if (replaceOpts && replaceOpts.startsWith('[') && replaceOpts.endsWith(']')) {
67
+ const options = replaceOpts.slice(1, -1).split('|');
68
+
69
+ // Generate a line for each replacement option
70
+ options.forEach((option, index) => {
71
+ const filename = `${key}_${index}`;
72
+ const replacedText = replace.replace(/\{[^}]+\}/, option.trim());
73
+ updateOrAddLine(filename, replacedText, existingCsvMap);
74
+ });
75
+ } else {
76
+ // If no valid replaceOpts, just use the replace text as is
77
+ updateOrAddLine(key, replace, existingCsvMap);
78
+ }
79
+ }
80
+ // Handle existing string array format
81
+ else if (typeof value === 'string' && value.startsWith('[') && value.endsWith(']')) {
82
+ const options = value.slice(1, -1).split('|');
83
+ options.forEach((option, index) => {
84
+ const filename = `${key}_${index}`;
85
+ updateOrAddLine(filename, option, existingCsvMap);
86
+ });
87
+ }
88
+ // Handle simple string
89
+ else if (typeof value === 'string') {
90
+ updateOrAddLine(key, value, existingCsvMap);
91
+ }
92
+ }
93
+
94
+ existingCsvMap.forEach((parts) => {
95
+ csvContent += parts.join('\t') + '\n';
96
+ });
97
+
98
+ return csvContent;
99
+ }
100
+
101
+ export async function generateVoiceoverCSV(inputDirs, outputDir) {
102
+ console.log('inputDirs', inputDirs);
103
+ // Split input directories and trim whitespace
104
+ const directories = inputDirs.split(',').map((dir) => dir.trim());
105
+
106
+ // Process each directory
107
+ for (const inputDir of directories) {
108
+ // Skip if directory doesn't exist
109
+ if (!fs.existsSync(inputDir)) {
110
+ console.warn(`Warning: Directory ${inputDir} does not exist, skipping...`);
111
+ continue;
112
+ }
113
+
114
+ const files = fs.readdirSync(inputDir).filter((file) => !file.startsWith('.'));
115
+ for (const file of files) {
116
+ const filePath = `${inputDir}/${file}`;
117
+ console.log('filePath', filePath);
118
+ // only process files that end with .js or .ts or .json
119
+ if (!file.endsWith('.js') && !file.endsWith('.ts') && !file.endsWith('.json')) {
120
+ console.log('Skipping file', file);
121
+ continue;
122
+ }
123
+
124
+ let fileData = fs.readFileSync(filePath, 'utf-8');
125
+ // if the file is a js or ts file, extract a JSON object by finding the first occurrence of '{'
126
+ if (file.endsWith('.js') || file.endsWith('.ts')) {
127
+ const startIndex = fileData.indexOf('{');
128
+ const endIndex = fileData.lastIndexOf('}');
129
+ fileData = fileData.slice(startIndex, endIndex + 1);
130
+ // ensure it's valid json by eliminating single quotes and comments
131
+ fileData = fileData
132
+ .replace(/\/\/.*/g, '')
133
+ .replace(/\/\*.*\*\//g, '')
134
+ .replace(/'/g, '"');
135
+ // wrap the keys in double quotes
136
+ fileData = fileData.replace(/(\w+):/g, '"$1":');
137
+ // remove trailing commas
138
+ fileData = fileData.replace(/,(\s*})/g, '$1');
139
+ }
140
+ // parse the JSON object
141
+ fileData = JSON.parse(fileData);
142
+
143
+ // Use the directory name as part of the output filename to avoid conflicts
144
+ const dirName = inputDir.split('/').filter(Boolean).pop() || 'default';
145
+ const csvFilePath = `${outputDir}/${dirName}_${file.replace(/\.\w+$/, '')}.csv`;
146
+
147
+ const existingCsvMap = loadExistingCsv(csvFilePath);
148
+ // generate the CSV content
149
+ const csvContent = parseOrUpdateVoiceoverData(fileData, existingCsvMap);
150
+
151
+ if (!fs.existsSync(outputDir)) {
152
+ fs.mkdirSync(outputDir, { recursive: true });
153
+ }
154
+ // write the CSV content to the file
155
+ fs.writeFileSync(csvFilePath, csvContent);
156
+ }
157
+ }
158
+ }
@@ -0,0 +1 @@
1
+ export { generateVoiceoverCSV } from './generateVoiceoverCSV.mjs';
package/cli.mjs ADDED
@@ -0,0 +1,157 @@
1
+ #!/usr/bin/env node
2
+
3
+ import { bgRed, bold, green, red, white } from 'kleur/colors';
4
+
5
+ import fs from 'node:fs';
6
+ import process from 'node:process';
7
+ import { add } from './cli/add.mjs';
8
+ import { generateCaptions } from './cli/audio/cc.mjs';
9
+ import { compress } from './cli/audio/index.mjs';
10
+ import { create } from './cli/create.mjs';
11
+ import { installPeerDeps } from './cli/install-peerdeps.mjs';
12
+ import { update } from './cli/update.mjs';
13
+ import { runBuild, runPreview, startDevServer } from './cli/vite.mjs';
14
+ import { generateVoiceoverCSV } from './cli/voiceover/index.mjs';
15
+
16
+ const currentVersion = process.versions.node;
17
+ const requiredMajorVersion = parseInt(currentVersion.split('.')[0], 10);
18
+ const minimumMajorVersion = 18;
19
+
20
+ if (requiredMajorVersion < minimumMajorVersion) {
21
+ console.error(`Node.js v${currentVersion} is out of date and unsupported!`);
22
+ console.error(`Please use Node.js v${minimumMajorVersion} or higher.`);
23
+ process.exit(1);
24
+ }
25
+
26
+ const { version } = JSON.parse(fs.readFileSync(new URL('./package.json', import.meta.url), 'utf-8'));
27
+
28
+ const args = process.argv.slice(2);
29
+
30
+ const hr = () => {
31
+ return console.log(bold(green('-'.repeat(80))));
32
+ };
33
+
34
+ if (!(!args[0] || args[0] === 'version')) {
35
+ console.log(bold(green(`Caper ${version}`)));
36
+ }
37
+
38
+ if (args.length === 0) {
39
+ console.log(bold(green('Caper - Please provide a subcommand.')));
40
+ process.exit(1);
41
+ }
42
+
43
+ let pkg, newVersion, voInputDir, voCSVDirectory, audioDirectory, captionsCSVDirectory, captionsOutputDirectory;
44
+
45
+ switch (args[0]) {
46
+ case 'install':
47
+ await installPeerDeps();
48
+ break;
49
+ case 'version':
50
+ break;
51
+ case 'dev':
52
+ case 'start':
53
+ await startDevServer();
54
+ break;
55
+ case 'build':
56
+ await runBuild();
57
+ break;
58
+ case 'preview':
59
+ await runPreview();
60
+ break;
61
+ case 'add':
62
+ await add(args.slice(1));
63
+ break;
64
+ case 'create': {
65
+ let packageManager = 'npm'; // Default to npm
66
+ let projectPath = '.'; // Default to current directory
67
+
68
+ // Parse arguments
69
+ for (let i = 1; i < args.length; i++) {
70
+ if (args[i] === '--use-yarn') {
71
+ packageManager = 'yarn';
72
+ } else if (args[i] === '--use-pnpm') {
73
+ packageManager = 'pnpm';
74
+ } else if (!args[i].startsWith('--')) {
75
+ projectPath = args[i];
76
+ }
77
+ }
78
+ await create(projectPath, packageManager);
79
+ break;
80
+ }
81
+ case 'update':
82
+ hr();
83
+ console.log(bold(green(`Updating Caper to the latest version...`)));
84
+ await update();
85
+ pkg = JSON.parse(fs.readFileSync(new URL('./package.json', import.meta.url), 'utf-8'));
86
+ newVersion = pkg.version;
87
+ console.log(`${bold(green(`Updated Caper to version ${newVersion}`))}`);
88
+ hr();
89
+ break;
90
+ case 'vo':
91
+ hr();
92
+ switch (args[1]) {
93
+ case 'generate':
94
+ console.log(bold(green(`Caper is generating a new voiceover file...`)));
95
+ voInputDir = args[2] || './src/locales';
96
+ voCSVDirectory = args[3] || './src/assets/audio/vo/csv';
97
+ try {
98
+ await generateVoiceoverCSV(voInputDir, voCSVDirectory);
99
+ console.log(
100
+ bold(green(`Caper has finished generating your voiceover CSV(s)! Find them in "${voCSVDirectory}."`)),
101
+ );
102
+ } catch (e) {
103
+ console.log(e);
104
+ console.error(bold(bgRed(white(`Error generating voiceover CSV(s):`))), red(e));
105
+ }
106
+ break;
107
+ default:
108
+ console.error(bold(bgRed(white(`Unknown VO command: "${args[1]}".`))), red(`Please use "generate".`));
109
+ break;
110
+ }
111
+ hr();
112
+ break;
113
+ case 'audio':
114
+ hr();
115
+ switch (args[1]) {
116
+ case 'compress':
117
+ audioDirectory = args[2] || './src/assets/audio';
118
+ console.log(bold(green(`Caper is compressing your audio files...`)));
119
+ try {
120
+ await compress(audioDirectory);
121
+ } catch (e) {
122
+ console.error(red(`Error compressing your audio files: ${e}`));
123
+ }
124
+ console.log(
125
+ bold(green(`Caper has finished compressing your audio files! Find them in "${audioDirectory}/output."`)),
126
+ );
127
+ break;
128
+ case 'captions':
129
+ captionsCSVDirectory = args[2] || './src/assets/audio/captions';
130
+ captionsOutputDirectory = args[3] || './src/assets/json';
131
+ console.log(bold(green(`Caper is preparing your closed captioning files...`)));
132
+ try {
133
+ await generateCaptions(captionsCSVDirectory, captionsOutputDirectory);
134
+ console.log(
135
+ bold(
136
+ green(
137
+ `Caper has finished generating your closed captioning files! Find them in "${captionsOutputDirectory}/cc.json"`,
138
+ ),
139
+ ),
140
+ );
141
+ } catch (e) {
142
+ console.error(bold(bgRed(white(`Error generating captions:`))), red(e));
143
+ }
144
+ break;
145
+ default:
146
+ console.error(
147
+ bold(bgRed(white(`Unknown audio command: "${args[1]}".`))),
148
+ red(`Please use "compress" or "captions".`),
149
+ );
150
+ break;
151
+ }
152
+ hr();
153
+ break;
154
+ default:
155
+ console.error(red(bold(`Caper - Unknown subcommand: ${args[0]}`)));
156
+ process.exit(1);
157
+ }
package/client.d.ts ADDED
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Ambient types for caper app projects. Add "@caperjs/core/client" to the
3
+ * "types" array of your tsconfig.
4
+ */
5
+ declare module 'caper-runtime';
6
+ declare const __CAPER_APP_NAME: string;
7
+ declare const __CAPER_APP_VERSION: string;
@@ -0,0 +1,212 @@
1
+ import { AssetPack, Logger } from '@assetpack/core';
2
+ import { pixiPipes } from '@assetpack/core/pixi';
3
+ import fs from 'node:fs';
4
+ import process from 'node:process';
5
+ import path from 'path';
6
+
7
+ // Check if user config exists (synchronously)
8
+ function hasUserAssetpackConfig() {
9
+ const configPath = path.join(process.cwd(), '.assetpack.mjs');
10
+ try {
11
+ return fs.existsSync(configPath);
12
+ } catch {
13
+ return false;
14
+ }
15
+ }
16
+
17
+ // Async function to load user config
18
+ async function loadUserAssetpackConfig() {
19
+ if (!hasUserAssetpackConfig()) {
20
+ return null;
21
+ }
22
+
23
+ try {
24
+ const configPath = path.join(process.cwd(), '.assetpack.mjs');
25
+ const userConfig = await import(configPath);
26
+ Logger.info('Caper assetpack plugin:: Using user assetpack config from .assetpack.mjs');
27
+ return userConfig.default || userConfig;
28
+ } catch (error) {
29
+ Logger.error('Caper assetpack plugin:: Error loading user assetpack config:', error);
30
+ return null;
31
+ }
32
+ }
33
+
34
+ const cwd = process.cwd();
35
+
36
+ /**
37
+ * AssetPack pipe that reads a {weight=<value>} filename tag and converts
38
+ * it into the `weights` array that PixiJS's loadWebFont expects.
39
+ *
40
+ * Usage: name the font file with both tags, e.g.
41
+ * SpaceGrotesk-Bold{family=SpaceGrotesk}{weight=bold}{wf}.ttf
42
+ *
43
+ * AssetPack extracts `weight` as a scalar; PixiJS needs `weights` as a
44
+ * string[]. This pipe bridges the two. Runs before the webfont pipe so
45
+ * the metadata is in place before any transform.
46
+ */
47
+ function fontWeights() {
48
+ return {
49
+ folder: false,
50
+ name: 'font-weights',
51
+ defaultOptions: null,
52
+ tags: { weight: 'weight' },
53
+ test(asset) {
54
+ return asset.allMetaData[this.tags.weight] !== undefined;
55
+ },
56
+ async transform(asset) {
57
+ const raw = asset.allMetaData[this.tags.weight];
58
+ asset.metaData.weights = (Array.isArray(raw) ? raw : [raw]).map(String);
59
+ return [asset];
60
+ },
61
+ };
62
+ }
63
+
64
+ const defaultManifestUrl = 'assets.json';
65
+
66
+ const defaultPixiPipesConfig = {
67
+ // Retina-first: raw art is authored at 2x native game pixels. AssetPack
68
+ // treats the source as the largest resolution listed, so this emits @2x
69
+ // plus downscaled 1x and 0.5x. Apps whose art is authored at 1x override
70
+ // `resolutions` in their .assetpack.mjs (or tag individual assets {fix}).
71
+ resolutions: { high: 2, default: 1, low: 0.5 },
72
+ // Quality-first compression: the upstream webp default (quality 80, lossy
73
+ // alpha) rings on anti-aliased UI edges, and browsers load .webp over .png.
74
+ // alphaQuality 100 makes the alpha channel lossless (kills edge halos);
75
+ // quality 92 + smartSubsample tame RGB bleed; png quality 100 skips palette
76
+ // quantization on the fallback. effort 6 only costs prod builds — dev
77
+ // rebuilds override the effort knobs below.
78
+ compression: {
79
+ jpg: true,
80
+ png: { quality: 100 },
81
+ webp: { quality: 92, alphaQuality: 100, smartSubsample: true, effort: 6 },
82
+ },
83
+ texturePacker: {
84
+ nameStyle: 'relative',
85
+ removeFileExtension: true,
86
+ texturePacker: { nameStyle: 'relative', removeFileExtension: true },
87
+ },
88
+ audio: {},
89
+ webfont: {},
90
+ manifest: { trimExtensions: true, createShortcuts: true, output: defaultManifestUrl },
91
+ };
92
+
93
+ // Effort/CPU knobs only — quality options are untouched, so dev output pixels
94
+ // match production; dev rebuilds just spend less time squeezing bytes.
95
+ const devCompressionEffort = {
96
+ png: { effort: 1, compressionLevel: 1 },
97
+ webp: { effort: 0 },
98
+ };
99
+
100
+ function devCompression(compression) {
101
+ if (!compression) return compression;
102
+ const result = { ...compression };
103
+ for (const [format, effort] of Object.entries(devCompressionEffort)) {
104
+ const current = result[format];
105
+ if (current === false) continue;
106
+ result[format] = { ...(current === true ? {} : current), ...effort };
107
+ }
108
+ return result;
109
+ }
110
+
111
+ export const assetpackConfig = (manifestUrl = defaultManifestUrl, pixiPipesConfig = {}, cacheBust) => {
112
+ pixiPipesConfig = { ...defaultPixiPipesConfig, ...pixiPipesConfig };
113
+
114
+ if (cacheBust !== undefined) {
115
+ pixiPipesConfig.cacheBust = cacheBust;
116
+ }
117
+ // NODE_ENV is read at call time, not module load: under the caper CLI this
118
+ // module is imported before vite's resolveConfig sets NODE_ENV, whereas
119
+ // assetpackConfig runs after (configResolved / user .assetpack.mjs import).
120
+ if (pixiPipesConfig.cacheBust === undefined) {
121
+ pixiPipesConfig.cacheBust = process.env.NODE_ENV === 'production';
122
+ }
123
+ if (process.env.NODE_ENV !== 'production') {
124
+ pixiPipesConfig.compression = devCompression(pixiPipesConfig.compression);
125
+ }
126
+ const pipes = pixiPipes({ ...pixiPipesConfig });
127
+
128
+ // Insert fontWeights before the webfont pipe so that the {weight} tag
129
+ // is converted to a weights[] array before webfont processes the asset.
130
+ const wfIdx = pipes.findIndex((p) => p.name === 'webfont');
131
+ pipes.splice(wfIdx >= 0 ? wfIdx : 0, 0, fontWeights());
132
+
133
+ return {
134
+ manifestUrl,
135
+ entry: './assets',
136
+ logLevel: 'info',
137
+ pipes,
138
+ };
139
+ };
140
+
141
+ export default assetpackConfig;
142
+
143
+ export function assetpackPlugin(manifestUrl = defaultManifestUrl, pixiPipesConfig = defaultPixiPipesConfig) {
144
+ let mode;
145
+ let ap;
146
+ let apConfig;
147
+ let isBuilding = false;
148
+ let server;
149
+
150
+ async function getConfig() {
151
+ if (!apConfig) {
152
+ const userConfig = await loadUserAssetpackConfig();
153
+ apConfig = userConfig || assetpackConfig(manifestUrl, pixiPipesConfig);
154
+ }
155
+ }
156
+
157
+ return {
158
+ name: 'vite-plugin-assetpack',
159
+ async configResolved(resolvedConfig) {
160
+ mode = resolvedConfig.command;
161
+ if (!resolvedConfig.publicDir) return;
162
+ await getConfig();
163
+ if (apConfig.output) return;
164
+ const publicDir = resolvedConfig.publicDir.replace(cwd, '');
165
+ const outputPath = path.join(publicDir, 'assets');
166
+ apConfig.output = path.isAbsolute(publicDir)
167
+ ? path.join('.', outputPath).replace(/\\/g, '/')
168
+ : `./${outputPath}`.replace(/\\/g, '/');
169
+ // on windows, for some reason, the output path is ./C:/Users/.../assets
170
+ // so we need to remove the first two characters
171
+ if (apConfig.output.indexOf('./C') === 0) {
172
+ apConfig.output = apConfig.output.substr(2);
173
+ }
174
+ },
175
+ buildStart: async () => {
176
+ if (isBuilding) return;
177
+ isBuilding = true;
178
+ // Load config if not already loaded
179
+ await getConfig();
180
+ if (mode === 'serve') {
181
+ if (ap) return;
182
+ ap = new AssetPack(apConfig);
183
+ // Vite does not reload the page when files under publicDir change, so
184
+ // without this the browser keeps serving stale assets after a rebuild.
185
+ // One reload per completed rebuild batch; the initial pass is skipped
186
+ // (the server isn't listening yet).
187
+ let initial = true;
188
+ await ap.watch(() => {
189
+ if (initial) {
190
+ initial = false;
191
+ return;
192
+ }
193
+ const hot = server?.environments?.client?.hot ?? server?.ws;
194
+ hot?.send({ type: 'full-reload', path: '*' });
195
+ Logger.info('Caper assetpack plugin:: assets rebuilt, reloading page');
196
+ });
197
+ } else {
198
+ await new AssetPack(apConfig).run();
199
+ }
200
+ isBuilding = false;
201
+ },
202
+ configureServer(devServer) {
203
+ server = devServer;
204
+ },
205
+ buildEnd: async () => {
206
+ if (ap) {
207
+ await ap.stop();
208
+ ap = undefined;
209
+ }
210
+ },
211
+ };
212
+ }
@@ -0,0 +1,28 @@
1
+ {
2
+ "compilerOptions": {
3
+ "rootDir": "${configDir}",
4
+ "baseUrl": "${configDir}",
5
+ "paths": {
6
+ "@/*": ["${configDir}/src/*"]
7
+ },
8
+ "types": ["vite/client", "vite-plugin-pwa/client", "@caperjs/core/client"],
9
+ "outDir": "${configDir}/dist",
10
+ "target": "ESNext",
11
+ "useDefineForClassFields": true,
12
+ "strictPropertyInitialization": false,
13
+ "module": "ESNext",
14
+ "lib": ["ESNext", "DOM"],
15
+ "moduleResolution": "bundler",
16
+ "strict": true,
17
+ "resolveJsonModule": true,
18
+ "isolatedModules": true,
19
+ "esModuleInterop": true,
20
+ "noEmit": true,
21
+ "noUnusedLocals": true,
22
+ "noUnusedParameters": true,
23
+ "noImplicitReturns": true,
24
+ "skipLibCheck": true
25
+ },
26
+ "include": ["${configDir}/caper.config.ts", "${configDir}/src", "${configDir}/src/**/*.d.ts"],
27
+ "exclude": ["${configDir}/.cache", "${configDir}/node_modules", "${configDir}/dist"]
28
+ }