@needle-tools/engine 4.7.1 → 4.7.2-alpha
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/CHANGELOG.md +3782 -3782
- package/LICENSE.md +10 -10
- package/README.md +64 -64
- package/components.needle.json +1 -1
- package/dist/generateMeshBVH.worker-Cdfpaq5W.js +25 -0
- package/dist/gltf-progressive-YjtQYFa9.js +1052 -0
- package/dist/gltf-progressive-yOP1mp5W.min.js +8 -0
- package/dist/gltf-progressive-zdhlW609.umd.cjs +8 -0
- package/dist/{needle-engine.bundle-CN9UC6Ju.min.js → needle-engine.bundle-BhDF-YSv.min.js} +65 -65
- package/dist/{needle-engine.bundle-B7M9iBIa.umd.cjs → needle-engine.bundle-D2myV4E4.umd.cjs} +61 -61
- package/dist/{needle-engine.bundle-BpCihhaP.js → needle-engine.bundle-gp00DTS4.js} +641 -641
- package/dist/needle-engine.d.ts +129 -130
- package/dist/needle-engine.js +4 -4
- package/dist/needle-engine.min.js +1 -1
- package/dist/needle-engine.umd.cjs +1 -1
- package/dist/{postprocessing-CjW23fio.umd.cjs → postprocessing-8AQTeZsr.umd.cjs} +2 -2
- package/dist/{postprocessing-xYQWCHFu.min.js → postprocessing-BDScN9yu.min.js} +2 -2
- package/dist/{postprocessing-DYLNOL3W.js → postprocessing-BkxN_08g.js} +3 -3
- package/dist/{three-DuDKwKB8.min.js → three-Boa-jOq-.min.js} +33 -33
- package/dist/{three-DrqIzZTH.js → three-Bz6X1mrw.js} +4198 -4198
- package/dist/{three-B_hneGZr.umd.cjs → three-DMrv-4ar.umd.cjs} +4 -4
- package/dist/{three-examples-X3OadjXB.umd.cjs → three-examples-C7ryg8vN.umd.cjs} +3 -3
- package/dist/{three-examples-DaDLBuy6.min.js → three-examples-DuVhxqft.min.js} +14 -14
- package/dist/{three-examples-B50TT3Iu.js → three-examples-GggCDHv0.js} +5 -5
- package/dist/{three-mesh-ui-CxuWt7m-.js → three-mesh-ui-CLNOfsWn.js} +1 -1
- package/dist/{three-mesh-ui-B3p3gyUz.min.js → three-mesh-ui-CY6Izc7C.min.js} +1 -1
- package/dist/{three-mesh-ui-CQiIQIlA.umd.cjs → three-mesh-ui-CwlN0FUC.umd.cjs} +1 -1
- package/dist/{vendor-BmYIgaS1.js → vendor-BSD1RQIh.js} +3 -3
- package/dist/{vendor-Cavtu3CP.umd.cjs → vendor-DHr4aqIZ.umd.cjs} +3 -3
- package/dist/{vendor-BlSxe9JJ.min.js → vendor-zxXa3Dmr.min.js} +3 -3
- package/lib/asap/needle-asap.d.ts +1 -1
- package/lib/asap/needle-asap.js +95 -95
- package/lib/asap/sessiongranted.d.ts +3 -3
- package/lib/asap/sessiongranted.js +65 -65
- package/lib/asap/utils.d.ts +1 -1
- package/lib/asap/utils.js +3 -3
- package/lib/engine/analytics/index.d.ts +6 -6
- package/lib/engine/analytics/index.js +12 -12
- package/lib/engine/analytics/lcp.d.ts +3 -3
- package/lib/engine/analytics/lcp.js +34 -34
- package/lib/engine/api.d.ts +82 -82
- package/lib/engine/api.js +81 -81
- package/lib/engine/assets/index.d.ts +11 -11
- package/lib/engine/assets/index.js +47 -47
- package/lib/engine/assets/static.d.ts +1 -1
- package/lib/engine/assets/static.js +4 -4
- package/lib/engine/codegen/register_types.d.ts +1 -1
- package/lib/engine/codegen/register_types.js +300 -300
- package/lib/engine/debug/debug.d.ts +15 -15
- package/lib/engine/debug/debug.js +44 -44
- package/lib/engine/debug/debug_console.d.ts +2 -2
- package/lib/engine/debug/debug_console.js +307 -307
- package/lib/engine/debug/debug_overlay.d.ts +22 -22
- package/lib/engine/debug/debug_overlay.js +316 -316
- package/lib/engine/debug/debug_spatial_console.d.ts +2 -2
- package/lib/engine/debug/debug_spatial_console.js +390 -390
- package/lib/engine/debug/index.d.ts +2 -2
- package/lib/engine/debug/index.js +2 -2
- package/lib/engine/engine_addressables.d.ts +164 -164
- package/lib/engine/engine_addressables.js +601 -601
- package/lib/engine/engine_animation.d.ts +43 -43
- package/lib/engine/engine_animation.js +133 -133
- package/lib/engine/engine_application.d.ts +45 -45
- package/lib/engine/engine_application.js +104 -104
- package/lib/engine/engine_assetdatabase.d.ts +25 -25
- package/lib/engine/engine_assetdatabase.js +346 -346
- package/lib/engine/engine_audio.d.ts +4 -4
- package/lib/engine/engine_audio.js +23 -23
- package/lib/engine/engine_camera.d.ts +13 -13
- package/lib/engine/engine_camera.js +30 -30
- package/lib/engine/engine_components.d.ts +110 -110
- package/lib/engine/engine_components.js +374 -374
- package/lib/engine/engine_components_internal.d.ts +9 -9
- package/lib/engine/engine_components_internal.js +36 -36
- package/lib/engine/engine_constants.d.ts +10 -10
- package/lib/engine/engine_constants.js +41 -41
- package/lib/engine/engine_context.d.ts +475 -475
- package/lib/engine/engine_context.js +1673 -1673
- package/lib/engine/engine_context_registry.d.ts +71 -71
- package/lib/engine/engine_context_registry.js +117 -117
- package/lib/engine/engine_coroutine.d.ts +35 -35
- package/lib/engine/engine_coroutine.js +52 -52
- package/lib/engine/engine_create_objects.d.ts +119 -119
- package/lib/engine/engine_create_objects.js +320 -320
- package/lib/engine/engine_default_parameters.d.ts +2 -2
- package/lib/engine/engine_default_parameters.js +3 -3
- package/lib/engine/engine_editor-sync.d.ts +21 -21
- package/lib/engine/engine_editor-sync.js +4 -4
- package/lib/engine/engine_fileloader.d.ts +2 -2
- package/lib/engine/engine_fileloader.js +8 -8
- package/lib/engine/engine_gameobject.d.ts +68 -68
- package/lib/engine/engine_gameobject.js +619 -619
- package/lib/engine/engine_generic_utils.d.ts +1 -1
- package/lib/engine/engine_generic_utils.js +13 -13
- package/lib/engine/engine_gizmos.d.ts +149 -149
- package/lib/engine/engine_gizmos.js +530 -530
- package/lib/engine/engine_gltf.d.ts +12 -12
- package/lib/engine/engine_gltf.js +15 -15
- package/lib/engine/engine_gltf_builtin_components.d.ts +11 -11
- package/lib/engine/engine_gltf_builtin_components.js +341 -341
- package/lib/engine/engine_hot_reload.d.ts +8 -8
- package/lib/engine/engine_hot_reload.js +197 -197
- package/lib/engine/engine_input.d.ts +362 -362
- package/lib/engine/engine_input.js +1294 -1294
- package/lib/engine/engine_input_utils.d.ts +2 -2
- package/lib/engine/engine_input_utils.js +22 -22
- package/lib/engine/engine_instancing.d.ts +19 -19
- package/lib/engine/engine_instancing.js +39 -39
- package/lib/engine/engine_license.d.ts +11 -11
- package/lib/engine/engine_license.js +369 -369
- package/lib/engine/engine_lifecycle_api.d.ts +83 -83
- package/lib/engine/engine_lifecycle_api.js +106 -106
- package/lib/engine/engine_lifecycle_functions_internal.d.ts +32 -32
- package/lib/engine/engine_lifecycle_functions_internal.js +146 -146
- package/lib/engine/engine_lightdata.d.ts +23 -23
- package/lib/engine/engine_lightdata.js +101 -101
- package/lib/engine/engine_loaders.callbacks.d.ts +97 -97
- package/lib/engine/engine_loaders.callbacks.js +86 -86
- package/lib/engine/engine_loaders.d.ts +48 -48
- package/lib/engine/engine_loaders.gltf.d.ts +13 -13
- package/lib/engine/engine_loaders.gltf.js +62 -62
- package/lib/engine/engine_loaders.js +337 -337
- package/lib/engine/engine_lods.d.ts +35 -35
- package/lib/engine/engine_lods.js +160 -160
- package/lib/engine/engine_lods.js.map +1 -1
- package/lib/engine/engine_mainloop_utils.d.ts +32 -32
- package/lib/engine/engine_mainloop_utils.js +466 -466
- package/lib/engine/engine_math.d.ts +114 -114
- package/lib/engine/engine_math.js +247 -247
- package/lib/engine/engine_modules.d.ts +36 -36
- package/lib/engine/engine_modules.js +85 -85
- package/lib/engine/engine_networking.d.ts +260 -260
- package/lib/engine/engine_networking.js +764 -764
- package/lib/engine/engine_networking_auto.d.ts +24 -24
- package/lib/engine/engine_networking_auto.js +310 -310
- package/lib/engine/engine_networking_blob.d.ts +48 -48
- package/lib/engine/engine_networking_blob.js +228 -228
- package/lib/engine/engine_networking_files.d.ts +35 -35
- package/lib/engine/engine_networking_files.js +172 -172
- package/lib/engine/engine_networking_files_default_components.d.ts +6 -6
- package/lib/engine/engine_networking_files_default_components.js +42 -42
- package/lib/engine/engine_networking_instantiate.d.ts +100 -100
- package/lib/engine/engine_networking_instantiate.js +345 -345
- package/lib/engine/engine_networking_peer.d.ts +15 -15
- package/lib/engine/engine_networking_peer.js +132 -132
- package/lib/engine/engine_networking_streams.d.ts +123 -123
- package/lib/engine/engine_networking_streams.js +645 -645
- package/lib/engine/engine_networking_types.d.ts +22 -22
- package/lib/engine/engine_networking_types.js +7 -7
- package/lib/engine/engine_networking_utils.d.ts +2 -2
- package/lib/engine/engine_networking_utils.js +20 -20
- package/lib/engine/engine_networking_websocket.d.ts +1 -1
- package/lib/engine/engine_networking_websocket.js +2 -2
- package/lib/engine/engine_patcher.d.ts +10 -10
- package/lib/engine/engine_patcher.js +142 -142
- package/lib/engine/engine_physics.d.ts +152 -152
- package/lib/engine/engine_physics.js +645 -645
- package/lib/engine/engine_physics.types.d.ts +40 -40
- package/lib/engine/engine_physics.types.js +33 -33
- package/lib/engine/engine_physics_rapier.d.ts +147 -147
- package/lib/engine/engine_physics_rapier.js +1433 -1433
- package/lib/engine/engine_playerview.d.ts +26 -26
- package/lib/engine/engine_playerview.js +64 -64
- package/lib/engine/engine_scenelighting.d.ts +71 -71
- package/lib/engine/engine_scenelighting.js +226 -226
- package/lib/engine/engine_serialization.d.ts +3 -3
- package/lib/engine/engine_serialization.js +3 -3
- package/lib/engine/engine_serialization_builtin_serializer.d.ts +72 -72
- package/lib/engine/engine_serialization_builtin_serializer.js +403 -403
- package/lib/engine/engine_serialization_core.d.ts +94 -94
- package/lib/engine/engine_serialization_core.js +607 -607
- package/lib/engine/engine_serialization_decorator.d.ts +23 -23
- package/lib/engine/engine_serialization_decorator.js +66 -66
- package/lib/engine/engine_setup.d.ts +1 -1
- package/lib/engine/engine_setup.js +2 -2
- package/lib/engine/engine_shaders.d.ts +53 -53
- package/lib/engine/engine_shaders.js +252 -252
- package/lib/engine/engine_shims.d.ts +4 -4
- package/lib/engine/engine_shims.js +24 -24
- package/lib/engine/engine_test_utils.d.ts +39 -39
- package/lib/engine/engine_test_utils.js +83 -83
- package/lib/engine/engine_texture.d.ts +28 -28
- package/lib/engine/engine_texture.js +64 -64
- package/lib/engine/engine_three_utils.d.ts +204 -204
- package/lib/engine/engine_three_utils.js +788 -788
- package/lib/engine/engine_time.d.ts +51 -51
- package/lib/engine/engine_time.js +82 -82
- package/lib/engine/engine_time_utils.d.ts +88 -88
- package/lib/engine/engine_time_utils.js +215 -215
- package/lib/engine/engine_tonemapping.d.ts +6 -6
- package/lib/engine/engine_tonemapping.js +197 -197
- package/lib/engine/engine_types.d.ts +578 -578
- package/lib/engine/engine_types.js +95 -95
- package/lib/engine/engine_typestore.d.ts +28 -28
- package/lib/engine/engine_typestore.js +55 -55
- package/lib/engine/engine_util_decorator.d.ts +13 -13
- package/lib/engine/engine_util_decorator.js +116 -116
- package/lib/engine/engine_utils.d.ts +248 -248
- package/lib/engine/engine_utils.js +1012 -1012
- package/lib/engine/engine_utils_format.d.ts +24 -24
- package/lib/engine/engine_utils_format.js +239 -239
- package/lib/engine/engine_utils_screenshot.d.ts +159 -159
- package/lib/engine/engine_utils_screenshot.js +522 -522
- package/lib/engine/engine_utils_screenshot.xr.d.ts +5 -5
- package/lib/engine/engine_utils_screenshot.xr.js +90 -90
- package/lib/engine/engine_xr.d.ts +1 -1
- package/lib/engine/engine_xr.js +1 -1
- package/lib/engine/export/gltf/Writers.d.ts +19 -19
- package/lib/engine/export/gltf/Writers.js +24 -24
- package/lib/engine/export/gltf/index.d.ts +11 -11
- package/lib/engine/export/gltf/index.js +123 -123
- package/lib/engine/export/index.d.ts +2 -2
- package/lib/engine/export/index.js +2 -2
- package/lib/engine/export/state.d.ts +7 -7
- package/lib/engine/export/state.js +17 -17
- package/lib/engine/export/utils.d.ts +2 -2
- package/lib/engine/export/utils.js +7 -7
- package/lib/engine/extensions/EXT_texture_exr.d.ts +8 -8
- package/lib/engine/extensions/EXT_texture_exr.js +32 -32
- package/lib/engine/extensions/NEEDLE_animator_controller_model.d.ts +122 -122
- package/lib/engine/extensions/NEEDLE_animator_controller_model.js +95 -95
- package/lib/engine/extensions/NEEDLE_components.d.ts +35 -35
- package/lib/engine/extensions/NEEDLE_components.js +220 -220
- package/lib/engine/extensions/NEEDLE_gameobject_data.d.ts +10 -10
- package/lib/engine/extensions/NEEDLE_gameobject_data.js +57 -57
- package/lib/engine/extensions/NEEDLE_lighting_settings.d.ts +37 -37
- package/lib/engine/extensions/NEEDLE_lighting_settings.js +157 -157
- package/lib/engine/extensions/NEEDLE_lightmaps.d.ts +18 -18
- package/lib/engine/extensions/NEEDLE_lightmaps.js +99 -99
- package/lib/engine/extensions/NEEDLE_persistent_assets.d.ts +11 -11
- package/lib/engine/extensions/NEEDLE_persistent_assets.js +63 -63
- package/lib/engine/extensions/NEEDLE_progressive.d.ts +1 -1
- package/lib/engine/extensions/NEEDLE_progressive.js +1 -1
- package/lib/engine/extensions/NEEDLE_render_objects.d.ts +13 -13
- package/lib/engine/extensions/NEEDLE_render_objects.js +159 -159
- package/lib/engine/extensions/NEEDLE_techniques_webgl.d.ts +38 -38
- package/lib/engine/extensions/NEEDLE_techniques_webgl.js +564 -564
- package/lib/engine/extensions/extension_resolver.d.ts +4 -4
- package/lib/engine/extensions/extension_resolver.js +1 -1
- package/lib/engine/extensions/extension_utils.d.ts +12 -12
- package/lib/engine/extensions/extension_utils.js +152 -152
- package/lib/engine/extensions/extensions.d.ts +32 -32
- package/lib/engine/extensions/extensions.js +107 -107
- package/lib/engine/extensions/index.d.ts +6 -6
- package/lib/engine/extensions/index.js +6 -6
- package/lib/engine/extensions/usage_tracker.d.ts +13 -13
- package/lib/engine/extensions/usage_tracker.js +65 -65
- package/lib/engine/js-extensions/Camera.d.ts +1 -1
- package/lib/engine/js-extensions/Camera.js +39 -39
- package/lib/engine/js-extensions/ExtensionUtils.d.ts +9 -9
- package/lib/engine/js-extensions/ExtensionUtils.js +67 -67
- package/lib/engine/js-extensions/Layers.d.ts +6 -6
- package/lib/engine/js-extensions/Layers.js +22 -22
- package/lib/engine/js-extensions/Object3D.d.ts +120 -120
- package/lib/engine/js-extensions/Object3D.js +136 -136
- package/lib/engine/js-extensions/RGBAColor.d.ts +23 -23
- package/lib/engine/js-extensions/RGBAColor.js +111 -111
- package/lib/engine/js-extensions/Vector.d.ts +3 -3
- package/lib/engine/js-extensions/Vector.js +13 -13
- package/lib/engine/js-extensions/index.d.ts +5 -5
- package/lib/engine/js-extensions/index.js +5 -5
- package/lib/engine/physics/workers/mesh-bvh/GenerateMeshBVHWorker.d.ts +4 -4
- package/lib/engine/physics/workers/mesh-bvh/GenerateMeshBVHWorker.js +79 -79
- package/lib/engine/shaders/shaderData.d.ts +55 -55
- package/lib/engine/shaders/shaderData.js +58 -58
- package/lib/engine/tests/test_utils.d.ts +2 -2
- package/lib/engine/tests/test_utils.js +53 -53
- package/lib/engine/webcomponents/WebXRButtons.d.ts +56 -56
- package/lib/engine/webcomponents/WebXRButtons.js +230 -230
- package/lib/engine/webcomponents/api.d.ts +5 -5
- package/lib/engine/webcomponents/api.js +4 -4
- package/lib/engine/webcomponents/buttons.d.ts +51 -51
- package/lib/engine/webcomponents/buttons.js +264 -264
- package/lib/engine/webcomponents/fonts.d.ts +9 -9
- package/lib/engine/webcomponents/fonts.js +32 -32
- package/lib/engine/webcomponents/icons.d.ts +9 -9
- package/lib/engine/webcomponents/icons.js +52 -52
- package/lib/engine/webcomponents/index.d.ts +1 -1
- package/lib/engine/webcomponents/index.js +1 -1
- package/lib/engine/webcomponents/logo-element.d.ts +10 -10
- package/lib/engine/webcomponents/logo-element.js +67 -67
- package/lib/engine/webcomponents/needle menu/needle-menu-spatial.d.ts +37 -37
- package/lib/engine/webcomponents/needle menu/needle-menu-spatial.js +513 -513
- package/lib/engine/webcomponents/needle menu/needle-menu.d.ts +155 -155
- package/lib/engine/webcomponents/needle menu/needle-menu.js +1029 -1029
- package/lib/engine/webcomponents/needle-button.d.ts +34 -34
- package/lib/engine/webcomponents/needle-button.js +161 -161
- package/lib/engine/webcomponents/needle-engine.ar-overlay.d.ts +21 -21
- package/lib/engine/webcomponents/needle-engine.ar-overlay.js +166 -166
- package/lib/engine/webcomponents/needle-engine.attributes.d.ts +69 -69
- package/lib/engine/webcomponents/needle-engine.attributes.js +1 -1
- package/lib/engine/webcomponents/needle-engine.d.ts +116 -116
- package/lib/engine/webcomponents/needle-engine.extras.d.ts +6 -6
- package/lib/engine/webcomponents/needle-engine.extras.js +13 -13
- package/lib/engine/webcomponents/needle-engine.js +821 -821
- package/lib/engine/webcomponents/needle-engine.loading.d.ts +44 -44
- package/lib/engine/webcomponents/needle-engine.loading.js +341 -341
- package/lib/engine/xr/NeedleXRController.d.ts +313 -313
- package/lib/engine/xr/NeedleXRController.js +1007 -1007
- package/lib/engine/xr/NeedleXRSession.d.ts +340 -340
- package/lib/engine/xr/NeedleXRSession.js +1463 -1463
- package/lib/engine/xr/NeedleXRSync.d.ts +22 -22
- package/lib/engine/xr/NeedleXRSync.js +188 -188
- package/lib/engine/xr/SceneTransition.d.ts +18 -18
- package/lib/engine/xr/SceneTransition.js +69 -69
- package/lib/engine/xr/TempXRContext.d.ts +34 -34
- package/lib/engine/xr/TempXRContext.js +187 -187
- package/lib/engine/xr/XRRig.d.ts +7 -7
- package/lib/engine/xr/XRRig.js +1 -1
- package/lib/engine/xr/api.d.ts +6 -6
- package/lib/engine/xr/api.js +6 -6
- package/lib/engine/xr/events.d.ts +66 -66
- package/lib/engine/xr/events.js +93 -93
- package/lib/engine/xr/internal.d.ts +12 -12
- package/lib/engine/xr/internal.js +25 -25
- package/lib/engine/xr/usdz.d.ts +12 -12
- package/lib/engine/xr/usdz.js +29 -29
- package/lib/engine/xr/utils.d.ts +11 -11
- package/lib/engine/xr/utils.js +34 -34
- package/lib/engine-components/AlignmentConstraint.d.ts +10 -10
- package/lib/engine-components/AlignmentConstraint.js +39 -39
- package/lib/engine-components/Animation.d.ts +156 -156
- package/lib/engine-components/Animation.js +508 -508
- package/lib/engine-components/AnimationCurve.d.ts +40 -40
- package/lib/engine-components/AnimationCurve.js +159 -159
- package/lib/engine-components/AnimationUtils.d.ts +8 -8
- package/lib/engine-components/AnimationUtils.js +27 -27
- package/lib/engine-components/AnimationUtilsAutoplay.d.ts +1 -1
- package/lib/engine-components/AnimationUtilsAutoplay.js +39 -39
- package/lib/engine-components/Animator.d.ts +217 -217
- package/lib/engine-components/Animator.js +354 -354
- package/lib/engine-components/AnimatorController.d.ts +227 -227
- package/lib/engine-components/AnimatorController.js +1152 -1152
- package/lib/engine-components/AudioListener.d.ts +33 -33
- package/lib/engine-components/AudioListener.js +86 -86
- package/lib/engine-components/AudioSource.d.ts +217 -217
- package/lib/engine-components/AudioSource.js +635 -635
- package/lib/engine-components/AvatarLoader.d.ts +80 -80
- package/lib/engine-components/AvatarLoader.js +231 -231
- package/lib/engine-components/AxesHelper.d.ts +32 -32
- package/lib/engine-components/AxesHelper.js +67 -67
- package/lib/engine-components/BasicIKConstraint.d.ts +9 -9
- package/lib/engine-components/BasicIKConstraint.js +43 -43
- package/lib/engine-components/BoxCollider.d.ts +2 -2
- package/lib/engine-components/BoxCollider.js +2 -2
- package/lib/engine-components/BoxHelperComponent.d.ts +47 -47
- package/lib/engine-components/BoxHelperComponent.js +102 -102
- package/lib/engine-components/Camera.d.ts +231 -231
- package/lib/engine-components/Camera.js +700 -700
- package/lib/engine-components/CameraUtils.d.ts +1 -1
- package/lib/engine-components/CameraUtils.js +123 -123
- package/lib/engine-components/CharacterController.d.ts +55 -55
- package/lib/engine-components/CharacterController.js +236 -236
- package/lib/engine-components/Collider.d.ts +188 -188
- package/lib/engine-components/Collider.js +369 -369
- package/lib/engine-components/Component.d.ts +792 -792
- package/lib/engine-components/Component.js +920 -920
- package/lib/engine-components/ContactShadows.d.ts +94 -94
- package/lib/engine-components/ContactShadows.js +453 -453
- package/lib/engine-components/DeleteBox.d.ts +19 -19
- package/lib/engine-components/DeleteBox.js +58 -58
- package/lib/engine-components/DeviceFlag.d.ts +16 -16
- package/lib/engine-components/DeviceFlag.js +47 -47
- package/lib/engine-components/DragControls.d.ts +170 -170
- package/lib/engine-components/DragControls.js +1421 -1421
- package/lib/engine-components/DropListener.d.ts +215 -215
- package/lib/engine-components/DropListener.js +642 -642
- package/lib/engine-components/Duplicatable.d.ts +35 -35
- package/lib/engine-components/Duplicatable.js +202 -202
- package/lib/engine-components/EventList.d.ts +54 -54
- package/lib/engine-components/EventList.js +232 -232
- package/lib/engine-components/EventTrigger.d.ts +33 -33
- package/lib/engine-components/EventTrigger.js +75 -75
- package/lib/engine-components/EventType.d.ts +22 -22
- package/lib/engine-components/EventType.js +23 -23
- package/lib/engine-components/Fog.d.ts +22 -22
- package/lib/engine-components/Fog.js +61 -61
- package/lib/engine-components/Gizmos.d.ts +17 -17
- package/lib/engine-components/Gizmos.js +64 -64
- package/lib/engine-components/GridHelper.d.ts +20 -20
- package/lib/engine-components/GridHelper.js +54 -54
- package/lib/engine-components/GroundProjection.d.ts +67 -67
- package/lib/engine-components/GroundProjection.js +343 -343
- package/lib/engine-components/Interactable.d.ts +12 -12
- package/lib/engine-components/Interactable.js +12 -12
- package/lib/engine-components/Joints.d.ts +19 -19
- package/lib/engine-components/Joints.js +51 -51
- package/lib/engine-components/LODGroup.d.ts +35 -35
- package/lib/engine-components/LODGroup.js +152 -152
- package/lib/engine-components/Light.d.ts +180 -180
- package/lib/engine-components/Light.js +535 -535
- package/lib/engine-components/LookAtConstraint.d.ts +19 -19
- package/lib/engine-components/LookAtConstraint.js +35 -35
- package/lib/engine-components/NeedleMenu.d.ts +50 -50
- package/lib/engine-components/NeedleMenu.js +92 -92
- package/lib/engine-components/NestedGltf.d.ts +25 -25
- package/lib/engine-components/NestedGltf.js +88 -88
- package/lib/engine-components/Networking.d.ts +54 -54
- package/lib/engine-components/Networking.js +112 -112
- package/lib/engine-components/OffsetConstraint.d.ts +14 -14
- package/lib/engine-components/OffsetConstraint.js +65 -65
- package/lib/engine-components/OrbitControls.d.ts +268 -268
- package/lib/engine-components/OrbitControls.js +1015 -1015
- package/lib/engine-components/PlayerColor.d.ts +19 -19
- package/lib/engine-components/PlayerColor.js +94 -94
- package/lib/engine-components/ReflectionProbe.d.ts +28 -28
- package/lib/engine-components/ReflectionProbe.js +204 -204
- package/lib/engine-components/Renderer.d.ts +153 -153
- package/lib/engine-components/Renderer.js +834 -834
- package/lib/engine-components/RendererInstancing.d.ts +140 -140
- package/lib/engine-components/RendererInstancing.js +744 -744
- package/lib/engine-components/RendererInstancing.js.map +1 -1
- package/lib/engine-components/RendererLightmap.d.ts +24 -24
- package/lib/engine-components/RendererLightmap.js +182 -182
- package/lib/engine-components/RigidBody.d.ts +155 -155
- package/lib/engine-components/RigidBody.js +517 -517
- package/lib/engine-components/SceneSwitcher.d.ts +263 -263
- package/lib/engine-components/SceneSwitcher.js +971 -971
- package/lib/engine-components/ScreenCapture.d.ts +144 -144
- package/lib/engine-components/ScreenCapture.js +547 -547
- package/lib/engine-components/ShadowCatcher.d.ts +33 -33
- package/lib/engine-components/ShadowCatcher.js +166 -166
- package/lib/engine-components/Skybox.d.ts +88 -88
- package/lib/engine-components/Skybox.js +469 -469
- package/lib/engine-components/SmoothFollow.d.ts +34 -34
- package/lib/engine-components/SmoothFollow.js +82 -82
- package/lib/engine-components/SpatialTrigger.d.ts +102 -102
- package/lib/engine-components/SpatialTrigger.js +225 -225
- package/lib/engine-components/SpectatorCamera.d.ts +111 -111
- package/lib/engine-components/SpectatorCamera.js +715 -715
- package/lib/engine-components/SphereCollider.d.ts +2 -2
- package/lib/engine-components/SphereCollider.js +2 -2
- package/lib/engine-components/SpriteRenderer.d.ts +132 -132
- package/lib/engine-components/SpriteRenderer.js +472 -472
- package/lib/engine-components/SyncedCamera.d.ts +41 -41
- package/lib/engine-components/SyncedCamera.js +199 -199
- package/lib/engine-components/SyncedRoom.d.ts +106 -106
- package/lib/engine-components/SyncedRoom.js +371 -371
- package/lib/engine-components/SyncedTransform.d.ts +94 -94
- package/lib/engine-components/SyncedTransform.js +331 -331
- package/lib/engine-components/TestRunner.d.ts +16 -16
- package/lib/engine-components/TestRunner.js +102 -102
- package/lib/engine-components/TransformGizmo.d.ts +75 -75
- package/lib/engine-components/TransformGizmo.js +209 -209
- package/lib/engine-components/VideoPlayer.d.ts +184 -184
- package/lib/engine-components/VideoPlayer.js +978 -978
- package/lib/engine-components/Voip.d.ts +67 -67
- package/lib/engine-components/Voip.js +360 -360
- package/lib/engine-components/api.d.ts +51 -51
- package/lib/engine-components/api.js +50 -50
- package/lib/engine-components/avatar/AvatarBlink_Simple.d.ts +11 -11
- package/lib/engine-components/avatar/AvatarBlink_Simple.js +76 -76
- package/lib/engine-components/avatar/AvatarEyeLook_Rotation.d.ts +14 -14
- package/lib/engine-components/avatar/AvatarEyeLook_Rotation.js +68 -68
- package/lib/engine-components/avatar/Avatar_Brain_LookAt.d.ts +29 -29
- package/lib/engine-components/avatar/Avatar_Brain_LookAt.js +121 -121
- package/lib/engine-components/avatar/Avatar_MouthShapes.d.ts +15 -15
- package/lib/engine-components/avatar/Avatar_MouthShapes.js +79 -79
- package/lib/engine-components/avatar/Avatar_MustacheShake.d.ts +9 -9
- package/lib/engine-components/avatar/Avatar_MustacheShake.js +29 -29
- package/lib/engine-components/codegen/components.d.ts +216 -216
- package/lib/engine-components/codegen/components.js +218 -218
- package/lib/engine-components/debug/LogStats.d.ts +5 -5
- package/lib/engine-components/debug/LogStats.js +18 -18
- package/lib/engine-components/export/gltf/GltfExport.d.ts +30 -30
- package/lib/engine-components/export/gltf/GltfExport.js +246 -246
- package/lib/engine-components/export/gltf/index.d.ts +1 -1
- package/lib/engine-components/export/gltf/index.js +1 -1
- package/lib/engine-components/export/index.d.ts +1 -1
- package/lib/engine-components/export/index.js +1 -1
- package/lib/engine-components/export/usdz/Extension.d.ts +22 -22
- package/lib/engine-components/export/usdz/Extension.js +1 -1
- package/lib/engine-components/export/usdz/ThreeUSDZExporter.d.ts +162 -162
- package/lib/engine-components/export/usdz/ThreeUSDZExporter.js +1789 -1789
- package/lib/engine-components/export/usdz/USDZExporter.d.ts +130 -130
- package/lib/engine-components/export/usdz/USDZExporter.js +663 -663
- package/lib/engine-components/export/usdz/extensions/Animation.d.ts +106 -106
- package/lib/engine-components/export/usdz/extensions/Animation.js +1071 -1071
- package/lib/engine-components/export/usdz/extensions/DocumentExtension.d.ts +5 -5
- package/lib/engine-components/export/usdz/extensions/DocumentExtension.js +6 -6
- package/lib/engine-components/export/usdz/extensions/NodeMaterialConverter.d.ts +10 -10
- package/lib/engine-components/export/usdz/extensions/NodeMaterialConverter.js +451 -451
- package/lib/engine-components/export/usdz/extensions/USDZText.d.ts +54 -54
- package/lib/engine-components/export/usdz/extensions/USDZText.js +203 -203
- package/lib/engine-components/export/usdz/extensions/USDZUI.d.ts +8 -8
- package/lib/engine-components/export/usdz/extensions/USDZUI.js +158 -158
- package/lib/engine-components/export/usdz/extensions/behavior/Actions.d.ts +30 -30
- package/lib/engine-components/export/usdz/extensions/behavior/Actions.js +88 -88
- package/lib/engine-components/export/usdz/extensions/behavior/AudioExtension.d.ts +10 -10
- package/lib/engine-components/export/usdz/extensions/behavior/AudioExtension.js +86 -86
- package/lib/engine-components/export/usdz/extensions/behavior/Behaviour.d.ts +28 -28
- package/lib/engine-components/export/usdz/extensions/behavior/Behaviour.js +290 -290
- package/lib/engine-components/export/usdz/extensions/behavior/BehaviourComponents.d.ts +190 -190
- package/lib/engine-components/export/usdz/extensions/behavior/BehaviourComponents.js +1060 -1060
- package/lib/engine-components/export/usdz/extensions/behavior/BehavioursBuilder.d.ts +135 -135
- package/lib/engine-components/export/usdz/extensions/behavior/BehavioursBuilder.js +548 -548
- package/lib/engine-components/export/usdz/extensions/behavior/PhysicsExtension.d.ts +7 -7
- package/lib/engine-components/export/usdz/extensions/behavior/PhysicsExtension.js +115 -115
- package/lib/engine-components/export/usdz/index.d.ts +3 -3
- package/lib/engine-components/export/usdz/index.js +2 -2
- package/lib/engine-components/export/usdz/utils/animationutils.d.ts +7 -7
- package/lib/engine-components/export/usdz/utils/animationutils.js +163 -163
- package/lib/engine-components/export/usdz/utils/quicklook.d.ts +2 -2
- package/lib/engine-components/export/usdz/utils/quicklook.js +43 -43
- package/lib/engine-components/particlesystem/ParticleSystem.d.ts +177 -177
- package/lib/engine-components/particlesystem/ParticleSystem.js +1176 -1176
- package/lib/engine-components/particlesystem/ParticleSystemModules.d.ts +526 -526
- package/lib/engine-components/particlesystem/ParticleSystemModules.js +1930 -1930
- package/lib/engine-components/particlesystem/ParticleSystemSubEmitter.d.ts +25 -25
- package/lib/engine-components/particlesystem/ParticleSystemSubEmitter.js +87 -87
- package/lib/engine-components/particlesystem/api.d.ts +2 -2
- package/lib/engine-components/particlesystem/api.js +2 -2
- package/lib/engine-components/postprocessing/Effects/Antialiasing.d.ts +17 -17
- package/lib/engine-components/postprocessing/Effects/Antialiasing.js +59 -59
- package/lib/engine-components/postprocessing/Effects/BloomEffect.d.ts +46 -46
- package/lib/engine-components/postprocessing/Effects/BloomEffect.js +113 -113
- package/lib/engine-components/postprocessing/Effects/ChromaticAberration.d.ts +11 -11
- package/lib/engine-components/postprocessing/Effects/ChromaticAberration.js +39 -39
- package/lib/engine-components/postprocessing/Effects/ColorAdjustments.d.ts +23 -23
- package/lib/engine-components/postprocessing/Effects/ColorAdjustments.js +111 -111
- package/lib/engine-components/postprocessing/Effects/DepthOfField.d.ts +25 -25
- package/lib/engine-components/postprocessing/Effects/DepthOfField.js +104 -104
- package/lib/engine-components/postprocessing/Effects/EffectWrapper.d.ts +12 -12
- package/lib/engine-components/postprocessing/Effects/EffectWrapper.js +18 -18
- package/lib/engine-components/postprocessing/Effects/Pixelation.d.ts +11 -11
- package/lib/engine-components/postprocessing/Effects/Pixelation.js +32 -32
- package/lib/engine-components/postprocessing/Effects/ScreenspaceAmbientOcclusion.d.ts +18 -18
- package/lib/engine-components/postprocessing/Effects/ScreenspaceAmbientOcclusion.js +91 -91
- package/lib/engine-components/postprocessing/Effects/ScreenspaceAmbientOcclusionN8.d.ts +70 -70
- package/lib/engine-components/postprocessing/Effects/ScreenspaceAmbientOcclusionN8.js +176 -176
- package/lib/engine-components/postprocessing/Effects/Sharpening.d.ts +18 -18
- package/lib/engine-components/postprocessing/Effects/Sharpening.js +127 -127
- package/lib/engine-components/postprocessing/Effects/TiltShiftEffect.d.ts +17 -17
- package/lib/engine-components/postprocessing/Effects/TiltShiftEffect.js +70 -70
- package/lib/engine-components/postprocessing/Effects/Tonemapping.d.ts +19 -19
- package/lib/engine-components/postprocessing/Effects/Tonemapping.js +94 -94
- package/lib/engine-components/postprocessing/Effects/Tonemapping.utils.d.ts +13 -13
- package/lib/engine-components/postprocessing/Effects/Tonemapping.utils.js +51 -51
- package/lib/engine-components/postprocessing/Effects/Vignette.d.ts +15 -15
- package/lib/engine-components/postprocessing/Effects/Vignette.js +60 -60
- package/lib/engine-components/postprocessing/PostProcessingEffect.d.ts +90 -90
- package/lib/engine-components/postprocessing/PostProcessingEffect.js +168 -168
- package/lib/engine-components/postprocessing/PostProcessingHandler.d.ts +42 -42
- package/lib/engine-components/postprocessing/PostProcessingHandler.js +494 -494
- package/lib/engine-components/postprocessing/Volume.d.ts +90 -90
- package/lib/engine-components/postprocessing/Volume.js +385 -385
- package/lib/engine-components/postprocessing/VolumeParameter.d.ts +26 -26
- package/lib/engine-components/postprocessing/VolumeParameter.js +136 -136
- package/lib/engine-components/postprocessing/VolumeProfile.d.ts +15 -15
- package/lib/engine-components/postprocessing/VolumeProfile.js +60 -60
- package/lib/engine-components/postprocessing/index.d.ts +6 -6
- package/lib/engine-components/postprocessing/index.js +6 -6
- package/lib/engine-components/postprocessing/utils.d.ts +55 -55
- package/lib/engine-components/postprocessing/utils.js +119 -119
- package/lib/engine-components/timeline/PlayableDirector.d.ts +163 -163
- package/lib/engine-components/timeline/PlayableDirector.js +686 -686
- package/lib/engine-components/timeline/SignalAsset.d.ts +24 -24
- package/lib/engine-components/timeline/SignalAsset.js +130 -130
- package/lib/engine-components/timeline/TimelineModels.d.ts +89 -89
- package/lib/engine-components/timeline/TimelineModels.js +22 -22
- package/lib/engine-components/timeline/TimelineTracks.d.ts +110 -110
- package/lib/engine-components/timeline/TimelineTracks.js +879 -879
- package/lib/engine-components/timeline/index.d.ts +4 -4
- package/lib/engine-components/timeline/index.js +3 -3
- package/lib/engine-components/ui/BaseUIComponent.d.ts +48 -48
- package/lib/engine-components/ui/BaseUIComponent.js +170 -170
- package/lib/engine-components/ui/Button.d.ts +64 -64
- package/lib/engine-components/ui/Button.js +315 -315
- package/lib/engine-components/ui/Canvas.d.ts +74 -74
- package/lib/engine-components/ui/Canvas.js +407 -407
- package/lib/engine-components/ui/CanvasGroup.d.ts +19 -19
- package/lib/engine-components/ui/CanvasGroup.js +58 -58
- package/lib/engine-components/ui/EventSystem.d.ts +125 -125
- package/lib/engine-components/ui/EventSystem.js +765 -765
- package/lib/engine-components/ui/Graphic.d.ts +55 -55
- package/lib/engine-components/ui/Graphic.js +255 -255
- package/lib/engine-components/ui/Image.d.ts +35 -35
- package/lib/engine-components/ui/Image.js +116 -116
- package/lib/engine-components/ui/InputField.d.ts +42 -42
- package/lib/engine-components/ui/InputField.js +268 -268
- package/lib/engine-components/ui/Interfaces.d.ts +38 -38
- package/lib/engine-components/ui/Interfaces.js +12 -12
- package/lib/engine-components/ui/Layout.d.ts +84 -84
- package/lib/engine-components/ui/Layout.js +330 -330
- package/lib/engine-components/ui/Outline.d.ts +7 -7
- package/lib/engine-components/ui/Outline.js +20 -20
- package/lib/engine-components/ui/PointerEvents.d.ts +115 -115
- package/lib/engine-components/ui/PointerEvents.js +145 -145
- package/lib/engine-components/ui/RaycastUtils.d.ts +11 -11
- package/lib/engine-components/ui/RaycastUtils.js +67 -67
- package/lib/engine-components/ui/Raycaster.d.ts +30 -30
- package/lib/engine-components/ui/Raycaster.js +95 -95
- package/lib/engine-components/ui/RectTransform.d.ts +61 -61
- package/lib/engine-components/ui/RectTransform.js +356 -356
- package/lib/engine-components/ui/SpatialHtml.d.ts +8 -8
- package/lib/engine-components/ui/SpatialHtml.js +79 -79
- package/lib/engine-components/ui/Symbols.d.ts +1 -1
- package/lib/engine-components/ui/Symbols.js +1 -1
- package/lib/engine-components/ui/Text.d.ts +78 -78
- package/lib/engine-components/ui/Text.js +539 -539
- package/lib/engine-components/ui/Utils.d.ts +24 -24
- package/lib/engine-components/ui/Utils.js +90 -90
- package/lib/engine-components/ui/index.d.ts +1 -1
- package/lib/engine-components/ui/index.js +1 -1
- package/lib/engine-components/utils/EnvironmentScene.d.ts +5 -5
- package/lib/engine-components/utils/EnvironmentScene.js +205 -205
- package/lib/engine-components/utils/LookAt.d.ts +31 -31
- package/lib/engine-components/utils/LookAt.js +82 -82
- package/lib/engine-components/utils/OpenURL.d.ts +42 -42
- package/lib/engine-components/utils/OpenURL.js +119 -119
- package/lib/engine-components/webxr/Avatar.d.ts +25 -25
- package/lib/engine-components/webxr/Avatar.js +255 -255
- package/lib/engine-components/webxr/TeleportTarget.d.ts +7 -7
- package/lib/engine-components/webxr/TeleportTarget.js +7 -7
- package/lib/engine-components/webxr/WebARCameraBackground.d.ts +30 -30
- package/lib/engine-components/webxr/WebARCameraBackground.js +155 -155
- package/lib/engine-components/webxr/WebARSessionRoot.d.ts +98 -98
- package/lib/engine-components/webxr/WebARSessionRoot.js +770 -770
- package/lib/engine-components/webxr/WebXR.d.ts +232 -232
- package/lib/engine-components/webxr/WebXR.js +561 -561
- package/lib/engine-components/webxr/WebXRAvatar.d.ts +27 -27
- package/lib/engine-components/webxr/WebXRAvatar.js +44 -44
- package/lib/engine-components/webxr/WebXRImageTracking.d.ts +86 -86
- package/lib/engine-components/webxr/WebXRImageTracking.js +471 -471
- package/lib/engine-components/webxr/WebXRPlaneTracking.d.ts +92 -92
- package/lib/engine-components/webxr/WebXRPlaneTracking.js +500 -500
- package/lib/engine-components/webxr/WebXRRig.d.ts +32 -32
- package/lib/engine-components/webxr/WebXRRig.js +72 -72
- package/lib/engine-components/webxr/XRFlag.d.ts +38 -38
- package/lib/engine-components/webxr/XRFlag.js +139 -139
- package/lib/engine-components/webxr/controllers/XRControllerFollow.d.ts +47 -47
- package/lib/engine-components/webxr/controllers/XRControllerFollow.js +120 -120
- package/lib/engine-components/webxr/controllers/XRControllerModel.d.ts +43 -43
- package/lib/engine-components/webxr/controllers/XRControllerModel.js +352 -352
- package/lib/engine-components/webxr/controllers/XRControllerMovement.d.ts +78 -78
- package/lib/engine-components/webxr/controllers/XRControllerMovement.js +506 -506
- package/lib/engine-components/webxr/index.d.ts +3 -3
- package/lib/engine-components/webxr/index.js +3 -3
- package/lib/engine-components/webxr/types.d.ts +3 -3
- package/lib/engine-components/webxr/types.js +1 -1
- package/lib/engine-components-experimental/Presentation.d.ts +6 -6
- package/lib/engine-components-experimental/Presentation.js +9 -9
- package/lib/engine-components-experimental/api.d.ts +4 -4
- package/lib/engine-components-experimental/api.js +4 -4
- package/lib/engine-components-experimental/networking/PlayerSync.d.ts +156 -156
- package/lib/engine-components-experimental/networking/PlayerSync.js +377 -377
- package/lib/engine-schemes/api.d.ts +12 -12
- package/lib/engine-schemes/api.js +12 -12
- package/lib/engine-schemes/schemes.d.ts +7 -7
- package/lib/engine-schemes/schemes.js +19 -19
- package/lib/engine-schemes/synced-camera-model.d.ts +25 -25
- package/lib/engine-schemes/synced-camera-model.js +67 -67
- package/lib/engine-schemes/synced-transform-model.d.ts +31 -31
- package/lib/engine-schemes/synced-transform-model.js +66 -66
- package/lib/engine-schemes/transform.d.ts +12 -12
- package/lib/engine-schemes/transform.js +39 -39
- package/lib/engine-schemes/vec2.d.ts +10 -10
- package/lib/engine-schemes/vec2.js +25 -25
- package/lib/engine-schemes/vec3.d.ts +11 -11
- package/lib/engine-schemes/vec3.js +29 -29
- package/lib/engine-schemes/vec4.d.ts +12 -12
- package/lib/engine-schemes/vec4.js +33 -33
- package/lib/engine-schemes/vr-user-state-buffer.d.ts +37 -37
- package/lib/engine-schemes/vr-user-state-buffer.js +110 -110
- package/lib/include/three/EXT_mesh_gpu_instancing_exporter.d.ts +6 -6
- package/lib/include/three/EXT_mesh_gpu_instancing_exporter.js +45 -45
- package/lib/needle-engine.d.ts +7 -7
- package/lib/needle-engine.js +64 -64
- package/package.json +2 -2
- package/plugins/common/buildinfo.js +64 -64
- package/plugins/common/cloud.js +1 -1
- package/plugins/common/config.cjs +31 -31
- package/plugins/common/config.js +35 -35
- package/plugins/common/files.js +31 -31
- package/plugins/common/generator.js +10 -10
- package/plugins/common/license.js +452 -452
- package/plugins/common/logger.js +327 -327
- package/plugins/common/npm.js +15 -15
- package/plugins/common/timers.js +7 -7
- package/plugins/common/version.js +37 -37
- package/plugins/gltf-packer.mjs +1 -1
- package/plugins/next/alias.cjs +39 -39
- package/plugins/next/license.cjs +24 -24
- package/plugins/next/meshbvhworker.cjs +18 -18
- package/plugins/next/next.js +141 -141
- package/plugins/types/index.d.ts +2 -2
- package/plugins/types/license.d.ts +24 -24
- package/plugins/types/needleConfig.d.ts +27 -27
- package/plugins/types/next.d.ts +2 -2
- package/plugins/types/userconfig.d.ts +124 -124
- package/plugins/types/vite.d.ts +13 -13
- package/plugins/types/webmanifest.d.ts +32 -32
- package/plugins/vite/alias.js +189 -189
- package/plugins/vite/asap.js +251 -251
- package/plugins/vite/build-pipeline.js +371 -371
- package/plugins/vite/build.js +19 -19
- package/plugins/vite/buildinfo.js +41 -41
- package/plugins/vite/config.js +106 -106
- package/plugins/vite/copyfiles.js +138 -138
- package/plugins/vite/defines.js +70 -70
- package/plugins/vite/dependencies.js +232 -232
- package/plugins/vite/dependency-watcher.js +237 -237
- package/plugins/vite/drop-client.js +76 -76
- package/plugins/vite/drop.js +87 -87
- package/plugins/vite/editor-connection.js +124 -124
- package/plugins/vite/facebook-instant-games.js +102 -102
- package/plugins/vite/gzip.js +5 -5
- package/plugins/vite/imports-logger.js +143 -143
- package/plugins/vite/index.js +147 -147
- package/plugins/vite/license.js +56 -56
- package/plugins/vite/local-files.js +440 -440
- package/plugins/vite/logger.client.js +272 -272
- package/plugins/vite/logger.js +100 -100
- package/plugins/vite/materialx.js +31 -31
- package/plugins/vite/meta.js +163 -163
- package/plugins/vite/npm.js +7 -7
- package/plugins/vite/peer.js +29 -29
- package/plugins/vite/poster-client.js +73 -73
- package/plugins/vite/poster.js +79 -79
- package/plugins/vite/pwa.js +604 -604
- package/plugins/vite/reload-client.js +15 -15
- package/plugins/vite/reload.js +351 -351
- package/plugins/vite/server.js +66 -66
- package/plugins/vite/transform-codegen.js +55 -55
- package/plugins/vite/transform.js +32 -32
- package/plugins/vite/vite-4.4-hack.js +31 -31
- package/src/asap/needle-asap.ts +111 -111
- package/src/asap/sessiongranted.ts +75 -75
- package/src/asap/utils.ts +4 -4
- package/src/engine/analytics/index.ts +10 -10
- package/src/engine/analytics/lcp.ts +35 -35
- package/src/engine/api.ts +82 -82
- package/src/engine/assets/index.ts +59 -59
- package/src/engine/assets/static.js +5 -5
- package/src/engine/codegen/register_types.ts +300 -300
- package/src/engine/debug/debug.ts +51 -51
- package/src/engine/debug/debug_console.ts +333 -333
- package/src/engine/debug/debug_overlay.ts +332 -332
- package/src/engine/debug/debug_spatial_console.ts +429 -429
- package/src/engine/debug/index.ts +1 -1
- package/src/engine/engine_addressables.ts +671 -671
- package/src/engine/engine_animation.ts +145 -145
- package/src/engine/engine_application.ts +113 -113
- package/src/engine/engine_assetdatabase.ts +389 -389
- package/src/engine/engine_audio.ts +24 -24
- package/src/engine/engine_camera.ts +39 -39
- package/src/engine/engine_components.ts +366 -366
- package/src/engine/engine_components_internal.ts +40 -40
- package/src/engine/engine_constants.ts +52 -52
- package/src/engine/engine_context.ts +1824 -1824
- package/src/engine/engine_context_registry.ts +129 -129
- package/src/engine/engine_coroutine.ts +54 -54
- package/src/engine/engine_create_objects.ts +411 -411
- package/src/engine/engine_default_parameters.ts +3 -3
- package/src/engine/engine_editor-sync.ts +28 -28
- package/src/engine/engine_fileloader.js +9 -9
- package/src/engine/engine_gameobject.ts +712 -712
- package/src/engine/engine_generic_utils.js +13 -13
- package/src/engine/engine_gizmos.ts +577 -577
- package/src/engine/engine_gltf.ts +29 -29
- package/src/engine/engine_gltf_builtin_components.ts +403 -403
- package/src/engine/engine_hot_reload.ts +210 -210
- package/src/engine/engine_input.ts +1500 -1500
- package/src/engine/engine_input_utils.ts +23 -23
- package/src/engine/engine_instancing.ts +45 -45
- package/src/engine/engine_license.ts +386 -386
- package/src/engine/engine_lifecycle_api.ts +113 -113
- package/src/engine/engine_lifecycle_functions_internal.ts +193 -193
- package/src/engine/engine_lightdata.ts +125 -125
- package/src/engine/engine_loaders.callbacks.ts +136 -136
- package/src/engine/engine_loaders.gltf.ts +82 -82
- package/src/engine/engine_loaders.ts +378 -378
- package/src/engine/engine_lods.ts +186 -186
- package/src/engine/engine_mainloop_utils.ts +472 -472
- package/src/engine/engine_math.ts +282 -282
- package/src/engine/engine_modules.ts +83 -83
- package/src/engine/engine_networking.ts +862 -862
- package/src/engine/engine_networking_auto.ts +352 -352
- package/src/engine/engine_networking_blob.ts +275 -275
- package/src/engine/engine_networking_files.ts +217 -217
- package/src/engine/engine_networking_files_default_components.ts +58 -58
- package/src/engine/engine_networking_instantiate.ts +419 -419
- package/src/engine/engine_networking_peer.ts +159 -159
- package/src/engine/engine_networking_streams.ts +713 -713
- package/src/engine/engine_networking_types.ts +24 -24
- package/src/engine/engine_networking_utils.ts +23 -23
- package/src/engine/engine_networking_websocket.ts +2 -2
- package/src/engine/engine_patcher.ts +199 -199
- package/src/engine/engine_physics.ts +783 -783
- package/src/engine/engine_physics.types.ts +46 -46
- package/src/engine/engine_physics_rapier.ts +1577 -1577
- package/src/engine/engine_playerview.ts +80 -80
- package/src/engine/engine_scenelighting.ts +294 -294
- package/src/engine/engine_serialization.ts +2 -2
- package/src/engine/engine_serialization_builtin_serializer.ts +473 -473
- package/src/engine/engine_serialization_core.ts +720 -720
- package/src/engine/engine_serialization_decorator.ts +80 -80
- package/src/engine/engine_setup.ts +1 -1
- package/src/engine/engine_shaders.ts +267 -267
- package/src/engine/engine_shims.ts +32 -32
- package/src/engine/engine_test_utils.ts +109 -109
- package/src/engine/engine_texture.ts +82 -82
- package/src/engine/engine_three_utils.ts +928 -928
- package/src/engine/engine_time.ts +94 -94
- package/src/engine/engine_time_utils.ts +237 -237
- package/src/engine/engine_tonemapping.ts +208 -208
- package/src/engine/engine_types.ts +730 -730
- package/src/engine/engine_typestore.ts +63 -63
- package/src/engine/engine_util_decorator.ts +136 -136
- package/src/engine/engine_utils.ts +1115 -1115
- package/src/engine/engine_utils_format.ts +273 -273
- package/src/engine/engine_utils_screenshot.ts +708 -708
- package/src/engine/engine_utils_screenshot.xr.ts +103 -103
- package/src/engine/export/gltf/Writers.ts +34 -34
- package/src/engine/export/gltf/index.ts +158 -158
- package/src/engine/export/index.ts +2 -2
- package/src/engine/export/state.ts +19 -19
- package/src/engine/export/utils.ts +9 -9
- package/src/engine/extensions/EXT_texture_exr.ts +50 -50
- package/src/engine/extensions/NEEDLE_animator_controller_model.ts +195 -195
- package/src/engine/extensions/NEEDLE_components.ts +268 -268
- package/src/engine/extensions/NEEDLE_gameobject_data.ts +81 -81
- package/src/engine/extensions/NEEDLE_lighting_settings.ts +185 -185
- package/src/engine/extensions/NEEDLE_lightmaps.ts +119 -119
- package/src/engine/extensions/NEEDLE_persistent_assets.ts +76 -76
- package/src/engine/extensions/NEEDLE_render_objects.ts +209 -209
- package/src/engine/extensions/NEEDLE_techniques_webgl.ts +640 -640
- package/src/engine/extensions/extension_resolver.ts +4 -4
- package/src/engine/extensions/extension_utils.ts +166 -166
- package/src/engine/extensions/extensions.ts +140 -140
- package/src/engine/extensions/index.ts +5 -5
- package/src/engine/extensions/usage_tracker.ts +100 -100
- package/src/engine/js-extensions/Camera.ts +37 -37
- package/src/engine/js-extensions/ExtensionUtils.ts +85 -85
- package/src/engine/js-extensions/Layers.ts +23 -23
- package/src/engine/js-extensions/Object3D.ts +296 -296
- package/src/engine/js-extensions/RGBAColor.ts +126 -126
- package/src/engine/js-extensions/Vector.ts +18 -18
- package/src/engine/js-extensions/index.ts +4 -4
- package/src/engine/physics/workers/mesh-bvh/GenerateMeshBVHWorker.js +125 -125
- package/src/engine/shaders/shaderData.ts +67 -67
- package/src/engine/tests/test_utils.ts +63 -63
- package/src/engine/webcomponents/WebXRButtons.ts +260 -260
- package/src/engine/webcomponents/api.ts +6 -6
- package/src/engine/webcomponents/buttons.ts +292 -292
- package/src/engine/webcomponents/fonts.ts +41 -41
- package/src/engine/webcomponents/icons.ts +57 -57
- package/src/engine/webcomponents/index.ts +1 -1
- package/src/engine/webcomponents/logo-element.ts +78 -78
- package/src/engine/webcomponents/needle menu/needle-menu-spatial.ts +573 -573
- package/src/engine/webcomponents/needle menu/needle-menu.ts +1118 -1118
- package/src/engine/webcomponents/needle-button.ts +181 -181
- package/src/engine/webcomponents/needle-engine.ar-overlay.ts +186 -186
- package/src/engine/webcomponents/needle-engine.attributes.ts +82 -82
- package/src/engine/webcomponents/needle-engine.extras.ts +16 -16
- package/src/engine/webcomponents/needle-engine.loading.ts +373 -373
- package/src/engine/webcomponents/needle-engine.ts +860 -860
- package/src/engine/xr/NeedleXRController.ts +1125 -1125
- package/src/engine/xr/NeedleXRSession.ts +1624 -1624
- package/src/engine/xr/NeedleXRSync.ts +220 -220
- package/src/engine/xr/SceneTransition.ts +78 -78
- package/src/engine/xr/TempXRContext.ts +216 -216
- package/src/engine/xr/XRRig.ts +9 -9
- package/src/engine/xr/api.ts +5 -5
- package/src/engine/xr/events.ts +102 -102
- package/src/engine/xr/internal.ts +34 -34
- package/src/engine/xr/usdz.ts +30 -30
- package/src/engine/xr/utils.ts +39 -39
- package/src/engine-components/AlignmentConstraint.ts +36 -36
- package/src/engine-components/Animation.ts +557 -557
- package/src/engine-components/AnimationCurve.ts +150 -150
- package/src/engine-components/AnimationUtils.ts +28 -28
- package/src/engine-components/AnimationUtilsAutoplay.ts +43 -43
- package/src/engine-components/Animator.ts +397 -397
- package/src/engine-components/AnimatorController.ts +1293 -1293
- package/src/engine-components/AudioListener.ts +92 -92
- package/src/engine-components/AudioSource.ts +644 -644
- package/src/engine-components/AvatarLoader.ts +263 -263
- package/src/engine-components/AxesHelper.ts +59 -59
- package/src/engine-components/BasicIKConstraint.ts +54 -54
- package/src/engine-components/BoxCollider.ts +1 -1
- package/src/engine-components/BoxHelperComponent.ts +114 -114
- package/src/engine-components/Camera.ts +719 -719
- package/src/engine-components/CameraUtils.ts +138 -138
- package/src/engine-components/CharacterController.ts +253 -253
- package/src/engine-components/Collider.ts +374 -374
- package/src/engine-components/Component.ts +1297 -1297
- package/src/engine-components/ContactShadows.ts +506 -506
- package/src/engine-components/DeleteBox.ts +62 -62
- package/src/engine-components/DeviceFlag.ts +46 -46
- package/src/engine-components/DragControls.ts +1623 -1623
- package/src/engine-components/DropListener.ts +713 -713
- package/src/engine-components/Duplicatable.ts +198 -198
- package/src/engine-components/EventList.ts +266 -266
- package/src/engine-components/EventTrigger.ts +74 -74
- package/src/engine-components/EventType.ts +22 -22
- package/src/engine-components/Fog.ts +60 -60
- package/src/engine-components/Gizmos.ts +56 -56
- package/src/engine-components/GridHelper.ts +48 -48
- package/src/engine-components/GroundProjection.ts +356 -356
- package/src/engine-components/Interactable.ts +14 -14
- package/src/engine-components/Joints.ts +52 -52
- package/src/engine-components/LODGroup.ts +153 -153
- package/src/engine-components/Light.ts +558 -558
- package/src/engine-components/LookAtConstraint.ts +25 -25
- package/src/engine-components/NeedleMenu.ts +84 -84
- package/src/engine-components/NestedGltf.ts +86 -86
- package/src/engine-components/Networking.ts +114 -114
- package/src/engine-components/OffsetConstraint.ts +60 -60
- package/src/engine-components/OrbitControls.ts +1074 -1074
- package/src/engine-components/PlayerColor.ts +103 -103
- package/src/engine-components/ReflectionProbe.ts +220 -220
- package/src/engine-components/Renderer.ts +903 -903
- package/src/engine-components/RendererInstancing.ts +855 -855
- package/src/engine-components/RendererLightmap.ts +198 -198
- package/src/engine-components/RigidBody.ts +526 -526
- package/src/engine-components/SceneSwitcher.ts +1030 -1030
- package/src/engine-components/ScreenCapture.ts +592 -592
- package/src/engine-components/ShadowCatcher.ts +172 -172
- package/src/engine-components/Skybox.ts +475 -475
- package/src/engine-components/SmoothFollow.ts +76 -76
- package/src/engine-components/SpatialTrigger.ts +229 -229
- package/src/engine-components/SpectatorCamera.ts +787 -787
- package/src/engine-components/SphereCollider.ts +1 -1
- package/src/engine-components/SpriteRenderer.ts +468 -468
- package/src/engine-components/SyncedCamera.ts +220 -220
- package/src/engine-components/SyncedRoom.ts +380 -380
- package/src/engine-components/SyncedTransform.ts +383 -383
- package/src/engine-components/TestRunner.ts +118 -118
- package/src/engine-components/TransformGizmo.ts +219 -219
- package/src/engine-components/VideoPlayer.ts +1025 -1025
- package/src/engine-components/Voip.ts +363 -363
- package/src/engine-components/api.ts +60 -60
- package/src/engine-components/avatar/AvatarBlink_Simple.ts +69 -69
- package/src/engine-components/avatar/AvatarEyeLook_Rotation.ts +63 -63
- package/src/engine-components/avatar/Avatar_Brain_LookAt.ts +139 -139
- package/src/engine-components/avatar/Avatar_MouthShapes.ts +83 -83
- package/src/engine-components/avatar/Avatar_MustacheShake.ts +31 -31
- package/src/engine-components/codegen/components.ts +217 -217
- package/src/engine-components/debug/LogStats.ts +21 -21
- package/src/engine-components/export/gltf/GltfExport.ts +265 -265
- package/src/engine-components/export/usdz/Extension.ts +24 -24
- package/src/engine-components/export/usdz/ThreeUSDZExporter.ts +2426 -2426
- package/src/engine-components/export/usdz/USDZExporter.ts +705 -705
- package/src/engine-components/export/usdz/extensions/Animation.ts +1204 -1204
- package/src/engine-components/export/usdz/extensions/DocumentExtension.ts +9 -9
- package/src/engine-components/export/usdz/extensions/NodeMaterialConverter.ts +532 -532
- package/src/engine-components/export/usdz/extensions/USDZText.ts +240 -240
- package/src/engine-components/export/usdz/extensions/USDZUI.ts +189 -189
- package/src/engine-components/export/usdz/extensions/behavior/Actions.ts +99 -99
- package/src/engine-components/export/usdz/extensions/behavior/AudioExtension.ts +102 -102
- package/src/engine-components/export/usdz/extensions/behavior/Behaviour.ts +320 -320
- package/src/engine-components/export/usdz/extensions/behavior/BehaviourComponents.ts +1225 -1225
- package/src/engine-components/export/usdz/extensions/behavior/BehavioursBuilder.ts +646 -646
- package/src/engine-components/export/usdz/extensions/behavior/PhysicsExtension.ts +132 -132
- package/src/engine-components/export/usdz/index.ts +2 -2
- package/src/engine-components/export/usdz/utils/animationutils.ts +191 -191
- package/src/engine-components/export/usdz/utils/quicklook.ts +50 -50
- package/src/engine-components/particlesystem/ParticleSystem.ts +1287 -1287
- package/src/engine-components/particlesystem/ParticleSystemModules.ts +1765 -1765
- package/src/engine-components/particlesystem/ParticleSystemSubEmitter.ts +111 -111
- package/src/engine-components/particlesystem/api.ts +1 -1
- package/src/engine-components/postprocessing/Effects/Antialiasing.ts +64 -64
- package/src/engine-components/postprocessing/Effects/BloomEffect.ts +116 -116
- package/src/engine-components/postprocessing/Effects/ChromaticAberration.ts +37 -37
- package/src/engine-components/postprocessing/Effects/ColorAdjustments.ts +106 -106
- package/src/engine-components/postprocessing/Effects/DepthOfField.ts +103 -103
- package/src/engine-components/postprocessing/Effects/EffectWrapper.ts +25 -25
- package/src/engine-components/postprocessing/Effects/Pixelation.ts +32 -32
- package/src/engine-components/postprocessing/Effects/ScreenspaceAmbientOcclusion.ts +90 -90
- package/src/engine-components/postprocessing/Effects/ScreenspaceAmbientOcclusionN8.ts +192 -192
- package/src/engine-components/postprocessing/Effects/Sharpening.ts +143 -143
- package/src/engine-components/postprocessing/Effects/TiltShiftEffect.ts +61 -61
- package/src/engine-components/postprocessing/Effects/Tonemapping.ts +103 -103
- package/src/engine-components/postprocessing/Effects/Tonemapping.utils.ts +60 -60
- package/src/engine-components/postprocessing/Effects/Vignette.ts +59 -59
- package/src/engine-components/postprocessing/PostProcessingEffect.ts +192 -192
- package/src/engine-components/postprocessing/PostProcessingHandler.ts +572 -572
- package/src/engine-components/postprocessing/Volume.ts +426 -426
- package/src/engine-components/postprocessing/VolumeParameter.ts +158 -158
- package/src/engine-components/postprocessing/VolumeProfile.ts +61 -61
- package/src/engine-components/postprocessing/index.ts +5 -5
- package/src/engine-components/postprocessing/utils.ts +154 -154
- package/src/engine-components/timeline/PlayableDirector.ts +722 -722
- package/src/engine-components/timeline/SignalAsset.ts +144 -144
- package/src/engine-components/timeline/TimelineModels.ts +92 -92
- package/src/engine-components/timeline/TimelineTracks.ts +967 -967
- package/src/engine-components/timeline/index.ts +3 -3
- package/src/engine-components/ui/BaseUIComponent.ts +203 -203
- package/src/engine-components/ui/Button.ts +307 -307
- package/src/engine-components/ui/Canvas.ts +419 -419
- package/src/engine-components/ui/CanvasGroup.ts +54 -54
- package/src/engine-components/ui/EventSystem.ts +854 -854
- package/src/engine-components/ui/Graphic.ts +275 -275
- package/src/engine-components/ui/Image.ts +112 -112
- package/src/engine-components/ui/InputField.ts +321 -321
- package/src/engine-components/ui/Interfaces.ts +57 -57
- package/src/engine-components/ui/Layout.ts +334 -334
- package/src/engine-components/ui/Outline.ts +13 -13
- package/src/engine-components/ui/PointerEvents.ts +206 -206
- package/src/engine-components/ui/RaycastUtils.ts +69 -69
- package/src/engine-components/ui/Raycaster.ts +102 -102
- package/src/engine-components/ui/RectTransform.ts +375 -375
- package/src/engine-components/ui/SpatialHtml.ts +79 -79
- package/src/engine-components/ui/Symbols.ts +1 -1
- package/src/engine-components/ui/Text.ts +578 -578
- package/src/engine-components/ui/Utils.ts +113 -113
- package/src/engine-components/utils/EnvironmentScene.ts +245 -245
- package/src/engine-components/utils/LookAt.ts +88 -88
- package/src/engine-components/utils/OpenURL.ts +114 -114
- package/src/engine-components/webxr/Avatar.ts +265 -265
- package/src/engine-components/webxr/TeleportTarget.ts +9 -9
- package/src/engine-components/webxr/WebARCameraBackground.ts +175 -175
- package/src/engine-components/webxr/WebARSessionRoot.ts +880 -880
- package/src/engine-components/webxr/WebXR.ts +585 -585
- package/src/engine-components/webxr/WebXRAvatar.ts +66 -66
- package/src/engine-components/webxr/WebXRImageTracking.ts +519 -519
- package/src/engine-components/webxr/WebXRPlaneTracking.ts +570 -570
- package/src/engine-components/webxr/WebXRRig.ts +77 -77
- package/src/engine-components/webxr/XRFlag.ts +147 -147
- package/src/engine-components/webxr/controllers/XRControllerFollow.ts +118 -118
- package/src/engine-components/webxr/controllers/XRControllerModel.ts +373 -373
- package/src/engine-components/webxr/controllers/XRControllerMovement.ts +550 -550
- package/src/engine-components/webxr/index.ts +2 -2
- package/src/engine-components/webxr/types.ts +3 -3
- package/src/engine-components-experimental/Presentation.ts +12 -12
- package/src/engine-components-experimental/api.ts +4 -4
- package/src/engine-components-experimental/networking/PlayerSync.ts +401 -401
- package/src/engine-schemes/COMPILE_SCHEMES.bat +3 -3
- package/src/engine-schemes/COMPILE_TS.bat +11 -11
- package/src/engine-schemes/README.md +1 -1
- package/src/engine-schemes/api.ts +12 -12
- package/src/engine-schemes/dist/api.js +17 -0
- package/src/engine-schemes/dist/api.js.meta +7 -0
- package/src/engine-schemes/dist/schemes.js +25 -0
- package/src/engine-schemes/dist/schemes.js.meta +7 -0
- package/src/engine-schemes/dist/synced-camera-model.js +74 -0
- package/src/engine-schemes/dist/synced-camera-model.js.meta +7 -0
- package/src/engine-schemes/dist/synced-transform-model.js +73 -0
- package/src/engine-schemes/dist/synced-transform-model.js.meta +7 -0
- package/src/engine-schemes/dist/transform.js +46 -0
- package/src/engine-schemes/dist/transform.js.meta +7 -0
- package/src/engine-schemes/dist/vec2.js +32 -0
- package/src/engine-schemes/dist/vec2.js.meta +7 -0
- package/src/engine-schemes/dist/vec3.js +36 -0
- package/src/engine-schemes/dist/vec3.js.meta +7 -0
- package/src/engine-schemes/dist/vec4.js +40 -0
- package/src/engine-schemes/dist/vec4.js.meta +7 -0
- package/src/engine-schemes/dist/vr-user-state-buffer.js +110 -0
- package/src/engine-schemes/dist/vr-user-state-buffer.js.meta +7 -0
- package/src/engine-schemes/schemes.ts +28 -28
- package/src/engine-schemes/synced-camera-model.ts +92 -92
- package/src/engine-schemes/synced-transform-model.ts +90 -90
- package/src/engine-schemes/syncedCamera.fbs +10 -10
- package/src/engine-schemes/transform.ts +50 -50
- package/src/engine-schemes/transforms.fbs +25 -25
- package/src/engine-schemes/vec.fbs +19 -19
- package/src/engine-schemes/vec2.ts +33 -33
- package/src/engine-schemes/vec3.ts +38 -38
- package/src/engine-schemes/vec4.ts +43 -43
- package/src/engine-schemes/vr-user-state-buffer.ts +145 -145
- package/src/engine-schemes/vrUserStateBuffer.fbs +17 -17
- package/src/include/draco/draco_decoder.js +34 -34
- package/src/include/ktx2/basis_transcoder.js +21 -21
- package/src/include/needle/arial-msdf.json +1471 -1471
- package/src/include/three/DragControls.js +231 -231
- package/src/include/three/EXT_mesh_gpu_instancing_exporter.js +66 -66
- package/src/needle-engine.ts +70 -70
- package/dist/generateMeshBVH.worker-BaNp_Xtp.js +0 -25
- package/dist/gltf-progressive-60Qk5ebF.min.js +0 -8
- package/dist/gltf-progressive-DM5ZiecW.js +0 -1060
- package/dist/gltf-progressive-wxtaVmio.umd.cjs +0 -8
|
@@ -1,608 +1,608 @@
|
|
|
1
|
-
import { AnimationClip, BufferGeometry, Material, Mesh, Texture } from "three";
|
|
2
|
-
import { debugExtension } from "../engine/engine_default_parameters.js";
|
|
3
|
-
import { addLog, LogType } from "./debug/debug_overlay.js";
|
|
4
|
-
import { isLocalNetwork } from "./engine_networking_utils.js";
|
|
5
|
-
import { $BuiltInTypeFlag, TypeStore } from "./engine_typestore.js";
|
|
6
|
-
import { getParam } from "./engine_utils.js";
|
|
7
|
-
import { isPersistentAsset } from "./extensions/NEEDLE_persistent_assets.js";
|
|
8
|
-
const debug = getParam("debugserializer");
|
|
9
|
-
// internal helper class that we can ask for registered type serializers
|
|
10
|
-
// register your own type by deriving from ITypeSerializer and calling helper.register
|
|
11
|
-
class SerializationHelper {
|
|
12
|
-
register(type, ser) {
|
|
13
|
-
if (this.typeMap.has(type)) {
|
|
14
|
-
const existing = this.typeMap.get(type);
|
|
15
|
-
if (existing === ser)
|
|
16
|
-
return;
|
|
17
|
-
if (debug)
|
|
18
|
-
console.warn("Type: " + type + " is already registered", ser, existing);
|
|
19
|
-
}
|
|
20
|
-
if (debug)
|
|
21
|
-
console.log("Register type serializer", ser.name, ser, type);
|
|
22
|
-
this.typeMap.set(type, ser);
|
|
23
|
-
}
|
|
24
|
-
/** type > serializer map */
|
|
25
|
-
typeMap = new Map();
|
|
26
|
-
getSerializer(type) {
|
|
27
|
-
if (!type)
|
|
28
|
-
return undefined;
|
|
29
|
-
return this.typeMap.get(type);
|
|
30
|
-
}
|
|
31
|
-
getSerializerForConstructor(type, level = 0) {
|
|
32
|
-
if (level > 20)
|
|
33
|
-
return undefined;
|
|
34
|
-
if (!type || !type.constructor) {
|
|
35
|
-
if (debug)
|
|
36
|
-
console.log("invalid type");
|
|
37
|
-
return undefined;
|
|
38
|
-
}
|
|
39
|
-
const name = type.name;
|
|
40
|
-
const res = this.getSerializer(type);
|
|
41
|
-
if (res !== undefined) {
|
|
42
|
-
if (debug)
|
|
43
|
-
console.log("FOUND SERIALIZER", res?.name, type.name, type.constructor.name, "for type: " + name, res, type, this.typeMap);
|
|
44
|
-
return res;
|
|
45
|
-
}
|
|
46
|
-
const parent = Object.getPrototypeOf(type);
|
|
47
|
-
if (parent && parent !== type) {
|
|
48
|
-
const resultFromChildren = this.getSerializerForConstructor(parent, ++level);
|
|
49
|
-
if (resultFromChildren) {
|
|
50
|
-
const prot = parent.constructor || parent.prototype;
|
|
51
|
-
if (debug)
|
|
52
|
-
console.log("FOUND SERIALIZER(in constructor) " + prot.constructor.name, prot.name, prot, resultFromChildren);
|
|
53
|
-
// register sub type
|
|
54
|
-
this.register(prot, resultFromChildren);
|
|
55
|
-
}
|
|
56
|
-
return resultFromChildren;
|
|
57
|
-
}
|
|
58
|
-
if (debug)
|
|
59
|
-
console.warn("No serializer found for " + name, type, type.name, type.constructor.name);
|
|
60
|
-
return undefined;
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
|
-
export const helper = new SerializationHelper();
|
|
64
|
-
/**
|
|
65
|
-
* implement and call super(<type string or array>) with the type names this serializer can handle
|
|
66
|
-
* for example:
|
|
67
|
-
* class ColorSerializer extends TypeSerializer {
|
|
68
|
-
* constructor() {
|
|
69
|
-
* super("Color")
|
|
70
|
-
* }
|
|
71
|
-
* }
|
|
72
|
-
*/
|
|
73
|
-
export class TypeSerializer {
|
|
74
|
-
name;
|
|
75
|
-
// register<T>(c: Constructor<T> | Constructor<T>[])
|
|
76
|
-
// {
|
|
77
|
-
// if (Array.isArray(c)) {
|
|
78
|
-
// for (const t of c) {
|
|
79
|
-
// helper.register(t.name, this);
|
|
80
|
-
// }
|
|
81
|
-
// }
|
|
82
|
-
// else {
|
|
83
|
-
// helper.register(c.name, this);
|
|
84
|
-
// }
|
|
85
|
-
// }
|
|
86
|
-
constructor(type, name) {
|
|
87
|
-
this.name = name;
|
|
88
|
-
if (Array.isArray(type)) {
|
|
89
|
-
for (const key of type) {
|
|
90
|
-
helper.register(key, this);
|
|
91
|
-
}
|
|
92
|
-
}
|
|
93
|
-
else
|
|
94
|
-
helper.register(type, this);
|
|
95
|
-
}
|
|
96
|
-
}
|
|
97
|
-
/** holds information if a field was undefined before serialization. This gives us info if we might want to warn the user about missing attributes */
|
|
98
|
-
export class ImplementationInformation {
|
|
99
|
-
isDevMode = isLocalNetwork();
|
|
100
|
-
cache = {};
|
|
101
|
-
/** only call when assigning values for the very first time */
|
|
102
|
-
registerDefinedKeys(typeName, type) {
|
|
103
|
-
if (!this.isDevMode)
|
|
104
|
-
return;
|
|
105
|
-
if (this.cache[typeName] === undefined) {
|
|
106
|
-
this.cache[typeName] = Object.keys(type);
|
|
107
|
-
const serializable = type;
|
|
108
|
-
// also register all fields that are annotated with @serializable
|
|
109
|
-
if (serializable.$serializedTypes) {
|
|
110
|
-
const keys = Object.keys(serializable.$serializedTypes);
|
|
111
|
-
if (keys)
|
|
112
|
-
this.cache[typeName].push(...Object.keys(serializable.$serializedTypes));
|
|
113
|
-
}
|
|
114
|
-
if (debug)
|
|
115
|
-
console.log("registerDefinedKeys for " + typeName, this.cache[typeName], type);
|
|
116
|
-
}
|
|
117
|
-
}
|
|
118
|
-
getDefinedKey(typeName, key) {
|
|
119
|
-
if (this.cache[typeName] === undefined)
|
|
120
|
-
return false;
|
|
121
|
-
const keys = this.cache[typeName];
|
|
122
|
-
const res = keys.includes(key);
|
|
123
|
-
return res;
|
|
124
|
-
}
|
|
125
|
-
}
|
|
126
|
-
// passed to serializers
|
|
127
|
-
export class SerializationContext {
|
|
128
|
-
root;
|
|
129
|
-
gltf;
|
|
130
|
-
/** the url of the glb that is currently being loaded */
|
|
131
|
-
gltfId;
|
|
132
|
-
object;
|
|
133
|
-
target;
|
|
134
|
-
nodeId;
|
|
135
|
-
nodeToObject;
|
|
136
|
-
objectToNode;
|
|
137
|
-
context;
|
|
138
|
-
path;
|
|
139
|
-
type;
|
|
140
|
-
/** the serializable attribute for this field (target.path) */
|
|
141
|
-
serializable;
|
|
142
|
-
/** holds information if a field was undefined before serialization. This gives us info if we might want to warn the user about missing attributes */
|
|
143
|
-
implementationInformation;
|
|
144
|
-
constructor(root) {
|
|
145
|
-
this.root = root;
|
|
146
|
-
}
|
|
147
|
-
}
|
|
148
|
-
;
|
|
149
|
-
export function serializeObject(obj, context) {
|
|
150
|
-
const types = obj.$serializedTypes;
|
|
151
|
-
if (types === undefined)
|
|
152
|
-
return null;
|
|
153
|
-
const res = {};
|
|
154
|
-
for (const key in types) {
|
|
155
|
-
const val = obj[key];
|
|
156
|
-
// if the object bein serialized is some type of object check if we have special handling registered for it
|
|
157
|
-
if (val !== undefined && val !== null && typeof val === "object") {
|
|
158
|
-
// get type name
|
|
159
|
-
// get registered serialization handler
|
|
160
|
-
const ser = helper.getSerializerForConstructor(val);
|
|
161
|
-
if (ser) {
|
|
162
|
-
// serialize data using that handler
|
|
163
|
-
res[key] = ser.onSerialize(val, context);
|
|
164
|
-
continue;
|
|
165
|
-
}
|
|
166
|
-
}
|
|
167
|
-
res[key] = val;
|
|
168
|
-
}
|
|
169
|
-
// TODO move this to a helper function and do a reverse lookup once
|
|
170
|
-
// instead of doing it for each object
|
|
171
|
-
function getComponentName(component) {
|
|
172
|
-
const typeNames = TypeStore["_types"];
|
|
173
|
-
for (const [typeName, typeVal] of typeNames) {
|
|
174
|
-
if (typeVal === obj.constructor) {
|
|
175
|
-
return typeName;
|
|
176
|
-
}
|
|
177
|
-
}
|
|
178
|
-
return component.__name || component.constructor.name;
|
|
179
|
-
}
|
|
180
|
-
// name is the component type
|
|
181
|
-
res["name"] = getComponentName(obj);
|
|
182
|
-
// serialize guid
|
|
183
|
-
if (typeof obj["guid"] === "string")
|
|
184
|
-
res["guid"] = obj["guid"];
|
|
185
|
-
return res;
|
|
186
|
-
}
|
|
187
|
-
const buffer = [];
|
|
188
|
-
function collectSerializedTypesInBaseTypes(obj, typeInfoObject) {
|
|
189
|
-
if (!obj)
|
|
190
|
-
return typeInfoObject;
|
|
191
|
-
if (typeof obj.$serializedTypes === "object") {
|
|
192
|
-
if (!typeInfoObject)
|
|
193
|
-
typeInfoObject = {};
|
|
194
|
-
Object.assign(typeInfoObject, obj.$serializedTypes);
|
|
195
|
-
}
|
|
196
|
-
const parentTarget = Object.getPrototypeOf(obj);
|
|
197
|
-
return collectSerializedTypesInBaseTypes(parentTarget, typeInfoObject);
|
|
198
|
-
}
|
|
199
|
-
export function deserializeObject(obj, serializedData, context) {
|
|
200
|
-
if (!obj)
|
|
201
|
-
return false;
|
|
202
|
-
context.target = obj;
|
|
203
|
-
if (obj.onBeforeDeserialize !== undefined) {
|
|
204
|
-
const res = obj.onBeforeDeserialize(serializedData, context);
|
|
205
|
-
if (typeof res === "boolean")
|
|
206
|
-
return res;
|
|
207
|
-
}
|
|
208
|
-
// const typeInfo = obj.$serializedTypes;
|
|
209
|
-
const typeInfo = collectSerializedTypesInBaseTypes(obj);
|
|
210
|
-
if (serializedData) {
|
|
211
|
-
// restore guid (see serializeObject)
|
|
212
|
-
if (typeof serializedData["guid"] === "string")
|
|
213
|
-
obj["guid"] = serializedData["guid"];
|
|
214
|
-
if (typeInfo) {
|
|
215
|
-
for (const key in typeInfo) {
|
|
216
|
-
const serializedEntryInfo = typeInfo[key];
|
|
217
|
-
const data = serializedData[key];
|
|
218
|
-
if (debug)
|
|
219
|
-
console.log(key, data, obj, serializedEntryInfo);
|
|
220
|
-
if (obj[key] !== undefined && data === undefined) {
|
|
221
|
-
// if a field is marked as serialized and has some default value
|
|
222
|
-
// but no data was serialized do not override the default value with undefined
|
|
223
|
-
continue;
|
|
224
|
-
}
|
|
225
|
-
context.type = undefined;
|
|
226
|
-
context.path = key;
|
|
227
|
-
context.serializable = serializedEntryInfo;
|
|
228
|
-
if (obj.onBeforeDeserializeMember !== undefined) {
|
|
229
|
-
// callback to the instance, if it returns true assume it's done all the things itself
|
|
230
|
-
if (obj.onBeforeDeserializeMember(key, data, context) === true)
|
|
231
|
-
continue;
|
|
232
|
-
}
|
|
233
|
-
if (serializedEntryInfo === null) {
|
|
234
|
-
obj[key] = data;
|
|
235
|
-
// if(typeof data === "string"){
|
|
236
|
-
// const serializer = helper.getSerializerForConstructor(String);
|
|
237
|
-
// const res = serializer?.onDeserialize(data, context);
|
|
238
|
-
// if(res !== undefined) obj[key] = res;
|
|
239
|
-
// }
|
|
240
|
-
}
|
|
241
|
-
else {
|
|
242
|
-
if (Array.isArray(serializedEntryInfo)) {
|
|
243
|
-
for (let i = 0; i < serializedEntryInfo.length; i++) {
|
|
244
|
-
const typeInfoOrConstructor = serializedEntryInfo[i];
|
|
245
|
-
const res = tryResolve(typeInfoOrConstructor);
|
|
246
|
-
if (res !== undefined || i === serializedEntryInfo.length - 1) {
|
|
247
|
-
obj[key] = res;
|
|
248
|
-
break;
|
|
249
|
-
}
|
|
250
|
-
}
|
|
251
|
-
}
|
|
252
|
-
else {
|
|
253
|
-
obj[key] = tryResolve(serializedEntryInfo);
|
|
254
|
-
}
|
|
255
|
-
buffer.length = 0;
|
|
256
|
-
}
|
|
257
|
-
if (obj.onAfterDeserializeMember !== undefined) {
|
|
258
|
-
obj.onAfterDeserializeMember(key, data, context);
|
|
259
|
-
}
|
|
260
|
-
function tryResolve(typeInfoOrConstructor) {
|
|
261
|
-
const typeInformationOrConstructor = typeInfoOrConstructor;
|
|
262
|
-
// if the entry does specify an object of type ITypeInformation and has the type field set
|
|
263
|
-
const type = typeInformationOrConstructor.type;
|
|
264
|
-
if (type) {
|
|
265
|
-
return deserializeObjectWithType(data, type, context, undefined, obj[key]);
|
|
266
|
-
}
|
|
267
|
-
// it can also just contain a constructor
|
|
268
|
-
else {
|
|
269
|
-
const constructor = typeInfoOrConstructor;
|
|
270
|
-
return deserializeObjectWithType(data, constructor, context, undefined, obj[key]);
|
|
271
|
-
}
|
|
272
|
-
}
|
|
273
|
-
}
|
|
274
|
-
}
|
|
275
|
-
// ***
|
|
276
|
-
// the code below could be used to implictly assign serialized data if they are primitive types
|
|
277
|
-
// if we decide not to do this we always have to write out all the $serializedTypes
|
|
278
|
-
// ***
|
|
279
|
-
implictlyAssignPrimitiveTypes(obj, serializedData);
|
|
280
|
-
}
|
|
281
|
-
checkObjectAssignments(obj, serializedData, context.implementationInformation);
|
|
282
|
-
if (obj.onAfterDeserialize !== undefined) {
|
|
283
|
-
obj.onAfterDeserialize(serializedData, context);
|
|
284
|
-
}
|
|
285
|
-
return true;
|
|
286
|
-
}
|
|
287
|
-
const blockChecks = getParam("noerrors");
|
|
288
|
-
function checkObjectAssignments(obj, serializedData, implementationInformation) {
|
|
289
|
-
if (blockChecks)
|
|
290
|
-
return;
|
|
291
|
-
if (!serializedData)
|
|
292
|
-
return;
|
|
293
|
-
if (!isLocalNetwork())
|
|
294
|
-
return;
|
|
295
|
-
if (!obj)
|
|
296
|
-
return;
|
|
297
|
-
// ignore builtin components that we dont want to check
|
|
298
|
-
if (obj.constructor && obj.constructor[$BuiltInTypeFlag] === true)
|
|
299
|
-
return;
|
|
300
|
-
const typeName = obj.constructor?.name;
|
|
301
|
-
// test if any object reference is missing serializable
|
|
302
|
-
const ownKeys = Object.getOwnPropertyNames(serializedData);
|
|
303
|
-
for (const key of ownKeys) {
|
|
304
|
-
if (key === "sourceId")
|
|
305
|
-
continue;
|
|
306
|
-
const value = obj[key];
|
|
307
|
-
if (value == null)
|
|
308
|
-
continue;
|
|
309
|
-
const serialized = serializedData[key];
|
|
310
|
-
// check if the field is defined in the class
|
|
311
|
-
if (implementationInformation?.getDefinedKey(typeName, key) === false) {
|
|
312
|
-
// if the field is defined but the defined key is uppercase we need to show a warning
|
|
313
|
-
// because all fields are serialized in lowercase
|
|
314
|
-
const firstCharUppercase = key.charAt(0).toUpperCase() + key.slice(1);
|
|
315
|
-
if (implementationInformation.getDefinedKey(typeName, firstCharUppercase)) {
|
|
316
|
-
addLog(LogType.Warn, "<strong>Please rename</strong> \"" + firstCharUppercase + "\" to \"" + key + "\" in " + typeName);
|
|
317
|
-
console.warn("Please use lowercase for field: \"" + firstCharUppercase + "\" in " + typeName, serialized, obj);
|
|
318
|
-
}
|
|
319
|
-
continue;
|
|
320
|
-
}
|
|
321
|
-
if (serialized === undefined || serialized === null)
|
|
322
|
-
continue;
|
|
323
|
-
if (typeof serialized === "object") {
|
|
324
|
-
if (value === undefined || !value.isObject3D) {
|
|
325
|
-
if (typeof serialized["node"] === "number" || typeof serialized["guid"] === "string") {
|
|
326
|
-
if (serialized["could_not_resolve"]) {
|
|
327
|
-
continue;
|
|
328
|
-
}
|
|
329
|
-
const hasOtherKeys = value !== undefined && Object.keys(value).length > 1;
|
|
330
|
-
if (!hasOtherKeys) {
|
|
331
|
-
addLog(LogType.Warn, `<strong>Missing serialization for object reference!</strong>\n\nPlease change to: \n@serializable(Object3D)\n${key}? : Object3D;\n\nin ${typeName}.ts\n<a href="https://docs.needle.tools/serializable" target="_blank">See documentation</a>`);
|
|
332
|
-
console.warn(typeName, key, obj[key], obj);
|
|
333
|
-
continue;
|
|
334
|
-
}
|
|
335
|
-
}
|
|
336
|
-
else if (!Array.isArray(value)) {
|
|
337
|
-
// we can check the constructor name because this is dev only
|
|
338
|
-
const valueName = value.constructor?.name;
|
|
339
|
-
if (valueName === "Object") {
|
|
340
|
-
if (!value.constructor["did_warn:missing_serializable"]) {
|
|
341
|
-
value.constructor["did_warn:missing_serializable"] = true;
|
|
342
|
-
const warning = "You might be missing a @serializable(Type) decorator for field \"" + key + "\" in " + typeName + ".ts";
|
|
343
|
-
console.warn(warning + `\n${key}:`, serialized, valueName);
|
|
344
|
-
addLog(LogType.Warn, "Dev Warning: Are you missing a type in @serializable? Please check the browser console for details");
|
|
345
|
-
}
|
|
346
|
-
}
|
|
347
|
-
}
|
|
348
|
-
}
|
|
349
|
-
}
|
|
350
|
-
if (typeof value === "string") {
|
|
351
|
-
if (typeof serialized === "string" && (serialized.endsWith(".gltf") || serialized.endsWith(".glb"))) {
|
|
352
|
-
addLog(LogType.Warn, `<strong>Missing serialization for object reference!</strong>\n\nPlease change to: \n@serializable(AssetReference)\n${key}? : AssetReference;\n\nin script ${typeName}.ts\n<a href="https://docs.needle.tools/serializable" target="_blank">documentation</a>`);
|
|
353
|
-
console.warn(typeName, key, obj[key], obj);
|
|
354
|
-
continue;
|
|
355
|
-
}
|
|
356
|
-
}
|
|
357
|
-
}
|
|
358
|
-
}
|
|
359
|
-
function implictlyAssignPrimitiveTypes(obj, serializedData) {
|
|
360
|
-
// implictly assign serialized primitive fields
|
|
361
|
-
for (const key of Object.keys(serializedData)) {
|
|
362
|
-
const data = serializedData[key];
|
|
363
|
-
if (typeof data === "object" && data !== null && data !== undefined) {
|
|
364
|
-
const member = obj[key];
|
|
365
|
-
if (!member) {
|
|
366
|
-
if (debug)
|
|
367
|
-
console.log(key, "is undefined on", obj);
|
|
368
|
-
continue;
|
|
369
|
-
}
|
|
370
|
-
for (const key of Object.keys(data)) {
|
|
371
|
-
const targetMember = member[key];
|
|
372
|
-
// implictly assign number, string, boolean if they are undefined
|
|
373
|
-
if (targetMember !== undefined)
|
|
374
|
-
continue;
|
|
375
|
-
// resolve serialized primitive types
|
|
376
|
-
if (isPrimitiveType(data[key]) && !isPrimitiveType(member)) {
|
|
377
|
-
const prop = tryFindPropertyDescriptor(member, key);
|
|
378
|
-
if (prop && (prop?.writable === undefined || prop?.writable === false) && (prop.set === undefined)) {
|
|
379
|
-
if (debug)
|
|
380
|
-
console.warn("Property is not writable \"" + key + "\"", member, prop, data[key], member[key]);
|
|
381
|
-
continue;
|
|
382
|
-
}
|
|
383
|
-
// console.log("ASSIGN", key, member, member[key], targetMember, data[key], prop);
|
|
384
|
-
member[key] = data[key];
|
|
385
|
-
}
|
|
386
|
-
}
|
|
387
|
-
}
|
|
388
|
-
}
|
|
389
|
-
}
|
|
390
|
-
function tryFindPropertyDescriptor(obj, key) {
|
|
391
|
-
while (obj) {
|
|
392
|
-
const desc = Object.getOwnPropertyDescriptor(obj, key);
|
|
393
|
-
if (desc)
|
|
394
|
-
return desc;
|
|
395
|
-
obj = Object.getPrototypeOf(obj);
|
|
396
|
-
}
|
|
397
|
-
return undefined;
|
|
398
|
-
}
|
|
399
|
-
function isPrimitiveType(val) {
|
|
400
|
-
switch (typeof val) {
|
|
401
|
-
case "number":
|
|
402
|
-
case "string":
|
|
403
|
-
case "boolean":
|
|
404
|
-
return true;
|
|
405
|
-
}
|
|
406
|
-
return false;
|
|
407
|
-
}
|
|
408
|
-
function deserializeObjectWithType(data, typeOrConstructor, context, typeContext, currentValue) {
|
|
409
|
-
// e.g. @serializable((data) => { })
|
|
410
|
-
let typeIsFunction = typeof typeOrConstructor === "function" && (typeOrConstructor.prototype === undefined);
|
|
411
|
-
let type = typeOrConstructor;
|
|
412
|
-
if (typeIsFunction) {
|
|
413
|
-
// it's possible to assign a function to serializable to dynamically say which type we expect
|
|
414
|
-
// e.g. if you have an array of types and you want the array to be resolved with different class instances
|
|
415
|
-
try {
|
|
416
|
-
const resolvedType = typeOrConstructor?.call(typeOrConstructor, currentValue);
|
|
417
|
-
type = resolvedType;
|
|
418
|
-
typeIsFunction = false;
|
|
419
|
-
if (type === null || type === undefined)
|
|
420
|
-
return;
|
|
421
|
-
}
|
|
422
|
-
catch (err) {
|
|
423
|
-
console.error("Error in callback", err, data);
|
|
424
|
-
}
|
|
425
|
-
}
|
|
426
|
-
context.type = type;
|
|
427
|
-
// e.g. when @serializable(Texture) and the texture is already resolved via json pointer from gltf
|
|
428
|
-
// then we dont need to do anything else
|
|
429
|
-
if (!typeIsFunction && currentValue) {
|
|
430
|
-
if (currentValue instanceof Material)
|
|
431
|
-
return currentValue;
|
|
432
|
-
if (currentValue instanceof Mesh)
|
|
433
|
-
return currentValue;
|
|
434
|
-
if (currentValue instanceof BufferGeometry)
|
|
435
|
-
return currentValue;
|
|
436
|
-
if (currentValue instanceof AnimationClip)
|
|
437
|
-
return currentValue;
|
|
438
|
-
// We need to call the RenderTexture deserializer so we can not just return here:
|
|
439
|
-
// if (currentValue instanceof Texture) return currentValue;
|
|
440
|
-
// So this has now been moved down below the deserializer code
|
|
441
|
-
}
|
|
442
|
-
// Removed this line because it prevents assigning serialized values to existing instances for e.g. EventList
|
|
443
|
-
// https://linear.app/needle/issue/NE-5350
|
|
444
|
-
// if (!typeIsFunction && currentValue instanceof type) return currentValue;
|
|
445
|
-
// try to resolve the serializer for a type only once
|
|
446
|
-
if (!typeContext) {
|
|
447
|
-
typeContext = {
|
|
448
|
-
serializer: helper.getSerializerForConstructor(type)
|
|
449
|
-
};
|
|
450
|
-
}
|
|
451
|
-
// if the value was already resolved via the persistent asset extension dont try to override that again
|
|
452
|
-
if (currentValue && typeof currentValue === "object" && isPersistentAsset(currentValue)) {
|
|
453
|
-
// if the persistent asset was already resolved to a concrete instance we dont need to do anything anymore
|
|
454
|
-
if (currentValue["__concreteInstance"]) {
|
|
455
|
-
return currentValue["__concreteInstance"];
|
|
456
|
-
}
|
|
457
|
-
const serializableInstance = currentValue;
|
|
458
|
-
if (!serializableInstance.$serializedTypes && type.prototype.$serializedTypes)
|
|
459
|
-
serializableInstance.$serializedTypes = type.prototype.$serializedTypes;
|
|
460
|
-
if (serializableInstance.$serializedTypes) {
|
|
461
|
-
deserializeObject(serializableInstance, data, context);
|
|
462
|
-
}
|
|
463
|
-
if (currentValue && type !== undefined) {
|
|
464
|
-
try {
|
|
465
|
-
let instance = null;
|
|
466
|
-
// It's still possible that the type has an explicit serializer
|
|
467
|
-
// e.g. AnimatorController (or if a user registers a serializer for an arbitrary type and then marks a persistent asset with @serializable)
|
|
468
|
-
// we have this for @serializable(AnimatorController)
|
|
469
|
-
if (typeContext.serializer) {
|
|
470
|
-
instance = typeContext.serializer.onDeserialize(data, context);
|
|
471
|
-
}
|
|
472
|
-
if (!instance) {
|
|
473
|
-
// we create a concrete instance for a persistent asset here
|
|
474
|
-
// hence we want to have the same instance across all usages of this asset
|
|
475
|
-
instance = new type();
|
|
476
|
-
if (debugExtension)
|
|
477
|
-
console.log("Create concrete instance for persistent asset", currentValue, "instance:", instance);
|
|
478
|
-
assign(instance, currentValue);
|
|
479
|
-
}
|
|
480
|
-
// save it so if another component references the same persistent asset it will automatically use the concrete instance
|
|
481
|
-
currentValue["__concreteInstance"] = instance;
|
|
482
|
-
currentValue = instance;
|
|
483
|
-
}
|
|
484
|
-
catch (err) {
|
|
485
|
-
console.error("Error creating instance or creating values on instance", err, currentValue, type);
|
|
486
|
-
}
|
|
487
|
-
}
|
|
488
|
-
return currentValue;
|
|
489
|
-
}
|
|
490
|
-
// if the type is an array resolve each entries recursively
|
|
491
|
-
if (Array.isArray(data)) {
|
|
492
|
-
const newArr = [];
|
|
493
|
-
for (let i = 0; i < data.length; i++) {
|
|
494
|
-
const obj = data[i];
|
|
495
|
-
// debugger;
|
|
496
|
-
const res = deserializeObjectWithType(obj, typeOrConstructor, context, typeContext, obj);
|
|
497
|
-
newArr.push(res);
|
|
498
|
-
}
|
|
499
|
-
// return value;
|
|
500
|
-
return newArr;
|
|
501
|
-
}
|
|
502
|
-
const ser = typeContext?.serializer;
|
|
503
|
-
if (ser) {
|
|
504
|
-
return ser.onDeserialize(data, context);
|
|
505
|
-
}
|
|
506
|
-
// console.log(type.prototype.get("$serializedTypes"));
|
|
507
|
-
// We check textures AFTER running deserializers because some textures might need to be converted to a RenderTexture
|
|
508
|
-
if (currentValue instanceof Texture)
|
|
509
|
-
return currentValue;
|
|
510
|
-
let instance = undefined;
|
|
511
|
-
if (data && (data.isMaterial || data.isTexture || data.isObject3D || data instanceof AnimationClip)) {
|
|
512
|
-
// if the data is already a threejs object we dont want to create a new instance
|
|
513
|
-
// e.g. if we have a serialized class with a serializable(Material)
|
|
514
|
-
instance = data;
|
|
515
|
-
}
|
|
516
|
-
else {
|
|
517
|
-
// happens when exporting e.g. Animation component with only clip assigned (clips array is marked as serialized but it might be undefined if no clips are assigned in e.g. blender)
|
|
518
|
-
if (data === undefined)
|
|
519
|
-
return undefined;
|
|
520
|
-
if (data === null) {
|
|
521
|
-
// Dont implictly create instances for three types that are not assigned
|
|
522
|
-
// see: https://github.com/needle-tools/needle-tiny/issues/637
|
|
523
|
-
if (type === Material || type === Texture || type === Mesh || type === AnimationClip) {
|
|
524
|
-
return null;
|
|
525
|
-
}
|
|
526
|
-
}
|
|
527
|
-
try {
|
|
528
|
-
// the fallback - this assumes that the type has a constructor that accepts the serialized arguments
|
|
529
|
-
// made originally with Vector3 in mind but SHOULD actually not be used/called anymore
|
|
530
|
-
instance = new type(...setBuffer(data));
|
|
531
|
-
}
|
|
532
|
-
catch (err) {
|
|
533
|
-
console.error("Error creating " + context.path, context.target, err);
|
|
534
|
-
return;
|
|
535
|
-
}
|
|
536
|
-
}
|
|
537
|
-
// recurse if the deserialized member also implements Iserializable
|
|
538
|
-
const serializableInstance = instance;
|
|
539
|
-
if (serializableInstance.$serializedTypes) {
|
|
540
|
-
deserializeObject(serializableInstance, data, context);
|
|
541
|
-
}
|
|
542
|
-
return instance;
|
|
543
|
-
}
|
|
544
|
-
function setBuffer(value) {
|
|
545
|
-
buffer.length = 0;
|
|
546
|
-
if (typeof value === "object" && value !== null && value !== undefined) {
|
|
547
|
-
for (const key of Object.keys(value)) {
|
|
548
|
-
buffer.push(value[key]);
|
|
549
|
-
}
|
|
550
|
-
}
|
|
551
|
-
return buffer;
|
|
552
|
-
}
|
|
553
|
-
/** set to true while assigning properties during instantiation.
|
|
554
|
-
* Used for validate decorator to not invoke callbacks on components that are currently in the process of being built */
|
|
555
|
-
export const $isAssigningProperties = Symbol("assigned component properties");
|
|
556
|
-
/** Object.assign behaviour but check if property is writeable (e.g. getter only properties are skipped) */
|
|
557
|
-
export function assign(target, source, info, opts) {
|
|
558
|
-
if (source === undefined || source === null)
|
|
559
|
-
return;
|
|
560
|
-
if (target === undefined || target === null)
|
|
561
|
-
return;
|
|
562
|
-
const onlyDeclared = false;
|
|
563
|
-
// if (onlyDeclared === true && target.constructor) {
|
|
564
|
-
// if (target.constructor[ALL_PROPERTIES_MARKER] === true)
|
|
565
|
-
// onlyDeclared = false;
|
|
566
|
-
// }
|
|
567
|
-
// if (onlyDeclared !== true && target.constructor) {
|
|
568
|
-
// if (target.constructor[STRICT_MARKER] === true)
|
|
569
|
-
// onlyDeclared = true;
|
|
570
|
-
// }
|
|
571
|
-
// if (onlyDeclared === undefined)
|
|
572
|
-
// onlyDeclared = true;
|
|
573
|
-
// if (developmentMode)
|
|
574
|
-
// onlyDeclared = false;
|
|
575
|
-
target[$isAssigningProperties] = true;
|
|
576
|
-
const typeName = target.constructor?.name ?? "unknown";
|
|
577
|
-
// register the keys that the actual type has defined
|
|
578
|
-
// this will be used later when checking if deserialization has assigned all properties
|
|
579
|
-
// or if anything could not be deserialized to warn the user
|
|
580
|
-
info?.registerDefinedKeys(typeName, target);
|
|
581
|
-
for (const key of Object.keys(source)) {
|
|
582
|
-
const desc = getPropertyDescriptor(target, key);
|
|
583
|
-
if (onlyDeclared && desc === undefined)
|
|
584
|
-
continue;
|
|
585
|
-
if (typeof desc?.value == "function") {
|
|
586
|
-
// arrow functions are defined as properties on the object
|
|
587
|
-
continue;
|
|
588
|
-
}
|
|
589
|
-
if (!desc || desc.writable === true) {
|
|
590
|
-
const value = opts?.onAssign ? opts.onAssign(source, key, source[key]) : source[key];
|
|
591
|
-
target[key] = value;
|
|
592
|
-
}
|
|
593
|
-
else if (desc?.set !== undefined) {
|
|
594
|
-
const value = opts?.onAssign ? opts.onAssign(source, key, source[key]) : source[key];
|
|
595
|
-
target[key] = value;
|
|
596
|
-
}
|
|
597
|
-
}
|
|
598
|
-
delete target[$isAssigningProperties];
|
|
599
|
-
}
|
|
600
|
-
// we need to recurse because the property might be defined in a base class
|
|
601
|
-
function getPropertyDescriptor(obj, prop) {
|
|
602
|
-
let desc;
|
|
603
|
-
do {
|
|
604
|
-
desc = Object.getOwnPropertyDescriptor(obj, prop);
|
|
605
|
-
} while (!desc && (obj = Object.getPrototypeOf(obj)));
|
|
606
|
-
return desc;
|
|
607
|
-
}
|
|
1
|
+
import { AnimationClip, BufferGeometry, Material, Mesh, Texture } from "three";
|
|
2
|
+
import { debugExtension } from "../engine/engine_default_parameters.js";
|
|
3
|
+
import { addLog, LogType } from "./debug/debug_overlay.js";
|
|
4
|
+
import { isLocalNetwork } from "./engine_networking_utils.js";
|
|
5
|
+
import { $BuiltInTypeFlag, TypeStore } from "./engine_typestore.js";
|
|
6
|
+
import { getParam } from "./engine_utils.js";
|
|
7
|
+
import { isPersistentAsset } from "./extensions/NEEDLE_persistent_assets.js";
|
|
8
|
+
const debug = getParam("debugserializer");
|
|
9
|
+
// internal helper class that we can ask for registered type serializers
|
|
10
|
+
// register your own type by deriving from ITypeSerializer and calling helper.register
|
|
11
|
+
class SerializationHelper {
|
|
12
|
+
register(type, ser) {
|
|
13
|
+
if (this.typeMap.has(type)) {
|
|
14
|
+
const existing = this.typeMap.get(type);
|
|
15
|
+
if (existing === ser)
|
|
16
|
+
return;
|
|
17
|
+
if (debug)
|
|
18
|
+
console.warn("Type: " + type + " is already registered", ser, existing);
|
|
19
|
+
}
|
|
20
|
+
if (debug)
|
|
21
|
+
console.log("Register type serializer", ser.name, ser, type);
|
|
22
|
+
this.typeMap.set(type, ser);
|
|
23
|
+
}
|
|
24
|
+
/** type > serializer map */
|
|
25
|
+
typeMap = new Map();
|
|
26
|
+
getSerializer(type) {
|
|
27
|
+
if (!type)
|
|
28
|
+
return undefined;
|
|
29
|
+
return this.typeMap.get(type);
|
|
30
|
+
}
|
|
31
|
+
getSerializerForConstructor(type, level = 0) {
|
|
32
|
+
if (level > 20)
|
|
33
|
+
return undefined;
|
|
34
|
+
if (!type || !type.constructor) {
|
|
35
|
+
if (debug)
|
|
36
|
+
console.log("invalid type");
|
|
37
|
+
return undefined;
|
|
38
|
+
}
|
|
39
|
+
const name = type.name;
|
|
40
|
+
const res = this.getSerializer(type);
|
|
41
|
+
if (res !== undefined) {
|
|
42
|
+
if (debug)
|
|
43
|
+
console.log("FOUND SERIALIZER", res?.name, type.name, type.constructor.name, "for type: " + name, res, type, this.typeMap);
|
|
44
|
+
return res;
|
|
45
|
+
}
|
|
46
|
+
const parent = Object.getPrototypeOf(type);
|
|
47
|
+
if (parent && parent !== type) {
|
|
48
|
+
const resultFromChildren = this.getSerializerForConstructor(parent, ++level);
|
|
49
|
+
if (resultFromChildren) {
|
|
50
|
+
const prot = parent.constructor || parent.prototype;
|
|
51
|
+
if (debug)
|
|
52
|
+
console.log("FOUND SERIALIZER(in constructor) " + prot.constructor.name, prot.name, prot, resultFromChildren);
|
|
53
|
+
// register sub type
|
|
54
|
+
this.register(prot, resultFromChildren);
|
|
55
|
+
}
|
|
56
|
+
return resultFromChildren;
|
|
57
|
+
}
|
|
58
|
+
if (debug)
|
|
59
|
+
console.warn("No serializer found for " + name, type, type.name, type.constructor.name);
|
|
60
|
+
return undefined;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
export const helper = new SerializationHelper();
|
|
64
|
+
/**
|
|
65
|
+
* implement and call super(<type string or array>) with the type names this serializer can handle
|
|
66
|
+
* for example:
|
|
67
|
+
* class ColorSerializer extends TypeSerializer {
|
|
68
|
+
* constructor() {
|
|
69
|
+
* super("Color")
|
|
70
|
+
* }
|
|
71
|
+
* }
|
|
72
|
+
*/
|
|
73
|
+
export class TypeSerializer {
|
|
74
|
+
name;
|
|
75
|
+
// register<T>(c: Constructor<T> | Constructor<T>[])
|
|
76
|
+
// {
|
|
77
|
+
// if (Array.isArray(c)) {
|
|
78
|
+
// for (const t of c) {
|
|
79
|
+
// helper.register(t.name, this);
|
|
80
|
+
// }
|
|
81
|
+
// }
|
|
82
|
+
// else {
|
|
83
|
+
// helper.register(c.name, this);
|
|
84
|
+
// }
|
|
85
|
+
// }
|
|
86
|
+
constructor(type, name) {
|
|
87
|
+
this.name = name;
|
|
88
|
+
if (Array.isArray(type)) {
|
|
89
|
+
for (const key of type) {
|
|
90
|
+
helper.register(key, this);
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
else
|
|
94
|
+
helper.register(type, this);
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
/** holds information if a field was undefined before serialization. This gives us info if we might want to warn the user about missing attributes */
|
|
98
|
+
export class ImplementationInformation {
|
|
99
|
+
isDevMode = isLocalNetwork();
|
|
100
|
+
cache = {};
|
|
101
|
+
/** only call when assigning values for the very first time */
|
|
102
|
+
registerDefinedKeys(typeName, type) {
|
|
103
|
+
if (!this.isDevMode)
|
|
104
|
+
return;
|
|
105
|
+
if (this.cache[typeName] === undefined) {
|
|
106
|
+
this.cache[typeName] = Object.keys(type);
|
|
107
|
+
const serializable = type;
|
|
108
|
+
// also register all fields that are annotated with @serializable
|
|
109
|
+
if (serializable.$serializedTypes) {
|
|
110
|
+
const keys = Object.keys(serializable.$serializedTypes);
|
|
111
|
+
if (keys)
|
|
112
|
+
this.cache[typeName].push(...Object.keys(serializable.$serializedTypes));
|
|
113
|
+
}
|
|
114
|
+
if (debug)
|
|
115
|
+
console.log("registerDefinedKeys for " + typeName, this.cache[typeName], type);
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
getDefinedKey(typeName, key) {
|
|
119
|
+
if (this.cache[typeName] === undefined)
|
|
120
|
+
return false;
|
|
121
|
+
const keys = this.cache[typeName];
|
|
122
|
+
const res = keys.includes(key);
|
|
123
|
+
return res;
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
// passed to serializers
|
|
127
|
+
export class SerializationContext {
|
|
128
|
+
root;
|
|
129
|
+
gltf;
|
|
130
|
+
/** the url of the glb that is currently being loaded */
|
|
131
|
+
gltfId;
|
|
132
|
+
object;
|
|
133
|
+
target;
|
|
134
|
+
nodeId;
|
|
135
|
+
nodeToObject;
|
|
136
|
+
objectToNode;
|
|
137
|
+
context;
|
|
138
|
+
path;
|
|
139
|
+
type;
|
|
140
|
+
/** the serializable attribute for this field (target.path) */
|
|
141
|
+
serializable;
|
|
142
|
+
/** holds information if a field was undefined before serialization. This gives us info if we might want to warn the user about missing attributes */
|
|
143
|
+
implementationInformation;
|
|
144
|
+
constructor(root) {
|
|
145
|
+
this.root = root;
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
;
|
|
149
|
+
export function serializeObject(obj, context) {
|
|
150
|
+
const types = obj.$serializedTypes;
|
|
151
|
+
if (types === undefined)
|
|
152
|
+
return null;
|
|
153
|
+
const res = {};
|
|
154
|
+
for (const key in types) {
|
|
155
|
+
const val = obj[key];
|
|
156
|
+
// if the object bein serialized is some type of object check if we have special handling registered for it
|
|
157
|
+
if (val !== undefined && val !== null && typeof val === "object") {
|
|
158
|
+
// get type name
|
|
159
|
+
// get registered serialization handler
|
|
160
|
+
const ser = helper.getSerializerForConstructor(val);
|
|
161
|
+
if (ser) {
|
|
162
|
+
// serialize data using that handler
|
|
163
|
+
res[key] = ser.onSerialize(val, context);
|
|
164
|
+
continue;
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
res[key] = val;
|
|
168
|
+
}
|
|
169
|
+
// TODO move this to a helper function and do a reverse lookup once
|
|
170
|
+
// instead of doing it for each object
|
|
171
|
+
function getComponentName(component) {
|
|
172
|
+
const typeNames = TypeStore["_types"];
|
|
173
|
+
for (const [typeName, typeVal] of typeNames) {
|
|
174
|
+
if (typeVal === obj.constructor) {
|
|
175
|
+
return typeName;
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
return component.__name || component.constructor.name;
|
|
179
|
+
}
|
|
180
|
+
// name is the component type
|
|
181
|
+
res["name"] = getComponentName(obj);
|
|
182
|
+
// serialize guid
|
|
183
|
+
if (typeof obj["guid"] === "string")
|
|
184
|
+
res["guid"] = obj["guid"];
|
|
185
|
+
return res;
|
|
186
|
+
}
|
|
187
|
+
const buffer = [];
|
|
188
|
+
function collectSerializedTypesInBaseTypes(obj, typeInfoObject) {
|
|
189
|
+
if (!obj)
|
|
190
|
+
return typeInfoObject;
|
|
191
|
+
if (typeof obj.$serializedTypes === "object") {
|
|
192
|
+
if (!typeInfoObject)
|
|
193
|
+
typeInfoObject = {};
|
|
194
|
+
Object.assign(typeInfoObject, obj.$serializedTypes);
|
|
195
|
+
}
|
|
196
|
+
const parentTarget = Object.getPrototypeOf(obj);
|
|
197
|
+
return collectSerializedTypesInBaseTypes(parentTarget, typeInfoObject);
|
|
198
|
+
}
|
|
199
|
+
export function deserializeObject(obj, serializedData, context) {
|
|
200
|
+
if (!obj)
|
|
201
|
+
return false;
|
|
202
|
+
context.target = obj;
|
|
203
|
+
if (obj.onBeforeDeserialize !== undefined) {
|
|
204
|
+
const res = obj.onBeforeDeserialize(serializedData, context);
|
|
205
|
+
if (typeof res === "boolean")
|
|
206
|
+
return res;
|
|
207
|
+
}
|
|
208
|
+
// const typeInfo = obj.$serializedTypes;
|
|
209
|
+
const typeInfo = collectSerializedTypesInBaseTypes(obj);
|
|
210
|
+
if (serializedData) {
|
|
211
|
+
// restore guid (see serializeObject)
|
|
212
|
+
if (typeof serializedData["guid"] === "string")
|
|
213
|
+
obj["guid"] = serializedData["guid"];
|
|
214
|
+
if (typeInfo) {
|
|
215
|
+
for (const key in typeInfo) {
|
|
216
|
+
const serializedEntryInfo = typeInfo[key];
|
|
217
|
+
const data = serializedData[key];
|
|
218
|
+
if (debug)
|
|
219
|
+
console.log(key, data, obj, serializedEntryInfo);
|
|
220
|
+
if (obj[key] !== undefined && data === undefined) {
|
|
221
|
+
// if a field is marked as serialized and has some default value
|
|
222
|
+
// but no data was serialized do not override the default value with undefined
|
|
223
|
+
continue;
|
|
224
|
+
}
|
|
225
|
+
context.type = undefined;
|
|
226
|
+
context.path = key;
|
|
227
|
+
context.serializable = serializedEntryInfo;
|
|
228
|
+
if (obj.onBeforeDeserializeMember !== undefined) {
|
|
229
|
+
// callback to the instance, if it returns true assume it's done all the things itself
|
|
230
|
+
if (obj.onBeforeDeserializeMember(key, data, context) === true)
|
|
231
|
+
continue;
|
|
232
|
+
}
|
|
233
|
+
if (serializedEntryInfo === null) {
|
|
234
|
+
obj[key] = data;
|
|
235
|
+
// if(typeof data === "string"){
|
|
236
|
+
// const serializer = helper.getSerializerForConstructor(String);
|
|
237
|
+
// const res = serializer?.onDeserialize(data, context);
|
|
238
|
+
// if(res !== undefined) obj[key] = res;
|
|
239
|
+
// }
|
|
240
|
+
}
|
|
241
|
+
else {
|
|
242
|
+
if (Array.isArray(serializedEntryInfo)) {
|
|
243
|
+
for (let i = 0; i < serializedEntryInfo.length; i++) {
|
|
244
|
+
const typeInfoOrConstructor = serializedEntryInfo[i];
|
|
245
|
+
const res = tryResolve(typeInfoOrConstructor);
|
|
246
|
+
if (res !== undefined || i === serializedEntryInfo.length - 1) {
|
|
247
|
+
obj[key] = res;
|
|
248
|
+
break;
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
else {
|
|
253
|
+
obj[key] = tryResolve(serializedEntryInfo);
|
|
254
|
+
}
|
|
255
|
+
buffer.length = 0;
|
|
256
|
+
}
|
|
257
|
+
if (obj.onAfterDeserializeMember !== undefined) {
|
|
258
|
+
obj.onAfterDeserializeMember(key, data, context);
|
|
259
|
+
}
|
|
260
|
+
function tryResolve(typeInfoOrConstructor) {
|
|
261
|
+
const typeInformationOrConstructor = typeInfoOrConstructor;
|
|
262
|
+
// if the entry does specify an object of type ITypeInformation and has the type field set
|
|
263
|
+
const type = typeInformationOrConstructor.type;
|
|
264
|
+
if (type) {
|
|
265
|
+
return deserializeObjectWithType(data, type, context, undefined, obj[key]);
|
|
266
|
+
}
|
|
267
|
+
// it can also just contain a constructor
|
|
268
|
+
else {
|
|
269
|
+
const constructor = typeInfoOrConstructor;
|
|
270
|
+
return deserializeObjectWithType(data, constructor, context, undefined, obj[key]);
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
// ***
|
|
276
|
+
// the code below could be used to implictly assign serialized data if they are primitive types
|
|
277
|
+
// if we decide not to do this we always have to write out all the $serializedTypes
|
|
278
|
+
// ***
|
|
279
|
+
implictlyAssignPrimitiveTypes(obj, serializedData);
|
|
280
|
+
}
|
|
281
|
+
checkObjectAssignments(obj, serializedData, context.implementationInformation);
|
|
282
|
+
if (obj.onAfterDeserialize !== undefined) {
|
|
283
|
+
obj.onAfterDeserialize(serializedData, context);
|
|
284
|
+
}
|
|
285
|
+
return true;
|
|
286
|
+
}
|
|
287
|
+
const blockChecks = getParam("noerrors");
|
|
288
|
+
function checkObjectAssignments(obj, serializedData, implementationInformation) {
|
|
289
|
+
if (blockChecks)
|
|
290
|
+
return;
|
|
291
|
+
if (!serializedData)
|
|
292
|
+
return;
|
|
293
|
+
if (!isLocalNetwork())
|
|
294
|
+
return;
|
|
295
|
+
if (!obj)
|
|
296
|
+
return;
|
|
297
|
+
// ignore builtin components that we dont want to check
|
|
298
|
+
if (obj.constructor && obj.constructor[$BuiltInTypeFlag] === true)
|
|
299
|
+
return;
|
|
300
|
+
const typeName = obj.constructor?.name;
|
|
301
|
+
// test if any object reference is missing serializable
|
|
302
|
+
const ownKeys = Object.getOwnPropertyNames(serializedData);
|
|
303
|
+
for (const key of ownKeys) {
|
|
304
|
+
if (key === "sourceId")
|
|
305
|
+
continue;
|
|
306
|
+
const value = obj[key];
|
|
307
|
+
if (value == null)
|
|
308
|
+
continue;
|
|
309
|
+
const serialized = serializedData[key];
|
|
310
|
+
// check if the field is defined in the class
|
|
311
|
+
if (implementationInformation?.getDefinedKey(typeName, key) === false) {
|
|
312
|
+
// if the field is defined but the defined key is uppercase we need to show a warning
|
|
313
|
+
// because all fields are serialized in lowercase
|
|
314
|
+
const firstCharUppercase = key.charAt(0).toUpperCase() + key.slice(1);
|
|
315
|
+
if (implementationInformation.getDefinedKey(typeName, firstCharUppercase)) {
|
|
316
|
+
addLog(LogType.Warn, "<strong>Please rename</strong> \"" + firstCharUppercase + "\" to \"" + key + "\" in " + typeName);
|
|
317
|
+
console.warn("Please use lowercase for field: \"" + firstCharUppercase + "\" in " + typeName, serialized, obj);
|
|
318
|
+
}
|
|
319
|
+
continue;
|
|
320
|
+
}
|
|
321
|
+
if (serialized === undefined || serialized === null)
|
|
322
|
+
continue;
|
|
323
|
+
if (typeof serialized === "object") {
|
|
324
|
+
if (value === undefined || !value.isObject3D) {
|
|
325
|
+
if (typeof serialized["node"] === "number" || typeof serialized["guid"] === "string") {
|
|
326
|
+
if (serialized["could_not_resolve"]) {
|
|
327
|
+
continue;
|
|
328
|
+
}
|
|
329
|
+
const hasOtherKeys = value !== undefined && Object.keys(value).length > 1;
|
|
330
|
+
if (!hasOtherKeys) {
|
|
331
|
+
addLog(LogType.Warn, `<strong>Missing serialization for object reference!</strong>\n\nPlease change to: \n@serializable(Object3D)\n${key}? : Object3D;\n\nin ${typeName}.ts\n<a href="https://docs.needle.tools/serializable" target="_blank">See documentation</a>`);
|
|
332
|
+
console.warn(typeName, key, obj[key], obj);
|
|
333
|
+
continue;
|
|
334
|
+
}
|
|
335
|
+
}
|
|
336
|
+
else if (!Array.isArray(value)) {
|
|
337
|
+
// we can check the constructor name because this is dev only
|
|
338
|
+
const valueName = value.constructor?.name;
|
|
339
|
+
if (valueName === "Object") {
|
|
340
|
+
if (!value.constructor["did_warn:missing_serializable"]) {
|
|
341
|
+
value.constructor["did_warn:missing_serializable"] = true;
|
|
342
|
+
const warning = "You might be missing a @serializable(Type) decorator for field \"" + key + "\" in " + typeName + ".ts";
|
|
343
|
+
console.warn(warning + `\n${key}:`, serialized, valueName);
|
|
344
|
+
addLog(LogType.Warn, "Dev Warning: Are you missing a type in @serializable? Please check the browser console for details");
|
|
345
|
+
}
|
|
346
|
+
}
|
|
347
|
+
}
|
|
348
|
+
}
|
|
349
|
+
}
|
|
350
|
+
if (typeof value === "string") {
|
|
351
|
+
if (typeof serialized === "string" && (serialized.endsWith(".gltf") || serialized.endsWith(".glb"))) {
|
|
352
|
+
addLog(LogType.Warn, `<strong>Missing serialization for object reference!</strong>\n\nPlease change to: \n@serializable(AssetReference)\n${key}? : AssetReference;\n\nin script ${typeName}.ts\n<a href="https://docs.needle.tools/serializable" target="_blank">documentation</a>`);
|
|
353
|
+
console.warn(typeName, key, obj[key], obj);
|
|
354
|
+
continue;
|
|
355
|
+
}
|
|
356
|
+
}
|
|
357
|
+
}
|
|
358
|
+
}
|
|
359
|
+
function implictlyAssignPrimitiveTypes(obj, serializedData) {
|
|
360
|
+
// implictly assign serialized primitive fields
|
|
361
|
+
for (const key of Object.keys(serializedData)) {
|
|
362
|
+
const data = serializedData[key];
|
|
363
|
+
if (typeof data === "object" && data !== null && data !== undefined) {
|
|
364
|
+
const member = obj[key];
|
|
365
|
+
if (!member) {
|
|
366
|
+
if (debug)
|
|
367
|
+
console.log(key, "is undefined on", obj);
|
|
368
|
+
continue;
|
|
369
|
+
}
|
|
370
|
+
for (const key of Object.keys(data)) {
|
|
371
|
+
const targetMember = member[key];
|
|
372
|
+
// implictly assign number, string, boolean if they are undefined
|
|
373
|
+
if (targetMember !== undefined)
|
|
374
|
+
continue;
|
|
375
|
+
// resolve serialized primitive types
|
|
376
|
+
if (isPrimitiveType(data[key]) && !isPrimitiveType(member)) {
|
|
377
|
+
const prop = tryFindPropertyDescriptor(member, key);
|
|
378
|
+
if (prop && (prop?.writable === undefined || prop?.writable === false) && (prop.set === undefined)) {
|
|
379
|
+
if (debug)
|
|
380
|
+
console.warn("Property is not writable \"" + key + "\"", member, prop, data[key], member[key]);
|
|
381
|
+
continue;
|
|
382
|
+
}
|
|
383
|
+
// console.log("ASSIGN", key, member, member[key], targetMember, data[key], prop);
|
|
384
|
+
member[key] = data[key];
|
|
385
|
+
}
|
|
386
|
+
}
|
|
387
|
+
}
|
|
388
|
+
}
|
|
389
|
+
}
|
|
390
|
+
function tryFindPropertyDescriptor(obj, key) {
|
|
391
|
+
while (obj) {
|
|
392
|
+
const desc = Object.getOwnPropertyDescriptor(obj, key);
|
|
393
|
+
if (desc)
|
|
394
|
+
return desc;
|
|
395
|
+
obj = Object.getPrototypeOf(obj);
|
|
396
|
+
}
|
|
397
|
+
return undefined;
|
|
398
|
+
}
|
|
399
|
+
function isPrimitiveType(val) {
|
|
400
|
+
switch (typeof val) {
|
|
401
|
+
case "number":
|
|
402
|
+
case "string":
|
|
403
|
+
case "boolean":
|
|
404
|
+
return true;
|
|
405
|
+
}
|
|
406
|
+
return false;
|
|
407
|
+
}
|
|
408
|
+
function deserializeObjectWithType(data, typeOrConstructor, context, typeContext, currentValue) {
|
|
409
|
+
// e.g. @serializable((data) => { })
|
|
410
|
+
let typeIsFunction = typeof typeOrConstructor === "function" && (typeOrConstructor.prototype === undefined);
|
|
411
|
+
let type = typeOrConstructor;
|
|
412
|
+
if (typeIsFunction) {
|
|
413
|
+
// it's possible to assign a function to serializable to dynamically say which type we expect
|
|
414
|
+
// e.g. if you have an array of types and you want the array to be resolved with different class instances
|
|
415
|
+
try {
|
|
416
|
+
const resolvedType = typeOrConstructor?.call(typeOrConstructor, currentValue);
|
|
417
|
+
type = resolvedType;
|
|
418
|
+
typeIsFunction = false;
|
|
419
|
+
if (type === null || type === undefined)
|
|
420
|
+
return;
|
|
421
|
+
}
|
|
422
|
+
catch (err) {
|
|
423
|
+
console.error("Error in callback", err, data);
|
|
424
|
+
}
|
|
425
|
+
}
|
|
426
|
+
context.type = type;
|
|
427
|
+
// e.g. when @serializable(Texture) and the texture is already resolved via json pointer from gltf
|
|
428
|
+
// then we dont need to do anything else
|
|
429
|
+
if (!typeIsFunction && currentValue) {
|
|
430
|
+
if (currentValue instanceof Material)
|
|
431
|
+
return currentValue;
|
|
432
|
+
if (currentValue instanceof Mesh)
|
|
433
|
+
return currentValue;
|
|
434
|
+
if (currentValue instanceof BufferGeometry)
|
|
435
|
+
return currentValue;
|
|
436
|
+
if (currentValue instanceof AnimationClip)
|
|
437
|
+
return currentValue;
|
|
438
|
+
// We need to call the RenderTexture deserializer so we can not just return here:
|
|
439
|
+
// if (currentValue instanceof Texture) return currentValue;
|
|
440
|
+
// So this has now been moved down below the deserializer code
|
|
441
|
+
}
|
|
442
|
+
// Removed this line because it prevents assigning serialized values to existing instances for e.g. EventList
|
|
443
|
+
// https://linear.app/needle/issue/NE-5350
|
|
444
|
+
// if (!typeIsFunction && currentValue instanceof type) return currentValue;
|
|
445
|
+
// try to resolve the serializer for a type only once
|
|
446
|
+
if (!typeContext) {
|
|
447
|
+
typeContext = {
|
|
448
|
+
serializer: helper.getSerializerForConstructor(type)
|
|
449
|
+
};
|
|
450
|
+
}
|
|
451
|
+
// if the value was already resolved via the persistent asset extension dont try to override that again
|
|
452
|
+
if (currentValue && typeof currentValue === "object" && isPersistentAsset(currentValue)) {
|
|
453
|
+
// if the persistent asset was already resolved to a concrete instance we dont need to do anything anymore
|
|
454
|
+
if (currentValue["__concreteInstance"]) {
|
|
455
|
+
return currentValue["__concreteInstance"];
|
|
456
|
+
}
|
|
457
|
+
const serializableInstance = currentValue;
|
|
458
|
+
if (!serializableInstance.$serializedTypes && type.prototype.$serializedTypes)
|
|
459
|
+
serializableInstance.$serializedTypes = type.prototype.$serializedTypes;
|
|
460
|
+
if (serializableInstance.$serializedTypes) {
|
|
461
|
+
deserializeObject(serializableInstance, data, context);
|
|
462
|
+
}
|
|
463
|
+
if (currentValue && type !== undefined) {
|
|
464
|
+
try {
|
|
465
|
+
let instance = null;
|
|
466
|
+
// It's still possible that the type has an explicit serializer
|
|
467
|
+
// e.g. AnimatorController (or if a user registers a serializer for an arbitrary type and then marks a persistent asset with @serializable)
|
|
468
|
+
// we have this for @serializable(AnimatorController)
|
|
469
|
+
if (typeContext.serializer) {
|
|
470
|
+
instance = typeContext.serializer.onDeserialize(data, context);
|
|
471
|
+
}
|
|
472
|
+
if (!instance) {
|
|
473
|
+
// we create a concrete instance for a persistent asset here
|
|
474
|
+
// hence we want to have the same instance across all usages of this asset
|
|
475
|
+
instance = new type();
|
|
476
|
+
if (debugExtension)
|
|
477
|
+
console.log("Create concrete instance for persistent asset", currentValue, "instance:", instance);
|
|
478
|
+
assign(instance, currentValue);
|
|
479
|
+
}
|
|
480
|
+
// save it so if another component references the same persistent asset it will automatically use the concrete instance
|
|
481
|
+
currentValue["__concreteInstance"] = instance;
|
|
482
|
+
currentValue = instance;
|
|
483
|
+
}
|
|
484
|
+
catch (err) {
|
|
485
|
+
console.error("Error creating instance or creating values on instance", err, currentValue, type);
|
|
486
|
+
}
|
|
487
|
+
}
|
|
488
|
+
return currentValue;
|
|
489
|
+
}
|
|
490
|
+
// if the type is an array resolve each entries recursively
|
|
491
|
+
if (Array.isArray(data)) {
|
|
492
|
+
const newArr = [];
|
|
493
|
+
for (let i = 0; i < data.length; i++) {
|
|
494
|
+
const obj = data[i];
|
|
495
|
+
// debugger;
|
|
496
|
+
const res = deserializeObjectWithType(obj, typeOrConstructor, context, typeContext, obj);
|
|
497
|
+
newArr.push(res);
|
|
498
|
+
}
|
|
499
|
+
// return value;
|
|
500
|
+
return newArr;
|
|
501
|
+
}
|
|
502
|
+
const ser = typeContext?.serializer;
|
|
503
|
+
if (ser) {
|
|
504
|
+
return ser.onDeserialize(data, context);
|
|
505
|
+
}
|
|
506
|
+
// console.log(type.prototype.get("$serializedTypes"));
|
|
507
|
+
// We check textures AFTER running deserializers because some textures might need to be converted to a RenderTexture
|
|
508
|
+
if (currentValue instanceof Texture)
|
|
509
|
+
return currentValue;
|
|
510
|
+
let instance = undefined;
|
|
511
|
+
if (data && (data.isMaterial || data.isTexture || data.isObject3D || data instanceof AnimationClip)) {
|
|
512
|
+
// if the data is already a threejs object we dont want to create a new instance
|
|
513
|
+
// e.g. if we have a serialized class with a serializable(Material)
|
|
514
|
+
instance = data;
|
|
515
|
+
}
|
|
516
|
+
else {
|
|
517
|
+
// happens when exporting e.g. Animation component with only clip assigned (clips array is marked as serialized but it might be undefined if no clips are assigned in e.g. blender)
|
|
518
|
+
if (data === undefined)
|
|
519
|
+
return undefined;
|
|
520
|
+
if (data === null) {
|
|
521
|
+
// Dont implictly create instances for three types that are not assigned
|
|
522
|
+
// see: https://github.com/needle-tools/needle-tiny/issues/637
|
|
523
|
+
if (type === Material || type === Texture || type === Mesh || type === AnimationClip) {
|
|
524
|
+
return null;
|
|
525
|
+
}
|
|
526
|
+
}
|
|
527
|
+
try {
|
|
528
|
+
// the fallback - this assumes that the type has a constructor that accepts the serialized arguments
|
|
529
|
+
// made originally with Vector3 in mind but SHOULD actually not be used/called anymore
|
|
530
|
+
instance = new type(...setBuffer(data));
|
|
531
|
+
}
|
|
532
|
+
catch (err) {
|
|
533
|
+
console.error("Error creating " + context.path, context.target, err);
|
|
534
|
+
return;
|
|
535
|
+
}
|
|
536
|
+
}
|
|
537
|
+
// recurse if the deserialized member also implements Iserializable
|
|
538
|
+
const serializableInstance = instance;
|
|
539
|
+
if (serializableInstance.$serializedTypes) {
|
|
540
|
+
deserializeObject(serializableInstance, data, context);
|
|
541
|
+
}
|
|
542
|
+
return instance;
|
|
543
|
+
}
|
|
544
|
+
function setBuffer(value) {
|
|
545
|
+
buffer.length = 0;
|
|
546
|
+
if (typeof value === "object" && value !== null && value !== undefined) {
|
|
547
|
+
for (const key of Object.keys(value)) {
|
|
548
|
+
buffer.push(value[key]);
|
|
549
|
+
}
|
|
550
|
+
}
|
|
551
|
+
return buffer;
|
|
552
|
+
}
|
|
553
|
+
/** set to true while assigning properties during instantiation.
|
|
554
|
+
* Used for validate decorator to not invoke callbacks on components that are currently in the process of being built */
|
|
555
|
+
export const $isAssigningProperties = Symbol("assigned component properties");
|
|
556
|
+
/** Object.assign behaviour but check if property is writeable (e.g. getter only properties are skipped) */
|
|
557
|
+
export function assign(target, source, info, opts) {
|
|
558
|
+
if (source === undefined || source === null)
|
|
559
|
+
return;
|
|
560
|
+
if (target === undefined || target === null)
|
|
561
|
+
return;
|
|
562
|
+
const onlyDeclared = false;
|
|
563
|
+
// if (onlyDeclared === true && target.constructor) {
|
|
564
|
+
// if (target.constructor[ALL_PROPERTIES_MARKER] === true)
|
|
565
|
+
// onlyDeclared = false;
|
|
566
|
+
// }
|
|
567
|
+
// if (onlyDeclared !== true && target.constructor) {
|
|
568
|
+
// if (target.constructor[STRICT_MARKER] === true)
|
|
569
|
+
// onlyDeclared = true;
|
|
570
|
+
// }
|
|
571
|
+
// if (onlyDeclared === undefined)
|
|
572
|
+
// onlyDeclared = true;
|
|
573
|
+
// if (developmentMode)
|
|
574
|
+
// onlyDeclared = false;
|
|
575
|
+
target[$isAssigningProperties] = true;
|
|
576
|
+
const typeName = target.constructor?.name ?? "unknown";
|
|
577
|
+
// register the keys that the actual type has defined
|
|
578
|
+
// this will be used later when checking if deserialization has assigned all properties
|
|
579
|
+
// or if anything could not be deserialized to warn the user
|
|
580
|
+
info?.registerDefinedKeys(typeName, target);
|
|
581
|
+
for (const key of Object.keys(source)) {
|
|
582
|
+
const desc = getPropertyDescriptor(target, key);
|
|
583
|
+
if (onlyDeclared && desc === undefined)
|
|
584
|
+
continue;
|
|
585
|
+
if (typeof desc?.value == "function") {
|
|
586
|
+
// arrow functions are defined as properties on the object
|
|
587
|
+
continue;
|
|
588
|
+
}
|
|
589
|
+
if (!desc || desc.writable === true) {
|
|
590
|
+
const value = opts?.onAssign ? opts.onAssign(source, key, source[key]) : source[key];
|
|
591
|
+
target[key] = value;
|
|
592
|
+
}
|
|
593
|
+
else if (desc?.set !== undefined) {
|
|
594
|
+
const value = opts?.onAssign ? opts.onAssign(source, key, source[key]) : source[key];
|
|
595
|
+
target[key] = value;
|
|
596
|
+
}
|
|
597
|
+
}
|
|
598
|
+
delete target[$isAssigningProperties];
|
|
599
|
+
}
|
|
600
|
+
// we need to recurse because the property might be defined in a base class
|
|
601
|
+
function getPropertyDescriptor(obj, prop) {
|
|
602
|
+
let desc;
|
|
603
|
+
do {
|
|
604
|
+
desc = Object.getOwnPropertyDescriptor(obj, prop);
|
|
605
|
+
} while (!desc && (obj = Object.getPrototypeOf(obj)));
|
|
606
|
+
return desc;
|
|
607
|
+
}
|
|
608
608
|
//# sourceMappingURL=engine_serialization_core.js.map
|