@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.
- package/LICENSE +22 -0
- package/README.md +62 -0
- package/cli/add.mjs +197 -0
- package/cli/audio/cc.mjs +128 -0
- package/cli/audio/index.mjs +42 -0
- package/cli/audio/utils.mjs +56 -0
- package/cli/create-caper.mjs +8 -0
- package/cli/create.mjs +351 -0
- package/cli/install-peerdeps.mjs +57 -0
- package/cli/update.mjs +9 -0
- package/cli/utils.mjs +81 -0
- package/cli/vite.mjs +55 -0
- package/cli/voiceover/generateVoiceoverCSV.mjs +158 -0
- package/cli/voiceover/index.mjs +1 -0
- package/cli.mjs +157 -0
- package/client.d.ts +7 -0
- package/config/assetpack.mjs +212 -0
- package/config/tsconfig.base.json +28 -0
- package/config/vite.mjs +2464 -0
- package/extras/css/accessibility.css +9 -0
- package/extras/css/fullscreen.css +28 -0
- package/extras/css/loader.css +67 -0
- package/extras/llms.txt +1602 -0
- package/lib/CaptionsPlugin-Dc8fIrjy.js +277 -0
- package/lib/CaptionsPlugin-Dc8fIrjy.js.map +1 -0
- package/lib/DataAdapter-BY2114sp.js +84 -0
- package/lib/DataAdapter-BY2114sp.js.map +1 -0
- package/lib/DebugRenderer-BJMLILqI.js +1385 -0
- package/lib/DebugRenderer-BJMLILqI.js.map +1 -0
- package/lib/DevToolsPlugin-wQ5rOkn0.js +31 -0
- package/lib/DevToolsPlugin-wQ5rOkn0.js.map +1 -0
- package/lib/GSAPPlugin-DHhSZKv8.js +350 -0
- package/lib/GSAPPlugin-DHhSZKv8.js.map +1 -0
- package/lib/LayoutPlugin-B-DF9SYM.js +1271 -0
- package/lib/LayoutPlugin-B-DF9SYM.js.map +1 -0
- package/lib/SpinePlugin-Dz_3dljz.js +6077 -0
- package/lib/SpinePlugin-Dz_3dljz.js.map +1 -0
- package/lib/StatsPlugin-Cg82JMBD.js +70 -0
- package/lib/StatsPlugin-Cg82JMBD.js.map +1 -0
- package/lib/VoiceOverPlugin-BR3ImT8C.js +114 -0
- package/lib/VoiceOverPlugin-BR3ImT8C.js.map +1 -0
- package/lib/caper.mjs +1233 -0
- package/lib/caper.mjs.map +1 -0
- package/lib/core/Application.d.ts +268 -0
- package/lib/core/Application.d.ts.map +1 -0
- package/lib/core/config.d.ts +39 -0
- package/lib/core/config.d.ts.map +1 -0
- package/lib/core/create.d.ts +41 -0
- package/lib/core/create.d.ts.map +1 -0
- package/lib/core/globals.d.ts +51 -0
- package/lib/core/globals.d.ts.map +1 -0
- package/lib/core/index.d.ts +7 -0
- package/lib/core/index.d.ts.map +1 -0
- package/lib/core/interfaces/IApplication.d.ts +566 -0
- package/lib/core/interfaces/IApplication.d.ts.map +1 -0
- package/lib/core/interfaces/IApplicationOptions.d.ts +65 -0
- package/lib/core/interfaces/IApplicationOptions.d.ts.map +1 -0
- package/lib/core/interfaces/ICoreFunctions.d.ts +49 -0
- package/lib/core/interfaces/ICoreFunctions.d.ts.map +1 -0
- package/lib/core/interfaces/ICoreSignals.d.ts +57 -0
- package/lib/core/interfaces/ICoreSignals.d.ts.map +1 -0
- package/lib/core/interfaces/IStorageCapability.d.ts +20 -0
- package/lib/core/interfaces/IStorageCapability.d.ts.map +1 -0
- package/lib/core/interfaces/IStorageCapability.test.d.ts +2 -0
- package/lib/core/interfaces/IStorageCapability.test.d.ts.map +1 -0
- package/lib/core/interfaces/index.d.ts +7 -0
- package/lib/core/interfaces/index.d.ts.map +1 -0
- package/lib/core/registries.d.ts +8 -0
- package/lib/core/registries.d.ts.map +1 -0
- package/lib/core/types.d.ts +12 -0
- package/lib/core/types.d.ts.map +1 -0
- package/lib/display/AnimatedSprite.d.ts +40 -0
- package/lib/display/AnimatedSprite.d.ts.map +1 -0
- package/lib/display/Camera.d.ts +102 -0
- package/lib/display/Camera.d.ts.map +1 -0
- package/lib/display/Container.d.ts +115 -0
- package/lib/display/Container.d.ts.map +1 -0
- package/lib/display/Entity.d.ts +46 -0
- package/lib/display/Entity.d.ts.map +1 -0
- package/lib/display/ParticleContainer.d.ts +58 -0
- package/lib/display/ParticleContainer.d.ts.map +1 -0
- package/lib/display/Scene.d.ts +250 -0
- package/lib/display/Scene.d.ts.map +1 -0
- package/lib/display/SceneTransition.d.ts +41 -0
- package/lib/display/SceneTransition.d.ts.map +1 -0
- package/lib/display/SpineAnimation.d.ts +76 -0
- package/lib/display/SpineAnimation.d.ts.map +1 -0
- package/lib/display/Svg.d.ts +5 -0
- package/lib/display/Svg.d.ts.map +1 -0
- package/lib/display/index.d.ts +10 -0
- package/lib/display/index.d.ts.map +1 -0
- package/lib/env.d.ts +6 -0
- package/lib/hello.d.ts +2 -0
- package/lib/hello.d.ts.map +1 -0
- package/lib/index.d.ts +15 -0
- package/lib/index.d.ts.map +1 -0
- package/lib/mixins/animated.d.ts +53 -0
- package/lib/mixins/animated.d.ts.map +1 -0
- package/lib/mixins/factory/Factory.d.ts +8 -0
- package/lib/mixins/factory/Factory.d.ts.map +1 -0
- package/lib/mixins/factory/const.d.ts +67 -0
- package/lib/mixins/factory/const.d.ts.map +1 -0
- package/lib/mixins/factory/index.d.ts +8 -0
- package/lib/mixins/factory/index.d.ts.map +1 -0
- package/lib/mixins/factory/methods.d.ts +3 -0
- package/lib/mixins/factory/methods.d.ts.map +1 -0
- package/lib/mixins/factory/props.d.ts +160 -0
- package/lib/mixins/factory/props.d.ts.map +1 -0
- package/lib/mixins/factory/registry.d.ts +27 -0
- package/lib/mixins/factory/registry.d.ts.map +1 -0
- package/lib/mixins/factory/registry.test.d.ts +2 -0
- package/lib/mixins/factory/registry.test.d.ts.map +1 -0
- package/lib/mixins/factory/schema.d.ts +71 -0
- package/lib/mixins/factory/schema.d.ts.map +1 -0
- package/lib/mixins/factory/ui-registry.d.ts +20 -0
- package/lib/mixins/factory/ui-registry.d.ts.map +1 -0
- package/lib/mixins/factory/utils.d.ts +11 -0
- package/lib/mixins/factory/utils.d.ts.map +1 -0
- package/lib/mixins/focus.d.ts +15 -0
- package/lib/mixins/focus.d.ts.map +1 -0
- package/lib/mixins/index.d.ts +6 -0
- package/lib/mixins/index.d.ts.map +1 -0
- package/lib/mixins/interaction.d.ts +20 -0
- package/lib/mixins/interaction.d.ts.map +1 -0
- package/lib/mixins/signals.d.ts +15 -0
- package/lib/mixins/signals.d.ts.map +1 -0
- package/lib/plugins/AssetsPlugin.d.ts +79 -0
- package/lib/plugins/AssetsPlugin.d.ts.map +1 -0
- package/lib/plugins/DataAdapter.d.ts +95 -0
- package/lib/plugins/DataAdapter.d.ts.map +1 -0
- package/lib/plugins/DevToolsPlugin.d.ts +97 -0
- package/lib/plugins/DevToolsPlugin.d.ts.map +1 -0
- package/lib/plugins/FullScreenPlugin.d.ts +240 -0
- package/lib/plugins/FullScreenPlugin.d.ts.map +1 -0
- package/lib/plugins/GSAPPlugin.d.ts +634 -0
- package/lib/plugins/GSAPPlugin.d.ts.map +1 -0
- package/lib/plugins/KeyboardPlugin.d.ts +53 -0
- package/lib/plugins/KeyboardPlugin.d.ts.map +1 -0
- package/lib/plugins/LayoutPlugin.d.ts +100 -0
- package/lib/plugins/LayoutPlugin.d.ts.map +1 -0
- package/lib/plugins/LookupPlugin.d.ts +223 -0
- package/lib/plugins/LookupPlugin.d.ts.map +1 -0
- package/lib/plugins/Plugin.d.ts +132 -0
- package/lib/plugins/Plugin.d.ts.map +1 -0
- package/lib/plugins/Plugin.test.d.ts +2 -0
- package/lib/plugins/Plugin.test.d.ts.map +1 -0
- package/lib/plugins/PopupManagerPlugin.d.ts +108 -0
- package/lib/plugins/PopupManagerPlugin.d.ts.map +1 -0
- package/lib/plugins/ResizerPlugin.d.ts +62 -0
- package/lib/plugins/ResizerPlugin.d.ts.map +1 -0
- package/lib/plugins/SceneManagerPlugin.d.ts +122 -0
- package/lib/plugins/SceneManagerPlugin.d.ts.map +1 -0
- package/lib/plugins/StatsPlugin.d.ts +8 -0
- package/lib/plugins/StatsPlugin.d.ts.map +1 -0
- package/lib/plugins/TimerPlugin.d.ts +401 -0
- package/lib/plugins/TimerPlugin.d.ts.map +1 -0
- package/lib/plugins/WebEventsPlugin.d.ts +60 -0
- package/lib/plugins/WebEventsPlugin.d.ts.map +1 -0
- package/lib/plugins/actions/ActionsPlugin.d.ts +39 -0
- package/lib/plugins/actions/ActionsPlugin.d.ts.map +1 -0
- package/lib/plugins/actions/constants.d.ts +52 -0
- package/lib/plugins/actions/constants.d.ts.map +1 -0
- package/lib/plugins/actions/index.d.ts +5 -0
- package/lib/plugins/actions/index.d.ts.map +1 -0
- package/lib/plugins/actions/methods.d.ts +11 -0
- package/lib/plugins/actions/methods.d.ts.map +1 -0
- package/lib/plugins/actions/types.d.ts +25 -0
- package/lib/plugins/actions/types.d.ts.map +1 -0
- package/lib/plugins/audio/AudioChannel.d.ts +46 -0
- package/lib/plugins/audio/AudioChannel.d.ts.map +1 -0
- package/lib/plugins/audio/AudioChannel.test.d.ts +2 -0
- package/lib/plugins/audio/AudioChannel.test.d.ts.map +1 -0
- package/lib/plugins/audio/AudioInstance.d.ts +79 -0
- package/lib/plugins/audio/AudioInstance.d.ts.map +1 -0
- package/lib/plugins/audio/AudioManagerPlugin.d.ts +323 -0
- package/lib/plugins/audio/AudioManagerPlugin.d.ts.map +1 -0
- package/lib/plugins/audio/VoiceOverPlugin.d.ts +69 -0
- package/lib/plugins/audio/VoiceOverPlugin.d.ts.map +1 -0
- package/lib/plugins/audio/index.d.ts +4 -0
- package/lib/plugins/audio/index.d.ts.map +1 -0
- package/lib/plugins/breakpoints/BreakpointPlugin.d.ts +109 -0
- package/lib/plugins/breakpoints/BreakpointPlugin.d.ts.map +1 -0
- package/lib/plugins/breakpoints/BreakpointPlugin.test.d.ts +2 -0
- package/lib/plugins/breakpoints/BreakpointPlugin.test.d.ts.map +1 -0
- package/lib/plugins/breakpoints/evaluate.d.ts +53 -0
- package/lib/plugins/breakpoints/evaluate.d.ts.map +1 -0
- package/lib/plugins/breakpoints/evaluate.test.d.ts +2 -0
- package/lib/plugins/breakpoints/evaluate.test.d.ts.map +1 -0
- package/lib/plugins/breakpoints/index.d.ts +4 -0
- package/lib/plugins/breakpoints/index.d.ts.map +1 -0
- package/lib/plugins/breakpoints/methods.d.ts +23 -0
- package/lib/plugins/breakpoints/methods.d.ts.map +1 -0
- package/lib/plugins/breakpoints/types.d.ts +70 -0
- package/lib/plugins/breakpoints/types.d.ts.map +1 -0
- package/lib/plugins/captions/CaptionsPlugin.d.ts +150 -0
- package/lib/plugins/captions/CaptionsPlugin.d.ts.map +1 -0
- package/lib/plugins/captions/CaptionsRenderer.d.ts +37 -0
- package/lib/plugins/captions/CaptionsRenderer.d.ts.map +1 -0
- package/lib/plugins/captions/index.d.ts +3 -0
- package/lib/plugins/captions/index.d.ts.map +1 -0
- package/lib/plugins/defaults.d.ts +4 -0
- package/lib/plugins/defaults.d.ts.map +1 -0
- package/lib/plugins/focus/FocusManagerPlugin.d.ts +148 -0
- package/lib/plugins/focus/FocusManagerPlugin.d.ts.map +1 -0
- package/lib/plugins/focus/FocusOutliner.d.ts +32 -0
- package/lib/plugins/focus/FocusOutliner.d.ts.map +1 -0
- package/lib/plugins/focus/index.d.ts +3 -0
- package/lib/plugins/focus/index.d.ts.map +1 -0
- package/lib/plugins/i18nPlugin.d.ts +128 -0
- package/lib/plugins/i18nPlugin.d.ts.map +1 -0
- package/lib/plugins/index.d.ts +18 -0
- package/lib/plugins/index.d.ts.map +1 -0
- package/lib/plugins/input/AbstractControls.d.ts +8 -0
- package/lib/plugins/input/AbstractControls.d.ts.map +1 -0
- package/lib/plugins/input/Controls.d.ts +16 -0
- package/lib/plugins/input/Controls.d.ts.map +1 -0
- package/lib/plugins/input/InputPlugin.d.ts +52 -0
- package/lib/plugins/input/InputPlugin.d.ts.map +1 -0
- package/lib/plugins/input/constants.d.ts +8 -0
- package/lib/plugins/input/constants.d.ts.map +1 -0
- package/lib/plugins/input/index.d.ts +10 -0
- package/lib/plugins/input/index.d.ts.map +1 -0
- package/lib/plugins/input/interfaces.d.ts +30 -0
- package/lib/plugins/input/interfaces.d.ts.map +1 -0
- package/lib/plugins/input/keyboard/KeyboardContols.d.ts +28 -0
- package/lib/plugins/input/keyboard/KeyboardContols.d.ts.map +1 -0
- package/lib/plugins/input/keyboard/index.d.ts +3 -0
- package/lib/plugins/input/keyboard/index.d.ts.map +1 -0
- package/lib/plugins/input/keyboard/interfaces.d.ts +18 -0
- package/lib/plugins/input/keyboard/interfaces.d.ts.map +1 -0
- package/lib/plugins/input/methods.d.ts +4 -0
- package/lib/plugins/input/methods.d.ts.map +1 -0
- package/lib/plugins/input/touch/TouchControls.d.ts +35 -0
- package/lib/plugins/input/touch/TouchControls.d.ts.map +1 -0
- package/lib/plugins/input/touch/constants.d.ts +14 -0
- package/lib/plugins/input/touch/constants.d.ts.map +1 -0
- package/lib/plugins/input/touch/index.d.ts +4 -0
- package/lib/plugins/input/touch/index.d.ts.map +1 -0
- package/lib/plugins/input/touch/interfaces.d.ts +15 -0
- package/lib/plugins/input/touch/interfaces.d.ts.map +1 -0
- package/lib/plugins/input/types.d.ts +32 -0
- package/lib/plugins/input/types.d.ts.map +1 -0
- package/lib/plugins/input/utils.d.ts +23 -0
- package/lib/plugins/input/utils.d.ts.map +1 -0
- package/lib/plugins/spine/SpinePlugin.d.ts +6 -0
- package/lib/plugins/spine/SpinePlugin.d.ts.map +1 -0
- package/lib/plugins/spine/pixi-spine/BatchableSpineSlot.d.ts +31 -0
- package/lib/plugins/spine/pixi-spine/BatchableSpineSlot.d.ts.map +1 -0
- package/lib/plugins/spine/pixi-spine/Spine.d.ts +211 -0
- package/lib/plugins/spine/pixi-spine/Spine.d.ts.map +1 -0
- package/lib/plugins/spine/pixi-spine/SpineDebugRenderer.d.ts +81 -0
- package/lib/plugins/spine/pixi-spine/SpineDebugRenderer.d.ts.map +1 -0
- package/lib/plugins/spine/pixi-spine/SpinePipe.d.ts +21 -0
- package/lib/plugins/spine/pixi-spine/SpinePipe.d.ts.map +1 -0
- package/lib/plugins/spine/pixi-spine/SpineTexture.d.ts +16 -0
- package/lib/plugins/spine/pixi-spine/SpineTexture.d.ts.map +1 -0
- package/lib/plugins/spine/pixi-spine/assets/atlasLoader.d.ts +10 -0
- package/lib/plugins/spine/pixi-spine/assets/atlasLoader.d.ts.map +1 -0
- package/lib/plugins/spine/pixi-spine/assets/skeletonLoader.d.ts +6 -0
- package/lib/plugins/spine/pixi-spine/assets/skeletonLoader.d.ts.map +1 -0
- package/lib/plugins/spine/pixi-spine/darktint/DarkTintBatchGeometry.d.ts +5 -0
- package/lib/plugins/spine/pixi-spine/darktint/DarkTintBatchGeometry.d.ts.map +1 -0
- package/lib/plugins/spine/pixi-spine/darktint/DarkTintBatcher.d.ts +22 -0
- package/lib/plugins/spine/pixi-spine/darktint/DarkTintBatcher.d.ts.map +1 -0
- package/lib/plugins/spine/pixi-spine/darktint/DarkTintShader.d.ts +5 -0
- package/lib/plugins/spine/pixi-spine/darktint/DarkTintShader.d.ts.map +1 -0
- package/lib/plugins/spine/pixi-spine/darktint/darkTintBit.d.ts +51 -0
- package/lib/plugins/spine/pixi-spine/darktint/darkTintBit.d.ts.map +1 -0
- package/lib/plugins/spine/pixi-spine/index.d.ts +9 -0
- package/lib/plugins/spine/pixi-spine/index.d.ts.map +1 -0
- package/lib/plugins/spine/pixi-spine/require-shim.d.ts +34 -0
- package/lib/plugins/spine/pixi-spine/require-shim.d.ts.map +1 -0
- package/lib/registries-CYCaYKZI.js +6885 -0
- package/lib/registries-CYCaYKZI.js.map +1 -0
- package/lib/signals/Signal.d.ts +16 -0
- package/lib/signals/Signal.d.ts.map +1 -0
- package/lib/signals/Signal.test.d.ts +2 -0
- package/lib/signals/Signal.test.d.ts.map +1 -0
- package/lib/signals/index.d.ts +3 -0
- package/lib/signals/index.d.ts.map +1 -0
- package/lib/store/Store.d.ts +56 -0
- package/lib/store/Store.d.ts.map +1 -0
- package/lib/store/Store.test.d.ts +2 -0
- package/lib/store/Store.test.d.ts.map +1 -0
- package/lib/store/index.d.ts +2 -0
- package/lib/store/index.d.ts.map +1 -0
- package/lib/types/framework.d.ts +46 -0
- package/lib/types/gsap.d.ts +23 -0
- package/lib/ui/Button.d.ts +162 -0
- package/lib/ui/Button.d.ts.map +1 -0
- package/lib/ui/FlexContainer.d.ts +109 -0
- package/lib/ui/FlexContainer.d.ts.map +1 -0
- package/lib/ui/Input.d.ts +384 -0
- package/lib/ui/Input.d.ts.map +1 -0
- package/lib/ui/Joystick.d.ts +61 -0
- package/lib/ui/Joystick.d.ts.map +1 -0
- package/lib/ui/Popup.d.ts +109 -0
- package/lib/ui/Popup.d.ts.map +1 -0
- package/lib/ui/Toast.d.ts +131 -0
- package/lib/ui/Toast.d.ts.map +1 -0
- package/lib/ui/Toaster.d.ts +188 -0
- package/lib/ui/Toaster.d.ts.map +1 -0
- package/lib/ui/UICanvas.d.ts +155 -0
- package/lib/ui/UICanvas.d.ts.map +1 -0
- package/lib/ui/index.d.ts +9 -0
- package/lib/ui/index.d.ts.map +1 -0
- package/lib/utils/array.d.ts +11 -0
- package/lib/utils/array.d.ts.map +1 -0
- package/lib/utils/bind.d.ts +21 -0
- package/lib/utils/bind.d.ts.map +1 -0
- package/lib/utils/canvas.d.ts +2 -0
- package/lib/utils/canvas.d.ts.map +1 -0
- package/lib/utils/color.d.ts +66 -0
- package/lib/utils/color.d.ts.map +1 -0
- package/lib/utils/console/Logger.d.ts +15 -0
- package/lib/utils/console/Logger.d.ts.map +1 -0
- package/lib/utils/console/index.d.ts +2 -0
- package/lib/utils/console/index.d.ts.map +1 -0
- package/lib/utils/debug.d.ts +34 -0
- package/lib/utils/debug.d.ts.map +1 -0
- package/lib/utils/define.d.ts +100 -0
- package/lib/utils/define.d.ts.map +1 -0
- package/lib/utils/env.d.ts +4 -0
- package/lib/utils/env.d.ts.map +1 -0
- package/lib/utils/events.d.ts +12 -0
- package/lib/utils/events.d.ts.map +1 -0
- package/lib/utils/framework.d.ts +12 -0
- package/lib/utils/framework.d.ts.map +1 -0
- package/lib/utils/index.d.ts +28 -0
- package/lib/utils/index.d.ts.map +1 -0
- package/lib/utils/map.d.ts +31 -0
- package/lib/utils/map.d.ts.map +1 -0
- package/lib/utils/math.d.ts +15 -0
- package/lib/utils/math.d.ts.map +1 -0
- package/lib/utils/misc.d.ts +13 -0
- package/lib/utils/misc.d.ts.map +1 -0
- package/lib/utils/number.d.ts +2 -0
- package/lib/utils/number.d.ts.map +1 -0
- package/lib/utils/object.d.ts +21 -0
- package/lib/utils/object.d.ts.map +1 -0
- package/lib/utils/padding.d.ts +4 -0
- package/lib/utils/padding.d.ts.map +1 -0
- package/lib/utils/pixi.d.ts +42 -0
- package/lib/utils/pixi.d.ts.map +1 -0
- package/lib/utils/platform.d.ts +20 -0
- package/lib/utils/platform.d.ts.map +1 -0
- package/lib/utils/point.d.ts +66 -0
- package/lib/utils/point.d.ts.map +1 -0
- package/lib/utils/promise/Queue.d.ts +60 -0
- package/lib/utils/promise/Queue.d.ts.map +1 -0
- package/lib/utils/promise/functions.d.ts +14 -0
- package/lib/utils/promise/functions.d.ts.map +1 -0
- package/lib/utils/promise/index.d.ts +3 -0
- package/lib/utils/promise/index.d.ts.map +1 -0
- package/lib/utils/random.d.ts +42 -0
- package/lib/utils/random.d.ts.map +1 -0
- package/lib/utils/rect.d.ts +26 -0
- package/lib/utils/rect.d.ts.map +1 -0
- package/lib/utils/set.d.ts +15 -0
- package/lib/utils/set.d.ts.map +1 -0
- package/lib/utils/string.d.ts +3 -0
- package/lib/utils/string.d.ts.map +1 -0
- package/lib/utils/text.d.ts +3 -0
- package/lib/utils/text.d.ts.map +1 -0
- package/lib/utils/typefilters.d.ts +4 -0
- package/lib/utils/typefilters.d.ts.map +1 -0
- package/lib/utils/types.d.ts +209 -0
- package/lib/utils/types.d.ts.map +1 -0
- package/lib/utils/vite.d.ts +25 -0
- package/lib/utils/vite.d.ts.map +1 -0
- package/lib/utils/web.d.ts +3 -0
- package/lib/utils/web.d.ts.map +1 -0
- package/lib/version.d.ts +3 -0
- package/lib/version.d.ts.map +1 -0
- package/lib/webgl-check.d.ts +2 -0
- package/lib/webgl-check.d.ts.map +1 -0
- package/package.json +138 -0
- package/src/core/Application.ts +1091 -0
- package/src/core/config.ts +168 -0
- package/src/core/create.ts +186 -0
- package/src/core/globals.ts +299 -0
- package/src/core/index.ts +6 -0
- package/src/core/interfaces/IApplication.ts +628 -0
- package/src/core/interfaces/IApplicationOptions.ts +81 -0
- package/src/core/interfaces/ICoreFunctions.ts +86 -0
- package/src/core/interfaces/ICoreSignals.ts +77 -0
- package/src/core/interfaces/IStorageCapability.test.ts +27 -0
- package/src/core/interfaces/IStorageCapability.ts +26 -0
- package/src/core/interfaces/index.ts +6 -0
- package/src/core/registries.ts +7 -0
- package/src/core/types.ts +13 -0
- package/src/display/AnimatedSprite.ts +227 -0
- package/src/display/Camera.ts +371 -0
- package/src/display/Container.ts +240 -0
- package/src/display/Entity.ts +50 -0
- package/src/display/ParticleContainer.ts +107 -0
- package/src/display/Scene.ts +305 -0
- package/src/display/SceneTransition.ts +108 -0
- package/src/display/SpineAnimation.ts +170 -0
- package/src/display/Svg.ts +9 -0
- package/src/display/index.ts +11 -0
- package/src/env.d.ts +6 -0
- package/src/hello.ts +20 -0
- package/src/index.ts +17 -0
- package/src/mixins/animated.ts +340 -0
- package/src/mixins/factory/Factory.ts +24 -0
- package/src/mixins/factory/const.ts +363 -0
- package/src/mixins/factory/index.ts +7 -0
- package/src/mixins/factory/methods.ts +21 -0
- package/src/mixins/factory/props.ts +207 -0
- package/src/mixins/factory/registry.test.ts +83 -0
- package/src/mixins/factory/registry.ts +61 -0
- package/src/mixins/factory/schema.ts +153 -0
- package/src/mixins/factory/ui-registry.ts +54 -0
- package/src/mixins/factory/utils.ts +130 -0
- package/src/mixins/focus.ts +124 -0
- package/src/mixins/index.ts +5 -0
- package/src/mixins/interaction.ts +74 -0
- package/src/mixins/signals.ts +49 -0
- package/src/plugins/AssetsPlugin.ts +407 -0
- package/src/plugins/DataAdapter.ts +259 -0
- package/src/plugins/DevToolsPlugin.ts +103 -0
- package/src/plugins/FullScreenPlugin.ts +359 -0
- package/src/plugins/GSAPPlugin.ts +811 -0
- package/src/plugins/KeyboardPlugin.ts +160 -0
- package/src/plugins/LayoutPlugin.ts +127 -0
- package/src/plugins/LookupPlugin.ts +308 -0
- package/src/plugins/Plugin.test.ts +73 -0
- package/src/plugins/Plugin.ts +200 -0
- package/src/plugins/PopupManagerPlugin.ts +263 -0
- package/src/plugins/ResizerPlugin.ts +220 -0
- package/src/plugins/SceneManagerPlugin.ts +669 -0
- package/src/plugins/StatsPlugin.ts +24 -0
- package/src/plugins/TimerPlugin.ts +841 -0
- package/src/plugins/WebEventsPlugin.ts +132 -0
- package/src/plugins/actions/ActionsPlugin.ts +113 -0
- package/src/plugins/actions/constants.ts +45 -0
- package/src/plugins/actions/index.ts +4 -0
- package/src/plugins/actions/methods.ts +28 -0
- package/src/plugins/actions/types.ts +47 -0
- package/src/plugins/audio/AudioChannel.test.ts +101 -0
- package/src/plugins/audio/AudioChannel.ts +164 -0
- package/src/plugins/audio/AudioInstance.ts +228 -0
- package/src/plugins/audio/AudioManagerPlugin.ts +903 -0
- package/src/plugins/audio/VoiceOverPlugin.ts +354 -0
- package/src/plugins/audio/index.ts +3 -0
- package/src/plugins/breakpoints/BreakpointPlugin.test.ts +228 -0
- package/src/plugins/breakpoints/BreakpointPlugin.ts +293 -0
- package/src/plugins/breakpoints/evaluate.test.ts +239 -0
- package/src/plugins/breakpoints/evaluate.ts +201 -0
- package/src/plugins/breakpoints/index.ts +3 -0
- package/src/plugins/breakpoints/methods.ts +22 -0
- package/src/plugins/breakpoints/types.ts +86 -0
- package/src/plugins/captions/CaptionsPlugin.ts +468 -0
- package/src/plugins/captions/CaptionsRenderer.ts +184 -0
- package/src/plugins/captions/font/Sans.fnt +116 -0
- package/src/plugins/captions/font/Sans.png +0 -0
- package/src/plugins/captions/index.ts +2 -0
- package/src/plugins/defaults.ts +95 -0
- package/src/plugins/focus/FocusManagerPlugin.ts +773 -0
- package/src/plugins/focus/FocusOutliner.ts +111 -0
- package/src/plugins/focus/index.ts +2 -0
- package/src/plugins/i18nPlugin.ts +284 -0
- package/src/plugins/index.ts +17 -0
- package/src/plugins/input/AbstractControls.ts +15 -0
- package/src/plugins/input/Controls.ts +55 -0
- package/src/plugins/input/InputPlugin.ts +168 -0
- package/src/plugins/input/constants.ts +12 -0
- package/src/plugins/input/index.ts +9 -0
- package/src/plugins/input/interfaces.ts +37 -0
- package/src/plugins/input/keyboard/KeyboardContols.ts +182 -0
- package/src/plugins/input/keyboard/index.ts +2 -0
- package/src/plugins/input/keyboard/interfaces.ts +21 -0
- package/src/plugins/input/methods.ts +9 -0
- package/src/plugins/input/touch/TouchControls.ts +237 -0
- package/src/plugins/input/touch/constants.ts +34 -0
- package/src/plugins/input/touch/index.ts +3 -0
- package/src/plugins/input/touch/interfaces.ts +15 -0
- package/src/plugins/input/types.ts +41 -0
- package/src/plugins/input/utils.ts +10 -0
- package/src/plugins/spine/SpinePlugin.ts +14 -0
- package/src/plugins/spine/pixi-spine/BatchableSpineSlot.ts +138 -0
- package/src/plugins/spine/pixi-spine/Spine.ts +897 -0
- package/src/plugins/spine/pixi-spine/SpineDebugRenderer.ts +615 -0
- package/src/plugins/spine/pixi-spine/SpinePipe.ts +197 -0
- package/src/plugins/spine/pixi-spine/SpineTexture.ts +143 -0
- package/src/plugins/spine/pixi-spine/assets/atlasLoader.ts +156 -0
- package/src/plugins/spine/pixi-spine/assets/skeletonLoader.ts +80 -0
- package/src/plugins/spine/pixi-spine/darktint/DarkTintBatchGeometry.ts +92 -0
- package/src/plugins/spine/pixi-spine/darktint/DarkTintBatcher.ts +186 -0
- package/src/plugins/spine/pixi-spine/darktint/DarkTintShader.ts +74 -0
- package/src/plugins/spine/pixi-spine/darktint/darkTintBit.ts +77 -0
- package/src/plugins/spine/pixi-spine/index.ts +43 -0
- package/src/plugins/spine/pixi-spine/require-shim.ts +43 -0
- package/src/signals/Signal.test.ts +54 -0
- package/src/signals/Signal.ts +68 -0
- package/src/signals/index.ts +10 -0
- package/src/store/Store.test.ts +146 -0
- package/src/store/Store.ts +192 -0
- package/src/store/index.ts +1 -0
- package/src/types/framework.d.ts +47 -0
- package/src/types/gsap.d.ts +26 -0
- package/src/ui/Button.ts +454 -0
- package/src/ui/FlexContainer.ts +526 -0
- package/src/ui/Input.ts +1274 -0
- package/src/ui/Joystick.ts +288 -0
- package/src/ui/Popup.ts +242 -0
- package/src/ui/Toast.ts +399 -0
- package/src/ui/Toaster.ts +409 -0
- package/src/ui/UICanvas.ts +812 -0
- package/src/ui/index.ts +8 -0
- package/src/utils/array.ts +24 -0
- package/src/utils/bind.ts +79 -0
- package/src/utils/canvas.ts +26 -0
- package/src/utils/color.ts +126 -0
- package/src/utils/console/Logger.ts +86 -0
- package/src/utils/console/index.ts +1 -0
- package/src/utils/debug.ts +69 -0
- package/src/utils/define.ts +120 -0
- package/src/utils/env.ts +3 -0
- package/src/utils/events.ts +10 -0
- package/src/utils/framework.ts +45 -0
- package/src/utils/index.ts +27 -0
- package/src/utils/map.ts +59 -0
- package/src/utils/math.ts +19 -0
- package/src/utils/misc.ts +45 -0
- package/src/utils/number.ts +3 -0
- package/src/utils/object.ts +43 -0
- package/src/utils/padding.ts +43 -0
- package/src/utils/pixi.ts +116 -0
- package/src/utils/platform.ts +33 -0
- package/src/utils/point.ts +123 -0
- package/src/utils/promise/Queue.ts +125 -0
- package/src/utils/promise/functions.ts +16 -0
- package/src/utils/promise/index.ts +2 -0
- package/src/utils/random.ts +69 -0
- package/src/utils/rect.ts +50 -0
- package/src/utils/set.ts +32 -0
- package/src/utils/string.ts +9 -0
- package/src/utils/text.ts +30 -0
- package/src/utils/typefilters.ts +29 -0
- package/src/utils/types.ts +426 -0
- package/src/utils/vite.ts +41 -0
- package/src/utils/web.ts +7 -0
- package/src/version.ts +3 -0
- package/src/webgl-check.ts +12 -0
- package/templates/app/default/.eslintrc.json +21 -0
- package/templates/app/default/.meta.json +4 -0
- package/templates/app/default/.nvmrc +1 -0
- package/templates/app/default/.prettierrc.json +7 -0
- package/templates/app/default/README.md +8 -0
- package/templates/app/default/assets/audio{m}/music/Cheerful Annoyance.ogg +0 -0
- package/templates/app/default/assets/audio{m}/music/Drumming Sticks.ogg +0 -0
- package/templates/app/default/assets/audio{m}/music/Game Over.ogg +0 -0
- package/templates/app/default/assets/audio{m}/music/Mishief Stroll.ogg +0 -0
- package/templates/app/default/assets/audio{m}/music/Night at the Beach.ogg +0 -0
- package/templates/app/default/assets/audio{m}/sfx/click.ogg +0 -0
- package/templates/app/default/assets/audio{m}/sfx/hover.ogg +0 -0
- package/templates/app/default/assets/required{m}/caper.png +0 -0
- package/templates/app/default/assets/required{m}/fonts{fix}/SpaceGrotesk-Bold{family=Space Grotesk}{wf}.ttf +0 -0
- package/templates/app/default/assets/required{m}/fonts{fix}/SpaceGrotesk-Medium{family=Space Grotesk}{wf}.ttf +0 -0
- package/templates/app/default/assets/required{m}/fonts{fix}/SpaceGrotesk-Regular{family=Space Grotesk}{wf}.ttf +0 -0
- package/templates/app/default/assets/required{m}/fonts{fix}/Syncopate-Bold{family=Syncopate}{wf}.ttf +0 -0
- package/templates/app/default/assets/required{m}/ui{tps}/btn/blue.png +0 -0
- package/templates/app/default/assets/required{m}/ui{tps}/btn/green.png +0 -0
- package/templates/app/default/assets/required{m}/ui{tps}/btn/grey.png +0 -0
- package/templates/app/default/assets/required{m}/ui{tps}/btn/orange.png +0 -0
- package/templates/app/default/assets/required{m}/ui{tps}/btn/purple.png +0 -0
- package/templates/app/default/assets/required{m}/ui{tps}/btn/red.png +0 -0
- package/templates/app/default/assets/required{m}/ui{tps}/btn/yellow.png +0 -0
- package/templates/app/default/assets/required{m}/ui{tps}/btn_a/down.png +0 -0
- package/templates/app/default/assets/required{m}/ui{tps}/btn_a/over.png +0 -0
- package/templates/app/default/assets/required{m}/ui{tps}/btn_a/up.png +0 -0
- package/templates/app/default/assets/required{m}/ui{tps}/btn_b/down.png +0 -0
- package/templates/app/default/assets/required{m}/ui{tps}/btn_b/over.png +0 -0
- package/templates/app/default/assets/required{m}/ui{tps}/btn_b/up.png +0 -0
- package/templates/app/default/assets/required{m}/ui{tps}/joystick/base.png +0 -0
- package/templates/app/default/assets/required{m}/ui{tps}/joystick/handle.png +0 -0
- package/templates/app/default/assets/required{m}/wordmark.svg +1 -0
- package/templates/app/default/assets/spine{m}/spineboy-pro.png +0 -0
- package/templates/app/default/assets/spine{m}/spineboy-pro.skel +0 -0
- package/templates/app/default/assets/spine{m}/spineboy-pro{fix}.atlas +94 -0
- package/templates/app/default/caper.config.ts +60 -0
- package/templates/app/default/index.html +23 -0
- package/templates/app/default/package.template.json +17 -0
- package/templates/app/default/public/favicon.ico +0 -0
- package/templates/app/default/src/__APPLICATION_NAME__.ts +3 -0
- package/templates/app/default/src/main.ts +9 -0
- package/templates/app/default/src/scenes/Base.ts +39 -0
- package/templates/app/default/src/scenes/Game.ts +34 -0
- package/templates/app/default/src/scenes/Splash.ts +70 -0
- package/templates/app/default/src/scenes/Start.ts +90 -0
- package/templates/app/default/src/utils/Constants.ts +3 -0
- package/templates/app/default/tsconfig.json +1 -0
- package/templates/plugin/package.template.json +33 -0
- package/templates/plugin/src/Plugin.template.ts +24 -0
- package/templates/plugin/src/index.template.ts +3 -0
- package/templates/plugin/tsconfig.template.json +43 -0
- package/templates/plugin/vite-env.template.d.ts +16 -0
- 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,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
|
+
}
|