@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,160 @@
|
|
|
1
|
+
import { IApplication } from '../core';
|
|
2
|
+
import { Signal } from '../signals';
|
|
3
|
+
import { isDev, KeyboardKey, Logger } from '../utils';
|
|
4
|
+
import type { IPlugin } from './Plugin';
|
|
5
|
+
import { Plugin } from './Plugin';
|
|
6
|
+
|
|
7
|
+
export type KeyboardEventType = 'keydown' | 'keyup';
|
|
8
|
+
export type KeyboardEventDetail = { event: KeyboardEvent; key: string };
|
|
9
|
+
export type KeySignal = Signal<(detail: KeyboardEventDetail) => void>;
|
|
10
|
+
|
|
11
|
+
export interface IKeyboardPlugin extends IPlugin {
|
|
12
|
+
enabled: boolean;
|
|
13
|
+
readonly keysDown: Set<string>;
|
|
14
|
+
|
|
15
|
+
onKeyDown(key?: KeyboardKey): KeySignal;
|
|
16
|
+
|
|
17
|
+
onKeyUp(key?: KeyboardKey): KeySignal;
|
|
18
|
+
|
|
19
|
+
isKeyDown(key: string): boolean;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
export function normalizeKey(key: string | undefined): string {
|
|
23
|
+
if (key === undefined) {
|
|
24
|
+
key = '*undefined*';
|
|
25
|
+
} else if (key === ' ') {
|
|
26
|
+
key = 'Space';
|
|
27
|
+
} else if (key.length === 1) {
|
|
28
|
+
key = key.toUpperCase();
|
|
29
|
+
}
|
|
30
|
+
return key;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
export class KeyboardPlugin extends Plugin implements IKeyboardPlugin {
|
|
34
|
+
public readonly id: string = 'keyboard';
|
|
35
|
+
// global signals
|
|
36
|
+
public onGlobalKeyDown: Signal<(detail: KeyboardEventDetail) => void> = new Signal();
|
|
37
|
+
public onGlobalKeyUp: Signal<(detail: KeyboardEventDetail) => void> = new Signal();
|
|
38
|
+
|
|
39
|
+
private _keyDownSignals: Map<string | undefined, KeySignal> = new Map();
|
|
40
|
+
private _keyUpSignals: Map<string | undefined, KeySignal> = new Map();
|
|
41
|
+
|
|
42
|
+
private _keysDown: Set<string> = new Set();
|
|
43
|
+
|
|
44
|
+
// Dev-only guard: warn once if key events arrive with no consumers connected.
|
|
45
|
+
private _warnedNoConsumers = false;
|
|
46
|
+
|
|
47
|
+
get keysDown() {
|
|
48
|
+
return this._keysDown;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
private _enabled: boolean = true;
|
|
52
|
+
|
|
53
|
+
public get enabled(): boolean {
|
|
54
|
+
return this._enabled;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
public set enabled(value: boolean) {
|
|
58
|
+
this._enabled = value;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
62
|
+
public initialize(_options: any, _app: IApplication): void {
|
|
63
|
+
// track which keys are down
|
|
64
|
+
document.addEventListener('keydown', this._handleKeyDown);
|
|
65
|
+
document.addEventListener('keyup', this._handleKeyUp);
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
public destroy() {
|
|
69
|
+
document.removeEventListener('keydown', this._handleKeyDown);
|
|
70
|
+
document.removeEventListener('keyup', this._handleKeyUp);
|
|
71
|
+
document.removeEventListener('keydown', this._handleEvent);
|
|
72
|
+
document.removeEventListener('keyup', this._handleEvent);
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
public onKeyDown(key?: KeyboardKey): KeySignal {
|
|
76
|
+
return this._checkAndAddSignal(key || undefined, 'keydown');
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
public onKeyUp(key?: KeyboardKey): KeySignal {
|
|
80
|
+
return this._checkAndAddSignal(key || undefined, 'keyup');
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
public isKeyDown(key: KeyboardKey): boolean {
|
|
84
|
+
return this._keysDown.has(key);
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
_update() {
|
|
88
|
+
//
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
protected getCoreSignals(): string[] {
|
|
92
|
+
return ['onGlobalKeyDown', 'onGlobalKeyUp'];
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
protected getCoreFunctions(): string[] {
|
|
96
|
+
return ['onKeyDown', 'onKeyUp', 'isKeyDown'];
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
private _handleKeyDown(e: KeyboardEvent): void {
|
|
100
|
+
const key = normalizeKey(e.key);
|
|
101
|
+
this._keysDown.add(key);
|
|
102
|
+
this.onGlobalKeyDown.emit({ event: e, key: e.key });
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
private _handleKeyUp(e: KeyboardEvent): void {
|
|
106
|
+
const key = normalizeKey(e.key);
|
|
107
|
+
this._keysDown.delete(key);
|
|
108
|
+
// DX guard: a key arrived but nothing consumes it (no KeyboardControls / no
|
|
109
|
+
// onKeyDown|onKeyUp subscribers). Almost always an Application subclass whose
|
|
110
|
+
// postInitialize() skipped framework wiring, or controls never connected.
|
|
111
|
+
if (isDev && !this._warnedNoConsumers && this._keyUpSignals.size === 0 && this._keyDownSignals.size === 0) {
|
|
112
|
+
this._warnedNoConsumers = true;
|
|
113
|
+
Logger.warn(
|
|
114
|
+
'KeyboardPlugin received a key event but no consumers are connected, so keyboard ' +
|
|
115
|
+
'actions will not fire. Ensure the InputPlugin controls are connected — e.g. an ' +
|
|
116
|
+
'Application subclass overriding postInitialize() must not skip framework wiring, ' +
|
|
117
|
+
'or call app.controls.connect().',
|
|
118
|
+
);
|
|
119
|
+
}
|
|
120
|
+
this.onGlobalKeyUp.emit({ event: e, key: e.key });
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
/**
|
|
124
|
+
* Check if the signal exists and add it if it doesn't
|
|
125
|
+
* Also, if this is the first signal, start listening for the event
|
|
126
|
+
* @param {string} key
|
|
127
|
+
* @param {KeyboardEventType} eventType
|
|
128
|
+
* @returns {KeySignal}
|
|
129
|
+
* @private
|
|
130
|
+
*/
|
|
131
|
+
private _checkAndAddSignal(key: string | undefined, eventType: KeyboardEventType): KeySignal {
|
|
132
|
+
const signalMap = eventType === 'keydown' ? this._keyDownSignals : this._keyUpSignals;
|
|
133
|
+
|
|
134
|
+
if (!signalMap.size) {
|
|
135
|
+
this._listen(eventType);
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
key = normalizeKey(key);
|
|
139
|
+
|
|
140
|
+
if (!signalMap.has(key)) {
|
|
141
|
+
signalMap.set(key, new Signal<(detail: KeyboardEventDetail) => void>());
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
return signalMap.get(key) as KeySignal;
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
private _listen(eventType: KeyboardEventType): void {
|
|
148
|
+
document.addEventListener(eventType, this._handleEvent);
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
private _handleEvent(event: KeyboardEvent): void {
|
|
152
|
+
if (!this._enabled) {
|
|
153
|
+
return;
|
|
154
|
+
}
|
|
155
|
+
const signalMap = event.type === 'keydown' ? this._keyDownSignals : this._keyUpSignals;
|
|
156
|
+
const key = normalizeKey(event.key);
|
|
157
|
+
signalMap.get('*undefined*')?.emit({ event, key });
|
|
158
|
+
signalMap.get(key)?.emit({ event, key });
|
|
159
|
+
}
|
|
160
|
+
}
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
import '@pixi/layout';
|
|
2
|
+
import { Layout } from '@pixi/layout';
|
|
3
|
+
import '@pixi/layout/devtools';
|
|
4
|
+
|
|
5
|
+
import { Plugin, type IPlugin } from './Plugin';
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Interface for the Layout plugin providing PIXI.js layout management.
|
|
9
|
+
* Enables advanced CSS-like layout capabilities for PIXI display objects.
|
|
10
|
+
*/
|
|
11
|
+
export interface ILayoutPlugin extends IPlugin {}
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* Layout management plugin for PIXI.js applications using @pixi/layout.
|
|
15
|
+
*
|
|
16
|
+
* Integrates the @pixi/layout library to provide CSS-like layout capabilities
|
|
17
|
+
* for PIXI display objects, including flexbox, positioning, and responsive design.
|
|
18
|
+
* Automatically configures sensible default styles for consistent layout behavior.
|
|
19
|
+
*
|
|
20
|
+
* Key Features:
|
|
21
|
+
* - CSS Flexbox-like layout system for PIXI containers
|
|
22
|
+
* - Responsive design capabilities with intrinsic sizing
|
|
23
|
+
* - Automatic layout calculation and positioning
|
|
24
|
+
* - Gap, padding, and margin support
|
|
25
|
+
* - Transform origin and object positioning controls
|
|
26
|
+
* - Development tools integration for layout debugging
|
|
27
|
+
*
|
|
28
|
+
* Default Style Configuration:
|
|
29
|
+
* - Container: Auto width/height with no gap
|
|
30
|
+
* - Leaf: Intrinsic sizing with flex shrink enabled
|
|
31
|
+
* - Shared: Center transform origin, row direction, stretch alignment
|
|
32
|
+
*
|
|
33
|
+
* @example
|
|
34
|
+
* ```typescript
|
|
35
|
+
* // Plugin is automatically initialized with the application
|
|
36
|
+
* // Layout capabilities are immediately available on all containers
|
|
37
|
+
*
|
|
38
|
+
* // Create a flexbox-style layout
|
|
39
|
+
* const container = new PIXI.Container();
|
|
40
|
+
* container.layout = {
|
|
41
|
+
* display: 'flex',
|
|
42
|
+
* flexDirection: 'row',
|
|
43
|
+
* justifyContent: 'space-between',
|
|
44
|
+
* alignItems: 'center',
|
|
45
|
+
* gap: 10,
|
|
46
|
+
* padding: 20
|
|
47
|
+
* };
|
|
48
|
+
*
|
|
49
|
+
* // Add children that will be automatically laid out
|
|
50
|
+
* const button1 = new PIXI.Sprite(buttonTexture);
|
|
51
|
+
* const button2 = new PIXI.Sprite(buttonTexture);
|
|
52
|
+
* const button3 = new PIXI.Sprite(buttonTexture);
|
|
53
|
+
*
|
|
54
|
+
* container.addChild(button1, button2, button3);
|
|
55
|
+
* // Children are automatically positioned using flexbox rules
|
|
56
|
+
*
|
|
57
|
+
* // Responsive design with intrinsic sizing
|
|
58
|
+
* const responsiveContainer = new PIXI.Container();
|
|
59
|
+
* responsiveContainer.layout = {
|
|
60
|
+
* width: '100%',
|
|
61
|
+
* maxWidth: 800,
|
|
62
|
+
* flexDirection: 'column',
|
|
63
|
+
* alignItems: 'center'
|
|
64
|
+
* };
|
|
65
|
+
* ```
|
|
66
|
+
*
|
|
67
|
+
* @remarks
|
|
68
|
+
* - Requires @pixi/layout package to be installed
|
|
69
|
+
* - Provides devtools integration for layout debugging in development
|
|
70
|
+
* - Default styles are optimized for common game UI patterns
|
|
71
|
+
* - Layout calculations happen automatically when display objects are added/modified
|
|
72
|
+
* - Supports both absolute and relative positioning
|
|
73
|
+
*/
|
|
74
|
+
export class LayoutPlugin extends Plugin implements ILayoutPlugin {
|
|
75
|
+
/** Plugin identifier for framework registration */
|
|
76
|
+
public readonly id = 'LayoutPlugin';
|
|
77
|
+
|
|
78
|
+
/**
|
|
79
|
+
* Initializes the Layout plugin with optimized default styles.
|
|
80
|
+
* Configures the @pixi/layout system with sensible defaults for game development,
|
|
81
|
+
* including flexbox behavior, sizing, and alignment settings.
|
|
82
|
+
*
|
|
83
|
+
* Default Configuration Details:
|
|
84
|
+
* - **Container styles**: Auto-sizing with no gaps for efficient nesting
|
|
85
|
+
* - **Leaf styles**: Intrinsic sizing with flex shrink for responsive behavior
|
|
86
|
+
* - **Shared styles**: Center origins, row direction, and stretch alignment
|
|
87
|
+
* - **Transform origin**: Set to 50% for predictable scaling and rotation
|
|
88
|
+
* - **Object position**: Centered for consistent alignment behavior
|
|
89
|
+
*
|
|
90
|
+
* @example
|
|
91
|
+
* ```typescript
|
|
92
|
+
* // Called automatically by the plugin system
|
|
93
|
+
* // After initialization, all PIXI containers support layout properties
|
|
94
|
+
*
|
|
95
|
+
* const container = new PIXI.Container();
|
|
96
|
+
* container.layout = {
|
|
97
|
+
* display: 'flex', // Use flexbox layout
|
|
98
|
+
* flexDirection: 'column', // Stack children vertically
|
|
99
|
+
* gap: 10, // 10px gap between children
|
|
100
|
+
* padding: 15 // 15px padding around content
|
|
101
|
+
* };
|
|
102
|
+
* ```
|
|
103
|
+
*/
|
|
104
|
+
async initialize() {
|
|
105
|
+
Layout.defaultStyle = {
|
|
106
|
+
container: {
|
|
107
|
+
width: 'auto',
|
|
108
|
+
height: 'auto',
|
|
109
|
+
gap: 0,
|
|
110
|
+
},
|
|
111
|
+
leaf: {
|
|
112
|
+
width: 'intrinsic',
|
|
113
|
+
height: 'intrinsic',
|
|
114
|
+
flexShrink: 1,
|
|
115
|
+
},
|
|
116
|
+
shared: {
|
|
117
|
+
transformOrigin: '50%',
|
|
118
|
+
objectPosition: 'center',
|
|
119
|
+
flexShrink: 1,
|
|
120
|
+
flexDirection: 'row',
|
|
121
|
+
alignContent: 'stretch',
|
|
122
|
+
flexWrap: 'nowrap',
|
|
123
|
+
overflow: 'visible',
|
|
124
|
+
},
|
|
125
|
+
};
|
|
126
|
+
}
|
|
127
|
+
}
|
|
@@ -0,0 +1,308 @@
|
|
|
1
|
+
import { Container as PIXIContainer } from 'pixi.js';
|
|
2
|
+
import { IPlugin, Plugin } from '.';
|
|
3
|
+
import { Container } from '../display';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Interface for the LookupPlugin providing fast container lookup functionality.
|
|
7
|
+
* Enables O(1) lookups of PIXI containers using hierarchical path strings.
|
|
8
|
+
*/
|
|
9
|
+
export interface ILookupPlugin extends IPlugin {
|
|
10
|
+
/**
|
|
11
|
+
* Retrieves a container at the specified hierarchical path.
|
|
12
|
+
* @param path - Slash-separated path like 'Parent/Child/GrandChild'
|
|
13
|
+
* @returns The container at the path, or undefined if not found
|
|
14
|
+
* @example
|
|
15
|
+
* ```typescript
|
|
16
|
+
* const button = lookupPlugin.getChildAtPath('UI/Menu/StartButton');
|
|
17
|
+
* ```
|
|
18
|
+
*/
|
|
19
|
+
getChildAtPath(path: string): PIXIContainer | undefined;
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* Gets the hierarchical path for a given container.
|
|
23
|
+
* @param container - The PIXI container to get the path for
|
|
24
|
+
* @returns The hierarchical path string, or empty string if not tracked
|
|
25
|
+
* @example
|
|
26
|
+
* ```typescript
|
|
27
|
+
* const path = lookupPlugin.getPathForChild(myContainer); // 'Parent/Child'
|
|
28
|
+
* ```
|
|
29
|
+
*/
|
|
30
|
+
getPathForChild(container: PIXIContainer): string;
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* Batch retrieval of containers at multiple paths.
|
|
34
|
+
* @param paths - Array of hierarchical paths to look up
|
|
35
|
+
* @returns Array of containers found at the specified paths (undefined entries filtered out)
|
|
36
|
+
* @example
|
|
37
|
+
* ```typescript
|
|
38
|
+
* const [ui, player] = lookupPlugin.getChildrenAtPaths('UI/HUD', 'Game/Player');
|
|
39
|
+
* ```
|
|
40
|
+
*/
|
|
41
|
+
getChildrenAtPaths(...paths: string[]): PIXIContainer[];
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
* Batch retrieval of paths for multiple containers.
|
|
45
|
+
* @param containers - Array of PIXI containers to get paths for
|
|
46
|
+
* @returns Array of hierarchical paths for the containers
|
|
47
|
+
* @example
|
|
48
|
+
* ```typescript
|
|
49
|
+
* const paths = lookupPlugin.getPathsForChildren(container1, container2);
|
|
50
|
+
* ```
|
|
51
|
+
*/
|
|
52
|
+
getPathsForChildren(...containers: PIXIContainer[]): string[];
|
|
53
|
+
|
|
54
|
+
/**
|
|
55
|
+
* Gets all currently tracked hierarchical paths.
|
|
56
|
+
* @returns Array of all path strings in the lookup system
|
|
57
|
+
* @example
|
|
58
|
+
* ```typescript
|
|
59
|
+
* const allPaths = lookupPlugin.getAllPaths(); // ['UI/Menu', 'Game/Player', ...]
|
|
60
|
+
* ```
|
|
61
|
+
*/
|
|
62
|
+
getAllPaths(): string[];
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
/**
|
|
66
|
+
* High-performance container lookup plugin for PIXI.js applications.
|
|
67
|
+
*
|
|
68
|
+
* Provides O(1) lookup of containers using hierarchical path strings by maintaining
|
|
69
|
+
* bidirectional maps between paths and containers. Automatically tracks container
|
|
70
|
+
* hierarchy changes through global Container events.
|
|
71
|
+
*
|
|
72
|
+
* @example
|
|
73
|
+
* ```typescript
|
|
74
|
+
* // Access containers by path
|
|
75
|
+
* const player = app.lookup.getChildAtPath('Game/Entities/Player');
|
|
76
|
+
* const menuButton = app.lookup.getChildAtPath('UI/MainMenu/StartButton');
|
|
77
|
+
*
|
|
78
|
+
* // Get paths for containers
|
|
79
|
+
* const playerPath = app.lookup.getPathForChild(playerSprite); // 'Game/Entities/Player'
|
|
80
|
+
* ```
|
|
81
|
+
*
|
|
82
|
+
* @remarks
|
|
83
|
+
* - Paths are built using container labels in hierarchical order
|
|
84
|
+
* - Only containers with labels are included in paths
|
|
85
|
+
* - Automatically handles container addition/removal through event listeners
|
|
86
|
+
* - Uses Map data structures for optimal performance
|
|
87
|
+
*/
|
|
88
|
+
export class LookupPlugin extends Plugin implements ILookupPlugin {
|
|
89
|
+
public name = 'lookup';
|
|
90
|
+
|
|
91
|
+
/** Fast O(1) lookup map: hierarchical path -> container reference */
|
|
92
|
+
private pathToContainer = new Map<string, PIXIContainer>();
|
|
93
|
+
|
|
94
|
+
/** Reverse lookup for efficient path updates: container reference -> hierarchical path */
|
|
95
|
+
private containerToPath = new Map<PIXIContainer, string>();
|
|
96
|
+
|
|
97
|
+
/**
|
|
98
|
+
* Core function names exposed by this plugin for framework integration.
|
|
99
|
+
*/
|
|
100
|
+
get coreFunctions(): string[] {
|
|
101
|
+
return ['getChildAtPath', 'getPathForChild', 'getChildrenAtPaths', 'getPathsForChildren', 'getAllPaths'];
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
/**
|
|
105
|
+
* Initializes the lookup plugin by connecting to global container events.
|
|
106
|
+
* Sets up automatic tracking of container hierarchy changes.
|
|
107
|
+
*/
|
|
108
|
+
public async initialize() {
|
|
109
|
+
Container.onGlobalChildAdded.connect(this.onChildAdded);
|
|
110
|
+
Container.onGlobalChildRemoved.connect(this.onChildRemoved);
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
/**
|
|
114
|
+
* Fast O(1) lookup of container by hierarchical path.
|
|
115
|
+
*
|
|
116
|
+
* @param path - Slash-separated path like 'Parent/Child/GrandChild'
|
|
117
|
+
* @returns The container at the specified path, or undefined if not found
|
|
118
|
+
*
|
|
119
|
+
* @example
|
|
120
|
+
* ```typescript
|
|
121
|
+
* // Get a specific UI element
|
|
122
|
+
* const healthBar = lookup.getChildAtPath('UI/HUD/HealthBar');
|
|
123
|
+
* if (healthBar) {
|
|
124
|
+
* // Update health display
|
|
125
|
+
* healthBar.visible = true;
|
|
126
|
+
* }
|
|
127
|
+
* ```
|
|
128
|
+
*/
|
|
129
|
+
public getChildAtPath(path: string): PIXIContainer | undefined {
|
|
130
|
+
return this.pathToContainer.get(path);
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
/**
|
|
134
|
+
* Batch retrieval of containers at multiple paths.
|
|
135
|
+
* Filters out undefined results for convenience.
|
|
136
|
+
*
|
|
137
|
+
* @param paths - Variable number of hierarchical paths to look up
|
|
138
|
+
* @returns Array of found containers (undefined entries filtered out)
|
|
139
|
+
*
|
|
140
|
+
* @example
|
|
141
|
+
* ```typescript
|
|
142
|
+
* // Get multiple UI elements at once
|
|
143
|
+
* const [menu, hud, inventory] = lookup.getChildrenAtPaths(
|
|
144
|
+
* 'UI/MainMenu',
|
|
145
|
+
* 'UI/HUD',
|
|
146
|
+
* 'UI/Inventory'
|
|
147
|
+
* );
|
|
148
|
+
* ```
|
|
149
|
+
*/
|
|
150
|
+
public getChildrenAtPaths(...paths: string[]): PIXIContainer[] {
|
|
151
|
+
return paths.map((path) => this.getChildAtPath(path)).filter((container) => container !== undefined);
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
/**
|
|
155
|
+
* Get the hierarchical path for a given container.
|
|
156
|
+
*
|
|
157
|
+
* @param container - The container to get the path for
|
|
158
|
+
* @returns The hierarchical path or empty string if not tracked
|
|
159
|
+
*
|
|
160
|
+
* @example
|
|
161
|
+
* ```typescript
|
|
162
|
+
* // Get path for debugging or logging
|
|
163
|
+
* const containerPath = lookup.getPathForChild(someSprite);
|
|
164
|
+
* console.log(`Container is at: ${containerPath}`);
|
|
165
|
+
* ```
|
|
166
|
+
*/
|
|
167
|
+
public getPathForChild(container: PIXIContainer): string {
|
|
168
|
+
return this.containerToPath.get(container) || '';
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
/**
|
|
172
|
+
* Batch retrieval of paths for multiple containers.
|
|
173
|
+
*
|
|
174
|
+
* @param containers - Variable number of PIXI containers to get paths for
|
|
175
|
+
* @returns Array of hierarchical paths for the containers
|
|
176
|
+
*
|
|
177
|
+
* @example
|
|
178
|
+
* ```typescript
|
|
179
|
+
* // Get paths for multiple containers for debugging
|
|
180
|
+
* const paths = lookup.getPathsForChildren(sprite1, sprite2, sprite3);
|
|
181
|
+
* console.log('Container paths:', paths);
|
|
182
|
+
* ```
|
|
183
|
+
*/
|
|
184
|
+
public getPathsForChildren(...containers: PIXIContainer[]): string[] {
|
|
185
|
+
return containers.map((container) => this.getPathForChild(container));
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
/**
|
|
189
|
+
* Gets all currently tracked hierarchical paths.
|
|
190
|
+
* Useful for debugging, serialization, or introspection.
|
|
191
|
+
*
|
|
192
|
+
* @returns Array of all path strings in the lookup system
|
|
193
|
+
*
|
|
194
|
+
* @example
|
|
195
|
+
* ```typescript
|
|
196
|
+
* // Debug all tracked containers
|
|
197
|
+
* const allPaths = lookup.getAllPaths();
|
|
198
|
+
* console.log('All tracked containers:', allPaths);
|
|
199
|
+
* ```
|
|
200
|
+
*/
|
|
201
|
+
public getAllPaths(): string[] {
|
|
202
|
+
return Array.from(this.pathToContainer.keys());
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
/**
|
|
206
|
+
* Gets all currently tracked containers.
|
|
207
|
+
* Useful for bulk operations or debugging.
|
|
208
|
+
*
|
|
209
|
+
* @returns Array of all container references in the lookup system
|
|
210
|
+
*/
|
|
211
|
+
public getAllChildren(): PIXIContainer[] {
|
|
212
|
+
return Array.from(this.pathToContainer.values());
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
/**
|
|
216
|
+
* Event handler for when a child is added to any container.
|
|
217
|
+
* Automatically adds the new container to the lookup system.
|
|
218
|
+
*
|
|
219
|
+
* @param child - The newly added container
|
|
220
|
+
*/
|
|
221
|
+
private onChildAdded(child: PIXIContainer) {
|
|
222
|
+
this.addToLookup(child);
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
/**
|
|
226
|
+
* Event handler for when a child is removed from any container.
|
|
227
|
+
* Automatically removes the container from the lookup system.
|
|
228
|
+
*
|
|
229
|
+
* @param child - The removed container
|
|
230
|
+
*/
|
|
231
|
+
private onChildRemoved(child: PIXIContainer) {
|
|
232
|
+
this.removeFromLookup(child);
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
/**
|
|
236
|
+
* Add a container and all its descendants to the lookup system.
|
|
237
|
+
* Recursively processes the entire subtree to maintain lookup integrity.
|
|
238
|
+
*
|
|
239
|
+
* @param container - The container to add (along with all its children)
|
|
240
|
+
*/
|
|
241
|
+
private addToLookup(container: PIXIContainer): void {
|
|
242
|
+
const path = this.buildPath(container);
|
|
243
|
+
|
|
244
|
+
if (path) {
|
|
245
|
+
this.pathToContainer.set(path, container);
|
|
246
|
+
this.containerToPath.set(container, path);
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
// Recursively add all children to maintain lookup integrity
|
|
250
|
+
if (container.children) {
|
|
251
|
+
for (const child of container.children) {
|
|
252
|
+
this.addToLookup(child as PIXIContainer);
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
|
|
257
|
+
/**
|
|
258
|
+
* Remove a container and all its descendants from the lookup system.
|
|
259
|
+
* Recursively processes the entire subtree to prevent memory leaks.
|
|
260
|
+
*
|
|
261
|
+
* @param container - The container to remove (along with all its children)
|
|
262
|
+
*/
|
|
263
|
+
private removeFromLookup(container: PIXIContainer): void {
|
|
264
|
+
// Remove all descendants first
|
|
265
|
+
if (container.children) {
|
|
266
|
+
for (const child of container.children) {
|
|
267
|
+
this.removeFromLookup(child as PIXIContainer);
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
|
|
271
|
+
// Remove this container from lookup
|
|
272
|
+
const path = this.containerToPath.get(container);
|
|
273
|
+
if (path) {
|
|
274
|
+
this.pathToContainer.delete(path);
|
|
275
|
+
this.containerToPath.delete(container);
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
|
|
279
|
+
/**
|
|
280
|
+
* Build the hierarchical path for a container by traversing up the parent chain.
|
|
281
|
+
* Only includes containers with labels in the path, stopping at 'Stage'.
|
|
282
|
+
*
|
|
283
|
+
* @param container - The container to build a path for
|
|
284
|
+
* @returns The hierarchical path string, or empty string if no labeled ancestors
|
|
285
|
+
*
|
|
286
|
+
* @example
|
|
287
|
+
* ```typescript
|
|
288
|
+
* // For a container structure: Stage -> Game -> Player -> HealthBar
|
|
289
|
+
* // Where each has a label, this would return: 'Game/Player/HealthBar'
|
|
290
|
+
* ```
|
|
291
|
+
*/
|
|
292
|
+
private buildPath(container: PIXIContainer): string {
|
|
293
|
+
const pathSegments: string[] = [];
|
|
294
|
+
let current: PIXIContainer | null = container;
|
|
295
|
+
|
|
296
|
+
// Traverse up the parent chain to build path segments
|
|
297
|
+
while (current && current.label) {
|
|
298
|
+
pathSegments.unshift(current.label);
|
|
299
|
+
current = current.parent as PIXIContainer;
|
|
300
|
+
if (current?.label === 'Stage') {
|
|
301
|
+
break;
|
|
302
|
+
}
|
|
303
|
+
}
|
|
304
|
+
|
|
305
|
+
// Only return a path if we have at least one labeled segment
|
|
306
|
+
return pathSegments.length > 0 ? pathSegments.join('/') : '';
|
|
307
|
+
}
|
|
308
|
+
}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import { describe, expect, it, vi } from 'vitest';
|
|
2
|
+
|
|
3
|
+
// Plugin.ts transitively imports Application → Pixi display graph. Stub it.
|
|
4
|
+
vi.mock('../core', () => ({
|
|
5
|
+
coreFunctionRegistry: {},
|
|
6
|
+
coreSignalRegistry: {},
|
|
7
|
+
}));
|
|
8
|
+
vi.mock('../core/Application', () => ({
|
|
9
|
+
Application: { getInstance: () => ({}) },
|
|
10
|
+
}));
|
|
11
|
+
|
|
12
|
+
import { Signal } from '../signals';
|
|
13
|
+
import { Plugin } from './Plugin';
|
|
14
|
+
|
|
15
|
+
class TestPlugin extends Plugin<{ foo: string }> {
|
|
16
|
+
public initCalls = 0;
|
|
17
|
+
public postCalls = 0;
|
|
18
|
+
public readonly id = 'test';
|
|
19
|
+
protected _options = { foo: 'default' };
|
|
20
|
+
|
|
21
|
+
async initialize(options: Partial<{ foo: string }> = {}) {
|
|
22
|
+
this._options = { ...this._options, ...options };
|
|
23
|
+
this.initCalls++;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
async postInitialize() {
|
|
27
|
+
this.postCalls++;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
describe('Plugin', () => {
|
|
32
|
+
it('runs initialize and merges options', async () => {
|
|
33
|
+
const p = new TestPlugin();
|
|
34
|
+
await p.initialize({ foo: 'bar' });
|
|
35
|
+
expect(p.initCalls).toBe(1);
|
|
36
|
+
expect(p.options.foo).toBe('bar');
|
|
37
|
+
});
|
|
38
|
+
|
|
39
|
+
it('runs postInitialize independently', async () => {
|
|
40
|
+
const p = new TestPlugin();
|
|
41
|
+
await p.postInitialize();
|
|
42
|
+
expect(p.postCalls).toBe(1);
|
|
43
|
+
});
|
|
44
|
+
|
|
45
|
+
it('destroy disconnects tracked signal connections', () => {
|
|
46
|
+
const p = new TestPlugin();
|
|
47
|
+
const s = new Signal<() => void>();
|
|
48
|
+
const handler = vi.fn();
|
|
49
|
+
p.addSignalConnection(s.connect(handler));
|
|
50
|
+
s.emit();
|
|
51
|
+
expect(handler).toHaveBeenCalledTimes(1);
|
|
52
|
+
|
|
53
|
+
p.destroy();
|
|
54
|
+
s.emit();
|
|
55
|
+
expect(handler).toHaveBeenCalledTimes(1);
|
|
56
|
+
});
|
|
57
|
+
|
|
58
|
+
it('clearSignalConnections disconnects without destroying', () => {
|
|
59
|
+
const p = new TestPlugin();
|
|
60
|
+
const s = new Signal<() => void>();
|
|
61
|
+
const handler = vi.fn();
|
|
62
|
+
p.addSignalConnection(s.connect(handler));
|
|
63
|
+
p.clearSignalConnections();
|
|
64
|
+
s.emit();
|
|
65
|
+
expect(handler).not.toHaveBeenCalled();
|
|
66
|
+
});
|
|
67
|
+
|
|
68
|
+
it('base Plugin.initialize/postInitialize resolve without error', async () => {
|
|
69
|
+
const p = new Plugin('base');
|
|
70
|
+
await expect(p.initialize({})).resolves.toBeUndefined();
|
|
71
|
+
await expect(p.postInitialize({} as never)).resolves.toBeUndefined();
|
|
72
|
+
});
|
|
73
|
+
});
|