@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
package/cli/create.mjs ADDED
@@ -0,0 +1,351 @@
1
+ #!/usr/bin/env node
2
+ import * as p from '@clack/prompts';
3
+ import { bold, cyan } from 'kleur/colors';
4
+ import fs from 'node:fs';
5
+ import path from 'node:path';
6
+ import process from 'node:process';
7
+ import { promisify } from 'node:util';
8
+ import shell from 'shelljs';
9
+ import { copy, dist, mkdirp, package_manager } from './utils.mjs';
10
+
11
+ let packageManager = package_manager;
12
+
13
+ const AVAILABLE_PLUGINS = [
14
+ {
15
+ name: '@caperjs/plugin-rollbar',
16
+ displayName: 'Rollbar',
17
+ description: 'Rollbar error tracking and monitoring',
18
+ },
19
+ {
20
+ name: '@caperjs/plugin-rive',
21
+ displayName: 'Rive',
22
+ description: 'Rive animation integration',
23
+ },
24
+ {
25
+ name: '@caperjs/plugin-colyseus',
26
+ displayName: 'Colyseus',
27
+ description: 'Colyseus multiplayer game server integration',
28
+ },
29
+ {
30
+ name: '@caperjs/plugin-google-analytics',
31
+ displayName: 'Google Analytics',
32
+ description: 'Google Analytics integration',
33
+ },
34
+ {
35
+ name: '@caperjs/plugin-crunch',
36
+ displayName: 'Crunch Physics',
37
+ description: 'Crunch physics engine integration',
38
+ },
39
+ {
40
+ name: '@caperjs/plugin-firebase',
41
+ displayName: 'Firebase',
42
+ description: 'Firebase plugin for cloud data persistence',
43
+ },
44
+ ];
45
+
46
+ /**
47
+ * Ensures a version string has the ^ prefix unless it's a URL or specific commit
48
+ * @param {string} version
49
+ * @returns {string}
50
+ */
51
+ function ensureCaretPrefix(version) {
52
+ // Skip if version is a URL, git repo, or specific commit
53
+ if (version.includes('://') || version.includes('github:') || version.includes('#')) {
54
+ return version;
55
+ }
56
+ // Skip if version already has a prefix
57
+ if (version.startsWith('^') || version.startsWith('~') || version.startsWith('>') || version.startsWith('<')) {
58
+ return version;
59
+ }
60
+ return `^${version}`;
61
+ }
62
+
63
+ async function write(cwd, options) {
64
+ await mkdirp(cwd);
65
+ await write_template_files(
66
+ cwd,
67
+ options.template,
68
+ options.applicationNameForPkg,
69
+ options.applicationName,
70
+ options.defaultName,
71
+ options.plugins,
72
+ );
73
+ }
74
+
75
+ function getFiles(dirPath) {
76
+ let files = [];
77
+
78
+ const dirFiles = fs.readdirSync(dirPath, { withFileTypes: true });
79
+ dirFiles.forEach((file) => {
80
+ const name = file.name;
81
+ if (fs.statSync(path.join(dirPath, name)).isDirectory()) {
82
+ files = files.concat(getFiles(path.join(dirPath, name)));
83
+ } else {
84
+ files.push({ name: path.join(dirPath, name) });
85
+ }
86
+ });
87
+
88
+ return files;
89
+ }
90
+
91
+ /**
92
+ * @param {string} template
93
+ * @param {string} applicationNameForPkg
94
+ * @param {string} name
95
+ * @param {string} applicationName
96
+ * @param {string} cwd
97
+ * @param {string[]} plugins
98
+ */
99
+ function write_template_files(cwd, template, applicationNameForPkg, applicationName, defaultName, plugins) {
100
+ const dir = dist(`templates/${template}`);
101
+ copy(`${dir}/package.template.json`, `${cwd}/package.json`);
102
+
103
+ const dirPath = `${dir}`;
104
+ const files = getFiles(dirPath);
105
+ files.forEach((file) => {
106
+ const dest = path.join(cwd, file.name.replace(dirPath, ''));
107
+ copy(file.name, dest);
108
+ });
109
+
110
+ let pkgJson = JSON.parse(fs.readFileSync(`${cwd}/package.json`, 'utf-8'));
111
+ let mgr = packageManager;
112
+ if (mgr.indexOf('npm') === 0) {
113
+ mgr = 'npm run';
114
+ }
115
+ pkgJson.name = applicationNameForPkg;
116
+ pkgJson.scripts = Object.fromEntries(
117
+ Object.entries(pkgJson.scripts || {}).map(([key, value]) => [key, value.replace(/~PACKAGE_MANAGER~/g, mgr)]),
118
+ );
119
+
120
+ // Get the framework version from package.json
121
+ const frameworkPkg = JSON.parse(fs.readFileSync(dist('package.json'), 'utf-8'));
122
+
123
+ // Set the caper dependency version
124
+ if (pkgJson.dependencies && pkgJson.dependencies['@caperjs/core']) {
125
+ pkgJson.dependencies['@caperjs/core'] = ensureCaretPrefix(frameworkPkg.version);
126
+ }
127
+
128
+ // Add framework peer dependencies to the template's peerDependencies
129
+ if (frameworkPkg.peerDependencies) {
130
+ if (!pkgJson.peerDependencies) {
131
+ pkgJson.peerDependencies = {};
132
+ }
133
+
134
+ // Add each peer dependency with its version
135
+ Object.entries(frameworkPkg.peerDependencies).forEach(([name, version]) => {
136
+ if (!pkgJson.peerDependencies[name]) {
137
+ pkgJson.peerDependencies[name] = ensureCaretPrefix(version);
138
+ }
139
+ });
140
+ }
141
+
142
+ // Write the initial package.json with template replacements
143
+ fs.writeFileSync(`${cwd}/package.json`, JSON.stringify(pkgJson, null, 2));
144
+
145
+ // find index.html and replace ~NAME~ with the application's origin al name
146
+ const index_file = `${cwd}/index.html`;
147
+ let index_contents = fs.readFileSync(index_file, 'utf-8');
148
+ index_contents = index_contents.replace(/~NAME~/g, defaultName);
149
+ fs.writeFileSync(index_file, index_contents, 'utf-8');
150
+
151
+ // find readme.md and replace ~NAME~ with the application's origin al name
152
+ const readme_file = `${cwd}/README.md`;
153
+ let readme_contents = fs.readFileSync(readme_file, 'utf-8');
154
+ readme_contents = readme_contents.replace(/~NAME~/g, defaultName);
155
+ readme_contents = readme_contents.replace(/~PACKAGE_MANAGER~/g, mgr);
156
+ fs.writeFileSync(readme_file, readme_contents, 'utf-8');
157
+
158
+ // find __APPLICATION_NAME__.ts and replace it with the application name, then delete ~Application.ts
159
+ const app_file = `${cwd}/src/__APPLICATION_NAME__.ts`;
160
+ const app_contents = fs.readFileSync(app_file, 'utf-8');
161
+ fs.writeFileSync(`${cwd}/src/${applicationName}.ts`, app_contents, 'utf-8');
162
+ fs.rmSync(app_file);
163
+
164
+ // recursively loop through all the .ts files in the src directory and replace __APPLICATION_NAME__ with the application name
165
+ const tsFiles = getFiles(`${cwd}/src`);
166
+ tsFiles.forEach((file) => {
167
+ const contents = fs.readFileSync(file.name, 'utf-8');
168
+ fs.writeFileSync(file.name, contents.replace(/__APPLICATION_NAME__/g, applicationName));
169
+ });
170
+
171
+ // Update caper.config.ts with selected plugins and storage adapters
172
+ const configPath = `${cwd}/caper.config.ts`;
173
+ let configContents = fs.readFileSync(configPath, 'utf-8');
174
+
175
+ if (plugins && plugins.length > 0) {
176
+ // Convert plugin names to config format
177
+ const pluginConfigs = plugins.map((pluginName) => {
178
+ // Remove @caperjs/plugin- prefix
179
+ const shortName = pluginName.replace('@caperjs/plugin-', '');
180
+ return `['${shortName}', { autoLoad: false }]`;
181
+ });
182
+
183
+ // Replace empty plugins array with configured plugins
184
+ configContents = configContents.replace(
185
+ /plugins:\s*\[\s*\]/,
186
+ `plugins: [\n ${pluginConfigs.join(',\n ')}\n ]`,
187
+ );
188
+ }
189
+
190
+ fs.writeFileSync(configPath, configContents.replace(/__APPLICATION_NAME__/g, applicationName), 'utf-8');
191
+
192
+ // Add selected plugins to dependencies
193
+ if (plugins && plugins.length > 0) {
194
+ if (!pkgJson.dependencies) {
195
+ pkgJson.dependencies = {};
196
+ }
197
+
198
+ plugins.forEach((pluginName) => {
199
+ const plugin = AVAILABLE_PLUGINS.find((p) => p.name === pluginName);
200
+ if (plugin) {
201
+ // Use the framework version as the plugin version
202
+ pkgJson.dependencies[pluginName] = ensureCaretPrefix(frameworkPkg.version);
203
+ }
204
+ });
205
+ }
206
+
207
+ // Write the final package.json with all dependencies
208
+ fs.writeFileSync(`${cwd}/package.json`, JSON.stringify(pkgJson, null, 2));
209
+
210
+ try {
211
+ fs.rmSync(`${cwd}/.meta.json`);
212
+ fs.rmSync(`${cwd}/package.template.json`);
213
+ // create an .npmrc file with the following content:
214
+ // shamefully-hoist=true
215
+ fs.writeFileSync(`${cwd}/.npmrc`, 'shamefully-hoist=true');
216
+ } catch (e) {
217
+ console.log('Failed to remove .meta.json and package.template.json due to:', e);
218
+ }
219
+ }
220
+
221
+ export async function create(cwd = '.', packageManagerOverride) {
222
+ if (packageManagerOverride) {
223
+ packageManager = packageManagerOverride;
224
+ }
225
+ const dir = dist(``);
226
+ const pkg = JSON.parse(fs.readFileSync(`${dir}/package.json`, 'utf-8'));
227
+ p.intro(
228
+ `Caper Create (v${pkg.version}) - This utility will walk you through creating a new Caper project.`,
229
+ );
230
+
231
+ if (cwd === '.') {
232
+ const dir = await p.text({
233
+ message: 'Where should we create your project?',
234
+ placeholder: '(Enter to use current directory)',
235
+ });
236
+
237
+ if (p.isCancel(dir)) {
238
+ process.exit(1);
239
+ }
240
+
241
+ if (dir) {
242
+ cwd = /** @type {string} */ (dir);
243
+ }
244
+ }
245
+
246
+ if (fs.existsSync(cwd)) {
247
+ if (fs.readdirSync(cwd).length > 0) {
248
+ const force = await p.confirm({
249
+ message: 'Directory not empty. Continue?',
250
+ initialValue: false,
251
+ });
252
+
253
+ // bail if `force` is `false` or the user cancelled with Ctrl-C
254
+ if (force !== true) {
255
+ process.exit(1);
256
+ }
257
+ }
258
+ }
259
+
260
+ const options = await p.group({
261
+ template: () =>
262
+ p.select({
263
+ message: 'Which template?',
264
+ options: fs
265
+ .readdirSync(dist('templates/app'))
266
+ .map((dir) => {
267
+ const meta_file = dist(`templates/app/${dir}/.meta.json`);
268
+ const { title, description } = JSON.parse(fs.readFileSync(meta_file, 'utf8'));
269
+
270
+ return {
271
+ label: title,
272
+ hint: description,
273
+ value: `app/${dir}`,
274
+ };
275
+ })
276
+ .filter(Boolean),
277
+ }),
278
+ plugins: () =>
279
+ p.multiselect({
280
+ required: false,
281
+ message: 'Which plugins would you like to add (Enter to skip)?',
282
+ options: AVAILABLE_PLUGINS.map((plugin) => ({
283
+ label: `${plugin.displayName} - ${plugin.description}`,
284
+ value: plugin.name,
285
+ })),
286
+ }),
287
+ });
288
+
289
+ // get a name from the cwd provided
290
+ const name = path.basename(path.resolve(cwd));
291
+
292
+ const defaultName = name
293
+ .replace(/\s+/g, '-')
294
+ .replace('_', '-')
295
+ .toLowerCase()
296
+ .split('-')
297
+ .map((word) => word.charAt(0).toUpperCase() + word.slice(1))
298
+ .join('');
299
+
300
+ // ask for a name if the user used "." or didn't provide one
301
+ let appName = await p.text({
302
+ message: 'What should we call your project?',
303
+ placeholder: `(Enter to use '${defaultName}')`,
304
+ });
305
+
306
+ if (!appName) {
307
+ appName = name;
308
+ }
309
+
310
+ // derive an application name from the project name by camel casing it
311
+ const applicationNameForPkg = appName.replace(/\s+/g, '-').replace('_', '-').toLowerCase();
312
+
313
+ const applicationName =
314
+ applicationNameForPkg.indexOf('-') === -1
315
+ ? appName
316
+ : applicationNameForPkg
317
+ .split('-')
318
+ .map((word) => word.charAt(0).toUpperCase() + word.slice(1))
319
+ .join('');
320
+
321
+ await write(cwd, {
322
+ name,
323
+ applicationNameForPkg,
324
+ applicationName,
325
+ defaultName,
326
+ template: /** @type {'default' | 'react'} */ (options.template),
327
+ plugins: options.plugins,
328
+ });
329
+
330
+ const s = p.spinner();
331
+ s.start(`Installing dependencies...`);
332
+ const exec = promisify(shell.exec);
333
+ await exec(`${packageManager} install`, { silent: true, cwd }).catch(() => ({ code: 1 }));
334
+ // const message = command.code === 0 ? 'Installtion successful' : 'Installation failed';
335
+ s.stop('Installation complete!');
336
+
337
+ let msg = `Next steps:`;
338
+ let i = 1;
339
+
340
+ const relative = path.relative(process.cwd(), cwd);
341
+ if (relative !== '') {
342
+ msg = `${msg}\n ${i++}: ${bold(cyan(`cd ${relative}`))}`;
343
+ }
344
+
345
+ // prettier-ignore
346
+ msg = `${msg}\n ${i++}: ${bold(cyan('git init && git add -A && git commit -m "Initial commit"'))} (optional)`;
347
+ msg = `${msg}\n ${i++}: ${bold(cyan(`${package_manager} run dev`))}`;
348
+ msg = `${msg}\n To close the dev server, hit ${bold(cyan('Ctrl-C'))}`;
349
+
350
+ p.outro(msg);
351
+ }
@@ -0,0 +1,57 @@
1
+ import { execSync } from 'node:child_process';
2
+ import fs from 'node:fs';
3
+ import path from 'node:path';
4
+ import process from 'node:process';
5
+ import { dirname } from 'path';
6
+ import { fileURLToPath } from 'url';
7
+ const __filename = fileURLToPath(import.meta.url);
8
+ const __dirname = dirname(__filename);
9
+ const cwd = process.cwd();
10
+ /**
11
+ *
12
+ * @returns Promise<void>
13
+ */
14
+ export async function installPeerDeps() {
15
+ // Read package.json to get peer dependencies
16
+ const caperPackageJson = JSON.parse(fs.readFileSync(path.resolve(__dirname, '../package.json'), 'utf8'));
17
+ const peerDependencies = caperPackageJson.peerDependencies;
18
+
19
+ if (!peerDependencies) {
20
+ console.log('No peer dependencies found.');
21
+ return 0;
22
+ }
23
+
24
+ const dependencies = Object.entries(peerDependencies)
25
+ .map(([dep, version]) => `${dep}@${version}`)
26
+ .join(' ');
27
+ const packageJson = JSON.parse(fs.readFileSync(path.resolve(cwd, 'package.json'), 'utf8'));
28
+ // Detect package manager
29
+ let packageManager;
30
+
31
+ // check for packageManager entry in package.json
32
+ if (packageJson.packageManager) {
33
+ if (packageJson.packageManager?.includes('yarn')) {
34
+ packageManager = 'yarn add';
35
+ } else if (packageJson.packageManager?.includes('pnpm')) {
36
+ packageManager = 'pnpm add';
37
+ } else if (packageJson.packageManager?.includes('npm')) {
38
+ packageManager = 'npm install';
39
+ }
40
+ }
41
+ if (!packageManager) {
42
+ if (fs.existsSync(path.resolve(cwd, 'yarn.lock'))) {
43
+ packageManager = 'yarn add';
44
+ } else if (fs.existsSync(path.resolve(cwd, 'pnpm-lock.yaml'))) {
45
+ packageManager = 'pnpm add';
46
+ } else if (fs.existsSync(path.resolve(cwd, 'package-lock.json'))) {
47
+ packageManager = 'npm install';
48
+ } else {
49
+ console.log('No lockfile detected. Defaulting to npm.');
50
+ packageManager = 'npm install';
51
+ }
52
+ }
53
+
54
+ // Install peer dependencies
55
+ console.log(`Installing peer dependencies using ${packageManager}`);
56
+ return execSync(`${packageManager} ${dependencies}`, { stdio: 'inherit' });
57
+ }
package/cli/update.mjs ADDED
@@ -0,0 +1,9 @@
1
+ #!/usr/bin/env node
2
+ import {execSync} from 'node:child_process';
3
+ import {package_manager} from './utils.mjs';
4
+
5
+ const install_path = 'github:anthonysapp/caper';
6
+
7
+ export async function update() {
8
+ return execSync(`${package_manager} install ${install_path}`);
9
+ }
package/cli/utils.mjs ADDED
@@ -0,0 +1,81 @@
1
+ import fs from 'node:fs';
2
+ import path from 'node:path';
3
+ import { fileURLToPath } from 'node:url';
4
+
5
+ /** @param {string} dir */
6
+ export function mkdirp(dir) {
7
+ try {
8
+ fs.mkdirSync(dir, { recursive: true });
9
+ } catch (e) {
10
+ if (/** @type {any} */ (e).code === 'EEXIST') {
11
+ return;
12
+ }
13
+ throw e;
14
+ }
15
+ }
16
+
17
+ /** @param {string} path */
18
+ export function rimraf(path) {
19
+ (fs.rmSync || fs.rmdirSync)(path, { recursive: true, force: true });
20
+ }
21
+
22
+ /**
23
+ * @template T
24
+ * @param {T} x
25
+ */
26
+ function identity(x) {
27
+ return x;
28
+ }
29
+
30
+ /**
31
+ * @param {string} from
32
+ * @param {string} to
33
+ * @param {(basename: string) => string} rename
34
+ */
35
+ export function copy(from, to, rename = identity) {
36
+ if (!fs.existsSync(from)) {
37
+ return;
38
+ }
39
+
40
+ const stats = fs.statSync(from);
41
+
42
+ if (stats.isDirectory()) {
43
+ fs.readdirSync(from).forEach((file) => {
44
+ copy(path.join(from, file), path.join(to, rename(file)));
45
+ });
46
+ } else {
47
+ mkdirp(path.dirname(to));
48
+ fs.copyFileSync(from, to);
49
+ }
50
+ }
51
+
52
+ /** @param {string} path */
53
+ export function dist(path) {
54
+ return fileURLToPath(new URL(`../${path}`, import.meta.url).href);
55
+ }
56
+
57
+ /** @type {string} */
58
+ export const package_manager = get_package_manager() || 'npm';
59
+
60
+ /**
61
+ * Supports npm, pnpm, Yarn, cnpm, bun and any other package manager that sets the
62
+ * npm_config_user_agent env variable.
63
+ * Thanks to https://github.com/zkochan/packages/tree/main/which-pm-runs for this code!
64
+ */
65
+ function get_package_manager() {
66
+ // add clauses for --use-pnpm and --use-yarn
67
+ if (process.argv.includes('--use-pnpm')) {
68
+ return 'pnpm';
69
+ }
70
+ if (process.argv.includes('--use-yarn')) {
71
+ return 'yarn';
72
+ }
73
+ if (!process.env.npm_config_user_agent) {
74
+ return undefined;
75
+ }
76
+ const user_agent = process.env.npm_config_user_agent;
77
+ const pm_spec = user_agent.split(' ')[0];
78
+ const separator_pos = pm_spec.lastIndexOf('/');
79
+ const name = pm_spec.substring(0, separator_pos);
80
+ return name === 'npminstall' ? 'cnpm' : name;
81
+ }
package/cli/vite.mjs ADDED
@@ -0,0 +1,55 @@
1
+ import { build, createServer, loadConfigFromFile, mergeConfig, preview } from 'vite';
2
+ import { defaultConfig } from '../config/vite.mjs';
3
+
4
+ async function getMergedViteConfig(command, mode) {
5
+ // Load user's vite.config.js file if it exists
6
+ const userConfig = await loadConfigFromFile({
7
+ command,
8
+ mode,
9
+ });
10
+
11
+ // Merge user config with default config
12
+ const mergedConfig = mergeConfig(defaultConfig, userConfig?.config || {});
13
+
14
+ // Remove duplicate plugins by name, preferring user's config over default, while preserving order.
15
+ if (mergedConfig.plugins) {
16
+ const seen = new Set();
17
+ mergedConfig.plugins = mergedConfig.plugins
18
+ .flat()
19
+ .reverse()
20
+ .filter((plugin) => {
21
+ if (!plugin || !plugin.name) {
22
+ // Keep plugins without a name (e.g., some Vite internal plugins)
23
+ return true;
24
+ }
25
+ if (seen.has(plugin.name)) {
26
+ return false;
27
+ }
28
+ seen.add(plugin.name);
29
+ return true;
30
+ })
31
+ .reverse();
32
+ }
33
+
34
+ return mergedConfig;
35
+ }
36
+
37
+ export async function startDevServer() {
38
+ const config = await getMergedViteConfig('serve', 'development');
39
+ const server = await createServer(config);
40
+ await server.listen();
41
+
42
+ server.printUrls();
43
+ }
44
+
45
+ export async function runBuild() {
46
+ const config = await getMergedViteConfig('build', 'production');
47
+ await build(config);
48
+ }
49
+
50
+ export async function runPreview() {
51
+ const config = await getMergedViteConfig('build', 'production');
52
+ await build(config);
53
+ const server = await preview(config);
54
+ server.printUrls();
55
+ }