@dcl/inspector 7.13.1 → 7.13.2

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.
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../node_modules/@dcl/mini-rpc/src/transport.ts", "../../../node_modules/@dcl/mini-rpc/src/transports/in-memory.ts", "../../../node_modules/@dcl/mini-rpc/src/transports/message.ts", "../../../node_modules/@dcl/mini-rpc/src/transports/index.ts", "../../../node_modules/@dcl/mini-rpc/src/rpc.ts", "../../../node_modules/@dcl/mini-rpc/src/index.ts", "../src/tooling-entrypoint.ts", "../src/lib/data-layer/proto/gen/data-layer.gen.ts", "../src/lib/logic/preferences/io.ts", "../src/lib/logic/preferences/types.ts", "../../../node_modules/@dcl/ecs/dist/components/generated/pb/decentraland/sdk/components/animator.gen.js", "../../../node_modules/@dcl/ecs/dist/components/generated/Animator.gen.js", "../../../node_modules/@dcl/ecs/dist/components/generated/pb/decentraland/sdk/components/audio_event.gen.js", "../../../node_modules/@dcl/ecs/dist/components/generated/AudioEvent.gen.js", "../../../node_modules/@dcl/ecs/dist/components/generated/pb/decentraland/sdk/components/audio_source.gen.js", "../../../node_modules/@dcl/ecs/dist/components/generated/AudioSource.gen.js", "../../../node_modules/@dcl/ecs/dist/components/generated/pb/decentraland/sdk/components/audio_stream.gen.js", "../../../node_modules/@dcl/ecs/dist/components/generated/AudioStream.gen.js", "../../../node_modules/@dcl/ecs/dist/components/generated/pb/decentraland/sdk/components/avatar_attach.gen.js", "../../../node_modules/@dcl/ecs/dist/components/generated/AvatarAttach.gen.js", "../../../node_modules/@dcl/ecs/dist/components/generated/pb/decentraland/sdk/components/avatar_base.gen.js", "../../../node_modules/@dcl/ecs/dist/components/generated/pb/decentraland/common/colors.gen.js", "../../../node_modules/@dcl/ecs/dist/components/generated/AvatarBase.gen.js", "../../../node_modules/@dcl/ecs/dist/components/generated/pb/decentraland/sdk/components/avatar_emote_command.gen.js", "../../../node_modules/@dcl/ecs/dist/components/generated/AvatarEmoteCommand.gen.js", "../../../node_modules/@dcl/ecs/dist/components/generated/pb/decentraland/sdk/components/avatar_equipped_data.gen.js", "../../../node_modules/@dcl/ecs/dist/components/generated/AvatarEquippedData.gen.js", "../../../node_modules/@dcl/ecs/dist/components/generated/pb/decentraland/sdk/components/avatar_modifier_area.gen.js", "../../../node_modules/@dcl/ecs/dist/components/generated/pb/decentraland/common/vectors.gen.js", "../../../node_modules/@dcl/ecs/dist/components/generated/AvatarModifierArea.gen.js", "../../../node_modules/@dcl/ecs/dist/components/generated/pb/decentraland/sdk/components/avatar_shape.gen.js", "../../../node_modules/@dcl/ecs/dist/components/generated/AvatarShape.gen.js", "../../../node_modules/@dcl/ecs/dist/components/generated/pb/decentraland/sdk/components/billboard.gen.js", "../../../node_modules/@dcl/ecs/dist/components/generated/Billboard.gen.js", "../../../node_modules/@dcl/ecs/dist/components/generated/pb/decentraland/sdk/components/camera_mode.gen.js", "../../../node_modules/@dcl/ecs/dist/components/generated/CameraMode.gen.js", "../../../node_modules/@dcl/ecs/dist/components/generated/pb/decentraland/sdk/components/camera_mode_area.gen.js", "../../../node_modules/@dcl/ecs/dist/components/generated/CameraModeArea.gen.js", "../../../node_modules/@dcl/ecs/dist/components/generated/pb/decentraland/sdk/components/engine_info.gen.js", "../../../node_modules/@dcl/ecs/dist/components/generated/EngineInfo.gen.js", "../../../node_modules/@dcl/ecs/dist/components/generated/pb/decentraland/sdk/components/gltf_container.gen.js", "../../../node_modules/@dcl/ecs/dist/components/generated/GltfContainer.gen.js", "../../../node_modules/@dcl/ecs/dist/components/generated/pb/decentraland/sdk/components/gltf_container_loading_state.gen.js", "../../../node_modules/@dcl/ecs/dist/components/generated/GltfContainerLoadingState.gen.js", "../../../node_modules/@dcl/ecs/dist/components/generated/pb/decentraland/sdk/components/gltf_node_modifiers.gen.js", "../../../node_modules/@dcl/ecs/dist/components/generated/pb/decentraland/sdk/components/material.gen.js", "../../../node_modules/@dcl/ecs/dist/components/generated/pb/decentraland/common/texture.gen.js", "../../../node_modules/@dcl/ecs/dist/components/generated/GltfNodeModifiers.gen.js", "../../../node_modules/@dcl/ecs/dist/components/generated/pb/decentraland/sdk/components/input_modifier.gen.js", "../../../node_modules/@dcl/ecs/dist/components/generated/InputModifier.gen.js", "../../../node_modules/@dcl/ecs/dist/components/generated/pb/decentraland/sdk/components/light_source.gen.js", "../../../node_modules/@dcl/ecs/dist/components/generated/LightSource.gen.js", "../../../node_modules/@dcl/ecs/dist/components/generated/pb/decentraland/sdk/components/main_camera.gen.js", "../../../node_modules/@dcl/ecs/dist/components/generated/MainCamera.gen.js", "../../../node_modules/@dcl/ecs/dist/components/generated/Material.gen.js", "../../../node_modules/@dcl/ecs/dist/components/generated/pb/decentraland/sdk/components/mesh_collider.gen.js", "../../../node_modules/@dcl/ecs/dist/components/generated/MeshCollider.gen.js", "../../../node_modules/@dcl/ecs/dist/components/generated/pb/decentraland/sdk/components/mesh_renderer.gen.js", "../../../node_modules/@dcl/ecs/dist/components/generated/MeshRenderer.gen.js", "../../../node_modules/@dcl/ecs/dist/components/generated/pb/decentraland/sdk/components/nft_shape.gen.js", "../../../node_modules/@dcl/ecs/dist/components/generated/NftShape.gen.js", "../../../node_modules/@dcl/ecs/dist/components/generated/pb/decentraland/sdk/components/player_identity_data.gen.js", "../../../node_modules/@dcl/ecs/dist/components/generated/PlayerIdentityData.gen.js", "../../../node_modules/@dcl/ecs/dist/components/generated/pb/decentraland/sdk/components/pointer_events.gen.js", "../../../node_modules/@dcl/ecs/dist/components/generated/PointerEvents.gen.js", "../../../node_modules/@dcl/ecs/dist/components/generated/pb/decentraland/sdk/components/pointer_events_result.gen.js", "../../../node_modules/@dcl/ecs/dist/components/generated/pb/decentraland/sdk/components/common/raycast_hit.gen.js", "../../../node_modules/@dcl/ecs/dist/components/generated/PointerEventsResult.gen.js", "../../../node_modules/@dcl/ecs/dist/components/generated/pb/decentraland/sdk/components/pointer_lock.gen.js", "../../../node_modules/@dcl/ecs/dist/components/generated/PointerLock.gen.js", "../../../node_modules/@dcl/ecs/dist/components/generated/pb/decentraland/sdk/components/primary_pointer_info.gen.js", "../../../node_modules/@dcl/ecs/dist/components/generated/PrimaryPointerInfo.gen.js", "../../../node_modules/@dcl/ecs/dist/components/generated/pb/decentraland/sdk/components/raycast.gen.js", "../../../node_modules/@dcl/ecs/dist/components/generated/Raycast.gen.js", "../../../node_modules/@dcl/ecs/dist/components/generated/pb/decentraland/sdk/components/raycast_result.gen.js", "../../../node_modules/@dcl/ecs/dist/components/generated/RaycastResult.gen.js", "../../../node_modules/@dcl/ecs/dist/components/generated/pb/decentraland/sdk/components/realm_info.gen.js", "../../../node_modules/@dcl/ecs/dist/components/generated/RealmInfo.gen.js", "../../../node_modules/@dcl/ecs/dist/components/generated/pb/decentraland/sdk/components/skybox_time.gen.js", "../../../node_modules/@dcl/ecs/dist/components/generated/SkyboxTime.gen.js", "../../../node_modules/@dcl/ecs/dist/components/generated/pb/decentraland/sdk/components/text_shape.gen.js", "../../../node_modules/@dcl/ecs/dist/components/generated/TextShape.gen.js", "../../../node_modules/@dcl/ecs/dist/components/generated/pb/decentraland/sdk/components/trigger_area.gen.js", "../../../node_modules/@dcl/ecs/dist/components/generated/TriggerArea.gen.js", "../../../node_modules/@dcl/ecs/dist/components/generated/pb/decentraland/sdk/components/trigger_area_result.gen.js", "../../../node_modules/@dcl/ecs/dist/components/generated/TriggerAreaResult.gen.js", "../../../node_modules/@dcl/ecs/dist/components/generated/pb/decentraland/sdk/components/tween.gen.js", "../../../node_modules/@dcl/ecs/dist/components/generated/Tween.gen.js", "../../../node_modules/@dcl/ecs/dist/components/generated/pb/decentraland/sdk/components/tween_sequence.gen.js", "../../../node_modules/@dcl/ecs/dist/components/generated/TweenSequence.gen.js", "../../../node_modules/@dcl/ecs/dist/components/generated/pb/decentraland/sdk/components/tween_state.gen.js", "../../../node_modules/@dcl/ecs/dist/components/generated/TweenState.gen.js", "../../../node_modules/@dcl/ecs/dist/components/generated/pb/decentraland/sdk/components/ui_background.gen.js", "../../../node_modules/@dcl/ecs/dist/components/generated/pb/decentraland/common/border_rect.gen.js", "../../../node_modules/@dcl/ecs/dist/components/generated/UiBackground.gen.js", "../../../node_modules/@dcl/ecs/dist/components/generated/pb/decentraland/sdk/components/ui_canvas_information.gen.js", "../../../node_modules/@dcl/ecs/dist/components/generated/UiCanvasInformation.gen.js", "../../../node_modules/@dcl/ecs/dist/components/generated/pb/decentraland/sdk/components/ui_dropdown.gen.js", "../../../node_modules/@dcl/ecs/dist/components/generated/UiDropdown.gen.js", "../../../node_modules/@dcl/ecs/dist/components/generated/pb/decentraland/sdk/components/ui_dropdown_result.gen.js", "../../../node_modules/@dcl/ecs/dist/components/generated/UiDropdownResult.gen.js", "../../../node_modules/@dcl/ecs/dist/components/generated/pb/decentraland/sdk/components/ui_input.gen.js", "../../../node_modules/@dcl/ecs/dist/components/generated/UiInput.gen.js", "../../../node_modules/@dcl/ecs/dist/components/generated/pb/decentraland/sdk/components/ui_input_result.gen.js", "../../../node_modules/@dcl/ecs/dist/components/generated/UiInputResult.gen.js", "../../../node_modules/@dcl/ecs/dist/components/generated/pb/decentraland/sdk/components/ui_text.gen.js", "../../../node_modules/@dcl/ecs/dist/components/generated/UiText.gen.js", "../../../node_modules/@dcl/ecs/dist/components/generated/pb/decentraland/sdk/components/ui_transform.gen.js", "../../../node_modules/@dcl/ecs/dist/components/generated/UiTransform.gen.js", "../../../node_modules/@dcl/ecs/dist/components/generated/pb/decentraland/sdk/components/video_event.gen.js", "../../../node_modules/@dcl/ecs/dist/components/generated/VideoEvent.gen.js", "../../../node_modules/@dcl/ecs/dist/components/generated/pb/decentraland/sdk/components/video_player.gen.js", "../../../node_modules/@dcl/ecs/dist/components/generated/VideoPlayer.gen.js", "../../../node_modules/@dcl/ecs/dist/components/generated/pb/decentraland/sdk/components/virtual_camera.gen.js", "../../../node_modules/@dcl/ecs/dist/components/generated/pb/decentraland/sdk/components/common/camera_transition.gen.js", "../../../node_modules/@dcl/ecs/dist/components/generated/VirtualCamera.gen.js", "../../../node_modules/@dcl/ecs/dist/components/generated/pb/decentraland/sdk/components/visibility_component.gen.js", "../../../node_modules/@dcl/ecs/dist/components/generated/VisibilityComponent.gen.js", "../../../node_modules/@dcl/ecs/dist/components/generated/index.gen.js", "../../../node_modules/@dcl/ecs/dist/components/extended/Animator.js", "../../../node_modules/@dcl/ecs/dist/components/extended/AudioSource.js", "../../../node_modules/@dcl/ecs/dist/components/extended/Material.js", "../../../node_modules/@dcl/ecs/dist/components/extended/MeshCollider.js", "../../../node_modules/@dcl/ecs/dist/components/extended/MeshRenderer.js", "../../../node_modules/@dcl/ecs/dist/components/extended/Tween.js", "../../../node_modules/@dcl/ecs/dist/schemas/Array.js", "../../../node_modules/@dcl/ecs/dist/schemas/basic/Boolean.js", "../../../node_modules/@dcl/ecs/dist/schemas/basic/Integer.js", "../../../node_modules/@dcl/ecs/dist/schemas/basic/String.js", "../../../node_modules/@dcl/ecs/dist/schemas/basic/Enum.js", "../../../node_modules/@dcl/ecs/dist/schemas/basic/Float.js", "../../../node_modules/@dcl/ecs/dist/schemas/custom/Color3.js", "../../../node_modules/@dcl/ecs/dist/schemas/custom/Color4.js", "../../../node_modules/@dcl/ecs/dist/schemas/custom/Entity.js", "../../../node_modules/@dcl/ecs/dist/schemas/custom/Quaternion.js", "../../../node_modules/@dcl/ecs/dist/schemas/custom/Vector3.js", "../../../node_modules/@dcl/ecs/dist/schemas/Map.js", "../../../node_modules/@dcl/ecs/dist/schemas/Optional.js", "../../../node_modules/@dcl/ecs/dist/schemas/OneOf.js", "../../../node_modules/@dcl/ecs/dist/schemas/buildSchema/utils.js", "../../../node_modules/@dcl/ecs/dist/schemas/buildSchema/index.js", "../../../node_modules/@dcl/ecs/dist/schemas/index.js", "../../../node_modules/@dcl/ecs/dist/components/manual/Name.js", "../../../node_modules/@dcl/ecs/dist/components/manual/SyncComponents.js", "../../../node_modules/@dcl/ecs/dist/components/manual/NetworkEntity.js", "../../../node_modules/@dcl/ecs/dist/components/manual/NetworkParent.js", "../../../node_modules/@dcl/ecs/dist/components/manual/Transform.js", "../../../node_modules/@dcl/ecs/dist/components/extended/AudioStream.js", "../../../node_modules/@dcl/ecs/dist/components/generated/pb/decentraland/sdk/components/common/media_state.gen.js", "../../../node_modules/@dcl/ecs/dist/components/extended/LightSource.js", "../../../node_modules/@dcl/ecs/dist/components/manual/Tags.js", "../../../node_modules/@dcl/ecs/dist/components/index.js", "../../../node_modules/@dcl/ecs/dist/components/generated/component-names.gen.js", "../../../node_modules/@dcl/ecs/dist/components/component-number.js", "../../../node_modules/@dcl/ecs/dist/runtime/crc.js", "../../../node_modules/@dcl/ecs/dist/runtime/invariant.js", "../../../node_modules/@dcl/ecs/dist/systems/crdt/gset.js", "../../../node_modules/@dcl/ecs/dist/engine/entity.js", "../../../node_modules/@dcl/ecs/dist/serialization/ByteBuffer/index.js", "../../../node_modules/@dcl/ecs/dist/serialization/crdt/types.js", "../../../node_modules/@dcl/ecs/dist/serialization/crdt/crdtMessageProtocol.js", "../../../node_modules/@dcl/ecs/dist/serialization/crdt/deleteComponent.js", "../../../node_modules/@dcl/ecs/dist/serialization/crdt/appendValue.js", "../../../node_modules/@dcl/ecs/dist/serialization/crdt/deleteEntity.js", "../../../node_modules/@dcl/ecs/dist/serialization/crdt/putComponent.js", "../../../node_modules/@dcl/ecs/dist/serialization/crdt/network/putComponentNetwork.js", "../../../node_modules/@dcl/ecs/dist/serialization/crdt/network/deleteComponentNetwork.js", "../../../node_modules/@dcl/ecs/dist/serialization/crdt/network/deleteEntityNetwork.js", "../../../node_modules/@dcl/ecs/dist/serialization/crdt/network/utils.js", "../../../node_modules/@dcl/ecs/dist/systems/crdt/index.js", "../../../node_modules/@dcl/ecs/dist/systems/crdt/utils.js", "../../../node_modules/@dcl/ecs/dist/engine/readonly.js", "../../../node_modules/@dcl/ecs/dist/engine/lww-element-set-component-definition.js", "../../../node_modules/@dcl/ecs/dist/engine/systems.js", "../../../node_modules/@dcl/ecs/dist/engine/grow-only-value-set-component-definition.js", "../../../node_modules/@dcl/ecs/dist/runtime/helpers/tree.js", "../../../node_modules/@dcl/ecs/dist/engine/input.js", "../../../node_modules/@dcl/ecs/dist/engine/component.js", "../../../node_modules/@dcl/ecs/dist/engine/index.js", "../../../node_modules/@dcl/ecs/dist/systems/tween.js", "../../../node_modules/@dcl/ecs/dist/systems/pointer-event-collider-checker.js", "../../../node_modules/@dcl/ecs/dist/runtime/initialization/index.js", "../../../node_modules/@dcl/ecs/dist/components/generated/pb/decentraland/sdk/components/common/camera_type.gen.js", "../../../node_modules/@dcl/ecs/dist/components/generated/pb/decentraland/sdk/components/common/input_action.gen.js", "../../../node_modules/@dcl/ecs/dist/components/generated/pb/decentraland/sdk/components/common/loading_state.gen.js", "../../../node_modules/@dcl/ecs/dist/components/generated/pb/decentraland/sdk/components/common/texts.gen.js", "../../../node_modules/@dcl/ecs/dist/composite/components.js", "../../../node_modules/@dcl/ecs/dist/composite/path.js", "../../../node_modules/@dcl/ecs/dist/composite/instance.js", "../../../node_modules/@dcl/ecs/dist/composite/proto/gen/composite.gen.js", "../../../node_modules/@dcl/ecs/dist/composite/proto/gen/google/protobuf/struct.gen.js", "../../../node_modules/@dcl/ecs/dist/composite/index.js", "../../../node_modules/@dcl/ecs/dist/index.js", "../../../node_modules/@dcl/asset-packs/src/action-types.ts", "../../../node_modules/@dcl/asset-packs/src/enums.ts", "../../../node_modules/@dcl/asset-packs/src/components.ts", "../../../node_modules/@dcl/asset-packs/src/events.ts", "../../../node_modules/@dcl/asset-packs/src/id.ts", "../../../node_modules/@dcl/asset-packs/src/definitions.ts", "../src/lib/sdk/components/SceneMetadata.ts", "../src/lib/sdk/components/types.ts", "../src/lib/data-layer/host/fs-utils.ts", "../src/lib/data-layer/host/upsert-asset.ts", "../src/lib/data-layer/host/utils/install-bin.ts", "../../../node_modules/@dcl/asset-packs/package.json", "../src/lib/logic/config.ts", "../src/lib/sdk/components/Config.ts", "../src/lib/sdk/components/index.ts", "../src/lib/data-layer/host/error-handler.ts", "../src/lib/data-layer/host/state-manager.ts", "../src/lib/data-layer/host/scene-provider.ts", "../src/lib/data-layer/host/utils/component.ts", "../src/lib/data-layer/host/utils/engine-to-composite.ts", "../src/lib/data-layer/host/utils/engine.ts", "../src/lib/logic/storage/in-memory.ts", "../src/lib/data-layer/client/feeded-local-fs.ts", "../src/lib/utils/array.ts", "../src/lib/data-layer/host/utils/migrations/build-nodes-hierarchy.ts", "../src/lib/data-layer/host/utils/migrations/legacy-entity-node.ts", "../src/lib/data-layer/host/utils/fs-composite-provider.ts", "../src/lib/data-layer/host/utils/migrations/add-nodes-to-player-and-camera.ts", "../src/lib/sdk/enum-entity.ts", "../src/lib/data-layer/host/utils/migrations/fix-network-entity-values.ts", "../src/lib/data-layer/host/utils/migrations/select-scene-entity.ts", "../src/lib/data-layer/host/utils/migrations/migrate-scene-metadata.ts", "../src/lib/data-layer/host/utils/migrations/create-tags-components.ts", "../src/lib/data-layer/host/composite-provider.ts", "../src/lib/data-layer/host/utils/undo-redo-array.ts", "../src/lib/data-layer/host/undo-redo-provider.ts", "../src/lib/data-layer/host/stream.ts", "../src/lib/logic/consume-stream.ts", "../src/lib/data-layer/host/rpc-methods.ts", "../src/lib/data-layer/host/index.ts", "../src/lib/rpc/camera/client.ts", "../src/lib/rpc/camera/types.ts", "../src/lib/rpc/ui/client.ts", "../src/lib/rpc/ui/types.ts", "../src/lib/logic/storage/iframe.ts", "../src/lib/rpc/scene-metrics/client.ts", "../src/lib/rpc/scene-metrics/types.ts"],
4
- "sourcesContent": [null, null, null, null, null, null, "export * from './lib/data-layer/remote-data-layer';\nexport * from './lib/rpc/camera/client';\nexport * from './lib/rpc/ui/client';\nexport * from './lib/logic/storage';\nexport * from './lib/rpc/scene-metrics/client';\n", "/* eslint-disable */\nimport _m0 from \"protobufjs/minimal\";\n\nexport const protobufPackage = \"\";\n\nexport interface Empty {\n}\n\n/** TODO: Maybe when we implement the list of undo/redo available we dont need this. */\nexport interface UndoRedoResponse {\n type: string;\n}\n\nexport interface CrdtStreamMessage {\n data: Uint8Array;\n}\n\nexport interface AssetData {\n data: Uint8Array;\n}\n\nexport interface GetFilesRequest {\n path: string;\n ignore: string[];\n}\n\nexport interface GetFilesResponse {\n files: GetFilesResponse_File[];\n}\n\nexport interface GetFilesResponse_File {\n path: string;\n content: Uint8Array;\n}\n\nexport interface SaveFileRequest {\n path: string;\n content: Uint8Array;\n}\n\nexport interface Asset {\n path: string;\n}\n\nexport interface AssetCatalogResponse {\n basePath: string;\n assets: Asset[];\n}\n\nexport interface ImportAssetRequest {\n basePath: string;\n assetPackageName: string;\n content: Map<string, Uint8Array>;\n}\n\nexport interface ImportAssetRequest_ContentEntry {\n key: string;\n value: Uint8Array;\n}\n\nexport interface InspectorPreferencesMessage {\n freeCameraInvertRotation: boolean;\n autosaveEnabled: boolean;\n}\n\nexport interface CopyFileRequest {\n fromPath: string;\n toPath: string;\n}\n\nexport interface GetFileRequest {\n path: string;\n}\n\nexport interface GetFileResponse {\n content: Uint8Array;\n}\n\nexport interface CreateCustomAssetRequest {\n name: string;\n composite: Uint8Array;\n resources: string[];\n thumbnail?: Uint8Array | undefined;\n}\n\nexport interface CreateCustomAssetResponse {\n asset: AssetData | undefined;\n}\n\nexport interface GetCustomAssetsResponse {\n assets: AssetData[];\n}\n\nexport interface DeleteCustomAssetRequest {\n assetId: string;\n}\n\nexport interface RenameCustomAssetRequest {\n assetId: string;\n newName: string;\n}\n\nexport interface UndoRedoStateResponse {\n canUndo: boolean;\n canRedo: boolean;\n}\n\nfunction createBaseEmpty(): Empty {\n return {};\n}\n\nexport namespace Empty {\n export function encode(_: Empty, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n return writer;\n }\n\n export function decode(input: _m0.Reader | Uint8Array, length?: number): Empty {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseEmpty();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n }\n\n export function fromJSON(_: any): Empty {\n return {};\n }\n\n export function toJSON(_: Empty): unknown {\n const obj: any = {};\n return obj;\n }\n\n export function create<I extends Exact<DeepPartial<Empty>, I>>(base?: I): Empty {\n return Empty.fromPartial(base ?? {});\n }\n\n export function fromPartial<I extends Exact<DeepPartial<Empty>, I>>(_: I): Empty {\n const message = createBaseEmpty();\n return message;\n }\n}\n\nfunction createBaseUndoRedoResponse(): UndoRedoResponse {\n return { type: \"\" };\n}\n\nexport namespace UndoRedoResponse {\n export function encode(message: UndoRedoResponse, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n if (message.type !== \"\") {\n writer.uint32(10).string(message.type);\n }\n return writer;\n }\n\n export function decode(input: _m0.Reader | Uint8Array, length?: number): UndoRedoResponse {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseUndoRedoResponse();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.type = reader.string();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n }\n\n export function fromJSON(object: any): UndoRedoResponse {\n return { type: isSet(object.type) ? String(object.type) : \"\" };\n }\n\n export function toJSON(message: UndoRedoResponse): unknown {\n const obj: any = {};\n message.type !== undefined && (obj.type = message.type);\n return obj;\n }\n\n export function create<I extends Exact<DeepPartial<UndoRedoResponse>, I>>(base?: I): UndoRedoResponse {\n return UndoRedoResponse.fromPartial(base ?? {});\n }\n\n export function fromPartial<I extends Exact<DeepPartial<UndoRedoResponse>, I>>(object: I): UndoRedoResponse {\n const message = createBaseUndoRedoResponse();\n message.type = object.type ?? \"\";\n return message;\n }\n}\n\nfunction createBaseCrdtStreamMessage(): CrdtStreamMessage {\n return { data: new Uint8Array(0) };\n}\n\nexport namespace CrdtStreamMessage {\n export function encode(message: CrdtStreamMessage, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n if (message.data.length !== 0) {\n writer.uint32(10).bytes(message.data);\n }\n return writer;\n }\n\n export function decode(input: _m0.Reader | Uint8Array, length?: number): CrdtStreamMessage {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseCrdtStreamMessage();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.data = reader.bytes();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n }\n\n export function fromJSON(object: any): CrdtStreamMessage {\n return { data: isSet(object.data) ? bytesFromBase64(object.data) : new Uint8Array(0) };\n }\n\n export function toJSON(message: CrdtStreamMessage): unknown {\n const obj: any = {};\n message.data !== undefined &&\n (obj.data = base64FromBytes(message.data !== undefined ? message.data : new Uint8Array(0)));\n return obj;\n }\n\n export function create<I extends Exact<DeepPartial<CrdtStreamMessage>, I>>(base?: I): CrdtStreamMessage {\n return CrdtStreamMessage.fromPartial(base ?? {});\n }\n\n export function fromPartial<I extends Exact<DeepPartial<CrdtStreamMessage>, I>>(object: I): CrdtStreamMessage {\n const message = createBaseCrdtStreamMessage();\n message.data = object.data ?? new Uint8Array(0);\n return message;\n }\n}\n\nfunction createBaseAssetData(): AssetData {\n return { data: new Uint8Array(0) };\n}\n\nexport namespace AssetData {\n export function encode(message: AssetData, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n if (message.data.length !== 0) {\n writer.uint32(10).bytes(message.data);\n }\n return writer;\n }\n\n export function decode(input: _m0.Reader | Uint8Array, length?: number): AssetData {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseAssetData();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.data = reader.bytes();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n }\n\n export function fromJSON(object: any): AssetData {\n return { data: isSet(object.data) ? bytesFromBase64(object.data) : new Uint8Array(0) };\n }\n\n export function toJSON(message: AssetData): unknown {\n const obj: any = {};\n message.data !== undefined &&\n (obj.data = base64FromBytes(message.data !== undefined ? message.data : new Uint8Array(0)));\n return obj;\n }\n\n export function create<I extends Exact<DeepPartial<AssetData>, I>>(base?: I): AssetData {\n return AssetData.fromPartial(base ?? {});\n }\n\n export function fromPartial<I extends Exact<DeepPartial<AssetData>, I>>(object: I): AssetData {\n const message = createBaseAssetData();\n message.data = object.data ?? new Uint8Array(0);\n return message;\n }\n}\n\nfunction createBaseGetFilesRequest(): GetFilesRequest {\n return { path: \"\", ignore: [] };\n}\n\nexport namespace GetFilesRequest {\n export function encode(message: GetFilesRequest, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n if (message.path !== \"\") {\n writer.uint32(10).string(message.path);\n }\n for (const v of message.ignore) {\n writer.uint32(18).string(v!);\n }\n return writer;\n }\n\n export function decode(input: _m0.Reader | Uint8Array, length?: number): GetFilesRequest {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseGetFilesRequest();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.path = reader.string();\n continue;\n case 2:\n if (tag !== 18) {\n break;\n }\n\n message.ignore.push(reader.string());\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n }\n\n export function fromJSON(object: any): GetFilesRequest {\n return {\n path: isSet(object.path) ? String(object.path) : \"\",\n ignore: Array.isArray(object?.ignore) ? object.ignore.map((e: any) => String(e)) : [],\n };\n }\n\n export function toJSON(message: GetFilesRequest): unknown {\n const obj: any = {};\n message.path !== undefined && (obj.path = message.path);\n if (message.ignore) {\n obj.ignore = message.ignore.map((e) => e);\n } else {\n obj.ignore = [];\n }\n return obj;\n }\n\n export function create<I extends Exact<DeepPartial<GetFilesRequest>, I>>(base?: I): GetFilesRequest {\n return GetFilesRequest.fromPartial(base ?? {});\n }\n\n export function fromPartial<I extends Exact<DeepPartial<GetFilesRequest>, I>>(object: I): GetFilesRequest {\n const message = createBaseGetFilesRequest();\n message.path = object.path ?? \"\";\n message.ignore = object.ignore?.map((e) => e) || [];\n return message;\n }\n}\n\nfunction createBaseGetFilesResponse(): GetFilesResponse {\n return { files: [] };\n}\n\nexport namespace GetFilesResponse {\n export function encode(message: GetFilesResponse, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n for (const v of message.files) {\n GetFilesResponse_File.encode(v!, writer.uint32(10).fork()).ldelim();\n }\n return writer;\n }\n\n export function decode(input: _m0.Reader | Uint8Array, length?: number): GetFilesResponse {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseGetFilesResponse();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.files.push(GetFilesResponse_File.decode(reader, reader.uint32()));\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n }\n\n export function fromJSON(object: any): GetFilesResponse {\n return {\n files: Array.isArray(object?.files) ? object.files.map((e: any) => GetFilesResponse_File.fromJSON(e)) : [],\n };\n }\n\n export function toJSON(message: GetFilesResponse): unknown {\n const obj: any = {};\n if (message.files) {\n obj.files = message.files.map((e) => e ? GetFilesResponse_File.toJSON(e) : undefined);\n } else {\n obj.files = [];\n }\n return obj;\n }\n\n export function create<I extends Exact<DeepPartial<GetFilesResponse>, I>>(base?: I): GetFilesResponse {\n return GetFilesResponse.fromPartial(base ?? {});\n }\n\n export function fromPartial<I extends Exact<DeepPartial<GetFilesResponse>, I>>(object: I): GetFilesResponse {\n const message = createBaseGetFilesResponse();\n message.files = object.files?.map((e) => GetFilesResponse_File.fromPartial(e)) || [];\n return message;\n }\n}\n\nfunction createBaseGetFilesResponse_File(): GetFilesResponse_File {\n return { path: \"\", content: new Uint8Array(0) };\n}\n\nexport namespace GetFilesResponse_File {\n export function encode(message: GetFilesResponse_File, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n if (message.path !== \"\") {\n writer.uint32(10).string(message.path);\n }\n if (message.content.length !== 0) {\n writer.uint32(18).bytes(message.content);\n }\n return writer;\n }\n\n export function decode(input: _m0.Reader | Uint8Array, length?: number): GetFilesResponse_File {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseGetFilesResponse_File();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.path = reader.string();\n continue;\n case 2:\n if (tag !== 18) {\n break;\n }\n\n message.content = reader.bytes();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n }\n\n export function fromJSON(object: any): GetFilesResponse_File {\n return {\n path: isSet(object.path) ? String(object.path) : \"\",\n content: isSet(object.content) ? bytesFromBase64(object.content) : new Uint8Array(0),\n };\n }\n\n export function toJSON(message: GetFilesResponse_File): unknown {\n const obj: any = {};\n message.path !== undefined && (obj.path = message.path);\n message.content !== undefined &&\n (obj.content = base64FromBytes(message.content !== undefined ? message.content : new Uint8Array(0)));\n return obj;\n }\n\n export function create<I extends Exact<DeepPartial<GetFilesResponse_File>, I>>(base?: I): GetFilesResponse_File {\n return GetFilesResponse_File.fromPartial(base ?? {});\n }\n\n export function fromPartial<I extends Exact<DeepPartial<GetFilesResponse_File>, I>>(\n object: I,\n ): GetFilesResponse_File {\n const message = createBaseGetFilesResponse_File();\n message.path = object.path ?? \"\";\n message.content = object.content ?? new Uint8Array(0);\n return message;\n }\n}\n\nfunction createBaseSaveFileRequest(): SaveFileRequest {\n return { path: \"\", content: new Uint8Array(0) };\n}\n\nexport namespace SaveFileRequest {\n export function encode(message: SaveFileRequest, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n if (message.path !== \"\") {\n writer.uint32(10).string(message.path);\n }\n if (message.content.length !== 0) {\n writer.uint32(18).bytes(message.content);\n }\n return writer;\n }\n\n export function decode(input: _m0.Reader | Uint8Array, length?: number): SaveFileRequest {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseSaveFileRequest();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.path = reader.string();\n continue;\n case 2:\n if (tag !== 18) {\n break;\n }\n\n message.content = reader.bytes();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n }\n\n export function fromJSON(object: any): SaveFileRequest {\n return {\n path: isSet(object.path) ? String(object.path) : \"\",\n content: isSet(object.content) ? bytesFromBase64(object.content) : new Uint8Array(0),\n };\n }\n\n export function toJSON(message: SaveFileRequest): unknown {\n const obj: any = {};\n message.path !== undefined && (obj.path = message.path);\n message.content !== undefined &&\n (obj.content = base64FromBytes(message.content !== undefined ? message.content : new Uint8Array(0)));\n return obj;\n }\n\n export function create<I extends Exact<DeepPartial<SaveFileRequest>, I>>(base?: I): SaveFileRequest {\n return SaveFileRequest.fromPartial(base ?? {});\n }\n\n export function fromPartial<I extends Exact<DeepPartial<SaveFileRequest>, I>>(object: I): SaveFileRequest {\n const message = createBaseSaveFileRequest();\n message.path = object.path ?? \"\";\n message.content = object.content ?? new Uint8Array(0);\n return message;\n }\n}\n\nfunction createBaseAsset(): Asset {\n return { path: \"\" };\n}\n\nexport namespace Asset {\n export function encode(message: Asset, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n if (message.path !== \"\") {\n writer.uint32(10).string(message.path);\n }\n return writer;\n }\n\n export function decode(input: _m0.Reader | Uint8Array, length?: number): Asset {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseAsset();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.path = reader.string();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n }\n\n export function fromJSON(object: any): Asset {\n return { path: isSet(object.path) ? String(object.path) : \"\" };\n }\n\n export function toJSON(message: Asset): unknown {\n const obj: any = {};\n message.path !== undefined && (obj.path = message.path);\n return obj;\n }\n\n export function create<I extends Exact<DeepPartial<Asset>, I>>(base?: I): Asset {\n return Asset.fromPartial(base ?? {});\n }\n\n export function fromPartial<I extends Exact<DeepPartial<Asset>, I>>(object: I): Asset {\n const message = createBaseAsset();\n message.path = object.path ?? \"\";\n return message;\n }\n}\n\nfunction createBaseAssetCatalogResponse(): AssetCatalogResponse {\n return { basePath: \"\", assets: [] };\n}\n\nexport namespace AssetCatalogResponse {\n export function encode(message: AssetCatalogResponse, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n if (message.basePath !== \"\") {\n writer.uint32(10).string(message.basePath);\n }\n for (const v of message.assets) {\n Asset.encode(v!, writer.uint32(18).fork()).ldelim();\n }\n return writer;\n }\n\n export function decode(input: _m0.Reader | Uint8Array, length?: number): AssetCatalogResponse {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseAssetCatalogResponse();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.basePath = reader.string();\n continue;\n case 2:\n if (tag !== 18) {\n break;\n }\n\n message.assets.push(Asset.decode(reader, reader.uint32()));\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n }\n\n export function fromJSON(object: any): AssetCatalogResponse {\n return {\n basePath: isSet(object.basePath) ? String(object.basePath) : \"\",\n assets: Array.isArray(object?.assets) ? object.assets.map((e: any) => Asset.fromJSON(e)) : [],\n };\n }\n\n export function toJSON(message: AssetCatalogResponse): unknown {\n const obj: any = {};\n message.basePath !== undefined && (obj.basePath = message.basePath);\n if (message.assets) {\n obj.assets = message.assets.map((e) => e ? Asset.toJSON(e) : undefined);\n } else {\n obj.assets = [];\n }\n return obj;\n }\n\n export function create<I extends Exact<DeepPartial<AssetCatalogResponse>, I>>(base?: I): AssetCatalogResponse {\n return AssetCatalogResponse.fromPartial(base ?? {});\n }\n\n export function fromPartial<I extends Exact<DeepPartial<AssetCatalogResponse>, I>>(object: I): AssetCatalogResponse {\n const message = createBaseAssetCatalogResponse();\n message.basePath = object.basePath ?? \"\";\n message.assets = object.assets?.map((e) => Asset.fromPartial(e)) || [];\n return message;\n }\n}\n\nfunction createBaseImportAssetRequest(): ImportAssetRequest {\n return { basePath: \"\", assetPackageName: \"\", content: new Map() };\n}\n\nexport namespace ImportAssetRequest {\n export function encode(message: ImportAssetRequest, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n if (message.basePath !== \"\") {\n writer.uint32(10).string(message.basePath);\n }\n if (message.assetPackageName !== \"\") {\n writer.uint32(18).string(message.assetPackageName);\n }\n message.content.forEach((value, key) => {\n ImportAssetRequest_ContentEntry.encode({ key: key as any, value }, writer.uint32(26).fork()).ldelim();\n });\n return writer;\n }\n\n export function decode(input: _m0.Reader | Uint8Array, length?: number): ImportAssetRequest {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseImportAssetRequest();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.basePath = reader.string();\n continue;\n case 2:\n if (tag !== 18) {\n break;\n }\n\n message.assetPackageName = reader.string();\n continue;\n case 3:\n if (tag !== 26) {\n break;\n }\n\n const entry3 = ImportAssetRequest_ContentEntry.decode(reader, reader.uint32());\n if (entry3.value !== undefined) {\n message.content.set(entry3.key, entry3.value);\n }\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n }\n\n export function fromJSON(object: any): ImportAssetRequest {\n return {\n basePath: isSet(object.basePath) ? String(object.basePath) : \"\",\n assetPackageName: isSet(object.assetPackageName) ? String(object.assetPackageName) : \"\",\n content: isObject(object.content)\n ? Object.entries(object.content).reduce<Map<string, Uint8Array>>((acc, [key, value]) => {\n acc.set(key, bytesFromBase64(value as string));\n return acc;\n }, new Map())\n : new Map(),\n };\n }\n\n export function toJSON(message: ImportAssetRequest): unknown {\n const obj: any = {};\n message.basePath !== undefined && (obj.basePath = message.basePath);\n message.assetPackageName !== undefined && (obj.assetPackageName = message.assetPackageName);\n obj.content = {};\n if (message.content) {\n message.content.forEach((v, k) => {\n obj.content[k] = base64FromBytes(v);\n });\n }\n return obj;\n }\n\n export function create<I extends Exact<DeepPartial<ImportAssetRequest>, I>>(base?: I): ImportAssetRequest {\n return ImportAssetRequest.fromPartial(base ?? {});\n }\n\n export function fromPartial<I extends Exact<DeepPartial<ImportAssetRequest>, I>>(object: I): ImportAssetRequest {\n const message = createBaseImportAssetRequest();\n message.basePath = object.basePath ?? \"\";\n message.assetPackageName = object.assetPackageName ?? \"\";\n message.content = (() => {\n const m = new Map();\n (object.content as Map<string, Uint8Array> ?? new Map()).forEach((value, key) => {\n if (value !== undefined) {\n m.set(key, value);\n }\n });\n return m;\n })();\n return message;\n }\n}\n\nfunction createBaseImportAssetRequest_ContentEntry(): ImportAssetRequest_ContentEntry {\n return { key: \"\", value: new Uint8Array(0) };\n}\n\nexport namespace ImportAssetRequest_ContentEntry {\n export function encode(\n message: ImportAssetRequest_ContentEntry,\n writer: _m0.Writer = _m0.Writer.create(),\n ): _m0.Writer {\n if (message.key !== \"\") {\n writer.uint32(10).string(message.key);\n }\n if (message.value.length !== 0) {\n writer.uint32(18).bytes(message.value);\n }\n return writer;\n }\n\n export function decode(input: _m0.Reader | Uint8Array, length?: number): ImportAssetRequest_ContentEntry {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseImportAssetRequest_ContentEntry();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.key = reader.string();\n continue;\n case 2:\n if (tag !== 18) {\n break;\n }\n\n message.value = reader.bytes();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n }\n\n export function fromJSON(object: any): ImportAssetRequest_ContentEntry {\n return {\n key: isSet(object.key) ? String(object.key) : \"\",\n value: isSet(object.value) ? bytesFromBase64(object.value) : new Uint8Array(0),\n };\n }\n\n export function toJSON(message: ImportAssetRequest_ContentEntry): unknown {\n const obj: any = {};\n message.key !== undefined && (obj.key = message.key);\n message.value !== undefined &&\n (obj.value = base64FromBytes(message.value !== undefined ? message.value : new Uint8Array(0)));\n return obj;\n }\n\n export function create<I extends Exact<DeepPartial<ImportAssetRequest_ContentEntry>, I>>(\n base?: I,\n ): ImportAssetRequest_ContentEntry {\n return ImportAssetRequest_ContentEntry.fromPartial(base ?? {});\n }\n\n export function fromPartial<I extends Exact<DeepPartial<ImportAssetRequest_ContentEntry>, I>>(\n object: I,\n ): ImportAssetRequest_ContentEntry {\n const message = createBaseImportAssetRequest_ContentEntry();\n message.key = object.key ?? \"\";\n message.value = object.value ?? new Uint8Array(0);\n return message;\n }\n}\n\nfunction createBaseInspectorPreferencesMessage(): InspectorPreferencesMessage {\n return { freeCameraInvertRotation: false, autosaveEnabled: false };\n}\n\nexport namespace InspectorPreferencesMessage {\n export function encode(message: InspectorPreferencesMessage, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n if (message.freeCameraInvertRotation === true) {\n writer.uint32(8).bool(message.freeCameraInvertRotation);\n }\n if (message.autosaveEnabled === true) {\n writer.uint32(16).bool(message.autosaveEnabled);\n }\n return writer;\n }\n\n export function decode(input: _m0.Reader | Uint8Array, length?: number): InspectorPreferencesMessage {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseInspectorPreferencesMessage();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 8) {\n break;\n }\n\n message.freeCameraInvertRotation = reader.bool();\n continue;\n case 2:\n if (tag !== 16) {\n break;\n }\n\n message.autosaveEnabled = reader.bool();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n }\n\n export function fromJSON(object: any): InspectorPreferencesMessage {\n return {\n freeCameraInvertRotation: isSet(object.freeCameraInvertRotation)\n ? Boolean(object.freeCameraInvertRotation)\n : false,\n autosaveEnabled: isSet(object.autosaveEnabled) ? Boolean(object.autosaveEnabled) : false,\n };\n }\n\n export function toJSON(message: InspectorPreferencesMessage): unknown {\n const obj: any = {};\n message.freeCameraInvertRotation !== undefined && (obj.freeCameraInvertRotation = message.freeCameraInvertRotation);\n message.autosaveEnabled !== undefined && (obj.autosaveEnabled = message.autosaveEnabled);\n return obj;\n }\n\n export function create<I extends Exact<DeepPartial<InspectorPreferencesMessage>, I>>(\n base?: I,\n ): InspectorPreferencesMessage {\n return InspectorPreferencesMessage.fromPartial(base ?? {});\n }\n\n export function fromPartial<I extends Exact<DeepPartial<InspectorPreferencesMessage>, I>>(\n object: I,\n ): InspectorPreferencesMessage {\n const message = createBaseInspectorPreferencesMessage();\n message.freeCameraInvertRotation = object.freeCameraInvertRotation ?? false;\n message.autosaveEnabled = object.autosaveEnabled ?? false;\n return message;\n }\n}\n\nfunction createBaseCopyFileRequest(): CopyFileRequest {\n return { fromPath: \"\", toPath: \"\" };\n}\n\nexport namespace CopyFileRequest {\n export function encode(message: CopyFileRequest, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n if (message.fromPath !== \"\") {\n writer.uint32(10).string(message.fromPath);\n }\n if (message.toPath !== \"\") {\n writer.uint32(18).string(message.toPath);\n }\n return writer;\n }\n\n export function decode(input: _m0.Reader | Uint8Array, length?: number): CopyFileRequest {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseCopyFileRequest();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.fromPath = reader.string();\n continue;\n case 2:\n if (tag !== 18) {\n break;\n }\n\n message.toPath = reader.string();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n }\n\n export function fromJSON(object: any): CopyFileRequest {\n return {\n fromPath: isSet(object.fromPath) ? String(object.fromPath) : \"\",\n toPath: isSet(object.toPath) ? String(object.toPath) : \"\",\n };\n }\n\n export function toJSON(message: CopyFileRequest): unknown {\n const obj: any = {};\n message.fromPath !== undefined && (obj.fromPath = message.fromPath);\n message.toPath !== undefined && (obj.toPath = message.toPath);\n return obj;\n }\n\n export function create<I extends Exact<DeepPartial<CopyFileRequest>, I>>(base?: I): CopyFileRequest {\n return CopyFileRequest.fromPartial(base ?? {});\n }\n\n export function fromPartial<I extends Exact<DeepPartial<CopyFileRequest>, I>>(object: I): CopyFileRequest {\n const message = createBaseCopyFileRequest();\n message.fromPath = object.fromPath ?? \"\";\n message.toPath = object.toPath ?? \"\";\n return message;\n }\n}\n\nfunction createBaseGetFileRequest(): GetFileRequest {\n return { path: \"\" };\n}\n\nexport namespace GetFileRequest {\n export function encode(message: GetFileRequest, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n if (message.path !== \"\") {\n writer.uint32(10).string(message.path);\n }\n return writer;\n }\n\n export function decode(input: _m0.Reader | Uint8Array, length?: number): GetFileRequest {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseGetFileRequest();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.path = reader.string();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n }\n\n export function fromJSON(object: any): GetFileRequest {\n return { path: isSet(object.path) ? String(object.path) : \"\" };\n }\n\n export function toJSON(message: GetFileRequest): unknown {\n const obj: any = {};\n message.path !== undefined && (obj.path = message.path);\n return obj;\n }\n\n export function create<I extends Exact<DeepPartial<GetFileRequest>, I>>(base?: I): GetFileRequest {\n return GetFileRequest.fromPartial(base ?? {});\n }\n\n export function fromPartial<I extends Exact<DeepPartial<GetFileRequest>, I>>(object: I): GetFileRequest {\n const message = createBaseGetFileRequest();\n message.path = object.path ?? \"\";\n return message;\n }\n}\n\nfunction createBaseGetFileResponse(): GetFileResponse {\n return { content: new Uint8Array(0) };\n}\n\nexport namespace GetFileResponse {\n export function encode(message: GetFileResponse, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n if (message.content.length !== 0) {\n writer.uint32(10).bytes(message.content);\n }\n return writer;\n }\n\n export function decode(input: _m0.Reader | Uint8Array, length?: number): GetFileResponse {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseGetFileResponse();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.content = reader.bytes();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n }\n\n export function fromJSON(object: any): GetFileResponse {\n return { content: isSet(object.content) ? bytesFromBase64(object.content) : new Uint8Array(0) };\n }\n\n export function toJSON(message: GetFileResponse): unknown {\n const obj: any = {};\n message.content !== undefined &&\n (obj.content = base64FromBytes(message.content !== undefined ? message.content : new Uint8Array(0)));\n return obj;\n }\n\n export function create<I extends Exact<DeepPartial<GetFileResponse>, I>>(base?: I): GetFileResponse {\n return GetFileResponse.fromPartial(base ?? {});\n }\n\n export function fromPartial<I extends Exact<DeepPartial<GetFileResponse>, I>>(object: I): GetFileResponse {\n const message = createBaseGetFileResponse();\n message.content = object.content ?? new Uint8Array(0);\n return message;\n }\n}\n\nfunction createBaseCreateCustomAssetRequest(): CreateCustomAssetRequest {\n return { name: \"\", composite: new Uint8Array(0), resources: [], thumbnail: undefined };\n}\n\nexport namespace CreateCustomAssetRequest {\n export function encode(message: CreateCustomAssetRequest, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n if (message.name !== \"\") {\n writer.uint32(10).string(message.name);\n }\n if (message.composite.length !== 0) {\n writer.uint32(18).bytes(message.composite);\n }\n for (const v of message.resources) {\n writer.uint32(26).string(v!);\n }\n if (message.thumbnail !== undefined) {\n writer.uint32(34).bytes(message.thumbnail);\n }\n return writer;\n }\n\n export function decode(input: _m0.Reader | Uint8Array, length?: number): CreateCustomAssetRequest {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseCreateCustomAssetRequest();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.name = reader.string();\n continue;\n case 2:\n if (tag !== 18) {\n break;\n }\n\n message.composite = reader.bytes();\n continue;\n case 3:\n if (tag !== 26) {\n break;\n }\n\n message.resources.push(reader.string());\n continue;\n case 4:\n if (tag !== 34) {\n break;\n }\n\n message.thumbnail = reader.bytes();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n }\n\n export function fromJSON(object: any): CreateCustomAssetRequest {\n return {\n name: isSet(object.name) ? String(object.name) : \"\",\n composite: isSet(object.composite) ? bytesFromBase64(object.composite) : new Uint8Array(0),\n resources: Array.isArray(object?.resources) ? object.resources.map((e: any) => String(e)) : [],\n thumbnail: isSet(object.thumbnail) ? bytesFromBase64(object.thumbnail) : undefined,\n };\n }\n\n export function toJSON(message: CreateCustomAssetRequest): unknown {\n const obj: any = {};\n message.name !== undefined && (obj.name = message.name);\n message.composite !== undefined &&\n (obj.composite = base64FromBytes(message.composite !== undefined ? message.composite : new Uint8Array(0)));\n if (message.resources) {\n obj.resources = message.resources.map((e) => e);\n } else {\n obj.resources = [];\n }\n message.thumbnail !== undefined &&\n (obj.thumbnail = message.thumbnail !== undefined ? base64FromBytes(message.thumbnail) : undefined);\n return obj;\n }\n\n export function create<I extends Exact<DeepPartial<CreateCustomAssetRequest>, I>>(\n base?: I,\n ): CreateCustomAssetRequest {\n return CreateCustomAssetRequest.fromPartial(base ?? {});\n }\n\n export function fromPartial<I extends Exact<DeepPartial<CreateCustomAssetRequest>, I>>(\n object: I,\n ): CreateCustomAssetRequest {\n const message = createBaseCreateCustomAssetRequest();\n message.name = object.name ?? \"\";\n message.composite = object.composite ?? new Uint8Array(0);\n message.resources = object.resources?.map((e) => e) || [];\n message.thumbnail = object.thumbnail ?? undefined;\n return message;\n }\n}\n\nfunction createBaseCreateCustomAssetResponse(): CreateCustomAssetResponse {\n return { asset: undefined };\n}\n\nexport namespace CreateCustomAssetResponse {\n export function encode(message: CreateCustomAssetResponse, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n if (message.asset !== undefined) {\n AssetData.encode(message.asset, writer.uint32(10).fork()).ldelim();\n }\n return writer;\n }\n\n export function decode(input: _m0.Reader | Uint8Array, length?: number): CreateCustomAssetResponse {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseCreateCustomAssetResponse();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.asset = AssetData.decode(reader, reader.uint32());\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n }\n\n export function fromJSON(object: any): CreateCustomAssetResponse {\n return { asset: isSet(object.asset) ? AssetData.fromJSON(object.asset) : undefined };\n }\n\n export function toJSON(message: CreateCustomAssetResponse): unknown {\n const obj: any = {};\n message.asset !== undefined && (obj.asset = message.asset ? AssetData.toJSON(message.asset) : undefined);\n return obj;\n }\n\n export function create<I extends Exact<DeepPartial<CreateCustomAssetResponse>, I>>(\n base?: I,\n ): CreateCustomAssetResponse {\n return CreateCustomAssetResponse.fromPartial(base ?? {});\n }\n\n export function fromPartial<I extends Exact<DeepPartial<CreateCustomAssetResponse>, I>>(\n object: I,\n ): CreateCustomAssetResponse {\n const message = createBaseCreateCustomAssetResponse();\n message.asset = (object.asset !== undefined && object.asset !== null)\n ? AssetData.fromPartial(object.asset)\n : undefined;\n return message;\n }\n}\n\nfunction createBaseGetCustomAssetsResponse(): GetCustomAssetsResponse {\n return { assets: [] };\n}\n\nexport namespace GetCustomAssetsResponse {\n export function encode(message: GetCustomAssetsResponse, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n for (const v of message.assets) {\n AssetData.encode(v!, writer.uint32(10).fork()).ldelim();\n }\n return writer;\n }\n\n export function decode(input: _m0.Reader | Uint8Array, length?: number): GetCustomAssetsResponse {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseGetCustomAssetsResponse();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.assets.push(AssetData.decode(reader, reader.uint32()));\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n }\n\n export function fromJSON(object: any): GetCustomAssetsResponse {\n return { assets: Array.isArray(object?.assets) ? object.assets.map((e: any) => AssetData.fromJSON(e)) : [] };\n }\n\n export function toJSON(message: GetCustomAssetsResponse): unknown {\n const obj: any = {};\n if (message.assets) {\n obj.assets = message.assets.map((e) => e ? AssetData.toJSON(e) : undefined);\n } else {\n obj.assets = [];\n }\n return obj;\n }\n\n export function create<I extends Exact<DeepPartial<GetCustomAssetsResponse>, I>>(base?: I): GetCustomAssetsResponse {\n return GetCustomAssetsResponse.fromPartial(base ?? {});\n }\n\n export function fromPartial<I extends Exact<DeepPartial<GetCustomAssetsResponse>, I>>(\n object: I,\n ): GetCustomAssetsResponse {\n const message = createBaseGetCustomAssetsResponse();\n message.assets = object.assets?.map((e) => AssetData.fromPartial(e)) || [];\n return message;\n }\n}\n\nfunction createBaseDeleteCustomAssetRequest(): DeleteCustomAssetRequest {\n return { assetId: \"\" };\n}\n\nexport namespace DeleteCustomAssetRequest {\n export function encode(message: DeleteCustomAssetRequest, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n if (message.assetId !== \"\") {\n writer.uint32(10).string(message.assetId);\n }\n return writer;\n }\n\n export function decode(input: _m0.Reader | Uint8Array, length?: number): DeleteCustomAssetRequest {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseDeleteCustomAssetRequest();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.assetId = reader.string();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n }\n\n export function fromJSON(object: any): DeleteCustomAssetRequest {\n return { assetId: isSet(object.assetId) ? String(object.assetId) : \"\" };\n }\n\n export function toJSON(message: DeleteCustomAssetRequest): unknown {\n const obj: any = {};\n message.assetId !== undefined && (obj.assetId = message.assetId);\n return obj;\n }\n\n export function create<I extends Exact<DeepPartial<DeleteCustomAssetRequest>, I>>(\n base?: I,\n ): DeleteCustomAssetRequest {\n return DeleteCustomAssetRequest.fromPartial(base ?? {});\n }\n\n export function fromPartial<I extends Exact<DeepPartial<DeleteCustomAssetRequest>, I>>(\n object: I,\n ): DeleteCustomAssetRequest {\n const message = createBaseDeleteCustomAssetRequest();\n message.assetId = object.assetId ?? \"\";\n return message;\n }\n}\n\nfunction createBaseRenameCustomAssetRequest(): RenameCustomAssetRequest {\n return { assetId: \"\", newName: \"\" };\n}\n\nexport namespace RenameCustomAssetRequest {\n export function encode(message: RenameCustomAssetRequest, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n if (message.assetId !== \"\") {\n writer.uint32(10).string(message.assetId);\n }\n if (message.newName !== \"\") {\n writer.uint32(18).string(message.newName);\n }\n return writer;\n }\n\n export function decode(input: _m0.Reader | Uint8Array, length?: number): RenameCustomAssetRequest {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseRenameCustomAssetRequest();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.assetId = reader.string();\n continue;\n case 2:\n if (tag !== 18) {\n break;\n }\n\n message.newName = reader.string();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n }\n\n export function fromJSON(object: any): RenameCustomAssetRequest {\n return {\n assetId: isSet(object.assetId) ? String(object.assetId) : \"\",\n newName: isSet(object.newName) ? String(object.newName) : \"\",\n };\n }\n\n export function toJSON(message: RenameCustomAssetRequest): unknown {\n const obj: any = {};\n message.assetId !== undefined && (obj.assetId = message.assetId);\n message.newName !== undefined && (obj.newName = message.newName);\n return obj;\n }\n\n export function create<I extends Exact<DeepPartial<RenameCustomAssetRequest>, I>>(\n base?: I,\n ): RenameCustomAssetRequest {\n return RenameCustomAssetRequest.fromPartial(base ?? {});\n }\n\n export function fromPartial<I extends Exact<DeepPartial<RenameCustomAssetRequest>, I>>(\n object: I,\n ): RenameCustomAssetRequest {\n const message = createBaseRenameCustomAssetRequest();\n message.assetId = object.assetId ?? \"\";\n message.newName = object.newName ?? \"\";\n return message;\n }\n}\n\nfunction createBaseUndoRedoStateResponse(): UndoRedoStateResponse {\n return { canUndo: false, canRedo: false };\n}\n\nexport namespace UndoRedoStateResponse {\n export function encode(message: UndoRedoStateResponse, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n if (message.canUndo === true) {\n writer.uint32(8).bool(message.canUndo);\n }\n if (message.canRedo === true) {\n writer.uint32(16).bool(message.canRedo);\n }\n return writer;\n }\n\n export function decode(input: _m0.Reader | Uint8Array, length?: number): UndoRedoStateResponse {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseUndoRedoStateResponse();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 8) {\n break;\n }\n\n message.canUndo = reader.bool();\n continue;\n case 2:\n if (tag !== 16) {\n break;\n }\n\n message.canRedo = reader.bool();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n }\n\n export function fromJSON(object: any): UndoRedoStateResponse {\n return {\n canUndo: isSet(object.canUndo) ? Boolean(object.canUndo) : false,\n canRedo: isSet(object.canRedo) ? Boolean(object.canRedo) : false,\n };\n }\n\n export function toJSON(message: UndoRedoStateResponse): unknown {\n const obj: any = {};\n message.canUndo !== undefined && (obj.canUndo = message.canUndo);\n message.canRedo !== undefined && (obj.canRedo = message.canRedo);\n return obj;\n }\n\n export function create<I extends Exact<DeepPartial<UndoRedoStateResponse>, I>>(base?: I): UndoRedoStateResponse {\n return UndoRedoStateResponse.fromPartial(base ?? {});\n }\n\n export function fromPartial<I extends Exact<DeepPartial<UndoRedoStateResponse>, I>>(\n object: I,\n ): UndoRedoStateResponse {\n const message = createBaseUndoRedoStateResponse();\n message.canUndo = object.canUndo ?? false;\n message.canRedo = object.canRedo ?? false;\n return message;\n }\n}\n\nexport type DataServiceDefinition = typeof DataServiceDefinition;\nexport const DataServiceDefinition = {\n name: \"DataService\",\n fullName: \"DataService\",\n methods: {\n crdtStream: {\n name: \"CrdtStream\",\n requestType: CrdtStreamMessage,\n requestStream: true,\n responseType: CrdtStreamMessage,\n responseStream: true,\n options: {},\n },\n undo: {\n name: \"Undo\",\n requestType: Empty,\n requestStream: false,\n responseType: UndoRedoResponse,\n responseStream: false,\n options: {},\n },\n redo: {\n name: \"Redo\",\n requestType: Empty,\n requestStream: false,\n responseType: UndoRedoResponse,\n responseStream: false,\n options: {},\n },\n getUndoRedoState: {\n name: \"GetUndoRedoState\",\n requestType: Empty,\n requestStream: false,\n responseType: UndoRedoStateResponse,\n responseStream: false,\n options: {},\n },\n getFiles: {\n name: \"getFiles\",\n requestType: GetFilesRequest,\n requestStream: false,\n responseType: GetFilesResponse,\n responseStream: false,\n options: {},\n },\n saveFile: {\n name: \"saveFile\",\n requestType: SaveFileRequest,\n requestStream: false,\n responseType: Empty,\n responseStream: false,\n options: {},\n },\n getAssetCatalog: {\n name: \"GetAssetCatalog\",\n requestType: Empty,\n requestStream: false,\n responseType: AssetCatalogResponse,\n responseStream: false,\n options: {},\n },\n getAssetData: {\n name: \"GetAssetData\",\n requestType: Asset,\n requestStream: false,\n responseType: AssetData,\n responseStream: false,\n options: {},\n },\n importAsset: {\n name: \"ImportAsset\",\n requestType: ImportAssetRequest,\n requestStream: false,\n responseType: Empty,\n responseStream: false,\n options: {},\n },\n removeAsset: {\n name: \"RemoveAsset\",\n requestType: Asset,\n requestStream: false,\n responseType: Empty,\n responseStream: false,\n options: {},\n },\n save: {\n name: \"Save\",\n requestType: Empty,\n requestStream: false,\n responseType: Empty,\n responseStream: false,\n options: {},\n },\n getInspectorPreferences: {\n name: \"GetInspectorPreferences\",\n requestType: Empty,\n requestStream: false,\n responseType: InspectorPreferencesMessage,\n responseStream: false,\n options: {},\n },\n setInspectorPreferences: {\n name: \"SetInspectorPreferences\",\n requestType: InspectorPreferencesMessage,\n requestStream: false,\n responseType: Empty,\n responseStream: false,\n options: {},\n },\n copyFile: {\n name: \"CopyFile\",\n requestType: CopyFileRequest,\n requestStream: false,\n responseType: Empty,\n responseStream: false,\n options: {},\n },\n getFile: {\n name: \"GetFile\",\n requestType: GetFileRequest,\n requestStream: false,\n responseType: GetFileResponse,\n responseStream: false,\n options: {},\n },\n createCustomAsset: {\n name: \"CreateCustomAsset\",\n requestType: CreateCustomAssetRequest,\n requestStream: false,\n responseType: CreateCustomAssetResponse,\n responseStream: false,\n options: {},\n },\n getCustomAssets: {\n name: \"GetCustomAssets\",\n requestType: Empty,\n requestStream: false,\n responseType: GetCustomAssetsResponse,\n responseStream: false,\n options: {},\n },\n deleteCustomAsset: {\n name: \"DeleteCustomAsset\",\n requestType: DeleteCustomAssetRequest,\n requestStream: false,\n responseType: Empty,\n responseStream: false,\n options: {},\n },\n renameCustomAsset: {\n name: \"RenameCustomAsset\",\n requestType: RenameCustomAssetRequest,\n requestStream: false,\n responseType: Empty,\n responseStream: false,\n options: {},\n },\n },\n} as const;\n\ndeclare const self: any | undefined;\ndeclare const window: any | undefined;\ndeclare const global: any | undefined;\nconst tsProtoGlobalThis: any = (() => {\n if (typeof globalThis !== \"undefined\") {\n return globalThis;\n }\n if (typeof self !== \"undefined\") {\n return self;\n }\n if (typeof window !== \"undefined\") {\n return window;\n }\n if (typeof global !== \"undefined\") {\n return global;\n }\n throw \"Unable to locate global object\";\n})();\n\nfunction bytesFromBase64(b64: string): Uint8Array {\n if (tsProtoGlobalThis.Buffer) {\n return Uint8Array.from(tsProtoGlobalThis.Buffer.from(b64, \"base64\"));\n } else {\n const bin = tsProtoGlobalThis.atob(b64);\n const arr = new Uint8Array(bin.length);\n for (let i = 0; i < bin.length; ++i) {\n arr[i] = bin.charCodeAt(i);\n }\n return arr;\n }\n}\n\nfunction base64FromBytes(arr: Uint8Array): string {\n if (tsProtoGlobalThis.Buffer) {\n return tsProtoGlobalThis.Buffer.from(arr).toString(\"base64\");\n } else {\n const bin: string[] = [];\n arr.forEach((byte) => {\n bin.push(String.fromCharCode(byte));\n });\n return tsProtoGlobalThis.btoa(bin.join(\"\"));\n }\n}\n\ntype Builtin = Date | Function | Uint8Array | string | number | boolean | undefined;\n\nexport type DeepPartial<T> = T extends Builtin ? T\n : T extends Array<infer U> ? Array<DeepPartial<U>> : T extends ReadonlyArray<infer U> ? ReadonlyArray<DeepPartial<U>>\n : T extends { $case: string } ? { [K in keyof Omit<T, \"$case\">]?: DeepPartial<T[K]> } & { $case: T[\"$case\"] }\n : T extends {} ? { [K in keyof T]?: DeepPartial<T[K]> }\n : Partial<T>;\n\ntype KeysOfUnion<T> = T extends T ? keyof T : never;\nexport type Exact<P, I extends P> = P extends Builtin ? P\n : P & { [K in keyof P]: Exact<P[K], I[K]> } & { [K in Exclude<keyof I, KeysOfUnion<P>>]: never };\n\nfunction isObject(value: any): boolean {\n return typeof value === \"object\" && value !== null;\n}\n\nfunction isSet(value: any): boolean {\n return value !== null && value !== undefined;\n}\n", "import type { JTDDataType } from 'ajv/dist/jtd';\nimport Ajv from 'ajv/dist/jtd';\nimport type { FileSystemInterface } from '../../data-layer/types';\nimport type { InspectorPreferences } from './types';\nimport { getDefaultInspectorPreferences } from './types';\n\n/*\n Preferences file is a JSON dictionary with version and data fields.\n This outer structure is called 'shell'.\n Version 1's data is a 1-level deep dictionary, i.e.\n type dataV1 = {[key: string]: string | number | boolean | enum}.\n Every preference (key) is treated as optional.\n Example of valid V1 file:\n {\n \"version\": 1,\n \"data\": {\n \"autosaveEnabled\": true\n }\n }\n\n Versioning policy:\n 1. Adding new fields is OK.\n 2. Deleting or renaming field or changing its type is not OK, requires new version.\n*/\nconst shellSchema = {\n properties: {\n version: { type: 'uint16' },\n data: { properties: {}, additionalProperties: true },\n },\n};\nconst v1Schema = {\n optionalProperties: {\n freeCameraInvertRotation: { type: 'boolean' },\n autosaveEnabled: { type: 'boolean' },\n },\n} as const;\ntype JsonPreferencesV1 = JTDDataType<typeof v1Schema>;\n\nconst ajv = new Ajv();\nconst validateShell = ajv.compile<JTDDataType<typeof shellSchema>>(shellSchema);\nconst validateV1 = ajv.compile<JsonPreferencesV1>(v1Schema);\n\nexport class InvalidPreferences extends Error {}\n\nexport function parseInspectorPreferences(content: string): InspectorPreferences {\n let jsonContent;\n try {\n jsonContent = JSON.parse(content);\n } catch (err) {\n throw new InvalidPreferences(`invalid json: ${err}`);\n }\n\n if (!validateShell(jsonContent)) {\n throw new InvalidPreferences(`invalid shell: ${ajv.errorsText(validateShell.errors)}`);\n }\n\n if (jsonContent.version === 1) {\n if (validateV1(jsonContent.data)) {\n return {\n ...getDefaultInspectorPreferences(),\n ...jsonContent.data,\n };\n } else {\n throw new InvalidPreferences(`invalid v1 data: ${ajv.errorsText(validateV1.errors)}`);\n }\n } else {\n throw new InvalidPreferences(`invalid version: ${jsonContent.version}`);\n }\n}\n\nexport async function readPreferencesFromFile(\n fs: FileSystemInterface,\n path: string,\n): Promise<InspectorPreferences> {\n const fileExists = await fs.existFile(path);\n if (!fileExists) return getDefaultInspectorPreferences();\n\n const fileContent = await fs.readFile(path);\n try {\n return parseInspectorPreferences(new TextDecoder().decode(fileContent));\n } catch (error) {\n if (error instanceof InvalidPreferences) {\n console.log(`bad preferences file: ${error}, returning default preferences`);\n return getDefaultInspectorPreferences();\n } else {\n throw error;\n }\n }\n}\n\nexport function serializeInspectorPreferences(value: InspectorPreferences): Buffer {\n return Buffer.from(JSON.stringify({ version: 1, data: value }, null, 2), 'utf-8');\n}\n", "export type InspectorPreferences = {\n freeCameraInvertRotation: boolean;\n autosaveEnabled: boolean;\n};\n\nexport function getDefaultInspectorPreferences(): InspectorPreferences {\n return {\n freeCameraInvertRotation: false,\n autosaveEnabled: true,\n };\n}\n", "/* eslint-disable */\nimport _m0 from \"protobufjs/minimal\";\nconst protobufPackageSarasa = \"decentraland.sdk.components\";\nfunction createBasePBAnimator() {\n return { states: [] };\n}\n/**\n * @public\n */\nexport var PBAnimator;\n(function (PBAnimator) {\n function encode(message, writer = _m0.Writer.create()) {\n for (const v of message.states) {\n PBAnimationState.encode(v, writer.uint32(10).fork()).ldelim();\n }\n return writer;\n }\n PBAnimator.encode = encode;\n function decode(input, length) {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBasePBAnimator();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n message.states.push(PBAnimationState.decode(reader, reader.uint32()));\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n }\n PBAnimator.decode = decode;\n})(PBAnimator || (PBAnimator = {}));\nfunction createBasePBAnimationState() {\n return { clip: \"\", playing: undefined, weight: undefined, speed: undefined, loop: undefined, shouldReset: undefined };\n}\n/**\n * @public\n */\nexport var PBAnimationState;\n(function (PBAnimationState) {\n function encode(message, writer = _m0.Writer.create()) {\n if (message.clip !== \"\") {\n writer.uint32(18).string(message.clip);\n }\n if (message.playing !== undefined) {\n writer.uint32(24).bool(message.playing);\n }\n if (message.weight !== undefined) {\n writer.uint32(37).float(message.weight);\n }\n if (message.speed !== undefined) {\n writer.uint32(45).float(message.speed);\n }\n if (message.loop !== undefined) {\n writer.uint32(48).bool(message.loop);\n }\n if (message.shouldReset !== undefined) {\n writer.uint32(56).bool(message.shouldReset);\n }\n return writer;\n }\n PBAnimationState.encode = encode;\n function decode(input, length) {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBasePBAnimationState();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 2:\n if (tag !== 18) {\n break;\n }\n message.clip = reader.string();\n continue;\n case 3:\n if (tag !== 24) {\n break;\n }\n message.playing = reader.bool();\n continue;\n case 4:\n if (tag !== 37) {\n break;\n }\n message.weight = reader.float();\n continue;\n case 5:\n if (tag !== 45) {\n break;\n }\n message.speed = reader.float();\n continue;\n case 6:\n if (tag !== 48) {\n break;\n }\n message.loop = reader.bool();\n continue;\n case 7:\n if (tag !== 56) {\n break;\n }\n message.shouldReset = reader.bool();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n }\n PBAnimationState.decode = decode;\n})(PBAnimationState || (PBAnimationState = {}));\n", "import { PBAnimator } from './pb/decentraland/sdk/components/animator.gen';\n/**\n * @internal\n */\nexport const AnimatorSchema = {\n COMPONENT_ID: 1042,\n serialize(value, builder) {\n const writer = PBAnimator.encode(value);\n const buffer = new Uint8Array(writer.finish(), 0, writer.len);\n builder.writeBuffer(buffer, false);\n },\n deserialize(reader) {\n return PBAnimator.decode(reader.buffer(), reader.remainingBytes());\n },\n create() {\n // TODO: this is a hack.\n return PBAnimator.decode(new Uint8Array());\n },\n jsonSchema: {\n type: \"object\",\n properties: {},\n serializationType: \"protocol-buffer\",\n protocolBuffer: \"PBAnimator\"\n }\n};\n", "/* eslint-disable */\nimport _m0 from \"protobufjs/minimal\";\nconst protobufPackageSarasa = \"decentraland.sdk.components\";\nfunction createBasePBAudioEvent() {\n return { state: 0, timestamp: 0 };\n}\n/**\n * @public\n */\nexport var PBAudioEvent;\n(function (PBAudioEvent) {\n function encode(message, writer = _m0.Writer.create()) {\n if (message.state !== 0) {\n writer.uint32(8).int32(message.state);\n }\n if (message.timestamp !== 0) {\n writer.uint32(16).uint32(message.timestamp);\n }\n return writer;\n }\n PBAudioEvent.encode = encode;\n function decode(input, length) {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBasePBAudioEvent();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 8) {\n break;\n }\n message.state = reader.int32();\n continue;\n case 2:\n if (tag !== 16) {\n break;\n }\n message.timestamp = reader.uint32();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n }\n PBAudioEvent.decode = decode;\n})(PBAudioEvent || (PBAudioEvent = {}));\n", "import { PBAudioEvent } from './pb/decentraland/sdk/components/audio_event.gen';\n/**\n * @internal\n */\nexport const AudioEventSchema = {\n COMPONENT_ID: 1105,\n serialize(value, builder) {\n const writer = PBAudioEvent.encode(value);\n const buffer = new Uint8Array(writer.finish(), 0, writer.len);\n builder.writeBuffer(buffer, false);\n },\n deserialize(reader) {\n return PBAudioEvent.decode(reader.buffer(), reader.remainingBytes());\n },\n create() {\n // TODO: this is a hack.\n return PBAudioEvent.decode(new Uint8Array());\n },\n jsonSchema: {\n type: \"object\",\n properties: {},\n serializationType: \"protocol-buffer\",\n protocolBuffer: \"PBAudioEvent\"\n }\n};\n", "/* eslint-disable */\nimport _m0 from \"protobufjs/minimal\";\nconst protobufPackageSarasa = \"decentraland.sdk.components\";\nfunction createBasePBAudioSource() {\n return {\n playing: undefined,\n volume: undefined,\n loop: undefined,\n pitch: undefined,\n audioClipUrl: \"\",\n currentTime: undefined,\n global: undefined,\n };\n}\n/**\n * @public\n */\nexport var PBAudioSource;\n(function (PBAudioSource) {\n function encode(message, writer = _m0.Writer.create()) {\n if (message.playing !== undefined) {\n writer.uint32(8).bool(message.playing);\n }\n if (message.volume !== undefined) {\n writer.uint32(21).float(message.volume);\n }\n if (message.loop !== undefined) {\n writer.uint32(24).bool(message.loop);\n }\n if (message.pitch !== undefined) {\n writer.uint32(37).float(message.pitch);\n }\n if (message.audioClipUrl !== \"\") {\n writer.uint32(42).string(message.audioClipUrl);\n }\n if (message.currentTime !== undefined) {\n writer.uint32(53).float(message.currentTime);\n }\n if (message.global !== undefined) {\n writer.uint32(56).bool(message.global);\n }\n return writer;\n }\n PBAudioSource.encode = encode;\n function decode(input, length) {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBasePBAudioSource();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 8) {\n break;\n }\n message.playing = reader.bool();\n continue;\n case 2:\n if (tag !== 21) {\n break;\n }\n message.volume = reader.float();\n continue;\n case 3:\n if (tag !== 24) {\n break;\n }\n message.loop = reader.bool();\n continue;\n case 4:\n if (tag !== 37) {\n break;\n }\n message.pitch = reader.float();\n continue;\n case 5:\n if (tag !== 42) {\n break;\n }\n message.audioClipUrl = reader.string();\n continue;\n case 6:\n if (tag !== 53) {\n break;\n }\n message.currentTime = reader.float();\n continue;\n case 7:\n if (tag !== 56) {\n break;\n }\n message.global = reader.bool();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n }\n PBAudioSource.decode = decode;\n})(PBAudioSource || (PBAudioSource = {}));\n", "import { PBAudioSource } from './pb/decentraland/sdk/components/audio_source.gen';\n/**\n * @internal\n */\nexport const AudioSourceSchema = {\n COMPONENT_ID: 1020,\n serialize(value, builder) {\n const writer = PBAudioSource.encode(value);\n const buffer = new Uint8Array(writer.finish(), 0, writer.len);\n builder.writeBuffer(buffer, false);\n },\n deserialize(reader) {\n return PBAudioSource.decode(reader.buffer(), reader.remainingBytes());\n },\n create() {\n // TODO: this is a hack.\n return PBAudioSource.decode(new Uint8Array());\n },\n jsonSchema: {\n type: \"object\",\n properties: {},\n serializationType: \"protocol-buffer\",\n protocolBuffer: \"PBAudioSource\"\n }\n};\n", "/* eslint-disable */\nimport _m0 from \"protobufjs/minimal\";\nconst protobufPackageSarasa = \"decentraland.sdk.components\";\nfunction createBasePBAudioStream() {\n return { playing: undefined, volume: undefined, url: \"\" };\n}\n/**\n * @public\n */\nexport var PBAudioStream;\n(function (PBAudioStream) {\n function encode(message, writer = _m0.Writer.create()) {\n if (message.playing !== undefined) {\n writer.uint32(8).bool(message.playing);\n }\n if (message.volume !== undefined) {\n writer.uint32(21).float(message.volume);\n }\n if (message.url !== \"\") {\n writer.uint32(26).string(message.url);\n }\n return writer;\n }\n PBAudioStream.encode = encode;\n function decode(input, length) {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBasePBAudioStream();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 8) {\n break;\n }\n message.playing = reader.bool();\n continue;\n case 2:\n if (tag !== 21) {\n break;\n }\n message.volume = reader.float();\n continue;\n case 3:\n if (tag !== 26) {\n break;\n }\n message.url = reader.string();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n }\n PBAudioStream.decode = decode;\n})(PBAudioStream || (PBAudioStream = {}));\n", "import { PBAudioStream } from './pb/decentraland/sdk/components/audio_stream.gen';\n/**\n * @internal\n */\nexport const AudioStreamSchema = {\n COMPONENT_ID: 1021,\n serialize(value, builder) {\n const writer = PBAudioStream.encode(value);\n const buffer = new Uint8Array(writer.finish(), 0, writer.len);\n builder.writeBuffer(buffer, false);\n },\n deserialize(reader) {\n return PBAudioStream.decode(reader.buffer(), reader.remainingBytes());\n },\n create() {\n // TODO: this is a hack.\n return PBAudioStream.decode(new Uint8Array());\n },\n jsonSchema: {\n type: \"object\",\n properties: {},\n serializationType: \"protocol-buffer\",\n protocolBuffer: \"PBAudioStream\"\n }\n};\n", "/* eslint-disable */\nimport _m0 from \"protobufjs/minimal\";\nconst protobufPackageSarasa = \"decentraland.sdk.components\";\n/** AvatarAnchorPointType determines the part of the avatar's body that anchors the Entity. */\n/**\n * @public\n */\nexport var AvatarAnchorPointType;\n(function (AvatarAnchorPointType) {\n /** AAPT_POSITION - @deprecated consider parenting to `engine.PlayerEntity`, this will attach to player position with an arbitrary offset */\n AvatarAnchorPointType[AvatarAnchorPointType[\"AAPT_POSITION\"] = 0] = \"AAPT_POSITION\";\n AvatarAnchorPointType[AvatarAnchorPointType[\"AAPT_NAME_TAG\"] = 1] = \"AAPT_NAME_TAG\";\n AvatarAnchorPointType[AvatarAnchorPointType[\"AAPT_HEAD\"] = 4] = \"AAPT_HEAD\";\n AvatarAnchorPointType[AvatarAnchorPointType[\"AAPT_NECK\"] = 5] = \"AAPT_NECK\";\n AvatarAnchorPointType[AvatarAnchorPointType[\"AAPT_SPINE\"] = 6] = \"AAPT_SPINE\";\n AvatarAnchorPointType[AvatarAnchorPointType[\"AAPT_SPINE1\"] = 7] = \"AAPT_SPINE1\";\n AvatarAnchorPointType[AvatarAnchorPointType[\"AAPT_SPINE2\"] = 8] = \"AAPT_SPINE2\";\n AvatarAnchorPointType[AvatarAnchorPointType[\"AAPT_HIP\"] = 9] = \"AAPT_HIP\";\n AvatarAnchorPointType[AvatarAnchorPointType[\"AAPT_LEFT_SHOULDER\"] = 10] = \"AAPT_LEFT_SHOULDER\";\n AvatarAnchorPointType[AvatarAnchorPointType[\"AAPT_LEFT_ARM\"] = 11] = \"AAPT_LEFT_ARM\";\n AvatarAnchorPointType[AvatarAnchorPointType[\"AAPT_LEFT_FOREARM\"] = 12] = \"AAPT_LEFT_FOREARM\";\n AvatarAnchorPointType[AvatarAnchorPointType[\"AAPT_LEFT_HAND\"] = 2] = \"AAPT_LEFT_HAND\";\n AvatarAnchorPointType[AvatarAnchorPointType[\"AAPT_LEFT_HAND_INDEX\"] = 13] = \"AAPT_LEFT_HAND_INDEX\";\n AvatarAnchorPointType[AvatarAnchorPointType[\"AAPT_RIGHT_SHOULDER\"] = 14] = \"AAPT_RIGHT_SHOULDER\";\n AvatarAnchorPointType[AvatarAnchorPointType[\"AAPT_RIGHT_ARM\"] = 15] = \"AAPT_RIGHT_ARM\";\n AvatarAnchorPointType[AvatarAnchorPointType[\"AAPT_RIGHT_FOREARM\"] = 16] = \"AAPT_RIGHT_FOREARM\";\n AvatarAnchorPointType[AvatarAnchorPointType[\"AAPT_RIGHT_HAND\"] = 3] = \"AAPT_RIGHT_HAND\";\n AvatarAnchorPointType[AvatarAnchorPointType[\"AAPT_RIGHT_HAND_INDEX\"] = 17] = \"AAPT_RIGHT_HAND_INDEX\";\n AvatarAnchorPointType[AvatarAnchorPointType[\"AAPT_LEFT_UP_LEG\"] = 18] = \"AAPT_LEFT_UP_LEG\";\n AvatarAnchorPointType[AvatarAnchorPointType[\"AAPT_LEFT_LEG\"] = 19] = \"AAPT_LEFT_LEG\";\n AvatarAnchorPointType[AvatarAnchorPointType[\"AAPT_LEFT_FOOT\"] = 20] = \"AAPT_LEFT_FOOT\";\n AvatarAnchorPointType[AvatarAnchorPointType[\"AAPT_LEFT_TOE_BASE\"] = 21] = \"AAPT_LEFT_TOE_BASE\";\n AvatarAnchorPointType[AvatarAnchorPointType[\"AAPT_RIGHT_UP_LEG\"] = 22] = \"AAPT_RIGHT_UP_LEG\";\n AvatarAnchorPointType[AvatarAnchorPointType[\"AAPT_RIGHT_LEG\"] = 23] = \"AAPT_RIGHT_LEG\";\n AvatarAnchorPointType[AvatarAnchorPointType[\"AAPT_RIGHT_FOOT\"] = 24] = \"AAPT_RIGHT_FOOT\";\n AvatarAnchorPointType[AvatarAnchorPointType[\"AAPT_RIGHT_TOE_BASE\"] = 25] = \"AAPT_RIGHT_TOE_BASE\";\n})(AvatarAnchorPointType || (AvatarAnchorPointType = {}));\nfunction createBasePBAvatarAttach() {\n return { avatarId: undefined, anchorPointId: 0 };\n}\n/**\n * @public\n */\nexport var PBAvatarAttach;\n(function (PBAvatarAttach) {\n function encode(message, writer = _m0.Writer.create()) {\n if (message.avatarId !== undefined) {\n writer.uint32(10).string(message.avatarId);\n }\n if (message.anchorPointId !== 0) {\n writer.uint32(16).int32(message.anchorPointId);\n }\n return writer;\n }\n PBAvatarAttach.encode = encode;\n function decode(input, length) {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBasePBAvatarAttach();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n message.avatarId = reader.string();\n continue;\n case 2:\n if (tag !== 16) {\n break;\n }\n message.anchorPointId = reader.int32();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n }\n PBAvatarAttach.decode = decode;\n})(PBAvatarAttach || (PBAvatarAttach = {}));\n", "import { PBAvatarAttach } from './pb/decentraland/sdk/components/avatar_attach.gen';\n/**\n * @internal\n */\nexport const AvatarAttachSchema = {\n COMPONENT_ID: 1073,\n serialize(value, builder) {\n const writer = PBAvatarAttach.encode(value);\n const buffer = new Uint8Array(writer.finish(), 0, writer.len);\n builder.writeBuffer(buffer, false);\n },\n deserialize(reader) {\n return PBAvatarAttach.decode(reader.buffer(), reader.remainingBytes());\n },\n create() {\n // TODO: this is a hack.\n return PBAvatarAttach.decode(new Uint8Array());\n },\n jsonSchema: {\n type: \"object\",\n properties: {},\n serializationType: \"protocol-buffer\",\n protocolBuffer: \"PBAvatarAttach\"\n }\n};\n", "/* eslint-disable */\nimport _m0 from \"protobufjs/minimal\";\nimport { Color3 } from \"../../common/colors.gen\";\nconst protobufPackageSarasa = \"decentraland.sdk.components\";\nfunction createBasePBAvatarBase() {\n return { skinColor: undefined, eyesColor: undefined, hairColor: undefined, bodyShapeUrn: \"\", name: \"\" };\n}\n/**\n * @public\n */\nexport var PBAvatarBase;\n(function (PBAvatarBase) {\n function encode(message, writer = _m0.Writer.create()) {\n if (message.skinColor !== undefined) {\n Color3.encode(message.skinColor, writer.uint32(10).fork()).ldelim();\n }\n if (message.eyesColor !== undefined) {\n Color3.encode(message.eyesColor, writer.uint32(18).fork()).ldelim();\n }\n if (message.hairColor !== undefined) {\n Color3.encode(message.hairColor, writer.uint32(26).fork()).ldelim();\n }\n if (message.bodyShapeUrn !== \"\") {\n writer.uint32(34).string(message.bodyShapeUrn);\n }\n if (message.name !== \"\") {\n writer.uint32(42).string(message.name);\n }\n return writer;\n }\n PBAvatarBase.encode = encode;\n function decode(input, length) {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBasePBAvatarBase();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n message.skinColor = Color3.decode(reader, reader.uint32());\n continue;\n case 2:\n if (tag !== 18) {\n break;\n }\n message.eyesColor = Color3.decode(reader, reader.uint32());\n continue;\n case 3:\n if (tag !== 26) {\n break;\n }\n message.hairColor = Color3.decode(reader, reader.uint32());\n continue;\n case 4:\n if (tag !== 34) {\n break;\n }\n message.bodyShapeUrn = reader.string();\n continue;\n case 5:\n if (tag !== 42) {\n break;\n }\n message.name = reader.string();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n }\n PBAvatarBase.decode = decode;\n})(PBAvatarBase || (PBAvatarBase = {}));\n", "/* eslint-disable */\nimport _m0 from \"protobufjs/minimal\";\nconst protobufPackageSarasa = \"decentraland.common\";\nfunction createBaseColor3() {\n return { r: 0, g: 0, b: 0 };\n}\n/**\n * @public\n */\nexport var Color3;\n(function (Color3) {\n function encode(message, writer = _m0.Writer.create()) {\n if (message.r !== 0) {\n writer.uint32(13).float(message.r);\n }\n if (message.g !== 0) {\n writer.uint32(21).float(message.g);\n }\n if (message.b !== 0) {\n writer.uint32(29).float(message.b);\n }\n return writer;\n }\n Color3.encode = encode;\n function decode(input, length) {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseColor3();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 13) {\n break;\n }\n message.r = reader.float();\n continue;\n case 2:\n if (tag !== 21) {\n break;\n }\n message.g = reader.float();\n continue;\n case 3:\n if (tag !== 29) {\n break;\n }\n message.b = reader.float();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n }\n Color3.decode = decode;\n})(Color3 || (Color3 = {}));\nfunction createBaseColor4() {\n return { r: 0, g: 0, b: 0, a: 0 };\n}\n/**\n * @public\n */\nexport var Color4;\n(function (Color4) {\n function encode(message, writer = _m0.Writer.create()) {\n if (message.r !== 0) {\n writer.uint32(13).float(message.r);\n }\n if (message.g !== 0) {\n writer.uint32(21).float(message.g);\n }\n if (message.b !== 0) {\n writer.uint32(29).float(message.b);\n }\n if (message.a !== 0) {\n writer.uint32(37).float(message.a);\n }\n return writer;\n }\n Color4.encode = encode;\n function decode(input, length) {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseColor4();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 13) {\n break;\n }\n message.r = reader.float();\n continue;\n case 2:\n if (tag !== 21) {\n break;\n }\n message.g = reader.float();\n continue;\n case 3:\n if (tag !== 29) {\n break;\n }\n message.b = reader.float();\n continue;\n case 4:\n if (tag !== 37) {\n break;\n }\n message.a = reader.float();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n }\n Color4.decode = decode;\n})(Color4 || (Color4 = {}));\n", "import { PBAvatarBase } from './pb/decentraland/sdk/components/avatar_base.gen';\n/**\n * @internal\n */\nexport const AvatarBaseSchema = {\n COMPONENT_ID: 1087,\n serialize(value, builder) {\n const writer = PBAvatarBase.encode(value);\n const buffer = new Uint8Array(writer.finish(), 0, writer.len);\n builder.writeBuffer(buffer, false);\n },\n deserialize(reader) {\n return PBAvatarBase.decode(reader.buffer(), reader.remainingBytes());\n },\n create() {\n // TODO: this is a hack.\n return PBAvatarBase.decode(new Uint8Array());\n },\n jsonSchema: {\n type: \"object\",\n properties: {},\n serializationType: \"protocol-buffer\",\n protocolBuffer: \"PBAvatarBase\"\n }\n};\n", "/* eslint-disable */\nimport _m0 from \"protobufjs/minimal\";\nconst protobufPackageSarasa = \"decentraland.sdk.components\";\nfunction createBasePBAvatarEmoteCommand() {\n return { emoteUrn: \"\", loop: false, timestamp: 0 };\n}\n/**\n * @public\n */\nexport var PBAvatarEmoteCommand;\n(function (PBAvatarEmoteCommand) {\n function encode(message, writer = _m0.Writer.create()) {\n if (message.emoteUrn !== \"\") {\n writer.uint32(10).string(message.emoteUrn);\n }\n if (message.loop === true) {\n writer.uint32(16).bool(message.loop);\n }\n if (message.timestamp !== 0) {\n writer.uint32(24).uint32(message.timestamp);\n }\n return writer;\n }\n PBAvatarEmoteCommand.encode = encode;\n function decode(input, length) {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBasePBAvatarEmoteCommand();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n message.emoteUrn = reader.string();\n continue;\n case 2:\n if (tag !== 16) {\n break;\n }\n message.loop = reader.bool();\n continue;\n case 3:\n if (tag !== 24) {\n break;\n }\n message.timestamp = reader.uint32();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n }\n PBAvatarEmoteCommand.decode = decode;\n})(PBAvatarEmoteCommand || (PBAvatarEmoteCommand = {}));\n", "import { PBAvatarEmoteCommand } from './pb/decentraland/sdk/components/avatar_emote_command.gen';\n/**\n * @internal\n */\nexport const AvatarEmoteCommandSchema = {\n COMPONENT_ID: 1088,\n serialize(value, builder) {\n const writer = PBAvatarEmoteCommand.encode(value);\n const buffer = new Uint8Array(writer.finish(), 0, writer.len);\n builder.writeBuffer(buffer, false);\n },\n deserialize(reader) {\n return PBAvatarEmoteCommand.decode(reader.buffer(), reader.remainingBytes());\n },\n create() {\n // TODO: this is a hack.\n return PBAvatarEmoteCommand.decode(new Uint8Array());\n },\n jsonSchema: {\n type: \"object\",\n properties: {},\n serializationType: \"protocol-buffer\",\n protocolBuffer: \"PBAvatarEmoteCommand\"\n }\n};\n", "/* eslint-disable */\nimport _m0 from \"protobufjs/minimal\";\nconst protobufPackageSarasa = \"decentraland.sdk.components\";\nfunction createBasePBAvatarEquippedData() {\n return { wearableUrns: [], emoteUrns: [] };\n}\n/**\n * @public\n */\nexport var PBAvatarEquippedData;\n(function (PBAvatarEquippedData) {\n function encode(message, writer = _m0.Writer.create()) {\n for (const v of message.wearableUrns) {\n writer.uint32(10).string(v);\n }\n for (const v of message.emoteUrns) {\n writer.uint32(18).string(v);\n }\n return writer;\n }\n PBAvatarEquippedData.encode = encode;\n function decode(input, length) {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBasePBAvatarEquippedData();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n message.wearableUrns.push(reader.string());\n continue;\n case 2:\n if (tag !== 18) {\n break;\n }\n message.emoteUrns.push(reader.string());\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n }\n PBAvatarEquippedData.decode = decode;\n})(PBAvatarEquippedData || (PBAvatarEquippedData = {}));\n", "import { PBAvatarEquippedData } from './pb/decentraland/sdk/components/avatar_equipped_data.gen';\n/**\n * @internal\n */\nexport const AvatarEquippedDataSchema = {\n COMPONENT_ID: 1091,\n serialize(value, builder) {\n const writer = PBAvatarEquippedData.encode(value);\n const buffer = new Uint8Array(writer.finish(), 0, writer.len);\n builder.writeBuffer(buffer, false);\n },\n deserialize(reader) {\n return PBAvatarEquippedData.decode(reader.buffer(), reader.remainingBytes());\n },\n create() {\n // TODO: this is a hack.\n return PBAvatarEquippedData.decode(new Uint8Array());\n },\n jsonSchema: {\n type: \"object\",\n properties: {},\n serializationType: \"protocol-buffer\",\n protocolBuffer: \"PBAvatarEquippedData\"\n }\n};\n", "/* eslint-disable */\nimport _m0 from \"protobufjs/minimal\";\nimport { Vector3 } from \"../../common/vectors.gen\";\nconst protobufPackageSarasa = \"decentraland.sdk.components\";\n/** AvatarModifierType is an effect that should be applied to avatars inside the region. */\n/**\n * @public\n */\nexport var AvatarModifierType;\n(function (AvatarModifierType) {\n /** AMT_HIDE_AVATARS - avatars are invisible */\n AvatarModifierType[AvatarModifierType[\"AMT_HIDE_AVATARS\"] = 0] = \"AMT_HIDE_AVATARS\";\n /** AMT_DISABLE_PASSPORTS - selecting (e.g. clicking) an avatar will not bring up their profile. */\n AvatarModifierType[AvatarModifierType[\"AMT_DISABLE_PASSPORTS\"] = 1] = \"AMT_DISABLE_PASSPORTS\";\n})(AvatarModifierType || (AvatarModifierType = {}));\nfunction createBasePBAvatarModifierArea() {\n return { area: undefined, excludeIds: [], modifiers: [] };\n}\n/**\n * @public\n */\nexport var PBAvatarModifierArea;\n(function (PBAvatarModifierArea) {\n function encode(message, writer = _m0.Writer.create()) {\n if (message.area !== undefined) {\n Vector3.encode(message.area, writer.uint32(10).fork()).ldelim();\n }\n for (const v of message.excludeIds) {\n writer.uint32(18).string(v);\n }\n writer.uint32(26).fork();\n for (const v of message.modifiers) {\n writer.int32(v);\n }\n writer.ldelim();\n return writer;\n }\n PBAvatarModifierArea.encode = encode;\n function decode(input, length) {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBasePBAvatarModifierArea();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n message.area = Vector3.decode(reader, reader.uint32());\n continue;\n case 2:\n if (tag !== 18) {\n break;\n }\n message.excludeIds.push(reader.string());\n continue;\n case 3:\n if (tag === 24) {\n message.modifiers.push(reader.int32());\n continue;\n }\n if (tag === 26) {\n const end2 = reader.uint32() + reader.pos;\n while (reader.pos < end2) {\n message.modifiers.push(reader.int32());\n }\n continue;\n }\n break;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n }\n PBAvatarModifierArea.decode = decode;\n})(PBAvatarModifierArea || (PBAvatarModifierArea = {}));\n", "/* eslint-disable */\nimport _m0 from \"protobufjs/minimal\";\nconst protobufPackageSarasa = \"decentraland.common\";\nfunction createBasePosition() {\n return { x: 0, y: 0, z: 0 };\n}\n/**\n * @public\n */\nexport var Position;\n(function (Position) {\n function encode(message, writer = _m0.Writer.create()) {\n if (message.x !== 0) {\n writer.uint32(13).float(message.x);\n }\n if (message.y !== 0) {\n writer.uint32(21).float(message.y);\n }\n if (message.z !== 0) {\n writer.uint32(29).float(message.z);\n }\n return writer;\n }\n Position.encode = encode;\n function decode(input, length) {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBasePosition();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 13) {\n break;\n }\n message.x = reader.float();\n continue;\n case 2:\n if (tag !== 21) {\n break;\n }\n message.y = reader.float();\n continue;\n case 3:\n if (tag !== 29) {\n break;\n }\n message.z = reader.float();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n }\n Position.decode = decode;\n})(Position || (Position = {}));\nfunction createBaseVector3() {\n return { x: 0, y: 0, z: 0 };\n}\n/**\n * @public\n */\nexport var Vector3;\n(function (Vector3) {\n function encode(message, writer = _m0.Writer.create()) {\n if (message.x !== 0) {\n writer.uint32(13).float(message.x);\n }\n if (message.y !== 0) {\n writer.uint32(21).float(message.y);\n }\n if (message.z !== 0) {\n writer.uint32(29).float(message.z);\n }\n return writer;\n }\n Vector3.encode = encode;\n function decode(input, length) {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseVector3();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 13) {\n break;\n }\n message.x = reader.float();\n continue;\n case 2:\n if (tag !== 21) {\n break;\n }\n message.y = reader.float();\n continue;\n case 3:\n if (tag !== 29) {\n break;\n }\n message.z = reader.float();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n }\n Vector3.decode = decode;\n})(Vector3 || (Vector3 = {}));\nfunction createBaseVector2() {\n return { x: 0, y: 0 };\n}\n/**\n * @public\n */\nexport var Vector2;\n(function (Vector2) {\n function encode(message, writer = _m0.Writer.create()) {\n if (message.x !== 0) {\n writer.uint32(13).float(message.x);\n }\n if (message.y !== 0) {\n writer.uint32(21).float(message.y);\n }\n return writer;\n }\n Vector2.encode = encode;\n function decode(input, length) {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseVector2();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 13) {\n break;\n }\n message.x = reader.float();\n continue;\n case 2:\n if (tag !== 21) {\n break;\n }\n message.y = reader.float();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n }\n Vector2.decode = decode;\n})(Vector2 || (Vector2 = {}));\nfunction createBaseQuaternion() {\n return { x: 0, y: 0, z: 0, w: 0 };\n}\n/**\n * @public\n */\nexport var Quaternion;\n(function (Quaternion) {\n function encode(message, writer = _m0.Writer.create()) {\n if (message.x !== 0) {\n writer.uint32(13).float(message.x);\n }\n if (message.y !== 0) {\n writer.uint32(21).float(message.y);\n }\n if (message.z !== 0) {\n writer.uint32(29).float(message.z);\n }\n if (message.w !== 0) {\n writer.uint32(37).float(message.w);\n }\n return writer;\n }\n Quaternion.encode = encode;\n function decode(input, length) {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseQuaternion();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 13) {\n break;\n }\n message.x = reader.float();\n continue;\n case 2:\n if (tag !== 21) {\n break;\n }\n message.y = reader.float();\n continue;\n case 3:\n if (tag !== 29) {\n break;\n }\n message.z = reader.float();\n continue;\n case 4:\n if (tag !== 37) {\n break;\n }\n message.w = reader.float();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n }\n Quaternion.decode = decode;\n})(Quaternion || (Quaternion = {}));\n", "import { PBAvatarModifierArea } from './pb/decentraland/sdk/components/avatar_modifier_area.gen';\n/**\n * @internal\n */\nexport const AvatarModifierAreaSchema = {\n COMPONENT_ID: 1070,\n serialize(value, builder) {\n const writer = PBAvatarModifierArea.encode(value);\n const buffer = new Uint8Array(writer.finish(), 0, writer.len);\n builder.writeBuffer(buffer, false);\n },\n deserialize(reader) {\n return PBAvatarModifierArea.decode(reader.buffer(), reader.remainingBytes());\n },\n create() {\n // TODO: this is a hack.\n return PBAvatarModifierArea.decode(new Uint8Array());\n },\n jsonSchema: {\n type: \"object\",\n properties: {},\n serializationType: \"protocol-buffer\",\n protocolBuffer: \"PBAvatarModifierArea\"\n }\n};\n", "/* eslint-disable */\nimport Long from \"long\";\nimport _m0 from \"protobufjs/minimal\";\nimport { Color3 } from \"../../common/colors.gen\";\nconst protobufPackageSarasa = \"decentraland.sdk.components\";\nfunction createBasePBAvatarShape() {\n return {\n id: \"\",\n name: undefined,\n bodyShape: undefined,\n skinColor: undefined,\n hairColor: undefined,\n eyeColor: undefined,\n expressionTriggerId: undefined,\n expressionTriggerTimestamp: undefined,\n talking: undefined,\n wearables: [],\n emotes: [],\n showOnlyWearables: undefined,\n };\n}\n/**\n * @public\n */\nexport var PBAvatarShape;\n(function (PBAvatarShape) {\n function encode(message, writer = _m0.Writer.create()) {\n if (message.id !== \"\") {\n writer.uint32(10).string(message.id);\n }\n if (message.name !== undefined) {\n writer.uint32(18).string(message.name);\n }\n if (message.bodyShape !== undefined) {\n writer.uint32(26).string(message.bodyShape);\n }\n if (message.skinColor !== undefined) {\n Color3.encode(message.skinColor, writer.uint32(34).fork()).ldelim();\n }\n if (message.hairColor !== undefined) {\n Color3.encode(message.hairColor, writer.uint32(42).fork()).ldelim();\n }\n if (message.eyeColor !== undefined) {\n Color3.encode(message.eyeColor, writer.uint32(50).fork()).ldelim();\n }\n if (message.expressionTriggerId !== undefined) {\n writer.uint32(58).string(message.expressionTriggerId);\n }\n if (message.expressionTriggerTimestamp !== undefined) {\n writer.uint32(64).int64(message.expressionTriggerTimestamp);\n }\n if (message.talking !== undefined) {\n writer.uint32(72).bool(message.talking);\n }\n for (const v of message.wearables) {\n writer.uint32(82).string(v);\n }\n for (const v of message.emotes) {\n writer.uint32(90).string(v);\n }\n if (message.showOnlyWearables !== undefined) {\n writer.uint32(96).bool(message.showOnlyWearables);\n }\n return writer;\n }\n PBAvatarShape.encode = encode;\n function decode(input, length) {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBasePBAvatarShape();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n message.id = reader.string();\n continue;\n case 2:\n if (tag !== 18) {\n break;\n }\n message.name = reader.string();\n continue;\n case 3:\n if (tag !== 26) {\n break;\n }\n message.bodyShape = reader.string();\n continue;\n case 4:\n if (tag !== 34) {\n break;\n }\n message.skinColor = Color3.decode(reader, reader.uint32());\n continue;\n case 5:\n if (tag !== 42) {\n break;\n }\n message.hairColor = Color3.decode(reader, reader.uint32());\n continue;\n case 6:\n if (tag !== 50) {\n break;\n }\n message.eyeColor = Color3.decode(reader, reader.uint32());\n continue;\n case 7:\n if (tag !== 58) {\n break;\n }\n message.expressionTriggerId = reader.string();\n continue;\n case 8:\n if (tag !== 64) {\n break;\n }\n message.expressionTriggerTimestamp = longToNumber(reader.int64());\n continue;\n case 9:\n if (tag !== 72) {\n break;\n }\n message.talking = reader.bool();\n continue;\n case 10:\n if (tag !== 82) {\n break;\n }\n message.wearables.push(reader.string());\n continue;\n case 11:\n if (tag !== 90) {\n break;\n }\n message.emotes.push(reader.string());\n continue;\n case 12:\n if (tag !== 96) {\n break;\n }\n message.showOnlyWearables = reader.bool();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n }\n PBAvatarShape.decode = decode;\n})(PBAvatarShape || (PBAvatarShape = {}));\nconst tsProtoGlobalThis = (() => {\n if (typeof globalThis !== \"undefined\") {\n return globalThis;\n }\n if (typeof self !== \"undefined\") {\n return self;\n }\n if (typeof window !== \"undefined\") {\n return window;\n }\n if (typeof global !== \"undefined\") {\n return global;\n }\n throw \"Unable to locate global object\";\n})();\nfunction longToNumber(long) {\n if (long.gt(Number.MAX_SAFE_INTEGER)) {\n throw new tsProtoGlobalThis.Error(\"Value is larger than Number.MAX_SAFE_INTEGER\");\n }\n return long.toNumber();\n}\nif (_m0.util.Long !== Long) {\n _m0.util.Long = Long;\n _m0.configure();\n}\n", "import { PBAvatarShape } from './pb/decentraland/sdk/components/avatar_shape.gen';\n/**\n * @internal\n */\nexport const AvatarShapeSchema = {\n COMPONENT_ID: 1080,\n serialize(value, builder) {\n const writer = PBAvatarShape.encode(value);\n const buffer = new Uint8Array(writer.finish(), 0, writer.len);\n builder.writeBuffer(buffer, false);\n },\n deserialize(reader) {\n return PBAvatarShape.decode(reader.buffer(), reader.remainingBytes());\n },\n create() {\n // TODO: this is a hack.\n return PBAvatarShape.decode(new Uint8Array());\n },\n jsonSchema: {\n type: \"object\",\n properties: {},\n serializationType: \"protocol-buffer\",\n protocolBuffer: \"PBAvatarShape\"\n }\n};\n", "/* eslint-disable */\nimport _m0 from \"protobufjs/minimal\";\nconst protobufPackageSarasa = \"decentraland.sdk.components\";\n/**\n * BillboardMode indicates one or more axis for automatic rotation, in OR-able bit flag form.\n * Only the values below and the (BM_X | BM_Y) combination are valid.\n */\n/**\n * @public\n */\nexport var BillboardMode;\n(function (BillboardMode) {\n BillboardMode[BillboardMode[\"BM_NONE\"] = 0] = \"BM_NONE\";\n BillboardMode[BillboardMode[\"BM_X\"] = 1] = \"BM_X\";\n BillboardMode[BillboardMode[\"BM_Y\"] = 2] = \"BM_Y\";\n BillboardMode[BillboardMode[\"BM_Z\"] = 4] = \"BM_Z\";\n /** BM_ALL - bitwise combination BM_X | BM_Y | BM_Z */\n BillboardMode[BillboardMode[\"BM_ALL\"] = 7] = \"BM_ALL\";\n})(BillboardMode || (BillboardMode = {}));\nfunction createBasePBBillboard() {\n return { billboardMode: undefined };\n}\n/**\n * @public\n */\nexport var PBBillboard;\n(function (PBBillboard) {\n function encode(message, writer = _m0.Writer.create()) {\n if (message.billboardMode !== undefined) {\n writer.uint32(8).int32(message.billboardMode);\n }\n return writer;\n }\n PBBillboard.encode = encode;\n function decode(input, length) {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBasePBBillboard();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 8) {\n break;\n }\n message.billboardMode = reader.int32();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n }\n PBBillboard.decode = decode;\n})(PBBillboard || (PBBillboard = {}));\n", "import { PBBillboard } from './pb/decentraland/sdk/components/billboard.gen';\n/**\n * @internal\n */\nexport const BillboardSchema = {\n COMPONENT_ID: 1090,\n serialize(value, builder) {\n const writer = PBBillboard.encode(value);\n const buffer = new Uint8Array(writer.finish(), 0, writer.len);\n builder.writeBuffer(buffer, false);\n },\n deserialize(reader) {\n return PBBillboard.decode(reader.buffer(), reader.remainingBytes());\n },\n create() {\n // TODO: this is a hack.\n return PBBillboard.decode(new Uint8Array());\n },\n jsonSchema: {\n type: \"object\",\n properties: {},\n serializationType: \"protocol-buffer\",\n protocolBuffer: \"PBBillboard\"\n }\n};\n", "/* eslint-disable */\nimport _m0 from \"protobufjs/minimal\";\nconst protobufPackageSarasa = \"decentraland.sdk.components\";\nfunction createBasePBCameraMode() {\n return { mode: 0 };\n}\n/**\n * @public\n */\nexport var PBCameraMode;\n(function (PBCameraMode) {\n function encode(message, writer = _m0.Writer.create()) {\n if (message.mode !== 0) {\n writer.uint32(8).int32(message.mode);\n }\n return writer;\n }\n PBCameraMode.encode = encode;\n function decode(input, length) {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBasePBCameraMode();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 8) {\n break;\n }\n message.mode = reader.int32();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n }\n PBCameraMode.decode = decode;\n})(PBCameraMode || (PBCameraMode = {}));\n", "import { PBCameraMode } from './pb/decentraland/sdk/components/camera_mode.gen';\n/**\n * @internal\n */\nexport const CameraModeSchema = {\n COMPONENT_ID: 1072,\n serialize(value, builder) {\n const writer = PBCameraMode.encode(value);\n const buffer = new Uint8Array(writer.finish(), 0, writer.len);\n builder.writeBuffer(buffer, false);\n },\n deserialize(reader) {\n return PBCameraMode.decode(reader.buffer(), reader.remainingBytes());\n },\n create() {\n // TODO: this is a hack.\n return PBCameraMode.decode(new Uint8Array());\n },\n jsonSchema: {\n type: \"object\",\n properties: {},\n serializationType: \"protocol-buffer\",\n protocolBuffer: \"PBCameraMode\"\n }\n};\n", "/* eslint-disable */\nimport _m0 from \"protobufjs/minimal\";\nimport { Vector3 } from \"../../common/vectors.gen\";\nconst protobufPackageSarasa = \"decentraland.sdk.components\";\nfunction createBasePBCameraModeArea() {\n return { area: undefined, mode: 0 };\n}\n/**\n * @public\n */\nexport var PBCameraModeArea;\n(function (PBCameraModeArea) {\n function encode(message, writer = _m0.Writer.create()) {\n if (message.area !== undefined) {\n Vector3.encode(message.area, writer.uint32(10).fork()).ldelim();\n }\n if (message.mode !== 0) {\n writer.uint32(16).int32(message.mode);\n }\n return writer;\n }\n PBCameraModeArea.encode = encode;\n function decode(input, length) {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBasePBCameraModeArea();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n message.area = Vector3.decode(reader, reader.uint32());\n continue;\n case 2:\n if (tag !== 16) {\n break;\n }\n message.mode = reader.int32();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n }\n PBCameraModeArea.decode = decode;\n})(PBCameraModeArea || (PBCameraModeArea = {}));\n", "import { PBCameraModeArea } from './pb/decentraland/sdk/components/camera_mode_area.gen';\n/**\n * @internal\n */\nexport const CameraModeAreaSchema = {\n COMPONENT_ID: 1071,\n serialize(value, builder) {\n const writer = PBCameraModeArea.encode(value);\n const buffer = new Uint8Array(writer.finish(), 0, writer.len);\n builder.writeBuffer(buffer, false);\n },\n deserialize(reader) {\n return PBCameraModeArea.decode(reader.buffer(), reader.remainingBytes());\n },\n create() {\n // TODO: this is a hack.\n return PBCameraModeArea.decode(new Uint8Array());\n },\n jsonSchema: {\n type: \"object\",\n properties: {},\n serializationType: \"protocol-buffer\",\n protocolBuffer: \"PBCameraModeArea\"\n }\n};\n", "/* eslint-disable */\nimport _m0 from \"protobufjs/minimal\";\nconst protobufPackageSarasa = \"decentraland.sdk.components\";\nfunction createBasePBEngineInfo() {\n return { frameNumber: 0, totalRuntime: 0, tickNumber: 0 };\n}\n/**\n * @public\n */\nexport var PBEngineInfo;\n(function (PBEngineInfo) {\n function encode(message, writer = _m0.Writer.create()) {\n if (message.frameNumber !== 0) {\n writer.uint32(8).uint32(message.frameNumber);\n }\n if (message.totalRuntime !== 0) {\n writer.uint32(21).float(message.totalRuntime);\n }\n if (message.tickNumber !== 0) {\n writer.uint32(24).uint32(message.tickNumber);\n }\n return writer;\n }\n PBEngineInfo.encode = encode;\n function decode(input, length) {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBasePBEngineInfo();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 8) {\n break;\n }\n message.frameNumber = reader.uint32();\n continue;\n case 2:\n if (tag !== 21) {\n break;\n }\n message.totalRuntime = reader.float();\n continue;\n case 3:\n if (tag !== 24) {\n break;\n }\n message.tickNumber = reader.uint32();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n }\n PBEngineInfo.decode = decode;\n})(PBEngineInfo || (PBEngineInfo = {}));\n", "import { PBEngineInfo } from './pb/decentraland/sdk/components/engine_info.gen';\n/**\n * @internal\n */\nexport const EngineInfoSchema = {\n COMPONENT_ID: 1048,\n serialize(value, builder) {\n const writer = PBEngineInfo.encode(value);\n const buffer = new Uint8Array(writer.finish(), 0, writer.len);\n builder.writeBuffer(buffer, false);\n },\n deserialize(reader) {\n return PBEngineInfo.decode(reader.buffer(), reader.remainingBytes());\n },\n create() {\n // TODO: this is a hack.\n return PBEngineInfo.decode(new Uint8Array());\n },\n jsonSchema: {\n type: \"object\",\n properties: {},\n serializationType: \"protocol-buffer\",\n protocolBuffer: \"PBEngineInfo\"\n }\n};\n", "/* eslint-disable */\nimport _m0 from \"protobufjs/minimal\";\nconst protobufPackageSarasa = \"decentraland.sdk.components\";\nfunction createBasePBGltfContainer() {\n return { src: \"\", visibleMeshesCollisionMask: undefined, invisibleMeshesCollisionMask: undefined };\n}\n/**\n * @public\n */\nexport var PBGltfContainer;\n(function (PBGltfContainer) {\n function encode(message, writer = _m0.Writer.create()) {\n if (message.src !== \"\") {\n writer.uint32(10).string(message.src);\n }\n if (message.visibleMeshesCollisionMask !== undefined) {\n writer.uint32(32).uint32(message.visibleMeshesCollisionMask);\n }\n if (message.invisibleMeshesCollisionMask !== undefined) {\n writer.uint32(40).uint32(message.invisibleMeshesCollisionMask);\n }\n return writer;\n }\n PBGltfContainer.encode = encode;\n function decode(input, length) {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBasePBGltfContainer();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n message.src = reader.string();\n continue;\n case 4:\n if (tag !== 32) {\n break;\n }\n message.visibleMeshesCollisionMask = reader.uint32();\n continue;\n case 5:\n if (tag !== 40) {\n break;\n }\n message.invisibleMeshesCollisionMask = reader.uint32();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n }\n PBGltfContainer.decode = decode;\n})(PBGltfContainer || (PBGltfContainer = {}));\n", "import { PBGltfContainer } from './pb/decentraland/sdk/components/gltf_container.gen';\n/**\n * @internal\n */\nexport const GltfContainerSchema = {\n COMPONENT_ID: 1041,\n serialize(value, builder) {\n const writer = PBGltfContainer.encode(value);\n const buffer = new Uint8Array(writer.finish(), 0, writer.len);\n builder.writeBuffer(buffer, false);\n },\n deserialize(reader) {\n return PBGltfContainer.decode(reader.buffer(), reader.remainingBytes());\n },\n create() {\n // TODO: this is a hack.\n return PBGltfContainer.decode(new Uint8Array());\n },\n jsonSchema: {\n type: \"object\",\n properties: {},\n serializationType: \"protocol-buffer\",\n protocolBuffer: \"PBGltfContainer\"\n }\n};\n", "/* eslint-disable */\nimport _m0 from \"protobufjs/minimal\";\nconst protobufPackageSarasa = \"decentraland.sdk.components\";\nfunction createBasePBGltfContainerLoadingState() {\n return { currentState: 0 };\n}\n/**\n * @public\n */\nexport var PBGltfContainerLoadingState;\n(function (PBGltfContainerLoadingState) {\n function encode(message, writer = _m0.Writer.create()) {\n if (message.currentState !== 0) {\n writer.uint32(8).int32(message.currentState);\n }\n return writer;\n }\n PBGltfContainerLoadingState.encode = encode;\n function decode(input, length) {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBasePBGltfContainerLoadingState();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 8) {\n break;\n }\n message.currentState = reader.int32();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n }\n PBGltfContainerLoadingState.decode = decode;\n})(PBGltfContainerLoadingState || (PBGltfContainerLoadingState = {}));\n", "import { PBGltfContainerLoadingState } from './pb/decentraland/sdk/components/gltf_container_loading_state.gen';\n/**\n * @internal\n */\nexport const GltfContainerLoadingStateSchema = {\n COMPONENT_ID: 1049,\n serialize(value, builder) {\n const writer = PBGltfContainerLoadingState.encode(value);\n const buffer = new Uint8Array(writer.finish(), 0, writer.len);\n builder.writeBuffer(buffer, false);\n },\n deserialize(reader) {\n return PBGltfContainerLoadingState.decode(reader.buffer(), reader.remainingBytes());\n },\n create() {\n // TODO: this is a hack.\n return PBGltfContainerLoadingState.decode(new Uint8Array());\n },\n jsonSchema: {\n type: \"object\",\n properties: {},\n serializationType: \"protocol-buffer\",\n protocolBuffer: \"PBGltfContainerLoadingState\"\n }\n};\n", "/* eslint-disable */\nimport _m0 from \"protobufjs/minimal\";\nimport { PBMaterial } from \"./material.gen\";\nconst protobufPackageSarasa = \"decentraland.sdk.components\";\nfunction createBasePBGltfNodeModifiers() {\n return { modifiers: [] };\n}\n/**\n * @public\n */\nexport var PBGltfNodeModifiers;\n(function (PBGltfNodeModifiers) {\n function encode(message, writer = _m0.Writer.create()) {\n for (const v of message.modifiers) {\n PBGltfNodeModifiers_GltfNodeModifier.encode(v, writer.uint32(10).fork()).ldelim();\n }\n return writer;\n }\n PBGltfNodeModifiers.encode = encode;\n function decode(input, length) {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBasePBGltfNodeModifiers();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n message.modifiers.push(PBGltfNodeModifiers_GltfNodeModifier.decode(reader, reader.uint32()));\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n }\n PBGltfNodeModifiers.decode = decode;\n})(PBGltfNodeModifiers || (PBGltfNodeModifiers = {}));\nfunction createBasePBGltfNodeModifiers_GltfNodeModifier() {\n return { path: \"\", castShadows: undefined, material: undefined };\n}\n/**\n * @public\n */\nexport var PBGltfNodeModifiers_GltfNodeModifier;\n(function (PBGltfNodeModifiers_GltfNodeModifier) {\n function encode(message, writer = _m0.Writer.create()) {\n if (message.path !== \"\") {\n writer.uint32(10).string(message.path);\n }\n if (message.castShadows !== undefined) {\n writer.uint32(16).bool(message.castShadows);\n }\n if (message.material !== undefined) {\n PBMaterial.encode(message.material, writer.uint32(26).fork()).ldelim();\n }\n return writer;\n }\n PBGltfNodeModifiers_GltfNodeModifier.encode = encode;\n function decode(input, length) {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBasePBGltfNodeModifiers_GltfNodeModifier();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n message.path = reader.string();\n continue;\n case 2:\n if (tag !== 16) {\n break;\n }\n message.castShadows = reader.bool();\n continue;\n case 3:\n if (tag !== 26) {\n break;\n }\n message.material = PBMaterial.decode(reader, reader.uint32());\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n }\n PBGltfNodeModifiers_GltfNodeModifier.decode = decode;\n})(PBGltfNodeModifiers_GltfNodeModifier || (PBGltfNodeModifiers_GltfNodeModifier = {}));\n", "/* eslint-disable */\nimport _m0 from \"protobufjs/minimal\";\nimport { Color3, Color4 } from \"../../common/colors.gen\";\nimport { TextureUnion } from \"../../common/texture.gen\";\nconst protobufPackageSarasa = \"decentraland.sdk.components\";\n/**\n * @public\n */\nexport var MaterialTransparencyMode;\n(function (MaterialTransparencyMode) {\n MaterialTransparencyMode[MaterialTransparencyMode[\"MTM_OPAQUE\"] = 0] = \"MTM_OPAQUE\";\n MaterialTransparencyMode[MaterialTransparencyMode[\"MTM_ALPHA_TEST\"] = 1] = \"MTM_ALPHA_TEST\";\n MaterialTransparencyMode[MaterialTransparencyMode[\"MTM_ALPHA_BLEND\"] = 2] = \"MTM_ALPHA_BLEND\";\n MaterialTransparencyMode[MaterialTransparencyMode[\"MTM_ALPHA_TEST_AND_ALPHA_BLEND\"] = 3] = \"MTM_ALPHA_TEST_AND_ALPHA_BLEND\";\n MaterialTransparencyMode[MaterialTransparencyMode[\"MTM_AUTO\"] = 4] = \"MTM_AUTO\";\n})(MaterialTransparencyMode || (MaterialTransparencyMode = {}));\nfunction createBasePBMaterial() {\n return { material: undefined };\n}\n/**\n * @public\n */\nexport var PBMaterial;\n(function (PBMaterial) {\n function encode(message, writer = _m0.Writer.create()) {\n switch (message.material?.$case) {\n case \"unlit\":\n PBMaterial_UnlitMaterial.encode(message.material.unlit, writer.uint32(10).fork()).ldelim();\n break;\n case \"pbr\":\n PBMaterial_PbrMaterial.encode(message.material.pbr, writer.uint32(18).fork()).ldelim();\n break;\n }\n return writer;\n }\n PBMaterial.encode = encode;\n function decode(input, length) {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBasePBMaterial();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n message.material = { $case: \"unlit\", unlit: PBMaterial_UnlitMaterial.decode(reader, reader.uint32()) };\n continue;\n case 2:\n if (tag !== 18) {\n break;\n }\n message.material = { $case: \"pbr\", pbr: PBMaterial_PbrMaterial.decode(reader, reader.uint32()) };\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n }\n PBMaterial.decode = decode;\n})(PBMaterial || (PBMaterial = {}));\nfunction createBasePBMaterial_UnlitMaterial() {\n return {\n texture: undefined,\n alphaTest: undefined,\n castShadows: undefined,\n diffuseColor: undefined,\n alphaTexture: undefined,\n };\n}\n/**\n * @public\n */\nexport var PBMaterial_UnlitMaterial;\n(function (PBMaterial_UnlitMaterial) {\n function encode(message, writer = _m0.Writer.create()) {\n if (message.texture !== undefined) {\n TextureUnion.encode(message.texture, writer.uint32(10).fork()).ldelim();\n }\n if (message.alphaTest !== undefined) {\n writer.uint32(21).float(message.alphaTest);\n }\n if (message.castShadows !== undefined) {\n writer.uint32(24).bool(message.castShadows);\n }\n if (message.diffuseColor !== undefined) {\n Color4.encode(message.diffuseColor, writer.uint32(34).fork()).ldelim();\n }\n if (message.alphaTexture !== undefined) {\n TextureUnion.encode(message.alphaTexture, writer.uint32(42).fork()).ldelim();\n }\n return writer;\n }\n PBMaterial_UnlitMaterial.encode = encode;\n function decode(input, length) {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBasePBMaterial_UnlitMaterial();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n message.texture = TextureUnion.decode(reader, reader.uint32());\n continue;\n case 2:\n if (tag !== 21) {\n break;\n }\n message.alphaTest = reader.float();\n continue;\n case 3:\n if (tag !== 24) {\n break;\n }\n message.castShadows = reader.bool();\n continue;\n case 4:\n if (tag !== 34) {\n break;\n }\n message.diffuseColor = Color4.decode(reader, reader.uint32());\n continue;\n case 5:\n if (tag !== 42) {\n break;\n }\n message.alphaTexture = TextureUnion.decode(reader, reader.uint32());\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n }\n PBMaterial_UnlitMaterial.decode = decode;\n})(PBMaterial_UnlitMaterial || (PBMaterial_UnlitMaterial = {}));\nfunction createBasePBMaterial_PbrMaterial() {\n return {\n texture: undefined,\n alphaTest: undefined,\n castShadows: undefined,\n alphaTexture: undefined,\n emissiveTexture: undefined,\n bumpTexture: undefined,\n albedoColor: undefined,\n emissiveColor: undefined,\n reflectivityColor: undefined,\n transparencyMode: undefined,\n metallic: undefined,\n roughness: undefined,\n specularIntensity: undefined,\n emissiveIntensity: undefined,\n directIntensity: undefined,\n };\n}\n/**\n * @public\n */\nexport var PBMaterial_PbrMaterial;\n(function (PBMaterial_PbrMaterial) {\n function encode(message, writer = _m0.Writer.create()) {\n if (message.texture !== undefined) {\n TextureUnion.encode(message.texture, writer.uint32(10).fork()).ldelim();\n }\n if (message.alphaTest !== undefined) {\n writer.uint32(21).float(message.alphaTest);\n }\n if (message.castShadows !== undefined) {\n writer.uint32(24).bool(message.castShadows);\n }\n if (message.alphaTexture !== undefined) {\n TextureUnion.encode(message.alphaTexture, writer.uint32(34).fork()).ldelim();\n }\n if (message.emissiveTexture !== undefined) {\n TextureUnion.encode(message.emissiveTexture, writer.uint32(42).fork()).ldelim();\n }\n if (message.bumpTexture !== undefined) {\n TextureUnion.encode(message.bumpTexture, writer.uint32(50).fork()).ldelim();\n }\n if (message.albedoColor !== undefined) {\n Color4.encode(message.albedoColor, writer.uint32(58).fork()).ldelim();\n }\n if (message.emissiveColor !== undefined) {\n Color3.encode(message.emissiveColor, writer.uint32(66).fork()).ldelim();\n }\n if (message.reflectivityColor !== undefined) {\n Color3.encode(message.reflectivityColor, writer.uint32(74).fork()).ldelim();\n }\n if (message.transparencyMode !== undefined) {\n writer.uint32(80).int32(message.transparencyMode);\n }\n if (message.metallic !== undefined) {\n writer.uint32(93).float(message.metallic);\n }\n if (message.roughness !== undefined) {\n writer.uint32(101).float(message.roughness);\n }\n if (message.specularIntensity !== undefined) {\n writer.uint32(117).float(message.specularIntensity);\n }\n if (message.emissiveIntensity !== undefined) {\n writer.uint32(125).float(message.emissiveIntensity);\n }\n if (message.directIntensity !== undefined) {\n writer.uint32(133).float(message.directIntensity);\n }\n return writer;\n }\n PBMaterial_PbrMaterial.encode = encode;\n function decode(input, length) {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBasePBMaterial_PbrMaterial();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n message.texture = TextureUnion.decode(reader, reader.uint32());\n continue;\n case 2:\n if (tag !== 21) {\n break;\n }\n message.alphaTest = reader.float();\n continue;\n case 3:\n if (tag !== 24) {\n break;\n }\n message.castShadows = reader.bool();\n continue;\n case 4:\n if (tag !== 34) {\n break;\n }\n message.alphaTexture = TextureUnion.decode(reader, reader.uint32());\n continue;\n case 5:\n if (tag !== 42) {\n break;\n }\n message.emissiveTexture = TextureUnion.decode(reader, reader.uint32());\n continue;\n case 6:\n if (tag !== 50) {\n break;\n }\n message.bumpTexture = TextureUnion.decode(reader, reader.uint32());\n continue;\n case 7:\n if (tag !== 58) {\n break;\n }\n message.albedoColor = Color4.decode(reader, reader.uint32());\n continue;\n case 8:\n if (tag !== 66) {\n break;\n }\n message.emissiveColor = Color3.decode(reader, reader.uint32());\n continue;\n case 9:\n if (tag !== 74) {\n break;\n }\n message.reflectivityColor = Color3.decode(reader, reader.uint32());\n continue;\n case 10:\n if (tag !== 80) {\n break;\n }\n message.transparencyMode = reader.int32();\n continue;\n case 11:\n if (tag !== 93) {\n break;\n }\n message.metallic = reader.float();\n continue;\n case 12:\n if (tag !== 101) {\n break;\n }\n message.roughness = reader.float();\n continue;\n case 14:\n if (tag !== 117) {\n break;\n }\n message.specularIntensity = reader.float();\n continue;\n case 15:\n if (tag !== 125) {\n break;\n }\n message.emissiveIntensity = reader.float();\n continue;\n case 16:\n if (tag !== 133) {\n break;\n }\n message.directIntensity = reader.float();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n }\n PBMaterial_PbrMaterial.decode = decode;\n})(PBMaterial_PbrMaterial || (PBMaterial_PbrMaterial = {}));\n", "/* eslint-disable */\nimport _m0 from \"protobufjs/minimal\";\nimport { Vector2 } from \"./vectors.gen\";\nconst protobufPackageSarasa = \"decentraland.common\";\n/**\n * @public\n */\nexport var TextureWrapMode;\n(function (TextureWrapMode) {\n TextureWrapMode[TextureWrapMode[\"TWM_REPEAT\"] = 0] = \"TWM_REPEAT\";\n TextureWrapMode[TextureWrapMode[\"TWM_CLAMP\"] = 1] = \"TWM_CLAMP\";\n TextureWrapMode[TextureWrapMode[\"TWM_MIRROR\"] = 2] = \"TWM_MIRROR\";\n})(TextureWrapMode || (TextureWrapMode = {}));\n/**\n * @public\n */\nexport var TextureFilterMode;\n(function (TextureFilterMode) {\n TextureFilterMode[TextureFilterMode[\"TFM_POINT\"] = 0] = \"TFM_POINT\";\n TextureFilterMode[TextureFilterMode[\"TFM_BILINEAR\"] = 1] = \"TFM_BILINEAR\";\n TextureFilterMode[TextureFilterMode[\"TFM_TRILINEAR\"] = 2] = \"TFM_TRILINEAR\";\n})(TextureFilterMode || (TextureFilterMode = {}));\nfunction createBaseTexture() {\n return { src: \"\", wrapMode: undefined, filterMode: undefined, offset: undefined, tiling: undefined };\n}\n/**\n * @public\n */\nexport var Texture;\n(function (Texture) {\n function encode(message, writer = _m0.Writer.create()) {\n if (message.src !== \"\") {\n writer.uint32(10).string(message.src);\n }\n if (message.wrapMode !== undefined) {\n writer.uint32(16).int32(message.wrapMode);\n }\n if (message.filterMode !== undefined) {\n writer.uint32(24).int32(message.filterMode);\n }\n if (message.offset !== undefined) {\n Vector2.encode(message.offset, writer.uint32(34).fork()).ldelim();\n }\n if (message.tiling !== undefined) {\n Vector2.encode(message.tiling, writer.uint32(42).fork()).ldelim();\n }\n return writer;\n }\n Texture.encode = encode;\n function decode(input, length) {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseTexture();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n message.src = reader.string();\n continue;\n case 2:\n if (tag !== 16) {\n break;\n }\n message.wrapMode = reader.int32();\n continue;\n case 3:\n if (tag !== 24) {\n break;\n }\n message.filterMode = reader.int32();\n continue;\n case 4:\n if (tag !== 34) {\n break;\n }\n message.offset = Vector2.decode(reader, reader.uint32());\n continue;\n case 5:\n if (tag !== 42) {\n break;\n }\n message.tiling = Vector2.decode(reader, reader.uint32());\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n }\n Texture.decode = decode;\n})(Texture || (Texture = {}));\nfunction createBaseAvatarTexture() {\n return { userId: \"\", wrapMode: undefined, filterMode: undefined };\n}\n/**\n * @public\n */\nexport var AvatarTexture;\n(function (AvatarTexture) {\n function encode(message, writer = _m0.Writer.create()) {\n if (message.userId !== \"\") {\n writer.uint32(10).string(message.userId);\n }\n if (message.wrapMode !== undefined) {\n writer.uint32(16).int32(message.wrapMode);\n }\n if (message.filterMode !== undefined) {\n writer.uint32(24).int32(message.filterMode);\n }\n return writer;\n }\n AvatarTexture.encode = encode;\n function decode(input, length) {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseAvatarTexture();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n message.userId = reader.string();\n continue;\n case 2:\n if (tag !== 16) {\n break;\n }\n message.wrapMode = reader.int32();\n continue;\n case 3:\n if (tag !== 24) {\n break;\n }\n message.filterMode = reader.int32();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n }\n AvatarTexture.decode = decode;\n})(AvatarTexture || (AvatarTexture = {}));\nfunction createBaseVideoTexture() {\n return { videoPlayerEntity: 0, wrapMode: undefined, filterMode: undefined };\n}\n/**\n * @public\n */\nexport var VideoTexture;\n(function (VideoTexture) {\n function encode(message, writer = _m0.Writer.create()) {\n if (message.videoPlayerEntity !== 0) {\n writer.uint32(8).uint32(message.videoPlayerEntity);\n }\n if (message.wrapMode !== undefined) {\n writer.uint32(16).int32(message.wrapMode);\n }\n if (message.filterMode !== undefined) {\n writer.uint32(24).int32(message.filterMode);\n }\n return writer;\n }\n VideoTexture.encode = encode;\n function decode(input, length) {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseVideoTexture();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 8) {\n break;\n }\n message.videoPlayerEntity = reader.uint32();\n continue;\n case 2:\n if (tag !== 16) {\n break;\n }\n message.wrapMode = reader.int32();\n continue;\n case 3:\n if (tag !== 24) {\n break;\n }\n message.filterMode = reader.int32();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n }\n VideoTexture.decode = decode;\n})(VideoTexture || (VideoTexture = {}));\nfunction createBaseTextureUnion() {\n return { tex: undefined };\n}\n/**\n * @public\n */\nexport var TextureUnion;\n(function (TextureUnion) {\n function encode(message, writer = _m0.Writer.create()) {\n switch (message.tex?.$case) {\n case \"texture\":\n Texture.encode(message.tex.texture, writer.uint32(10).fork()).ldelim();\n break;\n case \"avatarTexture\":\n AvatarTexture.encode(message.tex.avatarTexture, writer.uint32(18).fork()).ldelim();\n break;\n case \"videoTexture\":\n VideoTexture.encode(message.tex.videoTexture, writer.uint32(26).fork()).ldelim();\n break;\n }\n return writer;\n }\n TextureUnion.encode = encode;\n function decode(input, length) {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseTextureUnion();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n message.tex = { $case: \"texture\", texture: Texture.decode(reader, reader.uint32()) };\n continue;\n case 2:\n if (tag !== 18) {\n break;\n }\n message.tex = { $case: \"avatarTexture\", avatarTexture: AvatarTexture.decode(reader, reader.uint32()) };\n continue;\n case 3:\n if (tag !== 26) {\n break;\n }\n message.tex = { $case: \"videoTexture\", videoTexture: VideoTexture.decode(reader, reader.uint32()) };\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n }\n TextureUnion.decode = decode;\n})(TextureUnion || (TextureUnion = {}));\n", "import { PBGltfNodeModifiers } from './pb/decentraland/sdk/components/gltf_node_modifiers.gen';\n/**\n * @internal\n */\nexport const GltfNodeModifiersSchema = {\n COMPONENT_ID: 1099,\n serialize(value, builder) {\n const writer = PBGltfNodeModifiers.encode(value);\n const buffer = new Uint8Array(writer.finish(), 0, writer.len);\n builder.writeBuffer(buffer, false);\n },\n deserialize(reader) {\n return PBGltfNodeModifiers.decode(reader.buffer(), reader.remainingBytes());\n },\n create() {\n // TODO: this is a hack.\n return PBGltfNodeModifiers.decode(new Uint8Array());\n },\n jsonSchema: {\n type: \"object\",\n properties: {},\n serializationType: \"protocol-buffer\",\n protocolBuffer: \"PBGltfNodeModifiers\"\n }\n};\n", "/* eslint-disable */\nimport _m0 from \"protobufjs/minimal\";\nconst protobufPackageSarasa = \"decentraland.sdk.components\";\nfunction createBasePBInputModifier() {\n return { mode: undefined };\n}\n/**\n * @public\n */\nexport var PBInputModifier;\n(function (PBInputModifier) {\n function encode(message, writer = _m0.Writer.create()) {\n switch (message.mode?.$case) {\n case \"standard\":\n PBInputModifier_StandardInput.encode(message.mode.standard, writer.uint32(10).fork()).ldelim();\n break;\n }\n return writer;\n }\n PBInputModifier.encode = encode;\n function decode(input, length) {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBasePBInputModifier();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n message.mode = { $case: \"standard\", standard: PBInputModifier_StandardInput.decode(reader, reader.uint32()) };\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n }\n PBInputModifier.decode = decode;\n})(PBInputModifier || (PBInputModifier = {}));\nfunction createBasePBInputModifier_StandardInput() {\n return {\n disableAll: undefined,\n disableWalk: undefined,\n disableJog: undefined,\n disableRun: undefined,\n disableJump: undefined,\n disableEmote: undefined,\n };\n}\n/**\n * @public\n */\nexport var PBInputModifier_StandardInput;\n(function (PBInputModifier_StandardInput) {\n function encode(message, writer = _m0.Writer.create()) {\n if (message.disableAll !== undefined) {\n writer.uint32(8).bool(message.disableAll);\n }\n if (message.disableWalk !== undefined) {\n writer.uint32(16).bool(message.disableWalk);\n }\n if (message.disableJog !== undefined) {\n writer.uint32(24).bool(message.disableJog);\n }\n if (message.disableRun !== undefined) {\n writer.uint32(32).bool(message.disableRun);\n }\n if (message.disableJump !== undefined) {\n writer.uint32(40).bool(message.disableJump);\n }\n if (message.disableEmote !== undefined) {\n writer.uint32(48).bool(message.disableEmote);\n }\n return writer;\n }\n PBInputModifier_StandardInput.encode = encode;\n function decode(input, length) {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBasePBInputModifier_StandardInput();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 8) {\n break;\n }\n message.disableAll = reader.bool();\n continue;\n case 2:\n if (tag !== 16) {\n break;\n }\n message.disableWalk = reader.bool();\n continue;\n case 3:\n if (tag !== 24) {\n break;\n }\n message.disableJog = reader.bool();\n continue;\n case 4:\n if (tag !== 32) {\n break;\n }\n message.disableRun = reader.bool();\n continue;\n case 5:\n if (tag !== 40) {\n break;\n }\n message.disableJump = reader.bool();\n continue;\n case 6:\n if (tag !== 48) {\n break;\n }\n message.disableEmote = reader.bool();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n }\n PBInputModifier_StandardInput.decode = decode;\n})(PBInputModifier_StandardInput || (PBInputModifier_StandardInput = {}));\n", "import { PBInputModifier } from './pb/decentraland/sdk/components/input_modifier.gen';\n/**\n * @internal\n */\nexport const InputModifierSchema = {\n COMPONENT_ID: 1078,\n serialize(value, builder) {\n const writer = PBInputModifier.encode(value);\n const buffer = new Uint8Array(writer.finish(), 0, writer.len);\n builder.writeBuffer(buffer, false);\n },\n deserialize(reader) {\n return PBInputModifier.decode(reader.buffer(), reader.remainingBytes());\n },\n create() {\n // TODO: this is a hack.\n return PBInputModifier.decode(new Uint8Array());\n },\n jsonSchema: {\n type: \"object\",\n properties: {},\n serializationType: \"protocol-buffer\",\n protocolBuffer: \"PBInputModifier\"\n }\n};\n", "/* eslint-disable */\nimport _m0 from \"protobufjs/minimal\";\nimport { Color3 } from \"../../common/colors.gen\";\nimport { TextureUnion } from \"../../common/texture.gen\";\nconst protobufPackageSarasa = \"decentraland.sdk.components\";\nfunction createBasePBLightSource() {\n return {\n active: undefined,\n color: undefined,\n intensity: undefined,\n range: undefined,\n shadow: undefined,\n shadowMaskTexture: undefined,\n type: undefined,\n };\n}\n/**\n * @public\n */\nexport var PBLightSource;\n(function (PBLightSource) {\n function encode(message, writer = _m0.Writer.create()) {\n if (message.active !== undefined) {\n writer.uint32(8).bool(message.active);\n }\n if (message.color !== undefined) {\n Color3.encode(message.color, writer.uint32(18).fork()).ldelim();\n }\n if (message.intensity !== undefined) {\n writer.uint32(29).float(message.intensity);\n }\n if (message.range !== undefined) {\n writer.uint32(37).float(message.range);\n }\n if (message.shadow !== undefined) {\n writer.uint32(40).bool(message.shadow);\n }\n if (message.shadowMaskTexture !== undefined) {\n TextureUnion.encode(message.shadowMaskTexture, writer.uint32(50).fork()).ldelim();\n }\n switch (message.type?.$case) {\n case \"point\":\n PBLightSource_Point.encode(message.type.point, writer.uint32(58).fork()).ldelim();\n break;\n case \"spot\":\n PBLightSource_Spot.encode(message.type.spot, writer.uint32(66).fork()).ldelim();\n break;\n }\n return writer;\n }\n PBLightSource.encode = encode;\n function decode(input, length) {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBasePBLightSource();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 8) {\n break;\n }\n message.active = reader.bool();\n continue;\n case 2:\n if (tag !== 18) {\n break;\n }\n message.color = Color3.decode(reader, reader.uint32());\n continue;\n case 3:\n if (tag !== 29) {\n break;\n }\n message.intensity = reader.float();\n continue;\n case 4:\n if (tag !== 37) {\n break;\n }\n message.range = reader.float();\n continue;\n case 5:\n if (tag !== 40) {\n break;\n }\n message.shadow = reader.bool();\n continue;\n case 6:\n if (tag !== 50) {\n break;\n }\n message.shadowMaskTexture = TextureUnion.decode(reader, reader.uint32());\n continue;\n case 7:\n if (tag !== 58) {\n break;\n }\n message.type = { $case: \"point\", point: PBLightSource_Point.decode(reader, reader.uint32()) };\n continue;\n case 8:\n if (tag !== 66) {\n break;\n }\n message.type = { $case: \"spot\", spot: PBLightSource_Spot.decode(reader, reader.uint32()) };\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n }\n PBLightSource.decode = decode;\n})(PBLightSource || (PBLightSource = {}));\nfunction createBasePBLightSource_Point() {\n return {};\n}\n/**\n * @public\n */\nexport var PBLightSource_Point;\n(function (PBLightSource_Point) {\n function encode(_, writer = _m0.Writer.create()) {\n return writer;\n }\n PBLightSource_Point.encode = encode;\n function decode(input, length) {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBasePBLightSource_Point();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n }\n PBLightSource_Point.decode = decode;\n})(PBLightSource_Point || (PBLightSource_Point = {}));\nfunction createBasePBLightSource_Spot() {\n return { innerAngle: undefined, outerAngle: undefined };\n}\n/**\n * @public\n */\nexport var PBLightSource_Spot;\n(function (PBLightSource_Spot) {\n function encode(message, writer = _m0.Writer.create()) {\n if (message.innerAngle !== undefined) {\n writer.uint32(77).float(message.innerAngle);\n }\n if (message.outerAngle !== undefined) {\n writer.uint32(85).float(message.outerAngle);\n }\n return writer;\n }\n PBLightSource_Spot.encode = encode;\n function decode(input, length) {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBasePBLightSource_Spot();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 9:\n if (tag !== 77) {\n break;\n }\n message.innerAngle = reader.float();\n continue;\n case 10:\n if (tag !== 85) {\n break;\n }\n message.outerAngle = reader.float();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n }\n PBLightSource_Spot.decode = decode;\n})(PBLightSource_Spot || (PBLightSource_Spot = {}));\n", "import { PBLightSource } from './pb/decentraland/sdk/components/light_source.gen';\n/**\n * @internal\n */\nexport const LightSourceSchema = {\n COMPONENT_ID: 1079,\n serialize(value, builder) {\n const writer = PBLightSource.encode(value);\n const buffer = new Uint8Array(writer.finish(), 0, writer.len);\n builder.writeBuffer(buffer, false);\n },\n deserialize(reader) {\n return PBLightSource.decode(reader.buffer(), reader.remainingBytes());\n },\n create() {\n // TODO: this is a hack.\n return PBLightSource.decode(new Uint8Array());\n },\n jsonSchema: {\n type: \"object\",\n properties: {},\n serializationType: \"protocol-buffer\",\n protocolBuffer: \"PBLightSource\"\n }\n};\n", "/* eslint-disable */\nimport _m0 from \"protobufjs/minimal\";\nconst protobufPackageSarasa = \"decentraland.sdk.components\";\nfunction createBasePBMainCamera() {\n return { virtualCameraEntity: undefined };\n}\n/**\n * @public\n */\nexport var PBMainCamera;\n(function (PBMainCamera) {\n function encode(message, writer = _m0.Writer.create()) {\n if (message.virtualCameraEntity !== undefined) {\n writer.uint32(8).uint32(message.virtualCameraEntity);\n }\n return writer;\n }\n PBMainCamera.encode = encode;\n function decode(input, length) {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBasePBMainCamera();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 8) {\n break;\n }\n message.virtualCameraEntity = reader.uint32();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n }\n PBMainCamera.decode = decode;\n})(PBMainCamera || (PBMainCamera = {}));\n", "import { PBMainCamera } from './pb/decentraland/sdk/components/main_camera.gen';\n/**\n * @internal\n */\nexport const MainCameraSchema = {\n COMPONENT_ID: 1075,\n serialize(value, builder) {\n const writer = PBMainCamera.encode(value);\n const buffer = new Uint8Array(writer.finish(), 0, writer.len);\n builder.writeBuffer(buffer, false);\n },\n deserialize(reader) {\n return PBMainCamera.decode(reader.buffer(), reader.remainingBytes());\n },\n create() {\n // TODO: this is a hack.\n return PBMainCamera.decode(new Uint8Array());\n },\n jsonSchema: {\n type: \"object\",\n properties: {},\n serializationType: \"protocol-buffer\",\n protocolBuffer: \"PBMainCamera\"\n }\n};\n", "import { PBMaterial } from './pb/decentraland/sdk/components/material.gen';\n/**\n * @internal\n */\nexport const MaterialSchema = {\n COMPONENT_ID: 1017,\n serialize(value, builder) {\n const writer = PBMaterial.encode(value);\n const buffer = new Uint8Array(writer.finish(), 0, writer.len);\n builder.writeBuffer(buffer, false);\n },\n deserialize(reader) {\n return PBMaterial.decode(reader.buffer(), reader.remainingBytes());\n },\n create() {\n // TODO: this is a hack.\n return PBMaterial.decode(new Uint8Array());\n },\n jsonSchema: {\n type: \"object\",\n properties: {},\n serializationType: \"protocol-buffer\",\n protocolBuffer: \"PBMaterial\"\n }\n};\n", "/* eslint-disable */\nimport _m0 from \"protobufjs/minimal\";\nconst protobufPackageSarasa = \"decentraland.sdk.components\";\n/** ColliderLayer determines the kind of collision to detect, in OR-able bit flag form. */\n/**\n * @public\n */\nexport var ColliderLayer;\n(function (ColliderLayer) {\n /** CL_NONE - no collisions */\n ColliderLayer[ColliderLayer[\"CL_NONE\"] = 0] = \"CL_NONE\";\n /** CL_POINTER - collisions with the player's pointer ray (e.g. mouse cursor hovering) */\n ColliderLayer[ColliderLayer[\"CL_POINTER\"] = 1] = \"CL_POINTER\";\n /** CL_PHYSICS - collision affecting your player's physics i.e. walls, floor, moving platfroms */\n ColliderLayer[ColliderLayer[\"CL_PHYSICS\"] = 2] = \"CL_PHYSICS\";\n /** CL_PLAYER - layer corresponding to any player avatar */\n ColliderLayer[ColliderLayer[\"CL_PLAYER\"] = 4] = \"CL_PLAYER\";\n ColliderLayer[ColliderLayer[\"CL_RESERVED2\"] = 8] = \"CL_RESERVED2\";\n ColliderLayer[ColliderLayer[\"CL_RESERVED3\"] = 16] = \"CL_RESERVED3\";\n ColliderLayer[ColliderLayer[\"CL_RESERVED4\"] = 32] = \"CL_RESERVED4\";\n ColliderLayer[ColliderLayer[\"CL_RESERVED5\"] = 64] = \"CL_RESERVED5\";\n ColliderLayer[ColliderLayer[\"CL_RESERVED6\"] = 128] = \"CL_RESERVED6\";\n ColliderLayer[ColliderLayer[\"CL_CUSTOM1\"] = 256] = \"CL_CUSTOM1\";\n ColliderLayer[ColliderLayer[\"CL_CUSTOM2\"] = 512] = \"CL_CUSTOM2\";\n ColliderLayer[ColliderLayer[\"CL_CUSTOM3\"] = 1024] = \"CL_CUSTOM3\";\n ColliderLayer[ColliderLayer[\"CL_CUSTOM4\"] = 2048] = \"CL_CUSTOM4\";\n ColliderLayer[ColliderLayer[\"CL_CUSTOM5\"] = 4096] = \"CL_CUSTOM5\";\n ColliderLayer[ColliderLayer[\"CL_CUSTOM6\"] = 8192] = \"CL_CUSTOM6\";\n ColliderLayer[ColliderLayer[\"CL_CUSTOM7\"] = 16384] = \"CL_CUSTOM7\";\n ColliderLayer[ColliderLayer[\"CL_CUSTOM8\"] = 32768] = \"CL_CUSTOM8\";\n})(ColliderLayer || (ColliderLayer = {}));\nfunction createBasePBMeshCollider() {\n return { collisionMask: undefined, mesh: undefined };\n}\n/**\n * @public\n */\nexport var PBMeshCollider;\n(function (PBMeshCollider) {\n function encode(message, writer = _m0.Writer.create()) {\n if (message.collisionMask !== undefined) {\n writer.uint32(8).uint32(message.collisionMask);\n }\n switch (message.mesh?.$case) {\n case \"box\":\n PBMeshCollider_BoxMesh.encode(message.mesh.box, writer.uint32(18).fork()).ldelim();\n break;\n case \"sphere\":\n PBMeshCollider_SphereMesh.encode(message.mesh.sphere, writer.uint32(26).fork()).ldelim();\n break;\n case \"cylinder\":\n PBMeshCollider_CylinderMesh.encode(message.mesh.cylinder, writer.uint32(34).fork()).ldelim();\n break;\n case \"plane\":\n PBMeshCollider_PlaneMesh.encode(message.mesh.plane, writer.uint32(42).fork()).ldelim();\n break;\n }\n return writer;\n }\n PBMeshCollider.encode = encode;\n function decode(input, length) {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBasePBMeshCollider();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 8) {\n break;\n }\n message.collisionMask = reader.uint32();\n continue;\n case 2:\n if (tag !== 18) {\n break;\n }\n message.mesh = { $case: \"box\", box: PBMeshCollider_BoxMesh.decode(reader, reader.uint32()) };\n continue;\n case 3:\n if (tag !== 26) {\n break;\n }\n message.mesh = { $case: \"sphere\", sphere: PBMeshCollider_SphereMesh.decode(reader, reader.uint32()) };\n continue;\n case 4:\n if (tag !== 34) {\n break;\n }\n message.mesh = { $case: \"cylinder\", cylinder: PBMeshCollider_CylinderMesh.decode(reader, reader.uint32()) };\n continue;\n case 5:\n if (tag !== 42) {\n break;\n }\n message.mesh = { $case: \"plane\", plane: PBMeshCollider_PlaneMesh.decode(reader, reader.uint32()) };\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n }\n PBMeshCollider.decode = decode;\n})(PBMeshCollider || (PBMeshCollider = {}));\nfunction createBasePBMeshCollider_BoxMesh() {\n return {};\n}\n/**\n * @public\n */\nexport var PBMeshCollider_BoxMesh;\n(function (PBMeshCollider_BoxMesh) {\n function encode(_, writer = _m0.Writer.create()) {\n return writer;\n }\n PBMeshCollider_BoxMesh.encode = encode;\n function decode(input, length) {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBasePBMeshCollider_BoxMesh();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n }\n PBMeshCollider_BoxMesh.decode = decode;\n})(PBMeshCollider_BoxMesh || (PBMeshCollider_BoxMesh = {}));\nfunction createBasePBMeshCollider_CylinderMesh() {\n return { radiusTop: undefined, radiusBottom: undefined };\n}\n/**\n * @public\n */\nexport var PBMeshCollider_CylinderMesh;\n(function (PBMeshCollider_CylinderMesh) {\n function encode(message, writer = _m0.Writer.create()) {\n if (message.radiusTop !== undefined) {\n writer.uint32(13).float(message.radiusTop);\n }\n if (message.radiusBottom !== undefined) {\n writer.uint32(21).float(message.radiusBottom);\n }\n return writer;\n }\n PBMeshCollider_CylinderMesh.encode = encode;\n function decode(input, length) {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBasePBMeshCollider_CylinderMesh();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 13) {\n break;\n }\n message.radiusTop = reader.float();\n continue;\n case 2:\n if (tag !== 21) {\n break;\n }\n message.radiusBottom = reader.float();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n }\n PBMeshCollider_CylinderMesh.decode = decode;\n})(PBMeshCollider_CylinderMesh || (PBMeshCollider_CylinderMesh = {}));\nfunction createBasePBMeshCollider_PlaneMesh() {\n return {};\n}\n/**\n * @public\n */\nexport var PBMeshCollider_PlaneMesh;\n(function (PBMeshCollider_PlaneMesh) {\n function encode(_, writer = _m0.Writer.create()) {\n return writer;\n }\n PBMeshCollider_PlaneMesh.encode = encode;\n function decode(input, length) {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBasePBMeshCollider_PlaneMesh();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n }\n PBMeshCollider_PlaneMesh.decode = decode;\n})(PBMeshCollider_PlaneMesh || (PBMeshCollider_PlaneMesh = {}));\nfunction createBasePBMeshCollider_SphereMesh() {\n return {};\n}\n/**\n * @public\n */\nexport var PBMeshCollider_SphereMesh;\n(function (PBMeshCollider_SphereMesh) {\n function encode(_, writer = _m0.Writer.create()) {\n return writer;\n }\n PBMeshCollider_SphereMesh.encode = encode;\n function decode(input, length) {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBasePBMeshCollider_SphereMesh();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n }\n PBMeshCollider_SphereMesh.decode = decode;\n})(PBMeshCollider_SphereMesh || (PBMeshCollider_SphereMesh = {}));\n", "import { PBMeshCollider } from './pb/decentraland/sdk/components/mesh_collider.gen';\n/**\n * @internal\n */\nexport const MeshColliderSchema = {\n COMPONENT_ID: 1019,\n serialize(value, builder) {\n const writer = PBMeshCollider.encode(value);\n const buffer = new Uint8Array(writer.finish(), 0, writer.len);\n builder.writeBuffer(buffer, false);\n },\n deserialize(reader) {\n return PBMeshCollider.decode(reader.buffer(), reader.remainingBytes());\n },\n create() {\n // TODO: this is a hack.\n return PBMeshCollider.decode(new Uint8Array());\n },\n jsonSchema: {\n type: \"object\",\n properties: {},\n serializationType: \"protocol-buffer\",\n protocolBuffer: \"PBMeshCollider\"\n }\n};\n", "/* eslint-disable */\nimport _m0 from \"protobufjs/minimal\";\nconst protobufPackageSarasa = \"decentraland.sdk.components\";\nfunction createBasePBMeshRenderer() {\n return { mesh: undefined };\n}\n/**\n * @public\n */\nexport var PBMeshRenderer;\n(function (PBMeshRenderer) {\n function encode(message, writer = _m0.Writer.create()) {\n switch (message.mesh?.$case) {\n case \"box\":\n PBMeshRenderer_BoxMesh.encode(message.mesh.box, writer.uint32(10).fork()).ldelim();\n break;\n case \"sphere\":\n PBMeshRenderer_SphereMesh.encode(message.mesh.sphere, writer.uint32(18).fork()).ldelim();\n break;\n case \"cylinder\":\n PBMeshRenderer_CylinderMesh.encode(message.mesh.cylinder, writer.uint32(26).fork()).ldelim();\n break;\n case \"plane\":\n PBMeshRenderer_PlaneMesh.encode(message.mesh.plane, writer.uint32(34).fork()).ldelim();\n break;\n }\n return writer;\n }\n PBMeshRenderer.encode = encode;\n function decode(input, length) {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBasePBMeshRenderer();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n message.mesh = { $case: \"box\", box: PBMeshRenderer_BoxMesh.decode(reader, reader.uint32()) };\n continue;\n case 2:\n if (tag !== 18) {\n break;\n }\n message.mesh = { $case: \"sphere\", sphere: PBMeshRenderer_SphereMesh.decode(reader, reader.uint32()) };\n continue;\n case 3:\n if (tag !== 26) {\n break;\n }\n message.mesh = { $case: \"cylinder\", cylinder: PBMeshRenderer_CylinderMesh.decode(reader, reader.uint32()) };\n continue;\n case 4:\n if (tag !== 34) {\n break;\n }\n message.mesh = { $case: \"plane\", plane: PBMeshRenderer_PlaneMesh.decode(reader, reader.uint32()) };\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n }\n PBMeshRenderer.decode = decode;\n})(PBMeshRenderer || (PBMeshRenderer = {}));\nfunction createBasePBMeshRenderer_BoxMesh() {\n return { uvs: [] };\n}\n/**\n * @public\n */\nexport var PBMeshRenderer_BoxMesh;\n(function (PBMeshRenderer_BoxMesh) {\n function encode(message, writer = _m0.Writer.create()) {\n writer.uint32(10).fork();\n for (const v of message.uvs) {\n writer.float(v);\n }\n writer.ldelim();\n return writer;\n }\n PBMeshRenderer_BoxMesh.encode = encode;\n function decode(input, length) {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBasePBMeshRenderer_BoxMesh();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag === 13) {\n message.uvs.push(reader.float());\n continue;\n }\n if (tag === 10) {\n const end2 = reader.uint32() + reader.pos;\n while (reader.pos < end2) {\n message.uvs.push(reader.float());\n }\n continue;\n }\n break;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n }\n PBMeshRenderer_BoxMesh.decode = decode;\n})(PBMeshRenderer_BoxMesh || (PBMeshRenderer_BoxMesh = {}));\nfunction createBasePBMeshRenderer_CylinderMesh() {\n return { radiusTop: undefined, radiusBottom: undefined };\n}\n/**\n * @public\n */\nexport var PBMeshRenderer_CylinderMesh;\n(function (PBMeshRenderer_CylinderMesh) {\n function encode(message, writer = _m0.Writer.create()) {\n if (message.radiusTop !== undefined) {\n writer.uint32(13).float(message.radiusTop);\n }\n if (message.radiusBottom !== undefined) {\n writer.uint32(21).float(message.radiusBottom);\n }\n return writer;\n }\n PBMeshRenderer_CylinderMesh.encode = encode;\n function decode(input, length) {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBasePBMeshRenderer_CylinderMesh();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 13) {\n break;\n }\n message.radiusTop = reader.float();\n continue;\n case 2:\n if (tag !== 21) {\n break;\n }\n message.radiusBottom = reader.float();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n }\n PBMeshRenderer_CylinderMesh.decode = decode;\n})(PBMeshRenderer_CylinderMesh || (PBMeshRenderer_CylinderMesh = {}));\nfunction createBasePBMeshRenderer_PlaneMesh() {\n return { uvs: [] };\n}\n/**\n * @public\n */\nexport var PBMeshRenderer_PlaneMesh;\n(function (PBMeshRenderer_PlaneMesh) {\n function encode(message, writer = _m0.Writer.create()) {\n writer.uint32(10).fork();\n for (const v of message.uvs) {\n writer.float(v);\n }\n writer.ldelim();\n return writer;\n }\n PBMeshRenderer_PlaneMesh.encode = encode;\n function decode(input, length) {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBasePBMeshRenderer_PlaneMesh();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag === 13) {\n message.uvs.push(reader.float());\n continue;\n }\n if (tag === 10) {\n const end2 = reader.uint32() + reader.pos;\n while (reader.pos < end2) {\n message.uvs.push(reader.float());\n }\n continue;\n }\n break;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n }\n PBMeshRenderer_PlaneMesh.decode = decode;\n})(PBMeshRenderer_PlaneMesh || (PBMeshRenderer_PlaneMesh = {}));\nfunction createBasePBMeshRenderer_SphereMesh() {\n return {};\n}\n/**\n * @public\n */\nexport var PBMeshRenderer_SphereMesh;\n(function (PBMeshRenderer_SphereMesh) {\n function encode(_, writer = _m0.Writer.create()) {\n return writer;\n }\n PBMeshRenderer_SphereMesh.encode = encode;\n function decode(input, length) {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBasePBMeshRenderer_SphereMesh();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n }\n PBMeshRenderer_SphereMesh.decode = decode;\n})(PBMeshRenderer_SphereMesh || (PBMeshRenderer_SphereMesh = {}));\n", "import { PBMeshRenderer } from './pb/decentraland/sdk/components/mesh_renderer.gen';\n/**\n * @internal\n */\nexport const MeshRendererSchema = {\n COMPONENT_ID: 1018,\n serialize(value, builder) {\n const writer = PBMeshRenderer.encode(value);\n const buffer = new Uint8Array(writer.finish(), 0, writer.len);\n builder.writeBuffer(buffer, false);\n },\n deserialize(reader) {\n return PBMeshRenderer.decode(reader.buffer(), reader.remainingBytes());\n },\n create() {\n // TODO: this is a hack.\n return PBMeshRenderer.decode(new Uint8Array());\n },\n jsonSchema: {\n type: \"object\",\n properties: {},\n serializationType: \"protocol-buffer\",\n protocolBuffer: \"PBMeshRenderer\"\n }\n};\n", "/* eslint-disable */\nimport _m0 from \"protobufjs/minimal\";\nimport { Color3 } from \"../../common/colors.gen\";\nconst protobufPackageSarasa = \"decentraland.sdk.components\";\n/** NftFrameType is a predefined framing style for the image. */\n/**\n * @public\n */\nexport var NftFrameType;\n(function (NftFrameType) {\n NftFrameType[NftFrameType[\"NFT_CLASSIC\"] = 0] = \"NFT_CLASSIC\";\n NftFrameType[NftFrameType[\"NFT_BAROQUE_ORNAMENT\"] = 1] = \"NFT_BAROQUE_ORNAMENT\";\n NftFrameType[NftFrameType[\"NFT_DIAMOND_ORNAMENT\"] = 2] = \"NFT_DIAMOND_ORNAMENT\";\n NftFrameType[NftFrameType[\"NFT_MINIMAL_WIDE\"] = 3] = \"NFT_MINIMAL_WIDE\";\n NftFrameType[NftFrameType[\"NFT_MINIMAL_GREY\"] = 4] = \"NFT_MINIMAL_GREY\";\n NftFrameType[NftFrameType[\"NFT_BLOCKY\"] = 5] = \"NFT_BLOCKY\";\n NftFrameType[NftFrameType[\"NFT_GOLD_EDGES\"] = 6] = \"NFT_GOLD_EDGES\";\n NftFrameType[NftFrameType[\"NFT_GOLD_CARVED\"] = 7] = \"NFT_GOLD_CARVED\";\n NftFrameType[NftFrameType[\"NFT_GOLD_WIDE\"] = 8] = \"NFT_GOLD_WIDE\";\n NftFrameType[NftFrameType[\"NFT_GOLD_ROUNDED\"] = 9] = \"NFT_GOLD_ROUNDED\";\n NftFrameType[NftFrameType[\"NFT_METAL_MEDIUM\"] = 10] = \"NFT_METAL_MEDIUM\";\n NftFrameType[NftFrameType[\"NFT_METAL_WIDE\"] = 11] = \"NFT_METAL_WIDE\";\n NftFrameType[NftFrameType[\"NFT_METAL_SLIM\"] = 12] = \"NFT_METAL_SLIM\";\n NftFrameType[NftFrameType[\"NFT_METAL_ROUNDED\"] = 13] = \"NFT_METAL_ROUNDED\";\n NftFrameType[NftFrameType[\"NFT_PINS\"] = 14] = \"NFT_PINS\";\n NftFrameType[NftFrameType[\"NFT_MINIMAL_BLACK\"] = 15] = \"NFT_MINIMAL_BLACK\";\n NftFrameType[NftFrameType[\"NFT_MINIMAL_WHITE\"] = 16] = \"NFT_MINIMAL_WHITE\";\n NftFrameType[NftFrameType[\"NFT_TAPE\"] = 17] = \"NFT_TAPE\";\n NftFrameType[NftFrameType[\"NFT_WOOD_SLIM\"] = 18] = \"NFT_WOOD_SLIM\";\n NftFrameType[NftFrameType[\"NFT_WOOD_WIDE\"] = 19] = \"NFT_WOOD_WIDE\";\n NftFrameType[NftFrameType[\"NFT_WOOD_TWIGS\"] = 20] = \"NFT_WOOD_TWIGS\";\n NftFrameType[NftFrameType[\"NFT_CANVAS\"] = 21] = \"NFT_CANVAS\";\n NftFrameType[NftFrameType[\"NFT_NONE\"] = 22] = \"NFT_NONE\";\n})(NftFrameType || (NftFrameType = {}));\nfunction createBasePBNftShape() {\n return { urn: \"\", style: undefined, color: undefined };\n}\n/**\n * @public\n */\nexport var PBNftShape;\n(function (PBNftShape) {\n function encode(message, writer = _m0.Writer.create()) {\n if (message.urn !== \"\") {\n writer.uint32(10).string(message.urn);\n }\n if (message.style !== undefined) {\n writer.uint32(16).int32(message.style);\n }\n if (message.color !== undefined) {\n Color3.encode(message.color, writer.uint32(26).fork()).ldelim();\n }\n return writer;\n }\n PBNftShape.encode = encode;\n function decode(input, length) {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBasePBNftShape();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n message.urn = reader.string();\n continue;\n case 2:\n if (tag !== 16) {\n break;\n }\n message.style = reader.int32();\n continue;\n case 3:\n if (tag !== 26) {\n break;\n }\n message.color = Color3.decode(reader, reader.uint32());\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n }\n PBNftShape.decode = decode;\n})(PBNftShape || (PBNftShape = {}));\n", "import { PBNftShape } from './pb/decentraland/sdk/components/nft_shape.gen';\n/**\n * @internal\n */\nexport const NftShapeSchema = {\n COMPONENT_ID: 1040,\n serialize(value, builder) {\n const writer = PBNftShape.encode(value);\n const buffer = new Uint8Array(writer.finish(), 0, writer.len);\n builder.writeBuffer(buffer, false);\n },\n deserialize(reader) {\n return PBNftShape.decode(reader.buffer(), reader.remainingBytes());\n },\n create() {\n // TODO: this is a hack.\n return PBNftShape.decode(new Uint8Array());\n },\n jsonSchema: {\n type: \"object\",\n properties: {},\n serializationType: \"protocol-buffer\",\n protocolBuffer: \"PBNftShape\"\n }\n};\n", "/* eslint-disable */\nimport _m0 from \"protobufjs/minimal\";\nconst protobufPackageSarasa = \"decentraland.sdk.components\";\nfunction createBasePBPlayerIdentityData() {\n return { address: \"\", isGuest: false };\n}\n/**\n * @public\n */\nexport var PBPlayerIdentityData;\n(function (PBPlayerIdentityData) {\n function encode(message, writer = _m0.Writer.create()) {\n if (message.address !== \"\") {\n writer.uint32(10).string(message.address);\n }\n if (message.isGuest === true) {\n writer.uint32(24).bool(message.isGuest);\n }\n return writer;\n }\n PBPlayerIdentityData.encode = encode;\n function decode(input, length) {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBasePBPlayerIdentityData();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n message.address = reader.string();\n continue;\n case 3:\n if (tag !== 24) {\n break;\n }\n message.isGuest = reader.bool();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n }\n PBPlayerIdentityData.decode = decode;\n})(PBPlayerIdentityData || (PBPlayerIdentityData = {}));\n", "import { PBPlayerIdentityData } from './pb/decentraland/sdk/components/player_identity_data.gen';\n/**\n * @internal\n */\nexport const PlayerIdentityDataSchema = {\n COMPONENT_ID: 1089,\n serialize(value, builder) {\n const writer = PBPlayerIdentityData.encode(value);\n const buffer = new Uint8Array(writer.finish(), 0, writer.len);\n builder.writeBuffer(buffer, false);\n },\n deserialize(reader) {\n return PBPlayerIdentityData.decode(reader.buffer(), reader.remainingBytes());\n },\n create() {\n // TODO: this is a hack.\n return PBPlayerIdentityData.decode(new Uint8Array());\n },\n jsonSchema: {\n type: \"object\",\n properties: {},\n serializationType: \"protocol-buffer\",\n protocolBuffer: \"PBPlayerIdentityData\"\n }\n};\n", "/* eslint-disable */\nimport _m0 from \"protobufjs/minimal\";\nconst protobufPackageSarasa = \"decentraland.sdk.components\";\nfunction createBasePBPointerEvents() {\n return { pointerEvents: [] };\n}\n/**\n * @public\n */\nexport var PBPointerEvents;\n(function (PBPointerEvents) {\n function encode(message, writer = _m0.Writer.create()) {\n for (const v of message.pointerEvents) {\n PBPointerEvents_Entry.encode(v, writer.uint32(10).fork()).ldelim();\n }\n return writer;\n }\n PBPointerEvents.encode = encode;\n function decode(input, length) {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBasePBPointerEvents();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n message.pointerEvents.push(PBPointerEvents_Entry.decode(reader, reader.uint32()));\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n }\n PBPointerEvents.decode = decode;\n})(PBPointerEvents || (PBPointerEvents = {}));\nfunction createBasePBPointerEvents_Info() {\n return {\n button: undefined,\n hoverText: undefined,\n maxDistance: undefined,\n showFeedback: undefined,\n showHighlight: undefined,\n };\n}\n/**\n * @public\n */\nexport var PBPointerEvents_Info;\n(function (PBPointerEvents_Info) {\n function encode(message, writer = _m0.Writer.create()) {\n if (message.button !== undefined) {\n writer.uint32(8).int32(message.button);\n }\n if (message.hoverText !== undefined) {\n writer.uint32(18).string(message.hoverText);\n }\n if (message.maxDistance !== undefined) {\n writer.uint32(29).float(message.maxDistance);\n }\n if (message.showFeedback !== undefined) {\n writer.uint32(32).bool(message.showFeedback);\n }\n if (message.showHighlight !== undefined) {\n writer.uint32(40).bool(message.showHighlight);\n }\n return writer;\n }\n PBPointerEvents_Info.encode = encode;\n function decode(input, length) {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBasePBPointerEvents_Info();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 8) {\n break;\n }\n message.button = reader.int32();\n continue;\n case 2:\n if (tag !== 18) {\n break;\n }\n message.hoverText = reader.string();\n continue;\n case 3:\n if (tag !== 29) {\n break;\n }\n message.maxDistance = reader.float();\n continue;\n case 4:\n if (tag !== 32) {\n break;\n }\n message.showFeedback = reader.bool();\n continue;\n case 5:\n if (tag !== 40) {\n break;\n }\n message.showHighlight = reader.bool();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n }\n PBPointerEvents_Info.decode = decode;\n})(PBPointerEvents_Info || (PBPointerEvents_Info = {}));\nfunction createBasePBPointerEvents_Entry() {\n return { eventType: 0, eventInfo: undefined };\n}\n/**\n * @public\n */\nexport var PBPointerEvents_Entry;\n(function (PBPointerEvents_Entry) {\n function encode(message, writer = _m0.Writer.create()) {\n if (message.eventType !== 0) {\n writer.uint32(8).int32(message.eventType);\n }\n if (message.eventInfo !== undefined) {\n PBPointerEvents_Info.encode(message.eventInfo, writer.uint32(18).fork()).ldelim();\n }\n return writer;\n }\n PBPointerEvents_Entry.encode = encode;\n function decode(input, length) {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBasePBPointerEvents_Entry();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 8) {\n break;\n }\n message.eventType = reader.int32();\n continue;\n case 2:\n if (tag !== 18) {\n break;\n }\n message.eventInfo = PBPointerEvents_Info.decode(reader, reader.uint32());\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n }\n PBPointerEvents_Entry.decode = decode;\n})(PBPointerEvents_Entry || (PBPointerEvents_Entry = {}));\n", "import { PBPointerEvents } from './pb/decentraland/sdk/components/pointer_events.gen';\n/**\n * @internal\n */\nexport const PointerEventsSchema = {\n COMPONENT_ID: 1062,\n serialize(value, builder) {\n const writer = PBPointerEvents.encode(value);\n const buffer = new Uint8Array(writer.finish(), 0, writer.len);\n builder.writeBuffer(buffer, false);\n },\n deserialize(reader) {\n return PBPointerEvents.decode(reader.buffer(), reader.remainingBytes());\n },\n create() {\n // TODO: this is a hack.\n return PBPointerEvents.decode(new Uint8Array());\n },\n jsonSchema: {\n type: \"object\",\n properties: {},\n serializationType: \"protocol-buffer\",\n protocolBuffer: \"PBPointerEvents\"\n }\n};\n", "/* eslint-disable */\nimport _m0 from \"protobufjs/minimal\";\nimport { RaycastHit } from \"./common/raycast_hit.gen\";\nconst protobufPackageSarasa = \"decentraland.sdk.components\";\nfunction createBasePBPointerEventsResult() {\n return { button: 0, hit: undefined, state: 0, timestamp: 0, analog: undefined, tickNumber: 0 };\n}\n/**\n * @public\n */\nexport var PBPointerEventsResult;\n(function (PBPointerEventsResult) {\n function encode(message, writer = _m0.Writer.create()) {\n if (message.button !== 0) {\n writer.uint32(8).int32(message.button);\n }\n if (message.hit !== undefined) {\n RaycastHit.encode(message.hit, writer.uint32(18).fork()).ldelim();\n }\n if (message.state !== 0) {\n writer.uint32(32).int32(message.state);\n }\n if (message.timestamp !== 0) {\n writer.uint32(40).uint32(message.timestamp);\n }\n if (message.analog !== undefined) {\n writer.uint32(53).float(message.analog);\n }\n if (message.tickNumber !== 0) {\n writer.uint32(56).uint32(message.tickNumber);\n }\n return writer;\n }\n PBPointerEventsResult.encode = encode;\n function decode(input, length) {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBasePBPointerEventsResult();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 8) {\n break;\n }\n message.button = reader.int32();\n continue;\n case 2:\n if (tag !== 18) {\n break;\n }\n message.hit = RaycastHit.decode(reader, reader.uint32());\n continue;\n case 4:\n if (tag !== 32) {\n break;\n }\n message.state = reader.int32();\n continue;\n case 5:\n if (tag !== 40) {\n break;\n }\n message.timestamp = reader.uint32();\n continue;\n case 6:\n if (tag !== 53) {\n break;\n }\n message.analog = reader.float();\n continue;\n case 7:\n if (tag !== 56) {\n break;\n }\n message.tickNumber = reader.uint32();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n }\n PBPointerEventsResult.decode = decode;\n})(PBPointerEventsResult || (PBPointerEventsResult = {}));\n", "/* eslint-disable */\nimport _m0 from \"protobufjs/minimal\";\nimport { Vector3 } from \"../../../common/vectors.gen\";\nconst protobufPackageSarasa = \"decentraland.sdk.components.common\";\nfunction createBaseRaycastHit() {\n return {\n position: undefined,\n globalOrigin: undefined,\n direction: undefined,\n normalHit: undefined,\n length: 0,\n meshName: undefined,\n entityId: undefined,\n };\n}\n/**\n * @public\n */\nexport var RaycastHit;\n(function (RaycastHit) {\n function encode(message, writer = _m0.Writer.create()) {\n if (message.position !== undefined) {\n Vector3.encode(message.position, writer.uint32(10).fork()).ldelim();\n }\n if (message.globalOrigin !== undefined) {\n Vector3.encode(message.globalOrigin, writer.uint32(18).fork()).ldelim();\n }\n if (message.direction !== undefined) {\n Vector3.encode(message.direction, writer.uint32(26).fork()).ldelim();\n }\n if (message.normalHit !== undefined) {\n Vector3.encode(message.normalHit, writer.uint32(34).fork()).ldelim();\n }\n if (message.length !== 0) {\n writer.uint32(45).float(message.length);\n }\n if (message.meshName !== undefined) {\n writer.uint32(50).string(message.meshName);\n }\n if (message.entityId !== undefined) {\n writer.uint32(56).uint32(message.entityId);\n }\n return writer;\n }\n RaycastHit.encode = encode;\n function decode(input, length) {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseRaycastHit();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n message.position = Vector3.decode(reader, reader.uint32());\n continue;\n case 2:\n if (tag !== 18) {\n break;\n }\n message.globalOrigin = Vector3.decode(reader, reader.uint32());\n continue;\n case 3:\n if (tag !== 26) {\n break;\n }\n message.direction = Vector3.decode(reader, reader.uint32());\n continue;\n case 4:\n if (tag !== 34) {\n break;\n }\n message.normalHit = Vector3.decode(reader, reader.uint32());\n continue;\n case 5:\n if (tag !== 45) {\n break;\n }\n message.length = reader.float();\n continue;\n case 6:\n if (tag !== 50) {\n break;\n }\n message.meshName = reader.string();\n continue;\n case 7:\n if (tag !== 56) {\n break;\n }\n message.entityId = reader.uint32();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n }\n RaycastHit.decode = decode;\n})(RaycastHit || (RaycastHit = {}));\n", "import { PBPointerEventsResult } from './pb/decentraland/sdk/components/pointer_events_result.gen';\n/**\n * @internal\n */\nexport const PointerEventsResultSchema = {\n COMPONENT_ID: 1063,\n serialize(value, builder) {\n const writer = PBPointerEventsResult.encode(value);\n const buffer = new Uint8Array(writer.finish(), 0, writer.len);\n builder.writeBuffer(buffer, false);\n },\n deserialize(reader) {\n return PBPointerEventsResult.decode(reader.buffer(), reader.remainingBytes());\n },\n create() {\n // TODO: this is a hack.\n return PBPointerEventsResult.decode(new Uint8Array());\n },\n jsonSchema: {\n type: \"object\",\n properties: {},\n serializationType: \"protocol-buffer\",\n protocolBuffer: \"PBPointerEventsResult\"\n }\n};\n", "/* eslint-disable */\nimport _m0 from \"protobufjs/minimal\";\nconst protobufPackageSarasa = \"decentraland.sdk.components\";\nfunction createBasePBPointerLock() {\n return { isPointerLocked: false };\n}\n/**\n * @public\n */\nexport var PBPointerLock;\n(function (PBPointerLock) {\n function encode(message, writer = _m0.Writer.create()) {\n if (message.isPointerLocked === true) {\n writer.uint32(8).bool(message.isPointerLocked);\n }\n return writer;\n }\n PBPointerLock.encode = encode;\n function decode(input, length) {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBasePBPointerLock();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 8) {\n break;\n }\n message.isPointerLocked = reader.bool();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n }\n PBPointerLock.decode = decode;\n})(PBPointerLock || (PBPointerLock = {}));\n", "import { PBPointerLock } from './pb/decentraland/sdk/components/pointer_lock.gen';\n/**\n * @internal\n */\nexport const PointerLockSchema = {\n COMPONENT_ID: 1074,\n serialize(value, builder) {\n const writer = PBPointerLock.encode(value);\n const buffer = new Uint8Array(writer.finish(), 0, writer.len);\n builder.writeBuffer(buffer, false);\n },\n deserialize(reader) {\n return PBPointerLock.decode(reader.buffer(), reader.remainingBytes());\n },\n create() {\n // TODO: this is a hack.\n return PBPointerLock.decode(new Uint8Array());\n },\n jsonSchema: {\n type: \"object\",\n properties: {},\n serializationType: \"protocol-buffer\",\n protocolBuffer: \"PBPointerLock\"\n }\n};\n", "/* eslint-disable */\nimport _m0 from \"protobufjs/minimal\";\nimport { Vector2, Vector3 } from \"../../common/vectors.gen\";\nconst protobufPackageSarasa = \"decentraland.sdk.components\";\n/**\n * PointerType enumerates the different input devices that can be used for pointer interactions.\n * Each type has specific characteristics and use cases in the virtual world.\n */\n/**\n * @public\n */\nexport var PointerType;\n(function (PointerType) {\n /** POT_NONE - No pointer input */\n PointerType[PointerType[\"POT_NONE\"] = 0] = \"POT_NONE\";\n /** POT_MOUSE - Traditional mouse input */\n PointerType[PointerType[\"POT_MOUSE\"] = 1] = \"POT_MOUSE\";\n})(PointerType || (PointerType = {}));\nfunction createBasePBPrimaryPointerInfo() {\n return { pointerType: undefined, screenCoordinates: undefined, screenDelta: undefined, worldRayDirection: undefined };\n}\n/**\n * @public\n */\nexport var PBPrimaryPointerInfo;\n(function (PBPrimaryPointerInfo) {\n function encode(message, writer = _m0.Writer.create()) {\n if (message.pointerType !== undefined) {\n writer.uint32(8).int32(message.pointerType);\n }\n if (message.screenCoordinates !== undefined) {\n Vector2.encode(message.screenCoordinates, writer.uint32(18).fork()).ldelim();\n }\n if (message.screenDelta !== undefined) {\n Vector2.encode(message.screenDelta, writer.uint32(26).fork()).ldelim();\n }\n if (message.worldRayDirection !== undefined) {\n Vector3.encode(message.worldRayDirection, writer.uint32(34).fork()).ldelim();\n }\n return writer;\n }\n PBPrimaryPointerInfo.encode = encode;\n function decode(input, length) {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBasePBPrimaryPointerInfo();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 8) {\n break;\n }\n message.pointerType = reader.int32();\n continue;\n case 2:\n if (tag !== 18) {\n break;\n }\n message.screenCoordinates = Vector2.decode(reader, reader.uint32());\n continue;\n case 3:\n if (tag !== 26) {\n break;\n }\n message.screenDelta = Vector2.decode(reader, reader.uint32());\n continue;\n case 4:\n if (tag !== 34) {\n break;\n }\n message.worldRayDirection = Vector3.decode(reader, reader.uint32());\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n }\n PBPrimaryPointerInfo.decode = decode;\n})(PBPrimaryPointerInfo || (PBPrimaryPointerInfo = {}));\n", "import { PBPrimaryPointerInfo } from './pb/decentraland/sdk/components/primary_pointer_info.gen';\n/**\n * @internal\n */\nexport const PrimaryPointerInfoSchema = {\n COMPONENT_ID: 1209,\n serialize(value, builder) {\n const writer = PBPrimaryPointerInfo.encode(value);\n const buffer = new Uint8Array(writer.finish(), 0, writer.len);\n builder.writeBuffer(buffer, false);\n },\n deserialize(reader) {\n return PBPrimaryPointerInfo.decode(reader.buffer(), reader.remainingBytes());\n },\n create() {\n // TODO: this is a hack.\n return PBPrimaryPointerInfo.decode(new Uint8Array());\n },\n jsonSchema: {\n type: \"object\",\n properties: {},\n serializationType: \"protocol-buffer\",\n protocolBuffer: \"PBPrimaryPointerInfo\"\n }\n};\n", "/* eslint-disable */\nimport _m0 from \"protobufjs/minimal\";\nimport { Vector3 } from \"../../common/vectors.gen\";\nconst protobufPackageSarasa = \"decentraland.sdk.components\";\n/** RaycastQueryType indicates whether the ray should stop on the first collition, or continue. */\n/**\n * @public\n */\nexport var RaycastQueryType;\n(function (RaycastQueryType) {\n /** RQT_HIT_FIRST - Pick the first (not necessarily the closest) hit within the range */\n RaycastQueryType[RaycastQueryType[\"RQT_HIT_FIRST\"] = 0] = \"RQT_HIT_FIRST\";\n /** RQT_QUERY_ALL - Pick all hits within the range */\n RaycastQueryType[RaycastQueryType[\"RQT_QUERY_ALL\"] = 1] = \"RQT_QUERY_ALL\";\n /** RQT_NONE - Do not perform the raycast, only set the raycast result with empty hits */\n RaycastQueryType[RaycastQueryType[\"RQT_NONE\"] = 2] = \"RQT_NONE\";\n})(RaycastQueryType || (RaycastQueryType = {}));\nfunction createBasePBRaycast() {\n return {\n timestamp: undefined,\n originOffset: undefined,\n direction: undefined,\n maxDistance: 0,\n queryType: 0,\n continuous: undefined,\n collisionMask: undefined,\n };\n}\n/**\n * @public\n */\nexport var PBRaycast;\n(function (PBRaycast) {\n function encode(message, writer = _m0.Writer.create()) {\n if (message.timestamp !== undefined) {\n writer.uint32(8).uint32(message.timestamp);\n }\n if (message.originOffset !== undefined) {\n Vector3.encode(message.originOffset, writer.uint32(18).fork()).ldelim();\n }\n switch (message.direction?.$case) {\n case \"localDirection\":\n Vector3.encode(message.direction.localDirection, writer.uint32(50).fork()).ldelim();\n break;\n case \"globalDirection\":\n Vector3.encode(message.direction.globalDirection, writer.uint32(26).fork()).ldelim();\n break;\n case \"globalTarget\":\n Vector3.encode(message.direction.globalTarget, writer.uint32(58).fork()).ldelim();\n break;\n case \"targetEntity\":\n writer.uint32(80).uint32(message.direction.targetEntity);\n break;\n }\n if (message.maxDistance !== 0) {\n writer.uint32(37).float(message.maxDistance);\n }\n if (message.queryType !== 0) {\n writer.uint32(40).int32(message.queryType);\n }\n if (message.continuous !== undefined) {\n writer.uint32(64).bool(message.continuous);\n }\n if (message.collisionMask !== undefined) {\n writer.uint32(72).uint32(message.collisionMask);\n }\n return writer;\n }\n PBRaycast.encode = encode;\n function decode(input, length) {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBasePBRaycast();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 8) {\n break;\n }\n message.timestamp = reader.uint32();\n continue;\n case 2:\n if (tag !== 18) {\n break;\n }\n message.originOffset = Vector3.decode(reader, reader.uint32());\n continue;\n case 6:\n if (tag !== 50) {\n break;\n }\n message.direction = { $case: \"localDirection\", localDirection: Vector3.decode(reader, reader.uint32()) };\n continue;\n case 3:\n if (tag !== 26) {\n break;\n }\n message.direction = { $case: \"globalDirection\", globalDirection: Vector3.decode(reader, reader.uint32()) };\n continue;\n case 7:\n if (tag !== 58) {\n break;\n }\n message.direction = { $case: \"globalTarget\", globalTarget: Vector3.decode(reader, reader.uint32()) };\n continue;\n case 10:\n if (tag !== 80) {\n break;\n }\n message.direction = { $case: \"targetEntity\", targetEntity: reader.uint32() };\n continue;\n case 4:\n if (tag !== 37) {\n break;\n }\n message.maxDistance = reader.float();\n continue;\n case 5:\n if (tag !== 40) {\n break;\n }\n message.queryType = reader.int32();\n continue;\n case 8:\n if (tag !== 64) {\n break;\n }\n message.continuous = reader.bool();\n continue;\n case 9:\n if (tag !== 72) {\n break;\n }\n message.collisionMask = reader.uint32();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n }\n PBRaycast.decode = decode;\n})(PBRaycast || (PBRaycast = {}));\n", "import { PBRaycast } from './pb/decentraland/sdk/components/raycast.gen';\n/**\n * @internal\n */\nexport const RaycastSchema = {\n COMPONENT_ID: 1067,\n serialize(value, builder) {\n const writer = PBRaycast.encode(value);\n const buffer = new Uint8Array(writer.finish(), 0, writer.len);\n builder.writeBuffer(buffer, false);\n },\n deserialize(reader) {\n return PBRaycast.decode(reader.buffer(), reader.remainingBytes());\n },\n create() {\n // TODO: this is a hack.\n return PBRaycast.decode(new Uint8Array());\n },\n jsonSchema: {\n type: \"object\",\n properties: {},\n serializationType: \"protocol-buffer\",\n protocolBuffer: \"PBRaycast\"\n }\n};\n", "/* eslint-disable */\nimport _m0 from \"protobufjs/minimal\";\nimport { Vector3 } from \"../../common/vectors.gen\";\nimport { RaycastHit } from \"./common/raycast_hit.gen\";\nconst protobufPackageSarasa = \"decentraland.sdk.components\";\nfunction createBasePBRaycastResult() {\n return { timestamp: undefined, globalOrigin: undefined, direction: undefined, hits: [], tickNumber: 0 };\n}\n/**\n * @public\n */\nexport var PBRaycastResult;\n(function (PBRaycastResult) {\n function encode(message, writer = _m0.Writer.create()) {\n if (message.timestamp !== undefined) {\n writer.uint32(8).uint32(message.timestamp);\n }\n if (message.globalOrigin !== undefined) {\n Vector3.encode(message.globalOrigin, writer.uint32(18).fork()).ldelim();\n }\n if (message.direction !== undefined) {\n Vector3.encode(message.direction, writer.uint32(26).fork()).ldelim();\n }\n for (const v of message.hits) {\n RaycastHit.encode(v, writer.uint32(34).fork()).ldelim();\n }\n if (message.tickNumber !== 0) {\n writer.uint32(40).uint32(message.tickNumber);\n }\n return writer;\n }\n PBRaycastResult.encode = encode;\n function decode(input, length) {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBasePBRaycastResult();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 8) {\n break;\n }\n message.timestamp = reader.uint32();\n continue;\n case 2:\n if (tag !== 18) {\n break;\n }\n message.globalOrigin = Vector3.decode(reader, reader.uint32());\n continue;\n case 3:\n if (tag !== 26) {\n break;\n }\n message.direction = Vector3.decode(reader, reader.uint32());\n continue;\n case 4:\n if (tag !== 34) {\n break;\n }\n message.hits.push(RaycastHit.decode(reader, reader.uint32()));\n continue;\n case 5:\n if (tag !== 40) {\n break;\n }\n message.tickNumber = reader.uint32();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n }\n PBRaycastResult.decode = decode;\n})(PBRaycastResult || (PBRaycastResult = {}));\n", "import { PBRaycastResult } from './pb/decentraland/sdk/components/raycast_result.gen';\n/**\n * @internal\n */\nexport const RaycastResultSchema = {\n COMPONENT_ID: 1068,\n serialize(value, builder) {\n const writer = PBRaycastResult.encode(value);\n const buffer = new Uint8Array(writer.finish(), 0, writer.len);\n builder.writeBuffer(buffer, false);\n },\n deserialize(reader) {\n return PBRaycastResult.decode(reader.buffer(), reader.remainingBytes());\n },\n create() {\n // TODO: this is a hack.\n return PBRaycastResult.decode(new Uint8Array());\n },\n jsonSchema: {\n type: \"object\",\n properties: {},\n serializationType: \"protocol-buffer\",\n protocolBuffer: \"PBRaycastResult\"\n }\n};\n", "/* eslint-disable */\nimport _m0 from \"protobufjs/minimal\";\nconst protobufPackageSarasa = \"decentraland.sdk.components\";\nfunction createBasePBRealmInfo() {\n return {\n baseUrl: \"\",\n realmName: \"\",\n networkId: 0,\n commsAdapter: \"\",\n isPreview: false,\n room: undefined,\n isConnectedSceneRoom: undefined,\n };\n}\n/**\n * @public\n */\nexport var PBRealmInfo;\n(function (PBRealmInfo) {\n function encode(message, writer = _m0.Writer.create()) {\n if (message.baseUrl !== \"\") {\n writer.uint32(10).string(message.baseUrl);\n }\n if (message.realmName !== \"\") {\n writer.uint32(18).string(message.realmName);\n }\n if (message.networkId !== 0) {\n writer.uint32(24).int32(message.networkId);\n }\n if (message.commsAdapter !== \"\") {\n writer.uint32(34).string(message.commsAdapter);\n }\n if (message.isPreview === true) {\n writer.uint32(40).bool(message.isPreview);\n }\n if (message.room !== undefined) {\n writer.uint32(50).string(message.room);\n }\n if (message.isConnectedSceneRoom !== undefined) {\n writer.uint32(56).bool(message.isConnectedSceneRoom);\n }\n return writer;\n }\n PBRealmInfo.encode = encode;\n function decode(input, length) {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBasePBRealmInfo();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n message.baseUrl = reader.string();\n continue;\n case 2:\n if (tag !== 18) {\n break;\n }\n message.realmName = reader.string();\n continue;\n case 3:\n if (tag !== 24) {\n break;\n }\n message.networkId = reader.int32();\n continue;\n case 4:\n if (tag !== 34) {\n break;\n }\n message.commsAdapter = reader.string();\n continue;\n case 5:\n if (tag !== 40) {\n break;\n }\n message.isPreview = reader.bool();\n continue;\n case 6:\n if (tag !== 50) {\n break;\n }\n message.room = reader.string();\n continue;\n case 7:\n if (tag !== 56) {\n break;\n }\n message.isConnectedSceneRoom = reader.bool();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n }\n PBRealmInfo.decode = decode;\n})(PBRealmInfo || (PBRealmInfo = {}));\n", "import { PBRealmInfo } from './pb/decentraland/sdk/components/realm_info.gen';\n/**\n * @internal\n */\nexport const RealmInfoSchema = {\n COMPONENT_ID: 1106,\n serialize(value, builder) {\n const writer = PBRealmInfo.encode(value);\n const buffer = new Uint8Array(writer.finish(), 0, writer.len);\n builder.writeBuffer(buffer, false);\n },\n deserialize(reader) {\n return PBRealmInfo.decode(reader.buffer(), reader.remainingBytes());\n },\n create() {\n // TODO: this is a hack.\n return PBRealmInfo.decode(new Uint8Array());\n },\n jsonSchema: {\n type: \"object\",\n properties: {},\n serializationType: \"protocol-buffer\",\n protocolBuffer: \"PBRealmInfo\"\n }\n};\n", "/* eslint-disable */\nimport _m0 from \"protobufjs/minimal\";\nconst protobufPackageSarasa = \"decentraland.sdk.components\";\n/** Controls the direction for animated skybox transitions */\n/**\n * @public\n */\nexport var TransitionMode;\n(function (TransitionMode) {\n /** TM_FORWARD - transitions forward (default) */\n TransitionMode[TransitionMode[\"TM_FORWARD\"] = 0] = \"TM_FORWARD\";\n /** TM_BACKWARD - transitions backward */\n TransitionMode[TransitionMode[\"TM_BACKWARD\"] = 1] = \"TM_BACKWARD\";\n})(TransitionMode || (TransitionMode = {}));\nfunction createBasePBSkyboxTime() {\n return { fixedTime: 0, transitionMode: undefined };\n}\n/**\n * @public\n */\nexport var PBSkyboxTime;\n(function (PBSkyboxTime) {\n function encode(message, writer = _m0.Writer.create()) {\n if (message.fixedTime !== 0) {\n writer.uint32(8).uint32(message.fixedTime);\n }\n if (message.transitionMode !== undefined) {\n writer.uint32(16).int32(message.transitionMode);\n }\n return writer;\n }\n PBSkyboxTime.encode = encode;\n function decode(input, length) {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBasePBSkyboxTime();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 8) {\n break;\n }\n message.fixedTime = reader.uint32();\n continue;\n case 2:\n if (tag !== 16) {\n break;\n }\n message.transitionMode = reader.int32();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n }\n PBSkyboxTime.decode = decode;\n})(PBSkyboxTime || (PBSkyboxTime = {}));\n", "import { PBSkyboxTime } from './pb/decentraland/sdk/components/skybox_time.gen';\n/**\n * @internal\n */\nexport const SkyboxTimeSchema = {\n COMPONENT_ID: 1210,\n serialize(value, builder) {\n const writer = PBSkyboxTime.encode(value);\n const buffer = new Uint8Array(writer.finish(), 0, writer.len);\n builder.writeBuffer(buffer, false);\n },\n deserialize(reader) {\n return PBSkyboxTime.decode(reader.buffer(), reader.remainingBytes());\n },\n create() {\n // TODO: this is a hack.\n return PBSkyboxTime.decode(new Uint8Array());\n },\n jsonSchema: {\n type: \"object\",\n properties: {},\n serializationType: \"protocol-buffer\",\n protocolBuffer: \"PBSkyboxTime\"\n }\n};\n", "/* eslint-disable */\nimport _m0 from \"protobufjs/minimal\";\nimport { Color3, Color4 } from \"../../common/colors.gen\";\nconst protobufPackageSarasa = \"decentraland.sdk.components\";\nfunction createBasePBTextShape() {\n return {\n text: \"\",\n font: undefined,\n fontSize: undefined,\n fontAutoSize: undefined,\n textAlign: undefined,\n width: undefined,\n height: undefined,\n paddingTop: undefined,\n paddingRight: undefined,\n paddingBottom: undefined,\n paddingLeft: undefined,\n lineSpacing: undefined,\n lineCount: undefined,\n textWrapping: undefined,\n shadowBlur: undefined,\n shadowOffsetX: undefined,\n shadowOffsetY: undefined,\n outlineWidth: undefined,\n shadowColor: undefined,\n outlineColor: undefined,\n textColor: undefined,\n };\n}\n/**\n * @public\n */\nexport var PBTextShape;\n(function (PBTextShape) {\n function encode(message, writer = _m0.Writer.create()) {\n if (message.text !== \"\") {\n writer.uint32(10).string(message.text);\n }\n if (message.font !== undefined) {\n writer.uint32(16).int32(message.font);\n }\n if (message.fontSize !== undefined) {\n writer.uint32(29).float(message.fontSize);\n }\n if (message.fontAutoSize !== undefined) {\n writer.uint32(32).bool(message.fontAutoSize);\n }\n if (message.textAlign !== undefined) {\n writer.uint32(40).int32(message.textAlign);\n }\n if (message.width !== undefined) {\n writer.uint32(53).float(message.width);\n }\n if (message.height !== undefined) {\n writer.uint32(61).float(message.height);\n }\n if (message.paddingTop !== undefined) {\n writer.uint32(69).float(message.paddingTop);\n }\n if (message.paddingRight !== undefined) {\n writer.uint32(77).float(message.paddingRight);\n }\n if (message.paddingBottom !== undefined) {\n writer.uint32(85).float(message.paddingBottom);\n }\n if (message.paddingLeft !== undefined) {\n writer.uint32(93).float(message.paddingLeft);\n }\n if (message.lineSpacing !== undefined) {\n writer.uint32(101).float(message.lineSpacing);\n }\n if (message.lineCount !== undefined) {\n writer.uint32(104).int32(message.lineCount);\n }\n if (message.textWrapping !== undefined) {\n writer.uint32(112).bool(message.textWrapping);\n }\n if (message.shadowBlur !== undefined) {\n writer.uint32(125).float(message.shadowBlur);\n }\n if (message.shadowOffsetX !== undefined) {\n writer.uint32(133).float(message.shadowOffsetX);\n }\n if (message.shadowOffsetY !== undefined) {\n writer.uint32(141).float(message.shadowOffsetY);\n }\n if (message.outlineWidth !== undefined) {\n writer.uint32(149).float(message.outlineWidth);\n }\n if (message.shadowColor !== undefined) {\n Color3.encode(message.shadowColor, writer.uint32(154).fork()).ldelim();\n }\n if (message.outlineColor !== undefined) {\n Color3.encode(message.outlineColor, writer.uint32(162).fork()).ldelim();\n }\n if (message.textColor !== undefined) {\n Color4.encode(message.textColor, writer.uint32(170).fork()).ldelim();\n }\n return writer;\n }\n PBTextShape.encode = encode;\n function decode(input, length) {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBasePBTextShape();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n message.text = reader.string();\n continue;\n case 2:\n if (tag !== 16) {\n break;\n }\n message.font = reader.int32();\n continue;\n case 3:\n if (tag !== 29) {\n break;\n }\n message.fontSize = reader.float();\n continue;\n case 4:\n if (tag !== 32) {\n break;\n }\n message.fontAutoSize = reader.bool();\n continue;\n case 5:\n if (tag !== 40) {\n break;\n }\n message.textAlign = reader.int32();\n continue;\n case 6:\n if (tag !== 53) {\n break;\n }\n message.width = reader.float();\n continue;\n case 7:\n if (tag !== 61) {\n break;\n }\n message.height = reader.float();\n continue;\n case 8:\n if (tag !== 69) {\n break;\n }\n message.paddingTop = reader.float();\n continue;\n case 9:\n if (tag !== 77) {\n break;\n }\n message.paddingRight = reader.float();\n continue;\n case 10:\n if (tag !== 85) {\n break;\n }\n message.paddingBottom = reader.float();\n continue;\n case 11:\n if (tag !== 93) {\n break;\n }\n message.paddingLeft = reader.float();\n continue;\n case 12:\n if (tag !== 101) {\n break;\n }\n message.lineSpacing = reader.float();\n continue;\n case 13:\n if (tag !== 104) {\n break;\n }\n message.lineCount = reader.int32();\n continue;\n case 14:\n if (tag !== 112) {\n break;\n }\n message.textWrapping = reader.bool();\n continue;\n case 15:\n if (tag !== 125) {\n break;\n }\n message.shadowBlur = reader.float();\n continue;\n case 16:\n if (tag !== 133) {\n break;\n }\n message.shadowOffsetX = reader.float();\n continue;\n case 17:\n if (tag !== 141) {\n break;\n }\n message.shadowOffsetY = reader.float();\n continue;\n case 18:\n if (tag !== 149) {\n break;\n }\n message.outlineWidth = reader.float();\n continue;\n case 19:\n if (tag !== 154) {\n break;\n }\n message.shadowColor = Color3.decode(reader, reader.uint32());\n continue;\n case 20:\n if (tag !== 162) {\n break;\n }\n message.outlineColor = Color3.decode(reader, reader.uint32());\n continue;\n case 21:\n if (tag !== 170) {\n break;\n }\n message.textColor = Color4.decode(reader, reader.uint32());\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n }\n PBTextShape.decode = decode;\n})(PBTextShape || (PBTextShape = {}));\n", "import { PBTextShape } from './pb/decentraland/sdk/components/text_shape.gen';\n/**\n * @internal\n */\nexport const TextShapeSchema = {\n COMPONENT_ID: 1030,\n serialize(value, builder) {\n const writer = PBTextShape.encode(value);\n const buffer = new Uint8Array(writer.finish(), 0, writer.len);\n builder.writeBuffer(buffer, false);\n },\n deserialize(reader) {\n return PBTextShape.decode(reader.buffer(), reader.remainingBytes());\n },\n create() {\n // TODO: this is a hack.\n return PBTextShape.decode(new Uint8Array());\n },\n jsonSchema: {\n type: \"object\",\n properties: {},\n serializationType: \"protocol-buffer\",\n protocolBuffer: \"PBTextShape\"\n }\n};\n", "/* eslint-disable */\nimport _m0 from \"protobufjs/minimal\";\nconst protobufPackageSarasa = \"decentraland.sdk.components\";\n/**\n * @public\n */\nexport var TriggerAreaMeshType;\n(function (TriggerAreaMeshType) {\n TriggerAreaMeshType[TriggerAreaMeshType[\"TAMT_BOX\"] = 0] = \"TAMT_BOX\";\n TriggerAreaMeshType[TriggerAreaMeshType[\"TAMT_SPHERE\"] = 1] = \"TAMT_SPHERE\";\n})(TriggerAreaMeshType || (TriggerAreaMeshType = {}));\nfunction createBasePBTriggerArea() {\n return { mesh: undefined, collisionMask: undefined };\n}\n/**\n * @public\n */\nexport var PBTriggerArea;\n(function (PBTriggerArea) {\n function encode(message, writer = _m0.Writer.create()) {\n if (message.mesh !== undefined) {\n writer.uint32(8).int32(message.mesh);\n }\n if (message.collisionMask !== undefined) {\n writer.uint32(16).uint32(message.collisionMask);\n }\n return writer;\n }\n PBTriggerArea.encode = encode;\n function decode(input, length) {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBasePBTriggerArea();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 8) {\n break;\n }\n message.mesh = reader.int32();\n continue;\n case 2:\n if (tag !== 16) {\n break;\n }\n message.collisionMask = reader.uint32();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n }\n PBTriggerArea.decode = decode;\n})(PBTriggerArea || (PBTriggerArea = {}));\n", "import { PBTriggerArea } from './pb/decentraland/sdk/components/trigger_area.gen';\n/**\n * @internal\n */\nexport const TriggerAreaSchema = {\n COMPONENT_ID: 1060,\n serialize(value, builder) {\n const writer = PBTriggerArea.encode(value);\n const buffer = new Uint8Array(writer.finish(), 0, writer.len);\n builder.writeBuffer(buffer, false);\n },\n deserialize(reader) {\n return PBTriggerArea.decode(reader.buffer(), reader.remainingBytes());\n },\n create() {\n // TODO: this is a hack.\n return PBTriggerArea.decode(new Uint8Array());\n },\n jsonSchema: {\n type: \"object\",\n properties: {},\n serializationType: \"protocol-buffer\",\n protocolBuffer: \"PBTriggerArea\"\n }\n};\n", "/* eslint-disable */\nimport _m0 from \"protobufjs/minimal\";\nimport { Quaternion, Vector3 } from \"../../common/vectors.gen\";\nconst protobufPackageSarasa = \"decentraland.sdk.components\";\n/**\n * @public\n */\nexport var TriggerAreaEventType;\n(function (TriggerAreaEventType) {\n TriggerAreaEventType[TriggerAreaEventType[\"TAET_ENTER\"] = 0] = \"TAET_ENTER\";\n TriggerAreaEventType[TriggerAreaEventType[\"TAET_STAY\"] = 1] = \"TAET_STAY\";\n TriggerAreaEventType[TriggerAreaEventType[\"TAET_EXIT\"] = 2] = \"TAET_EXIT\";\n})(TriggerAreaEventType || (TriggerAreaEventType = {}));\nfunction createBasePBTriggerAreaResult() {\n return {\n triggeredEntity: 0,\n triggeredEntityPosition: undefined,\n triggeredEntityRotation: undefined,\n eventType: 0,\n timestamp: 0,\n trigger: undefined,\n };\n}\n/**\n * @public\n */\nexport var PBTriggerAreaResult;\n(function (PBTriggerAreaResult) {\n function encode(message, writer = _m0.Writer.create()) {\n if (message.triggeredEntity !== 0) {\n writer.uint32(8).uint32(message.triggeredEntity);\n }\n if (message.triggeredEntityPosition !== undefined) {\n Vector3.encode(message.triggeredEntityPosition, writer.uint32(18).fork()).ldelim();\n }\n if (message.triggeredEntityRotation !== undefined) {\n Quaternion.encode(message.triggeredEntityRotation, writer.uint32(26).fork()).ldelim();\n }\n if (message.eventType !== 0) {\n writer.uint32(32).int32(message.eventType);\n }\n if (message.timestamp !== 0) {\n writer.uint32(40).uint32(message.timestamp);\n }\n if (message.trigger !== undefined) {\n PBTriggerAreaResult_Trigger.encode(message.trigger, writer.uint32(50).fork()).ldelim();\n }\n return writer;\n }\n PBTriggerAreaResult.encode = encode;\n function decode(input, length) {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBasePBTriggerAreaResult();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 8) {\n break;\n }\n message.triggeredEntity = reader.uint32();\n continue;\n case 2:\n if (tag !== 18) {\n break;\n }\n message.triggeredEntityPosition = Vector3.decode(reader, reader.uint32());\n continue;\n case 3:\n if (tag !== 26) {\n break;\n }\n message.triggeredEntityRotation = Quaternion.decode(reader, reader.uint32());\n continue;\n case 4:\n if (tag !== 32) {\n break;\n }\n message.eventType = reader.int32();\n continue;\n case 5:\n if (tag !== 40) {\n break;\n }\n message.timestamp = reader.uint32();\n continue;\n case 6:\n if (tag !== 50) {\n break;\n }\n message.trigger = PBTriggerAreaResult_Trigger.decode(reader, reader.uint32());\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n }\n PBTriggerAreaResult.decode = decode;\n})(PBTriggerAreaResult || (PBTriggerAreaResult = {}));\nfunction createBasePBTriggerAreaResult_Trigger() {\n return { entity: 0, layers: 0, position: undefined, rotation: undefined, scale: undefined };\n}\n/**\n * @public\n */\nexport var PBTriggerAreaResult_Trigger;\n(function (PBTriggerAreaResult_Trigger) {\n function encode(message, writer = _m0.Writer.create()) {\n if (message.entity !== 0) {\n writer.uint32(8).uint32(message.entity);\n }\n if (message.layers !== 0) {\n writer.uint32(16).uint32(message.layers);\n }\n if (message.position !== undefined) {\n Vector3.encode(message.position, writer.uint32(26).fork()).ldelim();\n }\n if (message.rotation !== undefined) {\n Quaternion.encode(message.rotation, writer.uint32(34).fork()).ldelim();\n }\n if (message.scale !== undefined) {\n Vector3.encode(message.scale, writer.uint32(42).fork()).ldelim();\n }\n return writer;\n }\n PBTriggerAreaResult_Trigger.encode = encode;\n function decode(input, length) {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBasePBTriggerAreaResult_Trigger();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 8) {\n break;\n }\n message.entity = reader.uint32();\n continue;\n case 2:\n if (tag !== 16) {\n break;\n }\n message.layers = reader.uint32();\n continue;\n case 3:\n if (tag !== 26) {\n break;\n }\n message.position = Vector3.decode(reader, reader.uint32());\n continue;\n case 4:\n if (tag !== 34) {\n break;\n }\n message.rotation = Quaternion.decode(reader, reader.uint32());\n continue;\n case 5:\n if (tag !== 42) {\n break;\n }\n message.scale = Vector3.decode(reader, reader.uint32());\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n }\n PBTriggerAreaResult_Trigger.decode = decode;\n})(PBTriggerAreaResult_Trigger || (PBTriggerAreaResult_Trigger = {}));\n", "import { PBTriggerAreaResult } from './pb/decentraland/sdk/components/trigger_area_result.gen';\n/**\n * @internal\n */\nexport const TriggerAreaResultSchema = {\n COMPONENT_ID: 1061,\n serialize(value, builder) {\n const writer = PBTriggerAreaResult.encode(value);\n const buffer = new Uint8Array(writer.finish(), 0, writer.len);\n builder.writeBuffer(buffer, false);\n },\n deserialize(reader) {\n return PBTriggerAreaResult.decode(reader.buffer(), reader.remainingBytes());\n },\n create() {\n // TODO: this is a hack.\n return PBTriggerAreaResult.decode(new Uint8Array());\n },\n jsonSchema: {\n type: \"object\",\n properties: {},\n serializationType: \"protocol-buffer\",\n protocolBuffer: \"PBTriggerAreaResult\"\n }\n};\n", "/* eslint-disable */\nimport _m0 from \"protobufjs/minimal\";\nimport { Quaternion, Vector2, Vector3 } from \"../../common/vectors.gen\";\nconst protobufPackageSarasa = \"decentraland.sdk.components\";\n/**\n * @public\n */\nexport var TextureMovementType;\n(function (TextureMovementType) {\n /** TMT_OFFSET - default = TextureMovementType.TMT_OFFSET */\n TextureMovementType[TextureMovementType[\"TMT_OFFSET\"] = 0] = \"TMT_OFFSET\";\n TextureMovementType[TextureMovementType[\"TMT_TILING\"] = 1] = \"TMT_TILING\";\n})(TextureMovementType || (TextureMovementType = {}));\n/**\n * Implementation guidelines for these easing functions can be found\n * at https://github.com/ai/easings.net/blob/6fcd5f852a470bf1a7890e8178afa0f471d5f2ec/src/easings/easingsFunctions.ts\n */\n/**\n * @public\n */\nexport var EasingFunction;\n(function (EasingFunction) {\n /** EF_LINEAR - default */\n EasingFunction[EasingFunction[\"EF_LINEAR\"] = 0] = \"EF_LINEAR\";\n EasingFunction[EasingFunction[\"EF_EASEINQUAD\"] = 1] = \"EF_EASEINQUAD\";\n EasingFunction[EasingFunction[\"EF_EASEOUTQUAD\"] = 2] = \"EF_EASEOUTQUAD\";\n EasingFunction[EasingFunction[\"EF_EASEQUAD\"] = 3] = \"EF_EASEQUAD\";\n EasingFunction[EasingFunction[\"EF_EASEINSINE\"] = 4] = \"EF_EASEINSINE\";\n EasingFunction[EasingFunction[\"EF_EASEOUTSINE\"] = 5] = \"EF_EASEOUTSINE\";\n EasingFunction[EasingFunction[\"EF_EASESINE\"] = 6] = \"EF_EASESINE\";\n EasingFunction[EasingFunction[\"EF_EASEINEXPO\"] = 7] = \"EF_EASEINEXPO\";\n EasingFunction[EasingFunction[\"EF_EASEOUTEXPO\"] = 8] = \"EF_EASEOUTEXPO\";\n EasingFunction[EasingFunction[\"EF_EASEEXPO\"] = 9] = \"EF_EASEEXPO\";\n EasingFunction[EasingFunction[\"EF_EASEINELASTIC\"] = 10] = \"EF_EASEINELASTIC\";\n EasingFunction[EasingFunction[\"EF_EASEOUTELASTIC\"] = 11] = \"EF_EASEOUTELASTIC\";\n EasingFunction[EasingFunction[\"EF_EASEELASTIC\"] = 12] = \"EF_EASEELASTIC\";\n EasingFunction[EasingFunction[\"EF_EASEINBOUNCE\"] = 13] = \"EF_EASEINBOUNCE\";\n EasingFunction[EasingFunction[\"EF_EASEOUTBOUNCE\"] = 14] = \"EF_EASEOUTBOUNCE\";\n EasingFunction[EasingFunction[\"EF_EASEBOUNCE\"] = 15] = \"EF_EASEBOUNCE\";\n EasingFunction[EasingFunction[\"EF_EASEINCUBIC\"] = 16] = \"EF_EASEINCUBIC\";\n EasingFunction[EasingFunction[\"EF_EASEOUTCUBIC\"] = 17] = \"EF_EASEOUTCUBIC\";\n EasingFunction[EasingFunction[\"EF_EASECUBIC\"] = 18] = \"EF_EASECUBIC\";\n EasingFunction[EasingFunction[\"EF_EASEINQUART\"] = 19] = \"EF_EASEINQUART\";\n EasingFunction[EasingFunction[\"EF_EASEOUTQUART\"] = 20] = \"EF_EASEOUTQUART\";\n EasingFunction[EasingFunction[\"EF_EASEQUART\"] = 21] = \"EF_EASEQUART\";\n EasingFunction[EasingFunction[\"EF_EASEINQUINT\"] = 22] = \"EF_EASEINQUINT\";\n EasingFunction[EasingFunction[\"EF_EASEOUTQUINT\"] = 23] = \"EF_EASEOUTQUINT\";\n EasingFunction[EasingFunction[\"EF_EASEQUINT\"] = 24] = \"EF_EASEQUINT\";\n EasingFunction[EasingFunction[\"EF_EASEINCIRC\"] = 25] = \"EF_EASEINCIRC\";\n EasingFunction[EasingFunction[\"EF_EASEOUTCIRC\"] = 26] = \"EF_EASEOUTCIRC\";\n EasingFunction[EasingFunction[\"EF_EASECIRC\"] = 27] = \"EF_EASECIRC\";\n EasingFunction[EasingFunction[\"EF_EASEINBACK\"] = 28] = \"EF_EASEINBACK\";\n EasingFunction[EasingFunction[\"EF_EASEOUTBACK\"] = 29] = \"EF_EASEOUTBACK\";\n EasingFunction[EasingFunction[\"EF_EASEBACK\"] = 30] = \"EF_EASEBACK\";\n})(EasingFunction || (EasingFunction = {}));\nfunction createBasePBTween() {\n return { duration: 0, easingFunction: 0, mode: undefined, playing: undefined, currentTime: undefined };\n}\n/**\n * @public\n */\nexport var PBTween;\n(function (PBTween) {\n function encode(message, writer = _m0.Writer.create()) {\n if (message.duration !== 0) {\n writer.uint32(13).float(message.duration);\n }\n if (message.easingFunction !== 0) {\n writer.uint32(16).int32(message.easingFunction);\n }\n switch (message.mode?.$case) {\n case \"move\":\n Move.encode(message.mode.move, writer.uint32(26).fork()).ldelim();\n break;\n case \"rotate\":\n Rotate.encode(message.mode.rotate, writer.uint32(34).fork()).ldelim();\n break;\n case \"scale\":\n Scale.encode(message.mode.scale, writer.uint32(42).fork()).ldelim();\n break;\n case \"textureMove\":\n TextureMove.encode(message.mode.textureMove, writer.uint32(66).fork()).ldelim();\n break;\n }\n if (message.playing !== undefined) {\n writer.uint32(48).bool(message.playing);\n }\n if (message.currentTime !== undefined) {\n writer.uint32(61).float(message.currentTime);\n }\n return writer;\n }\n PBTween.encode = encode;\n function decode(input, length) {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBasePBTween();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 13) {\n break;\n }\n message.duration = reader.float();\n continue;\n case 2:\n if (tag !== 16) {\n break;\n }\n message.easingFunction = reader.int32();\n continue;\n case 3:\n if (tag !== 26) {\n break;\n }\n message.mode = { $case: \"move\", move: Move.decode(reader, reader.uint32()) };\n continue;\n case 4:\n if (tag !== 34) {\n break;\n }\n message.mode = { $case: \"rotate\", rotate: Rotate.decode(reader, reader.uint32()) };\n continue;\n case 5:\n if (tag !== 42) {\n break;\n }\n message.mode = { $case: \"scale\", scale: Scale.decode(reader, reader.uint32()) };\n continue;\n case 8:\n if (tag !== 66) {\n break;\n }\n message.mode = { $case: \"textureMove\", textureMove: TextureMove.decode(reader, reader.uint32()) };\n continue;\n case 6:\n if (tag !== 48) {\n break;\n }\n message.playing = reader.bool();\n continue;\n case 7:\n if (tag !== 61) {\n break;\n }\n message.currentTime = reader.float();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n }\n PBTween.decode = decode;\n})(PBTween || (PBTween = {}));\nfunction createBaseMove() {\n return { start: undefined, end: undefined, faceDirection: undefined };\n}\n/**\n * @public\n */\nexport var Move;\n(function (Move) {\n function encode(message, writer = _m0.Writer.create()) {\n if (message.start !== undefined) {\n Vector3.encode(message.start, writer.uint32(10).fork()).ldelim();\n }\n if (message.end !== undefined) {\n Vector3.encode(message.end, writer.uint32(18).fork()).ldelim();\n }\n if (message.faceDirection !== undefined) {\n writer.uint32(24).bool(message.faceDirection);\n }\n return writer;\n }\n Move.encode = encode;\n function decode(input, length) {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseMove();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n message.start = Vector3.decode(reader, reader.uint32());\n continue;\n case 2:\n if (tag !== 18) {\n break;\n }\n message.end = Vector3.decode(reader, reader.uint32());\n continue;\n case 3:\n if (tag !== 24) {\n break;\n }\n message.faceDirection = reader.bool();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n }\n Move.decode = decode;\n})(Move || (Move = {}));\nfunction createBaseRotate() {\n return { start: undefined, end: undefined };\n}\n/**\n * @public\n */\nexport var Rotate;\n(function (Rotate) {\n function encode(message, writer = _m0.Writer.create()) {\n if (message.start !== undefined) {\n Quaternion.encode(message.start, writer.uint32(10).fork()).ldelim();\n }\n if (message.end !== undefined) {\n Quaternion.encode(message.end, writer.uint32(18).fork()).ldelim();\n }\n return writer;\n }\n Rotate.encode = encode;\n function decode(input, length) {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseRotate();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n message.start = Quaternion.decode(reader, reader.uint32());\n continue;\n case 2:\n if (tag !== 18) {\n break;\n }\n message.end = Quaternion.decode(reader, reader.uint32());\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n }\n Rotate.decode = decode;\n})(Rotate || (Rotate = {}));\nfunction createBaseScale() {\n return { start: undefined, end: undefined };\n}\n/**\n * @public\n */\nexport var Scale;\n(function (Scale) {\n function encode(message, writer = _m0.Writer.create()) {\n if (message.start !== undefined) {\n Vector3.encode(message.start, writer.uint32(10).fork()).ldelim();\n }\n if (message.end !== undefined) {\n Vector3.encode(message.end, writer.uint32(18).fork()).ldelim();\n }\n return writer;\n }\n Scale.encode = encode;\n function decode(input, length) {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseScale();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n message.start = Vector3.decode(reader, reader.uint32());\n continue;\n case 2:\n if (tag !== 18) {\n break;\n }\n message.end = Vector3.decode(reader, reader.uint32());\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n }\n Scale.decode = decode;\n})(Scale || (Scale = {}));\nfunction createBaseTextureMove() {\n return { start: undefined, end: undefined, movementType: undefined };\n}\n/**\n * @public\n */\nexport var TextureMove;\n(function (TextureMove) {\n function encode(message, writer = _m0.Writer.create()) {\n if (message.start !== undefined) {\n Vector2.encode(message.start, writer.uint32(10).fork()).ldelim();\n }\n if (message.end !== undefined) {\n Vector2.encode(message.end, writer.uint32(18).fork()).ldelim();\n }\n if (message.movementType !== undefined) {\n writer.uint32(24).int32(message.movementType);\n }\n return writer;\n }\n TextureMove.encode = encode;\n function decode(input, length) {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseTextureMove();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n message.start = Vector2.decode(reader, reader.uint32());\n continue;\n case 2:\n if (tag !== 18) {\n break;\n }\n message.end = Vector2.decode(reader, reader.uint32());\n continue;\n case 3:\n if (tag !== 24) {\n break;\n }\n message.movementType = reader.int32();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n }\n TextureMove.decode = decode;\n})(TextureMove || (TextureMove = {}));\n", "import { PBTween } from './pb/decentraland/sdk/components/tween.gen';\n/**\n * @internal\n */\nexport const TweenSchema = {\n COMPONENT_ID: 1102,\n serialize(value, builder) {\n const writer = PBTween.encode(value);\n const buffer = new Uint8Array(writer.finish(), 0, writer.len);\n builder.writeBuffer(buffer, false);\n },\n deserialize(reader) {\n return PBTween.decode(reader.buffer(), reader.remainingBytes());\n },\n create() {\n // TODO: this is a hack.\n return PBTween.decode(new Uint8Array());\n },\n jsonSchema: {\n type: \"object\",\n properties: {},\n serializationType: \"protocol-buffer\",\n protocolBuffer: \"PBTween\"\n }\n};\n", "/* eslint-disable */\nimport _m0 from \"protobufjs/minimal\";\nimport { PBTween } from \"./tween.gen\";\nconst protobufPackageSarasa = \"decentraland.sdk.components\";\n/**\n * @public\n */\nexport var TweenLoop;\n(function (TweenLoop) {\n TweenLoop[TweenLoop[\"TL_RESTART\"] = 0] = \"TL_RESTART\";\n TweenLoop[TweenLoop[\"TL_YOYO\"] = 1] = \"TL_YOYO\";\n})(TweenLoop || (TweenLoop = {}));\nfunction createBasePBTweenSequence() {\n return { sequence: [], loop: undefined };\n}\n/**\n * @public\n */\nexport var PBTweenSequence;\n(function (PBTweenSequence) {\n function encode(message, writer = _m0.Writer.create()) {\n for (const v of message.sequence) {\n PBTween.encode(v, writer.uint32(10).fork()).ldelim();\n }\n if (message.loop !== undefined) {\n writer.uint32(16).int32(message.loop);\n }\n return writer;\n }\n PBTweenSequence.encode = encode;\n function decode(input, length) {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBasePBTweenSequence();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n message.sequence.push(PBTween.decode(reader, reader.uint32()));\n continue;\n case 2:\n if (tag !== 16) {\n break;\n }\n message.loop = reader.int32();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n }\n PBTweenSequence.decode = decode;\n})(PBTweenSequence || (PBTweenSequence = {}));\n", "import { PBTweenSequence } from './pb/decentraland/sdk/components/tween_sequence.gen';\n/**\n * @internal\n */\nexport const TweenSequenceSchema = {\n COMPONENT_ID: 1104,\n serialize(value, builder) {\n const writer = PBTweenSequence.encode(value);\n const buffer = new Uint8Array(writer.finish(), 0, writer.len);\n builder.writeBuffer(buffer, false);\n },\n deserialize(reader) {\n return PBTweenSequence.decode(reader.buffer(), reader.remainingBytes());\n },\n create() {\n // TODO: this is a hack.\n return PBTweenSequence.decode(new Uint8Array());\n },\n jsonSchema: {\n type: \"object\",\n properties: {},\n serializationType: \"protocol-buffer\",\n protocolBuffer: \"PBTweenSequence\"\n }\n};\n", "/* eslint-disable */\nimport _m0 from \"protobufjs/minimal\";\nconst protobufPackageSarasa = \"decentraland.sdk.components\";\n/**\n * @public\n */\nexport var TweenStateStatus;\n(function (TweenStateStatus) {\n TweenStateStatus[TweenStateStatus[\"TS_ACTIVE\"] = 0] = \"TS_ACTIVE\";\n TweenStateStatus[TweenStateStatus[\"TS_COMPLETED\"] = 1] = \"TS_COMPLETED\";\n TweenStateStatus[TweenStateStatus[\"TS_PAUSED\"] = 2] = \"TS_PAUSED\";\n})(TweenStateStatus || (TweenStateStatus = {}));\nfunction createBasePBTweenState() {\n return { state: 0, currentTime: 0 };\n}\n/**\n * @public\n */\nexport var PBTweenState;\n(function (PBTweenState) {\n function encode(message, writer = _m0.Writer.create()) {\n if (message.state !== 0) {\n writer.uint32(8).int32(message.state);\n }\n if (message.currentTime !== 0) {\n writer.uint32(21).float(message.currentTime);\n }\n return writer;\n }\n PBTweenState.encode = encode;\n function decode(input, length) {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBasePBTweenState();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 8) {\n break;\n }\n message.state = reader.int32();\n continue;\n case 2:\n if (tag !== 21) {\n break;\n }\n message.currentTime = reader.float();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n }\n PBTweenState.decode = decode;\n})(PBTweenState || (PBTweenState = {}));\n", "import { PBTweenState } from './pb/decentraland/sdk/components/tween_state.gen';\n/**\n * @internal\n */\nexport const TweenStateSchema = {\n COMPONENT_ID: 1103,\n serialize(value, builder) {\n const writer = PBTweenState.encode(value);\n const buffer = new Uint8Array(writer.finish(), 0, writer.len);\n builder.writeBuffer(buffer, false);\n },\n deserialize(reader) {\n return PBTweenState.decode(reader.buffer(), reader.remainingBytes());\n },\n create() {\n // TODO: this is a hack.\n return PBTweenState.decode(new Uint8Array());\n },\n jsonSchema: {\n type: \"object\",\n properties: {},\n serializationType: \"protocol-buffer\",\n protocolBuffer: \"PBTweenState\"\n }\n};\n", "/* eslint-disable */\nimport _m0 from \"protobufjs/minimal\";\nimport { BorderRect } from \"../../common/border_rect.gen\";\nimport { Color4 } from \"../../common/colors.gen\";\nimport { TextureUnion } from \"../../common/texture.gen\";\nconst protobufPackageSarasa = \"decentraland.sdk.components\";\n/**\n * @public\n */\nexport var BackgroundTextureMode;\n(function (BackgroundTextureMode) {\n /**\n * NINE_SLICES - https://docs.unity3d.com/Manual/UIE-USS-SupportedProperties.html (Slicing section)\n * https://forum.unity.com/threads/how-does-slicing-in-ui-tookkit-works.1235863/\n * https://docs.unity3d.com/Manual/9SliceSprites.html\n * https://developer.mozilla.org/en-US/docs/Web/CSS/border-image-slice\n */\n BackgroundTextureMode[BackgroundTextureMode[\"NINE_SLICES\"] = 0] = \"NINE_SLICES\";\n /**\n * CENTER - CENTER enables the texture to be rendered centered in relation to the\n * element. If the element is smaller than the texture then the background\n * should use the element as stencil to cut off the out-of-bounds area\n */\n BackgroundTextureMode[BackgroundTextureMode[\"CENTER\"] = 1] = \"CENTER\";\n /**\n * STRETCH - STRETCH enables the texture to cover all the area of the container,\n * adopting its aspect ratio.\n */\n BackgroundTextureMode[BackgroundTextureMode[\"STRETCH\"] = 2] = \"STRETCH\";\n})(BackgroundTextureMode || (BackgroundTextureMode = {}));\nfunction createBasePBUiBackground() {\n return { color: undefined, texture: undefined, textureMode: 0, textureSlices: undefined, uvs: [] };\n}\n/**\n * @public\n */\nexport var PBUiBackground;\n(function (PBUiBackground) {\n function encode(message, writer = _m0.Writer.create()) {\n if (message.color !== undefined) {\n Color4.encode(message.color, writer.uint32(10).fork()).ldelim();\n }\n if (message.texture !== undefined) {\n TextureUnion.encode(message.texture, writer.uint32(18).fork()).ldelim();\n }\n if (message.textureMode !== 0) {\n writer.uint32(24).int32(message.textureMode);\n }\n if (message.textureSlices !== undefined) {\n BorderRect.encode(message.textureSlices, writer.uint32(34).fork()).ldelim();\n }\n writer.uint32(42).fork();\n for (const v of message.uvs) {\n writer.float(v);\n }\n writer.ldelim();\n return writer;\n }\n PBUiBackground.encode = encode;\n function decode(input, length) {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBasePBUiBackground();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n message.color = Color4.decode(reader, reader.uint32());\n continue;\n case 2:\n if (tag !== 18) {\n break;\n }\n message.texture = TextureUnion.decode(reader, reader.uint32());\n continue;\n case 3:\n if (tag !== 24) {\n break;\n }\n message.textureMode = reader.int32();\n continue;\n case 4:\n if (tag !== 34) {\n break;\n }\n message.textureSlices = BorderRect.decode(reader, reader.uint32());\n continue;\n case 5:\n if (tag === 45) {\n message.uvs.push(reader.float());\n continue;\n }\n if (tag === 42) {\n const end2 = reader.uint32() + reader.pos;\n while (reader.pos < end2) {\n message.uvs.push(reader.float());\n }\n continue;\n }\n break;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n }\n PBUiBackground.decode = decode;\n})(PBUiBackground || (PBUiBackground = {}));\n", "/* eslint-disable */\nimport _m0 from \"protobufjs/minimal\";\nconst protobufPackageSarasa = \"decentraland.common\";\nfunction createBaseBorderRect() {\n return { top: 0, left: 0, right: 0, bottom: 0 };\n}\n/**\n * @public\n */\nexport var BorderRect;\n(function (BorderRect) {\n function encode(message, writer = _m0.Writer.create()) {\n if (message.top !== 0) {\n writer.uint32(13).float(message.top);\n }\n if (message.left !== 0) {\n writer.uint32(21).float(message.left);\n }\n if (message.right !== 0) {\n writer.uint32(29).float(message.right);\n }\n if (message.bottom !== 0) {\n writer.uint32(37).float(message.bottom);\n }\n return writer;\n }\n BorderRect.encode = encode;\n function decode(input, length) {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseBorderRect();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 13) {\n break;\n }\n message.top = reader.float();\n continue;\n case 2:\n if (tag !== 21) {\n break;\n }\n message.left = reader.float();\n continue;\n case 3:\n if (tag !== 29) {\n break;\n }\n message.right = reader.float();\n continue;\n case 4:\n if (tag !== 37) {\n break;\n }\n message.bottom = reader.float();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n }\n BorderRect.decode = decode;\n})(BorderRect || (BorderRect = {}));\nfunction createBaseRect() {\n return { x: 0, y: 0, width: 0, height: 0 };\n}\n/**\n * @public\n */\nexport var Rect;\n(function (Rect) {\n function encode(message, writer = _m0.Writer.create()) {\n if (message.x !== 0) {\n writer.uint32(13).float(message.x);\n }\n if (message.y !== 0) {\n writer.uint32(21).float(message.y);\n }\n if (message.width !== 0) {\n writer.uint32(29).float(message.width);\n }\n if (message.height !== 0) {\n writer.uint32(37).float(message.height);\n }\n return writer;\n }\n Rect.encode = encode;\n function decode(input, length) {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseRect();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 13) {\n break;\n }\n message.x = reader.float();\n continue;\n case 2:\n if (tag !== 21) {\n break;\n }\n message.y = reader.float();\n continue;\n case 3:\n if (tag !== 29) {\n break;\n }\n message.width = reader.float();\n continue;\n case 4:\n if (tag !== 37) {\n break;\n }\n message.height = reader.float();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n }\n Rect.decode = decode;\n})(Rect || (Rect = {}));\n", "import { PBUiBackground } from './pb/decentraland/sdk/components/ui_background.gen';\n/**\n * @internal\n */\nexport const UiBackgroundSchema = {\n COMPONENT_ID: 1053,\n serialize(value, builder) {\n const writer = PBUiBackground.encode(value);\n const buffer = new Uint8Array(writer.finish(), 0, writer.len);\n builder.writeBuffer(buffer, false);\n },\n deserialize(reader) {\n return PBUiBackground.decode(reader.buffer(), reader.remainingBytes());\n },\n create() {\n // TODO: this is a hack.\n return PBUiBackground.decode(new Uint8Array());\n },\n jsonSchema: {\n type: \"object\",\n properties: {},\n serializationType: \"protocol-buffer\",\n protocolBuffer: \"PBUiBackground\"\n }\n};\n", "/* eslint-disable */\nimport _m0 from \"protobufjs/minimal\";\nimport { BorderRect } from \"../../common/border_rect.gen\";\nconst protobufPackageSarasa = \"decentraland.sdk.components\";\nfunction createBasePBUiCanvasInformation() {\n return { devicePixelRatio: 0, width: 0, height: 0, interactableArea: undefined };\n}\n/**\n * @public\n */\nexport var PBUiCanvasInformation;\n(function (PBUiCanvasInformation) {\n function encode(message, writer = _m0.Writer.create()) {\n if (message.devicePixelRatio !== 0) {\n writer.uint32(13).float(message.devicePixelRatio);\n }\n if (message.width !== 0) {\n writer.uint32(16).int32(message.width);\n }\n if (message.height !== 0) {\n writer.uint32(24).int32(message.height);\n }\n if (message.interactableArea !== undefined) {\n BorderRect.encode(message.interactableArea, writer.uint32(34).fork()).ldelim();\n }\n return writer;\n }\n PBUiCanvasInformation.encode = encode;\n function decode(input, length) {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBasePBUiCanvasInformation();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 13) {\n break;\n }\n message.devicePixelRatio = reader.float();\n continue;\n case 2:\n if (tag !== 16) {\n break;\n }\n message.width = reader.int32();\n continue;\n case 3:\n if (tag !== 24) {\n break;\n }\n message.height = reader.int32();\n continue;\n case 4:\n if (tag !== 34) {\n break;\n }\n message.interactableArea = BorderRect.decode(reader, reader.uint32());\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n }\n PBUiCanvasInformation.decode = decode;\n})(PBUiCanvasInformation || (PBUiCanvasInformation = {}));\n", "import { PBUiCanvasInformation } from './pb/decentraland/sdk/components/ui_canvas_information.gen';\n/**\n * @internal\n */\nexport const UiCanvasInformationSchema = {\n COMPONENT_ID: 1054,\n serialize(value, builder) {\n const writer = PBUiCanvasInformation.encode(value);\n const buffer = new Uint8Array(writer.finish(), 0, writer.len);\n builder.writeBuffer(buffer, false);\n },\n deserialize(reader) {\n return PBUiCanvasInformation.decode(reader.buffer(), reader.remainingBytes());\n },\n create() {\n // TODO: this is a hack.\n return PBUiCanvasInformation.decode(new Uint8Array());\n },\n jsonSchema: {\n type: \"object\",\n properties: {},\n serializationType: \"protocol-buffer\",\n protocolBuffer: \"PBUiCanvasInformation\"\n }\n};\n", "/* eslint-disable */\nimport _m0 from \"protobufjs/minimal\";\nimport { Color4 } from \"../../common/colors.gen\";\nconst protobufPackageSarasa = \"decentraland.sdk.components\";\nfunction createBasePBUiDropdown() {\n return {\n acceptEmpty: false,\n emptyLabel: undefined,\n options: [],\n selectedIndex: undefined,\n disabled: false,\n color: undefined,\n textAlign: undefined,\n font: undefined,\n fontSize: undefined,\n };\n}\n/**\n * @public\n */\nexport var PBUiDropdown;\n(function (PBUiDropdown) {\n function encode(message, writer = _m0.Writer.create()) {\n if (message.acceptEmpty === true) {\n writer.uint32(8).bool(message.acceptEmpty);\n }\n if (message.emptyLabel !== undefined) {\n writer.uint32(18).string(message.emptyLabel);\n }\n for (const v of message.options) {\n writer.uint32(26).string(v);\n }\n if (message.selectedIndex !== undefined) {\n writer.uint32(32).int32(message.selectedIndex);\n }\n if (message.disabled === true) {\n writer.uint32(40).bool(message.disabled);\n }\n if (message.color !== undefined) {\n Color4.encode(message.color, writer.uint32(50).fork()).ldelim();\n }\n if (message.textAlign !== undefined) {\n writer.uint32(80).int32(message.textAlign);\n }\n if (message.font !== undefined) {\n writer.uint32(88).int32(message.font);\n }\n if (message.fontSize !== undefined) {\n writer.uint32(96).int32(message.fontSize);\n }\n return writer;\n }\n PBUiDropdown.encode = encode;\n function decode(input, length) {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBasePBUiDropdown();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 8) {\n break;\n }\n message.acceptEmpty = reader.bool();\n continue;\n case 2:\n if (tag !== 18) {\n break;\n }\n message.emptyLabel = reader.string();\n continue;\n case 3:\n if (tag !== 26) {\n break;\n }\n message.options.push(reader.string());\n continue;\n case 4:\n if (tag !== 32) {\n break;\n }\n message.selectedIndex = reader.int32();\n continue;\n case 5:\n if (tag !== 40) {\n break;\n }\n message.disabled = reader.bool();\n continue;\n case 6:\n if (tag !== 50) {\n break;\n }\n message.color = Color4.decode(reader, reader.uint32());\n continue;\n case 10:\n if (tag !== 80) {\n break;\n }\n message.textAlign = reader.int32();\n continue;\n case 11:\n if (tag !== 88) {\n break;\n }\n message.font = reader.int32();\n continue;\n case 12:\n if (tag !== 96) {\n break;\n }\n message.fontSize = reader.int32();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n }\n PBUiDropdown.decode = decode;\n})(PBUiDropdown || (PBUiDropdown = {}));\n", "import { PBUiDropdown } from './pb/decentraland/sdk/components/ui_dropdown.gen';\n/**\n * @internal\n */\nexport const UiDropdownSchema = {\n COMPONENT_ID: 1094,\n serialize(value, builder) {\n const writer = PBUiDropdown.encode(value);\n const buffer = new Uint8Array(writer.finish(), 0, writer.len);\n builder.writeBuffer(buffer, false);\n },\n deserialize(reader) {\n return PBUiDropdown.decode(reader.buffer(), reader.remainingBytes());\n },\n create() {\n // TODO: this is a hack.\n return PBUiDropdown.decode(new Uint8Array());\n },\n jsonSchema: {\n type: \"object\",\n properties: {},\n serializationType: \"protocol-buffer\",\n protocolBuffer: \"PBUiDropdown\"\n }\n};\n", "/* eslint-disable */\nimport _m0 from \"protobufjs/minimal\";\nconst protobufPackageSarasa = \"decentraland.sdk.components\";\nfunction createBasePBUiDropdownResult() {\n return { value: 0 };\n}\n/**\n * @public\n */\nexport var PBUiDropdownResult;\n(function (PBUiDropdownResult) {\n function encode(message, writer = _m0.Writer.create()) {\n if (message.value !== 0) {\n writer.uint32(8).int32(message.value);\n }\n return writer;\n }\n PBUiDropdownResult.encode = encode;\n function decode(input, length) {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBasePBUiDropdownResult();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 8) {\n break;\n }\n message.value = reader.int32();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n }\n PBUiDropdownResult.decode = decode;\n})(PBUiDropdownResult || (PBUiDropdownResult = {}));\n", "import { PBUiDropdownResult } from './pb/decentraland/sdk/components/ui_dropdown_result.gen';\n/**\n * @internal\n */\nexport const UiDropdownResultSchema = {\n COMPONENT_ID: 1096,\n serialize(value, builder) {\n const writer = PBUiDropdownResult.encode(value);\n const buffer = new Uint8Array(writer.finish(), 0, writer.len);\n builder.writeBuffer(buffer, false);\n },\n deserialize(reader) {\n return PBUiDropdownResult.decode(reader.buffer(), reader.remainingBytes());\n },\n create() {\n // TODO: this is a hack.\n return PBUiDropdownResult.decode(new Uint8Array());\n },\n jsonSchema: {\n type: \"object\",\n properties: {},\n serializationType: \"protocol-buffer\",\n protocolBuffer: \"PBUiDropdownResult\"\n }\n};\n", "/* eslint-disable */\nimport _m0 from \"protobufjs/minimal\";\nimport { Color4 } from \"../../common/colors.gen\";\nconst protobufPackageSarasa = \"decentraland.sdk.components\";\nfunction createBasePBUiInput() {\n return {\n placeholder: \"\",\n color: undefined,\n placeholderColor: undefined,\n disabled: false,\n textAlign: undefined,\n font: undefined,\n fontSize: undefined,\n value: undefined,\n };\n}\n/**\n * @public\n */\nexport var PBUiInput;\n(function (PBUiInput) {\n function encode(message, writer = _m0.Writer.create()) {\n if (message.placeholder !== \"\") {\n writer.uint32(10).string(message.placeholder);\n }\n if (message.color !== undefined) {\n Color4.encode(message.color, writer.uint32(18).fork()).ldelim();\n }\n if (message.placeholderColor !== undefined) {\n Color4.encode(message.placeholderColor, writer.uint32(26).fork()).ldelim();\n }\n if (message.disabled === true) {\n writer.uint32(32).bool(message.disabled);\n }\n if (message.textAlign !== undefined) {\n writer.uint32(80).int32(message.textAlign);\n }\n if (message.font !== undefined) {\n writer.uint32(88).int32(message.font);\n }\n if (message.fontSize !== undefined) {\n writer.uint32(96).int32(message.fontSize);\n }\n if (message.value !== undefined) {\n writer.uint32(106).string(message.value);\n }\n return writer;\n }\n PBUiInput.encode = encode;\n function decode(input, length) {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBasePBUiInput();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n message.placeholder = reader.string();\n continue;\n case 2:\n if (tag !== 18) {\n break;\n }\n message.color = Color4.decode(reader, reader.uint32());\n continue;\n case 3:\n if (tag !== 26) {\n break;\n }\n message.placeholderColor = Color4.decode(reader, reader.uint32());\n continue;\n case 4:\n if (tag !== 32) {\n break;\n }\n message.disabled = reader.bool();\n continue;\n case 10:\n if (tag !== 80) {\n break;\n }\n message.textAlign = reader.int32();\n continue;\n case 11:\n if (tag !== 88) {\n break;\n }\n message.font = reader.int32();\n continue;\n case 12:\n if (tag !== 96) {\n break;\n }\n message.fontSize = reader.int32();\n continue;\n case 13:\n if (tag !== 106) {\n break;\n }\n message.value = reader.string();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n }\n PBUiInput.decode = decode;\n})(PBUiInput || (PBUiInput = {}));\n", "import { PBUiInput } from './pb/decentraland/sdk/components/ui_input.gen';\n/**\n * @internal\n */\nexport const UiInputSchema = {\n COMPONENT_ID: 1093,\n serialize(value, builder) {\n const writer = PBUiInput.encode(value);\n const buffer = new Uint8Array(writer.finish(), 0, writer.len);\n builder.writeBuffer(buffer, false);\n },\n deserialize(reader) {\n return PBUiInput.decode(reader.buffer(), reader.remainingBytes());\n },\n create() {\n // TODO: this is a hack.\n return PBUiInput.decode(new Uint8Array());\n },\n jsonSchema: {\n type: \"object\",\n properties: {},\n serializationType: \"protocol-buffer\",\n protocolBuffer: \"PBUiInput\"\n }\n};\n", "/* eslint-disable */\nimport _m0 from \"protobufjs/minimal\";\nconst protobufPackageSarasa = \"decentraland.sdk.components\";\nfunction createBasePBUiInputResult() {\n return { value: \"\", isSubmit: undefined };\n}\n/**\n * @public\n */\nexport var PBUiInputResult;\n(function (PBUiInputResult) {\n function encode(message, writer = _m0.Writer.create()) {\n if (message.value !== \"\") {\n writer.uint32(10).string(message.value);\n }\n if (message.isSubmit !== undefined) {\n writer.uint32(16).bool(message.isSubmit);\n }\n return writer;\n }\n PBUiInputResult.encode = encode;\n function decode(input, length) {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBasePBUiInputResult();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n message.value = reader.string();\n continue;\n case 2:\n if (tag !== 16) {\n break;\n }\n message.isSubmit = reader.bool();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n }\n PBUiInputResult.decode = decode;\n})(PBUiInputResult || (PBUiInputResult = {}));\n", "import { PBUiInputResult } from './pb/decentraland/sdk/components/ui_input_result.gen';\n/**\n * @internal\n */\nexport const UiInputResultSchema = {\n COMPONENT_ID: 1095,\n serialize(value, builder) {\n const writer = PBUiInputResult.encode(value);\n const buffer = new Uint8Array(writer.finish(), 0, writer.len);\n builder.writeBuffer(buffer, false);\n },\n deserialize(reader) {\n return PBUiInputResult.decode(reader.buffer(), reader.remainingBytes());\n },\n create() {\n // TODO: this is a hack.\n return PBUiInputResult.decode(new Uint8Array());\n },\n jsonSchema: {\n type: \"object\",\n properties: {},\n serializationType: \"protocol-buffer\",\n protocolBuffer: \"PBUiInputResult\"\n }\n};\n", "/* eslint-disable */\nimport _m0 from \"protobufjs/minimal\";\nimport { Color4 } from \"../../common/colors.gen\";\nconst protobufPackageSarasa = \"decentraland.sdk.components\";\n/**\n * @public\n */\nexport var TextWrap;\n(function (TextWrap) {\n TextWrap[TextWrap[\"TW_WRAP\"] = 0] = \"TW_WRAP\";\n TextWrap[TextWrap[\"TW_NO_WRAP\"] = 1] = \"TW_NO_WRAP\";\n})(TextWrap || (TextWrap = {}));\nfunction createBasePBUiText() {\n return {\n value: \"\",\n color: undefined,\n textAlign: undefined,\n font: undefined,\n fontSize: undefined,\n textWrap: undefined,\n };\n}\n/**\n * @public\n */\nexport var PBUiText;\n(function (PBUiText) {\n function encode(message, writer = _m0.Writer.create()) {\n if (message.value !== \"\") {\n writer.uint32(10).string(message.value);\n }\n if (message.color !== undefined) {\n Color4.encode(message.color, writer.uint32(18).fork()).ldelim();\n }\n if (message.textAlign !== undefined) {\n writer.uint32(24).int32(message.textAlign);\n }\n if (message.font !== undefined) {\n writer.uint32(32).int32(message.font);\n }\n if (message.fontSize !== undefined) {\n writer.uint32(40).int32(message.fontSize);\n }\n if (message.textWrap !== undefined) {\n writer.uint32(48).int32(message.textWrap);\n }\n return writer;\n }\n PBUiText.encode = encode;\n function decode(input, length) {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBasePBUiText();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n message.value = reader.string();\n continue;\n case 2:\n if (tag !== 18) {\n break;\n }\n message.color = Color4.decode(reader, reader.uint32());\n continue;\n case 3:\n if (tag !== 24) {\n break;\n }\n message.textAlign = reader.int32();\n continue;\n case 4:\n if (tag !== 32) {\n break;\n }\n message.font = reader.int32();\n continue;\n case 5:\n if (tag !== 40) {\n break;\n }\n message.fontSize = reader.int32();\n continue;\n case 6:\n if (tag !== 48) {\n break;\n }\n message.textWrap = reader.int32();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n }\n PBUiText.decode = decode;\n})(PBUiText || (PBUiText = {}));\n", "import { PBUiText } from './pb/decentraland/sdk/components/ui_text.gen';\n/**\n * @internal\n */\nexport const UiTextSchema = {\n COMPONENT_ID: 1052,\n serialize(value, builder) {\n const writer = PBUiText.encode(value);\n const buffer = new Uint8Array(writer.finish(), 0, writer.len);\n builder.writeBuffer(buffer, false);\n },\n deserialize(reader) {\n return PBUiText.decode(reader.buffer(), reader.remainingBytes());\n },\n create() {\n // TODO: this is a hack.\n return PBUiText.decode(new Uint8Array());\n },\n jsonSchema: {\n type: \"object\",\n properties: {},\n serializationType: \"protocol-buffer\",\n protocolBuffer: \"PBUiText\"\n }\n};\n", "/* eslint-disable */\nimport _m0 from \"protobufjs/minimal\";\nimport { Color4 } from \"../../common/colors.gen\";\nconst protobufPackageSarasa = \"decentraland.sdk.components\";\n/**\n * @public\n */\nexport var YGPositionType;\n(function (YGPositionType) {\n YGPositionType[YGPositionType[\"YGPT_RELATIVE\"] = 0] = \"YGPT_RELATIVE\";\n YGPositionType[YGPositionType[\"YGPT_ABSOLUTE\"] = 1] = \"YGPT_ABSOLUTE\";\n})(YGPositionType || (YGPositionType = {}));\n/**\n * @public\n */\nexport var YGAlign;\n(function (YGAlign) {\n YGAlign[YGAlign[\"YGA_AUTO\"] = 0] = \"YGA_AUTO\";\n YGAlign[YGAlign[\"YGA_FLEX_START\"] = 1] = \"YGA_FLEX_START\";\n YGAlign[YGAlign[\"YGA_CENTER\"] = 2] = \"YGA_CENTER\";\n YGAlign[YGAlign[\"YGA_FLEX_END\"] = 3] = \"YGA_FLEX_END\";\n YGAlign[YGAlign[\"YGA_STRETCH\"] = 4] = \"YGA_STRETCH\";\n YGAlign[YGAlign[\"YGA_BASELINE\"] = 5] = \"YGA_BASELINE\";\n YGAlign[YGAlign[\"YGA_SPACE_BETWEEN\"] = 6] = \"YGA_SPACE_BETWEEN\";\n YGAlign[YGAlign[\"YGA_SPACE_AROUND\"] = 7] = \"YGA_SPACE_AROUND\";\n})(YGAlign || (YGAlign = {}));\n/**\n * @public\n */\nexport var YGUnit;\n(function (YGUnit) {\n YGUnit[YGUnit[\"YGU_UNDEFINED\"] = 0] = \"YGU_UNDEFINED\";\n YGUnit[YGUnit[\"YGU_POINT\"] = 1] = \"YGU_POINT\";\n YGUnit[YGUnit[\"YGU_PERCENT\"] = 2] = \"YGU_PERCENT\";\n YGUnit[YGUnit[\"YGU_AUTO\"] = 3] = \"YGU_AUTO\";\n})(YGUnit || (YGUnit = {}));\n/**\n * @public\n */\nexport var YGFlexDirection;\n(function (YGFlexDirection) {\n YGFlexDirection[YGFlexDirection[\"YGFD_ROW\"] = 0] = \"YGFD_ROW\";\n YGFlexDirection[YGFlexDirection[\"YGFD_COLUMN\"] = 1] = \"YGFD_COLUMN\";\n YGFlexDirection[YGFlexDirection[\"YGFD_COLUMN_REVERSE\"] = 2] = \"YGFD_COLUMN_REVERSE\";\n YGFlexDirection[YGFlexDirection[\"YGFD_ROW_REVERSE\"] = 3] = \"YGFD_ROW_REVERSE\";\n})(YGFlexDirection || (YGFlexDirection = {}));\n/**\n * @public\n */\nexport var YGWrap;\n(function (YGWrap) {\n YGWrap[YGWrap[\"YGW_NO_WRAP\"] = 0] = \"YGW_NO_WRAP\";\n YGWrap[YGWrap[\"YGW_WRAP\"] = 1] = \"YGW_WRAP\";\n YGWrap[YGWrap[\"YGW_WRAP_REVERSE\"] = 2] = \"YGW_WRAP_REVERSE\";\n})(YGWrap || (YGWrap = {}));\n/**\n * @public\n */\nexport var YGJustify;\n(function (YGJustify) {\n YGJustify[YGJustify[\"YGJ_FLEX_START\"] = 0] = \"YGJ_FLEX_START\";\n YGJustify[YGJustify[\"YGJ_CENTER\"] = 1] = \"YGJ_CENTER\";\n YGJustify[YGJustify[\"YGJ_FLEX_END\"] = 2] = \"YGJ_FLEX_END\";\n YGJustify[YGJustify[\"YGJ_SPACE_BETWEEN\"] = 3] = \"YGJ_SPACE_BETWEEN\";\n YGJustify[YGJustify[\"YGJ_SPACE_AROUND\"] = 4] = \"YGJ_SPACE_AROUND\";\n YGJustify[YGJustify[\"YGJ_SPACE_EVENLY\"] = 5] = \"YGJ_SPACE_EVENLY\";\n})(YGJustify || (YGJustify = {}));\n/**\n * @public\n */\nexport var YGOverflow;\n(function (YGOverflow) {\n YGOverflow[YGOverflow[\"YGO_VISIBLE\"] = 0] = \"YGO_VISIBLE\";\n YGOverflow[YGOverflow[\"YGO_HIDDEN\"] = 1] = \"YGO_HIDDEN\";\n YGOverflow[YGOverflow[\"YGO_SCROLL\"] = 2] = \"YGO_SCROLL\";\n})(YGOverflow || (YGOverflow = {}));\n/**\n * @public\n */\nexport var YGDisplay;\n(function (YGDisplay) {\n YGDisplay[YGDisplay[\"YGD_FLEX\"] = 0] = \"YGD_FLEX\";\n YGDisplay[YGDisplay[\"YGD_NONE\"] = 1] = \"YGD_NONE\";\n})(YGDisplay || (YGDisplay = {}));\n/**\n * @public\n */\nexport var YGEdge;\n(function (YGEdge) {\n YGEdge[YGEdge[\"YGE_LEFT\"] = 0] = \"YGE_LEFT\";\n YGEdge[YGEdge[\"YGE_TOP\"] = 1] = \"YGE_TOP\";\n YGEdge[YGEdge[\"YGE_RIGHT\"] = 2] = \"YGE_RIGHT\";\n YGEdge[YGEdge[\"YGE_BOTTOM\"] = 3] = \"YGE_BOTTOM\";\n YGEdge[YGEdge[\"YGE_START\"] = 4] = \"YGE_START\";\n YGEdge[YGEdge[\"YGE_END\"] = 5] = \"YGE_END\";\n YGEdge[YGEdge[\"YGE_HORIZONTAL\"] = 6] = \"YGE_HORIZONTAL\";\n YGEdge[YGEdge[\"YGE_VERTICAL\"] = 7] = \"YGE_VERTICAL\";\n YGEdge[YGEdge[\"YGE_ALL\"] = 8] = \"YGE_ALL\";\n})(YGEdge || (YGEdge = {}));\n/**\n * @public\n */\nexport var PointerFilterMode;\n(function (PointerFilterMode) {\n PointerFilterMode[PointerFilterMode[\"PFM_NONE\"] = 0] = \"PFM_NONE\";\n PointerFilterMode[PointerFilterMode[\"PFM_BLOCK\"] = 1] = \"PFM_BLOCK\";\n})(PointerFilterMode || (PointerFilterMode = {}));\nfunction createBasePBUiTransform() {\n return {\n parent: 0,\n rightOf: 0,\n alignContent: undefined,\n alignItems: undefined,\n flexWrap: undefined,\n flexShrink: undefined,\n positionType: 0,\n alignSelf: 0,\n flexDirection: 0,\n justifyContent: 0,\n overflow: 0,\n display: 0,\n flexBasisUnit: 0,\n flexBasis: 0,\n flexGrow: 0,\n widthUnit: 0,\n width: 0,\n heightUnit: 0,\n height: 0,\n minWidthUnit: 0,\n minWidth: 0,\n minHeightUnit: 0,\n minHeight: 0,\n maxWidthUnit: 0,\n maxWidth: 0,\n maxHeightUnit: 0,\n maxHeight: 0,\n positionLeftUnit: 0,\n positionLeft: 0,\n positionTopUnit: 0,\n positionTop: 0,\n positionRightUnit: 0,\n positionRight: 0,\n positionBottomUnit: 0,\n positionBottom: 0,\n marginLeftUnit: 0,\n marginLeft: 0,\n marginTopUnit: 0,\n marginTop: 0,\n marginRightUnit: 0,\n marginRight: 0,\n marginBottomUnit: 0,\n marginBottom: 0,\n paddingLeftUnit: 0,\n paddingLeft: 0,\n paddingTopUnit: 0,\n paddingTop: 0,\n paddingRightUnit: 0,\n paddingRight: 0,\n paddingBottomUnit: 0,\n paddingBottom: 0,\n pointerFilter: undefined,\n borderLeftWidthUnit: undefined,\n borderLeftWidth: undefined,\n borderTopWidthUnit: undefined,\n borderTopWidth: undefined,\n borderRightWidthUnit: undefined,\n borderRightWidth: undefined,\n borderBottomWidthUnit: undefined,\n borderBottomWidth: undefined,\n borderTopLeftRadiusUnit: undefined,\n borderTopLeftRadius: undefined,\n borderTopRightRadiusUnit: undefined,\n borderTopRightRadius: undefined,\n borderBottomLeftRadiusUnit: undefined,\n borderBottomLeftRadius: undefined,\n borderBottomRightRadiusUnit: undefined,\n borderBottomRightRadius: undefined,\n borderTopColor: undefined,\n borderBottomColor: undefined,\n borderLeftColor: undefined,\n borderRightColor: undefined,\n opacity: undefined,\n zIndex: undefined,\n };\n}\n/**\n * @public\n */\nexport var PBUiTransform;\n(function (PBUiTransform) {\n function encode(message, writer = _m0.Writer.create()) {\n if (message.parent !== 0) {\n writer.uint32(8).int32(message.parent);\n }\n if (message.rightOf !== 0) {\n writer.uint32(16).int32(message.rightOf);\n }\n if (message.alignContent !== undefined) {\n writer.uint32(24).int32(message.alignContent);\n }\n if (message.alignItems !== undefined) {\n writer.uint32(32).int32(message.alignItems);\n }\n if (message.flexWrap !== undefined) {\n writer.uint32(40).int32(message.flexWrap);\n }\n if (message.flexShrink !== undefined) {\n writer.uint32(53).float(message.flexShrink);\n }\n if (message.positionType !== 0) {\n writer.uint32(56).int32(message.positionType);\n }\n if (message.alignSelf !== 0) {\n writer.uint32(64).int32(message.alignSelf);\n }\n if (message.flexDirection !== 0) {\n writer.uint32(72).int32(message.flexDirection);\n }\n if (message.justifyContent !== 0) {\n writer.uint32(80).int32(message.justifyContent);\n }\n if (message.overflow !== 0) {\n writer.uint32(88).int32(message.overflow);\n }\n if (message.display !== 0) {\n writer.uint32(96).int32(message.display);\n }\n if (message.flexBasisUnit !== 0) {\n writer.uint32(104).int32(message.flexBasisUnit);\n }\n if (message.flexBasis !== 0) {\n writer.uint32(117).float(message.flexBasis);\n }\n if (message.flexGrow !== 0) {\n writer.uint32(125).float(message.flexGrow);\n }\n if (message.widthUnit !== 0) {\n writer.uint32(128).int32(message.widthUnit);\n }\n if (message.width !== 0) {\n writer.uint32(141).float(message.width);\n }\n if (message.heightUnit !== 0) {\n writer.uint32(144).int32(message.heightUnit);\n }\n if (message.height !== 0) {\n writer.uint32(157).float(message.height);\n }\n if (message.minWidthUnit !== 0) {\n writer.uint32(160).int32(message.minWidthUnit);\n }\n if (message.minWidth !== 0) {\n writer.uint32(173).float(message.minWidth);\n }\n if (message.minHeightUnit !== 0) {\n writer.uint32(176).int32(message.minHeightUnit);\n }\n if (message.minHeight !== 0) {\n writer.uint32(189).float(message.minHeight);\n }\n if (message.maxWidthUnit !== 0) {\n writer.uint32(192).int32(message.maxWidthUnit);\n }\n if (message.maxWidth !== 0) {\n writer.uint32(205).float(message.maxWidth);\n }\n if (message.maxHeightUnit !== 0) {\n writer.uint32(208).int32(message.maxHeightUnit);\n }\n if (message.maxHeight !== 0) {\n writer.uint32(221).float(message.maxHeight);\n }\n if (message.positionLeftUnit !== 0) {\n writer.uint32(224).int32(message.positionLeftUnit);\n }\n if (message.positionLeft !== 0) {\n writer.uint32(237).float(message.positionLeft);\n }\n if (message.positionTopUnit !== 0) {\n writer.uint32(240).int32(message.positionTopUnit);\n }\n if (message.positionTop !== 0) {\n writer.uint32(253).float(message.positionTop);\n }\n if (message.positionRightUnit !== 0) {\n writer.uint32(256).int32(message.positionRightUnit);\n }\n if (message.positionRight !== 0) {\n writer.uint32(269).float(message.positionRight);\n }\n if (message.positionBottomUnit !== 0) {\n writer.uint32(272).int32(message.positionBottomUnit);\n }\n if (message.positionBottom !== 0) {\n writer.uint32(285).float(message.positionBottom);\n }\n if (message.marginLeftUnit !== 0) {\n writer.uint32(288).int32(message.marginLeftUnit);\n }\n if (message.marginLeft !== 0) {\n writer.uint32(301).float(message.marginLeft);\n }\n if (message.marginTopUnit !== 0) {\n writer.uint32(304).int32(message.marginTopUnit);\n }\n if (message.marginTop !== 0) {\n writer.uint32(317).float(message.marginTop);\n }\n if (message.marginRightUnit !== 0) {\n writer.uint32(320).int32(message.marginRightUnit);\n }\n if (message.marginRight !== 0) {\n writer.uint32(333).float(message.marginRight);\n }\n if (message.marginBottomUnit !== 0) {\n writer.uint32(336).int32(message.marginBottomUnit);\n }\n if (message.marginBottom !== 0) {\n writer.uint32(349).float(message.marginBottom);\n }\n if (message.paddingLeftUnit !== 0) {\n writer.uint32(352).int32(message.paddingLeftUnit);\n }\n if (message.paddingLeft !== 0) {\n writer.uint32(365).float(message.paddingLeft);\n }\n if (message.paddingTopUnit !== 0) {\n writer.uint32(368).int32(message.paddingTopUnit);\n }\n if (message.paddingTop !== 0) {\n writer.uint32(381).float(message.paddingTop);\n }\n if (message.paddingRightUnit !== 0) {\n writer.uint32(384).int32(message.paddingRightUnit);\n }\n if (message.paddingRight !== 0) {\n writer.uint32(397).float(message.paddingRight);\n }\n if (message.paddingBottomUnit !== 0) {\n writer.uint32(400).int32(message.paddingBottomUnit);\n }\n if (message.paddingBottom !== 0) {\n writer.uint32(413).float(message.paddingBottom);\n }\n if (message.pointerFilter !== undefined) {\n writer.uint32(416).int32(message.pointerFilter);\n }\n if (message.borderLeftWidthUnit !== undefined) {\n writer.uint32(424).int32(message.borderLeftWidthUnit);\n }\n if (message.borderLeftWidth !== undefined) {\n writer.uint32(437).float(message.borderLeftWidth);\n }\n if (message.borderTopWidthUnit !== undefined) {\n writer.uint32(440).int32(message.borderTopWidthUnit);\n }\n if (message.borderTopWidth !== undefined) {\n writer.uint32(453).float(message.borderTopWidth);\n }\n if (message.borderRightWidthUnit !== undefined) {\n writer.uint32(456).int32(message.borderRightWidthUnit);\n }\n if (message.borderRightWidth !== undefined) {\n writer.uint32(469).float(message.borderRightWidth);\n }\n if (message.borderBottomWidthUnit !== undefined) {\n writer.uint32(472).int32(message.borderBottomWidthUnit);\n }\n if (message.borderBottomWidth !== undefined) {\n writer.uint32(485).float(message.borderBottomWidth);\n }\n if (message.borderTopLeftRadiusUnit !== undefined) {\n writer.uint32(488).int32(message.borderTopLeftRadiusUnit);\n }\n if (message.borderTopLeftRadius !== undefined) {\n writer.uint32(501).float(message.borderTopLeftRadius);\n }\n if (message.borderTopRightRadiusUnit !== undefined) {\n writer.uint32(504).int32(message.borderTopRightRadiusUnit);\n }\n if (message.borderTopRightRadius !== undefined) {\n writer.uint32(517).float(message.borderTopRightRadius);\n }\n if (message.borderBottomLeftRadiusUnit !== undefined) {\n writer.uint32(520).int32(message.borderBottomLeftRadiusUnit);\n }\n if (message.borderBottomLeftRadius !== undefined) {\n writer.uint32(533).float(message.borderBottomLeftRadius);\n }\n if (message.borderBottomRightRadiusUnit !== undefined) {\n writer.uint32(536).int32(message.borderBottomRightRadiusUnit);\n }\n if (message.borderBottomRightRadius !== undefined) {\n writer.uint32(549).float(message.borderBottomRightRadius);\n }\n if (message.borderTopColor !== undefined) {\n Color4.encode(message.borderTopColor, writer.uint32(554).fork()).ldelim();\n }\n if (message.borderBottomColor !== undefined) {\n Color4.encode(message.borderBottomColor, writer.uint32(562).fork()).ldelim();\n }\n if (message.borderLeftColor !== undefined) {\n Color4.encode(message.borderLeftColor, writer.uint32(570).fork()).ldelim();\n }\n if (message.borderRightColor !== undefined) {\n Color4.encode(message.borderRightColor, writer.uint32(578).fork()).ldelim();\n }\n if (message.opacity !== undefined) {\n writer.uint32(589).float(message.opacity);\n }\n if (message.zIndex !== undefined) {\n writer.uint32(616).int32(message.zIndex);\n }\n return writer;\n }\n PBUiTransform.encode = encode;\n function decode(input, length) {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBasePBUiTransform();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 8) {\n break;\n }\n message.parent = reader.int32();\n continue;\n case 2:\n if (tag !== 16) {\n break;\n }\n message.rightOf = reader.int32();\n continue;\n case 3:\n if (tag !== 24) {\n break;\n }\n message.alignContent = reader.int32();\n continue;\n case 4:\n if (tag !== 32) {\n break;\n }\n message.alignItems = reader.int32();\n continue;\n case 5:\n if (tag !== 40) {\n break;\n }\n message.flexWrap = reader.int32();\n continue;\n case 6:\n if (tag !== 53) {\n break;\n }\n message.flexShrink = reader.float();\n continue;\n case 7:\n if (tag !== 56) {\n break;\n }\n message.positionType = reader.int32();\n continue;\n case 8:\n if (tag !== 64) {\n break;\n }\n message.alignSelf = reader.int32();\n continue;\n case 9:\n if (tag !== 72) {\n break;\n }\n message.flexDirection = reader.int32();\n continue;\n case 10:\n if (tag !== 80) {\n break;\n }\n message.justifyContent = reader.int32();\n continue;\n case 11:\n if (tag !== 88) {\n break;\n }\n message.overflow = reader.int32();\n continue;\n case 12:\n if (tag !== 96) {\n break;\n }\n message.display = reader.int32();\n continue;\n case 13:\n if (tag !== 104) {\n break;\n }\n message.flexBasisUnit = reader.int32();\n continue;\n case 14:\n if (tag !== 117) {\n break;\n }\n message.flexBasis = reader.float();\n continue;\n case 15:\n if (tag !== 125) {\n break;\n }\n message.flexGrow = reader.float();\n continue;\n case 16:\n if (tag !== 128) {\n break;\n }\n message.widthUnit = reader.int32();\n continue;\n case 17:\n if (tag !== 141) {\n break;\n }\n message.width = reader.float();\n continue;\n case 18:\n if (tag !== 144) {\n break;\n }\n message.heightUnit = reader.int32();\n continue;\n case 19:\n if (tag !== 157) {\n break;\n }\n message.height = reader.float();\n continue;\n case 20:\n if (tag !== 160) {\n break;\n }\n message.minWidthUnit = reader.int32();\n continue;\n case 21:\n if (tag !== 173) {\n break;\n }\n message.minWidth = reader.float();\n continue;\n case 22:\n if (tag !== 176) {\n break;\n }\n message.minHeightUnit = reader.int32();\n continue;\n case 23:\n if (tag !== 189) {\n break;\n }\n message.minHeight = reader.float();\n continue;\n case 24:\n if (tag !== 192) {\n break;\n }\n message.maxWidthUnit = reader.int32();\n continue;\n case 25:\n if (tag !== 205) {\n break;\n }\n message.maxWidth = reader.float();\n continue;\n case 26:\n if (tag !== 208) {\n break;\n }\n message.maxHeightUnit = reader.int32();\n continue;\n case 27:\n if (tag !== 221) {\n break;\n }\n message.maxHeight = reader.float();\n continue;\n case 28:\n if (tag !== 224) {\n break;\n }\n message.positionLeftUnit = reader.int32();\n continue;\n case 29:\n if (tag !== 237) {\n break;\n }\n message.positionLeft = reader.float();\n continue;\n case 30:\n if (tag !== 240) {\n break;\n }\n message.positionTopUnit = reader.int32();\n continue;\n case 31:\n if (tag !== 253) {\n break;\n }\n message.positionTop = reader.float();\n continue;\n case 32:\n if (tag !== 256) {\n break;\n }\n message.positionRightUnit = reader.int32();\n continue;\n case 33:\n if (tag !== 269) {\n break;\n }\n message.positionRight = reader.float();\n continue;\n case 34:\n if (tag !== 272) {\n break;\n }\n message.positionBottomUnit = reader.int32();\n continue;\n case 35:\n if (tag !== 285) {\n break;\n }\n message.positionBottom = reader.float();\n continue;\n case 36:\n if (tag !== 288) {\n break;\n }\n message.marginLeftUnit = reader.int32();\n continue;\n case 37:\n if (tag !== 301) {\n break;\n }\n message.marginLeft = reader.float();\n continue;\n case 38:\n if (tag !== 304) {\n break;\n }\n message.marginTopUnit = reader.int32();\n continue;\n case 39:\n if (tag !== 317) {\n break;\n }\n message.marginTop = reader.float();\n continue;\n case 40:\n if (tag !== 320) {\n break;\n }\n message.marginRightUnit = reader.int32();\n continue;\n case 41:\n if (tag !== 333) {\n break;\n }\n message.marginRight = reader.float();\n continue;\n case 42:\n if (tag !== 336) {\n break;\n }\n message.marginBottomUnit = reader.int32();\n continue;\n case 43:\n if (tag !== 349) {\n break;\n }\n message.marginBottom = reader.float();\n continue;\n case 44:\n if (tag !== 352) {\n break;\n }\n message.paddingLeftUnit = reader.int32();\n continue;\n case 45:\n if (tag !== 365) {\n break;\n }\n message.paddingLeft = reader.float();\n continue;\n case 46:\n if (tag !== 368) {\n break;\n }\n message.paddingTopUnit = reader.int32();\n continue;\n case 47:\n if (tag !== 381) {\n break;\n }\n message.paddingTop = reader.float();\n continue;\n case 48:\n if (tag !== 384) {\n break;\n }\n message.paddingRightUnit = reader.int32();\n continue;\n case 49:\n if (tag !== 397) {\n break;\n }\n message.paddingRight = reader.float();\n continue;\n case 50:\n if (tag !== 400) {\n break;\n }\n message.paddingBottomUnit = reader.int32();\n continue;\n case 51:\n if (tag !== 413) {\n break;\n }\n message.paddingBottom = reader.float();\n continue;\n case 52:\n if (tag !== 416) {\n break;\n }\n message.pointerFilter = reader.int32();\n continue;\n case 53:\n if (tag !== 424) {\n break;\n }\n message.borderLeftWidthUnit = reader.int32();\n continue;\n case 54:\n if (tag !== 437) {\n break;\n }\n message.borderLeftWidth = reader.float();\n continue;\n case 55:\n if (tag !== 440) {\n break;\n }\n message.borderTopWidthUnit = reader.int32();\n continue;\n case 56:\n if (tag !== 453) {\n break;\n }\n message.borderTopWidth = reader.float();\n continue;\n case 57:\n if (tag !== 456) {\n break;\n }\n message.borderRightWidthUnit = reader.int32();\n continue;\n case 58:\n if (tag !== 469) {\n break;\n }\n message.borderRightWidth = reader.float();\n continue;\n case 59:\n if (tag !== 472) {\n break;\n }\n message.borderBottomWidthUnit = reader.int32();\n continue;\n case 60:\n if (tag !== 485) {\n break;\n }\n message.borderBottomWidth = reader.float();\n continue;\n case 61:\n if (tag !== 488) {\n break;\n }\n message.borderTopLeftRadiusUnit = reader.int32();\n continue;\n case 62:\n if (tag !== 501) {\n break;\n }\n message.borderTopLeftRadius = reader.float();\n continue;\n case 63:\n if (tag !== 504) {\n break;\n }\n message.borderTopRightRadiusUnit = reader.int32();\n continue;\n case 64:\n if (tag !== 517) {\n break;\n }\n message.borderTopRightRadius = reader.float();\n continue;\n case 65:\n if (tag !== 520) {\n break;\n }\n message.borderBottomLeftRadiusUnit = reader.int32();\n continue;\n case 66:\n if (tag !== 533) {\n break;\n }\n message.borderBottomLeftRadius = reader.float();\n continue;\n case 67:\n if (tag !== 536) {\n break;\n }\n message.borderBottomRightRadiusUnit = reader.int32();\n continue;\n case 68:\n if (tag !== 549) {\n break;\n }\n message.borderBottomRightRadius = reader.float();\n continue;\n case 69:\n if (tag !== 554) {\n break;\n }\n message.borderTopColor = Color4.decode(reader, reader.uint32());\n continue;\n case 70:\n if (tag !== 562) {\n break;\n }\n message.borderBottomColor = Color4.decode(reader, reader.uint32());\n continue;\n case 71:\n if (tag !== 570) {\n break;\n }\n message.borderLeftColor = Color4.decode(reader, reader.uint32());\n continue;\n case 72:\n if (tag !== 578) {\n break;\n }\n message.borderRightColor = Color4.decode(reader, reader.uint32());\n continue;\n case 73:\n if (tag !== 589) {\n break;\n }\n message.opacity = reader.float();\n continue;\n case 77:\n if (tag !== 616) {\n break;\n }\n message.zIndex = reader.int32();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n }\n PBUiTransform.decode = decode;\n})(PBUiTransform || (PBUiTransform = {}));\n", "import { PBUiTransform } from './pb/decentraland/sdk/components/ui_transform.gen';\n/**\n * @internal\n */\nexport const UiTransformSchema = {\n COMPONENT_ID: 1050,\n serialize(value, builder) {\n const writer = PBUiTransform.encode(value);\n const buffer = new Uint8Array(writer.finish(), 0, writer.len);\n builder.writeBuffer(buffer, false);\n },\n deserialize(reader) {\n return PBUiTransform.decode(reader.buffer(), reader.remainingBytes());\n },\n create() {\n // TODO: this is a hack.\n return PBUiTransform.decode(new Uint8Array());\n },\n jsonSchema: {\n type: \"object\",\n properties: {},\n serializationType: \"protocol-buffer\",\n protocolBuffer: \"PBUiTransform\"\n }\n};\n", "/* eslint-disable */\nimport _m0 from \"protobufjs/minimal\";\nconst protobufPackageSarasa = \"decentraland.sdk.components\";\n/**\n * @public\n */\nexport var VideoState;\n(function (VideoState) {\n VideoState[VideoState[\"VS_NONE\"] = 0] = \"VS_NONE\";\n VideoState[VideoState[\"VS_ERROR\"] = 1] = \"VS_ERROR\";\n VideoState[VideoState[\"VS_LOADING\"] = 2] = \"VS_LOADING\";\n VideoState[VideoState[\"VS_READY\"] = 3] = \"VS_READY\";\n VideoState[VideoState[\"VS_PLAYING\"] = 4] = \"VS_PLAYING\";\n VideoState[VideoState[\"VS_BUFFERING\"] = 5] = \"VS_BUFFERING\";\n VideoState[VideoState[\"VS_SEEKING\"] = 6] = \"VS_SEEKING\";\n VideoState[VideoState[\"VS_PAUSED\"] = 7] = \"VS_PAUSED\";\n})(VideoState || (VideoState = {}));\nfunction createBasePBVideoEvent() {\n return { timestamp: 0, tickNumber: 0, currentOffset: 0, videoLength: 0, state: 0 };\n}\n/**\n * @public\n */\nexport var PBVideoEvent;\n(function (PBVideoEvent) {\n function encode(message, writer = _m0.Writer.create()) {\n if (message.timestamp !== 0) {\n writer.uint32(8).uint32(message.timestamp);\n }\n if (message.tickNumber !== 0) {\n writer.uint32(16).uint32(message.tickNumber);\n }\n if (message.currentOffset !== 0) {\n writer.uint32(29).float(message.currentOffset);\n }\n if (message.videoLength !== 0) {\n writer.uint32(37).float(message.videoLength);\n }\n if (message.state !== 0) {\n writer.uint32(40).int32(message.state);\n }\n return writer;\n }\n PBVideoEvent.encode = encode;\n function decode(input, length) {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBasePBVideoEvent();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 8) {\n break;\n }\n message.timestamp = reader.uint32();\n continue;\n case 2:\n if (tag !== 16) {\n break;\n }\n message.tickNumber = reader.uint32();\n continue;\n case 3:\n if (tag !== 29) {\n break;\n }\n message.currentOffset = reader.float();\n continue;\n case 4:\n if (tag !== 37) {\n break;\n }\n message.videoLength = reader.float();\n continue;\n case 5:\n if (tag !== 40) {\n break;\n }\n message.state = reader.int32();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n }\n PBVideoEvent.decode = decode;\n})(PBVideoEvent || (PBVideoEvent = {}));\n", "import { PBVideoEvent } from './pb/decentraland/sdk/components/video_event.gen';\n/**\n * @internal\n */\nexport const VideoEventSchema = {\n COMPONENT_ID: 1044,\n serialize(value, builder) {\n const writer = PBVideoEvent.encode(value);\n const buffer = new Uint8Array(writer.finish(), 0, writer.len);\n builder.writeBuffer(buffer, false);\n },\n deserialize(reader) {\n return PBVideoEvent.decode(reader.buffer(), reader.remainingBytes());\n },\n create() {\n // TODO: this is a hack.\n return PBVideoEvent.decode(new Uint8Array());\n },\n jsonSchema: {\n type: \"object\",\n properties: {},\n serializationType: \"protocol-buffer\",\n protocolBuffer: \"PBVideoEvent\"\n }\n};\n", "/* eslint-disable */\nimport _m0 from \"protobufjs/minimal\";\nconst protobufPackageSarasa = \"decentraland.sdk.components\";\nfunction createBasePBVideoPlayer() {\n return {\n src: \"\",\n playing: undefined,\n position: undefined,\n volume: undefined,\n playbackRate: undefined,\n loop: undefined,\n };\n}\n/**\n * @public\n */\nexport var PBVideoPlayer;\n(function (PBVideoPlayer) {\n function encode(message, writer = _m0.Writer.create()) {\n if (message.src !== \"\") {\n writer.uint32(10).string(message.src);\n }\n if (message.playing !== undefined) {\n writer.uint32(16).bool(message.playing);\n }\n if (message.position !== undefined) {\n writer.uint32(29).float(message.position);\n }\n if (message.volume !== undefined) {\n writer.uint32(37).float(message.volume);\n }\n if (message.playbackRate !== undefined) {\n writer.uint32(45).float(message.playbackRate);\n }\n if (message.loop !== undefined) {\n writer.uint32(48).bool(message.loop);\n }\n return writer;\n }\n PBVideoPlayer.encode = encode;\n function decode(input, length) {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBasePBVideoPlayer();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n message.src = reader.string();\n continue;\n case 2:\n if (tag !== 16) {\n break;\n }\n message.playing = reader.bool();\n continue;\n case 3:\n if (tag !== 29) {\n break;\n }\n message.position = reader.float();\n continue;\n case 4:\n if (tag !== 37) {\n break;\n }\n message.volume = reader.float();\n continue;\n case 5:\n if (tag !== 45) {\n break;\n }\n message.playbackRate = reader.float();\n continue;\n case 6:\n if (tag !== 48) {\n break;\n }\n message.loop = reader.bool();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n }\n PBVideoPlayer.decode = decode;\n})(PBVideoPlayer || (PBVideoPlayer = {}));\n", "import { PBVideoPlayer } from './pb/decentraland/sdk/components/video_player.gen';\n/**\n * @internal\n */\nexport const VideoPlayerSchema = {\n COMPONENT_ID: 1043,\n serialize(value, builder) {\n const writer = PBVideoPlayer.encode(value);\n const buffer = new Uint8Array(writer.finish(), 0, writer.len);\n builder.writeBuffer(buffer, false);\n },\n deserialize(reader) {\n return PBVideoPlayer.decode(reader.buffer(), reader.remainingBytes());\n },\n create() {\n // TODO: this is a hack.\n return PBVideoPlayer.decode(new Uint8Array());\n },\n jsonSchema: {\n type: \"object\",\n properties: {},\n serializationType: \"protocol-buffer\",\n protocolBuffer: \"PBVideoPlayer\"\n }\n};\n", "/* eslint-disable */\nimport _m0 from \"protobufjs/minimal\";\nimport { CameraTransition } from \"./common/camera_transition.gen\";\nconst protobufPackageSarasa = \"decentraland.sdk.components\";\nfunction createBasePBVirtualCamera() {\n return { defaultTransition: undefined, lookAtEntity: undefined };\n}\n/**\n * @public\n */\nexport var PBVirtualCamera;\n(function (PBVirtualCamera) {\n function encode(message, writer = _m0.Writer.create()) {\n if (message.defaultTransition !== undefined) {\n CameraTransition.encode(message.defaultTransition, writer.uint32(10).fork()).ldelim();\n }\n if (message.lookAtEntity !== undefined) {\n writer.uint32(16).uint32(message.lookAtEntity);\n }\n return writer;\n }\n PBVirtualCamera.encode = encode;\n function decode(input, length) {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBasePBVirtualCamera();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n message.defaultTransition = CameraTransition.decode(reader, reader.uint32());\n continue;\n case 2:\n if (tag !== 16) {\n break;\n }\n message.lookAtEntity = reader.uint32();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n }\n PBVirtualCamera.decode = decode;\n})(PBVirtualCamera || (PBVirtualCamera = {}));\n", "/* eslint-disable */\nimport _m0 from \"protobufjs/minimal\";\nconst protobufPackageSarasa = \"decentraland.sdk.components.common\";\nfunction createBaseCameraTransition() {\n return { transitionMode: undefined };\n}\n/**\n * @public\n */\nexport var CameraTransition;\n(function (CameraTransition) {\n function encode(message, writer = _m0.Writer.create()) {\n switch (message.transitionMode?.$case) {\n case \"time\":\n writer.uint32(13).float(message.transitionMode.time);\n break;\n case \"speed\":\n writer.uint32(21).float(message.transitionMode.speed);\n break;\n }\n return writer;\n }\n CameraTransition.encode = encode;\n function decode(input, length) {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseCameraTransition();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 13) {\n break;\n }\n message.transitionMode = { $case: \"time\", time: reader.float() };\n continue;\n case 2:\n if (tag !== 21) {\n break;\n }\n message.transitionMode = { $case: \"speed\", speed: reader.float() };\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n }\n CameraTransition.decode = decode;\n})(CameraTransition || (CameraTransition = {}));\n", "import { PBVirtualCamera } from './pb/decentraland/sdk/components/virtual_camera.gen';\n/**\n * @internal\n */\nexport const VirtualCameraSchema = {\n COMPONENT_ID: 1076,\n serialize(value, builder) {\n const writer = PBVirtualCamera.encode(value);\n const buffer = new Uint8Array(writer.finish(), 0, writer.len);\n builder.writeBuffer(buffer, false);\n },\n deserialize(reader) {\n return PBVirtualCamera.decode(reader.buffer(), reader.remainingBytes());\n },\n create() {\n // TODO: this is a hack.\n return PBVirtualCamera.decode(new Uint8Array());\n },\n jsonSchema: {\n type: \"object\",\n properties: {},\n serializationType: \"protocol-buffer\",\n protocolBuffer: \"PBVirtualCamera\"\n }\n};\n", "/* eslint-disable */\nimport _m0 from \"protobufjs/minimal\";\nconst protobufPackageSarasa = \"decentraland.sdk.components\";\nfunction createBasePBVisibilityComponent() {\n return { visible: undefined };\n}\n/**\n * @public\n */\nexport var PBVisibilityComponent;\n(function (PBVisibilityComponent) {\n function encode(message, writer = _m0.Writer.create()) {\n if (message.visible !== undefined) {\n writer.uint32(8).bool(message.visible);\n }\n return writer;\n }\n PBVisibilityComponent.encode = encode;\n function decode(input, length) {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBasePBVisibilityComponent();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 8) {\n break;\n }\n message.visible = reader.bool();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n }\n PBVisibilityComponent.decode = decode;\n})(PBVisibilityComponent || (PBVisibilityComponent = {}));\n", "import { PBVisibilityComponent } from './pb/decentraland/sdk/components/visibility_component.gen';\n/**\n * @internal\n */\nexport const VisibilityComponentSchema = {\n COMPONENT_ID: 1081,\n serialize(value, builder) {\n const writer = PBVisibilityComponent.encode(value);\n const buffer = new Uint8Array(writer.finish(), 0, writer.len);\n builder.writeBuffer(buffer, false);\n },\n deserialize(reader) {\n return PBVisibilityComponent.decode(reader.buffer(), reader.remainingBytes());\n },\n create() {\n // TODO: this is a hack.\n return PBVisibilityComponent.decode(new Uint8Array());\n },\n jsonSchema: {\n type: \"object\",\n properties: {},\n serializationType: \"protocol-buffer\",\n protocolBuffer: \"PBVisibilityComponent\"\n }\n};\n", "import { AnimatorSchema } from './Animator.gen';\nimport { AudioEventSchema } from './AudioEvent.gen';\nimport { AudioSourceSchema } from './AudioSource.gen';\nimport { AudioStreamSchema } from './AudioStream.gen';\nimport { AvatarAttachSchema } from './AvatarAttach.gen';\nimport { AvatarBaseSchema } from './AvatarBase.gen';\nimport { AvatarEmoteCommandSchema } from './AvatarEmoteCommand.gen';\nimport { AvatarEquippedDataSchema } from './AvatarEquippedData.gen';\nimport { AvatarModifierAreaSchema } from './AvatarModifierArea.gen';\nimport { AvatarShapeSchema } from './AvatarShape.gen';\nimport { BillboardSchema } from './Billboard.gen';\nimport { CameraModeSchema } from './CameraMode.gen';\nimport { CameraModeAreaSchema } from './CameraModeArea.gen';\nimport { EngineInfoSchema } from './EngineInfo.gen';\nimport { GltfContainerSchema } from './GltfContainer.gen';\nimport { GltfContainerLoadingStateSchema } from './GltfContainerLoadingState.gen';\nimport { GltfNodeModifiersSchema } from './GltfNodeModifiers.gen';\nimport { InputModifierSchema } from './InputModifier.gen';\nimport { LightSourceSchema } from './LightSource.gen';\nimport { MainCameraSchema } from './MainCamera.gen';\nimport { MaterialSchema } from './Material.gen';\nimport { MeshColliderSchema } from './MeshCollider.gen';\nimport { MeshRendererSchema } from './MeshRenderer.gen';\nimport { NftShapeSchema } from './NftShape.gen';\nimport { PlayerIdentityDataSchema } from './PlayerIdentityData.gen';\nimport { PointerEventsSchema } from './PointerEvents.gen';\nimport { PointerEventsResultSchema } from './PointerEventsResult.gen';\nimport { PointerLockSchema } from './PointerLock.gen';\nimport { PrimaryPointerInfoSchema } from './PrimaryPointerInfo.gen';\nimport { RaycastSchema } from './Raycast.gen';\nimport { RaycastResultSchema } from './RaycastResult.gen';\nimport { RealmInfoSchema } from './RealmInfo.gen';\nimport { SkyboxTimeSchema } from './SkyboxTime.gen';\nimport { TextShapeSchema } from './TextShape.gen';\nimport { TriggerAreaSchema } from './TriggerArea.gen';\nimport { TriggerAreaResultSchema } from './TriggerAreaResult.gen';\nimport { TweenSchema } from './Tween.gen';\nimport { TweenSequenceSchema } from './TweenSequence.gen';\nimport { TweenStateSchema } from './TweenState.gen';\nimport { UiBackgroundSchema } from './UiBackground.gen';\nimport { UiCanvasInformationSchema } from './UiCanvasInformation.gen';\nimport { UiDropdownSchema } from './UiDropdown.gen';\nimport { UiDropdownResultSchema } from './UiDropdownResult.gen';\nimport { UiInputSchema } from './UiInput.gen';\nimport { UiInputResultSchema } from './UiInputResult.gen';\nimport { UiTextSchema } from './UiText.gen';\nimport { UiTransformSchema } from './UiTransform.gen';\nimport { VideoEventSchema } from './VideoEvent.gen';\nimport { VideoPlayerSchema } from './VideoPlayer.gen';\nimport { VirtualCameraSchema } from './VirtualCamera.gen';\nimport { VisibilityComponentSchema } from './VisibilityComponent.gen';\nexport * from './pb/decentraland/sdk/components/animator.gen';\nexport * from './pb/decentraland/sdk/components/audio_event.gen';\nexport * from './pb/decentraland/sdk/components/audio_source.gen';\nexport * from './pb/decentraland/sdk/components/audio_stream.gen';\nexport * from './pb/decentraland/sdk/components/avatar_attach.gen';\nexport * from './pb/decentraland/sdk/components/avatar_base.gen';\nexport * from './pb/decentraland/sdk/components/avatar_emote_command.gen';\nexport * from './pb/decentraland/sdk/components/avatar_equipped_data.gen';\nexport * from './pb/decentraland/sdk/components/avatar_modifier_area.gen';\nexport * from './pb/decentraland/sdk/components/avatar_shape.gen';\nexport * from './pb/decentraland/sdk/components/billboard.gen';\nexport * from './pb/decentraland/sdk/components/camera_mode.gen';\nexport * from './pb/decentraland/sdk/components/camera_mode_area.gen';\nexport * from './pb/decentraland/sdk/components/engine_info.gen';\nexport * from './pb/decentraland/sdk/components/gltf_container.gen';\nexport * from './pb/decentraland/sdk/components/gltf_container_loading_state.gen';\nexport * from './pb/decentraland/sdk/components/gltf_node_modifiers.gen';\nexport * from './pb/decentraland/sdk/components/input_modifier.gen';\nexport * from './pb/decentraland/sdk/components/light_source.gen';\nexport * from './pb/decentraland/sdk/components/main_camera.gen';\nexport * from './pb/decentraland/sdk/components/material.gen';\nexport * from './pb/decentraland/sdk/components/mesh_collider.gen';\nexport * from './pb/decentraland/sdk/components/mesh_renderer.gen';\nexport * from './pb/decentraland/sdk/components/nft_shape.gen';\nexport * from './pb/decentraland/sdk/components/player_identity_data.gen';\nexport * from './pb/decentraland/sdk/components/pointer_events.gen';\nexport * from './pb/decentraland/sdk/components/pointer_events_result.gen';\nexport * from './pb/decentraland/sdk/components/pointer_lock.gen';\nexport * from './pb/decentraland/sdk/components/primary_pointer_info.gen';\nexport * from './pb/decentraland/sdk/components/raycast.gen';\nexport * from './pb/decentraland/sdk/components/raycast_result.gen';\nexport * from './pb/decentraland/sdk/components/realm_info.gen';\nexport * from './pb/decentraland/sdk/components/skybox_time.gen';\nexport * from './pb/decentraland/sdk/components/text_shape.gen';\nexport * from './pb/decentraland/sdk/components/trigger_area.gen';\nexport * from './pb/decentraland/sdk/components/trigger_area_result.gen';\nexport * from './pb/decentraland/sdk/components/tween.gen';\nexport * from './pb/decentraland/sdk/components/tween_sequence.gen';\nexport * from './pb/decentraland/sdk/components/tween_state.gen';\nexport * from './pb/decentraland/sdk/components/ui_background.gen';\nexport * from './pb/decentraland/sdk/components/ui_canvas_information.gen';\nexport * from './pb/decentraland/sdk/components/ui_dropdown.gen';\nexport * from './pb/decentraland/sdk/components/ui_dropdown_result.gen';\nexport * from './pb/decentraland/sdk/components/ui_input.gen';\nexport * from './pb/decentraland/sdk/components/ui_input_result.gen';\nexport * from './pb/decentraland/sdk/components/ui_text.gen';\nexport * from './pb/decentraland/sdk/components/ui_transform.gen';\nexport * from './pb/decentraland/sdk/components/video_event.gen';\nexport * from './pb/decentraland/sdk/components/video_player.gen';\nexport * from './pb/decentraland/sdk/components/virtual_camera.gen';\nexport * from './pb/decentraland/sdk/components/visibility_component.gen';\n/** @public */ export const Animator = engine => \n/* @__PURE__ */ engine.defineComponentFromSchema(\"core::Animator\", AnimatorSchema);\n/** @public */ export const AudioEvent = (engine) => /* @__PURE__ */ engine.defineValueSetComponentFromSchema(\"core::AudioEvent\", AudioEventSchema, {\n timestampFunction: (t) => t.timestamp,\n maxElements: 100\n});\n/** @public */ export const AudioSource = engine => \n/* @__PURE__ */ engine.defineComponentFromSchema(\"core::AudioSource\", AudioSourceSchema);\n/** @public */ export const AudioStream = engine => \n/* @__PURE__ */ engine.defineComponentFromSchema(\"core::AudioStream\", AudioStreamSchema);\n/** @public */ export const AvatarAttach = engine => \n/* @__PURE__ */ engine.defineComponentFromSchema(\"core::AvatarAttach\", AvatarAttachSchema);\n/** @public */ export const AvatarBase = engine => \n/* @__PURE__ */ engine.defineComponentFromSchema(\"core::AvatarBase\", AvatarBaseSchema);\n/** @public */ export const AvatarEmoteCommand = (engine) => /* @__PURE__ */ engine.defineValueSetComponentFromSchema(\"core::AvatarEmoteCommand\", AvatarEmoteCommandSchema, {\n timestampFunction: (t) => t.timestamp,\n maxElements: 100\n});\n/** @public */ export const AvatarEquippedData = engine => \n/* @__PURE__ */ engine.defineComponentFromSchema(\"core::AvatarEquippedData\", AvatarEquippedDataSchema);\n/** @public */ export const AvatarModifierArea = engine => \n/* @__PURE__ */ engine.defineComponentFromSchema(\"core::AvatarModifierArea\", AvatarModifierAreaSchema);\n/** @public */ export const AvatarShape = engine => \n/* @__PURE__ */ engine.defineComponentFromSchema(\"core::AvatarShape\", AvatarShapeSchema);\n/** @public */ export const Billboard = engine => \n/* @__PURE__ */ engine.defineComponentFromSchema(\"core::Billboard\", BillboardSchema);\n/** @public */ export const CameraMode = engine => \n/* @__PURE__ */ engine.defineComponentFromSchema(\"core::CameraMode\", CameraModeSchema);\n/** @public */ export const CameraModeArea = engine => \n/* @__PURE__ */ engine.defineComponentFromSchema(\"core::CameraModeArea\", CameraModeAreaSchema);\n/** @public */ export const EngineInfo = engine => \n/* @__PURE__ */ engine.defineComponentFromSchema(\"core::EngineInfo\", EngineInfoSchema);\n/** @public */ export const GltfContainer = engine => \n/* @__PURE__ */ engine.defineComponentFromSchema(\"core::GltfContainer\", GltfContainerSchema);\n/** @public */ export const GltfContainerLoadingState = engine => \n/* @__PURE__ */ engine.defineComponentFromSchema(\"core::GltfContainerLoadingState\", GltfContainerLoadingStateSchema);\n/** @public */ export const GltfNodeModifiers = engine => \n/* @__PURE__ */ engine.defineComponentFromSchema(\"core::GltfNodeModifiers\", GltfNodeModifiersSchema);\n/** @public */ export const InputModifier = engine => \n/* @__PURE__ */ engine.defineComponentFromSchema(\"core::InputModifier\", InputModifierSchema);\n/** @public */ export const LightSource = engine => \n/* @__PURE__ */ engine.defineComponentFromSchema(\"core::LightSource\", LightSourceSchema);\n/** @public */ export const MainCamera = engine => \n/* @__PURE__ */ engine.defineComponentFromSchema(\"core::MainCamera\", MainCameraSchema);\n/** @public */ export const Material = engine => \n/* @__PURE__ */ engine.defineComponentFromSchema(\"core::Material\", MaterialSchema);\n/** @public */ export const MeshCollider = engine => \n/* @__PURE__ */ engine.defineComponentFromSchema(\"core::MeshCollider\", MeshColliderSchema);\n/** @public */ export const MeshRenderer = engine => \n/* @__PURE__ */ engine.defineComponentFromSchema(\"core::MeshRenderer\", MeshRendererSchema);\n/** @public */ export const NftShape = engine => \n/* @__PURE__ */ engine.defineComponentFromSchema(\"core::NftShape\", NftShapeSchema);\n/** @public */ export const PlayerIdentityData = engine => \n/* @__PURE__ */ engine.defineComponentFromSchema(\"core::PlayerIdentityData\", PlayerIdentityDataSchema);\n/** @public */ export const PointerEvents = engine => \n/* @__PURE__ */ engine.defineComponentFromSchema(\"core::PointerEvents\", PointerEventsSchema);\n/** @public */ export const PointerEventsResult = (engine) => /* @__PURE__ */ engine.defineValueSetComponentFromSchema(\"core::PointerEventsResult\", PointerEventsResultSchema, {\n timestampFunction: (t) => t.timestamp,\n maxElements: 100\n});\n/** @public */ export const PointerLock = engine => \n/* @__PURE__ */ engine.defineComponentFromSchema(\"core::PointerLock\", PointerLockSchema);\n/** @public */ export const PrimaryPointerInfo = engine => \n/* @__PURE__ */ engine.defineComponentFromSchema(\"core::PrimaryPointerInfo\", PrimaryPointerInfoSchema);\n/** @public */ export const Raycast = engine => \n/* @__PURE__ */ engine.defineComponentFromSchema(\"core::Raycast\", RaycastSchema);\n/** @public */ export const RaycastResult = engine => \n/* @__PURE__ */ engine.defineComponentFromSchema(\"core::RaycastResult\", RaycastResultSchema);\n/** @public */ export const RealmInfo = engine => \n/* @__PURE__ */ engine.defineComponentFromSchema(\"core::RealmInfo\", RealmInfoSchema);\n/** @public */ export const SkyboxTime = engine => \n/* @__PURE__ */ engine.defineComponentFromSchema(\"core::SkyboxTime\", SkyboxTimeSchema);\n/** @public */ export const TextShape = engine => \n/* @__PURE__ */ engine.defineComponentFromSchema(\"core::TextShape\", TextShapeSchema);\n/** @public */ export const TriggerArea = engine => \n/* @__PURE__ */ engine.defineComponentFromSchema(\"core::TriggerArea\", TriggerAreaSchema);\n/** @public */ export const TriggerAreaResult = (engine) => /* @__PURE__ */ engine.defineValueSetComponentFromSchema(\"core::TriggerAreaResult\", TriggerAreaResultSchema, {\n timestampFunction: (t) => t.timestamp,\n maxElements: 100\n});\n/** @public */ export const Tween = engine => \n/* @__PURE__ */ engine.defineComponentFromSchema(\"core::Tween\", TweenSchema);\n/** @public */ export const TweenSequence = engine => \n/* @__PURE__ */ engine.defineComponentFromSchema(\"core::TweenSequence\", TweenSequenceSchema);\n/** @public */ export const TweenState = engine => \n/* @__PURE__ */ engine.defineComponentFromSchema(\"core::TweenState\", TweenStateSchema);\n/** @public */ export const UiBackground = engine => \n/* @__PURE__ */ engine.defineComponentFromSchema(\"core::UiBackground\", UiBackgroundSchema);\n/** @public */ export const UiCanvasInformation = engine => \n/* @__PURE__ */ engine.defineComponentFromSchema(\"core::UiCanvasInformation\", UiCanvasInformationSchema);\n/** @public */ export const UiDropdown = engine => \n/* @__PURE__ */ engine.defineComponentFromSchema(\"core::UiDropdown\", UiDropdownSchema);\n/** @public */ export const UiDropdownResult = engine => \n/* @__PURE__ */ engine.defineComponentFromSchema(\"core::UiDropdownResult\", UiDropdownResultSchema);\n/** @public */ export const UiInput = engine => \n/* @__PURE__ */ engine.defineComponentFromSchema(\"core::UiInput\", UiInputSchema);\n/** @public */ export const UiInputResult = engine => \n/* @__PURE__ */ engine.defineComponentFromSchema(\"core::UiInputResult\", UiInputResultSchema);\n/** @public */ export const UiText = engine => \n/* @__PURE__ */ engine.defineComponentFromSchema(\"core::UiText\", UiTextSchema);\n/** @public */ export const UiTransform = engine => \n/* @__PURE__ */ engine.defineComponentFromSchema(\"core::UiTransform\", UiTransformSchema);\n/** @public */ export const VideoEvent = (engine) => /* @__PURE__ */ engine.defineValueSetComponentFromSchema(\"core::VideoEvent\", VideoEventSchema, {\n timestampFunction: (t) => t.timestamp,\n maxElements: 100\n});\n/** @public */ export const VideoPlayer = engine => \n/* @__PURE__ */ engine.defineComponentFromSchema(\"core::VideoPlayer\", VideoPlayerSchema);\n/** @public */ export const VirtualCamera = engine => \n/* @__PURE__ */ engine.defineComponentFromSchema(\"core::VirtualCamera\", VirtualCameraSchema);\n/** @public */ export const VisibilityComponent = engine => \n/* @__PURE__ */ engine.defineComponentFromSchema(\"core::VisibilityComponent\", VisibilityComponentSchema);\n/** public */\nexport const componentDefinitionByName = /* @__PURE__ */ {\n \"core::Animator\": Animator,\n \"core::AudioEvent\": AudioEvent,\n \"core::AudioSource\": AudioSource,\n \"core::AudioStream\": AudioStream,\n \"core::AvatarAttach\": AvatarAttach,\n \"core::AvatarBase\": AvatarBase,\n \"core::AvatarEmoteCommand\": AvatarEmoteCommand,\n \"core::AvatarEquippedData\": AvatarEquippedData,\n \"core::AvatarModifierArea\": AvatarModifierArea,\n \"core::AvatarShape\": AvatarShape,\n \"core::Billboard\": Billboard,\n \"core::CameraMode\": CameraMode,\n \"core::CameraModeArea\": CameraModeArea,\n \"core::EngineInfo\": EngineInfo,\n \"core::GltfContainer\": GltfContainer,\n \"core::GltfContainerLoadingState\": GltfContainerLoadingState,\n \"core::GltfNodeModifiers\": GltfNodeModifiers,\n \"core::InputModifier\": InputModifier,\n \"core::LightSource\": LightSource,\n \"core::MainCamera\": MainCamera,\n \"core::Material\": Material,\n \"core::MeshCollider\": MeshCollider,\n \"core::MeshRenderer\": MeshRenderer,\n \"core::NftShape\": NftShape,\n \"core::PlayerIdentityData\": PlayerIdentityData,\n \"core::PointerEvents\": PointerEvents,\n \"core::PointerEventsResult\": PointerEventsResult,\n \"core::PointerLock\": PointerLock,\n \"core::PrimaryPointerInfo\": PrimaryPointerInfo,\n \"core::Raycast\": Raycast,\n \"core::RaycastResult\": RaycastResult,\n \"core::RealmInfo\": RealmInfo,\n \"core::SkyboxTime\": SkyboxTime,\n \"core::TextShape\": TextShape,\n \"core::TriggerArea\": TriggerArea,\n \"core::TriggerAreaResult\": TriggerAreaResult,\n \"core::Tween\": Tween,\n \"core::TweenSequence\": TweenSequence,\n \"core::TweenState\": TweenState,\n \"core::UiBackground\": UiBackground,\n \"core::UiCanvasInformation\": UiCanvasInformation,\n \"core::UiDropdown\": UiDropdown,\n \"core::UiDropdownResult\": UiDropdownResult,\n \"core::UiInput\": UiInput,\n \"core::UiInputResult\": UiInputResult,\n \"core::UiText\": UiText,\n \"core::UiTransform\": UiTransform,\n \"core::VideoEvent\": VideoEvent,\n \"core::VideoPlayer\": VideoPlayer,\n \"core::VirtualCamera\": VirtualCamera,\n \"core::VisibilityComponent\": VisibilityComponent,\n};\n", "import { Animator } from '../generated/index.gen';\nexport function defineAnimatorComponent(engine) {\n const theComponent = Animator(engine);\n /**\n * @returns The tuple [animator, clip]\n */\n function getClipAndAnimator(entity, clipName) {\n const anim = theComponent.getMutableOrNull(entity);\n if (!anim)\n return [null, null];\n const state = anim.states.find((item) => item.clip === clipName);\n if (!state)\n return [anim, null];\n return [anim, state];\n }\n return {\n ...theComponent,\n getClipOrNull(entity, clipName) {\n const [_, state] = getClipAndAnimator(entity, clipName);\n return state;\n },\n getClip(entity, clipName) {\n const [animator, state] = getClipAndAnimator(entity, clipName);\n if (!animator) {\n throw new Error(`There is no Animator found in the entity ${entity}`);\n }\n if (!state) {\n throw new Error(`The Animator component of ${entity} has no the state ${clipName}`);\n }\n return state;\n },\n playSingleAnimation(entity, clipName, shouldReset = true) {\n const [animator, state] = getClipAndAnimator(entity, clipName);\n if (!animator || !state)\n return false;\n // Reset all other animations\n for (const state of animator.states) {\n state.playing = false;\n state.shouldReset = true;\n }\n state.playing = true;\n state.shouldReset = shouldReset;\n return true;\n },\n stopAllAnimations(entity, resetCursor = true) {\n // Get the mutable to modifying\n const animator = theComponent.getMutableOrNull(entity);\n if (!animator)\n return false;\n // Reset all other animations\n for (const state of animator.states) {\n state.playing = false;\n state.shouldReset = resetCursor;\n }\n return true;\n }\n };\n}\n", "import { AudioSource } from '../generated/index.gen';\nexport function defineAudioSourceComponent(engine) {\n const theComponent = AudioSource(engine);\n return {\n ...theComponent,\n playSound(entity, src, resetCursor = true) {\n // Get the mutable to modify\n const audioSource = theComponent.getMutableOrNull(entity);\n if (!audioSource)\n return false;\n audioSource.audioClipUrl = src;\n audioSource.playing = true;\n audioSource.currentTime = resetCursor ? 0 : audioSource.currentTime;\n return true;\n },\n stopSound(entity, resetCursor = true) {\n // Get the mutable to modify\n const audioSource = theComponent.getMutableOrNull(entity);\n if (!audioSource)\n return false;\n audioSource.playing = false;\n audioSource.currentTime = resetCursor ? 0 : audioSource.currentTime;\n return true;\n }\n };\n}\n", "import { Material } from '../generated/index.gen';\nconst TextureHelper = {\n Common(texture) {\n return {\n tex: {\n $case: 'texture',\n texture\n }\n };\n },\n Avatar(avatarTexture) {\n return {\n tex: {\n $case: 'avatarTexture',\n avatarTexture\n }\n };\n },\n Video(videoTexture) {\n return {\n tex: {\n $case: 'videoTexture',\n videoTexture\n }\n };\n }\n};\nexport function defineMaterialComponent(engine) {\n const theComponent = Material(engine);\n return {\n ...theComponent,\n Texture: TextureHelper,\n setBasicMaterial(entity, material) {\n theComponent.createOrReplace(entity, {\n material: {\n $case: 'unlit',\n unlit: material\n }\n });\n },\n setPbrMaterial(entity, material) {\n theComponent.createOrReplace(entity, {\n material: {\n $case: 'pbr',\n pbr: material\n }\n });\n }\n };\n}\n", "import { MeshCollider } from '../generated/index.gen';\nexport function defineMeshColliderComponent(engine) {\n const theComponent = MeshCollider(engine);\n function getCollisionMask(layers) {\n if (Array.isArray(layers)) {\n return layers.map((item) => item).reduce((prev, item) => prev | item, 0);\n }\n else if (layers) {\n return layers;\n }\n }\n return {\n ...theComponent,\n setBox(entity, colliderLayers) {\n theComponent.createOrReplace(entity, {\n mesh: { $case: 'box', box: {} },\n collisionMask: getCollisionMask(colliderLayers)\n });\n },\n setPlane(entity, colliderLayers) {\n theComponent.createOrReplace(entity, {\n mesh: { $case: 'plane', plane: {} },\n collisionMask: getCollisionMask(colliderLayers)\n });\n },\n setCylinder(entity, radiusBottom, radiusTop, colliderLayers) {\n theComponent.createOrReplace(entity, {\n mesh: { $case: 'cylinder', cylinder: { radiusBottom, radiusTop } },\n collisionMask: getCollisionMask(colliderLayers)\n });\n },\n setSphere(entity, colliderLayers) {\n theComponent.createOrReplace(entity, {\n mesh: { $case: 'sphere', sphere: {} },\n collisionMask: getCollisionMask(colliderLayers)\n });\n }\n };\n}\n", "import { MeshRenderer } from '../generated/index.gen';\nexport function defineMeshRendererComponent(engine) {\n const theComponent = MeshRenderer(engine);\n return {\n ...theComponent,\n setBox(entity, uvs) {\n theComponent.createOrReplace(entity, {\n mesh: { $case: 'box', box: { uvs: uvs || [] } }\n });\n },\n setPlane(entity, uvs) {\n theComponent.createOrReplace(entity, {\n mesh: { $case: 'plane', plane: { uvs: uvs || [] } }\n });\n },\n setCylinder(entity, radiusBottom, radiusTop) {\n theComponent.createOrReplace(entity, {\n mesh: { $case: 'cylinder', cylinder: { radiusBottom, radiusTop } }\n });\n },\n setSphere(entity) {\n theComponent.createOrReplace(entity, {\n mesh: { $case: 'sphere', sphere: {} }\n });\n }\n };\n}\n", "import { Tween } from '../generated/index.gen';\nconst TweenHelper = {\n Move(move) {\n return {\n $case: 'move',\n move\n };\n },\n Rotate(rotate) {\n return {\n $case: 'rotate',\n rotate\n };\n },\n Scale(scale) {\n return {\n $case: 'scale',\n scale\n };\n },\n TextureMove(textureMove) {\n return {\n $case: 'textureMove',\n textureMove\n };\n }\n};\nexport function defineTweenComponent(engine) {\n const theComponent = Tween(engine);\n return {\n ...theComponent,\n Mode: TweenHelper\n };\n}\n", "/**\n * @internal\n */\nexport const IArray = (type) => {\n return {\n serialize(value, builder) {\n builder.writeUint32(value.length);\n for (const item of value) {\n type.serialize(item, builder);\n }\n },\n deserialize(reader) {\n const newArray = [];\n const length = reader.readUint32();\n for (let index = 0; index < length; index++) {\n newArray.push(type.deserialize(reader));\n }\n return newArray;\n },\n create() {\n return [];\n },\n jsonSchema: {\n type: 'array',\n items: type.jsonSchema,\n serializationType: 'array'\n }\n };\n};\n", "/**\n * @internal\n */\nexport const Bool = {\n serialize(value, builder) {\n builder.writeInt8(value ? 1 : 0);\n },\n deserialize(reader) {\n return reader.readInt8() === 1;\n },\n create() {\n return false;\n },\n jsonSchema: {\n type: 'boolean',\n serializationType: 'boolean'\n }\n};\n", "/**\n * @internal\n */\nexport const Int64 = {\n serialize(value, builder) {\n builder.writeInt64(BigInt(value));\n },\n deserialize(reader) {\n return Number(reader.readInt64());\n },\n create() {\n return 0;\n },\n jsonSchema: {\n type: 'integer',\n serializationType: 'int64'\n }\n};\n/**\n * @internal\n */\nexport const Int32 = {\n serialize(value, builder) {\n builder.writeInt32(value);\n },\n deserialize(reader) {\n return reader.readInt32();\n },\n create() {\n return 0;\n },\n jsonSchema: {\n type: 'integer',\n serializationType: 'int32'\n }\n};\n/**\n * @public\n */\nexport const Int16 = {\n serialize(value, builder) {\n builder.writeInt16(value);\n },\n deserialize(reader) {\n return reader.readInt16();\n },\n create() {\n return 0;\n },\n jsonSchema: {\n type: 'integer',\n serializationType: 'int16'\n }\n};\n/**\n * @public\n */\nexport const Int8 = {\n serialize(value, builder) {\n builder.writeInt8(value);\n },\n deserialize(reader) {\n return reader.readInt8();\n },\n create() {\n return 0;\n },\n jsonSchema: {\n type: 'integer',\n serializationType: 'int8'\n }\n};\n", "/**\n * @internal\n */\nexport const FlatString = {\n serialize(value, builder) {\n builder.writeUtf8String(value);\n },\n deserialize(reader) {\n return reader.readUtf8String();\n },\n create() {\n return '';\n },\n jsonSchema: {\n type: 'string',\n serializationType: 'utf8-string'\n }\n};\n/**\n * @internal\n */\nexport const EcsString = FlatString;\n", "import { Int32 } from './Integer';\nimport { FlatString } from './String';\n/**\n * Validates the enum to ensure all member values are numbers and within the range of Int32.\n * @param enumValue The enum to be checked.\n * @throws If any member value is not a number or is outside the range of Int32.\n */\nfunction validateMemberValuesAreNumbersAndInRangeInt32(enumValue) {\n const MIN_VALUE = -(2 ** 31), MAX_VALUE = 2 ** 31 - 1;\n let valueCount = 0, totalCount = 0;\n for (const key in enumValue) {\n if (typeof enumValue[key] === 'number') {\n if (enumValue[key] > MAX_VALUE || enumValue[key] < MIN_VALUE) {\n throw new Error(`Enum member values must be numbers within the range of ${MIN_VALUE} to ${MAX_VALUE}.`);\n }\n valueCount++;\n }\n totalCount++;\n }\n if (totalCount !== valueCount * 2) {\n throw new Error('All enum member values must be of numeric type.');\n }\n}\n/**\n * Validates the enum to ensure all member values are of string type.\n * @param enumValue The enum to be checked.\n * @throws If any member value is not of string type.\n */\nfunction validateMemberValuesAreStrings(enumValue) {\n for (const key in enumValue) {\n if (typeof enumValue[key] !== 'string') {\n throw new Error('All enum member values must be of string type.');\n }\n }\n}\n/**\n * @internal\n */\nexport const IntEnumReflectionType = 'enum-int';\n/**\n * @internal\n */\nexport const IntEnum = (enumObject, defaultValue) => {\n validateMemberValuesAreNumbersAndInRangeInt32(enumObject);\n return {\n serialize(value, builder) {\n Int32.serialize(value, builder);\n },\n deserialize(reader) {\n return Int32.deserialize(reader);\n },\n create() {\n return defaultValue;\n },\n jsonSchema: {\n // JSON-schema\n type: 'integer',\n enum: Object.values(enumObject).filter((item) => Number.isInteger(item)),\n default: defaultValue,\n // @dcl/ecs Schema Spec\n serializationType: IntEnumReflectionType,\n enumObject\n }\n };\n};\n/**\n * @internal\n */\nexport const StringEnumReflectionType = 'enum-string';\n/**\n * @internal\n */\nexport const StringEnum = (enumObject, defaultValue) => {\n validateMemberValuesAreStrings(enumObject);\n // String enum has the exact mapping from key (our reference in code) to values\n return {\n serialize(value, builder) {\n FlatString.serialize(value, builder);\n },\n deserialize(reader) {\n return FlatString.deserialize(reader);\n },\n create() {\n return defaultValue;\n },\n jsonSchema: {\n // JSON-schema\n type: 'string',\n enum: Object.values(enumObject),\n default: defaultValue,\n // @dcl/ecs Schema Spec\n serializationType: StringEnumReflectionType,\n enumObject\n }\n };\n};\n", "/**\n * @internal\n */\nexport const Float32 = {\n serialize(value, builder) {\n builder.writeFloat32(value);\n },\n deserialize(reader) {\n return reader.readFloat32();\n },\n create() {\n return 0.0;\n },\n jsonSchema: {\n type: 'number',\n serializationType: 'float32'\n }\n};\n/**\n * @internal\n */\nexport const Float64 = {\n serialize(value, builder) {\n builder.writeFloat64(value);\n },\n deserialize(reader) {\n return reader.readFloat64();\n },\n create() {\n return 0.0;\n },\n jsonSchema: {\n type: 'number',\n serializationType: 'float64'\n }\n};\n", "/**\n * @internal\n */\nexport const Color3Schema = {\n serialize(value, builder) {\n builder.writeFloat32(value.r);\n builder.writeFloat32(value.g);\n builder.writeFloat32(value.b);\n },\n deserialize(reader) {\n return {\n r: reader.readFloat32(),\n g: reader.readFloat32(),\n b: reader.readFloat32()\n };\n },\n create() {\n return { r: 0, g: 0, b: 0 };\n },\n jsonSchema: {\n type: 'object',\n properties: {\n r: { type: 'number' },\n g: { type: 'number' },\n b: { type: 'number' }\n },\n serializationType: 'color3'\n }\n};\n", "/**\n * @internal\n */\nexport const Color4Schema = {\n serialize(value, builder) {\n builder.writeFloat32(value.r);\n builder.writeFloat32(value.g);\n builder.writeFloat32(value.b);\n builder.writeFloat32(value.a);\n },\n deserialize(reader) {\n return {\n r: reader.readFloat32(),\n g: reader.readFloat32(),\n b: reader.readFloat32(),\n a: reader.readFloat32()\n };\n },\n create() {\n return { r: 0, g: 0, b: 0, a: 0 };\n },\n jsonSchema: {\n type: 'object',\n properties: {\n r: { type: 'number' },\n g: { type: 'number' },\n b: { type: 'number' },\n a: { type: 'number' }\n },\n serializationType: 'color4'\n }\n};\n", "/**\n * @internal\n */\nexport const EntitySchema = {\n serialize(value, builder) {\n builder.writeInt32(value);\n },\n deserialize(reader) {\n return reader.readInt32();\n },\n create() {\n return 0;\n },\n jsonSchema: {\n type: 'integer',\n serializationType: 'entity'\n }\n};\n", "/**\n * @internal\n */\nexport const QuaternionSchema = {\n serialize(value, builder) {\n builder.writeFloat32(value.x);\n builder.writeFloat32(value.y);\n builder.writeFloat32(value.z);\n builder.writeFloat32(value.w);\n },\n deserialize(reader) {\n return {\n x: reader.readFloat32(),\n y: reader.readFloat32(),\n z: reader.readFloat32(),\n w: reader.readFloat32()\n };\n },\n create() {\n return { x: 0, y: 0, z: 0, w: 0 };\n },\n jsonSchema: {\n type: 'object',\n properties: {\n x: { type: 'number' },\n y: { type: 'number' },\n z: { type: 'number' },\n w: { type: 'number' }\n },\n serializationType: 'quaternion'\n }\n};\n", "/**\n * @internal\n */\nexport const Vector3Schema = {\n serialize(value, builder) {\n builder.writeFloat32(value.x);\n builder.writeFloat32(value.y);\n builder.writeFloat32(value.z);\n },\n deserialize(reader) {\n return {\n x: reader.readFloat32(),\n y: reader.readFloat32(),\n z: reader.readFloat32()\n };\n },\n create() {\n return { x: 0, y: 0, z: 0 };\n },\n jsonSchema: {\n type: 'object',\n properties: {\n x: { type: 'number' },\n y: { type: 'number' },\n z: { type: 'number' },\n w: { type: 'number' }\n },\n serializationType: 'vector3'\n }\n};\n", "/**\n * @internal\n */\nexport const IMap = (spec, defaultValue) => {\n const specReflection = Object.keys(spec).reduce((specReflection, currentKey) => {\n specReflection[currentKey] = spec[currentKey].jsonSchema;\n return specReflection;\n }, {});\n return {\n serialize(value, builder) {\n for (const key in spec) {\n spec[key].serialize(value[key], builder);\n }\n },\n deserialize(reader) {\n const newValue = {};\n for (const key in spec) {\n ;\n newValue[key] = spec[key].deserialize(reader);\n }\n return newValue;\n },\n create() {\n const newValue = {};\n for (const key in spec) {\n ;\n newValue[key] = spec[key].create();\n }\n return { ...newValue, ...defaultValue };\n },\n extend: (base) => {\n const newValue = {};\n for (const key in spec) {\n ;\n newValue[key] = spec[key].create();\n }\n return { ...newValue, ...defaultValue, ...base };\n },\n jsonSchema: {\n type: 'object',\n properties: specReflection,\n serializationType: 'map'\n }\n };\n};\n", "/**\n * @internal\n */\nexport const IOptional = (spec) => {\n return {\n serialize(value, builder) {\n if (value) {\n builder.writeInt8(1);\n spec.serialize(value, builder);\n }\n else {\n builder.writeInt8(0);\n }\n },\n deserialize(reader) {\n const exists = reader.readInt8();\n if (exists) {\n return spec.deserialize(reader);\n }\n },\n create() {\n return undefined;\n },\n jsonSchema: {\n type: spec.jsonSchema.type,\n serializationType: 'optional',\n optionalJsonSchema: spec.jsonSchema\n }\n };\n};\n", "export const IOneOf = (specs) => {\n const specKeys = Object.keys(specs);\n const keyToIndex = specKeys.reduce((dict, key, index) => {\n dict[key] = index;\n return dict;\n }, {});\n const specReflection = specKeys.reduce((specReflection, currentKey) => {\n specReflection[currentKey] = specs[currentKey].jsonSchema;\n return specReflection;\n }, {});\n return {\n serialize({ $case, value }, builder) {\n const _value = keyToIndex[$case.toString()] + 1;\n builder.writeUint8(_value);\n specs[$case].serialize(value, builder);\n },\n deserialize(reader) {\n const $case = specKeys[reader.readInt8() - 1];\n const value = specs[$case].deserialize(reader);\n return { $case, value };\n },\n create() {\n return {};\n },\n jsonSchema: {\n type: 'object',\n properties: specReflection,\n serializationType: 'one-of'\n }\n };\n};\n", "export const isSchemaType = (value, types) => types.includes(value.serializationType);\nexport const isOneOfJsonSchema = (type) => isSchemaType(type, ['one-of']);\nexport const getUnknownSchema = () => ({\n type: { type: 'object', serializationType: 'unknown' },\n value: undefined\n});\nexport const isCompoundType = (type) => isSchemaType(type, ['array', 'map']);\nexport const getTypeAndValue = (properties, value, key) => {\n const type = properties[key];\n const valueKey = value[key];\n if (isOneOfJsonSchema(type)) {\n const typedMapValue = valueKey;\n if (!typedMapValue.$case)\n return getUnknownSchema();\n const propType = type.properties[typedMapValue.$case];\n // transform { $case: string; value: unknown } => { [$case]: value }\n if (isCompoundType(propType))\n value[key] = { [typedMapValue.$case]: typedMapValue.value };\n return { type: propType, value: typedMapValue.value };\n }\n return { type, value: valueKey };\n};\n", "import { IArray } from '../Array';\nimport { Bool } from '../basic/Boolean';\nimport { IntEnum, StringEnum } from '../basic/Enum';\nimport { Float32, Float64 } from '../basic/Float';\nimport { Int16, Int32, Int64, Int8 } from '../basic/Integer';\nimport { EcsString } from '../basic/String';\nimport { Color3Schema } from '../custom/Color3';\nimport { Color4Schema } from '../custom/Color4';\nimport { EntitySchema } from '../custom/Entity';\nimport { QuaternionSchema } from '../custom/Quaternion';\nimport { Vector3Schema } from '../custom/Vector3';\nimport { IMap } from '../Map';\nimport { IOneOf } from '../OneOf';\nimport { IOptional } from '../Optional';\nimport { getTypeAndValue, isCompoundType } from './utils';\nconst primitiveSchemas = {\n [Bool.jsonSchema.serializationType]: Bool,\n [EcsString.jsonSchema.serializationType]: EcsString,\n [Float32.jsonSchema.serializationType]: Float32,\n [Float64.jsonSchema.serializationType]: Float64,\n [Int8.jsonSchema.serializationType]: Int8,\n [Int16.jsonSchema.serializationType]: Int16,\n [Int32.jsonSchema.serializationType]: Int32,\n [Int64.jsonSchema.serializationType]: Int64,\n [Vector3Schema.jsonSchema.serializationType]: Vector3Schema,\n [QuaternionSchema.jsonSchema.serializationType]: QuaternionSchema,\n [Color3Schema.jsonSchema.serializationType]: Color3Schema,\n [Color4Schema.jsonSchema.serializationType]: Color4Schema,\n [EntitySchema.jsonSchema.serializationType]: EntitySchema\n};\n/**\n * Create an ISchema object from the json-schema\n * @param jsonSchema\n * @returns a ISchema or fail for unsupported json-schema\n */\nexport function jsonSchemaToSchema(jsonSchema) {\n if (primitiveSchemas[jsonSchema.serializationType]) {\n return primitiveSchemas[jsonSchema.serializationType];\n }\n if (jsonSchema.serializationType === 'map') {\n const mapJsonSchema = jsonSchema;\n const spec = {};\n for (const key in mapJsonSchema.properties) {\n spec[key] = jsonSchemaToSchema(mapJsonSchema.properties[key]);\n }\n return IMap(spec);\n }\n if (jsonSchema.serializationType === 'optional') {\n const withItemsJsonSchema = jsonSchema;\n return IOptional(jsonSchemaToSchema(withItemsJsonSchema.optionalJsonSchema));\n }\n if (jsonSchema.serializationType === 'array') {\n const withItemsJsonSchema = jsonSchema;\n return IArray(jsonSchemaToSchema(withItemsJsonSchema.items));\n }\n if (jsonSchema.serializationType === 'enum-int') {\n const enumJsonSchema = jsonSchema;\n return IntEnum(enumJsonSchema.enumObject, enumJsonSchema.default);\n }\n if (jsonSchema.serializationType === 'enum-string') {\n const enumJsonSchema = jsonSchema;\n return StringEnum(enumJsonSchema.enumObject, enumJsonSchema.default);\n }\n if (jsonSchema.serializationType === 'one-of') {\n const oneOfJsonSchema = jsonSchema;\n const spec = {};\n for (const key in oneOfJsonSchema.properties) {\n spec[key] = jsonSchemaToSchema(oneOfJsonSchema.properties[key]);\n }\n return IOneOf(spec);\n }\n throw new Error(`${jsonSchema.serializationType} is not supported as reverse schema generation.`);\n}\nexport function mutateValues(jsonSchema, value, mutateFn) {\n if (jsonSchema.serializationType === 'map') {\n const { properties } = jsonSchema;\n const typedValue = value;\n for (const key in properties) {\n const { type, value: mapValue } = getTypeAndValue(properties, typedValue, key);\n if (type.serializationType === 'unknown')\n continue;\n if (isCompoundType(type)) {\n mutateValues(type, mapValue, mutateFn);\n }\n else {\n const newValue = mutateFn(mapValue, type);\n if (newValue.changed) {\n typedValue[key] = newValue.value;\n }\n }\n }\n }\n else if (jsonSchema.serializationType === 'array') {\n const { items } = jsonSchema;\n const arrayValue = value;\n for (let i = 0, n = arrayValue.length; i < n; i++) {\n const { type, value } = getTypeAndValue({ items: items }, { items: arrayValue[i] }, 'items');\n if (isCompoundType(type)) {\n mutateValues(type, value, mutateFn);\n }\n else {\n const newValue = mutateFn(value, type);\n if (newValue.changed) {\n arrayValue[i] = newValue.value;\n }\n }\n }\n }\n}\n", "import { IArray } from './Array';\nimport { Bool } from './basic/Boolean';\nimport { IntEnum as IntEnumSchema, StringEnum as StringEnumSchema } from './basic/Enum';\nimport { Float32, Float64 } from './basic/Float';\nimport { Int16, Int32, Int8, Int64 as iInt64 } from './basic/Integer';\nimport { EcsString } from './basic/String';\nimport { Color3Schema } from './custom/Color3';\nimport { Color4Schema } from './custom/Color4';\nimport { EntitySchema } from './custom/Entity';\nimport { QuaternionSchema } from './custom/Quaternion';\nimport { Vector3Schema } from './custom/Vector3';\nimport { IMap } from './Map';\nimport { IOptional } from './Optional';\nimport { IOneOf } from './OneOf';\nimport { jsonSchemaToSchema, mutateValues } from './buildSchema';\n/**\n * @public\n */\nexport var Schemas;\n(function (Schemas) {\n /** @public */\n Schemas.Boolean = Bool;\n /** @public */\n Schemas.String = EcsString;\n /** @public */\n Schemas.Float = Float32;\n /** @public */\n Schemas.Double = Float64;\n /** @public */\n Schemas.Byte = Int8;\n /** @public */\n Schemas.Short = Int16;\n /** @public */\n Schemas.Int = Int32;\n /** @public */\n Schemas.Int64 = iInt64;\n /** @public */\n Schemas.Number = Float32;\n /** @public */\n Schemas.Vector3 = Vector3Schema;\n /** @public */\n Schemas.Quaternion = QuaternionSchema;\n /** @public */\n Schemas.Color3 = Color3Schema;\n /** @public */\n Schemas.Color4 = Color4Schema;\n /** @public */\n Schemas.Entity = EntitySchema;\n /** @public */\n Schemas.EnumNumber = IntEnumSchema;\n /** @public */\n Schemas.EnumString = StringEnumSchema;\n /** @public */\n Schemas.Array = IArray;\n /** @public */\n Schemas.Map = IMap;\n /** @public */\n Schemas.Optional = IOptional;\n /** @public */\n Schemas.OneOf = IOneOf;\n /**\n * @public Create an ISchema object from the json-schema\n * @param jsonSchema\n * @returns a ISchema or fail for unsupported json-schema\n */\n Schemas.fromJson = jsonSchemaToSchema;\n /**\n * @public\n *\n * Traverses and mutates values in a JSON schema-based structure, applying the given mutation function to each value.\n * The function is designed to work with nested maps and arrays, recursively processing each element.\n *\n * @param jsonSchema - The JSON schema object that describes the structure of the value.\n * It must have a serializationType of 'map', 'array', or other custom types like 'entity'.\n * @param value - The value to be mutated, which should conform to the provided JSON schema.\n * @param mutateFn - A function that takes a value and its corresponding valueType (JsonSchemaExtended) as arguments\n * and returns a tuple [boolean, any]. The boolean indicates whether the mutation should be applied,\n * and the second element is the mutated value.\n */\n Schemas.mutateNestedValues = mutateValues;\n})(Schemas || (Schemas = {}));\n", "import { Schemas } from '../../schemas';\nfunction defineNameComponent(engine) {\n const Name = engine.defineComponent('core-schema::Name', {\n value: Schemas.String\n });\n return Name;\n}\nexport default defineNameComponent;\n", "import { Schemas } from '../../schemas';\nfunction defineSyncComponents(engine) {\n const SyncComponents = engine.defineComponent('core-schema::Sync-Components', {\n componentIds: Schemas.Array(Schemas.Int64)\n });\n return SyncComponents;\n}\nexport default defineSyncComponents;\n", "import { Schemas } from '../../schemas';\nfunction defineNetworkEntityComponent(engine) {\n const EntityNetwork = engine.defineComponent('core-schema::Network-Entity', {\n networkId: Schemas.Int64,\n entityId: Schemas.Entity\n });\n return EntityNetwork;\n}\nexport default defineNetworkEntityComponent;\n", "import { Schemas } from '../../schemas';\nfunction defineNetworkParentComponent(engine) {\n const EntityNetwork = engine.defineComponent('core-schema::Network-Parent', {\n networkId: Schemas.Int64,\n entityId: Schemas.Entity\n });\n return EntityNetwork;\n}\nexport default defineNetworkParentComponent;\n", "/**\n * @internal\n */\nexport const COMPONENT_ID = 1;\n/** @internal */\nexport const TRANSFORM_LENGTH = 44;\n/** @internal */\nexport const TransformSchema = {\n serialize(value, builder) {\n const ptr = builder.incrementWriteOffset(TRANSFORM_LENGTH);\n builder.setFloat32(ptr, value.position.x);\n builder.setFloat32(ptr + 4, value.position.y);\n builder.setFloat32(ptr + 8, value.position.z);\n builder.setFloat32(ptr + 12, value.rotation.x);\n builder.setFloat32(ptr + 16, value.rotation.y);\n builder.setFloat32(ptr + 20, value.rotation.z);\n builder.setFloat32(ptr + 24, value.rotation.w);\n builder.setFloat32(ptr + 28, value.scale.x);\n builder.setFloat32(ptr + 32, value.scale.y);\n builder.setFloat32(ptr + 36, value.scale.z);\n builder.setUint32(ptr + 40, value.parent || 0);\n },\n deserialize(reader) {\n const ptr = reader.incrementReadOffset(TRANSFORM_LENGTH);\n return {\n position: {\n x: reader.getFloat32(ptr),\n y: reader.getFloat32(ptr + 4),\n z: reader.getFloat32(ptr + 8)\n },\n rotation: {\n x: reader.getFloat32(ptr + 12),\n y: reader.getFloat32(ptr + 16),\n z: reader.getFloat32(ptr + 20),\n w: reader.getFloat32(ptr + 24)\n },\n scale: {\n x: reader.getFloat32(ptr + 28),\n y: reader.getFloat32(ptr + 32),\n z: reader.getFloat32(ptr + 36)\n },\n parent: reader.getUint32(ptr + 40)\n };\n },\n create() {\n return {\n position: { x: 0, y: 0, z: 0 },\n scale: { x: 1, y: 1, z: 1 },\n rotation: { x: 0, y: 0, z: 0, w: 1 },\n parent: 0\n };\n },\n extend(value) {\n return {\n position: { x: 0, y: 0, z: 0 },\n scale: { x: 1, y: 1, z: 1 },\n rotation: { x: 0, y: 0, z: 0, w: 1 },\n parent: 0,\n ...value\n };\n },\n jsonSchema: {\n type: 'object',\n properties: {\n position: {\n type: 'object',\n properties: {\n x: { type: 'number' },\n y: { type: 'number' },\n z: { type: 'number' }\n }\n },\n scale: {\n type: 'object',\n properties: {\n x: { type: 'number' },\n y: { type: 'number' },\n z: { type: 'number' }\n }\n },\n rotation: {\n type: 'object',\n properties: {\n x: { type: 'number' },\n y: { type: 'number' },\n z: { type: 'number' },\n w: { type: 'number' }\n }\n },\n parent: { type: 'integer' }\n },\n serializationType: 'transform'\n }\n};\nexport function defineTransformComponent(engine) {\n const transformDef = engine.defineComponentFromSchema('core::Transform', TransformSchema);\n return {\n ...transformDef,\n create(entity, val) {\n return transformDef.create(entity, TransformSchema.extend(val));\n },\n createOrReplace(entity, val) {\n return transformDef.createOrReplace(entity, TransformSchema.extend(val));\n }\n };\n}\n", "import { AudioStream, AudioEvent as defineAudioEventComponent } from '../generated/index.gen';\nexport function defineAudioStreamComponent(engine) {\n const theComponent = AudioStream(engine);\n const AudioEvent = defineAudioEventComponent(engine);\n return {\n ...theComponent,\n getAudioState(entity) {\n const AudioStream = theComponent.getMutableOrNull(entity);\n if (!AudioStream || !AudioEvent.has(entity))\n return undefined;\n const lastEvent = Array.from(AudioEvent.get(entity)).pop();\n return lastEvent;\n }\n };\n}\n", "/* eslint-disable */\nconst protobufPackageSarasa = \"decentraland.sdk.components.common\";\n/**\n * @public\n */\nexport var MediaState;\n(function (MediaState) {\n MediaState[MediaState[\"MS_NONE\"] = 0] = \"MS_NONE\";\n MediaState[MediaState[\"MS_ERROR\"] = 1] = \"MS_ERROR\";\n MediaState[MediaState[\"MS_LOADING\"] = 2] = \"MS_LOADING\";\n MediaState[MediaState[\"MS_READY\"] = 3] = \"MS_READY\";\n MediaState[MediaState[\"MS_PLAYING\"] = 4] = \"MS_PLAYING\";\n MediaState[MediaState[\"MS_BUFFERING\"] = 5] = \"MS_BUFFERING\";\n MediaState[MediaState[\"MS_SEEKING\"] = 6] = \"MS_SEEKING\";\n MediaState[MediaState[\"MS_PAUSED\"] = 7] = \"MS_PAUSED\";\n})(MediaState || (MediaState = {}));\n", "import { LightSource } from '../generated/index.gen';\nconst LightSourceHelper = {\n Point(point) {\n return {\n $case: 'point',\n point\n };\n },\n Spot(spot) {\n return {\n $case: 'spot',\n spot\n };\n }\n};\nexport function defineLightSourceComponent(engine) {\n const theComponent = LightSource(engine);\n return {\n ...theComponent,\n Type: LightSourceHelper\n };\n}\n", "import { Schemas } from '../../schemas';\n/**\n * @public\n *\n * Define the Tags component\n * @param engine - the engine to define the component on\n * @returns the Tags component definition\n */\nfunction defineTagsComponent(engine) {\n const Tags = engine.defineComponent('core-schema::Tags', {\n tags: Schemas.Array(Schemas.String)\n });\n return {\n ...Tags,\n add(entity, tagName) {\n const tagsComponent = Tags.getMutableOrNull(entity);\n if (tagsComponent) {\n tagsComponent.tags.push(tagName);\n }\n else {\n Tags.createOrReplace(entity, { tags: [tagName] });\n }\n return true;\n },\n remove(entity, tagName) {\n const tagsComponent = Tags.getMutableOrNull(entity);\n if (!tagsComponent || !tagsComponent.tags)\n return false;\n const newTags = tagsComponent.tags.filter((tag) => tag !== tagName);\n if (newTags.length === tagsComponent.tags.length)\n return false;\n tagsComponent.tags = newTags;\n return true;\n }\n };\n}\nexport default defineTagsComponent;\n", "import { defineAnimatorComponent } from './extended/Animator';\nimport { defineAudioSourceComponent } from './extended/AudioSource';\nimport { defineMaterialComponent } from './extended/Material';\nimport { defineMeshColliderComponent } from './extended/MeshCollider';\nimport { defineMeshRendererComponent } from './extended/MeshRenderer';\nimport { defineTweenComponent } from './extended/Tween';\nimport defineNameComponent from './manual/Name';\nimport defineSyncComponent from './manual/SyncComponents';\nimport defineNetworkEntity from './manual/NetworkEntity';\nimport defineNetworkParent from './manual/NetworkParent';\nimport { defineTransformComponent } from './manual/Transform';\nimport { defineAudioStreamComponent } from './extended/AudioStream';\nimport { MediaState } from './generated/pb/decentraland/sdk/components/common/media_state.gen';\nimport { defineVirtualCameraComponent } from './extended/VirtualCamera';\nimport { defineInputModifierComponent } from './extended/InputModifier';\nimport { defineLightSourceComponent } from './extended/LightSource';\nimport { defineTriggerAreaComponent } from './extended/TriggerArea';\nimport defineTagsComponent from './manual/Tags';\nexport * from './generated/index.gen';\n/* @__PURE__ */\nexport const Transform = (engine) => defineTransformComponent(engine);\n/* @__PURE__ */\nexport const Material = (engine) => defineMaterialComponent(engine);\n/* @__PURE__ */\nexport const Animator = (engine) => defineAnimatorComponent(engine);\n/* @__PURE__ */\nexport const AudioSource = (engine) => defineAudioSourceComponent(engine);\n/* @__PURE__ */\nexport const AudioStream = (engine) => defineAudioStreamComponent(engine);\n/* @__PURE__ */\nexport const MeshRenderer = (engine) => defineMeshRendererComponent(engine);\n/* @__PURE__ */\nexport const MeshCollider = (engine) => defineMeshColliderComponent(engine);\n/* @__PURE__ */\nexport const Tween = (engine) => defineTweenComponent(engine);\n/* @__PURE__ */\nexport const VirtualCamera = (engine) => defineVirtualCameraComponent(engine);\n/* @__PURE__*/\nexport const InputModifier = (engine) => defineInputModifierComponent(engine);\n/* @__PURE__ */\nexport const LightSource = (engine) => defineLightSourceComponent(engine);\n/* @__PURE__ */\nexport const TriggerArea = (engine) => defineTriggerAreaComponent(engine);\n/**\n * @alpha\n */\n/* @__PURE__ */\nexport const Name = (engine) => defineNameComponent(engine);\n/* @__PURE__ */\nexport const Tags = (engine) => defineTagsComponent(engine);\n/**\n * @alpha\n */\n/* @__PURE__ */\nexport const SyncComponents = (engine) => defineSyncComponent(engine);\n/**\n * @alpha\n */\n/* @__PURE__ */\nexport const NetworkEntity = (engine) => defineNetworkEntity(engine);\n/**\n * @alpha\n */\n/* @__PURE__ */\nexport const NetworkParent = (engine) => defineNetworkParent(engine);\nexport { MediaState };\n", "/**\n * Autogenerated mapping of core components to their component numbers\n */\nexport const coreComponentMappings = {\n \"core::Transform\": 1,\n \"core::Animator\": 1042,\n \"core::AudioEvent\": 1105,\n \"core::AudioSource\": 1020,\n \"core::AudioStream\": 1021,\n \"core::AvatarAttach\": 1073,\n \"core::AvatarBase\": 1087,\n \"core::AvatarEmoteCommand\": 1088,\n \"core::AvatarEquippedData\": 1091,\n \"core::AvatarModifierArea\": 1070,\n \"core::AvatarShape\": 1080,\n \"core::Billboard\": 1090,\n \"core::CameraMode\": 1072,\n \"core::CameraModeArea\": 1071,\n \"core::EngineInfo\": 1048,\n \"core::GltfContainer\": 1041,\n \"core::GltfContainerLoadingState\": 1049,\n \"core::GltfNodeModifiers\": 1099,\n \"core::InputModifier\": 1078,\n \"core::LightSource\": 1079,\n \"core::MainCamera\": 1075,\n \"core::MapPin\": 1097,\n \"core::Material\": 1017,\n \"core::MeshCollider\": 1019,\n \"core::MeshRenderer\": 1018,\n \"core::NftShape\": 1040,\n \"core::PlayerIdentityData\": 1089,\n \"core::PointerEvents\": 1062,\n \"core::PointerEventsResult\": 1063,\n \"core::PointerLock\": 1074,\n \"core::PrimaryPointerInfo\": 1209,\n \"core::Raycast\": 1067,\n \"core::RaycastResult\": 1068,\n \"core::RealmInfo\": 1106,\n \"core::SkyboxTime\": 1210,\n \"core::TextShape\": 1030,\n \"core::TriggerArea\": 1060,\n \"core::TriggerAreaResult\": 1061,\n \"core::Tween\": 1102,\n \"core::TweenSequence\": 1104,\n \"core::TweenState\": 1103,\n \"core::UiBackground\": 1053,\n \"core::UiCanvasInformation\": 1054,\n \"core::UiDropdown\": 1094,\n \"core::UiDropdownResult\": 1096,\n \"core::UiInput\": 1093,\n \"core::UiInputResult\": 1095,\n \"core::UiText\": 1052,\n \"core::UiTransform\": 1050,\n \"core::VideoEvent\": 1044,\n \"core::VideoPlayer\": 1043,\n \"core::VirtualCamera\": 1076,\n \"core::VisibilityComponent\": 1081\n};\n", "import { coreComponentMappings } from './generated/component-names.gen';\nimport * as utf8 from '@protobufjs/utf8';\nimport { unsignedCRC32 } from '../runtime/crc';\n// Max possible pre-defined (static) component.\nexport const MAX_STATIC_COMPONENT = 1 << 11; // 2048\n/**\n * All components that are not part of the coreComponentMappings MUST yield\n * a componentNumber (componentId) greather than MAX_STATIC_COMPONENT.\n * For that reason, we simply add MAX_STATIC_COMPONENT and trim to the domain 2^32\n */\nexport function componentNumberFromName(componentName) {\n if (coreComponentMappings[componentName])\n return coreComponentMappings[componentName];\n const bytes = new Uint8Array(128);\n utf8.write(componentName, bytes, 0);\n return ((unsignedCRC32(bytes) + MAX_STATIC_COMPONENT) & 4294967295) >>> 0;\n}\n", "const CRC_TABLE = new Int32Array([\n 0x00000000, 0x77073096, 0xee0e612c, 0x990951ba, 0x076dc419, 0x706af48f, 0xe963a535, 0x9e6495a3, 0x0edb8832,\n 0x79dcb8a4, 0xe0d5e91e, 0x97d2d988, 0x09b64c2b, 0x7eb17cbd, 0xe7b82d07, 0x90bf1d91, 0x1db71064, 0x6ab020f2,\n 0xf3b97148, 0x84be41de, 0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7, 0x136c9856, 0x646ba8c0, 0xfd62f97a,\n 0x8a65c9ec, 0x14015c4f, 0x63066cd9, 0xfa0f3d63, 0x8d080df5, 0x3b6e20c8, 0x4c69105e, 0xd56041e4, 0xa2677172,\n 0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b, 0x35b5a8fa, 0x42b2986c, 0xdbbbc9d6, 0xacbcf940, 0x32d86ce3,\n 0x45df5c75, 0xdcd60dcf, 0xabd13d59, 0x26d930ac, 0x51de003a, 0xc8d75180, 0xbfd06116, 0x21b4f4b5, 0x56b3c423,\n 0xcfba9599, 0xb8bda50f, 0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924, 0x2f6f7c87, 0x58684c11, 0xc1611dab,\n 0xb6662d3d, 0x76dc4190, 0x01db7106, 0x98d220bc, 0xefd5102a, 0x71b18589, 0x06b6b51f, 0x9fbfe4a5, 0xe8b8d433,\n 0x7807c9a2, 0x0f00f934, 0x9609a88e, 0xe10e9818, 0x7f6a0dbb, 0x086d3d2d, 0x91646c97, 0xe6635c01, 0x6b6b51f4,\n 0x1c6c6162, 0x856530d8, 0xf262004e, 0x6c0695ed, 0x1b01a57b, 0x8208f4c1, 0xf50fc457, 0x65b0d9c6, 0x12b7e950,\n 0x8bbeb8ea, 0xfcb9887c, 0x62dd1ddf, 0x15da2d49, 0x8cd37cf3, 0xfbd44c65, 0x4db26158, 0x3ab551ce, 0xa3bc0074,\n 0xd4bb30e2, 0x4adfa541, 0x3dd895d7, 0xa4d1c46d, 0xd3d6f4fb, 0x4369e96a, 0x346ed9fc, 0xad678846, 0xda60b8d0,\n 0x44042d73, 0x33031de5, 0xaa0a4c5f, 0xdd0d7cc9, 0x5005713c, 0x270241aa, 0xbe0b1010, 0xc90c2086, 0x5768b525,\n 0x206f85b3, 0xb966d409, 0xce61e49f, 0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4, 0x59b33d17, 0x2eb40d81,\n 0xb7bd5c3b, 0xc0ba6cad, 0xedb88320, 0x9abfb3b6, 0x03b6e20c, 0x74b1d29a, 0xead54739, 0x9dd277af, 0x04db2615,\n 0x73dc1683, 0xe3630b12, 0x94643b84, 0x0d6d6a3e, 0x7a6a5aa8, 0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1,\n 0xf00f9344, 0x8708a3d2, 0x1e01f268, 0x6906c2fe, 0xf762575d, 0x806567cb, 0x196c3671, 0x6e6b06e7, 0xfed41b76,\n 0x89d32be0, 0x10da7a5a, 0x67dd4acc, 0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5, 0xd6d6a3e8, 0xa1d1937e,\n 0x38d8c2c4, 0x4fdff252, 0xd1bb67f1, 0xa6bc5767, 0x3fb506dd, 0x48b2364b, 0xd80d2bda, 0xaf0a1b4c, 0x36034af6,\n 0x41047a60, 0xdf60efc3, 0xa867df55, 0x316e8eef, 0x4669be79, 0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236,\n 0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f, 0xc5ba3bbe, 0xb2bd0b28, 0x2bb45a92, 0x5cb36a04, 0xc2d7ffa7,\n 0xb5d0cf31, 0x2cd99e8b, 0x5bdeae1d, 0x9b64c2b0, 0xec63f226, 0x756aa39c, 0x026d930a, 0x9c0906a9, 0xeb0e363f,\n 0x72076785, 0x05005713, 0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0x0cb61b38, 0x92d28e9b, 0xe5d5be0d, 0x7cdcefb7,\n 0x0bdbdf21, 0x86d3d2d4, 0xf1d4e242, 0x68ddb3f8, 0x1fda836e, 0x81be16cd, 0xf6b9265b, 0x6fb077e1, 0x18b74777,\n 0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c, 0x8f659eff, 0xf862ae69, 0x616bffd3, 0x166ccf45, 0xa00ae278,\n 0xd70dd2ee, 0x4e048354, 0x3903b3c2, 0xa7672661, 0xd06016f7, 0x4969474d, 0x3e6e77db, 0xaed16a4a, 0xd9d65adc,\n 0x40df0b66, 0x37d83bf0, 0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9, 0xbdbdf21c, 0xcabac28a, 0x53b39330,\n 0x24b4a3a6, 0xbad03605, 0xcdd70693, 0x54de5729, 0x23d967bf, 0xb3667a2e, 0xc4614ab8, 0x5d681b02, 0x2a6f2b94,\n 0xb40bbe37, 0xc30c8ea1, 0x5a05df1b, 0x2d02ef8d\n]);\nfunction _crc32(buf, previous) {\n let crc = ~~previous ^ -1;\n for (let n = 0; n < buf.length; n++) {\n crc = CRC_TABLE[(crc ^ buf[n]) & 0xff] ^ (crc >>> 8);\n }\n return crc ^ -1;\n}\nexport function unsignedCRC32(data, prev = 0) {\n return _crc32(data, prev) >>> 0;\n}\n", "/* istanbul ignore file */\nexport const __DEV__ = (typeof DEBUG === 'boolean' && DEBUG) ||\n (typeof process === 'object' &&\n (process.env?.NODE_ENV !== 'production' || process.env?.NODE_ENV === 'development')) ||\n false;\nexport function checkNotThenable(t, error) {\n if (__DEV__) {\n if (t && typeof t === 'object' && typeof t.then === 'function') {\n throw new Error(error);\n }\n }\n return t;\n}\n", "/**\n *\n * @returns a new GSet\n */\nexport function createVersionGSet() {\n const lastVersion = new Map();\n return {\n /**\n *\n * @param number\n * @param version\n * @returns\n */\n addTo(number, version) {\n /* istanbul ignore next */\n if (version < 0) {\n /* istanbul ignore next */\n return false;\n }\n const currentValue = lastVersion.get(number);\n // If the version is >=, it means the value it's already in the set\n if (currentValue !== undefined && currentValue >= version) {\n return true;\n }\n lastVersion.set(number, version);\n return true;\n },\n /**\n * @returns the set with [number, version] of each value\n */\n has(n, v) {\n const currentValue = lastVersion.get(n);\n // If the version is >=, it means the value it's already in the set\n if (currentValue !== undefined && currentValue >= v) {\n return true;\n }\n return false;\n },\n /**\n * Warning: this function returns the reference to the internal map,\n * if you need to mutate some value, make a copy.\n * For optimization purpose the copy isn't made here.\n *\n * @returns the map of number to version\n */\n getMap() {\n return lastVersion;\n }\n };\n}\n", "import { createVersionGSet } from '../systems/crdt/gset';\n/**\n * @internal\n */\nexport const MAX_U16 = 0xffff;\nconst MASK_UPPER_16_ON_32 = 0xffff0000;\n/**\n * @internal\n */\nexport const AMOUNT_VERSION_AVAILABLE = MAX_U16 + 1;\n// This type matches with @dcl/crdt entity type.\n/**\n * @internal\n */\nexport const MAX_ENTITY_NUMBER = MAX_U16;\n/**\n * This first 512 entities are reserved by the renderer\n */\nexport const RESERVED_STATIC_ENTITIES = 512;\n/**\n * @public\n */\nexport var EntityUtils;\n(function (EntityUtils) {\n /**\n * @returns [entityNumber, entityVersion]\n */\n function fromEntityId(entityId) {\n return [(entityId & MAX_U16) >>> 0, (((entityId & MASK_UPPER_16_ON_32) >> 16) & MAX_U16) >>> 0];\n }\n EntityUtils.fromEntityId = fromEntityId;\n /**\n * @returns compound number from entityNumber and entityVerison\n */\n function toEntityId(entityNumber, entityVersion) {\n return (((entityNumber & MAX_U16) | ((entityVersion & MAX_U16) << 16)) >>> 0);\n }\n EntityUtils.toEntityId = toEntityId;\n})(EntityUtils || (EntityUtils = {}));\n/**\n * @public\n */\nexport var EntityState;\n(function (EntityState) {\n EntityState[EntityState[\"Unknown\"] = 0] = \"Unknown\";\n /**\n * The entity was generated and added to the usedEntities set\n */\n EntityState[EntityState[\"UsedEntity\"] = 1] = \"UsedEntity\";\n /**\n * The entity was removed from current engine or remotely\n */\n EntityState[EntityState[\"Removed\"] = 2] = \"Removed\";\n /**\n * The entity is reserved number.\n */\n EntityState[EntityState[\"Reserved\"] = 3] = \"Reserved\";\n})(EntityState || (EntityState = {}));\n/**\n * @public\n */\nexport function createEntityContainer(opts) {\n const reservedStaticEntities = opts?.reservedStaticEntities ?? RESERVED_STATIC_ENTITIES;\n // Local entities counter\n let entityCounter = reservedStaticEntities;\n const usedEntities = new Set();\n let toRemoveEntities = [];\n const removedEntities = createVersionGSet();\n function generateNewEntity() {\n if (entityCounter > MAX_ENTITY_NUMBER - 1) {\n throw new Error(`It fails trying to generate an entity out of range ${MAX_ENTITY_NUMBER}.`);\n }\n const entityNumber = entityCounter++;\n const entityVersion = removedEntities.getMap().has(entityNumber)\n ? removedEntities.getMap().get(entityNumber) + 1\n : 0;\n const entity = EntityUtils.toEntityId(entityNumber, entityVersion);\n if (usedEntities.has(entity)) {\n return generateNewEntity();\n }\n usedEntities.add(entity);\n return entity;\n }\n function generateEntity() {\n const usedSize = usedEntities.size;\n // If all entities until `entityCounter` are being used, we need to generate another one\n if (usedSize + reservedStaticEntities >= entityCounter) {\n return generateNewEntity();\n }\n for (const [number, version] of removedEntities.getMap()) {\n if (version < MAX_U16) {\n const entity = EntityUtils.toEntityId(number, version + 1);\n // If the entity is not being used, we can re-use it\n // If the entity was removed in this tick, we're not counting for the usedEntities, but we have it in the toRemoveEntityArray\n if (!usedEntities.has(entity) && !toRemoveEntities.includes(entity)) {\n usedEntities.add(entity);\n return entity;\n }\n }\n }\n return generateNewEntity();\n }\n function removeEntity(entity) {\n if (entity < reservedStaticEntities)\n return false;\n if (usedEntities.has(entity)) {\n usedEntities.delete(entity);\n toRemoveEntities.push(entity);\n }\n else {\n updateRemovedEntity(entity);\n }\n return true;\n }\n function releaseRemovedEntities() {\n const arr = toRemoveEntities;\n if (arr.length) {\n toRemoveEntities = [];\n for (const entity of arr) {\n const [n, v] = EntityUtils.fromEntityId(entity);\n removedEntities.addTo(n, v);\n }\n }\n return arr;\n }\n function updateRemovedEntity(entity) {\n const [n, v] = EntityUtils.fromEntityId(entity);\n // Update the removed entities map\n removedEntities.addTo(n, v);\n // Remove the usedEntities if exist\n for (let i = 0; i <= v; i++) {\n usedEntities.delete(EntityUtils.toEntityId(n, i));\n }\n return true;\n }\n function updateUsedEntity(entity) {\n const [n, v] = EntityUtils.fromEntityId(entity);\n // if the entity was removed then abort fast\n if (removedEntities.has(n, v))\n return false;\n // Update\n if (v > 0) {\n for (let i = 0; i <= v - 1; i++) {\n usedEntities.delete(EntityUtils.toEntityId(n, i));\n }\n removedEntities.addTo(n, v - 1);\n }\n usedEntities.add(entity);\n return true;\n }\n function getEntityState(entity) {\n const [n, v] = EntityUtils.fromEntityId(entity);\n if (n < reservedStaticEntities) {\n return EntityState.Reserved;\n }\n if (usedEntities.has(entity)) {\n return EntityState.UsedEntity;\n }\n const removedVersion = removedEntities.getMap().get(n);\n if (removedVersion !== undefined && removedVersion >= v) {\n return EntityState.Removed;\n }\n return EntityState.Unknown;\n }\n return {\n generateEntity,\n removeEntity,\n getExistingEntities() {\n return new Set(usedEntities);\n },\n getEntityState,\n releaseRemovedEntities,\n updateRemovedEntity,\n updateUsedEntity\n };\n}\n", "var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n};\nvar _ReadWriteByteBuffer_instances, _ReadWriteByteBuffer_woAdd, _ReadWriteByteBuffer_roAdd;\nimport * as utf8 from '@protobufjs/utf8';\n/**\n * Take the max between currentSize and intendedSize and then plus 1024. Then,\n * find the next nearer multiple of 1024.\n * @param currentSize - number\n * @param intendedSize - number\n * @returns the calculated number\n */\nfunction getNextSize(currentSize, intendedSize) {\n const minNewSize = Math.max(currentSize, intendedSize) + 1024;\n return Math.ceil(minNewSize / 1024) * 1024;\n}\nconst defaultInitialCapacity = 10240;\n/**\n * ByteBuffer is a wrapper of DataView which also adds a read and write offset.\n * Also in a write operation it resizes the buffer is being used if it needs.\n *\n * - Use read and write function to generate or consume data.\n * - Use set and get only if you are sure that you're doing.\n *\n * It always passes littleEndian param as true\n */\nexport class ReadWriteByteBuffer {\n /**\n * @param buffer - The initial buffer, provide a buffer if you need to set \"initial capacity\"\n * @param readingOffset - Set the cursor where begins to read. Default 0\n * @param writingOffset - Set the cursor to not start writing from the begin of it. Defaults to the buffer size\n */\n constructor(buffer, readingOffset, writingOffset) {\n _ReadWriteByteBuffer_instances.add(this);\n this._buffer = buffer || new Uint8Array(defaultInitialCapacity);\n this.view = new DataView(this._buffer.buffer, this._buffer.byteOffset);\n this.woffset = writingOffset ?? (buffer ? this._buffer.length : null) ?? 0;\n this.roffset = readingOffset ?? 0;\n }\n buffer() {\n return this._buffer;\n }\n bufferLength() {\n return this._buffer.length;\n }\n resetBuffer() {\n this.roffset = 0;\n this.woffset = 0;\n }\n currentReadOffset() {\n return this.roffset;\n }\n currentWriteOffset() {\n return this.woffset;\n }\n incrementReadOffset(amount) {\n return __classPrivateFieldGet(this, _ReadWriteByteBuffer_instances, \"m\", _ReadWriteByteBuffer_roAdd).call(this, amount);\n }\n remainingBytes() {\n return this.woffset - this.roffset;\n }\n readFloat32() {\n return this.view.getFloat32(__classPrivateFieldGet(this, _ReadWriteByteBuffer_instances, \"m\", _ReadWriteByteBuffer_roAdd).call(this, 4), true); // littleEndian = true\n }\n readFloat64() {\n return this.view.getFloat64(__classPrivateFieldGet(this, _ReadWriteByteBuffer_instances, \"m\", _ReadWriteByteBuffer_roAdd).call(this, 8), true); // littleEndian = true\n }\n readInt8() {\n return this.view.getInt8(__classPrivateFieldGet(this, _ReadWriteByteBuffer_instances, \"m\", _ReadWriteByteBuffer_roAdd).call(this, 1));\n }\n readInt16() {\n return this.view.getInt16(__classPrivateFieldGet(this, _ReadWriteByteBuffer_instances, \"m\", _ReadWriteByteBuffer_roAdd).call(this, 2), true); // littleEndian = true\n }\n readInt32() {\n return this.view.getInt32(__classPrivateFieldGet(this, _ReadWriteByteBuffer_instances, \"m\", _ReadWriteByteBuffer_roAdd).call(this, 4), true); // littleEndian = true\n }\n readInt64() {\n return this.view.getBigInt64(__classPrivateFieldGet(this, _ReadWriteByteBuffer_instances, \"m\", _ReadWriteByteBuffer_roAdd).call(this, 8), true); // littleEndian = true\n }\n readUint8() {\n return this.view.getUint8(__classPrivateFieldGet(this, _ReadWriteByteBuffer_instances, \"m\", _ReadWriteByteBuffer_roAdd).call(this, 1));\n }\n readUint16() {\n return this.view.getUint16(__classPrivateFieldGet(this, _ReadWriteByteBuffer_instances, \"m\", _ReadWriteByteBuffer_roAdd).call(this, 2), true); // littleEndian = true\n }\n readUint32() {\n return this.view.getUint32(__classPrivateFieldGet(this, _ReadWriteByteBuffer_instances, \"m\", _ReadWriteByteBuffer_roAdd).call(this, 4), true); // littleEndian = true\n }\n readUint64() {\n return this.view.getBigUint64(__classPrivateFieldGet(this, _ReadWriteByteBuffer_instances, \"m\", _ReadWriteByteBuffer_roAdd).call(this, 8), true); // littleEndian = true\n }\n readBuffer() {\n const length = this.view.getUint32(__classPrivateFieldGet(this, _ReadWriteByteBuffer_instances, \"m\", _ReadWriteByteBuffer_roAdd).call(this, 4), true); // littleEndian = true\n return this._buffer.subarray(__classPrivateFieldGet(this, _ReadWriteByteBuffer_instances, \"m\", _ReadWriteByteBuffer_roAdd).call(this, length), __classPrivateFieldGet(this, _ReadWriteByteBuffer_instances, \"m\", _ReadWriteByteBuffer_roAdd).call(this, 0));\n }\n readUtf8String() {\n const length = this.view.getUint32(__classPrivateFieldGet(this, _ReadWriteByteBuffer_instances, \"m\", _ReadWriteByteBuffer_roAdd).call(this, 4), true); // littleEndian = true\n return utf8.read(this._buffer, __classPrivateFieldGet(this, _ReadWriteByteBuffer_instances, \"m\", _ReadWriteByteBuffer_roAdd).call(this, length), __classPrivateFieldGet(this, _ReadWriteByteBuffer_instances, \"m\", _ReadWriteByteBuffer_roAdd).call(this, 0));\n }\n incrementWriteOffset(amount) {\n return __classPrivateFieldGet(this, _ReadWriteByteBuffer_instances, \"m\", _ReadWriteByteBuffer_woAdd).call(this, amount);\n }\n toBinary() {\n return this._buffer.subarray(0, this.woffset);\n }\n toCopiedBinary() {\n return new Uint8Array(this.toBinary());\n }\n writeBuffer(value, writeLength = true) {\n if (writeLength) {\n this.writeUint32(value.byteLength);\n }\n const o = __classPrivateFieldGet(this, _ReadWriteByteBuffer_instances, \"m\", _ReadWriteByteBuffer_woAdd).call(this, value.byteLength);\n this._buffer.set(value, o);\n }\n writeUtf8String(value, writeLength = true) {\n const byteLength = utf8.length(value);\n if (writeLength) {\n this.writeUint32(byteLength);\n }\n const o = __classPrivateFieldGet(this, _ReadWriteByteBuffer_instances, \"m\", _ReadWriteByteBuffer_woAdd).call(this, byteLength);\n utf8.write(value, this._buffer, o);\n }\n writeFloat32(value) {\n const o = __classPrivateFieldGet(this, _ReadWriteByteBuffer_instances, \"m\", _ReadWriteByteBuffer_woAdd).call(this, 4);\n this.view.setFloat32(o, value, true); // littleEndian = true\n }\n writeFloat64(value) {\n const o = __classPrivateFieldGet(this, _ReadWriteByteBuffer_instances, \"m\", _ReadWriteByteBuffer_woAdd).call(this, 8);\n this.view.setFloat64(o, value, true); // littleEndian = true\n }\n writeInt8(value) {\n const o = __classPrivateFieldGet(this, _ReadWriteByteBuffer_instances, \"m\", _ReadWriteByteBuffer_woAdd).call(this, 1);\n this.view.setInt8(o, value);\n }\n writeInt16(value) {\n const o = __classPrivateFieldGet(this, _ReadWriteByteBuffer_instances, \"m\", _ReadWriteByteBuffer_woAdd).call(this, 2);\n this.view.setInt16(o, value, true); // littleEndian = true\n }\n writeInt32(value) {\n const o = __classPrivateFieldGet(this, _ReadWriteByteBuffer_instances, \"m\", _ReadWriteByteBuffer_woAdd).call(this, 4);\n this.view.setInt32(o, value, true); // littleEndian = true\n }\n writeInt64(value) {\n const o = __classPrivateFieldGet(this, _ReadWriteByteBuffer_instances, \"m\", _ReadWriteByteBuffer_woAdd).call(this, 8);\n this.view.setBigInt64(o, value, true); // littleEndian = true\n }\n writeUint8(value) {\n const o = __classPrivateFieldGet(this, _ReadWriteByteBuffer_instances, \"m\", _ReadWriteByteBuffer_woAdd).call(this, 1);\n this.view.setUint8(o, value);\n }\n writeUint16(value) {\n const o = __classPrivateFieldGet(this, _ReadWriteByteBuffer_instances, \"m\", _ReadWriteByteBuffer_woAdd).call(this, 2);\n this.view.setUint16(o, value, true); // littleEndian = true\n }\n writeUint32(value) {\n const o = __classPrivateFieldGet(this, _ReadWriteByteBuffer_instances, \"m\", _ReadWriteByteBuffer_woAdd).call(this, 4);\n this.view.setUint32(o, value, true); // littleEndian = true\n }\n writeUint64(value) {\n const o = __classPrivateFieldGet(this, _ReadWriteByteBuffer_instances, \"m\", _ReadWriteByteBuffer_woAdd).call(this, 8);\n this.view.setBigUint64(o, value, true); // littleEndian = true\n }\n // DataView Proxy\n getFloat32(offset) {\n return this.view.getFloat32(offset, true); // littleEndian = true\n }\n getFloat64(offset) {\n return this.view.getFloat64(offset, true); // littleEndian = true\n }\n getInt8(offset) {\n return this.view.getInt8(offset);\n }\n getInt16(offset) {\n return this.view.getInt16(offset, true); // littleEndian = true\n }\n getInt32(offset) {\n return this.view.getInt32(offset, true); // littleEndian = true\n }\n getInt64(offset) {\n return this.view.getBigInt64(offset, true); // littleEndian = true\n }\n getUint8(offset) {\n return this.view.getUint8(offset);\n }\n getUint16(offset) {\n return this.view.getUint16(offset, true); // littleEndian = true\n }\n getUint32(offset) {\n return this.view.getUint32(offset, true); // littleEndian = true >>> 0\n }\n getUint64(offset) {\n return this.view.getBigUint64(offset, true); // littleEndian = true\n }\n setFloat32(offset, value) {\n this.view.setFloat32(offset, value, true); // littleEndian = true\n }\n setFloat64(offset, value) {\n this.view.setFloat64(offset, value, true); // littleEndian = true\n }\n setInt8(offset, value) {\n this.view.setInt8(offset, value);\n }\n setInt16(offset, value) {\n this.view.setInt16(offset, value, true); // littleEndian = true\n }\n setInt32(offset, value) {\n this.view.setInt32(offset, value, true); // littleEndian = true\n }\n setInt64(offset, value) {\n this.view.setBigInt64(offset, value, true); // littleEndian = true\n }\n setUint8(offset, value) {\n this.view.setUint8(offset, value);\n }\n setUint16(offset, value) {\n this.view.setUint16(offset, value, true); // littleEndian = true\n }\n setUint32(offset, value) {\n this.view.setUint32(offset, value, true); // littleEndian = true\n }\n setUint64(offset, value) {\n this.view.setBigUint64(offset, value, true); // littleEndian = true\n }\n}\n_ReadWriteByteBuffer_instances = new WeakSet(), _ReadWriteByteBuffer_woAdd = function _ReadWriteByteBuffer_woAdd(amount) {\n if (this.woffset + amount > this._buffer.byteLength) {\n const newsize = getNextSize(this._buffer.byteLength, this.woffset + amount);\n const newBuffer = new Uint8Array(newsize);\n newBuffer.set(this._buffer);\n const oldOffset = this._buffer.byteOffset;\n this._buffer = newBuffer;\n this.view = new DataView(this._buffer.buffer, oldOffset);\n }\n this.woffset += amount;\n return this.woffset - amount;\n}, _ReadWriteByteBuffer_roAdd = function _ReadWriteByteBuffer_roAdd(amount) {\n if (this.roffset + amount > this.woffset) {\n throw new Error('Outside of the bounds of writen data.');\n }\n this.roffset += amount;\n return this.roffset - amount;\n};\n", "/**\n * @public\n */\nexport var CrdtMessageType;\n(function (CrdtMessageType) {\n CrdtMessageType[CrdtMessageType[\"RESERVED\"] = 0] = \"RESERVED\";\n // Component Operation\n CrdtMessageType[CrdtMessageType[\"PUT_COMPONENT\"] = 1] = \"PUT_COMPONENT\";\n CrdtMessageType[CrdtMessageType[\"DELETE_COMPONENT\"] = 2] = \"DELETE_COMPONENT\";\n CrdtMessageType[CrdtMessageType[\"DELETE_ENTITY\"] = 3] = \"DELETE_ENTITY\";\n CrdtMessageType[CrdtMessageType[\"APPEND_VALUE\"] = 4] = \"APPEND_VALUE\";\n // Network operations\n CrdtMessageType[CrdtMessageType[\"PUT_COMPONENT_NETWORK\"] = 5] = \"PUT_COMPONENT_NETWORK\";\n CrdtMessageType[CrdtMessageType[\"DELETE_COMPONENT_NETWORK\"] = 6] = \"DELETE_COMPONENT_NETWORK\";\n CrdtMessageType[CrdtMessageType[\"DELETE_ENTITY_NETWORK\"] = 7] = \"DELETE_ENTITY_NETWORK\";\n CrdtMessageType[CrdtMessageType[\"MAX_MESSAGE_TYPE\"] = 8] = \"MAX_MESSAGE_TYPE\";\n})(CrdtMessageType || (CrdtMessageType = {}));\n/**\n * @public\n */\nexport const CRDT_MESSAGE_HEADER_LENGTH = 8;\nexport var ProcessMessageResultType;\n(function (ProcessMessageResultType) {\n /**\n * Typical message and new state set.\n * @state CHANGE\n * @reason Incoming message has a timestamp greater\n */\n ProcessMessageResultType[ProcessMessageResultType[\"StateUpdatedTimestamp\"] = 1] = \"StateUpdatedTimestamp\";\n /**\n * Typical message when it is considered old.\n * @state it does NOT CHANGE.\n * @reason incoming message has a timestamp lower.\n */\n ProcessMessageResultType[ProcessMessageResultType[\"StateOutdatedTimestamp\"] = 2] = \"StateOutdatedTimestamp\";\n /**\n * Weird message, same timestamp and data.\n * @state it does NOT CHANGE.\n * @reason consistent state between peers.\n */\n ProcessMessageResultType[ProcessMessageResultType[\"NoChanges\"] = 3] = \"NoChanges\";\n /**\n * Less but typical message, same timestamp, resolution by data.\n * @state it does NOT CHANGE.\n * @reason incoming message has a LOWER data.\n */\n ProcessMessageResultType[ProcessMessageResultType[\"StateOutdatedData\"] = 4] = \"StateOutdatedData\";\n /**\n * Less but typical message, same timestamp, resolution by data.\n * @state CHANGE.\n * @reason incoming message has a GREATER data.\n */\n ProcessMessageResultType[ProcessMessageResultType[\"StateUpdatedData\"] = 5] = \"StateUpdatedData\";\n /**\n * Entity was previously deleted.\n * @state it does NOT CHANGE.\n * @reason The message is considered old.\n */\n ProcessMessageResultType[ProcessMessageResultType[\"EntityWasDeleted\"] = 6] = \"EntityWasDeleted\";\n /**\n * Entity should be deleted.\n * @state CHANGE.\n * @reason the state is storing old entities\n */\n ProcessMessageResultType[ProcessMessageResultType[\"EntityDeleted\"] = 7] = \"EntityDeleted\";\n})(ProcessMessageResultType || (ProcessMessageResultType = {}));\n// we receive LWW, v=6, we have v=5 => we receive with delay the deleteEntity(v=5)\n// => we should generate the deleteEntity message effects internally with deleteEntity(v=5),\n// but don't resend the deleteEntity\n// - (CRDT) addDeletedEntitySet v=5 (with crdt state cleaning) and then LWW v=6\n// - (engine) engine.deleteEntity v=5\n// we receive LWW, v=7, we have v=5 => we receive with delay the deleteEntity(v=5), deleteEntity(v=6), ..., N\n// => we should generate the deleteEntity message effects internally with deleteEntity(v=5),\n// but don't resend the deleteEntity\n// - (CRDT) addDeletedEntitySet v=5 (with crdt state cleaning) and then LWW v=6\n// - (engine) engine.deleteEntity v=5\n// msg delete entity: it only should be sent by deleter\n//\n", "import { CRDT_MESSAGE_HEADER_LENGTH } from './types';\n/**\n * @public\n */\nexport var CrdtMessageProtocol;\n(function (CrdtMessageProtocol) {\n /**\n * Validate if the message incoming is completed\n * @param buf - ByteBuffer\n */\n function validate(buf) {\n const rem = buf.remainingBytes();\n if (rem < CRDT_MESSAGE_HEADER_LENGTH) {\n return false;\n }\n const messageLength = buf.getUint32(buf.currentReadOffset());\n if (rem < messageLength) {\n return false;\n }\n return true;\n }\n CrdtMessageProtocol.validate = validate;\n /**\n * Get the current header, consuming the bytes involved.\n * @param buf - ByteBuffer\n * @returns header or null if there is no validated message\n */\n function readHeader(buf) {\n if (!validate(buf)) {\n return null;\n }\n return {\n length: buf.readUint32(),\n type: buf.readUint32()\n };\n }\n CrdtMessageProtocol.readHeader = readHeader;\n /**\n * Get the current header, without consuming the bytes involved.\n * @param buf - ByteBuffer\n * @returns header or null if there is no validated message\n */\n function getHeader(buf) {\n if (!validate(buf)) {\n return null;\n }\n const currentOffset = buf.currentReadOffset();\n return {\n length: buf.getUint32(currentOffset),\n type: buf.getUint32(currentOffset + 4)\n };\n }\n CrdtMessageProtocol.getHeader = getHeader;\n /**\n * Consume the incoming message without processing it.\n * @param buf - ByteBuffer\n * @returns true in case of success or false if there is no valid message.\n */\n function consumeMessage(buf) {\n const header = getHeader(buf);\n if (!header) {\n return false;\n }\n buf.incrementReadOffset(header.length);\n return true;\n }\n CrdtMessageProtocol.consumeMessage = consumeMessage;\n})(CrdtMessageProtocol || (CrdtMessageProtocol = {}));\n", "import { CrdtMessageProtocol } from './crdtMessageProtocol';\nimport { CrdtMessageType, CRDT_MESSAGE_HEADER_LENGTH } from './types';\n/**\n * @public\n */\nexport var DeleteComponent;\n(function (DeleteComponent) {\n DeleteComponent.MESSAGE_HEADER_LENGTH = 12;\n /**\n * Write DeleteComponent message\n */\n function write(entity, componentId, timestamp, buf) {\n // reserve the beginning\n const messageLength = CRDT_MESSAGE_HEADER_LENGTH + DeleteComponent.MESSAGE_HEADER_LENGTH;\n const startMessageOffset = buf.incrementWriteOffset(messageLength);\n // Write CrdtMessage header\n buf.setUint32(startMessageOffset, messageLength);\n buf.setUint32(startMessageOffset + 4, CrdtMessageType.DELETE_COMPONENT);\n // Write ComponentOperation header\n buf.setUint32(startMessageOffset + 8, entity);\n buf.setUint32(startMessageOffset + 12, componentId);\n buf.setUint32(startMessageOffset + 16, timestamp);\n }\n DeleteComponent.write = write;\n function read(buf) {\n const header = CrdtMessageProtocol.readHeader(buf);\n if (!header) {\n return null;\n }\n if (header.type !== CrdtMessageType.DELETE_COMPONENT) {\n throw new Error('DeleteComponentOperation tried to read another message type.');\n }\n const msg = {\n ...header,\n entityId: buf.readUint32(),\n componentId: buf.readUint32(),\n timestamp: buf.readUint32()\n };\n return msg;\n }\n DeleteComponent.read = read;\n})(DeleteComponent || (DeleteComponent = {}));\n", "import { CrdtMessageProtocol } from './crdtMessageProtocol';\nimport { CrdtMessageType, CRDT_MESSAGE_HEADER_LENGTH } from './types';\n/**\n * @public\n */\nexport var AppendValueOperation;\n(function (AppendValueOperation) {\n AppendValueOperation.MESSAGE_HEADER_LENGTH = 16;\n /**\n * Call this function for an optimal writing data passing the ByteBuffer\n * already allocated\n */\n function write(entity, timestamp, componentId, data, buf) {\n // reserve the beginning\n const startMessageOffset = buf.incrementWriteOffset(CRDT_MESSAGE_HEADER_LENGTH + AppendValueOperation.MESSAGE_HEADER_LENGTH);\n // write body\n buf.writeBuffer(data, false);\n const messageLength = buf.currentWriteOffset() - startMessageOffset;\n // Write CrdtMessage header\n buf.setUint32(startMessageOffset, messageLength);\n buf.setUint32(startMessageOffset + 4, CrdtMessageType.APPEND_VALUE);\n // Write ComponentOperation header\n buf.setUint32(startMessageOffset + 8, entity);\n buf.setUint32(startMessageOffset + 12, componentId);\n buf.setUint32(startMessageOffset + 16, timestamp);\n const newLocal = messageLength - AppendValueOperation.MESSAGE_HEADER_LENGTH - CRDT_MESSAGE_HEADER_LENGTH;\n buf.setUint32(startMessageOffset + 20, newLocal);\n }\n AppendValueOperation.write = write;\n function read(buf) {\n const header = CrdtMessageProtocol.readHeader(buf);\n /* istanbul ignore if */\n if (!header) {\n return null;\n }\n /* istanbul ignore if */\n if (header.type !== CrdtMessageType.APPEND_VALUE) {\n throw new Error('AppendValueOperation tried to read another message type.');\n }\n return {\n ...header,\n entityId: buf.readUint32(),\n componentId: buf.readUint32(),\n timestamp: buf.readUint32(),\n data: buf.readBuffer()\n };\n }\n AppendValueOperation.read = read;\n})(AppendValueOperation || (AppendValueOperation = {}));\n", "import { CrdtMessageProtocol } from './crdtMessageProtocol';\nimport { CrdtMessageType, CRDT_MESSAGE_HEADER_LENGTH } from './types';\n/**\n * @public\n */\nexport var DeleteEntity;\n(function (DeleteEntity) {\n DeleteEntity.MESSAGE_HEADER_LENGTH = 4;\n function write(entity, buf) {\n // Write CrdtMessage header\n buf.writeUint32(CRDT_MESSAGE_HEADER_LENGTH + 4);\n buf.writeUint32(CrdtMessageType.DELETE_ENTITY);\n // body\n buf.writeUint32(entity);\n }\n DeleteEntity.write = write;\n function read(buf) {\n const header = CrdtMessageProtocol.readHeader(buf);\n if (!header) {\n return null;\n }\n if (header.type !== CrdtMessageType.DELETE_ENTITY) {\n throw new Error('DeleteEntity tried to read another message type.');\n }\n return {\n ...header,\n entityId: buf.readUint32()\n };\n }\n DeleteEntity.read = read;\n})(DeleteEntity || (DeleteEntity = {}));\n", "import { CrdtMessageProtocol } from './crdtMessageProtocol';\nimport { CrdtMessageType, CRDT_MESSAGE_HEADER_LENGTH } from './types';\n/**\n * @public\n */\nexport var PutComponentOperation;\n(function (PutComponentOperation) {\n PutComponentOperation.MESSAGE_HEADER_LENGTH = 16;\n /**\n * Call this function for an optimal writing data passing the ByteBuffer\n * already allocated\n */\n function write(entity, timestamp, componentId, data, buf) {\n // reserve the beginning\n const startMessageOffset = buf.incrementWriteOffset(CRDT_MESSAGE_HEADER_LENGTH + PutComponentOperation.MESSAGE_HEADER_LENGTH);\n // write body\n buf.writeBuffer(data, false);\n const messageLength = buf.currentWriteOffset() - startMessageOffset;\n // Write CrdtMessage header\n buf.setUint32(startMessageOffset, messageLength);\n buf.setUint32(startMessageOffset + 4, CrdtMessageType.PUT_COMPONENT);\n // Write ComponentOperation header\n buf.setUint32(startMessageOffset + 8, entity);\n buf.setUint32(startMessageOffset + 12, componentId);\n buf.setUint32(startMessageOffset + 16, timestamp);\n const newLocal = messageLength - PutComponentOperation.MESSAGE_HEADER_LENGTH - CRDT_MESSAGE_HEADER_LENGTH;\n buf.setUint32(startMessageOffset + 20, newLocal);\n }\n PutComponentOperation.write = write;\n function read(buf) {\n const header = CrdtMessageProtocol.readHeader(buf);\n if (!header) {\n return null;\n }\n if (header.type !== CrdtMessageType.PUT_COMPONENT) {\n throw new Error('PutComponentOperation tried to read another message type.');\n }\n return {\n ...header,\n entityId: buf.readUint32(),\n componentId: buf.readUint32(),\n timestamp: buf.readUint32(),\n data: buf.readBuffer()\n };\n }\n PutComponentOperation.read = read;\n})(PutComponentOperation || (PutComponentOperation = {}));\n", "import { CrdtMessageProtocol } from '../crdtMessageProtocol';\nimport { CrdtMessageType, CRDT_MESSAGE_HEADER_LENGTH } from '../types';\n/**\n * @public\n */\nexport var PutNetworkComponentOperation;\n(function (PutNetworkComponentOperation) {\n PutNetworkComponentOperation.MESSAGE_HEADER_LENGTH = 20;\n /**\n * Call this function for an optimal writing data passing the ByteBuffer\n * already allocated\n */\n function write(entity, timestamp, componentId, networkId, data, buf) {\n // reserve the beginning\n const startMessageOffset = buf.incrementWriteOffset(CRDT_MESSAGE_HEADER_LENGTH + PutNetworkComponentOperation.MESSAGE_HEADER_LENGTH);\n // write body\n buf.writeBuffer(data, false);\n const messageLength = buf.currentWriteOffset() - startMessageOffset;\n // Write CrdtMessage header\n buf.setUint32(startMessageOffset, messageLength);\n buf.setUint32(startMessageOffset + 4, CrdtMessageType.PUT_COMPONENT_NETWORK);\n // Write ComponentOperation header\n buf.setUint32(startMessageOffset + 8, entity);\n buf.setUint32(startMessageOffset + 12, componentId);\n buf.setUint32(startMessageOffset + 16, timestamp);\n buf.setUint32(startMessageOffset + 20, networkId);\n const dataLength = messageLength - PutNetworkComponentOperation.MESSAGE_HEADER_LENGTH - CRDT_MESSAGE_HEADER_LENGTH;\n buf.setUint32(startMessageOffset + 24, dataLength);\n }\n PutNetworkComponentOperation.write = write;\n function read(buf) {\n const header = CrdtMessageProtocol.readHeader(buf);\n if (!header) {\n return null;\n }\n if (header.type !== CrdtMessageType.PUT_COMPONENT_NETWORK) {\n throw new Error('PutComponentNetworkOperation tried to read another message type.');\n }\n return {\n ...header,\n entityId: buf.readUint32(),\n componentId: buf.readUint32(),\n timestamp: buf.readUint32(),\n networkId: buf.readUint32(),\n data: buf.readBuffer()\n };\n }\n PutNetworkComponentOperation.read = read;\n})(PutNetworkComponentOperation || (PutNetworkComponentOperation = {}));\n", "import { CrdtMessageProtocol } from '../crdtMessageProtocol';\nimport { CrdtMessageType, CRDT_MESSAGE_HEADER_LENGTH } from '../types';\n/**\n * @public\n */\nexport var DeleteComponentNetwork;\n(function (DeleteComponentNetwork) {\n DeleteComponentNetwork.MESSAGE_HEADER_LENGTH = 16;\n /**\n * Write DeleteComponent message\n */\n function write(entity, componentId, timestamp, networkId, buf) {\n // reserve the beginning\n const messageLength = CRDT_MESSAGE_HEADER_LENGTH + DeleteComponentNetwork.MESSAGE_HEADER_LENGTH;\n const startMessageOffset = buf.incrementWriteOffset(messageLength);\n // Write CrdtMessage header\n buf.setUint32(startMessageOffset, messageLength);\n buf.setUint32(startMessageOffset + 4, CrdtMessageType.DELETE_COMPONENT_NETWORK);\n // Write ComponentOperation header\n buf.setUint32(startMessageOffset + 8, entity);\n buf.setUint32(startMessageOffset + 12, componentId);\n buf.setUint32(startMessageOffset + 16, timestamp);\n buf.setUint32(startMessageOffset + 20, networkId);\n }\n DeleteComponentNetwork.write = write;\n function read(buf) {\n const header = CrdtMessageProtocol.readHeader(buf);\n if (!header) {\n return null;\n }\n if (header.type !== CrdtMessageType.DELETE_COMPONENT_NETWORK) {\n throw new Error('DeleteComponentOperation tried to read another message type.');\n }\n return {\n ...header,\n entityId: buf.readUint32(),\n componentId: buf.readUint32(),\n timestamp: buf.readUint32(),\n networkId: buf.readUint32()\n };\n }\n DeleteComponentNetwork.read = read;\n})(DeleteComponentNetwork || (DeleteComponentNetwork = {}));\n", "import { CrdtMessageProtocol } from '../crdtMessageProtocol';\nimport { CrdtMessageType, CRDT_MESSAGE_HEADER_LENGTH } from '../types';\n/**\n * @public\n */\nexport var DeleteEntityNetwork;\n(function (DeleteEntityNetwork) {\n DeleteEntityNetwork.MESSAGE_HEADER_LENGTH = 8;\n function write(entity, networkId, buf) {\n // Write CrdtMessage header\n buf.writeUint32(CRDT_MESSAGE_HEADER_LENGTH + 4);\n buf.writeUint32(CrdtMessageType.DELETE_ENTITY_NETWORK);\n // body\n buf.writeUint32(entity);\n buf.writeUint32(networkId);\n }\n DeleteEntityNetwork.write = write;\n function read(buf) {\n const header = CrdtMessageProtocol.readHeader(buf);\n if (!header) {\n return null;\n }\n if (header.type !== CrdtMessageType.DELETE_ENTITY_NETWORK) {\n throw new Error('DeleteEntityNetwork tried to read another message type.');\n }\n return {\n ...header,\n entityId: buf.readUint32(),\n networkId: buf.readUint32()\n };\n }\n DeleteEntityNetwork.read = read;\n})(DeleteEntityNetwork || (DeleteEntityNetwork = {}));\n", "import { ReadWriteByteBuffer } from '../../ByteBuffer';\nimport { PutComponentOperation } from '../putComponent';\nimport { CrdtMessageType } from '../types';\nimport { DeleteComponent } from '../deleteComponent';\nimport { DeleteEntity } from '../deleteEntity';\nimport { PutNetworkComponentOperation } from './putComponentNetwork';\nimport { DeleteComponentNetwork } from './deleteComponentNetwork';\nimport { DeleteEntityNetwork } from './deleteEntityNetwork';\nimport { TransformSchema } from '../../../components/manual/Transform';\n/* istanbul ignore next */\nexport function isNetworkMessage(message) {\n return [\n CrdtMessageType.DELETE_COMPONENT_NETWORK,\n CrdtMessageType.DELETE_ENTITY_NETWORK,\n CrdtMessageType.PUT_COMPONENT_NETWORK\n ].includes(message.type);\n}\n/* istanbul ignore next */\nexport function networkMessageToLocal(message, localEntityId, buffer, destinationBuffer) {\n const offset = buffer.currentWriteOffset();\n if (message.type === CrdtMessageType.PUT_COMPONENT_NETWORK) {\n PutComponentOperation.write(localEntityId, message.timestamp, message.componentId, message.data, buffer);\n }\n else if (message.type === CrdtMessageType.DELETE_COMPONENT_NETWORK) {\n DeleteComponent.write(localEntityId, message.componentId, message.timestamp, buffer);\n }\n else if (message.type === CrdtMessageType.DELETE_ENTITY_NETWORK) {\n DeleteEntity.write(localEntityId, buffer);\n }\n destinationBuffer.writeBuffer(buffer.buffer().subarray(offset, buffer.currentWriteOffset()), false);\n}\n/* istanbul ignore next */\nexport function localMessageToNetwork(message, network, buffer, destinationBuffer) {\n const offset = buffer.currentWriteOffset();\n if (message.type === CrdtMessageType.PUT_COMPONENT) {\n PutNetworkComponentOperation.write(network.entityId, message.timestamp, message.componentId, network.networkId, message.data, buffer);\n }\n else if (message.type === CrdtMessageType.DELETE_COMPONENT) {\n DeleteComponentNetwork.write(network.entityId, message.componentId, message.timestamp, network.networkId, buffer);\n }\n else if (message.type === CrdtMessageType.DELETE_ENTITY) {\n DeleteEntityNetwork.write(network.entityId, network.networkId, buffer);\n }\n destinationBuffer.writeBuffer(buffer.buffer().subarray(offset, buffer.currentWriteOffset()), false);\n}\nconst buffer = new ReadWriteByteBuffer();\n/* istanbul ignore next */\nexport function fixTransformParent(message, transformValue, parent) {\n buffer.resetBuffer();\n let transform = transformValue;\n if (!transform && 'data' in message) {\n transform = TransformSchema.deserialize(new ReadWriteByteBuffer(message.data));\n }\n if (!transform)\n throw new Error('Invalid parent transform');\n // Generate new transform raw data with the parent\n const newTransform = { ...transform, parent };\n TransformSchema.serialize(newTransform, buffer);\n return buffer.toBinary();\n}\n", "import { EntityState } from '../../engine/entity';\nimport { ReadWriteByteBuffer } from '../../serialization/ByteBuffer';\nimport { AppendValueOperation, CrdtMessageProtocol, DeleteComponentNetwork, DeleteEntityNetwork } from '../../serialization/crdt';\nimport { DeleteComponent } from '../../serialization/crdt/deleteComponent';\nimport { DeleteEntity } from '../../serialization/crdt/deleteEntity';\nimport { PutComponentOperation } from '../../serialization/crdt/putComponent';\nimport { CrdtMessageType } from '../../serialization/crdt/types';\nimport { PutNetworkComponentOperation } from '../../serialization/crdt/network/putComponentNetwork';\nimport { NetworkEntity as defineNetworkEntity, NetworkParent as defineNetworkParent, Transform as defineTransform } from '../../components';\nimport * as networkUtils from '../../serialization/crdt/network/utils';\n// NetworkMessages can only have a MAX_SIZE of 12kb. So we need to send it in chunks.\nexport const LIVEKIT_MAX_SIZE = 12;\n/**\n * @internal\n */\nexport function crdtSceneSystem(engine, onProcessEntityComponentChange) {\n const transports = [];\n // Components that we used on this system\n const NetworkEntity = defineNetworkEntity(engine);\n const NetworkParent = defineNetworkParent(engine);\n const Transform = defineTransform(engine);\n // Messages that we received at transport.onMessage waiting to be processed\n const receivedMessages = [];\n // Messages already processed by the engine but that we need to broadcast to other transports.\n const broadcastMessages = [];\n /**\n *\n * @param transportId tranport id to identiy messages\n * @returns a function to process received messages\n */\n function parseChunkMessage(transportId) {\n /**\n * Receives a chunk of binary messages and stores all the valid\n * Component Operation Messages at messages queue\n * @param chunkMessage A chunk of binary messages\n */\n return function parseChunkMessage(chunkMessage) {\n const buffer = new ReadWriteByteBuffer(chunkMessage);\n let header;\n while ((header = CrdtMessageProtocol.getHeader(buffer))) {\n const offset = buffer.currentReadOffset();\n let message = undefined;\n if (header.type === CrdtMessageType.DELETE_COMPONENT) {\n message = DeleteComponent.read(buffer);\n }\n else if (header.type === CrdtMessageType.DELETE_COMPONENT_NETWORK) {\n message = DeleteComponentNetwork.read(buffer);\n }\n else if (header.type === CrdtMessageType.PUT_COMPONENT) {\n message = PutComponentOperation.read(buffer);\n }\n else if (header.type === CrdtMessageType.PUT_COMPONENT_NETWORK) {\n message = PutNetworkComponentOperation.read(buffer);\n }\n else if (header.type === CrdtMessageType.DELETE_ENTITY) {\n message = DeleteEntity.read(buffer);\n }\n else if (header.type === CrdtMessageType.DELETE_ENTITY_NETWORK) {\n message = DeleteEntityNetwork.read(buffer);\n }\n else if (header.type === CrdtMessageType.APPEND_VALUE) {\n message = AppendValueOperation.read(buffer);\n // Unknown message, we skip it\n }\n else {\n // consume the message\n buffer.incrementReadOffset(header.length);\n }\n if (message) {\n receivedMessages.push({\n ...message,\n transportId,\n messageBuffer: buffer.buffer().subarray(offset, buffer.currentReadOffset())\n });\n }\n }\n };\n }\n /**\n * Return and clear the messaes queue\n * @returns messages recieved by the transport to process on the next tick\n */\n function getMessages(value) {\n const messagesToProcess = value.splice(0, value.length);\n return messagesToProcess;\n }\n /**\n * Find the local entityId associated to the network component message.\n * It's a mapping Network -> to Local\n * If it's not a network message, return the entityId received by the message\n */\n function findNetworkId(msg) {\n const hasNetworkId = 'networkId' in msg;\n if (hasNetworkId) {\n for (const [entityId, network] of engine.getEntitiesWith(NetworkEntity)) {\n if (network.networkId === msg.networkId && network.entityId === msg.entityId) {\n return { entityId, network };\n }\n }\n }\n return { entityId: msg.entityId };\n }\n /**\n * This fn will be called on every tick.\n * Process all the messages queue received by the transport\n */\n async function receiveMessages() {\n const messagesToProcess = getMessages(receivedMessages);\n const entitiesShouldBeCleaned = [];\n for (const msg of messagesToProcess) {\n let { entityId, network } = findNetworkId(msg);\n // We receive a new Entity. Create the localEntity and map it to the NetworkEntity component\n if (networkUtils.isNetworkMessage(msg) && !network) {\n entityId = engine.addEntity();\n network = { entityId: msg.entityId, networkId: msg.networkId };\n NetworkEntity.createOrReplace(entityId, network);\n }\n if (msg.type === CrdtMessageType.DELETE_ENTITY || msg.type === CrdtMessageType.DELETE_ENTITY_NETWORK) {\n entitiesShouldBeCleaned.push(entityId);\n broadcastMessages.push(msg);\n }\n else {\n const entityState = engine.entityContainer.getEntityState(entityId);\n // Skip updates from removed entityes\n if (entityState === EntityState.Removed)\n continue;\n // Entities with unknown entities should update its entity state\n if (entityState === EntityState.Unknown) {\n engine.entityContainer.updateUsedEntity(entityId);\n }\n const component = engine.getComponentOrNull(msg.componentId);\n /* istanbul ignore else */\n if (component) {\n if (msg.type === CrdtMessageType.PUT_COMPONENT &&\n component.componentId === Transform.componentId &&\n NetworkEntity.has(entityId) &&\n NetworkParent.has(entityId)) {\n msg.data = networkUtils.fixTransformParent(msg);\n }\n const [conflictMessage, value] = component.updateFromCrdt({ ...msg, entityId });\n if (!conflictMessage) {\n // Add message to transport queue to be processed by others transports\n broadcastMessages.push(msg);\n onProcessEntityComponentChange && onProcessEntityComponentChange(entityId, msg.type, component, value);\n }\n }\n else {\n // TODO: test this line, it is fundammental to make the editor work\n broadcastMessages.push(msg);\n }\n }\n }\n // the last stage of the syncrhonization is to delete the entities\n for (const entity of entitiesShouldBeCleaned) {\n for (const definition of engine.componentsIter()) {\n // TODO: check this with pato/pravus\n definition.entityDeleted(entity, true);\n }\n engine.entityContainer.updateRemovedEntity(entity);\n onProcessEntityComponentChange && onProcessEntityComponentChange(entity, CrdtMessageType.DELETE_ENTITY);\n }\n }\n /**\n * Iterates the dirty map and generates crdt messages to be send\n */\n async function sendMessages(entitiesDeletedThisTick) {\n // CRDT Messages will be the merge between the recieved transport messages and the new crdt messages\n const crdtMessages = getMessages(broadcastMessages);\n const buffer = new ReadWriteByteBuffer();\n for (const component of engine.componentsIter()) {\n for (const message of component.getCrdtUpdates()) {\n const offset = buffer.currentWriteOffset();\n // Avoid creating messages if there is no transport that will handle it\n if (transports.some((t) => t.filter(message))) {\n if (message.type === CrdtMessageType.PUT_COMPONENT) {\n PutComponentOperation.write(message.entityId, message.timestamp, message.componentId, message.data, buffer);\n }\n else if (message.type === CrdtMessageType.DELETE_COMPONENT) {\n DeleteComponent.write(message.entityId, component.componentId, message.timestamp, buffer);\n }\n else if (message.type === CrdtMessageType.APPEND_VALUE) {\n AppendValueOperation.write(message.entityId, message.timestamp, message.componentId, message.data, buffer);\n }\n crdtMessages.push({\n ...message,\n messageBuffer: buffer.buffer().subarray(offset, buffer.currentWriteOffset())\n });\n }\n if (onProcessEntityComponentChange) {\n const rawValue = message.type === CrdtMessageType.PUT_COMPONENT || message.type === CrdtMessageType.APPEND_VALUE\n ? component.get(message.entityId)\n : undefined;\n onProcessEntityComponentChange(message.entityId, message.type, component, rawValue);\n }\n }\n }\n // After all updates, I execute the DeletedEntity messages\n for (const entityId of entitiesDeletedThisTick) {\n const offset = buffer.currentWriteOffset();\n DeleteEntity.write(entityId, buffer);\n crdtMessages.push({\n type: CrdtMessageType.DELETE_ENTITY,\n entityId,\n messageBuffer: buffer.buffer().subarray(offset, buffer.currentWriteOffset())\n });\n onProcessEntityComponentChange && onProcessEntityComponentChange(entityId, CrdtMessageType.DELETE_ENTITY);\n }\n // Send CRDT messages to transports\n const transportBuffer = new ReadWriteByteBuffer();\n for (const index in transports) {\n const __NetworkMessagesBuffer = [];\n const transportIndex = Number(index);\n const transport = transports[transportIndex];\n const isRendererTransport = transport.type === 'renderer';\n const isNetworkTransport = transport.type === 'network';\n // Reset Buffer for each Transport\n transportBuffer.resetBuffer();\n const buffer = new ReadWriteByteBuffer();\n // Then we send all the new crdtMessages that the transport needs to process\n for (const message of crdtMessages) {\n // Check if adding this message would exceed the size limit\n const currentBufferSize = transportBuffer.toBinary().byteLength;\n const messageSize = message.messageBuffer.byteLength;\n if (isNetworkTransport && (currentBufferSize + messageSize) / 1024 > LIVEKIT_MAX_SIZE) {\n // If the current buffer has content, save it as a chunk\n if (currentBufferSize > 0) {\n __NetworkMessagesBuffer.push(transportBuffer.toCopiedBinary());\n transportBuffer.resetBuffer();\n }\n // If the message itself is larger than the limit, we need to handle it specially\n // For now, we'll skip it to prevent infinite loops\n if (messageSize / 1024 > LIVEKIT_MAX_SIZE) {\n console.error(`Message too large (${messageSize} bytes), skipping message for entity ${message.entityId}`);\n continue;\n }\n }\n // Avoid echo messages\n if (message.transportId === transportIndex)\n continue;\n // Redundant message for the transport\n if (!transport.filter(message))\n continue;\n const { entityId } = findNetworkId(message);\n const transformNeedsFix = 'componentId' in message &&\n message.componentId === Transform.componentId &&\n Transform.has(entityId) &&\n NetworkParent.has(entityId) &&\n NetworkEntity.has(entityId);\n // If there was a LOCAL change in the transform. Add the parent to that transform\n if (isRendererTransport && message.type === CrdtMessageType.PUT_COMPONENT && transformNeedsFix) {\n const parent = findNetworkId(NetworkParent.get(entityId));\n const transformData = networkUtils.fixTransformParent(message, Transform.get(entityId), parent.entityId);\n const offset = buffer.currentWriteOffset();\n PutComponentOperation.write(entityId, message.timestamp, message.componentId, transformData, buffer);\n transportBuffer.writeBuffer(buffer.buffer().subarray(offset, buffer.currentWriteOffset()), false);\n continue;\n }\n if (isRendererTransport && networkUtils.isNetworkMessage(message)) {\n // If it's the renderer transport and its a NetworkMessage, we need to fix the entityId field and convert it to a known Message.\n // PUT_NETWORK_COMPONENT -> PUT_COMPONENT\n let transformData = 'data' in message ? message.data : new Uint8Array();\n if (transformNeedsFix) {\n const parent = findNetworkId(NetworkParent.get(entityId));\n transformData = networkUtils.fixTransformParent(message, Transform.get(entityId), parent.entityId);\n }\n networkUtils.networkMessageToLocal({ ...message, data: transformData }, entityId, buffer, transportBuffer);\n // Iterate the next message\n continue;\n }\n // If its a network transport and its a PUT_COMPONENT that has a NetworkEntity component, we need to send this message\n // through comms with the EntityID and NetworkID from ther NetworkEntity so everyone can recieve this message and map to their custom entityID.\n if (isNetworkTransport && !networkUtils.isNetworkMessage(message)) {\n const networkData = NetworkEntity.getOrNull(message.entityId);\n // If it has networkData convert the message to PUT_NETWORK_COMPONENT.\n if (networkData) {\n networkUtils.localMessageToNetwork(message, networkData, buffer, transportBuffer);\n // Iterate the next message\n continue;\n }\n }\n // Common message\n transportBuffer.writeBuffer(message.messageBuffer, false);\n }\n if (isNetworkTransport && transportBuffer.currentWriteOffset()) {\n __NetworkMessagesBuffer.push(transportBuffer.toBinary());\n }\n const message = isNetworkTransport ? __NetworkMessagesBuffer : transportBuffer.toBinary();\n await transport.send(message);\n }\n }\n /**\n * @public\n * Add a transport to the crdt system\n */\n function addTransport(transport) {\n const id = transports.push(transport) - 1;\n transport.onmessage = parseChunkMessage(id);\n }\n return {\n sendMessages,\n receiveMessages,\n addTransport\n };\n}\n", "export var CrdtUtils;\n(function (CrdtUtils) {\n let SynchronizedEntityType;\n (function (SynchronizedEntityType) {\n // synchronizes entities with the NetworkSynchronized component only, used for networked games\n SynchronizedEntityType[SynchronizedEntityType[\"NETWORKED\"] = 0] = \"NETWORKED\";\n // synchronizes entities needed by the renderer\n SynchronizedEntityType[SynchronizedEntityType[\"RENDERER\"] = 1] = \"RENDERER\";\n })(SynchronizedEntityType = CrdtUtils.SynchronizedEntityType || (CrdtUtils.SynchronizedEntityType = {}));\n})(CrdtUtils || (CrdtUtils = {}));\nexport default CrdtUtils;\n/**\n * Compare raw data.\n * @public\n * @returns 0 if is the same data, 1 if a > b, -1 if b > a\n */\nexport function dataCompare(a, b) {\n // At reference level\n if (a === b)\n return 0;\n if (a === null && b !== null)\n return -1;\n if (a !== null && b === null)\n return 1;\n if (a instanceof Uint8Array && b instanceof Uint8Array) {\n const lengthDifference = a.byteLength - b.byteLength;\n if (lengthDifference !== 0) {\n return lengthDifference > 0 ? 1 : -1;\n }\n let res;\n for (let i = 0, n = a.byteLength; i < n; i++) {\n res = a[i] - b[i];\n if (res !== 0) {\n return res > 0 ? 1 : -1;\n }\n }\n // the data is exactly the same\n return 0;\n }\n if (typeof a === 'string') {\n const lengthDifference = a.length - b.length;\n if (lengthDifference !== 0) {\n return lengthDifference > 0 ? 1 : -1;\n }\n return a.localeCompare(b);\n }\n return a > b ? 1 : -1;\n}\n", "/**\n * @internal\n */\nexport function deepReadonly(val) {\n return Object.freeze({ ...val });\n}\n", "import { ReadWriteByteBuffer } from '../serialization/ByteBuffer';\nimport { ProcessMessageResultType, CrdtMessageType, PutComponentOperation, DeleteComponent } from '../serialization/crdt';\nimport { dataCompare } from '../systems/crdt/utils';\nimport { deepReadonly } from './readonly';\nexport function incrementTimestamp(entity, timestamps) {\n const newTimestamp = (timestamps.get(entity) || 0) + 1;\n timestamps.set(entity, newTimestamp);\n return newTimestamp;\n}\nexport function createDumpLwwFunctionFromCrdt(componentId, timestamps, schema, data) {\n return function dumpCrdtState(buffer, filterEntity) {\n for (const [entity, timestamp] of timestamps) {\n /* istanbul ignore if */\n if (filterEntity) {\n // I swear that this is being tested on state-to-crdt.spec but jest is trolling me\n /* istanbul ignore next */\n if (!filterEntity(entity))\n continue;\n }\n /* istanbul ignore else */\n if (data.has(entity)) {\n const it = data.get(entity);\n const buf = new ReadWriteByteBuffer();\n schema.serialize(it, buf);\n PutComponentOperation.write(entity, timestamp, componentId, buf.toBinary(), buffer);\n }\n else {\n DeleteComponent.write(entity, componentId, timestamp, buffer);\n }\n }\n };\n}\nexport function createUpdateLwwFromCrdt(componentId, timestamps, schema, data) {\n /**\n * Process the received message only if the lamport number recieved is higher\n * than the stored one. If its lower, we spread it to the network to correct the peer.\n * If they are equal, the bigger raw data wins.\n \n * Returns the recieved data if the lamport number was bigger than ours.\n * If it was an outdated message, then we return void\n * @public\n */\n function crdtRuleForCurrentState(message) {\n const { entityId, timestamp } = message;\n const currentTimestamp = timestamps.get(entityId);\n // The received message is > than our current value, update our state.components.\n if (currentTimestamp === undefined || currentTimestamp < timestamp) {\n return ProcessMessageResultType.StateUpdatedTimestamp;\n }\n // Outdated Message. Resend our state message through the wire.\n if (currentTimestamp > timestamp) {\n // console.log('2', currentTimestamp, timestamp)\n return ProcessMessageResultType.StateOutdatedTimestamp;\n }\n // Deletes are idempotent\n if (message.type === CrdtMessageType.DELETE_COMPONENT && !data.has(entityId)) {\n return ProcessMessageResultType.NoChanges;\n }\n let currentDataGreater = 0;\n if (data.has(entityId)) {\n const writeBuffer = new ReadWriteByteBuffer();\n schema.serialize(data.get(entityId), writeBuffer);\n currentDataGreater = dataCompare(writeBuffer.toBinary(), message.data || null);\n }\n else {\n currentDataGreater = dataCompare(null, message.data);\n }\n // Same data, same timestamp. Weirdo echo message.\n // console.log('3', currentDataGreater, writeBuffer.toBinary(), (message as any).data || null)\n if (currentDataGreater === 0) {\n return ProcessMessageResultType.NoChanges;\n }\n else if (currentDataGreater > 0) {\n // Current data is greater\n return ProcessMessageResultType.StateOutdatedData;\n }\n else {\n // Curent data is lower\n return ProcessMessageResultType.StateUpdatedData;\n }\n }\n return (msg) => {\n /* istanbul ignore next */\n if (msg.type !== CrdtMessageType.PUT_COMPONENT &&\n msg.type !== CrdtMessageType.PUT_COMPONENT_NETWORK &&\n msg.type !== CrdtMessageType.DELETE_COMPONENT &&\n msg.type !== CrdtMessageType.DELETE_COMPONENT_NETWORK)\n /* istanbul ignore next */\n return [null, data.get(msg.entityId)];\n const action = crdtRuleForCurrentState(msg);\n const entity = msg.entityId;\n switch (action) {\n case ProcessMessageResultType.StateUpdatedData:\n case ProcessMessageResultType.StateUpdatedTimestamp: {\n timestamps.set(entity, msg.timestamp);\n if (msg.type === CrdtMessageType.PUT_COMPONENT || msg.type === CrdtMessageType.PUT_COMPONENT_NETWORK) {\n const buf = new ReadWriteByteBuffer(msg.data);\n data.set(entity, schema.deserialize(buf));\n }\n else {\n data.delete(entity);\n }\n return [null, data.get(entity)];\n }\n case ProcessMessageResultType.StateOutdatedTimestamp:\n case ProcessMessageResultType.StateOutdatedData: {\n if (data.has(entity)) {\n const writeBuffer = new ReadWriteByteBuffer();\n schema.serialize(data.get(entity), writeBuffer);\n return [\n {\n type: CrdtMessageType.PUT_COMPONENT,\n componentId,\n data: writeBuffer.toBinary(),\n entityId: entity,\n timestamp: timestamps.get(entity)\n },\n data.get(entity)\n ];\n }\n else {\n return [\n {\n type: CrdtMessageType.DELETE_COMPONENT,\n componentId,\n entityId: entity,\n timestamp: timestamps.get(entity)\n },\n undefined\n ];\n }\n }\n }\n return [null, data.get(entity)];\n };\n}\nexport function createGetCrdtMessagesForLww(componentId, timestamps, dirtyIterator, schema, data) {\n return function* () {\n for (const entity of dirtyIterator) {\n const newTimestamp = incrementTimestamp(entity, timestamps);\n if (data.has(entity)) {\n const writeBuffer = new ReadWriteByteBuffer();\n schema.serialize(data.get(entity), writeBuffer);\n const msg = {\n type: CrdtMessageType.PUT_COMPONENT,\n componentId,\n entityId: entity,\n data: writeBuffer.toBinary(),\n timestamp: newTimestamp\n };\n yield msg;\n }\n else {\n const msg = {\n type: CrdtMessageType.DELETE_COMPONENT,\n componentId,\n entityId: entity,\n timestamp: newTimestamp\n };\n yield msg;\n }\n }\n dirtyIterator.clear();\n };\n}\n/**\n * @internal\n */\nexport function createComponentDefinitionFromSchema(componentName, componentId, schema) {\n const data = new Map();\n const dirtyIterator = new Set();\n const timestamps = new Map();\n const onChangeCallbacks = new Map();\n return {\n get componentId() {\n return componentId;\n },\n get componentName() {\n return componentName;\n },\n get componentType() {\n // a getter is used here to prevent accidental changes\n return 0 /* ComponentType.LastWriteWinElementSet */;\n },\n schema,\n has(entity) {\n return data.has(entity);\n },\n deleteFrom(entity, markAsDirty = true) {\n const component = data.get(entity);\n if (data.delete(entity) && markAsDirty) {\n dirtyIterator.add(entity);\n }\n return component || null;\n },\n entityDeleted(entity, markAsDirty) {\n if (data.delete(entity) && markAsDirty) {\n dirtyIterator.add(entity);\n }\n },\n getOrNull(entity) {\n const component = data.get(entity);\n return component ? deepReadonly(component) : null;\n },\n get(entity) {\n const component = data.get(entity);\n if (!component) {\n throw new Error(`[getFrom] Component ${componentName} for entity #${entity} not found`);\n }\n return deepReadonly(component);\n },\n create(entity, value) {\n const component = data.get(entity);\n if (component) {\n throw new Error(`[create] Component ${componentName} for ${entity} already exists`);\n }\n const usedValue = value === undefined ? schema.create() : schema.extend ? schema.extend(value) : value;\n data.set(entity, usedValue);\n dirtyIterator.add(entity);\n return usedValue;\n },\n createOrReplace(entity, value) {\n const usedValue = value === undefined ? schema.create() : schema.extend ? schema.extend(value) : value;\n data.set(entity, usedValue);\n dirtyIterator.add(entity);\n return usedValue;\n },\n getMutableOrNull(entity) {\n const component = data.get(entity);\n if (!component) {\n return null;\n }\n dirtyIterator.add(entity);\n return component;\n },\n getOrCreateMutable(entity, value) {\n const component = data.get(entity);\n if (!component) {\n return this.create(entity, value);\n }\n else {\n dirtyIterator.add(entity);\n return component;\n }\n },\n getMutable(entity) {\n const component = this.getMutableOrNull(entity);\n if (component === null) {\n throw new Error(`[mutable] Component ${componentName} for ${entity} not found`);\n }\n return component;\n },\n *iterator() {\n for (const [entity, component] of data) {\n yield [entity, component];\n }\n },\n *dirtyIterator() {\n for (const entity of dirtyIterator) {\n yield entity;\n }\n },\n getCrdtUpdates: createGetCrdtMessagesForLww(componentId, timestamps, dirtyIterator, schema, data),\n updateFromCrdt: createUpdateLwwFromCrdt(componentId, timestamps, schema, data),\n dumpCrdtStateToBuffer: createDumpLwwFunctionFromCrdt(componentId, timestamps, schema, data),\n onChange(entity, cb) {\n const cbs = onChangeCallbacks.get(entity) ?? [];\n cbs.push(cb);\n onChangeCallbacks.set(entity, cbs);\n },\n __onChangeCallbacks(entity, value) {\n const cbs = onChangeCallbacks.get(entity);\n if (!cbs)\n return;\n for (const cb of cbs) {\n cb(value);\n }\n }\n };\n}\n", "export const SYSTEMS_REGULAR_PRIORITY = 100e3;\nexport function SystemContainer() {\n const systems = [];\n function sort() {\n // TODO: systems with the same priority should always have the same stable order\n // add a \"counter\" to the System type to ensure that order\n systems.sort((a, b) => b.priority - a.priority);\n }\n function add(fn, priority, name) {\n const systemName = name ?? fn.name;\n if (systems.find((item) => item.fn === fn)) {\n throw new Error(`System ${JSON.stringify(systemName)} already added to the engine`);\n }\n systems.push({\n fn,\n priority,\n name: systemName\n });\n // TODO: replace this sort by an insertion in the right place\n sort();\n }\n function remove(selector) {\n let index = -1;\n if (typeof selector === 'string') {\n index = systems.findIndex((item) => item.name === selector);\n }\n else {\n index = systems.findIndex((item) => item.fn === selector);\n }\n if (index === -1) {\n return false;\n }\n systems.splice(index, 1);\n sort();\n return true;\n }\n return {\n add,\n remove,\n getSystems() {\n return systems;\n }\n };\n}\n", "import { ReadWriteByteBuffer } from '../serialization/ByteBuffer';\nimport { AppendValueOperation, CrdtMessageType } from '../serialization/crdt';\nimport { __DEV__ } from '../runtime/invariant';\nconst emptyReadonlySet = freezeSet(new Set());\nfunction frozenError() {\n throw new Error('The set is frozen');\n}\nfunction freezeSet(set) {\n ;\n set.add = frozenError;\n set.clear = frozenError;\n return set;\n}\nfunction sortByTimestamp(a, b) {\n return a.timestamp > b.timestamp ? 1 : -1;\n}\n/**\n * @internal\n */\nexport function createValueSetComponentDefinitionFromSchema(componentName, componentId, schema, options) {\n const data = new Map();\n const dirtyIterator = new Set();\n const queuedCommands = [];\n const onChangeCallbacks = new Map();\n // only sort the array if the latest (N) element has a timestamp <= N-1\n function shouldSort(row) {\n const len = row.raw.length;\n if (len > 1 && row.raw[len - 1].timestamp <= row.raw[len - 2].timestamp) {\n return true;\n }\n return false;\n }\n function gotUpdated(entity) {\n const row = data.get(entity);\n /* istanbul ignore else */\n if (row) {\n if (shouldSort(row)) {\n row.raw.sort(sortByTimestamp);\n }\n while (row.raw.length > options.maxElements) {\n row.raw.shift();\n }\n const frozenSet = freezeSet(new Set(row?.raw.map(($) => $.value)));\n row.frozenSet = frozenSet;\n return frozenSet;\n }\n else {\n /* istanbul ignore next */\n return emptyReadonlySet;\n }\n }\n function append(entity, value) {\n let row = data.get(entity);\n if (!row) {\n row = { raw: [], frozenSet: emptyReadonlySet };\n data.set(entity, row);\n }\n const usedValue = schema.extend ? schema.extend(value) : value;\n const timestamp = options.timestampFunction(usedValue);\n if (__DEV__) {\n // only freeze the objects in dev mode to warn the developers because\n // it is an expensive operation\n Object.freeze(usedValue);\n }\n row.raw.push({ value: usedValue, timestamp });\n return { set: gotUpdated(entity), value: usedValue };\n }\n const ret = {\n get componentId() {\n return componentId;\n },\n get componentName() {\n return componentName;\n },\n get componentType() {\n // a getter is used here to prevent accidental changes\n return 1 /* ComponentType.GrowOnlyValueSet */;\n },\n schema,\n has(entity) {\n return data.has(entity);\n },\n entityDeleted(entity) {\n data.delete(entity);\n },\n get(entity) {\n const values = data.get(entity);\n if (values) {\n return values.frozenSet;\n }\n else {\n return emptyReadonlySet;\n }\n },\n addValue(entity, rawValue) {\n const { set, value } = append(entity, rawValue);\n dirtyIterator.add(entity);\n const buf = new ReadWriteByteBuffer();\n schema.serialize(value, buf);\n queuedCommands.push({\n componentId,\n data: buf.toBinary(),\n entityId: entity,\n timestamp: 0,\n type: CrdtMessageType.APPEND_VALUE\n });\n return set;\n },\n *iterator() {\n for (const [entity, component] of data) {\n yield [entity, component.frozenSet];\n }\n },\n *dirtyIterator() {\n for (const entity of dirtyIterator) {\n yield entity;\n }\n },\n getCrdtUpdates() {\n // return a copy of the commands, and then clear the local copy\n dirtyIterator.clear();\n return queuedCommands.splice(0, queuedCommands.length);\n },\n updateFromCrdt(_body) {\n if (_body.type === CrdtMessageType.APPEND_VALUE) {\n const buf = new ReadWriteByteBuffer(_body.data);\n const { value } = append(_body.entityId, schema.deserialize(buf));\n return [null, value];\n }\n return [null, undefined];\n },\n dumpCrdtStateToBuffer: function (buffer, filterEntity) {\n for (const [entity, { raw }] of data) {\n if (filterEntity && !filterEntity(entity))\n continue;\n for (const it of raw) {\n const buf = new ReadWriteByteBuffer();\n schema.serialize(it.value, buf);\n AppendValueOperation.write(entity, 0, componentId, buf.toBinary(), buffer);\n }\n }\n },\n onChange(entity, cb) {\n const cbs = onChangeCallbacks.get(entity) ?? [];\n cbs.push(cb);\n onChangeCallbacks.set(entity, cbs);\n },\n __onChangeCallbacks(entity, value) {\n const cbs = onChangeCallbacks.get(entity);\n if (!cbs)\n return;\n for (const cb of cbs) {\n cb(value);\n }\n }\n };\n return ret;\n}\n", "import * as components from '../../components';\nfunction* genEntityTree(entity, entities) {\n // This avoid infinite loop when there is a cyclic parenting\n if (!entities.has(entity))\n return;\n entities.delete(entity);\n for (const [_entity, value] of entities) {\n if (value.parent === entity) {\n yield* genEntityTree(_entity, entities);\n }\n }\n yield entity;\n}\n/**\n * Get an iterator of entities that follow a tree structure for a component\n * @public\n * @param engine - the engine running the entities\n * @param entity - the root entity of the tree\n * @param component - the parenting component to filter by\n * @returns An iterator of an array as [entity, entity2, ...]\n *\n * Example:\n * ```ts\n * const TreeComponent = engine.defineComponent('custom::TreeComponent', {\n * label: Schemas.String,\n * parent: Schemas.Entity\n * })\n *\n * for (const entity of getComponentEntityTree(engine, entity, TreeComponent)) {\n * // entity in the tree\n * }\n * ```\n */\nexport function getComponentEntityTree(engine, entity, component) {\n const entities = new Map(engine.getEntitiesWith(component));\n return genEntityTree(entity, entities);\n}\n// I swear by all the gods that this is being tested on test/sdk/network/sync-engines.spec.ts\n/* istanbul ignore next */\nfunction removeNetworkEntityChildrens(engine, parent) {\n const NetworkParent = components.NetworkParent(engine);\n const NetworkEntity = components.NetworkEntity(engine);\n // Remove parent\n engine.removeEntity(parent);\n // Remove childs\n const network = NetworkEntity.getOrNull(parent);\n if (network) {\n for (const [entity, parent] of engine.getEntitiesWith(NetworkParent)) {\n if (parent.entityId === network.entityId && parent.networkId === network.networkId) {\n removeNetworkEntityChildrens(engine, entity);\n }\n }\n }\n return;\n}\n/**\n * Remove all components of each entity in the tree made with Transform parenting\n * @param engine - the engine running the entities\n * @param firstEntity - the root entity of the tree\n * @public\n */\nexport function removeEntityWithChildren(engine, entity) {\n const Transform = components.Transform(engine);\n const NetworkEntity = components.NetworkEntity(engine);\n /* istanbul ignore if */\n if (NetworkEntity.has(entity)) {\n return removeNetworkEntityChildrens(engine, entity);\n }\n for (const ent of getComponentEntityTree(engine, entity, Transform)) {\n engine.removeEntity(ent);\n }\n}\n", "import * as components from '../components';\nconst InputCommands = [\n 0 /* InputAction.IA_POINTER */,\n 1 /* InputAction.IA_PRIMARY */,\n 2 /* InputAction.IA_SECONDARY */,\n 4 /* InputAction.IA_FORWARD */,\n 5 /* InputAction.IA_BACKWARD */,\n 6 /* InputAction.IA_RIGHT */,\n 7 /* InputAction.IA_LEFT */,\n 8 /* InputAction.IA_JUMP */,\n 9 /* InputAction.IA_WALK */,\n 10 /* InputAction.IA_ACTION_3 */,\n 11 /* InputAction.IA_ACTION_4 */,\n 12 /* InputAction.IA_ACTION_5 */,\n 13 /* InputAction.IA_ACTION_6 */\n];\nconst InputStateUpdateSystemPriority = 1 << 20;\n/**\n * @public\n * ____DO NOT USE ____ use inputSystem instead\n */\nexport function createInputSystem(engine) {\n const PointerEventsResult = components.PointerEventsResult(engine);\n const globalState = {\n previousFrameMaxTimestamp: 0,\n currentFrameMaxTimestamp: 0,\n buttonState: new Map(),\n thisFrameCommands: []\n };\n function findLastAction(pointerEventType, inputAction, entity) {\n const ascendingTimestampIterator = PointerEventsResult.get(entity);\n for (const command of Array.from(ascendingTimestampIterator).reverse()) {\n if (command.button === inputAction && command.state === pointerEventType) {\n return command;\n }\n }\n }\n function* findCommandsByActionDescending(inputAction, entity) {\n const ascendingTimestampIterator = PointerEventsResult.get(entity);\n for (const command of Array.from(ascendingTimestampIterator).reverse()) {\n if (command.button === inputAction) {\n yield command;\n }\n }\n }\n function buttonStateUpdateSystem() {\n // first store the previous' frame timestamp\n let maxTimestamp = globalState.currentFrameMaxTimestamp;\n globalState.previousFrameMaxTimestamp = maxTimestamp;\n if (globalState.thisFrameCommands.length) {\n globalState.thisFrameCommands = [];\n }\n // then iterate over all new commands\n for (const [, commands] of engine.getEntitiesWith(PointerEventsResult)) {\n // TODO: adapt the gset component to have a cached \"reversed\" option by default\n const arrayCommands = Array.from(commands);\n for (let i = arrayCommands.length - 1; i >= 0; i--) {\n const command = arrayCommands[i];\n if (command.timestamp > maxTimestamp) {\n maxTimestamp = command.timestamp;\n }\n if (command.timestamp > globalState.previousFrameMaxTimestamp) {\n globalState.thisFrameCommands.push(command);\n }\n if (command.state === 0 /* PointerEventType.PET_UP */ || command.state === 1 /* PointerEventType.PET_DOWN */) {\n const prevCommand = globalState.buttonState.get(command.button);\n if (!prevCommand || command.timestamp > prevCommand.timestamp) {\n globalState.buttonState.set(command.button, command);\n }\n else {\n // since we are iterating a descending array, we can early finish the\n // loop\n break;\n }\n }\n }\n }\n // update current frame's max timestamp\n globalState.currentFrameMaxTimestamp = maxTimestamp;\n }\n engine.addSystem(buttonStateUpdateSystem, InputStateUpdateSystemPriority, '@dcl/ecs#inputSystem');\n function timestampIsCurrentFrame(timestamp) {\n if (timestamp > globalState.previousFrameMaxTimestamp && timestamp <= globalState.currentFrameMaxTimestamp) {\n return true;\n }\n else {\n return false;\n }\n }\n function getClick(inputAction, entity) {\n if (inputAction !== 3 /* InputAction.IA_ANY */) {\n return findClick(inputAction, entity);\n }\n for (const input of InputCommands) {\n const cmd = findClick(input, entity);\n if (cmd)\n return cmd;\n }\n return null;\n }\n function findClick(inputAction, entity) {\n let down = null;\n let up = null;\n // We search the last UP & DOWN command sorted by timestamp descending\n for (const it of findCommandsByActionDescending(inputAction, entity)) {\n if (!up) {\n if (it.state === 0 /* PointerEventType.PET_UP */) {\n up = it;\n continue;\n }\n }\n else if (!down) {\n if (it.state === 1 /* PointerEventType.PET_DOWN */) {\n down = it;\n break;\n }\n }\n }\n if (!up || !down)\n return null;\n // If the DOWN command has happen before the UP commands, it means that that a clicked has happen\n if (down.timestamp < up.timestamp && timestampIsCurrentFrame(up.timestamp)) {\n return { up, down };\n }\n return null;\n }\n function getInputCommandFromEntity(inputAction, pointerEventType, entity) {\n if (inputAction !== 3 /* InputAction.IA_ANY */) {\n return findInputCommand(inputAction, pointerEventType, entity);\n }\n for (const input of InputCommands) {\n const cmd = findInputCommand(input, pointerEventType, entity);\n if (cmd)\n return cmd;\n }\n return null;\n }\n function getInputCommand(inputAction, pointerEventType, entity) {\n if (entity) {\n return getInputCommandFromEntity(inputAction, pointerEventType, entity);\n }\n else {\n for (const command of globalState.thisFrameCommands) {\n if ((command.button === inputAction || inputAction === 3 /* InputAction.IA_ANY */) &&\n command.state === pointerEventType) {\n return command;\n }\n }\n return null;\n }\n }\n function findInputCommand(inputAction, pointerEventType, entity) {\n // We search the last pointer Event command sorted by timestamp\n const command = findLastAction(pointerEventType, inputAction, entity);\n if (!command)\n return null;\n if (timestampIsCurrentFrame(command.timestamp)) {\n return command;\n }\n else {\n return null;\n }\n }\n // returns true if there was a DOWN (in any past frame), and then an UP in the last frame\n function isClicked(inputAction, entity) {\n return getClick(inputAction, entity) !== null;\n }\n // returns true if the provided last action was triggered in the last frame\n function isTriggered(inputAction, pointerEventType, entity) {\n if (entity) {\n const command = findLastAction(pointerEventType, inputAction, entity);\n return (command && timestampIsCurrentFrame(command.timestamp)) || false;\n }\n else {\n for (const command of globalState.thisFrameCommands) {\n if ((command.button === inputAction || inputAction === 3 /* InputAction.IA_ANY */) &&\n command.state === pointerEventType) {\n return true;\n }\n }\n return false;\n }\n }\n // returns the global state of the input. This global state is updated from the system\n function isPressed(inputAction) {\n return globalState.buttonState.get(inputAction)?.state === 1 /* PointerEventType.PET_DOWN */;\n }\n return {\n isPressed,\n getClick,\n getInputCommand,\n isClicked,\n isTriggered\n };\n}\n", "/**\n * Component types are used to pick the wire protocol and the conflict resolution algorithm\n * @public\n */\nexport var ComponentType;\n(function (ComponentType) {\n ComponentType[ComponentType[\"LastWriteWinElementSet\"] = 0] = \"LastWriteWinElementSet\";\n ComponentType[ComponentType[\"GrowOnlyValueSet\"] = 1] = \"GrowOnlyValueSet\";\n})(ComponentType || (ComponentType = {}));\n", "import * as components from '../components';\nimport { componentNumberFromName } from '../components/component-number';\nimport { checkNotThenable } from '../runtime/invariant';\nimport { Schemas } from '../schemas';\nimport { crdtSceneSystem } from '../systems/crdt';\nimport { createComponentDefinitionFromSchema } from './lww-element-set-component-definition';\nimport { createEntityContainer } from './entity';\nimport { SystemContainer, SYSTEMS_REGULAR_PRIORITY } from './systems';\nimport { createValueSetComponentDefinitionFromSchema } from './grow-only-value-set-component-definition';\nimport { removeEntityWithChildren as removeEntityWithChildrenEngine } from '../runtime/helpers/tree';\nimport { CrdtMessageType } from '../serialization/crdt';\nexport * from './input';\nexport * from './readonly';\nexport * from './types';\nfunction preEngine(options) {\n const entityContainer = options?.entityContainer ?? createEntityContainer();\n const componentsDefinition = new Map();\n const systems = SystemContainer();\n let sealed = false;\n function addSystem(fn, priority = SYSTEMS_REGULAR_PRIORITY, name) {\n systems.add(fn, priority, name);\n }\n function removeSystem(selector) {\n return systems.remove(selector);\n }\n function addEntity() {\n const entity = entityContainer.generateEntity();\n return entity;\n }\n function removeEntity(entity) {\n for (const [, component] of componentsDefinition) {\n // TODO: hack for the moment.\n // We still need the NetworkEntity to forward this message to the SyncTransport.\n // If we remove it then we can't notify the other users which entity was deleted.\n if (component.componentName === 'core-schema::Network-Entity')\n continue;\n component.entityDeleted(entity, true);\n }\n return entityContainer.removeEntity(entity);\n }\n function removeEntityWithChildren(entity) {\n return removeEntityWithChildrenEngine({ removeEntity, defineComponentFromSchema, getEntitiesWith, defineComponent }, entity);\n }\n function registerComponentDefinition(componentName, component) {\n /* istanbul ignore next */\n if (sealed)\n throw new Error('Engine is already sealed. No components can be added at this stage');\n const componentId = componentNumberFromName(componentName);\n const prev = componentsDefinition.get(componentId);\n if (prev) {\n throw new Error(`Component number ${componentId} was already registered.`);\n }\n /* istanbul ignore next */\n if (component.componentName !== componentName) {\n throw new Error(`Component name doesn't match componentDefinition.componentName ${componentName} != ${component.componentName}`);\n }\n /* istanbul ignore next */\n if (component.componentId !== componentId) {\n throw new Error(`Component number doesn't match componentDefinition.componentId ${componentId} != ${component.componentId}`);\n }\n componentsDefinition.set(componentId, component);\n return component;\n }\n function defineComponentFromSchema(componentName, schema) {\n const componentId = componentNumberFromName(componentName);\n const prev = componentsDefinition.get(componentId);\n if (prev) {\n // TODO: assert spec === prev.spec\n return prev;\n }\n /* istanbul ignore next */\n if (sealed)\n throw new Error('Engine is already sealed. No components can be added at this stage');\n const newComponent = createComponentDefinitionFromSchema(componentName, componentId, schema);\n componentsDefinition.set(componentId, newComponent);\n return newComponent;\n }\n function defineValueSetComponentFromSchema(componentName, schema, options) {\n const componentId = componentNumberFromName(componentName);\n const prev = componentsDefinition.get(componentId);\n if (prev) {\n // TODO: assert spec === prev.spec\n return prev;\n }\n /* istanbul ignore next */\n if (sealed)\n throw new Error('Engine is already sealed. No components can be added at this stage');\n const newComponent = createValueSetComponentDefinitionFromSchema(componentName, componentId, schema, options);\n componentsDefinition.set(componentId, newComponent);\n return newComponent;\n }\n function defineComponent(componentName, mapSpec, constructorDefault) {\n const componentId = componentNumberFromName(componentName);\n const prev = componentsDefinition.get(componentId);\n if (prev) {\n // TODO: assert spec === prev.spec\n return prev;\n }\n if (sealed)\n throw new Error('Engine is already sealed. No components can be added at this stage');\n const schemaSpec = Schemas.Map(mapSpec, constructorDefault);\n const def = createComponentDefinitionFromSchema(componentName, componentId, schemaSpec);\n const newComponent = {\n ...def,\n create(entity, val) {\n return def.create(entity, val);\n },\n createOrReplace(entity, val) {\n return def.createOrReplace(entity, val);\n }\n };\n componentsDefinition.set(componentId, newComponent);\n return newComponent;\n }\n function getComponent(componentIdOrName) {\n const componentId = typeof componentIdOrName === 'number' ? componentIdOrName : componentNumberFromName(componentIdOrName);\n const component = componentsDefinition.get(componentId);\n if (!component) {\n throw new Error(`Component ${componentIdOrName} not found. You need to declare the components at the beginnig of the engine declaration`);\n }\n return component;\n }\n function getComponentOrNull(componentIdOrName) {\n const componentId = typeof componentIdOrName === 'number' ? componentIdOrName : componentNumberFromName(componentIdOrName);\n return (componentsDefinition.get(componentId) ??\n /* istanbul ignore next */\n null);\n }\n function* getEntitiesWith(...components) {\n for (const [entity, ...groupComp] of getComponentDefGroup(...components)) {\n yield [entity, ...groupComp.map((c) => c.get(entity))];\n }\n }\n function getEntityOrNullByName(value) {\n const NameComponent = components.Name({ defineComponent });\n for (const [entity, name] of getEntitiesWith(NameComponent)) {\n if (name.value === value)\n return entity;\n }\n return null;\n }\n function getEntityByName(value) {\n const entity = getEntityOrNullByName(value);\n return entity;\n }\n function* getEntitiesByTag(tagName) {\n const TagComponent = components.Tags({ defineComponent });\n for (const [entity, component] of getEntitiesWith(TagComponent)) {\n if (entity !== 0 && component.tags?.some((tag) => tag === tagName)) {\n yield entity;\n }\n }\n }\n function* getComponentDefGroup(...args) {\n const [firstComponentDef, ...componentDefinitions] = args;\n for (const [entity] of firstComponentDef.iterator()) {\n let matches = true;\n for (const componentDef of componentDefinitions) {\n if (!componentDef.has(entity)) {\n matches = false;\n break;\n }\n }\n if (matches) {\n yield [entity, ...args];\n }\n }\n }\n function getSystems() {\n return systems.getSystems();\n }\n function componentsIter() {\n return componentsDefinition.values();\n }\n function removeComponentDefinition(componentIdOrName) {\n if (sealed)\n throw new Error('Engine is already sealed. No components can be removed at this stage');\n const componentId = typeof componentIdOrName === 'number' ? componentIdOrName : componentNumberFromName(componentIdOrName);\n componentsDefinition.delete(componentId);\n }\n components.Transform({ defineComponentFromSchema });\n function seal() {\n if (!sealed) {\n sealed = true;\n }\n }\n return {\n addEntity,\n removeEntity,\n removeEntityWithChildren,\n addSystem,\n getSystems,\n removeSystem,\n defineComponent,\n defineComponentFromSchema,\n defineValueSetComponentFromSchema,\n getEntitiesWith,\n getComponent,\n getComponentOrNull: getComponentOrNull,\n getEntityOrNullByName,\n getEntityByName,\n getEntitiesByTag,\n removeComponentDefinition,\n registerComponentDefinition,\n entityContainer,\n componentsIter,\n seal\n };\n}\n/**\n * Internal constructor of new engines, this is an internal API\n * @public\n * @deprecated Prevent manual usage prefer \"engine\" for scene development\n */\nexport function Engine(options) {\n const partialEngine = preEngine(options);\n const onChangeFunction = (entity, operation, component, componentValue) => {\n if (operation === CrdtMessageType.DELETE_ENTITY) {\n for (const component of partialEngine.componentsIter()) {\n component?.__onChangeCallbacks(entity, undefined);\n }\n }\n else {\n component?.__onChangeCallbacks(entity, componentValue);\n }\n return options?.onChangeFunction(entity, operation, component, componentValue);\n };\n const crdtSystem = crdtSceneSystem(partialEngine, onChangeFunction);\n async function update(dt) {\n await crdtSystem.receiveMessages();\n for (const system of partialEngine.getSystems()) {\n const ret = system.fn(dt);\n checkNotThenable(ret, `A system (${system.name || 'anonymous'}) returned a thenable. Systems cannot be async functions. Documentation: https://dcl.gg/sdk/sync-systems`);\n }\n // get the deleted entities to send the DeleteEntity CRDT commands\n const deletedEntites = partialEngine.entityContainer.releaseRemovedEntities();\n await crdtSystem.sendMessages(deletedEntites);\n }\n return {\n _id: Date.now(),\n addEntity: partialEngine.addEntity,\n removeEntity: partialEngine.removeEntity,\n removeEntityWithChildren: partialEngine.removeEntityWithChildren,\n addSystem: partialEngine.addSystem,\n removeSystem: partialEngine.removeSystem,\n defineComponent: partialEngine.defineComponent,\n defineComponentFromSchema: partialEngine.defineComponentFromSchema,\n defineValueSetComponentFromSchema: partialEngine.defineValueSetComponentFromSchema,\n registerComponentDefinition: partialEngine.registerComponentDefinition,\n getEntitiesWith: partialEngine.getEntitiesWith,\n getComponent: partialEngine.getComponent,\n getComponentOrNull: partialEngine.getComponentOrNull,\n removeComponentDefinition: partialEngine.removeComponentDefinition,\n componentsIter: partialEngine.componentsIter,\n seal: partialEngine.seal,\n getEntityOrNullByName: partialEngine.getEntityOrNullByName,\n getEntityByName: partialEngine.getEntityByName,\n getEntitiesByTag: partialEngine.getEntitiesByTag,\n update,\n RootEntity: 0,\n PlayerEntity: 1,\n CameraEntity: 2,\n getEntityState: partialEngine.entityContainer.getEntityState,\n addTransport: crdtSystem.addTransport,\n entityContainer: partialEngine.entityContainer\n };\n}\n", "import * as components from '../components';\nimport { ReadWriteByteBuffer } from '../serialization/ByteBuffer';\nimport { dataCompare } from './crdt/utils';\n/**\n * Avoid creating multiple tween systems\n */\nconst cacheTween = new Map();\n/**\n * @public\n * @returns tween helper to be used on the scene\n */\nexport function createTweenSystem(engine) {\n if (cacheTween.has(engine._id)) {\n return cacheTween.get(engine._id);\n }\n const Tween = components.Tween(engine);\n const TweenState = components.TweenState(engine);\n const TweenSequence = components.TweenSequence(engine);\n const cache = new Map();\n function isCompleted(entity) {\n const tweenState = TweenState.getOrNull(entity);\n const tween = Tween.getOrNull(entity);\n const tweenCache = cache.get(entity);\n if (!tweenState || !tween)\n return false;\n /* istanbul ignore next */\n if (\n // Renderer notified that the tween is completed\n (tweenChanged(entity) || tweenState.state === 1 /* TweenStateStatus.TS_COMPLETED */) &&\n // Avoid sending isCompleted multiple times\n !tweenCache?.completed &&\n // Amount of frames needed to consider a tween completed\n (tweenCache?.frames ?? 0) > 2) {\n return true;\n }\n return false;\n }\n function tweenChanged(entity) {\n const currentTween = Tween.getOrNull(entity);\n const prevTween = cache.get(entity)?.tween;\n /* istanbul ignore next */\n if ((currentTween && !prevTween) || (!currentTween && prevTween)) {\n return true;\n }\n const currentBuff = new ReadWriteByteBuffer();\n Tween.schema.serialize(currentTween, currentBuff);\n const equal = dataCompare(currentBuff.toBinary(), prevTween);\n return equal;\n }\n const restartTweens = [];\n // Logic for sequence tweens\n engine.addSystem(() => {\n for (const restart of restartTweens) {\n restart();\n }\n restartTweens.length = 0;\n for (const [entity, tween] of engine.getEntitiesWith(Tween)) {\n if (tweenChanged(entity)) {\n const buffer = new ReadWriteByteBuffer();\n Tween.schema.serialize(tween, buffer);\n cache.set(entity, {\n tween: buffer.toBinary(),\n frames: 0,\n completed: false,\n changed: true\n });\n continue;\n }\n const tweenCache = cache.get(entity);\n tweenCache.frames += 1;\n tweenCache.changed = false;\n if (isCompleted(entity)) {\n // Reset tween frames.\n tweenCache.frames = 0;\n // set the tween completed to avoid calling this again for the same tween\n tweenCache.completed = true;\n const tweenSequence = TweenSequence.getOrNull(entity);\n if (!tweenSequence)\n continue;\n const { sequence } = tweenSequence;\n if (sequence && sequence.length) {\n const [nextTweenSequence, ...otherTweens] = sequence;\n Tween.createOrReplace(entity, nextTweenSequence);\n const mutableTweenHelper = TweenSequence.getMutable(entity);\n mutableTweenHelper.sequence = otherTweens;\n if (tweenSequence.loop === 0 /* TweenLoop.TL_RESTART */) {\n mutableTweenHelper.sequence.push(tween);\n }\n }\n else if (tweenSequence.loop === 1 /* TweenLoop.TL_YOYO */) {\n Tween.createOrReplace(entity, backwardsTween(tween));\n }\n else if (tweenSequence.loop === 0 /* TweenLoop.TL_RESTART */) {\n Tween.deleteFrom(entity);\n cache.delete(entity);\n restartTweens.push(() => {\n Tween.createOrReplace(entity, tween);\n });\n }\n }\n }\n }, Number.NEGATIVE_INFINITY);\n function backwardsTween(tween) {\n if (tween.mode?.$case === 'move' && tween.mode.move) {\n return { ...tween, mode: { ...tween.mode, move: { start: tween.mode.move.end, end: tween.mode.move.start } } };\n }\n if (tween.mode?.$case === 'rotate' && tween.mode.rotate) {\n return {\n ...tween,\n mode: { ...tween.mode, rotate: { start: tween.mode.rotate.end, end: tween.mode.rotate.start } }\n };\n }\n if (tween.mode?.$case === 'scale' && tween.mode.scale) {\n return { ...tween, mode: { ...tween.mode, scale: { start: tween.mode.scale.end, end: tween.mode.scale.start } } };\n }\n if (tween.mode?.$case === 'textureMove' && tween.mode.textureMove) {\n return {\n ...tween,\n mode: { ...tween.mode, textureMove: { start: tween.mode.textureMove.end, end: tween.mode.textureMove.start } }\n };\n }\n /* istanbul ignore next */\n throw new Error('Invalid tween');\n }\n const tweenSystem = {\n // This event is fired only once per tween\n tweenCompleted: isCompleted\n };\n cacheTween.set(engine._id, tweenSystem);\n return tweenSystem;\n}\n", "/* istanbul ignore file */\nimport * as components from '../components';\n/**\n * It checks all the entities that has a PointerEvent and check if it has a collider.\n * *\n * @public\n * @params engine\n */\nexport function pointerEventColliderChecker(engine) {\n const PointerEvents = components.PointerEvents(engine);\n const MeshCollider = components.MeshCollider(engine);\n const GltfContainer = components.GltfContainer(engine);\n const UiTransform = components.UiTransform(engine);\n const alreadyShownlog = new Set();\n let timer = 0;\n function systemChecker(dt) {\n timer += dt;\n if (timer <= 10) {\n return;\n }\n timer = 0;\n for (const [entity] of engine.getEntitiesWith(PointerEvents)) {\n if (alreadyShownlog.has(entity))\n continue;\n // Maybe the collider is inside the GLTFContainer. Ignore it\n if (GltfContainer.has(entity))\n continue;\n // UI handles the pointer's in a diff way.\n if (UiTransform.has(entity))\n continue;\n // check for Mesh Pointer Collision Layer\n const mesh = MeshCollider.getOrNull(entity);\n if (mesh) {\n if (mesh.collisionMask === undefined || mesh.collisionMask & 1 /* components.ColliderLayer.CL_POINTER */) {\n continue;\n }\n }\n alreadyShownlog.add(entity);\n console.log(`\u26A0\uFE0F Missing MeshCollider component on entity ${entity}. Add a MeshCollider to the entity so it can be clickeable by the player.\nSee https://docs.decentraland.org/creator/development-guide/sdk7/colliders/#pointer-blocking`);\n }\n }\n engine.removeSystem(systemChecker);\n engine.addSystem(systemChecker);\n}\n", "/**\n * @alpha * This file initialization is an alpha one. This is based on the old-ecs\n * init and it'll be changing.\n */\nimport { Engine } from '../../engine';\nimport { createTaskSystem } from '../../systems/async-task';\nimport { createPointerEventsSystem } from '../../systems/events';\nimport { createInputSystem } from './../../engine/input';\nimport { createRaycastSystem } from '../../systems/raycast';\nimport { createVideoEventsSystem } from '../../systems/videoEvents';\nimport { createTweenSystem } from '../../systems/tween';\nimport { pointerEventColliderChecker } from '../../systems/pointer-event-collider-checker';\nimport { createTriggerAreaEventsSystem } from '../../systems/triggerArea';\n/**\n * @public\n * The engine is the part of the scene that sits in the middle and manages all of the other parts.\n * It determines what entities are rendered and how players interact with them.\n * It also coordinates what functions from systems are executed and when.\n *\n * @example\n * import { engine } from '@dcl/sdk/ecs'\n * const entity = engine.addEntity()\n * engine.addSystem(someSystemFunction)\n *\n */\nexport const engine = /* @__PURE__ */ Engine();\n/**\n * @public\n * Input system manager. Check for button events\n * @example\n * inputSystem.isTriggered: Returns true if an input action ocurred since the last tick.\n * inputSystem.isPressed: Returns true if an input is currently being pressed down. It will return true on every tick until the button goes up again.\n * inputSystem.getInputCommand: Returns an object with data about the input action.\n */\nexport const inputSystem = /* @__PURE__ */ createInputSystem(engine);\n/**\n * @public\n * Register callback functions to a particular entity on input events.\n */\nexport const pointerEventsSystem = /* @__PURE__ */ createPointerEventsSystem(engine, inputSystem);\n/**\n * @public\n * Register callback functions to a particular entity on raycast results.\n */\nexport const raycastSystem = /* @__PURE__ */ createRaycastSystem(engine);\n/**\n * @public\n * Register callback functions to a particular entity on video events.\n */\nexport const videoEventsSystem = /* @__PURE__ */ createVideoEventsSystem(engine);\n/**\n * @public\n * Register callback functions to a particular entity on video events.\n */\nexport const tweenSystem = createTweenSystem(engine);\n/**\n * @public\n * Register callback functions for trigger area results.\n */\nexport const triggerAreaEventsSystem = /* @__PURE__ */ createTriggerAreaEventsSystem(engine);\n/**\n * Adds pointer event collider system only in DEV env\n */\npointerEventColliderChecker(engine);\n/**\n * @public\n * Runs an async function\n */\nexport const executeTask = /* @__PURE__ */ createTaskSystem(engine);\n", "/* eslint-disable */\nconst protobufPackageSarasa = \"decentraland.sdk.components.common\";\n/**\n * @public\n */\nexport var CameraType;\n(function (CameraType) {\n CameraType[CameraType[\"CT_FIRST_PERSON\"] = 0] = \"CT_FIRST_PERSON\";\n CameraType[CameraType[\"CT_THIRD_PERSON\"] = 1] = \"CT_THIRD_PERSON\";\n /** CT_CINEMATIC - controlled by the scene */\n CameraType[CameraType[\"CT_CINEMATIC\"] = 2] = \"CT_CINEMATIC\";\n})(CameraType || (CameraType = {}));\n", "/* eslint-disable */\nconst protobufPackageSarasa = \"decentraland.sdk.components.common\";\n/**\n * @public\n */\nexport var InputAction;\n(function (InputAction) {\n InputAction[InputAction[\"IA_POINTER\"] = 0] = \"IA_POINTER\";\n InputAction[InputAction[\"IA_PRIMARY\"] = 1] = \"IA_PRIMARY\";\n InputAction[InputAction[\"IA_SECONDARY\"] = 2] = \"IA_SECONDARY\";\n InputAction[InputAction[\"IA_ANY\"] = 3] = \"IA_ANY\";\n InputAction[InputAction[\"IA_FORWARD\"] = 4] = \"IA_FORWARD\";\n InputAction[InputAction[\"IA_BACKWARD\"] = 5] = \"IA_BACKWARD\";\n InputAction[InputAction[\"IA_RIGHT\"] = 6] = \"IA_RIGHT\";\n InputAction[InputAction[\"IA_LEFT\"] = 7] = \"IA_LEFT\";\n InputAction[InputAction[\"IA_JUMP\"] = 8] = \"IA_JUMP\";\n InputAction[InputAction[\"IA_WALK\"] = 9] = \"IA_WALK\";\n InputAction[InputAction[\"IA_ACTION_3\"] = 10] = \"IA_ACTION_3\";\n InputAction[InputAction[\"IA_ACTION_4\"] = 11] = \"IA_ACTION_4\";\n InputAction[InputAction[\"IA_ACTION_5\"] = 12] = \"IA_ACTION_5\";\n InputAction[InputAction[\"IA_ACTION_6\"] = 13] = \"IA_ACTION_6\";\n})(InputAction || (InputAction = {}));\n/** PointerEventType is a kind of interaction that can be detected. */\n/**\n * @public\n */\nexport var PointerEventType;\n(function (PointerEventType) {\n PointerEventType[PointerEventType[\"PET_UP\"] = 0] = \"PET_UP\";\n PointerEventType[PointerEventType[\"PET_DOWN\"] = 1] = \"PET_DOWN\";\n PointerEventType[PointerEventType[\"PET_HOVER_ENTER\"] = 2] = \"PET_HOVER_ENTER\";\n PointerEventType[PointerEventType[\"PET_HOVER_LEAVE\"] = 3] = \"PET_HOVER_LEAVE\";\n})(PointerEventType || (PointerEventType = {}));\n", "/* eslint-disable */\nconst protobufPackageSarasa = \"decentraland.sdk.components.common\";\n/**\n * @public\n */\nexport var LoadingState;\n(function (LoadingState) {\n LoadingState[LoadingState[\"UNKNOWN\"] = 0] = \"UNKNOWN\";\n LoadingState[LoadingState[\"LOADING\"] = 1] = \"LOADING\";\n LoadingState[LoadingState[\"NOT_FOUND\"] = 2] = \"NOT_FOUND\";\n LoadingState[LoadingState[\"FINISHED_WITH_ERROR\"] = 3] = \"FINISHED_WITH_ERROR\";\n LoadingState[LoadingState[\"FINISHED\"] = 4] = \"FINISHED\";\n})(LoadingState || (LoadingState = {}));\n", "/* eslint-disable */\nconst protobufPackageSarasa = \"decentraland.sdk.components.common\";\n/**\n * @public\n */\nexport var TextAlignMode;\n(function (TextAlignMode) {\n TextAlignMode[TextAlignMode[\"TAM_TOP_LEFT\"] = 0] = \"TAM_TOP_LEFT\";\n TextAlignMode[TextAlignMode[\"TAM_TOP_CENTER\"] = 1] = \"TAM_TOP_CENTER\";\n TextAlignMode[TextAlignMode[\"TAM_TOP_RIGHT\"] = 2] = \"TAM_TOP_RIGHT\";\n TextAlignMode[TextAlignMode[\"TAM_MIDDLE_LEFT\"] = 3] = \"TAM_MIDDLE_LEFT\";\n TextAlignMode[TextAlignMode[\"TAM_MIDDLE_CENTER\"] = 4] = \"TAM_MIDDLE_CENTER\";\n TextAlignMode[TextAlignMode[\"TAM_MIDDLE_RIGHT\"] = 5] = \"TAM_MIDDLE_RIGHT\";\n TextAlignMode[TextAlignMode[\"TAM_BOTTOM_LEFT\"] = 6] = \"TAM_BOTTOM_LEFT\";\n TextAlignMode[TextAlignMode[\"TAM_BOTTOM_CENTER\"] = 7] = \"TAM_BOTTOM_CENTER\";\n TextAlignMode[TextAlignMode[\"TAM_BOTTOM_RIGHT\"] = 8] = \"TAM_BOTTOM_RIGHT\";\n})(TextAlignMode || (TextAlignMode = {}));\n/**\n * @public\n */\nexport var Font;\n(function (Font) {\n Font[Font[\"F_SANS_SERIF\"] = 0] = \"F_SANS_SERIF\";\n Font[Font[\"F_SERIF\"] = 1] = \"F_SERIF\";\n Font[Font[\"F_MONOSPACE\"] = 2] = \"F_MONOSPACE\";\n})(Font || (Font = {}));\n", "import { Schemas } from '../schemas';\n/**\n * @public\n * @deprecated composite is not being supported so far, please do not use this feature\n */\nexport function getCompositeRootComponent(engine) {\n const component = engine.getComponentOrNull('composite::root');\n if (component) {\n return component;\n }\n return engine.defineComponent('composite::root', {\n src: Schemas.String,\n entities: Schemas.Array(Schemas.Map({\n src: Schemas.Entity,\n dest: Schemas.Entity\n }))\n });\n}\n", "const currentWorkingDir = '/';\n/**\n * The functions `normalizeStringPosix`, `dirname` and `resolve`\n * were extracted from package @browserify/path\n */\n/* istanbul ignore next */\nfunction normalizeStringPosix(path, allowAboveRoot = false) {\n let res = '';\n let lastSegmentLength = 0;\n let lastSlash = -1;\n let dots = 0;\n let code;\n for (let i = 0; i <= path.length; ++i) {\n if (i < path.length)\n code = path.charCodeAt(i);\n else if (code === 47 /*/*/)\n break;\n else\n code = 47; /*/*/\n if (code === 47 /*/*/) {\n if (lastSlash === i - 1 || dots === 1) {\n // NOOP\n }\n else if (lastSlash !== i - 1 && dots === 2) {\n if (res.length < 2 ||\n lastSegmentLength !== 2 ||\n res.charCodeAt(res.length - 1) !== 46 /*.*/ ||\n res.charCodeAt(res.length - 2) !== 46 /*.*/) {\n if (res.length > 2) {\n const lastSlashIndex = res.lastIndexOf('/');\n if (lastSlashIndex !== res.length - 1) {\n if (lastSlashIndex === -1) {\n res = '';\n lastSegmentLength = 0;\n }\n else {\n res = res.slice(0, lastSlashIndex);\n lastSegmentLength = res.length - 1 - res.lastIndexOf('/');\n }\n lastSlash = i;\n dots = 0;\n continue;\n }\n }\n else if (res.length === 2 || res.length === 1) {\n res = '';\n lastSegmentLength = 0;\n lastSlash = i;\n dots = 0;\n continue;\n }\n }\n if (allowAboveRoot) {\n if (res.length > 0)\n res += '/..';\n else\n res = '..';\n lastSegmentLength = 2;\n }\n }\n else {\n if (res.length > 0)\n res += '/' + path.slice(lastSlash + 1, i);\n else\n res = path.slice(lastSlash + 1, i);\n lastSegmentLength = i - lastSlash - 1;\n }\n lastSlash = i;\n dots = 0;\n }\n else if (code === 46 /*.*/ && dots !== -1) {\n ++dots;\n }\n else {\n dots = -1;\n }\n }\n return res;\n}\n/* istanbul ignore next */\nexport function resolve(...args) {\n let resolvedPath = '';\n let resolvedAbsolute = false;\n let cwd;\n for (let i = args.length - 1; i >= -1 && !resolvedAbsolute; i--) {\n let path;\n if (i >= 0)\n path = args[i];\n else {\n if (cwd === undefined)\n cwd = currentWorkingDir;\n path = cwd;\n }\n // Skip empty entries\n if (path.length === 0) {\n continue;\n }\n resolvedPath = path + '/' + resolvedPath;\n resolvedAbsolute = path.charCodeAt(0) === 47; /*/*/\n }\n // At this point the path should be resolved to a full absolute path, but\n // handle relative paths to be safe (might happen when process.cwd() fails)\n // Normalize the path\n resolvedPath = normalizeStringPosix(resolvedPath, !resolvedAbsolute);\n if (resolvedAbsolute) {\n if (resolvedPath.length > 0)\n return '/' + resolvedPath;\n else\n return '/';\n }\n else if (resolvedPath.length > 0) {\n return resolvedPath;\n }\n else {\n return '.';\n }\n}\n/* istanbul ignore next */\nexport function dirname(path) {\n if (path.length === 0)\n return '.';\n let code = path.charCodeAt(0);\n const hasRoot = code === 47; /*/*/\n let end = -1;\n let matchedSlash = true;\n for (let i = path.length - 1; i >= 1; --i) {\n code = path.charCodeAt(i);\n if (code === 47 /*/*/) {\n if (!matchedSlash) {\n end = i;\n break;\n }\n }\n else {\n // We saw the first non-path separator\n matchedSlash = false;\n }\n }\n if (end === -1)\n return hasRoot ? '/' : '.';\n if (hasRoot && end === 1)\n return '//';\n return path.slice(0, end);\n}\nexport function resolveComposite(path, cwd) {\n const absolutePath = path.startsWith('.') ? resolve(cwd, path) : resolve(path);\n return absolutePath.substring(1);\n}\n", "import { componentDefinitionByName } from '../components';\nimport { componentNumberFromName } from '../components/component-number';\nimport { Schemas } from '../schemas';\nimport { ReadWriteByteBuffer } from '../serialization/ByteBuffer';\nimport { getCompositeRootComponent } from './components';\nimport * as path from './path';\n/** @public */\n/* @__PURE__ */\nexport var EntityMappingMode;\n(function (EntityMappingMode) {\n EntityMappingMode[EntityMappingMode[\"EMM_NONE\"] = 0] = \"EMM_NONE\";\n EntityMappingMode[EntityMappingMode[\"EMM_NEXT_AVAILABLE\"] = 1] = \"EMM_NEXT_AVAILABLE\";\n EntityMappingMode[EntityMappingMode[\"EMM_DIRECT_MAPPING\"] = 2] = \"EMM_DIRECT_MAPPING\";\n})(EntityMappingMode || (EntityMappingMode = {}));\n/**\n * Return the component value from composite data\n * @internal\n */\nexport function getComponentValue(componentDefinition, component) {\n if (component.data?.$case === 'json') {\n return component.data.json;\n }\n else {\n return componentDefinition.schema.deserialize(new ReadWriteByteBuffer(component.data?.binary));\n }\n}\n/**\n * Return the component definition from composite info\n * @internal\n */\nexport function getComponentDefinition(engine, component) {\n const existingComponentDefinition = engine.getComponentOrNull(component.name);\n if (!existingComponentDefinition) {\n if (component.name.startsWith('core::')) {\n if (component.name in componentDefinitionByName) {\n return componentDefinitionByName[component.name](engine);\n }\n else {\n throw new Error(`The core component ${component.name} was not found.`);\n }\n }\n else if (component.jsonSchema) {\n return engine.defineComponentFromSchema(component.name, Schemas.fromJson(component.jsonSchema));\n }\n else {\n throw new Error(`${component.name} is not defined and there is no schema to define it.`);\n }\n }\n else {\n return existingComponentDefinition;\n }\n}\n/**\n * Return the entity mapping or fail if there is no more\n * @internal\n */\nexport function getEntityMapping(engine, compositeEntity, mappedEntities, { entityMapping }) {\n const existingEntity = mappedEntities.get(compositeEntity);\n if (existingEntity) {\n return existingEntity;\n }\n if (entityMapping?.type === EntityMappingMode.EMM_DIRECT_MAPPING) {\n const entity = entityMapping.getCompositeEntity(compositeEntity);\n mappedEntities.set(compositeEntity, entity);\n return entity;\n }\n // This function in runtime can be just `engine.addEntity()`\n const newEntity = entityMapping?.type === EntityMappingMode.EMM_NEXT_AVAILABLE\n ? entityMapping.getNextAvailableEntity()\n : engine.addEntity();\n if (newEntity === null) {\n throw new Error('There is no more entities to allocate');\n }\n mappedEntities.set(compositeEntity, newEntity);\n return newEntity;\n}\n/**\n * @internal\n */\n/* @__PURE__ */\nexport function instanceComposite(engine, compositeResource, compositeProvider, options) {\n const { rootEntity, alreadyRequestedSrc: optionalAlreadyRequestedSrc, entityMapping } = options;\n const alreadyRequestedSrc = optionalAlreadyRequestedSrc || new Set();\n const compositeDirectoryPath = path.dirname(path.resolve(compositeResource.src));\n const TransformComponentNumber = componentNumberFromName('core::Transform');\n const CompositeRootComponent = getCompositeRootComponent(engine);\n // Key => EntityNumber from the composite\n // Value => EntityNumber in current engine\n const mappedEntities = new Map();\n const getCompositeEntity = (compositeEntity) => getEntityMapping(engine, compositeEntity, mappedEntities, options);\n // ## 1 ##\n // First entity that I want to map, the root entity from the composite to the target entity in the engine\n // If there is no `rootEntity` passed, we assign one from `getNextAvailableEntity`\n const compositeRootEntity = rootEntity ?? getCompositeEntity(0);\n if (rootEntity) {\n mappedEntities.set(0, rootEntity);\n }\n // ## 2 ##\n // If there are more composite inside this one, we instance first.\n // => This is not only a copy, we need to instance. Otherwise, we'd be missing that branches\n // => TODO: in the future, the instanciation is first, then the overides (to parameterize Composite, e.g. house with different wall colors)\n const childrenComposite = compositeResource.composite.components.find((item) => item.name === CompositeRootComponent.componentName);\n if (childrenComposite) {\n for (const [childCompositeEntity, compositeRawData] of childrenComposite.data) {\n const childComposite = getComponentValue(CompositeRootComponent, compositeRawData);\n const childCompositePath = path.resolveComposite(childComposite.src, compositeDirectoryPath);\n const childCompositeResource = compositeProvider.getCompositeOrNull(childCompositePath);\n const targetEntity = getCompositeEntity(childCompositeEntity);\n if (childCompositeResource) {\n if (alreadyRequestedSrc.has(childCompositeResource.src) ||\n childCompositeResource.src === compositeResource.src) {\n throw new Error(`Composite ${compositeResource.src} has a recursive instanciation while try to instance ${childCompositeResource.src}. Previous instances: ${alreadyRequestedSrc.toString()}`);\n }\n instanceComposite(engine, childCompositeResource, compositeProvider, {\n rootEntity: targetEntity,\n alreadyRequestedSrc: new Set(alreadyRequestedSrc).add(childCompositeResource.src),\n entityMapping: entityMapping?.type === EntityMappingMode.EMM_NEXT_AVAILABLE ? entityMapping : undefined\n });\n }\n }\n }\n // ## 3 ##\n // Then, we copy the all rest of the components (skipping the Composite ones)\n for (const component of compositeResource.composite.components) {\n // We already instanced the composite\n if (component.name === CompositeRootComponent.componentName)\n continue;\n // ## 3a ##\n // We find the component definition\n const componentDefinition = getComponentDefinition(engine, component);\n // ## 3b ##\n // Iterating over all the entities with this component and create the replica\n for (const [entity, compositeComponentValue] of component.data) {\n const componentValueDeserialized = getComponentValue(componentDefinition, compositeComponentValue);\n const targetEntity = getCompositeEntity(entity);\n const componentValue = componentDefinition.create(targetEntity, componentValueDeserialized);\n // ## 3c ##\n // All entities referenced in the composite probably has a different resolved EntityNumber\n // We'll know with the mappedEntityes\n if (componentDefinition.componentId === TransformComponentNumber) {\n const transform = componentValue;\n if (transform.parent) {\n transform.parent = getCompositeEntity(transform.parent);\n }\n else {\n transform.parent = getCompositeEntity(0);\n }\n // TODO: is it going to be necessary to remap assets? e.g. src param from AudioSource and GltfContainer\n }\n else {\n Schemas.mutateNestedValues(componentDefinition.schema.jsonSchema, componentValue, (value, valueType) => {\n if (valueType.serializationType === 'entity') {\n return { changed: true, value: getCompositeEntity(value) };\n }\n else {\n return { changed: false };\n }\n });\n }\n }\n }\n const composite = CompositeRootComponent.getMutableOrNull(compositeRootEntity) || CompositeRootComponent.create(compositeRootEntity);\n for (const [entitySource, targetEntity] of mappedEntities) {\n composite.entities.push({\n src: entitySource,\n dest: targetEntity\n });\n }\n composite.src = compositeResource.src;\n return compositeRootEntity;\n}\n", "/* eslint-disable */\nimport _m0 from \"protobufjs/minimal\";\nimport { Value } from \"./google/protobuf/struct.gen\";\nconst protobufPackageSarasa = \"\";\nfunction createBaseComponentData() {\n return { data: undefined };\n}\n/**\n * @public\n */\nexport var ComponentData;\n(function (ComponentData) {\n function encode(message, writer = _m0.Writer.create()) {\n switch (message.data?.$case) {\n case \"json\":\n Value.encode(Value.wrap(message.data.json), writer.uint32(10).fork()).ldelim();\n break;\n case \"binary\":\n writer.uint32(18).bytes(message.data.binary);\n break;\n }\n return writer;\n }\n ComponentData.encode = encode;\n function decode(input, length) {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseComponentData();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n message.data = { $case: \"json\", json: Value.unwrap(Value.decode(reader, reader.uint32())) };\n continue;\n case 2:\n if (tag !== 18) {\n break;\n }\n message.data = { $case: \"binary\", binary: reader.bytes() };\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n }\n ComponentData.decode = decode;\n function fromJSON(object) {\n return {\n data: isSet(object.json)\n ? { $case: \"json\", json: object.json }\n : isSet(object.binary)\n ? { $case: \"binary\", binary: bytesFromBase64(object.binary) }\n : undefined,\n };\n }\n ComponentData.fromJSON = fromJSON;\n function toJSON(message) {\n const obj = {};\n message.data?.$case === \"json\" && (obj.json = message.data?.json);\n message.data?.$case === \"binary\" &&\n (obj.binary = message.data?.binary !== undefined ? base64FromBytes(message.data?.binary) : undefined);\n return obj;\n }\n ComponentData.toJSON = toJSON;\n})(ComponentData || (ComponentData = {}));\nfunction createBaseCompositeComponent() {\n return { name: \"\", jsonSchema: undefined, data: new Map() };\n}\n/**\n * @public\n */\nexport var CompositeComponent;\n(function (CompositeComponent) {\n function encode(message, writer = _m0.Writer.create()) {\n if (message.name !== \"\") {\n writer.uint32(10).string(message.name);\n }\n if (message.jsonSchema !== undefined) {\n Value.encode(Value.wrap(message.jsonSchema), writer.uint32(18).fork()).ldelim();\n }\n message.data.forEach((value, key) => {\n CompositeComponent_DataEntry.encode({ key: key, value }, writer.uint32(26).fork()).ldelim();\n });\n return writer;\n }\n CompositeComponent.encode = encode;\n function decode(input, length) {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseCompositeComponent();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n message.name = reader.string();\n continue;\n case 2:\n if (tag !== 18) {\n break;\n }\n message.jsonSchema = Value.unwrap(Value.decode(reader, reader.uint32()));\n continue;\n case 3:\n if (tag !== 26) {\n break;\n }\n const entry3 = CompositeComponent_DataEntry.decode(reader, reader.uint32());\n if (entry3.value !== undefined) {\n message.data.set(entry3.key, entry3.value);\n }\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n }\n CompositeComponent.decode = decode;\n function fromJSON(object) {\n return {\n name: isSet(object.name) ? String(object.name) : \"\",\n jsonSchema: isSet(object?.jsonSchema) ? object.jsonSchema : undefined,\n data: isObject(object.data)\n ? Object.entries(object.data).reduce((acc, [key, value]) => {\n acc.set(Number(key), ComponentData.fromJSON(value));\n return acc;\n }, new Map())\n : new Map(),\n };\n }\n CompositeComponent.fromJSON = fromJSON;\n function toJSON(message) {\n const obj = {};\n message.name !== undefined && (obj.name = message.name);\n message.jsonSchema !== undefined && (obj.jsonSchema = message.jsonSchema);\n obj.data = {};\n if (message.data) {\n message.data.forEach((v, k) => {\n obj.data[k] = ComponentData.toJSON(v);\n });\n }\n return obj;\n }\n CompositeComponent.toJSON = toJSON;\n})(CompositeComponent || (CompositeComponent = {}));\nfunction createBaseCompositeComponent_DataEntry() {\n return { key: 0, value: undefined };\n}\n/**\n * @public\n */\nexport var CompositeComponent_DataEntry;\n(function (CompositeComponent_DataEntry) {\n function encode(message, writer = _m0.Writer.create()) {\n if (message.key !== 0) {\n writer.uint32(8).int32(message.key);\n }\n if (message.value !== undefined) {\n ComponentData.encode(message.value, writer.uint32(18).fork()).ldelim();\n }\n return writer;\n }\n CompositeComponent_DataEntry.encode = encode;\n function decode(input, length) {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseCompositeComponent_DataEntry();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 8) {\n break;\n }\n message.key = reader.int32();\n continue;\n case 2:\n if (tag !== 18) {\n break;\n }\n message.value = ComponentData.decode(reader, reader.uint32());\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n }\n CompositeComponent_DataEntry.decode = decode;\n function fromJSON(object) {\n return {\n key: isSet(object.key) ? Number(object.key) : 0,\n value: isSet(object.value) ? ComponentData.fromJSON(object.value) : undefined,\n };\n }\n CompositeComponent_DataEntry.fromJSON = fromJSON;\n function toJSON(message) {\n const obj = {};\n message.key !== undefined && (obj.key = Math.round(message.key));\n message.value !== undefined && (obj.value = message.value ? ComponentData.toJSON(message.value) : undefined);\n return obj;\n }\n CompositeComponent_DataEntry.toJSON = toJSON;\n})(CompositeComponent_DataEntry || (CompositeComponent_DataEntry = {}));\nfunction createBaseCompositeDefinition() {\n return { version: 0, components: [] };\n}\n/**\n * @public\n */\nexport var CompositeDefinition;\n(function (CompositeDefinition) {\n function encode(message, writer = _m0.Writer.create()) {\n if (message.version !== 0) {\n writer.uint32(8).int32(message.version);\n }\n for (const v of message.components) {\n CompositeComponent.encode(v, writer.uint32(18).fork()).ldelim();\n }\n return writer;\n }\n CompositeDefinition.encode = encode;\n function decode(input, length) {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseCompositeDefinition();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 8) {\n break;\n }\n message.version = reader.int32();\n continue;\n case 2:\n if (tag !== 18) {\n break;\n }\n message.components.push(CompositeComponent.decode(reader, reader.uint32()));\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n }\n CompositeDefinition.decode = decode;\n function fromJSON(object) {\n return {\n version: isSet(object.version) ? Number(object.version) : 0,\n components: Array.isArray(object?.components)\n ? object.components.map((e) => CompositeComponent.fromJSON(e))\n : [],\n };\n }\n CompositeDefinition.fromJSON = fromJSON;\n function toJSON(message) {\n const obj = {};\n message.version !== undefined && (obj.version = Math.round(message.version));\n if (message.components) {\n obj.components = message.components.map((e) => e ? CompositeComponent.toJSON(e) : undefined);\n }\n else {\n obj.components = [];\n }\n return obj;\n }\n CompositeDefinition.toJSON = toJSON;\n})(CompositeDefinition || (CompositeDefinition = {}));\nconst tsProtoGlobalThis = (() => {\n if (typeof globalThis !== \"undefined\") {\n return globalThis;\n }\n if (typeof self !== \"undefined\") {\n return self;\n }\n if (typeof window !== \"undefined\") {\n return window;\n }\n if (typeof global !== \"undefined\") {\n return global;\n }\n throw \"Unable to locate global object\";\n})();\nfunction bytesFromBase64(b64) {\n if (tsProtoGlobalThis.Buffer) {\n return Uint8Array.from(tsProtoGlobalThis.Buffer.from(b64, \"base64\"));\n }\n else {\n const bin = tsProtoGlobalThis.atob(b64);\n const arr = new Uint8Array(bin.length);\n for (let i = 0; i < bin.length; ++i) {\n arr[i] = bin.charCodeAt(i);\n }\n return arr;\n }\n}\nfunction base64FromBytes(arr) {\n if (tsProtoGlobalThis.Buffer) {\n return tsProtoGlobalThis.Buffer.from(arr).toString(\"base64\");\n }\n else {\n const bin = [];\n arr.forEach((byte) => {\n bin.push(String.fromCharCode(byte));\n });\n return tsProtoGlobalThis.btoa(bin.join(\"\"));\n }\n}\nfunction isObject(value) {\n return typeof value === \"object\" && value !== null;\n}\nfunction isSet(value) {\n return value !== null && value !== undefined;\n}\n", "/* eslint-disable */\nimport _m0 from \"protobufjs/minimal\";\nconst protobufPackageSarasa = \"google.protobuf\";\n/**\n * `NullValue` is a singleton enumeration to represent the null value for the\n * `Value` type union.\n *\n * The JSON representation for `NullValue` is JSON `null`.\n */\n/**\n * @public\n */\nexport var NullValue;\n(function (NullValue) {\n /** NULL_VALUE - Null value. */\n NullValue[NullValue[\"NULL_VALUE\"] = 0] = \"NULL_VALUE\";\n})(NullValue || (NullValue = {}));\n/**\n * @public\n */\nexport function nullValueFromJSON(object) {\n switch (object) {\n case 0:\n case \"NULL_VALUE\":\n return 0 /* NullValue.NULL_VALUE */;\n default:\n throw new tsProtoGlobalThis.Error(\"Unrecognized enum value \" + object + \" for enum NullValue\");\n }\n}\n/**\n * @public\n */\nexport function nullValueToJSON(object) {\n switch (object) {\n case 0 /* NullValue.NULL_VALUE */:\n return \"NULL_VALUE\";\n default:\n throw new tsProtoGlobalThis.Error(\"Unrecognized enum value \" + object + \" for enum NullValue\");\n }\n}\nfunction createBaseStruct() {\n return { fields: new Map() };\n}\n/**\n * @public\n */\nexport var Struct;\n(function (Struct) {\n function encode(message, writer = _m0.Writer.create()) {\n message.fields.forEach((value, key) => {\n if (value !== undefined) {\n Struct_FieldsEntry.encode({ key: key, value }, writer.uint32(10).fork()).ldelim();\n }\n });\n return writer;\n }\n Struct.encode = encode;\n function decode(input, length) {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseStruct();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n const entry1 = Struct_FieldsEntry.decode(reader, reader.uint32());\n if (entry1.value !== undefined) {\n message.fields.set(entry1.key, entry1.value);\n }\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n }\n Struct.decode = decode;\n function fromJSON(object) {\n return {\n fields: isObject(object.fields)\n ? Object.entries(object.fields).reduce((acc, [key, value]) => {\n acc.set(key, value);\n return acc;\n }, new Map())\n : new Map(),\n };\n }\n Struct.fromJSON = fromJSON;\n function toJSON(message) {\n const obj = {};\n obj.fields = {};\n if (message.fields) {\n message.fields.forEach((v, k) => {\n obj.fields[k] = v;\n });\n }\n return obj;\n }\n Struct.toJSON = toJSON;\n function wrap(object) {\n const struct = createBaseStruct();\n if (object !== undefined) {\n Object.keys(object).forEach((key) => {\n struct.fields.set(key, object[key]);\n });\n }\n return struct;\n }\n Struct.wrap = wrap;\n function unwrap(message) {\n const object = {};\n [...message.fields.keys()].forEach((key) => {\n object[key] = message.fields.get(key);\n });\n return object;\n }\n Struct.unwrap = unwrap;\n})(Struct || (Struct = {}));\nfunction createBaseStruct_FieldsEntry() {\n return { key: \"\", value: undefined };\n}\n/**\n * @public\n */\nexport var Struct_FieldsEntry;\n(function (Struct_FieldsEntry) {\n function encode(message, writer = _m0.Writer.create()) {\n if (message.key !== \"\") {\n writer.uint32(10).string(message.key);\n }\n if (message.value !== undefined) {\n Value.encode(Value.wrap(message.value), writer.uint32(18).fork()).ldelim();\n }\n return writer;\n }\n Struct_FieldsEntry.encode = encode;\n function decode(input, length) {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseStruct_FieldsEntry();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n message.key = reader.string();\n continue;\n case 2:\n if (tag !== 18) {\n break;\n }\n message.value = Value.unwrap(Value.decode(reader, reader.uint32()));\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n }\n Struct_FieldsEntry.decode = decode;\n function fromJSON(object) {\n return { key: isSet(object.key) ? String(object.key) : \"\", value: isSet(object?.value) ? object.value : undefined };\n }\n Struct_FieldsEntry.fromJSON = fromJSON;\n function toJSON(message) {\n const obj = {};\n message.key !== undefined && (obj.key = message.key);\n message.value !== undefined && (obj.value = message.value);\n return obj;\n }\n Struct_FieldsEntry.toJSON = toJSON;\n})(Struct_FieldsEntry || (Struct_FieldsEntry = {}));\nfunction createBaseValue() {\n return { kind: undefined };\n}\n/**\n * @public\n */\nexport var Value;\n(function (Value) {\n function encode(message, writer = _m0.Writer.create()) {\n switch (message.kind?.$case) {\n case \"nullValue\":\n writer.uint32(8).int32(message.kind.nullValue);\n break;\n case \"numberValue\":\n writer.uint32(17).double(message.kind.numberValue);\n break;\n case \"stringValue\":\n writer.uint32(26).string(message.kind.stringValue);\n break;\n case \"boolValue\":\n writer.uint32(32).bool(message.kind.boolValue);\n break;\n case \"structValue\":\n Struct.encode(Struct.wrap(message.kind.structValue), writer.uint32(42).fork()).ldelim();\n break;\n case \"listValue\":\n ListValue.encode(ListValue.wrap(message.kind.listValue), writer.uint32(50).fork()).ldelim();\n break;\n }\n return writer;\n }\n Value.encode = encode;\n function decode(input, length) {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseValue();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 8) {\n break;\n }\n message.kind = { $case: \"nullValue\", nullValue: reader.int32() };\n continue;\n case 2:\n if (tag !== 17) {\n break;\n }\n message.kind = { $case: \"numberValue\", numberValue: reader.double() };\n continue;\n case 3:\n if (tag !== 26) {\n break;\n }\n message.kind = { $case: \"stringValue\", stringValue: reader.string() };\n continue;\n case 4:\n if (tag !== 32) {\n break;\n }\n message.kind = { $case: \"boolValue\", boolValue: reader.bool() };\n continue;\n case 5:\n if (tag !== 42) {\n break;\n }\n message.kind = { $case: \"structValue\", structValue: Struct.unwrap(Struct.decode(reader, reader.uint32())) };\n continue;\n case 6:\n if (tag !== 50) {\n break;\n }\n message.kind = { $case: \"listValue\", listValue: ListValue.unwrap(ListValue.decode(reader, reader.uint32())) };\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n }\n Value.decode = decode;\n function fromJSON(object) {\n return {\n kind: isSet(object.nullValue)\n ? { $case: \"nullValue\", nullValue: nullValueFromJSON(object.nullValue) }\n : isSet(object.numberValue)\n ? { $case: \"numberValue\", numberValue: Number(object.numberValue) }\n : isSet(object.stringValue)\n ? { $case: \"stringValue\", stringValue: String(object.stringValue) }\n : isSet(object.boolValue)\n ? { $case: \"boolValue\", boolValue: Boolean(object.boolValue) }\n : isSet(object.structValue)\n ? { $case: \"structValue\", structValue: object.structValue }\n : isSet(object.listValue)\n ? { $case: \"listValue\", listValue: [...object.listValue] }\n : undefined,\n };\n }\n Value.fromJSON = fromJSON;\n function toJSON(message) {\n const obj = {};\n message.kind?.$case === \"nullValue\" &&\n (obj.nullValue = message.kind?.nullValue !== undefined ? nullValueToJSON(message.kind?.nullValue) : undefined);\n message.kind?.$case === \"numberValue\" && (obj.numberValue = message.kind?.numberValue);\n message.kind?.$case === \"stringValue\" && (obj.stringValue = message.kind?.stringValue);\n message.kind?.$case === \"boolValue\" && (obj.boolValue = message.kind?.boolValue);\n message.kind?.$case === \"structValue\" && (obj.structValue = message.kind?.structValue);\n message.kind?.$case === \"listValue\" && (obj.listValue = message.kind?.listValue);\n return obj;\n }\n Value.toJSON = toJSON;\n function wrap(value) {\n const result = createBaseValue();\n if (value === null) {\n result.kind = { $case: \"nullValue\", nullValue: 0 /* NullValue.NULL_VALUE */ };\n }\n else if (typeof value === \"boolean\") {\n result.kind = { $case: \"boolValue\", boolValue: value };\n }\n else if (typeof value === \"number\") {\n result.kind = { $case: \"numberValue\", numberValue: value };\n }\n else if (typeof value === \"string\") {\n result.kind = { $case: \"stringValue\", stringValue: value };\n }\n else if (Array.isArray(value)) {\n result.kind = { $case: \"listValue\", listValue: value };\n }\n else if (typeof value === \"object\") {\n result.kind = { $case: \"structValue\", structValue: value };\n }\n else if (typeof value !== \"undefined\") {\n throw new Error(\"Unsupported any value type: \" + typeof value);\n }\n return result;\n }\n Value.wrap = wrap;\n function unwrap(message) {\n if (message.kind?.$case === \"nullValue\") {\n return null;\n }\n else if (message.kind?.$case === \"numberValue\") {\n return message.kind?.numberValue;\n }\n else if (message.kind?.$case === \"stringValue\") {\n return message.kind?.stringValue;\n }\n else if (message.kind?.$case === \"boolValue\") {\n return message.kind?.boolValue;\n }\n else if (message.kind?.$case === \"structValue\") {\n return message.kind?.structValue;\n }\n else if (message.kind?.$case === \"listValue\") {\n return message.kind?.listValue;\n }\n else {\n return undefined;\n }\n }\n Value.unwrap = unwrap;\n})(Value || (Value = {}));\nfunction createBaseListValue() {\n return { values: [] };\n}\n/**\n * @public\n */\nexport var ListValue;\n(function (ListValue) {\n function encode(message, writer = _m0.Writer.create()) {\n for (const v of message.values) {\n Value.encode(Value.wrap(v), writer.uint32(10).fork()).ldelim();\n }\n return writer;\n }\n ListValue.encode = encode;\n function decode(input, length) {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseListValue();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n message.values.push(Value.unwrap(Value.decode(reader, reader.uint32())));\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n }\n ListValue.decode = decode;\n function fromJSON(object) {\n return { values: Array.isArray(object?.values) ? [...object.values] : [] };\n }\n ListValue.fromJSON = fromJSON;\n function toJSON(message) {\n const obj = {};\n if (message.values) {\n obj.values = message.values.map((e) => e);\n }\n else {\n obj.values = [];\n }\n return obj;\n }\n ListValue.toJSON = toJSON;\n function wrap(array) {\n const result = createBaseListValue();\n result.values = array ?? [];\n return result;\n }\n ListValue.wrap = wrap;\n function unwrap(message) {\n if (message?.hasOwnProperty(\"values\") && Array.isArray(message.values)) {\n return message.values;\n }\n else {\n return message;\n }\n }\n ListValue.unwrap = unwrap;\n})(ListValue || (ListValue = {}));\nconst tsProtoGlobalThis = (() => {\n if (typeof globalThis !== \"undefined\") {\n return globalThis;\n }\n if (typeof self !== \"undefined\") {\n return self;\n }\n if (typeof window !== \"undefined\") {\n return window;\n }\n if (typeof global !== \"undefined\") {\n return global;\n }\n throw \"Unable to locate global object\";\n})();\nfunction isObject(value) {\n return typeof value === \"object\" && value !== null;\n}\nfunction isSet(value) {\n return value !== null && value !== undefined;\n}\n", "import { getCompositeRootComponent } from './components';\nimport { EntityMappingMode, instanceComposite } from './instance';\nimport { resolveComposite } from './path';\nimport { CompositeDefinition } from './proto/gen/composite.gen';\nexport { EntityMappingMode };\nexport { getCompositeRootComponent };\n/**\n * @public\n * @deprecated composite is not being supported so far, please do not use this feature\n */\nexport var Composite;\n(function (Composite) {\n /** @public */\n function fromJson(object) {\n return CompositeDefinition.fromJSON(object);\n }\n Composite.fromJson = fromJson;\n /** @public */\n function fromBinary(buffer) {\n return CompositeDefinition.decode(buffer);\n }\n Composite.fromBinary = fromBinary;\n /** @public */\n function toJson(composite) {\n return CompositeDefinition.toJSON(composite);\n }\n Composite.toJson = toJson;\n /** @public */\n function toBinary(composite) {\n return CompositeDefinition.encode(composite).finish();\n }\n Composite.toBinary = toBinary;\n /**\n * Instance a composite and returns its root entity\n * @param compositeData - state serialized by the CRDT protocol\n * @param getNextAvailableEntity - function that gives unused entities\n * @param rootEntity - (optional) suggested mapped rootEntity for the composite\n *\n * @public\n */\n /*#__PURE__*/ function instance(engine, compositeData, compositeProvider, options = {}) {\n instanceComposite(engine, compositeData, compositeProvider, options);\n }\n Composite.instance = instance;\n /**\n * Resolve and normalize a composite path\n * @param src - the source path\n * @param cwd - the directory from the resolve should start to resolve\n *\n * @returns the absolute resolved path without slash at the beginning\n * @public\n */\n /*#__PURE__*/ function resolveAndNormalizePath(src, cwd = '/') {\n return resolveComposite(src, cwd);\n }\n Composite.resolveAndNormalizePath = resolveAndNormalizePath;\n})(Composite || (Composite = {}));\n", "// The order of the following imports matters. Please do not auto-sort\nexport * from './engine';\nexport * from './schemas';\nexport * from './runtime/initialization';\nexport * from './runtime/types';\nexport * from './runtime/helpers';\nexport { cyclicParentingChecker } from './systems/cyclicParentingChecker';\nexport * from './systems/events';\nexport * from './systems/raycast';\nexport * from './systems/videoEvents';\nexport * from './systems/async-task';\nexport * from './systems/tween';\nexport * from './systems/triggerArea';\nexport * from './engine/entity';\nexport * from './components/types';\n// @internal\nimport * as components from './components';\n// @internal\nexport { components };\nimport { engine } from './runtime/initialization';\n// export components for global engine\nexport const Transform = /* @__PURE__*/ components.Transform(engine);\nexport const Animator = /* @__PURE__*/ components.Animator(engine);\nexport const AudioSource = /* @__PURE__*/ components.AudioSource(engine);\nexport const AudioStream = /* @__PURE__*/ components.AudioStream(engine);\nexport const Material = /* @__PURE__*/ components.Material(engine);\nexport const MeshRenderer = /* @__PURE__*/ components.MeshRenderer(engine);\nexport const MeshCollider = /* @__PURE__*/ components.MeshCollider(engine);\nexport const Name = components.Name(engine);\nexport const Tags = components.Tags(engine);\nexport const Tween = /* @__PURE__*/ components.Tween(engine);\nexport const VirtualCamera = /* @__PURE__*/ components.VirtualCamera(engine);\nexport const InputModifier = /* @__PURE__*/ components.InputModifier(engine);\nexport const LightSource = /* @__PURE__*/ components.LightSource(engine);\nexport const TriggerArea = /* @__PURE__*/ components.TriggerArea(engine);\n/**\n * @alpha\n * This is going to be used for sync components through a server.\n * Can be modified in the future since it's still in research\n */\nexport const SyncComponents = /* @__PURE__*/ components.SyncComponents(engine);\n/**\n * @alpha\n * Tag a entity to be syncronized through comms\n */\nexport const NetworkEntity = /* @__PURE__*/ components.NetworkEntity(engine);\n/**\n * @alpha\n * Tag a entity to be syncronized through comms\n */\nexport const NetworkParent = /* @__PURE__*/ components.NetworkParent(engine);\n// export components for global engine\nexport * from './components/generated/global.gen';\nexport * from './components/generated/types.gen';\nexport * from './serialization/crdt';\nexport * from './composite';\n", "import { IEngine, ISchema, JsonSchemaExtended, Schemas } from '@dcl/ecs'\nimport {\n Action,\n ActionPayload,\n ActionType,\n ActionTypes,\n ComponentName,\n getComponent,\n} from './definitions'\n\nexport const EMPTY: JsonSchemaExtended = {\n type: 'object',\n properties: {},\n serializationType: 'map',\n}\n\nexport function addActionType<T extends ISchema>(\n engine: IEngine,\n type: string,\n schema?: T,\n) {\n const ActionTypes = getComponent<ActionTypes>(\n ComponentName.ACTION_TYPES,\n engine,\n )\n const actionTypes = ActionTypes.getOrCreateMutable(engine.RootEntity)\n const actionType = {\n type,\n jsonSchema: JSON.stringify(\n schema?.jsonSchema || Schemas.Map({}).jsonSchema,\n ),\n }\n actionTypes.value = [\n ...actionTypes.value.filter(($) => $.type !== actionType.type),\n actionType,\n ]\n}\n\nexport function getActionSchema<T = unknown>(engine: IEngine, type: string) {\n const ActionTypes = getComponent<ActionTypes>(\n ComponentName.ACTION_TYPES,\n engine,\n )\n const actionTypes = ActionTypes.get(engine.RootEntity)\n const actionType = actionTypes.value.find(($) => $.type === type)\n const jsonSchema: JsonSchemaExtended = actionType\n ? JSON.parse(actionType.jsonSchema)\n : EMPTY\n return Schemas.fromJson(jsonSchema) as ISchema<T>\n}\n\nexport function getActionTypes(engine: IEngine) {\n const ActionTypes = getComponent<ActionTypes>(\n ComponentName.ACTION_TYPES,\n engine,\n )\n const actionTypes = ActionTypes.get(engine.RootEntity)\n return actionTypes.value.map(($) => $.type)\n}\n\nexport function getPayload<T extends ActionType>(action: Action) {\n return JSON.parse(action.jsonPayload) as ActionPayload<T>\n}\n\nexport function getJson<T extends ActionType>(payload: ActionPayload<T>) {\n return JSON.stringify(payload)\n}\n", "import { YGAlign, YGJustify } from '@dcl/ecs'\n\nexport enum ComponentName {\n ACTION_TYPES = 'asset-packs::ActionTypes',\n ACTIONS = 'asset-packs::Actions',\n COUNTER = 'asset-packs::Counter',\n TRIGGERS = 'asset-packs::Triggers',\n STATES = 'asset-packs::States',\n COUNTER_BAR = 'asset-packs::CounterBar',\n ADMIN_TOOLS = 'asset-packs::AdminTools',\n VIDEO_SCREEN = 'asset-packs::VideoScreen',\n REWARDS = 'asset-packs::Rewards',\n TEXT_ANNOUNCEMENTS = 'asset-packs::TextAnnouncements',\n VIDEO_CONTROL_STATE = 'asset-packs::VideoControlState',\n}\n\nexport enum TweenType {\n MOVE_ITEM = 'move_item',\n ROTATE_ITEM = 'rotate_item',\n SCALE_ITEM = 'scale_item',\n}\n\nexport enum InterpolationType {\n LINEAR = 'linear',\n EASEINQUAD = 'easeinquad',\n EASEOUTQUAD = 'easeoutquad',\n EASEQUAD = 'easequad',\n EASEINSINE = 'easeinsine',\n EASEOUTSINE = 'easeoutsine',\n EASESINE = 'easeinoutsine',\n EASEINEXPO = 'easeinexpo',\n EASEOUTEXPO = 'easeoutexpo',\n EASEEXPO = 'easeinoutexpo',\n EASEINELASTIC = 'easeinelastic',\n EASEOUTELASTIC = 'easeoutelastic',\n EASEELASTIC = 'easeinoutelastic',\n EASEINBOUNCE = 'easeinbounce',\n EASEOUTEBOUNCE = 'easeoutbounce',\n EASEBOUNCE = 'easeinoutbounce',\n}\n\nexport enum ActionType {\n PLAY_ANIMATION = 'play_animation',\n STOP_ANIMATION = 'stop_animation',\n SET_STATE = 'set_state',\n START_TWEEN = 'start_tween',\n SET_COUNTER = 'set_counter',\n INCREMENT_COUNTER = 'increment_counter',\n DECREASE_COUNTER = 'decrease_counter',\n PLAY_SOUND = 'play_sound',\n STOP_SOUND = 'stop_sound',\n SET_VISIBILITY = 'set_visibility',\n ATTACH_TO_PLAYER = 'attach_to_player',\n DETACH_FROM_PLAYER = 'detach_from_player',\n PLAY_VIDEO_STREAM = 'play_video_stream',\n STOP_VIDEO_STREAM = 'stop_video_stream',\n PLAY_AUDIO_STREAM = 'play_audio_stream',\n STOP_AUDIO_STREAM = 'stop_audio_stream',\n TELEPORT_PLAYER = 'teleport_player',\n MOVE_PLAYER = 'move_player',\n PLAY_DEFAULT_EMOTE = 'play_default_emote',\n PLAY_CUSTOM_EMOTE = 'play_custom_emote',\n OPEN_LINK = 'open_link',\n SHOW_TEXT = 'show_text',\n HIDE_TEXT = 'hide_text',\n START_DELAY = 'start_delay',\n STOP_DELAY = 'stop_delay',\n START_LOOP = 'start_loop',\n STOP_LOOP = 'stop_loop',\n CLONE_ENTITY = 'clone_entity',\n REMOVE_ENTITY = 'remove_entity',\n SHOW_IMAGE = 'show_image',\n HIDE_IMAGE = 'hide_image',\n DAMAGE = 'damage',\n MOVE_PLAYER_HERE = 'move_player_here',\n PLACE_ON_PLAYER = 'place_on_player',\n ROTATE_AS_PLAYER = 'rotate_as_player',\n PLACE_ON_CAMERA = 'place_on_camera',\n ROTATE_AS_CAMERA = 'rotate_as_camera',\n SET_POSITION = 'set_position',\n SET_ROTATION = 'set_rotation',\n SET_SCALE = 'set_scale',\n FOLLOW_PLAYER = 'follow_player',\n STOP_FOLLOWING_PLAYER = 'stop_following_player',\n RANDOM = 'random',\n BATCH = 'batch',\n HEAL_PLAYER = 'heal_player',\n CLAIM_AIRDROP = 'claim_airdrop',\n}\n\nexport enum TriggerType {\n /** @deprecated use ON_INPUT_ACTION instead */\n ON_CLICK = 'on_click',\n ON_INPUT_ACTION = 'on_input_action',\n ON_STATE_CHANGE = 'on_state_change',\n ON_SPAWN = 'on_spawn',\n ON_TWEEN_END = 'on_tween_end',\n ON_COUNTER_CHANGE = 'on_counter_change',\n ON_PLAYER_ENTERS_AREA = 'on_player_enters_area',\n ON_PLAYER_LEAVES_AREA = 'on_player_leaves_area',\n ON_DELAY = 'on_delay',\n ON_LOOP = 'on_loop',\n ON_CLONE = 'on_clone',\n ON_CLICK_IMAGE = 'on_click_image',\n ON_DAMAGE = 'on_damage',\n ON_GLOBAL_CLICK = 'on_global_click',\n ON_GLOBAL_PRIMARY = 'on_global_primary',\n ON_GLOBAL_SECONDARY = 'on_global_secondary',\n ON_TICK = 'on_tick',\n ON_HEAL_PLAYER = 'on_heal_player',\n ON_PLAYER_SPAWN = 'on_player_spawn',\n}\n\nexport enum TriggerConditionType {\n WHEN_STATE_IS = 'when_state_is',\n WHEN_STATE_IS_NOT = 'when_state_is_not',\n WHEN_COUNTER_EQUALS = 'when_counter_equals',\n WHEN_COUNTER_IS_GREATER_THAN = 'when_counter_is_greater_than',\n WHEN_COUNTER_IS_LESS_THAN = 'when_counter_is_less_than',\n WHEN_DISTANCE_TO_PLAYER_LESS_THAN = 'when_distance_to_player_less_than',\n WHEN_DISTANCE_TO_PLAYER_GREATER_THAN = 'when_distance_to_player_greater_than',\n WHEN_PREVIOUS_STATE_IS = 'when_previous_state_is',\n WHEN_PREVIOUS_STATE_IS_NOT = 'when_previous_state_is_not',\n}\n\nexport enum TriggerConditionOperation {\n AND = 'and',\n OR = 'or',\n}\n\n// Defined values instead of using from @dcl/ecs because Schemas doesn't support const enums\nexport enum AlignMode {\n TAM_TOP_LEFT = 0,\n TAM_TOP_CENTER = 1,\n TAM_TOP_RIGHT = 2,\n TAM_MIDDLE_LEFT = 3,\n TAM_MIDDLE_CENTER = 4,\n TAM_MIDDLE_RIGHT = 5,\n TAM_BOTTOM_LEFT = 6,\n TAM_BOTTOM_CENTER = 7,\n TAM_BOTTOM_RIGHT = 8,\n}\n\n// Defined values instead of using from @dcl/ecs because Schemas doesn't support const enums\nexport enum Font {\n F_SANS_SERIF = 0,\n F_SERIF = 1,\n F_MONOSPACE = 2,\n}\n\nexport type ScreenAlignMode = {\n alignItems: YGAlign\n justifyContent: YGJustify\n}\n\n// Defined values instead of using from @dcl/ecs because Schemas doesn't support const enums\nexport enum Colliders {\n /** CL_NONE - no collisions */\n CL_NONE = 0,\n /** CL_POINTER - collisions with the player's pointer ray (e.g. mouse cursor hovering) */\n CL_POINTER = 1,\n /** CL_PHYSICS - collision affecting your player's physics i.e. walls, floor, moving platfroms */\n CL_PHYSICS = 2,\n CL_RESERVED1 = 4,\n CL_RESERVED2 = 8,\n CL_RESERVED3 = 16,\n CL_RESERVED4 = 32,\n CL_RESERVED5 = 64,\n CL_RESERVED6 = 128,\n CL_CUSTOM1 = 256,\n CL_CUSTOM2 = 512,\n CL_CUSTOM3 = 1024,\n CL_CUSTOM4 = 2048,\n CL_CUSTOM5 = 4096,\n CL_CUSTOM6 = 8192,\n CL_CUSTOM7 = 16384,\n CL_CUSTOM8 = 32768,\n}\n\nexport enum ProximityLayer {\n ALL = 'all',\n PLAYER = 'player',\n NON_PLAYER = 'non_player',\n}\n\nexport enum AdminPermissions {\n PUBLIC = 'PUBLIC',\n PRIVATE = 'PRIVATE',\n}\n\nexport enum MediaSource {\n VideoURL,\n LiveStream\n}\n", "import {\n Animator as defineAnimator,\n Transform as defineTransform,\n AudioSource as defineAudioSource,\n AvatarAttach as defineAvatarAttach,\n VisibilityComponent as defineVisibilityComponent,\n GltfContainer as defineGltfContainer,\n UiTransform as defineUiTransform,\n UiText as defineUiText,\n UiBackground as defineUiBackground,\n UiInput as defineUiInput,\n UiInputResult as defineUiInputResult,\n UiCanvasInformation as defineUiCanvasInformation,\n VideoPlayer as defineVideoPlayer,\n Material as defineMaterial,\n MeshRenderer as defineMeshRenderer,\n Billboard as defineBillboard,\n Name as defineName,\n Tween as defineTween,\n TweenSequence as defineTweenSequence,\n PointerEvents as definePointerEvents,\n NetworkEntity as defineNetworkEntity,\n SyncComponents as defineSyncComponents,\n} from '@dcl/ecs/dist/components'\nimport { IEngine } from '@dcl/ecs'\nimport { EngineComponents } from './definitions'\n\nexport function getExplorerComponents(engine: IEngine): EngineComponents {\n return {\n Animator: defineAnimator(engine),\n Transform: defineTransform(engine),\n AudioSource: defineAudioSource(engine),\n AvatarAttach: defineAvatarAttach(engine),\n VisibilityComponent: defineVisibilityComponent(engine),\n GltfContainer: defineGltfContainer(engine),\n UiTransform: defineUiTransform(engine),\n UiText: defineUiText(engine),\n UiBackground: defineUiBackground(engine),\n UiInput: defineUiInput(engine),\n UiInputResult: defineUiInputResult(engine),\n UiCanvasInformation: defineUiCanvasInformation(engine),\n VideoPlayer: defineVideoPlayer(engine),\n Material: defineMaterial(engine),\n MeshRenderer: defineMeshRenderer(engine),\n Billboard: defineBillboard(engine),\n Name: defineName(engine),\n Tween: defineTween(engine),\n TweenSequence: defineTweenSequence(engine),\n PointerEvents: definePointerEvents(engine),\n NetworkEntity: defineNetworkEntity(engine),\n SyncComponents: defineSyncComponents(engine),\n }\n}\n", "import mitt, { Emitter } from 'mitt'\nimport { Entity } from '@dcl/ecs'\nimport { ActionPayload, ActionType, TriggerType } from './definitions'\n\nconst triggers = new Map<Entity, Emitter<Record<TriggerType, void>>>()\n\nconst actions = new Map<\n Entity,\n Emitter<Record<string, ActionPayload<ActionType>>>\n>()\n\nexport function getTriggerEvents(entity: Entity) {\n if (!triggers.has(entity)) {\n triggers.set(entity, mitt())\n }\n return triggers.get(entity)!\n}\n\nexport function getActionEvents(entity: Entity) {\n if (!actions.has(entity)) {\n actions.set(entity, mitt())\n }\n return actions.get(entity)!\n}\n", "import {\n ComponentDefinition,\n IEngine,\n LastWriteWinElementSetComponentDefinition,\n} from '@dcl/ecs'\nimport { ComponentName, Counter } from './definitions'\n\nexport const COMPONENTS_WITH_ID: string[] = [\n ComponentName.ACTIONS,\n ComponentName.STATES,\n ComponentName.COUNTER,\n]\n\nexport function getCounterComponent(engine: IEngine) {\n return engine.getComponent(\n ComponentName.COUNTER,\n ) as LastWriteWinElementSetComponentDefinition<Counter>\n}\n\nexport function getNextId(engine: IEngine) {\n const Counter = getCounterComponent(engine)\n const counter = Counter.getOrCreateMutable(engine.RootEntity)\n return ++counter.value\n}\n\nexport function requiresId<T extends { id: string }>(\n component: ComponentDefinition<unknown>,\n): component is ComponentDefinition<T> {\n return COMPONENTS_WITH_ID.includes(component.componentName)\n}\n", "import {\n Entity,\n IEngine,\n ISchema,\n MaterialComponentDefinitionExtended,\n PBMaterial,\n PBVideoPlayer,\n Schemas,\n VideoTexture,\n AnimatorComponentDefinitionExtended,\n TransformComponentExtended,\n LastWriteWinElementSetComponentDefinition,\n PBAvatarAttach,\n PBVisibilityComponent,\n PBGltfContainer,\n PBUiTransform,\n PBUiText,\n PBUiBackground,\n MeshRendererComponentDefinitionExtended,\n PBBillboard,\n NameType,\n PBTween,\n PBTweenSequence,\n PBPointerEvents,\n NetworkEntity,\n SyncComponents,\n AudioSourceComponentDefinitionExtended,\n PBUiInput,\n PBUiInputResult,\n PBUiCanvasInformation,\n} from '@dcl/ecs'\nimport { addActionType } from './action-types'\nimport {\n ComponentName,\n TweenType,\n InterpolationType,\n ActionType,\n TriggerType,\n TriggerConditionType,\n TriggerConditionOperation,\n AlignMode,\n Font,\n Colliders,\n ProximityLayer,\n AdminPermissions,\n MediaSource,\n} from './enums'\nimport { getExplorerComponents } from './components'\n\nexport const LIVEKIT_STREAM_SRC = 'livekit-video://current-stream'\n\nexport * from './enums'\nexport * from './action-types'\nexport * from './events'\nexport * from './id'\nexport * from './states'\nexport * from './clone'\nexport * from './lww'\nexport * from './types'\n\nexport const ActionSchemas = {\n [ActionType.PLAY_ANIMATION]: Schemas.Map({\n animation: Schemas.String,\n loop: Schemas.Optional(Schemas.Boolean),\n }),\n [ActionType.STOP_ANIMATION]: Schemas.Map({}),\n [ActionType.SET_STATE]: Schemas.Map({ state: Schemas.String }),\n [ActionType.START_TWEEN]: Schemas.Map({\n type: Schemas.EnumString<TweenType>(TweenType, TweenType.MOVE_ITEM),\n end: Schemas.Vector3,\n interpolationType: Schemas.EnumString(\n InterpolationType,\n InterpolationType.LINEAR,\n ),\n duration: Schemas.Float,\n relative: Schemas.Boolean,\n }),\n [ActionType.SET_COUNTER]: Schemas.Map({ counter: Schemas.Int }),\n [ActionType.INCREMENT_COUNTER]: Schemas.Map({\n amount: Schemas.Optional(Schemas.Int),\n }),\n [ActionType.DECREASE_COUNTER]: Schemas.Map({\n amount: Schemas.Optional(Schemas.Int),\n }),\n [ActionType.PLAY_SOUND]: Schemas.Map({\n src: Schemas.String,\n loop: Schemas.Optional(Schemas.Boolean),\n volume: Schemas.Optional(Schemas.Float),\n global: Schemas.Optional(Schemas.Boolean),\n }),\n [ActionType.STOP_SOUND]: Schemas.Map({}),\n [ActionType.SET_VISIBILITY]: Schemas.Map({\n visible: Schemas.Boolean,\n /** @deprecated use collider instead */\n physicsCollider: Schemas.Optional(Schemas.Boolean),\n collider: Schemas.Optional(\n Schemas.EnumNumber(Colliders, Colliders.CL_POINTER),\n ),\n }),\n [ActionType.ATTACH_TO_PLAYER]: Schemas.Map({\n anchorPointId: Schemas.Int,\n }),\n [ActionType.DETACH_FROM_PLAYER]: Schemas.Map({}),\n [ActionType.PLAY_VIDEO_STREAM]: Schemas.Map({\n src: Schemas.Optional(Schemas.String),\n loop: Schemas.Optional(Schemas.Boolean),\n volume: Schemas.Optional(Schemas.Float),\n dclCast: Schemas.Optional(Schemas.Boolean),\n }),\n [ActionType.STOP_VIDEO_STREAM]: Schemas.Map({}),\n [ActionType.PLAY_AUDIO_STREAM]: Schemas.Map({\n url: Schemas.String,\n volume: Schemas.Optional(Schemas.Float),\n }),\n [ActionType.STOP_AUDIO_STREAM]: Schemas.Map({}),\n [ActionType.TELEPORT_PLAYER]: Schemas.Map({\n x: Schemas.Int,\n y: Schemas.Int,\n }),\n [ActionType.MOVE_PLAYER]: Schemas.Map({\n position: Schemas.Vector3,\n cameraTarget: Schemas.Optional(Schemas.Vector3),\n }),\n [ActionType.PLAY_DEFAULT_EMOTE]: Schemas.Map({\n emote: Schemas.String,\n }),\n [ActionType.PLAY_CUSTOM_EMOTE]: Schemas.Map({\n src: Schemas.String,\n loop: Schemas.Optional(Schemas.Boolean),\n }),\n [ActionType.OPEN_LINK]: Schemas.Map({\n url: Schemas.String,\n }),\n [ActionType.SHOW_TEXT]: Schemas.Map({\n text: Schemas.String,\n hideAfterSeconds: Schemas.Float,\n font: Schemas.EnumNumber(Font, Font.F_SANS_SERIF),\n fontSize: Schemas.Optional(Schemas.Float),\n textAlign: Schemas.EnumNumber(AlignMode, AlignMode.TAM_MIDDLE_CENTER),\n }),\n [ActionType.HIDE_TEXT]: Schemas.Map({}),\n [ActionType.START_DELAY]: Schemas.Map({\n actions: Schemas.Array(Schemas.String),\n timeout: Schemas.Float,\n }),\n [ActionType.STOP_DELAY]: Schemas.Map({\n action: Schemas.String,\n }),\n [ActionType.START_LOOP]: Schemas.Map({\n actions: Schemas.Array(Schemas.String),\n interval: Schemas.Float,\n }),\n [ActionType.STOP_LOOP]: Schemas.Map({\n action: Schemas.String,\n }),\n [ActionType.CLONE_ENTITY]: Schemas.Map({\n position: Schemas.Vector3,\n }),\n [ActionType.REMOVE_ENTITY]: Schemas.Map({}),\n [ActionType.SHOW_IMAGE]: Schemas.Map({\n src: Schemas.String,\n align: Schemas.EnumNumber(AlignMode, AlignMode.TAM_MIDDLE_CENTER),\n height: Schemas.Float,\n width: Schemas.Float,\n hideAfterSeconds: Schemas.Optional(Schemas.Float),\n text: Schemas.Optional(Schemas.String),\n fontSize: Schemas.Optional(Schemas.Float),\n }),\n [ActionType.HIDE_IMAGE]: Schemas.Map({\n imageEntity: Schemas.Optional(Schemas.Int),\n }),\n [ActionType.DAMAGE]: Schemas.Map({\n radius: Schemas.Float,\n layer: Schemas.Optional(\n Schemas.EnumString(ProximityLayer, ProximityLayer.ALL),\n ),\n hits: Schemas.Optional(Schemas.Int),\n }),\n [ActionType.MOVE_PLAYER_HERE]: Schemas.Map({}),\n [ActionType.PLACE_ON_PLAYER]: Schemas.Map({}),\n [ActionType.ROTATE_AS_PLAYER]: Schemas.Map({}),\n [ActionType.PLACE_ON_CAMERA]: Schemas.Map({}),\n [ActionType.ROTATE_AS_CAMERA]: Schemas.Map({}),\n [ActionType.SET_POSITION]: Schemas.Map({\n x: Schemas.Float,\n y: Schemas.Float,\n z: Schemas.Float,\n relative: Schemas.Optional(Schemas.Boolean),\n }),\n [ActionType.SET_ROTATION]: Schemas.Map({\n x: Schemas.Float,\n y: Schemas.Float,\n z: Schemas.Float,\n relative: Schemas.Optional(Schemas.Boolean),\n }),\n [ActionType.SET_SCALE]: Schemas.Map({\n x: Schemas.Float,\n y: Schemas.Float,\n z: Schemas.Float,\n relative: Schemas.Optional(Schemas.Boolean),\n }),\n [ActionType.FOLLOW_PLAYER]: Schemas.Map({\n speed: Schemas.Float,\n x: Schemas.Boolean,\n y: Schemas.Boolean,\n z: Schemas.Boolean,\n minDistance: Schemas.Float,\n }),\n [ActionType.STOP_FOLLOWING_PLAYER]: Schemas.Map({}),\n [ActionType.RANDOM]: Schemas.Map({\n actions: Schemas.Array(Schemas.String),\n }),\n [ActionType.BATCH]: Schemas.Map({\n actions: Schemas.Array(Schemas.String),\n }),\n [ActionType.HEAL_PLAYER]: Schemas.Map({\n multiplier: Schemas.Int,\n }),\n [ActionType.CLAIM_AIRDROP]: Schemas.Map({}),\n}\n\nexport type ActionPayload<T extends ActionType = any> =\n T extends keyof typeof ActionSchemas\n ? (typeof ActionSchemas)[T] extends ISchema\n ? ReturnType<(typeof ActionSchemas)[T]['deserialize']>\n : {}\n : {}\n\nexport function getComponent<T>(componentName: string, engine: IEngine) {\n try {\n return engine.getComponent(\n componentName,\n ) as LastWriteWinElementSetComponentDefinition<T>\n } catch (error) {\n console.error(\n `Error using getComponent with componentName=\"${componentName}\"`,\n )\n throw error\n }\n}\n\nexport function getComponents(engine: IEngine) {\n return {\n Actions: getComponent<Actions>(ComponentName.ACTIONS, engine),\n States: getComponent<States>(ComponentName.STATES, engine),\n Counter: getComponent<Counter>(ComponentName.COUNTER, engine),\n Triggers: getComponent<Triggers>(ComponentName.TRIGGERS, engine),\n CounterBar: getComponent<CounterBar>(ComponentName.COUNTER_BAR, engine),\n AdminTools: getComponent<AdminTools>(ComponentName.ADMIN_TOOLS, engine),\n VideoScreen: getComponent<VideoScreen>(ComponentName.VIDEO_SCREEN, engine),\n Rewards: getComponent<Rewards>(ComponentName.REWARDS, engine),\n TextAnnouncements: getComponent<TextAnnouncements>(\n ComponentName.TEXT_ANNOUNCEMENTS,\n engine,\n ),\n VideoControlState: getComponent<VideoControlState>(\n ComponentName.VIDEO_CONTROL_STATE,\n engine,\n ),\n }\n}\n\nexport function createComponents(engine: IEngine) {\n const ActionTypes = engine.defineComponent(ComponentName.ACTION_TYPES, {\n value: Schemas.Array(\n Schemas.Map({\n type: Schemas.String,\n jsonSchema: Schemas.String,\n }),\n ),\n })\n\n const Actions = engine.defineComponent(ComponentName.ACTIONS, {\n id: Schemas.Int,\n value: Schemas.Array(\n Schemas.Map({\n name: Schemas.String,\n type: Schemas.String,\n jsonPayload: Schemas.String,\n allowedInBasicView: Schemas.Optional(Schemas.Boolean),\n basicViewId: Schemas.Optional(Schemas.String),\n default: Schemas.Optional(Schemas.Boolean),\n }),\n ),\n })\n\n const Counter = engine.defineComponent(ComponentName.COUNTER, {\n id: Schemas.Number,\n value: Schemas.Int,\n })\n\n const Triggers = engine.defineComponent(ComponentName.TRIGGERS, {\n value: Schemas.Array(\n Schemas.Map({\n type: Schemas.EnumString<TriggerType>(\n TriggerType,\n TriggerType.ON_INPUT_ACTION,\n ),\n conditions: Schemas.Optional(\n Schemas.Array(\n Schemas.Map({\n id: Schemas.Optional(Schemas.Int),\n type: Schemas.EnumString<TriggerConditionType>(\n TriggerConditionType,\n TriggerConditionType.WHEN_STATE_IS,\n ),\n value: Schemas.String,\n }),\n ),\n ),\n operation: Schemas.Optional(\n Schemas.EnumString<TriggerConditionOperation>(\n TriggerConditionOperation,\n TriggerConditionOperation.AND,\n ),\n ),\n actions: Schemas.Array(\n Schemas.Map({\n id: Schemas.Optional(Schemas.Int),\n name: Schemas.Optional(Schemas.String),\n }),\n ),\n basicViewId: Schemas.Optional(Schemas.String),\n }),\n ),\n })\n\n const States = engine.defineComponent(ComponentName.STATES, {\n id: Schemas.Number,\n value: Schemas.Array(Schemas.String),\n defaultValue: Schemas.Optional(Schemas.String),\n currentValue: Schemas.Optional(Schemas.String),\n previousValue: Schemas.Optional(Schemas.String),\n })\n\n const CounterBar = engine.defineComponent(ComponentName.COUNTER_BAR, {\n primaryColor: Schemas.Optional(Schemas.String),\n secondaryColor: Schemas.Optional(Schemas.String),\n maxValue: Schemas.Optional(Schemas.Float),\n })\n\n const VideoScreen = engine.defineComponent(ComponentName.VIDEO_SCREEN, {\n thumbnail: Schemas.String,\n defaultMediaSource: Schemas.EnumNumber<MediaSource>(\n MediaSource,\n MediaSource.VideoURL,\n ),\n defaultURL: Schemas.String,\n })\n\n const AdminTools = engine.defineComponent(ComponentName.ADMIN_TOOLS, {\n adminPermissions: Schemas.EnumString<AdminPermissions>(\n AdminPermissions,\n AdminPermissions.PUBLIC,\n ),\n authorizedAdminUsers: Schemas.Map({\n me: Schemas.Boolean,\n sceneOwners: Schemas.Boolean,\n allowList: Schemas.Boolean,\n adminAllowList: Schemas.Array(Schemas.String),\n }),\n moderationControl: Schemas.Map({\n isEnabled: Schemas.Boolean,\n kickCoordinates: Schemas.Map({\n x: Schemas.Number,\n y: Schemas.Number,\n z: Schemas.Number,\n }),\n allowNonOwnersManageAdminAllowList: Schemas.Boolean,\n }),\n textAnnouncementControl: Schemas.Map({\n isEnabled: Schemas.Boolean,\n playSoundOnEachAnnouncement: Schemas.Boolean,\n showAuthorOnEachAnnouncement: Schemas.Boolean,\n }),\n videoControl: Schemas.Map({\n isEnabled: Schemas.Boolean,\n disableVideoPlayersSound: Schemas.Boolean,\n showAuthorOnVideoPlayers: Schemas.Boolean,\n linkAllVideoPlayers: Schemas.Boolean,\n videoPlayers: Schemas.Optional(\n Schemas.Array(\n Schemas.Map({\n entity: Schemas.Int,\n customName: Schemas.String,\n }),\n ),\n ),\n }),\n smartItemsControl: Schemas.Map({\n isEnabled: Schemas.Boolean,\n linkAllSmartItems: Schemas.Boolean,\n smartItems: Schemas.Optional(\n Schemas.Array(\n Schemas.Map({\n entity: Schemas.Int,\n customName: Schemas.String,\n defaultAction: Schemas.String,\n }),\n ),\n ),\n }),\n rewardsControl: Schemas.Map({\n isEnabled: Schemas.Boolean,\n rewardItems: Schemas.Optional(\n Schemas.Array(\n Schemas.Map({\n entity: Schemas.Int,\n customName: Schemas.String,\n }),\n ),\n ),\n }),\n })\n\n const Rewards = engine.defineComponent(ComponentName.REWARDS, {\n campaignId: Schemas.String,\n dispenserKey: Schemas.String,\n testMode: Schemas.Boolean,\n })\n\n const TextAnnouncements = engine.defineComponent(\n ComponentName.TEXT_ANNOUNCEMENTS,\n {\n text: Schemas.String,\n author: Schemas.Optional(Schemas.String),\n id: Schemas.String,\n },\n )\n\n const VideoControlState = engine.defineComponent(\n ComponentName.VIDEO_CONTROL_STATE,\n {\n endsAt: Schemas.Optional(Schemas.Int64),\n /** @deprecated streamKey is deprecated and will be removed in a future version */\n streamKey: Schemas.Optional(Schemas.String),\n },\n )\n\n return {\n ActionTypes,\n Actions,\n Counter,\n Triggers,\n States,\n CounterBar,\n AdminTools,\n Rewards,\n TextAnnouncements,\n VideoControlState,\n VideoScreen,\n }\n}\n\nexport type EngineComponents = {\n Animator: AnimatorComponentDefinitionExtended\n Transform: TransformComponentExtended\n AudioSource: AudioSourceComponentDefinitionExtended\n AvatarAttach: LastWriteWinElementSetComponentDefinition<PBAvatarAttach>\n VisibilityComponent: LastWriteWinElementSetComponentDefinition<PBVisibilityComponent>\n GltfContainer: LastWriteWinElementSetComponentDefinition<PBGltfContainer>\n Material: MaterialComponentDefinitionExtended\n MeshRenderer: MeshRendererComponentDefinitionExtended\n VideoPlayer: LastWriteWinElementSetComponentDefinition<PBVideoPlayer>\n UiTransform: LastWriteWinElementSetComponentDefinition<PBUiTransform>\n UiText: LastWriteWinElementSetComponentDefinition<PBUiText>\n UiBackground: LastWriteWinElementSetComponentDefinition<PBUiBackground>\n UiInput: LastWriteWinElementSetComponentDefinition<PBUiInput>\n UiInputResult: LastWriteWinElementSetComponentDefinition<PBUiInputResult>\n UiCanvasInformation: LastWriteWinElementSetComponentDefinition<PBUiCanvasInformation>\n Billboard: LastWriteWinElementSetComponentDefinition<PBBillboard>\n Name: LastWriteWinElementSetComponentDefinition<NameType>\n Tween: LastWriteWinElementSetComponentDefinition<PBTween>\n TweenSequence: LastWriteWinElementSetComponentDefinition<PBTweenSequence>\n PointerEvents: LastWriteWinElementSetComponentDefinition<PBPointerEvents>\n NetworkEntity: typeof NetworkEntity\n SyncComponents: typeof SyncComponents\n}\n\nexport function initComponents(engine: IEngine) {\n // Add actions from this package\n const actionTypes = Object.values(ActionType)\n for (const type of actionTypes) {\n const actionType = type as ActionType\n addActionType(engine, actionType, ActionSchemas[actionType])\n }\n\n // Add counter to root entity\n const Counter = engine.getComponent(\n ComponentName.COUNTER,\n ) as LastWriteWinElementSetComponentDefinition<Counter>\n const counter = Counter.getOrCreateMutable(engine.RootEntity)\n counter.value = counter.value || 0\n\n const { VideoPlayer, Material } = getExplorerComponents(engine)\n initVideoPlayerComponents(engine, { VideoPlayer, Material })\n}\n\nfunction getVideoTexture({ material }: PBMaterial): VideoTexture | undefined {\n if (\n material?.$case === 'unlit' &&\n material.unlit.texture?.tex?.$case === 'videoTexture'\n ) {\n return material.unlit.texture.tex.videoTexture\n }\n\n return undefined\n}\n\nexport function initVideoPlayerComponentMaterial(\n entity: Entity,\n { Material }: Pick<EngineComponents, 'Material'>,\n material?: PBMaterial | null,\n) {\n if (!material || !material.material || material.material.$case !== 'unlit') {\n return null\n }\n\n Material.setBasicMaterial(entity, {\n ...material.material.unlit,\n texture: Material.Texture.Video({\n videoPlayerEntity: entity,\n }),\n })\n}\n\nfunction initVideoPlayerComponents(\n engine: IEngine,\n components: Pick<EngineComponents, 'Material' | 'VideoPlayer'>,\n) {\n function replaceVideoTexture() {\n const { Material, VideoPlayer } = components\n engine.removeSystem(replaceVideoTexture)\n for (const [entity, material] of engine.getEntitiesWith(\n Material,\n VideoPlayer,\n )) {\n const videoTexture = getVideoTexture(material)\n if (videoTexture?.videoPlayerEntity === engine.RootEntity) {\n initVideoPlayerComponentMaterial(entity, components, material)\n }\n }\n }\n engine.addSystem(replaceVideoTexture)\n}\n\nexport function getConditionTypesByComponentName(componentName: ComponentName) {\n switch (componentName) {\n case ComponentName.STATES: {\n return [\n TriggerConditionType.WHEN_STATE_IS,\n TriggerConditionType.WHEN_STATE_IS_NOT,\n TriggerConditionType.WHEN_PREVIOUS_STATE_IS,\n TriggerConditionType.WHEN_PREVIOUS_STATE_IS_NOT,\n ]\n }\n case ComponentName.COUNTER: {\n return [\n TriggerConditionType.WHEN_COUNTER_EQUALS,\n TriggerConditionType.WHEN_COUNTER_IS_GREATER_THAN,\n TriggerConditionType.WHEN_COUNTER_IS_LESS_THAN,\n ]\n }\n case ComponentName.ACTIONS: {\n return [\n TriggerConditionType.WHEN_DISTANCE_TO_PLAYER_LESS_THAN,\n TriggerConditionType.WHEN_DISTANCE_TO_PLAYER_GREATER_THAN,\n ]\n }\n default: {\n return []\n }\n }\n}\n\nexport type Components = ReturnType<typeof createComponents>\n\nexport type ActionTypesComponent = Components['ActionTypes']\nexport type ActionTypes = ReturnType<\n ActionTypesComponent['schema']['deserialize']\n>\n\nexport type ActionsComponent = Components['Actions']\nexport type Actions = ReturnType<ActionsComponent['schema']['deserialize']>\nexport type Action = Actions['value'][0]\n\nexport type CounterComponent = Components['Counter']\nexport type Counter = ReturnType<CounterComponent['schema']['deserialize']>\n\nexport type CounterBarComponent = Components['CounterBar']\nexport type CounterBar = ReturnType<\n CounterBarComponent['schema']['deserialize']\n>\n\nexport type TriggersComponent = Components['Triggers']\nexport type Triggers = ReturnType<TriggersComponent['schema']['deserialize']>\nexport type Trigger = Triggers['value'][0]\nexport type TriggerAction = Trigger['actions'][0]\nexport type TriggerCondition = Exclude<Trigger['conditions'], undefined>[0]\n\nexport type StatesComponent = Components['States']\nexport type States = ReturnType<StatesComponent['schema']['deserialize']>\n\nexport type AdminToolsComponent = Components['AdminTools']\nexport type AdminTools = ReturnType<\n AdminToolsComponent['schema']['deserialize']\n>\n\nexport type VideoScreenComponent = Components['VideoScreen']\nexport type VideoScreen = ReturnType<\n VideoScreenComponent['schema']['deserialize']\n>\n\nexport type RewardsComponent = Components['Rewards']\nexport type Rewards = ReturnType<RewardsComponent['schema']['deserialize']>\n\nexport type TextAnnouncementsComponent = Components['TextAnnouncements']\nexport type TextAnnouncements = ReturnType<\n TextAnnouncementsComponent['schema']['deserialize']\n>\n\nexport type VideoControlStateComponent = Components['VideoControlState']\nexport type VideoControlState = ReturnType<\n VideoControlStateComponent['schema']['deserialize']\n>\n", "import type { IEngine } from '@dcl/ecs';\nimport { Schemas } from '@dcl/ecs/dist/schemas';\n\nexport enum SceneAgeRating {\n Teen = 'T',\n Adult = 'A',\n}\n\nexport enum SceneCategory {\n ART = 'art',\n GAME = 'game',\n CASINO = 'casino',\n SOCIAL = 'social',\n MUSIC = 'music',\n FASHION = 'fashion',\n CRYPTO = 'crypto',\n EDUCATION = 'education',\n SHOP = 'shop',\n BUSINESS = 'business',\n SPORTS = 'sports',\n}\n\nexport const Coords = Schemas.Map({\n x: Schemas.Int,\n y: Schemas.Int,\n});\n\nexport enum TransitionMode {\n TM_FORWARD = 0,\n TM_BACKWARD = 1,\n}\n\n//SceneMetadata component is now versioned, to add new versions you must need to keep the previous properties and add the new ones\nexport const SceneMetadataV0 = {\n name: Schemas.Optional(Schemas.String),\n description: Schemas.Optional(Schemas.String),\n thumbnail: Schemas.Optional(Schemas.String),\n ageRating: Schemas.Optional(Schemas.EnumString(SceneAgeRating, SceneAgeRating.Teen)),\n categories: Schemas.Optional(\n Schemas.Array(Schemas.EnumString(SceneCategory, SceneCategory.GAME)),\n ),\n author: Schemas.Optional(Schemas.String),\n email: Schemas.Optional(Schemas.String),\n tags: Schemas.Optional(Schemas.Array(Schemas.String)),\n layout: Schemas.Map({\n base: Coords,\n parcels: Schemas.Array(Coords),\n }),\n silenceVoiceChat: Schemas.Optional(Schemas.Boolean),\n disablePortableExperiences: Schemas.Optional(Schemas.Boolean),\n spawnPoints: Schemas.Optional(\n Schemas.Array(\n Schemas.Map({\n name: Schemas.String,\n default: Schemas.Optional(Schemas.Boolean),\n position: Schemas.Map({\n x: Schemas.OneOf({\n single: Schemas.Int,\n range: Schemas.Array(Schemas.Int),\n }),\n y: Schemas.OneOf({\n single: Schemas.Int,\n range: Schemas.Array(Schemas.Int),\n }),\n z: Schemas.OneOf({\n single: Schemas.Int,\n range: Schemas.Array(Schemas.Int),\n }),\n }),\n cameraTarget: Schemas.Optional(\n Schemas.Map({\n x: Schemas.Int,\n y: Schemas.Int,\n z: Schemas.Int,\n }),\n ),\n }),\n ),\n ),\n};\n\nexport const SceneMetadataV1 = {\n version: Schemas.Optional(Schemas.Int),\n name: Schemas.Optional(Schemas.String),\n description: Schemas.Optional(Schemas.String),\n thumbnail: Schemas.Optional(Schemas.String),\n ageRating: Schemas.Optional(Schemas.EnumString(SceneAgeRating, SceneAgeRating.Teen)),\n categories: Schemas.Optional(\n Schemas.Array(Schemas.EnumString(SceneCategory, SceneCategory.GAME)),\n ),\n author: Schemas.Optional(Schemas.String),\n email: Schemas.Optional(Schemas.String),\n tags: Schemas.Optional(Schemas.Array(Schemas.String)),\n layout: Schemas.Map({\n base: Coords,\n parcels: Schemas.Array(Coords),\n }),\n silenceVoiceChat: Schemas.Optional(Schemas.Boolean),\n disablePortableExperiences: Schemas.Optional(Schemas.Boolean),\n skyboxConfig: Schemas.Optional(\n Schemas.Map({\n fixedTime: Schemas.Optional(Schemas.Int),\n transitionMode: Schemas.Optional(\n Schemas.EnumNumber(TransitionMode, TransitionMode.TM_FORWARD),\n ),\n }),\n ),\n spawnPoints: Schemas.Optional(\n Schemas.Array(\n Schemas.Map({\n name: Schemas.String,\n default: Schemas.Optional(Schemas.Boolean),\n position: Schemas.Map({\n x: Schemas.OneOf({\n single: Schemas.Int,\n range: Schemas.Array(Schemas.Int),\n }),\n y: Schemas.OneOf({\n single: Schemas.Int,\n range: Schemas.Array(Schemas.Int),\n }),\n z: Schemas.OneOf({\n single: Schemas.Int,\n range: Schemas.Array(Schemas.Int),\n }),\n }),\n cameraTarget: Schemas.Optional(\n Schemas.Map({\n x: Schemas.Int,\n y: Schemas.Int,\n z: Schemas.Int,\n }),\n ),\n }),\n ),\n ),\n};\n\nconst SceneMetadata = 'inspector::SceneMetadata';\n\nexport const VERSIONS = [\n { key: SceneMetadata, value: SceneMetadataV0 },\n { key: `${SceneMetadata}-v1`, value: SceneMetadataV1 },\n];\n\nexport function getLatestSceneComponentVersion() {\n return VERSIONS[VERSIONS.length - 1];\n}\n\nexport function defineSceneComponents(engine: IEngine) {\n const components = VERSIONS.map(({ key, value }) => {\n return engine.defineComponent(key, value);\n });\n\n return components;\n}\n\nexport function removeOldSceneVersions(engine: IEngine, currentSceneVersion: string) {\n VERSIONS.forEach(({ key }) => {\n if (key !== currentSceneVersion) {\n engine.removeComponentDefinition(key);\n }\n });\n}\n", "import { ComponentName } from '@dcl/asset-packs';\nimport { getLatestSceneComponentVersion } from './SceneMetadata';\n\nexport enum CoreComponents {\n ANIMATOR = 'core::Animator',\n AUDIO_SOURCE = 'core::AudioSource',\n AUDIO_STREAM = 'core::AudioStream',\n AVATAR_ATTACH = 'core::AvatarAttach',\n GLTF_CONTAINER = 'core::GltfContainer',\n NETWORK_ENTITY = 'core-schema::Network-Entity',\n MATERIAL = 'core::Material',\n MESH_COLLIDER = 'core::MeshCollider',\n MESH_RENDERER = 'core::MeshRenderer',\n NFT_SHAPE = 'core::NftShape',\n POINTER_EVENTS = 'core::PointerEvents',\n SYNC_COMPONENTS = 'core-schema::Sync-Components',\n TEXT_SHAPE = 'core::TextShape',\n TRANSFORM = 'core::Transform',\n TWEEN = 'core::Tween',\n TWEEN_SEQUENCE = 'core::TweenSequence',\n VIDEO_PLAYER = 'core::VideoPlayer',\n VISIBILITY_COMPONENT = 'core::VisibilityComponent',\n LIGHT_SOURCE = 'core::LightSource',\n GLTF_NODE_MODIFIERS = 'core::GltfNodeModifiers',\n}\n\nexport const EditorComponentNames = {\n Selection: 'inspector::Selection',\n Scene: getLatestSceneComponentVersion().key,\n Nodes: 'inspector::Nodes',\n ActionTypes: ComponentName.ACTION_TYPES,\n Actions: ComponentName.ACTIONS,\n Counter: ComponentName.COUNTER,\n CounterBar: ComponentName.COUNTER_BAR,\n Triggers: ComponentName.TRIGGERS,\n States: ComponentName.STATES,\n TransformConfig: 'inspector::TransformConfig',\n Hide: 'inspector::Hide',\n Lock: 'inspector::Lock',\n Config: 'inspector::Config',\n Ground: 'inspector::Ground',\n Tile: 'inspector::Tile',\n CustomAsset: 'inspector::CustomAsset',\n AdminTools: ComponentName.ADMIN_TOOLS,\n Rewards: ComponentName.REWARDS,\n VideoScreen: ComponentName.VIDEO_SCREEN,\n};\n\nexport type AllComponentsType =\n | CoreComponents\n | (typeof EditorComponentNames)[keyof typeof EditorComponentNames];\n\nexport const AllComponents = {\n ...CoreComponents,\n ...EditorComponentNames,\n};\n", "import type { FileSystemInterface } from '../types';\n\nexport async function getFilesInDirectory(\n fs: FileSystemInterface,\n dirPath: string,\n files: string[],\n recursive: boolean = true,\n ignore: string[] = [], // This functionality can be extended, now only 'absolute' path can be ignored\n): Promise<string[]> {\n try {\n const currentDirFiles = await fs.readdir(dirPath);\n for (const currentPath of currentDirFiles) {\n if (ignore.includes(currentPath.name)) continue;\n\n const slashIfRequire = (dirPath.length && !dirPath.endsWith('/') && '/') || '';\n const fullPath = dirPath + slashIfRequire + currentPath.name;\n\n if (currentPath.isDirectory && recursive) {\n await getFilesInDirectory(fs, fullPath, files, recursive);\n } else {\n files.push(fullPath);\n }\n }\n return files;\n } catch (_) {\n return [];\n }\n}\n\nexport const DIRECTORY = {\n ASSETS: 'assets',\n SCENE: 'scene',\n THUMBNAILS: 'thumbnails',\n CUSTOM: 'custom',\n ASSET_PACKS: 'asset-packs',\n};\n\nexport const EXTENSIONS = [\n '.glb',\n '.png',\n '.composite',\n '.composite.bin',\n '.gltf',\n '.jpg',\n '.mp3',\n '.ogg',\n '.wav',\n '.mp4',\n];\n\nexport function withAssetDir(filePath: string = '') {\n return filePath ? `${DIRECTORY.ASSETS}/${filePath}` : DIRECTORY.ASSETS;\n}\n\nexport function withAssetPacksDir(filePath: string) {\n return withAssetDir(`${DIRECTORY.ASSET_PACKS}/${filePath}`);\n}\n\nexport function isFileInAssetDir(filePath: string = '') {\n return filePath.startsWith(DIRECTORY.ASSETS);\n}\n\nexport function getCurrentCompositePath() {\n return withAssetDir(`${DIRECTORY.SCENE}/main.composite`);\n}\n\nexport function transformBinaryToBase64Resource(content: Uint8Array): string {\n return `data:image/png;base64,${Buffer.from(content).toString('base64')}`;\n}\n\nexport function transformBase64ResourceToBinary(base64Resource: string): Buffer {\n const header = 'data:image/png;base64,';\n return Buffer.from(base64Resource.slice(header.length), 'base64');\n}\n", "import type { FileSystemInterface } from '../types';\n\nasync function upsertAsset(fs: FileSystemInterface, path: string, content: Uint8Array | null) {\n if (content) {\n await fs.writeFile(path, Buffer.from(content));\n } else {\n await fs.rm(path);\n }\n}\n\nexport default upsertAsset;\n", "import fetch from 'node-fetch';\nimport type { FileSystemInterface } from '../../types';\nimport { getConfig } from '../../../logic/config';\n\nexport async function installBin(fs: FileSystemInterface) {\n const config = getConfig();\n if (!config.binIndexJsUrl) {\n return;\n }\n\n console.log('Installing binaries');\n const bin = await fetch(config.binIndexJsUrl).then(resp => resp.text());\n await fs.writeFile('bin/index.js', Buffer.from(bin));\n}\n", "{\n \"name\": \"@dcl/asset-packs\",\n \"version\": \"2.6.1\",\n \"description\": \"\",\n \"main\": \"dist/definitions.js\",\n \"typings\": \"dist/definitions.d.ts\",\n \"scripts\": {\n \"download\": \"ts-node --project tsconfig.scripts.json ./scripts/download.ts\",\n \"validate\": \"ts-node --project tsconfig.scripts.json ./scripts/validate.ts\",\n \"upload\": \"ts-node --project tsconfig.scripts.json ./scripts/upload.ts\",\n \"start\": \"concurrently \\\"npm run start:js\\\" \\\"npm run start:lib\\\" \\\"npm run start:catalog\\\"\",\n \"start:js\": \"sdk-commands start --no-browser\",\n \"start:lib\": \"npm run build:lib -- --watch\",\n \"start:catalog\": \"nodemon --watch packs -x \\\"npm run build:catalog\\\"\",\n \"start:dev\": \"concurrently \\\"npm run start:js -- --data-layer\\\" \\\"npm run start:lib\\\" \\\"npm run start:catalog\\\"\",\n \"build:js\": \"sdk-commands build\",\n \"build:lib\": \"tsc --project tsconfig.lib.json\",\n \"build:catalog\": \"ts-node --project tsconfig.scripts.json ./scripts/catalog.ts\",\n \"build\": \"npm run build:js && npm run build:lib && npm run build:catalog\",\n \"migrate\": \"ts-node --project tsconfig.scripts.json ./scripts/migrate.ts\"\n },\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"git+https://github.com/decentraland/asset-packs.git\"\n },\n \"keywords\": [],\n \"author\": \"\",\n \"license\": \"ISC\",\n \"bugs\": {\n \"url\": \"https://github.com/decentraland/asset-packs/issues\"\n },\n \"homepage\": \"https://github.com/decentraland/asset-packs#readme\",\n \"devDependencies\": {\n \"@aws-sdk/client-s3\": \"^3.405.0\",\n \"@aws-sdk/lib-storage\": \"^3.405.0\",\n \"@dcl/ecs\": \"^7.8.1-14131012904.commit-6157fcb\",\n \"@dcl/hashing\": \"^3.0.4\",\n \"@dcl/js-runtime\": \"7.8.0\",\n \"@dcl/react-ecs\": \"^7.8.1-14131012904.commit-6157fcb\",\n \"@dcl/sdk-commands\": \"^7.7.6-13418365922.commit-c459a2f\",\n \"@types/mime-types\": \"^2.1.1\",\n \"@types/node-fetch\": \"^2.6.4\",\n \"concurrently\": \"^8.2.1\",\n \"dotenv\": \"^16.3.1\",\n \"fp-future\": \"^1.0.1\",\n \"mime-types\": \"^2.1.35\",\n \"node-fetch\": \"^2.7.0\",\n \"nodemon\": \"^3.0.1\",\n \"p-queue\": \"^7.4.1\",\n \"prettier\": \"^3.0.2\",\n \"rimraf\": \"^5.0.1\",\n \"serve\": \"^14.2.1\",\n \"serve-handler\": \"^6.1.5\",\n \"ts-node\": \"^10.9.1\",\n \"typescript\": \"^5.1.6\"\n },\n \"dependencies\": {\n \"@dcl-sdk/utils\": \"^1.3.0\",\n \"@types/glob\": \"^8.1.0\",\n \"glob\": \"^11.0.0\",\n \"mitt\": \"^3.0.1\"\n },\n \"prettier\": {\n \"singleQuote\": true,\n \"semi\": false,\n \"printWidth\": 80\n },\n \"commit\": \"b8ef05acc10848cc2b0bb5654ff3567493bc2b79\"\n}\n", "import { version } from '@dcl/asset-packs/package.json';\n\nexport type InspectorConfig = {\n dataLayerRpcWsUrl: string | null;\n dataLayerRpcParentUrl: string | null;\n binIndexJsUrl: string | null;\n disableSmartItems: boolean;\n contentUrl: string;\n segmentAppId: string | null;\n segmentUserId: string | null;\n segmentKey: string | null;\n projectId: string | null;\n catalystBaseUrl: string | null;\n};\n\nexport type GlobalWithConfig = typeof globalThis & {\n InspectorConfig?: Partial<InspectorConfig>;\n};\n\nexport const CONTENT_URL = version.includes('commit')\n ? 'https://builder-items.decentraland.zone'\n : 'https://builder-items.decentraland.org';\n\nexport const CATALYST_BASE_URL = 'https://peer.decentraland.org';\n\nexport function getConfig(): InspectorConfig {\n const config = (globalThis as GlobalWithConfig).InspectorConfig;\n const params = new URLSearchParams(globalThis?.location?.search || '');\n return {\n dataLayerRpcWsUrl:\n params.get('ws') || params.get('dataLayerRpcWsUrl') || config?.dataLayerRpcWsUrl || null,\n dataLayerRpcParentUrl:\n params.get('parent') ||\n params.get('dataLayerRpcParentUrl') ||\n config?.dataLayerRpcParentUrl ||\n null,\n binIndexJsUrl: params.get('binIndexJsUrl') || config?.binIndexJsUrl || null,\n disableSmartItems: params.has('disableSmartItems') || !!config?.disableSmartItems,\n contentUrl: params.get('contentUrl') || config?.contentUrl || CONTENT_URL,\n segmentAppId: params.get('segmentAppId') || config?.segmentAppId || null,\n segmentUserId: params.get('segmentUserId') || config?.segmentUserId || null,\n segmentKey: params.get('segmentKey') || config?.segmentKey || null,\n projectId: params.get('projectId') || config?.projectId || null,\n catalystBaseUrl: params.get('catalystBaseUrl') || config?.catalystBaseUrl || CATALYST_BASE_URL,\n };\n}\n", "import { Schemas } from '@dcl/ecs';\nimport type { MapResult } from '@dcl/ecs/dist/schemas/Map';\nimport type { AllComponentsType } from './types';\nimport { AllComponents } from './types';\n\nenum TransformOnError {\n FAIL = 'fail',\n SKIP = 'skip',\n NOOP = 'noop',\n}\n\nexport const ConfigComponentSchema = {\n isBasicViewEnabled: Schemas.Boolean,\n // @deprecated - Legacy property for backward compatibility\n componentName: Schemas.String,\n // @deprecated - Legacy property for backward compatibility\n fields: Schemas.Array(\n Schemas.Map({\n name: Schemas.String,\n type: Schemas.EnumString<AllComponentsType>(AllComponents, AllComponents.Actions),\n layout: Schemas.Optional(Schemas.String),\n basicViewId: Schemas.Optional(Schemas.String),\n }),\n ),\n // @deprecated - Legacy property for backward compatibility\n assetId: Schemas.Optional(Schemas.String),\n\n // V2 properties\n label: Schemas.Optional(Schemas.String),\n sections: Schemas.Optional(\n Schemas.Array(\n Schemas.Map({\n id: Schemas.String,\n label: Schemas.Optional(Schemas.String),\n items: Schemas.Array(\n Schemas.Map({\n component: Schemas.String,\n widget: Schemas.String,\n label: Schemas.Optional(Schemas.String),\n type: Schemas.Optional(Schemas.String),\n path: Schemas.Optional(Schemas.String),\n basicViewId: Schemas.Optional(Schemas.String),\n // Additional props for the widget, we should make all of them optional\n props: Schemas.Optional(\n Schemas.Map({\n basic: Schemas.Optional(Schemas.Boolean),\n }),\n ),\n constraints: Schemas.Optional(\n Schemas.Map({\n min: Schemas.Optional(Schemas.Number),\n max: Schemas.Optional(Schemas.Number),\n minExclusive: Schemas.Optional(Schemas.Number),\n maxExclusive: Schemas.Optional(Schemas.Number),\n step: Schemas.Optional(Schemas.Number),\n multipleOf: Schemas.Optional(Schemas.Number),\n minLength: Schemas.Optional(Schemas.Number),\n maxLength: Schemas.Optional(Schemas.Number),\n pattern: Schemas.Optional(Schemas.String),\n format: Schemas.Optional(Schemas.String),\n default: Schemas.Optional(Schemas.String),\n }),\n ),\n transform: Schemas.Optional(\n Schemas.Map({\n in: Schemas.Optional(\n Schemas.Map({\n steps: Schemas.Array(\n Schemas.Map({\n op: Schemas.String,\n onError: Schemas.Optional(\n Schemas.EnumString<TransformOnError>(\n TransformOnError,\n TransformOnError.NOOP,\n ),\n ),\n }),\n ),\n }),\n ),\n out: Schemas.Optional(\n Schemas.Map({\n steps: Schemas.Array(\n Schemas.Map({\n op: Schemas.String,\n onError: Schemas.Optional(\n Schemas.EnumString<TransformOnError>(\n TransformOnError,\n TransformOnError.NOOP,\n ),\n ),\n }),\n ),\n }),\n ),\n }),\n ),\n dataSource: Schemas.Optional(\n Schemas.Map({\n kind: Schemas.String,\n // [key: string]: unknown // TODO: Define a better dataSource schema to get data from components or other sources\n }),\n ),\n }),\n ),\n columns: Schemas.Optional(Schemas.Number),\n helpTooltip: Schemas.Optional(\n Schemas.Map({\n text: Schemas.String,\n link: Schemas.Optional(Schemas.String),\n }),\n ),\n }),\n ),\n ),\n helpTooltip: Schemas.Optional(\n Schemas.Map({\n text: Schemas.String,\n link: Schemas.Optional(Schemas.String),\n }),\n ),\n version: Schemas.Optional(Schemas.Number),\n};\n\nexport type ConfigComponentType = MapResult<typeof ConfigComponentSchema>;\n", "import type {\n ComponentDefinition,\n Entity,\n IEngine,\n LastWriteWinElementSetComponentDefinition,\n} from '@dcl/ecs';\nimport { Schemas } from '@dcl/ecs';\nimport * as components from '@dcl/ecs/dist/components';\nimport type {\n States,\n ActionTypes,\n Actions,\n Triggers,\n Counter,\n CounterBar,\n AdminTools,\n Rewards,\n VideoScreen,\n} from '@dcl/asset-packs';\nimport { createComponents as createAssetPacksComponents } from '@dcl/asset-packs';\nimport type { Layout } from '../../utils/layout';\nimport type { GizmoType } from '../../utils/gizmo';\nimport type { TransformConfig } from './TransformConfig';\nimport type { TransitionMode } from './SceneMetadata';\nimport {\n Coords,\n defineSceneComponents,\n getLatestSceneComponentVersion,\n SceneAgeRating,\n SceneCategory,\n} from './SceneMetadata';\nimport type { ConfigComponentType } from './Config';\nimport { ConfigComponentSchema } from './Config';\nimport { EditorComponentNames as BaseEditorComponentNames } from './types';\n\nexport { SceneAgeRating, SceneCategory };\nexport { CoreComponents, AllComponentsType } from './types';\n\n// Override the Scene property with the dynamic value\nexport const EditorComponentNames = {\n ...BaseEditorComponentNames,\n Scene: getLatestSceneComponentVersion().key,\n};\n\nexport type Component<T = unknown> = ComponentDefinition<T>;\nexport type Node = { entity: Entity; open?: boolean; children: Entity[] };\n\nexport type SceneSpawnPointCoord =\n | { $case: 'single'; value: number }\n | { $case: 'range'; value: number[] };\n\nexport type SceneSpawnPoint = {\n name: string;\n default?: boolean;\n position: {\n x: SceneSpawnPointCoord;\n y: SceneSpawnPointCoord;\n z: SceneSpawnPointCoord;\n };\n cameraTarget?: {\n x: number;\n y: number;\n z: number;\n };\n};\n\nexport type SceneComponent = {\n name?: string;\n description?: string;\n skyboxConfig?: {\n fixedTime?: number;\n transitionMode?: TransitionMode;\n };\n thumbnail?: string;\n ageRating?: SceneAgeRating;\n main?: string;\n categories?: SceneCategory[];\n author?: string;\n email?: string;\n tags?: string[];\n layout: Layout;\n silenceVoiceChat?: boolean;\n disablePortableExperiences?: boolean;\n spawnPoints?: SceneSpawnPoint[];\n};\n\n// eslint-disable-next-line @typescript-eslint/ban-types\nexport type GroundComponent = {};\n// eslint-disable-next-line @typescript-eslint/ban-types\nexport type TileComponent = {};\n\nexport type CustomAssetComponent = {\n assetId: string;\n};\n\nexport type EditorComponentsTypes = {\n Selection: { gizmo: GizmoType };\n Scene: SceneComponent;\n Nodes: { value: Node[] };\n TransformConfig: TransformConfig;\n ActionTypes: ActionTypes;\n Actions: Actions;\n Triggers: Triggers;\n States: States;\n Counter: Counter;\n Hide: { value: boolean };\n Lock: { value: boolean };\n CounterBar: CounterBar;\n Config: ConfigComponentType;\n Ground: GroundComponent;\n Tile: TileComponent;\n CustomAsset: CustomAssetComponent;\n AdminTools: AdminTools;\n VideoScreen: VideoScreen;\n Rewards: Rewards;\n};\n\nexport type EditorComponents = {\n Selection: LastWriteWinElementSetComponentDefinition<EditorComponentsTypes['Selection']>;\n Scene: LastWriteWinElementSetComponentDefinition<EditorComponentsTypes['Scene']>;\n Nodes: LastWriteWinElementSetComponentDefinition<EditorComponentsTypes['Nodes']>;\n TransformConfig: LastWriteWinElementSetComponentDefinition<\n EditorComponentsTypes['TransformConfig']\n >;\n ActionTypes: LastWriteWinElementSetComponentDefinition<EditorComponentsTypes['ActionTypes']>;\n Actions: LastWriteWinElementSetComponentDefinition<EditorComponentsTypes['Actions']>;\n Counter: LastWriteWinElementSetComponentDefinition<EditorComponentsTypes['Counter']>;\n Triggers: LastWriteWinElementSetComponentDefinition<EditorComponentsTypes['Triggers']>;\n States: LastWriteWinElementSetComponentDefinition<EditorComponentsTypes['States']>;\n Hide: LastWriteWinElementSetComponentDefinition<EditorComponentsTypes['Hide']>;\n Lock: LastWriteWinElementSetComponentDefinition<EditorComponentsTypes['Lock']>;\n CounterBar: LastWriteWinElementSetComponentDefinition<EditorComponentsTypes['CounterBar']>;\n Config: LastWriteWinElementSetComponentDefinition<EditorComponentsTypes['Config']>;\n Ground: LastWriteWinElementSetComponentDefinition<EditorComponentsTypes['Ground']>;\n Tile: LastWriteWinElementSetComponentDefinition<EditorComponentsTypes['Tile']>;\n CustomAsset: LastWriteWinElementSetComponentDefinition<EditorComponentsTypes['CustomAsset']>;\n AdminTools: LastWriteWinElementSetComponentDefinition<EditorComponentsTypes['AdminTools']>;\n VideoScreen: LastWriteWinElementSetComponentDefinition<EditorComponentsTypes['VideoScreen']>;\n Rewards: LastWriteWinElementSetComponentDefinition<EditorComponentsTypes['Rewards']>;\n};\n\nexport type SdkComponents = {\n Animator: ReturnType<typeof components.Animator>;\n AudioSource: ReturnType<typeof components.AudioSource>;\n AudioStream: ReturnType<typeof components.AudioStream>;\n AvatarAttach: ReturnType<typeof components.AvatarAttach>;\n Billboard: ReturnType<typeof components.Billboard>;\n GltfContainer: ReturnType<typeof components.GltfContainer>;\n Material: ReturnType<typeof components.Material>;\n MeshCollider: ReturnType<typeof components.MeshCollider>;\n MeshRenderer: ReturnType<typeof components.MeshRenderer>;\n Name: ReturnType<typeof components.Name>;\n NetworkEntity: ReturnType<typeof components.NetworkEntity>;\n NftShape: ReturnType<typeof components.NftShape>;\n PointerEvents: ReturnType<typeof components.PointerEvents>;\n SyncComponents: ReturnType<typeof components.SyncComponents>;\n TextShape: ReturnType<typeof components.TextShape>;\n Transform: ReturnType<typeof components.Transform>;\n Tween: ReturnType<typeof components.Tween>;\n TweenSequence: ReturnType<typeof components.TweenSequence>;\n VideoPlayer: ReturnType<typeof components.VideoPlayer>;\n VisibilityComponent: ReturnType<typeof components.VisibilityComponent>;\n Tags: ReturnType<typeof components.Tags>;\n LightSource: ReturnType<typeof components.LightSource>;\n GltfNodeModifiers: ReturnType<typeof components.GltfNodeModifiers>;\n};\n\nexport function createComponents(engine: IEngine): SdkComponents {\n const Animator = components.Animator(engine);\n const AudioSource = components.AudioSource(engine);\n const AudioStream = components.AudioStream(engine);\n const AvatarAttach = components.AvatarAttach(engine);\n const Billboard = components.Billboard(engine);\n const GltfContainer = components.GltfContainer(engine);\n const Material = components.Material(engine);\n const MeshCollider = components.MeshCollider(engine);\n const MeshRenderer = components.MeshRenderer(engine);\n const Name = components.Name(engine);\n const NetworkEntity = components.NetworkEntity(engine);\n const NftShape = components.NftShape(engine);\n const PointerEvents = components.PointerEvents(engine);\n const SyncComponents = components.SyncComponents(engine);\n const TextShape = components.TextShape(engine);\n const Transform = components.Transform(engine);\n const Tween = components.Tween(engine);\n const TweenSequence = components.TweenSequence(engine);\n const VideoPlayer = components.VideoPlayer(engine);\n const VisibilityComponent = components.VisibilityComponent(engine);\n const Tags = components.Tags(engine);\n const LightSource = components.LightSource(engine);\n const GltfNodeModifiers = components.GltfNodeModifiers(engine);\n\n return {\n Animator,\n AudioSource,\n AudioStream,\n AvatarAttach,\n Billboard,\n GltfContainer,\n Material,\n MeshCollider,\n MeshRenderer,\n Name,\n NetworkEntity,\n NftShape,\n PointerEvents,\n SyncComponents,\n Tags,\n TextShape,\n Transform,\n Tween,\n TweenSequence,\n VideoPlayer,\n VisibilityComponent,\n LightSource,\n GltfNodeModifiers,\n };\n}\n\n/* istanbul ignore next */\nexport function createEditorComponents(engine: IEngine): EditorComponents {\n const Selection = engine.defineComponent(EditorComponentNames.Selection, {\n gizmo: Schemas.Int,\n });\n\n // legacy component\n // we define the schema of the legacy component for retrocompat purposes\n engine.defineComponent('inspector::Scene', {\n layout: Schemas.Map({\n base: Coords,\n parcels: Schemas.Array(Coords),\n }),\n });\n\n const Scene = defineSceneComponents(engine).pop() as ReturnType<typeof defineSceneComponents>[0];\n\n const Nodes = engine.defineComponent(EditorComponentNames.Nodes, {\n value: Schemas.Array(\n Schemas.Map({\n entity: Schemas.Entity,\n open: Schemas.Optional(Schemas.Boolean),\n children: Schemas.Array(Schemas.Entity),\n }),\n ),\n });\n\n const {\n ActionTypes,\n Actions,\n Counter,\n Triggers,\n States,\n CounterBar,\n AdminTools,\n Rewards,\n VideoScreen,\n } = createAssetPacksComponents(engine as any);\n\n const TransformConfig = engine.defineComponent(EditorComponentNames.TransformConfig, {\n porportionalScaling: Schemas.Optional(Schemas.Boolean),\n });\n\n const Hide = engine.defineComponent(EditorComponentNames.Hide, {\n value: Schemas.Boolean,\n });\n\n const Lock = engine.defineComponent(EditorComponentNames.Lock, {\n value: Schemas.Boolean,\n });\n\n const Config = engine.defineComponent(EditorComponentNames.Config, ConfigComponentSchema);\n\n const Ground = engine.defineComponent(EditorComponentNames.Ground, {});\n const Tile = engine.defineComponent(EditorComponentNames.Tile, {});\n const CustomAsset = engine.defineComponent(EditorComponentNames.CustomAsset, {\n assetId: Schemas.String,\n });\n\n return {\n Selection,\n Scene,\n Nodes,\n TransformConfig,\n Hide,\n Lock,\n Config,\n ActionTypes: ActionTypes as unknown as LastWriteWinElementSetComponentDefinition<\n EditorComponentsTypes['ActionTypes']\n >,\n Actions: Actions as unknown as LastWriteWinElementSetComponentDefinition<\n EditorComponentsTypes['Actions']\n >,\n Counter: Counter as unknown as LastWriteWinElementSetComponentDefinition<\n EditorComponentsTypes['Counter']\n >,\n Triggers: Triggers as unknown as LastWriteWinElementSetComponentDefinition<\n EditorComponentsTypes['Triggers']\n >,\n States: States as unknown as LastWriteWinElementSetComponentDefinition<\n EditorComponentsTypes['States']\n >,\n CounterBar: CounterBar as unknown as LastWriteWinElementSetComponentDefinition<\n EditorComponentsTypes['CounterBar']\n >,\n Ground: Ground as unknown as LastWriteWinElementSetComponentDefinition<\n EditorComponentsTypes['Ground']\n >,\n Tile: Tile as unknown as LastWriteWinElementSetComponentDefinition<\n EditorComponentsTypes['Tile']\n >,\n CustomAsset: CustomAsset as unknown as LastWriteWinElementSetComponentDefinition<\n EditorComponentsTypes['CustomAsset']\n >,\n AdminTools: AdminTools as unknown as LastWriteWinElementSetComponentDefinition<\n EditorComponentsTypes['AdminTools']\n >,\n VideoScreen: VideoScreen as unknown as LastWriteWinElementSetComponentDefinition<\n EditorComponentsTypes['VideoScreen']\n >,\n Rewards: Rewards as unknown as LastWriteWinElementSetComponentDefinition<\n EditorComponentsTypes['Rewards']\n >,\n };\n}\n", "export interface ErrorContext {\n provider?: string;\n transaction?: string;\n operation?: string;\n component?: string;\n entity?: number;\n}\n\nexport class StateManagerError extends Error {\n constructor(\n message: string,\n public readonly context: ErrorContext,\n public readonly originalError?: Error,\n ) {\n super(message);\n this.name = 'StateManagerError';\n }\n}\n\nexport class ErrorHandler {\n private static formatContext(context: ErrorContext): string {\n const parts = [];\n if (context.provider) parts.push(`provider:${context.provider}`);\n if (context.transaction) parts.push(`tx:${context.transaction.slice(0, 8)}`);\n if (context.operation) parts.push(`op:${context.operation}`);\n if (context.component) parts.push(`comp:${context.component}`);\n if (context.entity !== undefined) parts.push(`entity:${context.entity}`);\n return parts.join(' ');\n }\n\n static handleError(message: string, context: ErrorContext, error?: Error): void {\n const contextStr = this.formatContext(context);\n const fullMessage = `${message} [${contextStr}]`;\n\n if (error) {\n console.error(fullMessage, error);\n } else {\n console.error(fullMessage);\n }\n }\n\n static createError(\n message: string,\n context: ErrorContext,\n originalError?: Error,\n ): StateManagerError {\n return new StateManagerError(message, context, originalError);\n }\n}\n", "import type {\n ComponentDefinition,\n CompositeDefinition,\n Entity,\n IEngine,\n OnChangeFunction,\n} from '@dcl/ecs';\nimport { CrdtMessageType } from '@dcl/ecs';\nimport type { FileSystemInterface } from '../types';\nimport type { InspectorPreferences } from '../../logic/preferences/types';\nimport { EditorComponentNames } from '../../sdk/components';\nimport { ErrorHandler } from './error-handler';\n\nexport enum OperationType {\n SCENE_UPDATE = 'scene_update',\n COMPOSITE_UPDATE = 'composite_update',\n UNDO_CAPTURE = 'undo_capture',\n FILE_OPERATION = 'file_operation',\n}\n\nexport interface BaseOperation {\n type: OperationType;\n entity: Entity;\n componentName: string;\n operation: CrdtMessageType;\n timestamp: number;\n}\n\nexport interface SceneOperation extends BaseOperation {\n type: OperationType.SCENE_UPDATE;\n componentValue: unknown;\n}\n\nexport interface CompositeOperation extends BaseOperation {\n type: OperationType.COMPOSITE_UPDATE;\n componentValue: unknown;\n}\n\nexport interface UndoCaptureOperation extends BaseOperation {\n type: OperationType.UNDO_CAPTURE;\n componentValue: unknown;\n}\n\nexport type Operation = SceneOperation | CompositeOperation | UndoCaptureOperation;\n\nexport interface Transaction {\n id: string;\n operations: Operation[];\n source: 'engine' | 'undo' | 'redo' | 'external';\n completed: boolean;\n}\n\nexport interface StateProvider {\n readonly name: string;\n canHandle(operation: Operation): boolean;\n processOperation(operation: Operation, transaction: Transaction): Promise<void>;\n onTransactionComplete(transaction: Transaction): Promise<void>;\n}\n\nexport interface StateManagerOptions {\n fs: FileSystemInterface;\n engine: IEngine;\n getInspectorPreferences: () => InspectorPreferences;\n compositePath: string;\n}\n\nexport class StateManager {\n private providers = new Map<string, StateProvider>();\n private pendingTransaction: Transaction | null = null;\n private transactionQueue: Transaction[] = [];\n private processing = false;\n private readonly maxBatchSize = 50; // prevent oversized batches\n private readonly fs: FileSystemInterface;\n private readonly engine: IEngine;\n private readonly getInspectorPreferences: () => InspectorPreferences;\n private readonly compositePath: string;\n private pendingTimeouts = new Set<NodeJS.Timeout>();\n\n constructor(options: StateManagerOptions) {\n this.fs = options.fs;\n this.engine = options.engine;\n this.getInspectorPreferences = options.getInspectorPreferences;\n this.compositePath = options.compositePath;\n }\n\n registerProvider(provider: StateProvider): void {\n this.providers.set(provider.name, provider);\n }\n\n unregisterProvider(name: string): void {\n this.providers.delete(name);\n }\n\n getProvider<T extends StateProvider>(name: string): T | undefined {\n return this.providers.get(name) as T;\n }\n\n createOnChangeHandler(): OnChangeFunction {\n return (entity, operation, component, componentValue) => {\n if (this.processing) return;\n\n const opType = this.determineOperationType(operation, component);\n const baseOp = {\n entity,\n componentName: component?.componentName || 'unknown',\n operation,\n timestamp: Date.now(),\n };\n\n let op: Operation;\n switch (opType) {\n case OperationType.SCENE_UPDATE:\n op = { ...baseOp, type: OperationType.SCENE_UPDATE, componentValue };\n break;\n case OperationType.COMPOSITE_UPDATE:\n op = { ...baseOp, type: OperationType.COMPOSITE_UPDATE, componentValue };\n break;\n case OperationType.UNDO_CAPTURE:\n op = { ...baseOp, type: OperationType.UNDO_CAPTURE, componentValue };\n break;\n default:\n op = { ...baseOp, type: OperationType.UNDO_CAPTURE, componentValue };\n }\n\n this.addToCurrentTransaction(op);\n };\n }\n\n private determineOperationType(\n operation: CrdtMessageType,\n component: ComponentDefinition<unknown> | undefined,\n ): OperationType {\n if (!component) return OperationType.COMPOSITE_UPDATE;\n\n switch (component.componentName) {\n case EditorComponentNames.Scene:\n return OperationType.SCENE_UPDATE;\n case EditorComponentNames.Selection:\n return OperationType.UNDO_CAPTURE;\n default:\n if (\n operation === CrdtMessageType.PUT_COMPONENT ||\n operation === CrdtMessageType.DELETE_COMPONENT\n ) {\n return OperationType.COMPOSITE_UPDATE;\n }\n return OperationType.UNDO_CAPTURE;\n }\n }\n\n private addToCurrentTransaction(operation: Operation): void {\n if (!this.pendingTransaction) {\n this.pendingTransaction = {\n id: crypto.randomUUID(),\n operations: [],\n source: 'engine',\n completed: false,\n };\n\n /**\n * Use setTimeout(0) to batch operations into a single transaction.\n *\n * This delays the transaction commit until the next tick of the event loop,\n * allowing multiple synchronous operations to be grouped together.\n *\n * Example without batching:\n * component1.update() \u2192 Transaction 1 \u2192 Process \u2192 Complete\n * component2.update() \u2192 Transaction 2 \u2192 Process \u2192 Complete\n * component3.update() \u2192 Transaction 3 \u2192 Process \u2192 Complete\n *\n * Example with batching (more efficient? probably):\n * component1.update() \u2192 \\\n * component2.update() \u2192 \u2192 Single Transaction \u2192 Process \u2192 Complete\n * component3.update() \u2192 /\n */\n const timeoutId = setTimeout(() => {\n this.pendingTimeouts.delete(timeoutId);\n this.commitPendingTransaction();\n }, 0);\n this.pendingTimeouts.add(timeoutId);\n }\n\n this.pendingTransaction.operations.push(operation);\n\n // force commit if batch gets too large to prevent memory issues\n if (this.pendingTransaction.operations.length >= this.maxBatchSize) {\n this.commitPendingTransaction();\n }\n }\n\n private async commitPendingTransaction(): Promise<void> {\n if (!this.pendingTransaction || this.pendingTransaction.operations.length === 0) {\n this.pendingTransaction = null;\n return;\n }\n\n const transaction = this.pendingTransaction;\n this.pendingTransaction = null;\n transaction.completed = true;\n\n this.transactionQueue.push(transaction);\n await this.processTransactionQueue();\n }\n\n private async processTransactionQueue(): Promise<void> {\n if (this.processing || this.transactionQueue.length === 0) {\n return;\n }\n\n this.processing = true;\n\n try {\n while (this.transactionQueue.length > 0) {\n const transaction = this.transactionQueue.shift()!;\n await this.processTransaction(transaction);\n }\n } catch (error) {\n console.error('Error processing transaction queue:', error);\n } finally {\n this.processing = false;\n }\n }\n\n private async processTransaction(transaction: Transaction): Promise<void> {\n const providers = Array.from(this.providers.values());\n\n for (const provider of providers) {\n const handledOperations = transaction.operations.filter(op => provider.canHandle(op));\n\n if (handledOperations.length > 0) {\n try {\n await Promise.allSettled(\n handledOperations.map(op => provider.processOperation(op, transaction)),\n );\n } catch (error) {\n ErrorHandler.handleError(\n 'Provider failed to process operations',\n { provider: provider.name, transaction: transaction.id },\n error as Error,\n );\n }\n }\n }\n\n // complete transactions sequentially to maintain consistency\n for (const provider of providers) {\n try {\n await provider.onTransactionComplete(transaction);\n } catch (error) {\n ErrorHandler.handleError(\n 'Provider failed to complete transaction',\n { provider: provider.name, transaction: transaction.id },\n error as Error,\n );\n }\n }\n }\n\n async executeTransaction<T>(\n source: Transaction['source'],\n operations: () => Promise<T>,\n ): Promise<T> {\n if (this.processing) {\n throw new Error('Cannot execute transaction while processing');\n }\n\n const wasProcessing = this.processing;\n this.processing = true;\n\n try {\n return await operations();\n } finally {\n this.processing = wasProcessing;\n await this.processTransactionQueue();\n }\n }\n\n getComposite(): CompositeDefinition | null {\n const compositeProvider = this.getProvider('composite');\n return (compositeProvider as any)?.getComposite?.() || null;\n }\n\n async dispose(): Promise<void> {\n for (const timeout of Array.from(this.pendingTimeouts)) {\n clearTimeout(timeout);\n }\n this.pendingTimeouts.clear();\n\n if (this.pendingTransaction) {\n await this.commitPendingTransaction();\n }\n\n while (this.transactionQueue.length > 0) {\n await this.processTransactionQueue();\n }\n\n this.providers.clear();\n }\n}\n", "import { merge } from 'ts-deepmerge';\nimport { CrdtMessageType } from '@dcl/ecs';\nimport type { Scene } from '@dcl/schemas';\nimport type { FileSystemInterface } from '../types';\nimport type { EditorComponentsTypes } from '../../sdk/components';\nimport { EditorComponentNames } from '../../sdk/components';\nimport { fromSceneComponent } from './utils/component';\nimport {\n type StateProvider,\n type Operation,\n type Transaction,\n OperationType,\n} from './state-manager';\n\ntype SceneWithDefaults = Scene & {\n display: {\n title: string;\n };\n};\n\nexport class SceneProvider implements StateProvider {\n readonly name = 'scene';\n private scene: SceneWithDefaults;\n private readonly fs: FileSystemInterface;\n private pendingSceneUpdates = new Map<string, Partial<Scene>>();\n private savePromise: Promise<void> | null = null;\n\n constructor(fs: FileSystemInterface, initialScene: SceneWithDefaults) {\n this.fs = fs;\n this.scene = initialScene;\n }\n\n static async create(fs: FileSystemInterface): Promise<SceneProvider> {\n const scene = await SceneProvider.loadScene(fs);\n return new SceneProvider(fs, scene);\n }\n\n private static async loadScene(fs: FileSystemInterface): Promise<SceneWithDefaults> {\n let scene: Scene = {} as Scene;\n try {\n const buffer = await fs.readFile('scene.json');\n scene = JSON.parse(new TextDecoder().decode(buffer));\n } catch (e) {\n console.error('Reading scene.json file failed: ', e);\n }\n\n return SceneProvider.augmentDefaults(scene);\n }\n\n private static augmentDefaults(scene: Scene): SceneWithDefaults {\n return {\n ...scene,\n display: {\n ...scene.display,\n title: scene.display?.title || '',\n },\n };\n }\n\n canHandle(operation: Operation): boolean {\n return (\n operation.type === OperationType.SCENE_UPDATE &&\n operation.operation === CrdtMessageType.PUT_COMPONENT &&\n operation.componentName === EditorComponentNames.Scene\n );\n }\n\n async processOperation(operation: Operation, transaction: Transaction): Promise<void> {\n if (!this.canHandle(operation)) return;\n\n try {\n const partialScene = fromSceneComponent(\n operation.componentValue as EditorComponentsTypes['Scene'],\n );\n\n this.pendingSceneUpdates.set(transaction.id, partialScene);\n } catch (error) {\n console.error('Failed to process scene operation:', error);\n }\n }\n\n async onTransactionComplete(transaction: Transaction): Promise<void> {\n const pendingUpdate = this.pendingSceneUpdates.get(transaction.id);\n if (!pendingUpdate) return;\n\n try {\n const merged = merge.withOptions({ mergeArrays: false }, this.scene, pendingUpdate) as Scene;\n\n this.scene = SceneProvider.augmentDefaults(merged);\n this.pendingSceneUpdates.delete(transaction.id);\n\n if (this.savePromise) {\n await this.savePromise;\n }\n\n this.savePromise = this.saveScene();\n } catch (error) {\n console.error('Failed to complete scene transaction:', error);\n this.pendingSceneUpdates.delete(transaction.id);\n }\n }\n\n private async saveScene(): Promise<void> {\n try {\n const buffer = Buffer.from(JSON.stringify(this.scene, null, 2), 'utf-8');\n await this.fs.writeFile('scene.json', buffer);\n } catch (error) {\n console.error('Failed to save scene.json:', error);\n throw error;\n } finally {\n this.savePromise = null;\n }\n }\n\n getScene(): SceneWithDefaults {\n return { ...this.scene };\n }\n\n async forceReload(): Promise<void> {\n this.scene = await SceneProvider.loadScene(this.fs);\n this.pendingSceneUpdates.clear();\n\n if (this.savePromise) {\n await this.savePromise;\n }\n }\n\n async dispose(): Promise<void> {\n if (this.savePromise) {\n await this.savePromise;\n }\n this.pendingSceneUpdates.clear();\n }\n}\n", "import type {\n ComponentDefinition,\n CompositeDefinition,\n DeepReadonlyObject,\n Entity,\n} from '@dcl/ecs';\nimport { ReadWriteByteBuffer } from '@dcl/ecs/dist/serialization/ByteBuffer';\nimport { dataCompare } from '@dcl/ecs/dist/systems/crdt/utils';\nimport type { Scene } from '@dcl/schemas';\n\nimport type {\n EditorComponentsTypes,\n SceneAgeRating,\n SceneComponent,\n} from '../../../sdk/components';\nimport { SceneCategory } from '../../../sdk/components';\nimport { getConfig } from '../../../logic/config';\nimport type { TransitionMode } from '../../../sdk/components/SceneMetadata';\n\nexport function isEqual(\n component: ComponentDefinition<unknown>,\n prevValue: unknown,\n newValue: unknown,\n) {\n if (prevValue === newValue || (!prevValue && !newValue)) return true;\n if ((!prevValue && newValue) || (prevValue && !newValue)) return false;\n const prevBuffer = new ReadWriteByteBuffer();\n const newBuffer = new ReadWriteByteBuffer();\n component.schema.serialize(prevValue as DeepReadonlyObject<unknown>, prevBuffer);\n component.schema.serialize(newValue as DeepReadonlyObject<unknown>, newBuffer);\n return dataCompare(prevBuffer.toBinary(), newBuffer.toBinary()) === 0;\n}\n\nexport function findPrevValue(\n composite: CompositeDefinition,\n componentName: string,\n entity: Entity,\n) {\n const component = composite.components.find(c => c.name === componentName);\n const value = component?.data.get(entity);\n if (value?.data?.$case !== 'json') {\n return null;\n }\n return value.data.json;\n}\n\nconst parseCoords = (coords: string) => {\n const [x, y] = coords.split(',');\n return { x: parseInt(x), y: parseInt(y) };\n};\n\ntype SceneWithRating = Scene & {\n rating: SceneAgeRating;\n skyboxConfig?: { fixedTime?: number; transitionMode?: TransitionMode };\n};\n\nexport function fromSceneComponent(\n value: DeepReadonlyObject<EditorComponentsTypes['Scene']>,\n): Partial<Scene> {\n const tags: string[] = [];\n for (const category of value.categories || []) {\n tags.push(category);\n }\n for (const tag of value.tags || []) {\n const sanitizedTag = tag.trim();\n if (sanitizedTag && !tags.includes(sanitizedTag)) tags.push(sanitizedTag);\n }\n const config = getConfig();\n const scene: Partial<SceneWithRating> = {\n display: {\n title: value.name || '',\n description: value.description || '',\n navmapThumbnail: value.thumbnail || '',\n },\n scene: {\n parcels: value.layout.parcels.map($ => `${$.x},${$.y}`),\n base: `${value.layout.base.x},${value.layout.base.y}`,\n },\n contact: {\n name: value.author || '',\n email: value.email || '',\n },\n tags,\n spawnPoints: value.spawnPoints\n ? value.spawnPoints.map(spawnPoint => ({\n name: spawnPoint.name,\n default: spawnPoint.default,\n position: {\n x: spawnPoint.position.x.value as number[],\n y: spawnPoint.position.y.value as number[],\n z: spawnPoint.position.z.value as number[],\n },\n cameraTarget: spawnPoint.cameraTarget,\n }))\n : [],\n featureToggles: {\n voiceChat: value.silenceVoiceChat ? 'disabled' : 'enabled',\n portableExperiences: value.disablePortableExperiences ? 'disabled' : 'enabled',\n },\n rating: value.ageRating,\n skyboxConfig: {\n fixedTime: value.skyboxConfig?.fixedTime,\n transitionMode: value.skyboxConfig?.transitionMode,\n },\n };\n\n if (config.segmentAppId && config.projectId) {\n // add analytics source\n scene.source = {\n origin: config.segmentAppId,\n projectId: config.projectId,\n };\n }\n\n return scene;\n}\n\nexport function toSceneComponent(value: Scene): EditorComponentsTypes['Scene'] {\n const categories: SceneCategory[] = [];\n const tags: string[] = [];\n\n for (const tag of value.tags || []) {\n if (Object.values(SceneCategory).includes(tag as SceneCategory)) {\n categories.push(tag as SceneCategory);\n } else {\n tags.push(tag);\n }\n }\n\n const scene: SceneComponent = {\n name: value.display?.title || '',\n description: value.display?.description || '',\n thumbnail: value.display?.navmapThumbnail || '',\n layout: {\n parcels: value.scene.parcels.map($ => parseCoords($)),\n base: parseCoords(value.scene.base),\n },\n author: value.contact?.name || '',\n email: value.contact?.email || '',\n categories,\n tags,\n silenceVoiceChat: value.featureToggles?.voiceChat === 'disabled',\n disablePortableExperiences: value.featureToggles?.portableExperiences === 'disabled',\n ageRating: (value as SceneWithRating).rating,\n skyboxConfig: {\n fixedTime: (value as SceneWithRating).skyboxConfig?.fixedTime,\n transitionMode: (value as SceneWithRating).skyboxConfig?.transitionMode,\n },\n spawnPoints: value.spawnPoints?.map((spawnPoint, index) => ({\n name: spawnPoint.name || `Spawn Point ${index + 1}`,\n default: spawnPoint.default,\n position: {\n x: Array.isArray(spawnPoint.position.x)\n ? { $case: 'range', value: spawnPoint.position.x }\n : { $case: 'single', value: spawnPoint.position.x },\n y: Array.isArray(spawnPoint.position.y)\n ? { $case: 'range', value: spawnPoint.position.y }\n : { $case: 'single', value: spawnPoint.position.y },\n z: Array.isArray(spawnPoint.position.z)\n ? { $case: 'range', value: spawnPoint.position.z }\n : { $case: 'single', value: spawnPoint.position.z },\n },\n cameraTarget: spawnPoint.cameraTarget,\n })),\n };\n\n return scene;\n}\n", "import type {\n ComponentData,\n Composite,\n CompositeComponent,\n DeepReadonly,\n Entity,\n IEngine,\n LastWriteWinElementSetComponentDefinition,\n} from '@dcl/ecs';\nimport { ComponentType, PutComponentOperation, getCompositeRootComponent, Name } from '@dcl/ecs';\nimport { ReadWriteByteBuffer } from '@dcl/ecs/dist/serialization/ByteBuffer';\nimport type { FileSystemInterface } from '../../types';\n\nfunction componentToCompositeComponentData<T>(\n $case: 'json' | 'binary',\n value: DeepReadonly<T>,\n _component: LastWriteWinElementSetComponentDefinition<T>,\n): ComponentData {\n if ($case === 'json') {\n return {\n data: {\n $case,\n json: value,\n },\n };\n } else {\n const byteBuffer = new ReadWriteByteBuffer();\n _component.schema.serialize(value, byteBuffer);\n return {\n data: {\n $case,\n binary: byteBuffer.toBinary(),\n },\n };\n }\n}\n\nexport function dumpEngineToComposite(\n engine: IEngine,\n internalDataType: 'json' | 'binary',\n): Composite {\n const ignoreEntities: Set<Entity> = new Set();\n const composite: Composite.Definition = {\n version: 1,\n components: [],\n };\n\n const CompositeRoot = getCompositeRootComponent(engine);\n const childrenComposite = Array.from(engine.getEntitiesWith(CompositeRoot));\n if (childrenComposite.length > 0) {\n const compositeComponent: CompositeComponent = {\n name: CompositeRoot.componentName,\n jsonSchema: CompositeRoot.schema.jsonSchema,\n data: new Map(),\n };\n\n for (const [compositeRootEntity, compositeRootValue] of childrenComposite) {\n if (compositeRootEntity === engine.RootEntity) continue;\n\n compositeRootValue.entities.forEach(item => ignoreEntities.add(item.dest));\n\n const componentData: ComponentData = componentToCompositeComponentData(\n internalDataType,\n {\n src: compositeRootValue.src,\n entities: [],\n },\n CompositeRoot,\n );\n compositeComponent.data.set(compositeRootEntity, componentData);\n }\n\n composite.components.push(compositeComponent);\n }\n\n const ignoreComponentNames = [\n 'inspector:Selection',\n 'editor::Toggle',\n CompositeRoot.componentName,\n ];\n\n for (const itComponentDefinition of engine.componentsIter()) {\n if (ignoreComponentNames.includes(itComponentDefinition.componentName)) continue;\n\n // TODO: will we support APPEND components?\n if (itComponentDefinition.componentType === ComponentType.GrowOnlyValueSet) continue;\n\n const itCompositeComponent: CompositeComponent = {\n name: itComponentDefinition.componentName,\n jsonSchema: itComponentDefinition.schema.jsonSchema,\n data: new Map(),\n };\n\n for (const [entity, value] of engine.getEntitiesWith(itComponentDefinition)) {\n // TODO: see for overrides? check if the value has changed or not (should we tag it?)\n // For now, the entities from children composite are ignored\n if (ignoreEntities.has(entity)) continue;\n\n const componentData: ComponentData = componentToCompositeComponentData(\n internalDataType,\n value,\n itComponentDefinition as LastWriteWinElementSetComponentDefinition<unknown>,\n );\n itCompositeComponent.data.set(entity, componentData);\n }\n\n // TODO: should we save defined component but without entities assigned?\n if (itCompositeComponent.data.size > 0) {\n composite.components.push(itCompositeComponent);\n }\n }\n return composite;\n}\n\nexport function dumpEngineToCrdtCommands(engine: IEngine): Uint8Array {\n const componentBuffer = new ReadWriteByteBuffer();\n const crdtBuffer = new ReadWriteByteBuffer();\n for (const itComponentDefinition of engine.componentsIter()) {\n for (const [entity, value] of engine.getEntitiesWith(itComponentDefinition)) {\n if (value) {\n componentBuffer.resetBuffer();\n itComponentDefinition.schema.serialize(value, componentBuffer);\n\n PutComponentOperation.write(\n entity,\n 0,\n itComponentDefinition.componentId,\n componentBuffer.toBinary(),\n crdtBuffer,\n );\n }\n }\n }\n\n return crdtBuffer.toBinary();\n}\n\n// Polyfill for Set.difference\nfunction setDifference(set: Set<any>, other: Set<any>) {\n if (typeof set.difference === 'function') return set.difference(other);\n return new Set([...set].filter(x => !other.has(x)));\n}\n\n/**\n * Generate a TypeScript declaration file with a string literal union type containing all entity names in the scene.\n * This allows for type-safe references to entities by name in scene scripts.\n *\n * @param engine The ECS engine instance\n * @param outputPath The path where the .d.ts file should be written\n * @param typeName The name for the generated type (default: \"SceneEntityNames\")\n * @param fs FileSystem interface for writing the file\n * @returns Promise that resolves when the file has been written\n */\n\nlet __ENTITY_NAMES_CACHE: Set<string> = new Set();\nexport async function generateEntityNamesType(\n engine: IEngine,\n outputPath: string = 'scene-entity-names.d.ts',\n typeName: string = 'SceneEntityNames',\n fs: FileSystemInterface,\n): Promise<void> {\n try {\n // Find the Name component definition\n const NameComponent: typeof Name = engine.getComponentOrNull(Name.componentId) as typeof Name;\n\n if (!NameComponent) {\n throw new Error('Name component not found in engine');\n }\n\n // Collect all names from entities\n const names: string[] = [];\n for (const [_, nameValue] of engine.getEntitiesWith(NameComponent)) {\n if (nameValue.value) {\n names.push(nameValue.value);\n }\n }\n\n // Sort names for consistency\n names.sort();\n const namesSet = new Set(names);\n\n if (setDifference(namesSet, __ENTITY_NAMES_CACHE).size === 0) {\n return;\n }\n\n __ENTITY_NAMES_CACHE = namesSet;\n\n // Remove duplicates\n const uniqueNames = Array.from(namesSet);\n\n // Generate valid TypeScript identifiers and handle duplicates in a single pass\n const validNameMap = new Map<string, string>();\n const finalNames: Array<{ original: string; valid: string }> = [];\n\n for (const name of uniqueNames) {\n // Create a valid TypeScript identifier\n let validName = name\n .replace(/[^a-zA-Z0-9_]/g, '_') // Replace non-alphanumeric chars with underscore\n .replace(/^[0-9]/, '_$&'); // Prepend underscore if starts with number\n\n // Handle collision if this valid name already exists\n if (validNameMap.has(validName)) {\n // Add numeric suffix for uniqueness\n let suffix = 1;\n while (validNameMap.has(`${validName}_${suffix}`)) {\n suffix++;\n }\n validName = `${validName}_${suffix}`;\n }\n\n // Store the mapping and add to result\n validNameMap.set(validName, name);\n finalNames.push({ original: name, valid: validName });\n }\n\n // Generate the .d.ts file content\n let fileContent = '// Auto-generated entity names from the scene\\n\\n';\n\n // Add a constant object with name keys for IDE autocompletion\n fileContent +=\n '\\n/**\\n * Object containing all entity names in the scene for autocomplete support.\\n */\\n';\n fileContent += `export enum ${typeName} {\\n`;\n\n for (const { original, valid } of finalNames) {\n fileContent += ` ${valid} = \"${original}\",\\n`;\n }\n\n fileContent += '} \\n';\n\n // Check if file exists and compare content before writing\n const fileExists = await fs.existFile(outputPath);\n if (fileExists) {\n const existingContent = (await fs.readFile(outputPath)).toString('utf-8');\n if (existingContent === fileContent) {\n // Content is identical, no need to write\n return;\n }\n }\n\n // Write to file only if content is different or file doesn't exist\n await fs.writeFile(outputPath, Buffer.from(fileContent, 'utf-8'));\n } catch (e) {\n console.error(`Fail to generate entity names types: ${e}\\n`);\n }\n}\n", "import type { ByteBuffer, IEngine, IEngineOptions } from '@dcl/ecs';\nimport { Engine } from '@dcl/ecs';\nimport { ReadWriteByteBuffer } from '@dcl/ecs/dist/serialization/ByteBuffer';\nimport { createComponents, createEditorComponents } from '../../../sdk/components';\n\nexport function serializeEngine(engine: IEngine) {\n const messages: ByteBuffer = new ReadWriteByteBuffer();\n\n for (const component of engine.componentsIter()) {\n component.dumpCrdtStateToBuffer(messages);\n }\n return messages.toBinary();\n}\n\nexport function createEngineContext(opts?: IEngineOptions) {\n // create engine and its components\n const engine = Engine(opts);\n\n const components = {\n ...createComponents(engine),\n ...createEditorComponents(engine),\n };\n return { engine, components };\n}\n", "import type { Storage } from './types';\n\nexport function createInMemoryStorage(initialFs: Record<string, Buffer> = {}): Storage {\n const storage: Map<string, Buffer> = new Map();\n\n for (const [id, content] of Object.entries(initialFs)) {\n storage.set(id, content);\n }\n\n return {\n async writeFile(path: string, content: Buffer) {\n storage.set(path, content);\n },\n async exists(path: string) {\n return storage.has(path);\n },\n async readFile(path: string) {\n const content = storage.get(path);\n if (!content) {\n throw new Error(`File ${path} doesn't exists`);\n }\n return content;\n },\n async delete(path: string) {\n storage.delete(path);\n },\n async list(path: string) {\n const files: { name: string; isDirectory: boolean }[] = [];\n for (const _path of Array.from(storage.keys())) {\n if (!_path.startsWith(path)) continue;\n\n const fileName = _path.substring(path.length);\n const slashPosition = fileName.indexOf('/');\n if (slashPosition !== -1) {\n const directoryName = fileName.substring(0, slashPosition);\n if (!files.find(item => item.name === directoryName)) {\n files.push({ name: directoryName, isDirectory: true });\n }\n } else {\n files.push({ name: fileName, isDirectory: false });\n }\n }\n\n return files;\n },\n };\n}\n", "import { Composite } from '@dcl/ecs';\nimport type { Scene } from '@dcl/schemas';\nimport { PointerEvents } from '@dcl/ecs/dist/components';\nimport { defineMaterialComponent } from '@dcl/ecs/dist/components/extended/Material';\n\nimport { toSceneComponent } from '../host/utils/component';\nimport { dumpEngineToComposite } from '../host/utils/engine-to-composite';\nimport { createFileSystemInterface } from '../../logic/file-system-interface';\nimport { createEngineContext } from '../host/utils/engine';\nimport { createInMemoryStorage } from '../../logic/storage/in-memory';\nimport { SceneAgeRating } from '../../sdk/components';\nimport { TransitionMode } from '../../sdk/components/SceneMetadata';\nimport { downloadAssets } from './builder-utils';\nimport { THUMBNAIL } from './constants';\n\nexport function createTempEngineContext() {\n const { engine, components } = createEngineContext();\n return {\n engine,\n components: {\n ...components,\n Material: defineMaterialComponent(engine),\n PointerEvents: PointerEvents(engine),\n },\n };\n}\n\ntype TempEngine = ReturnType<typeof createTempEngineContext>;\n\nexport function generateMinimalComposite({ engine, components }: TempEngine) {\n // nodes\n components.Nodes.create(engine.RootEntity, {\n value: [\n { entity: engine.RootEntity, children: [], open: true },\n { entity: engine.PlayerEntity, children: [] },\n { entity: engine.CameraEntity, children: [] },\n ],\n });\n\n // scene\n components.Scene.create(engine.RootEntity, {\n name: 'Test Scene',\n description: 'This is a test scene',\n thumbnail: 'assets/scene/thumbnail.png',\n ageRating: SceneAgeRating.Teen,\n skyboxConfig: {\n fixedTime: 36000,\n transitionMode: TransitionMode.TM_FORWARD,\n },\n categories: [],\n author: '',\n email: '',\n tags: [],\n layout: {\n base: {\n x: 0,\n y: 0,\n },\n parcels: [\n {\n x: 0,\n y: 0,\n },\n ],\n },\n });\n\n const composite = dumpEngineToComposite(engine, 'json');\n return Composite.toJson(composite);\n}\n\nexport function generateFeededComposite({ engine, components }: TempEngine, scene: Scene) {\n // custom component\n const cubeIdComponent = engine.defineComponent('cube-id', {});\n\n // entities\n const entity = engine.addEntity();\n const gltfEntity = engine.addEntity();\n\n components.Transform.create(entity, { position: { x: 8, y: 1, z: 8 } });\n components.MeshRenderer.setBox(entity);\n cubeIdComponent.create(entity);\n components.PointerEvents.create(entity, {\n pointerEvents: [\n {\n eventType: 1,\n eventInfo: {\n button: 1,\n hoverText: 'Press E to spawn',\n maxDistance: 100,\n showFeedback: true,\n },\n },\n ],\n });\n components.Material.setPbrMaterial(entity, {\n albedoColor: {\n r: 1,\n g: 1,\n b: 1,\n a: 1,\n },\n });\n components.Name.create(entity, { value: 'Magic Cube' });\n\n components.Transform.create(gltfEntity, {\n position: {\n x: 4,\n y: 0.8,\n z: 8,\n },\n });\n components.GltfContainer.create(gltfEntity, { src: 'assets/scene/Models/example/model.glb' });\n cubeIdComponent.create(gltfEntity);\n components.Name.create(gltfEntity, { value: 'Gltf Test' });\n\n // nodes\n components.Nodes.create(engine.RootEntity, {\n value: [\n { entity: engine.RootEntity, children: [entity, gltfEntity], open: true },\n { entity: engine.PlayerEntity, children: [] },\n { entity: engine.CameraEntity, children: [] },\n { entity, children: [] },\n { entity: gltfEntity, children: [] },\n ],\n });\n\n // scene\n components.Scene.create(engine.RootEntity, toSceneComponent(scene));\n\n const composite = dumpEngineToComposite(engine, 'json');\n return Composite.toJson(composite);\n}\n\nexport const getMinimalComposite = () => generateMinimalComposite(createTempEngineContext());\n\nconst builderMappings: Record<string, string> = {\n 'assets/scene/Models/example/model.glb':\n 'bafkreibzw3d2aziiw2yhq7eoihytxthsulbihbr2ds2zegmsreaycy4h7e',\n};\n\nfunction getFeededEngineAndComposite(scene: Scene) {\n const context = createTempEngineContext();\n return { engineContext: context, composite: generateFeededComposite(context, scene) };\n}\n\nexport async function feededFileSystem(mappings: Record<string, string> = builderMappings) {\n const scene: Scene = {\n main: '',\n display: {\n title: 'Feeded Scene',\n description: 'This is a feeded scene.json into memory',\n navmapThumbnail: 'assets/scene/feeded-thumbnail.png',\n },\n scene: {\n parcels: ['2,2', '2,3', '3,2', '3,3'],\n base: '2,2',\n },\n contact: {\n name: 'John Doe',\n email: 'johndoe@email.com',\n },\n tags: ['game', 'art', 'super fun', 'cool'],\n spawnPoints: [\n {\n name: 'Feeded Spawn Point',\n default: true,\n position: {\n x: [4, 6],\n y: [1, 1],\n z: [4, 6],\n },\n cameraTarget: {\n x: 8,\n y: 1,\n z: 8,\n },\n },\n ],\n featureToggles: {\n voiceChat: 'disabled',\n },\n };\n\n const { composite } = getFeededEngineAndComposite(scene);\n\n const assets = await downloadAssets(mappings);\n\n const storage = createInMemoryStorage({\n ...assets,\n 'assets/scene/main.composite': Buffer.from(JSON.stringify(composite), 'utf-8'),\n 'thumbnails/scene/feeded-thumbnail.png': Buffer.from(THUMBNAIL, 'base64'),\n 'assets/scene/feeded-thumbnail.png': Buffer.from(THUMBNAIL, 'base64'),\n 'scene.json': Buffer.from(JSON.stringify(scene), 'utf-8'),\n });\n\n return createFileSystemInterface(storage);\n}\n", "/**\n * Moves a node to a specific index\n * @param list array to mutate\n * @param from index of the node to move\n * @param to destination index\n */\nexport function move<T>(list: T[], from: number, to: number) {\n list.splice(to, 0, list.splice(from, 1)[0]);\n}\n\n/**\n * Pushes a value to a list only if the value is not already on the list\n * @param list array to update\n * @param value value to push\n * @returns updated list\n */\nexport function cleanPush<T extends number | string>(list: T[], value: T): T[] {\n return Array.from(new Set(list).add(value));\n}\n", "import type { IEngine, Entity, LastWriteWinElementSetComponentDefinition } from '@dcl/ecs';\nimport { Transform } from '@dcl/ecs';\n\nimport type { EditorComponentsTypes, Node } from '../../../../sdk/components';\nimport { EditorComponentNames } from '../../../../sdk/components';\nimport { cleanPush } from '../../../../utils/array';\n\n/**\n * Build Node component hierarchy from current engine status\n * @param engine engine to build upon\n */\nexport function buildNodesHierarchy(engine: IEngine): Node[] {\n const hierarchy = new Map<Entity, Node>([\n [engine.RootEntity, { entity: engine.RootEntity, open: true, children: [] }],\n ]);\n\n // Set all engine's entities in hierarchy (entities without component are unretrievable)\n for (const component of engine.componentsIter()) {\n for (const [entity] of engine.getEntitiesWith(component)) {\n hierarchy.set(entity, { entity, children: [] });\n }\n }\n\n // Update children for nodes in the hierarchy based on Transform's parent value.\n // If there is no parent value, push it to RootEntity children\n for (const [entity] of hierarchy) {\n if (entity === engine.RootEntity) continue;\n const parent = Transform.getOrNull(entity)?.parent;\n if (parent) {\n const children = hierarchy.get(parent)?.children || [];\n hierarchy.set(parent, { entity: parent, children: cleanPush(children, entity) });\n } else {\n const children = hierarchy.get(engine.RootEntity)!.children;\n hierarchy.set(engine.RootEntity, {\n entity: engine.RootEntity,\n open: true,\n children: cleanPush(children, entity),\n });\n }\n }\n\n hierarchy.set(engine.PlayerEntity, { entity: engine.PlayerEntity, children: [] });\n hierarchy.set(engine.CameraEntity, { entity: engine.CameraEntity, children: [] });\n\n const root = hierarchy.get(engine.RootEntity)!;\n hierarchy.set(engine.RootEntity, { ...root, open: true });\n\n return Array.from(hierarchy.values());\n}\n\nexport function buildNodesHierarchyIfNotExists(engine: IEngine) {\n const Nodes = engine.getComponentOrNull(\n EditorComponentNames.Nodes,\n ) as LastWriteWinElementSetComponentDefinition<EditorComponentsTypes['Nodes']> | null;\n\n if (Nodes) {\n const value = Nodes.getOrNull(engine.RootEntity)?.value || [];\n if (value.length) return;\n\n function hierarchySystem() {\n engine.removeSystem(hierarchySystem);\n Nodes!.createOrReplace(engine.RootEntity, { value: buildNodesHierarchy(engine) });\n }\n\n engine.addSystem(hierarchySystem);\n }\n}\n", "import type { Entity, IEngine, LastWriteWinElementSetComponentDefinition } from '@dcl/ecs';\nimport { Name, Transform } from '@dcl/ecs';\n\nexport function removeLegacyEntityNodeComponents(engine: IEngine) {\n // Legacy EntityNode for backwards-compability\n function legacyEntityNode() {\n engine.removeSystem(legacyEntityNode);\n const LegacyEntityNodeComponent = engine.getComponentOrNull(\n 'inspector::EntityNode',\n ) as LastWriteWinElementSetComponentDefinition<{ label: string; parent: Entity }>;\n if (!LegacyEntityNodeComponent) return;\n\n for (const [entity, entityNodeValue] of engine.getEntitiesWith(LegacyEntityNodeComponent)) {\n LegacyEntityNodeComponent.deleteFrom(entity);\n const NameComponent = engine.getComponent(Name.componentId) as typeof Name;\n const TransformComponent = engine.getComponent(Transform.componentId) as typeof Transform;\n NameComponent.createOrReplace(entity, { value: entityNodeValue.label });\n const transform = TransformComponent.getMutableOrNull(entity);\n if (!transform) {\n TransformComponent.create(entity, { parent: entityNodeValue.parent });\n }\n }\n engine.removeComponentDefinition(LegacyEntityNodeComponent.componentId);\n }\n engine.addSystem(legacyEntityNode);\n}\n", "import { Composite } from '@dcl/ecs';\nimport { getFilesInDirectory } from '../fs-utils';\nimport type { FileSystemInterface } from '../../types';\n\nexport type CompositeManager = Composite.Provider & {\n save: (composite: Composite.Resource, type: 'json' | 'binary') => Promise<void>;\n};\n\nexport async function createFsCompositeProvider(\n fs: FileSystemInterface,\n dirPath: string = '',\n): Promise<CompositeManager> {\n const files = await getFilesInDirectory(fs, dirPath, [], true, [\n 'node_modules',\n 'dist',\n 'bin',\n 'src',\n '.vscode',\n ]);\n const compositePaths = files\n .filter(item => item.endsWith('.composite') || item.endsWith('.composite.bin'))\n .map(item => fs.join(fs.dirname(item), fs.basename(item).toLowerCase()));\n\n const compositePromises = compositePaths.map(async itemPath => {\n try {\n if (itemPath.endsWith('.bin')) {\n const compositeContent = new Uint8Array(await fs.readFile(itemPath));\n const composite = Composite.fromBinary(compositeContent);\n return {\n src: itemPath,\n composite,\n };\n } else {\n const compositeContent = new TextDecoder().decode(await fs.readFile(itemPath));\n const json = JSON.parse(compositeContent);\n const composite = Composite.fromJson(json);\n return {\n src: itemPath,\n composite,\n };\n }\n } catch (err) {\n console.error(`Error loading composite ${itemPath}: ${(err as any).toString()}`);\n return null;\n }\n });\n\n const composites = (await Promise.all(compositePromises)).filter(\n item => item,\n ) as Composite.Resource[];\n\n return {\n getCompositeOrNull(src: string, _currentPath?: string) {\n // compositePaths uses fs.join() to generate the .composite file and in windows generates paths like assets\\\\main.composite\n // and the src: string parameter has assets/main.composite path.\n function normalizePath(val: string) {\n return val.replace(/\\\\/g, '/').toLocaleLowerCase();\n }\n return composites.find(item => normalizePath(item.src) === normalizePath(src)) || null;\n },\n // a lot of questions with this method, it's temporal\n // => what should they be the params?, it overides? it's a save&replace, save as..., etc\n save: async (composite: Composite.Resource, type: 'json' | 'binary') => {\n let compositeDefinition: Composite.Definition;\n if (type === 'binary') {\n const bytes = Buffer.from(Composite.toBinary(composite.composite));\n await fs.writeFile(composite.src, bytes);\n\n // deep clone (*)\n compositeDefinition = Composite.fromBinary(bytes);\n } else {\n const text = JSON.stringify(Composite.toJson(composite.composite), null, 2);\n await fs.writeFile(composite.src, Buffer.from(text, 'utf-8'));\n\n // deep clone (*)\n compositeDefinition = Composite.fromJson(JSON.parse(text));\n }\n\n // (*) deep clone: the `composite.composite` could be used, but this would assign\n // the reference and at this point we don't have control about it\n\n // If the composite resource exists in our list, we replaced the definition\n // with a cloned definition\n const existingComposite = composites.find(item => item.src === composite.src);\n if (existingComposite) {\n existingComposite.composite = compositeDefinition;\n }\n },\n };\n}\n", "import type { IEngine, LastWriteWinElementSetComponentDefinition } from '@dcl/ecs';\nimport type { EditorComponentsTypes } from '../../../../sdk/components';\nimport { EditorComponentNames } from '../../../../sdk/components';\n\nexport function addNodesComponentsToPlayerAndCamera(engine: IEngine) {\n function addNodes() {\n engine.removeSystem(addNodes);\n const Nodes = engine.getComponentOrNull(\n EditorComponentNames.Nodes,\n ) as LastWriteWinElementSetComponentDefinition<EditorComponentsTypes['Nodes']>;\n if (!Nodes) return;\n\n const nodes = Nodes.getOrNull(engine.RootEntity)?.value || [];\n const newNodes = [...nodes];\n let shouldUpdate = false;\n\n if (!newNodes.some(node => node.entity === engine.PlayerEntity)) {\n newNodes.push({ entity: engine.PlayerEntity, children: [] });\n shouldUpdate = true;\n }\n if (!newNodes.some(node => node.entity === engine.CameraEntity)) {\n newNodes.push({ entity: engine.CameraEntity, children: [] });\n shouldUpdate = true;\n }\n\n if (shouldUpdate) {\n Nodes.createOrReplace(engine.RootEntity, { value: newNodes });\n }\n }\n\n engine.addSystem(addNodes);\n}\n", "import type { Entity, IEngine, NetworkEntity as NetworkEntityEngine } from '@dcl/ecs';\n\nimport { CoreComponents } from './components';\n\nexport const INSPECTOR_ENUM_ENTITY_ID_START: Entity = 8001 as Entity;\nexport function createEnumEntityId(engine: IEngine) {\n const NetworkEntity = engine.getComponent(\n CoreComponents.NETWORK_ENTITY,\n ) as typeof NetworkEntityEngine;\n\n function getNextEnumEntityId(): Entity {\n let value: Entity = INSPECTOR_ENUM_ENTITY_ID_START;\n for (const [, component] of engine.getEntitiesWith(NetworkEntity)) {\n value = Math.max(value, Number(component.entityId)) as Entity;\n }\n return (value + 1) as Entity;\n }\n\n return {\n getNextEnumEntityId,\n };\n}\n\nexport type EnumEntity = ReturnType<typeof createEnumEntityId>;\n", "import type { Entity, IEngine } from '@dcl/ecs';\nimport type { SdkComponents } from '../../../../sdk/components';\nimport { CoreComponents } from '../../../../sdk/components';\nimport { INSPECTOR_ENUM_ENTITY_ID_START } from '../../../../sdk/enum-entity';\n\n/**\n * Fixes duplicate entity IDs in NetworkEntity components within the engine.\n *\n * This function scans through all entities that have the NetworkEntity component\n * and identifies any duplicate entity IDs. If duplicates are found, it reassigns\n * unique entity IDs to each NetworkEntity component to ensure all entity IDs are unique.\n */\nexport function fixNetworkEntityValues(engine: IEngine) {\n const NetworkEntity = engine.getComponentOrNull(\n CoreComponents.NETWORK_ENTITY,\n ) as SdkComponents['NetworkEntity'];\n\n function needsFixing(): boolean {\n const usedEntities: Set<Entity> = new Set();\n for (const [_, value] of engine.getEntitiesWith(NetworkEntity)) {\n if (usedEntities.has(value.entityId)) {\n return true;\n }\n usedEntities.add(value.entityId);\n }\n return false;\n }\n\n if (!NetworkEntity || !needsFixing()) return;\n\n let lastEntityId = INSPECTOR_ENUM_ENTITY_ID_START;\n for (const [entity] of engine.getEntitiesWith(NetworkEntity)) {\n NetworkEntity.getMutable(entity).entityId = lastEntityId as Entity;\n lastEntityId++;\n }\n\n void engine.update(1);\n}\n", "import type { IEngine, LastWriteWinElementSetComponentDefinition } from '@dcl/ecs';\n\nimport type { EditorComponentsTypes } from '../../../../sdk/components';\nimport { EditorComponentNames } from '../../../../sdk/components';\nimport { GizmoType } from '../../../../utils/gizmo';\n\nexport function selectSceneEntity(engine: IEngine) {\n const Selection = engine.getComponentOrNull(\n EditorComponentNames.Selection,\n ) as LastWriteWinElementSetComponentDefinition<EditorComponentsTypes['Selection']> | null;\n\n if (Selection) {\n for (const [entity] of engine.getEntitiesWith(Selection)) {\n Selection.deleteFrom(entity);\n }\n\n function system() {\n engine.removeSystem(system);\n Selection!.createOrReplace(engine.RootEntity, { gizmo: GizmoType.FREE });\n }\n\n engine.addSystem(system);\n }\n}\n", "import type { IEngine } from '@dcl/ecs';\n\nimport type { EditorComponents } from '../../../../sdk/components';\nimport {\n removeOldSceneVersions,\n VERSIONS,\n getLatestSceneComponentVersion,\n} from '../../../../sdk/components/SceneMetadata';\n\n/**\n * Retrieves the latest version of the Scene component from the engine.\n *\n * This function iterates through the list of known Scene component versions in reverse order,\n * attempting to find the latest version that is present in the engine.\n *\n * @param engine - The engine instance to query for the Scene component.\n * @returns An object containing the latest Scene component and its value, or null if no version is found.\n */\nexport function getCompositeLatestSceneComponent(engine: IEngine) {\n let component = null;\n\n // Iterate in reverse order to find the latest component version\n for (let i = VERSIONS.length - 1; i >= 0; i--) {\n const name = VERSIONS[i].key;\n const Scene = engine.getComponentOrNull(name) as EditorComponents['Scene'] | null;\n\n if (Scene) {\n const scene = Scene.getMutableOrNull(engine.RootEntity);\n if (scene) {\n component = {\n component: Scene,\n value: scene,\n };\n break;\n }\n }\n }\n\n return component;\n}\n\nexport function migrateSceneMetadata(engine: IEngine) {\n const latestComponent = getCompositeLatestSceneComponent(engine);\n\n if (!latestComponent) return;\n\n const { component, value } = latestComponent;\n\n const latestComponentVersion = getLatestSceneComponentVersion();\n const isRunningLatestVersion = component.componentName === latestComponentVersion.key;\n\n if (isRunningLatestVersion) return;\n const oldComponent = component;\n\n oldComponent.deleteFrom(engine.RootEntity);\n removeOldSceneVersions(engine, latestComponentVersion.key);\n\n const SceneMetadata = engine.getComponent(\n latestComponentVersion.key,\n ) as EditorComponents['Scene'];\n SceneMetadata.createOrReplace(engine.RootEntity, value);\n}\n", "import type { IEngine, LastWriteWinElementSetComponentDefinition, TagsType } from '@dcl/ecs';\n\nexport function createTagsComponent(engine: IEngine) {\n const DEFAULT_TAGS = ['Tag Group 1', 'Tag Group 2', 'Tag Group 3', 'Tag Group 4'];\n\n const Tags = engine.getComponentOrNull(\n 'core-schema::Tags',\n ) as LastWriteWinElementSetComponentDefinition<TagsType> | null;\n\n if (Tags) {\n const sceneTags = Tags.getMutableOrNull(engine.RootEntity);\n if (!sceneTags) {\n Tags.createOrReplace(engine.RootEntity, { tags: DEFAULT_TAGS });\n engine.update(1);\n }\n }\n}\n", "import type { Scene } from '@dcl/schemas';\nimport type { CompositeDefinition, Entity, IEngine } from '@dcl/ecs';\nimport { Composite, CrdtMessageType, EntityMappingMode } from '@dcl/ecs';\nimport { initComponents } from '@dcl/asset-packs';\nimport type { EditorComponents } from '../../sdk/components';\nimport { EditorComponentNames } from '../../sdk/components';\nimport type { FileSystemInterface } from '../types';\nimport { getMinimalComposite } from '../client/feeded-local-fs';\nimport type { InspectorPreferences } from '../../logic/preferences/types';\nimport { buildNodesHierarchyIfNotExists } from './utils/migrations/build-nodes-hierarchy';\nimport { removeLegacyEntityNodeComponents } from './utils/migrations/legacy-entity-node';\nimport { DIRECTORY, withAssetDir } from './fs-utils';\nimport {\n dumpEngineToComposite,\n dumpEngineToCrdtCommands,\n generateEntityNamesType,\n} from './utils/engine-to-composite';\nimport type { CompositeManager } from './utils/fs-composite-provider';\nimport { createFsCompositeProvider } from './utils/fs-composite-provider';\nimport { toSceneComponent } from './utils/component';\nimport { addNodesComponentsToPlayerAndCamera } from './utils/migrations/add-nodes-to-player-and-camera';\nimport { fixNetworkEntityValues } from './utils/migrations/fix-network-entity-values';\nimport { selectSceneEntity } from './utils/migrations/select-scene-entity';\nimport { migrateSceneMetadata } from './utils/migrations/migrate-scene-metadata';\nimport {\n type StateProvider,\n type Operation,\n type Transaction,\n OperationType,\n} from './state-manager';\nimport { createTagsComponent } from './utils/migrations/create-tags-components';\n\nenum DirtyState {\n Clean = 'clean',\n Dirty = 'dirty',\n DirtyAndNeedsDump = 'dirty_needs_dump',\n}\n\nexport class CompositeProvider implements StateProvider {\n readonly name = 'composite';\n\n private composite: CompositeDefinition | null = null;\n private dirtyState = DirtyState.Clean;\n private readonly fs: FileSystemInterface;\n private readonly engine: IEngine;\n private readonly getInspectorPreferences: () => InspectorPreferences;\n private readonly compositePath: string;\n private compositeManager: CompositeManager | null = null;\n private pendingOperations = new Set<string>();\n private savePromise: Promise<void> | null = null;\n private lastSaveTime = 0;\n private readonly minSaveInterval = 100;\n\n constructor(\n fs: FileSystemInterface,\n engine: IEngine,\n getInspectorPreferences: () => InspectorPreferences,\n compositePath: string,\n ) {\n this.fs = fs;\n this.engine = engine;\n this.getInspectorPreferences = getInspectorPreferences;\n this.compositePath = compositePath;\n }\n\n static async create(\n fs: FileSystemInterface,\n engine: IEngine,\n getInspectorPreferences: () => InspectorPreferences,\n compositePath: string,\n ): Promise<CompositeProvider> {\n const provider = new CompositeProvider(fs, engine, getInspectorPreferences, compositePath);\n await provider.initialize();\n return provider;\n }\n\n private async initialize(): Promise<void> {\n await this.ensureCompositeExists();\n this.compositeManager = await this.createCompositeManager();\n await this.loadComposite();\n this.runMigrations();\n await this.initializeComponents();\n await this.overrideWithSceneJson();\n }\n\n private async ensureCompositeExists(): Promise<void> {\n if (!(await this.fs.existFile(this.compositePath))) {\n console.log('Main composite does not exist, creating minimal composite');\n const minimal = getMinimalComposite();\n const buffer = Buffer.from(JSON.stringify(minimal, null, 2), 'utf-8');\n await this.fs.writeFile(this.compositePath, buffer);\n } else {\n console.log('Main composite exists');\n }\n }\n\n private async createCompositeManager(): Promise<CompositeManager> {\n return createFsCompositeProvider(this.fs);\n }\n\n private async loadComposite(): Promise<void> {\n if (!this.compositeManager) throw new Error('Composite manager not initialized');\n\n const loadedCompositeResource = this.compositeManager.getCompositeOrNull(this.compositePath);\n if (!loadedCompositeResource) throw new Error('Invalid composite');\n\n console.log('Loading composite into engine...');\n\n Composite.instance(this.engine, loadedCompositeResource, this.compositeManager, {\n entityMapping: {\n type: EntityMappingMode.EMM_DIRECT_MAPPING,\n getCompositeEntity: (entity: number | Entity) => entity as Entity,\n },\n });\n\n this.composite = loadedCompositeResource.composite;\n }\n\n private runMigrations(): void {\n removeLegacyEntityNodeComponents(this.engine);\n buildNodesHierarchyIfNotExists(this.engine);\n addNodesComponentsToPlayerAndCamera(this.engine);\n fixNetworkEntityValues(this.engine);\n selectSceneEntity(this.engine);\n migrateSceneMetadata(this.engine);\n createTagsComponent(this.engine);\n }\n\n private async initializeComponents(): Promise<void> {\n initComponents(this.engine);\n }\n\n private bufferToScene(buffer: Buffer): Scene {\n return JSON.parse(new TextDecoder().decode(buffer));\n }\n\n private async overrideWithSceneJson(): Promise<void> {\n const SceneMetadata = this.engine.getComponent(\n EditorComponentNames.Scene,\n ) as EditorComponents['Scene'];\n\n if (await this.fs.existFile('scene.json')) {\n console.log('Overriding SceneMetadata with scene.json');\n const sceneJsonBuffer = await this.fs.readFile('scene.json');\n const sceneJson = this.bufferToScene(sceneJsonBuffer);\n SceneMetadata.createOrReplace(this.engine.RootEntity, toSceneComponent(sceneJson));\n }\n }\n\n canHandle(operation: Operation): boolean {\n if (operation.type === OperationType.COMPOSITE_UPDATE) {\n if (\n !operation.componentName ||\n operation.componentName === EditorComponentNames.Scene ||\n operation.componentName === EditorComponentNames.Selection\n ) {\n return false;\n }\n\n return (\n operation.operation === CrdtMessageType.PUT_COMPONENT ||\n operation.operation === CrdtMessageType.DELETE_COMPONENT\n );\n }\n\n return false;\n }\n\n async processOperation(operation: Operation, transaction: Transaction): Promise<void> {\n if (!this.canHandle(operation)) return;\n\n this.pendingOperations.add(transaction.id);\n\n if (this.dirtyState === DirtyState.Clean) {\n this.dirtyState = DirtyState.DirtyAndNeedsDump;\n }\n }\n\n async onTransactionComplete(transaction: Transaction): Promise<void> {\n if (!this.pendingOperations.has(transaction.id)) return;\n\n this.pendingOperations.delete(transaction.id);\n\n if (this.dirtyState === DirtyState.DirtyAndNeedsDump) {\n const preferences = this.getInspectorPreferences();\n const shouldAutosave = preferences.autosaveEnabled;\n const now = Date.now();\n\n if (shouldAutosave && now - this.lastSaveTime >= this.minSaveInterval) {\n this.lastSaveTime = now;\n await this.saveComposite(true);\n }\n }\n }\n\n async saveComposite(dump = true): Promise<CompositeDefinition | null> {\n if (this.savePromise) {\n await this.savePromise;\n }\n\n this.savePromise = this.performSave(dump).then(() => {});\n await this.savePromise;\n this.savePromise = null;\n\n return this.composite;\n }\n\n private async performSave(dump: boolean): Promise<CompositeDefinition | null> {\n try {\n this.composite = dumpEngineToComposite(this.engine, 'json');\n\n if (!dump) {\n this.dirtyState = DirtyState.Clean;\n return this.composite;\n }\n\n if (!this.compositeManager) {\n throw new Error('Composite manager not initialized');\n }\n\n const mainCrdt = dumpEngineToCrdtCommands(this.engine);\n await this.fs.writeFile('main.crdt', Buffer.from(mainCrdt));\n await this.compositeManager.save(\n { src: this.compositePath, composite: this.composite! },\n 'json',\n );\n\n await generateEntityNamesType(\n this.engine,\n withAssetDir(DIRECTORY.SCENE + '/entity-names.ts'),\n 'EntityNames',\n this.fs,\n );\n\n this.dirtyState = DirtyState.Clean;\n return this.composite;\n } catch (error) {\n console.error('Failed saving composite:', error);\n return null;\n }\n }\n\n getComposite(): CompositeDefinition | null {\n return this.composite;\n }\n\n isDirty(): boolean {\n return this.dirtyState !== DirtyState.Clean;\n }\n\n getDirtyState(): DirtyState {\n return this.dirtyState;\n }\n\n async forceReload(): Promise<void> {\n await this.initialize();\n }\n\n async dispose(): Promise<void> {\n if (this.savePromise) {\n await this.savePromise;\n }\n\n this.pendingOperations.clear();\n this.dirtyState = DirtyState.Clean;\n this.composite = null;\n this.compositeManager = null;\n }\n}\n", "import type { UndoRedo } from '../undo-redo-provider';\n\nconst ONE_MB_IN_BYTES = 1_048_576;\nconst ONE_GB_IN_BYTES = ONE_MB_IN_BYTES * 1024;\n\nexport function UndoRedoArray(maxEntries: number, maxSize: number = ONE_GB_IN_BYTES) {\n const valueList: UndoRedo[] = [];\n let memorySize: number = 0;\n\n function valueSize(val?: UndoRedo) {\n let fileSize: number = 0;\n if (val?.$case === 'file') {\n for (const operation of val.operations) {\n fileSize += operation.newValue?.length ?? 0;\n fileSize += operation.prevValue?.length ?? 0;\n }\n } else if (val?.$case === 'composite') {\n // Calculate size for file operations in composite\n for (const operation of val.fileOperations) {\n fileSize += operation.newValue?.length ?? 0;\n fileSize += operation.prevValue?.length ?? 0;\n }\n }\n return fileSize;\n }\n\n return {\n push(value: UndoRedo) {\n // If we reach the max entries, remove the first element and calc size\n while (valueList.length >= maxEntries) {\n const valToRemove = valueList.shift();\n memorySize -= valueSize(valToRemove);\n }\n\n // Add current value size to the memory\n const currentSize = valueSize(value);\n memorySize += currentSize;\n\n // add the value to the list.\n valueList.push(value);\n\n // if we reach the max_size limit, start removing files.\n while (memorySize >= maxSize) {\n for (let index = 0; index <= valueList.length - 1; index++) {\n const size = valueSize(valueList[index]);\n if (size) {\n memorySize -= size;\n valueList.splice(index, 1);\n break;\n }\n }\n }\n return valueList[valueList.length - 1] === value ? value : undefined;\n },\n pop() {\n const value = valueList.pop();\n memorySize -= valueSize(value);\n return value;\n },\n clear() {\n memorySize = 0;\n valueList.length = 0;\n },\n values() {\n return Array.from(valueList);\n },\n get memorySize() {\n return memorySize;\n },\n };\n}\n", "import type {\n CompositeDefinition,\n Entity,\n IEngine,\n LastWriteWinElementSetComponentDefinition,\n} from '@dcl/ecs';\nimport { CrdtMessageType } from '@dcl/ecs';\nimport type { FileSystemInterface } from '../types';\nimport upsertAsset from './upsert-asset';\nimport { findPrevValue } from './utils/component';\nimport { UndoRedoArray } from './utils/undo-redo-array';\nimport { isFileInAssetDir, withAssetDir } from './fs-utils';\nimport {\n type StateProvider,\n type Operation,\n type Transaction,\n OperationType,\n} from './state-manager';\nimport { ErrorHandler } from './error-handler';\n\nexport type UndoRedoCrdt = { $case: 'crdt'; operations: CrdtOperation[] };\nexport type UndoRedoFile = { $case: 'file'; operations: FileOperation[] };\nexport type UndoRedoComposite = {\n $case: 'composite';\n fileOperations: FileOperation[];\n crdtOperations: CrdtOperation[];\n};\n\nexport type CrdtOperation = {\n entity: Entity;\n componentName: string;\n prevValue: unknown;\n newValue: unknown;\n operation: CrdtMessageType;\n};\n\nexport type FileOperation = {\n path: string;\n prevValue: Uint8Array | null;\n newValue: Uint8Array | null;\n};\n\nexport type UndoRedo = UndoRedoFile | UndoRedoCrdt | UndoRedoComposite;\nexport type UndoRedoOp = CrdtOperation | FileOperation;\nexport type UndoRedoGetter = <T extends UndoRedoOp>(op: T) => T['newValue'];\n\nexport interface UndoRedoOptions {\n maxEntries?: number;\n maxSize?: number;\n enableValidation?: boolean;\n enableStateVerification?: boolean;\n persistToStorage?: boolean;\n storageKey?: string;\n maxStorageSize?: number; // max size in bytes for localStorage\n ignoredComponents?: string[]; // components to ignore for undo/redo\n}\n\ninterface SerializedUndoRedo {\n $case: 'crdt' | 'file' | 'composite';\n operations?: Array<{\n entity?: Entity;\n componentName?: string;\n operation?: CrdtMessageType;\n prevValue?: string; // JSON serialized\n newValue?: string; // JSON serialized\n path?: string; // for file operations\n }>;\n fileOperations?: Array<{\n path: string;\n prevValue?: string; // base64 encoded\n newValue?: string; // base64 encoded\n }>;\n crdtOperations?: Array<{\n entity: Entity;\n componentName: string;\n operation: CrdtMessageType;\n prevValue?: string; // JSON serialized\n newValue?: string; // JSON serialized\n }>;\n timestamp: number;\n}\n\ninterface StoredHistory {\n version: number;\n undoStack: SerializedUndoRedo[];\n redoStack: SerializedUndoRedo[];\n timestamp: number;\n metadata: {\n totalOperations: number;\n memoryUsage: number;\n };\n}\n\nconst isNil = (val: unknown) => val === null || val === undefined;\nconst getUndoValue: UndoRedoGetter = val => val.prevValue;\nconst getRedoValue: UndoRedoGetter = val => val.newValue;\n\nexport class UndoRedoProvider implements StateProvider {\n readonly name = 'undo-redo';\n\n private readonly undoList: ReturnType<typeof UndoRedoArray>;\n private readonly redoList: ReturnType<typeof UndoRedoArray>;\n private readonly pendingCrdtOperations = new Map<string, CrdtOperation[]>();\n private readonly fs: FileSystemInterface;\n private readonly engine: IEngine;\n private readonly getComposite: () => CompositeDefinition | null;\n private readonly options: Required<UndoRedoOptions>;\n private isExecutingUndoRedo = false;\n private deferredFileOperations: FileOperation[] | null = null;\n private deferredTimeout: NodeJS.Timeout | null = null;\n\n constructor(\n fs: FileSystemInterface,\n engine: IEngine,\n getComposite: () => CompositeDefinition | null,\n options: UndoRedoOptions = {},\n ) {\n this.fs = fs;\n this.engine = engine;\n this.getComposite = getComposite;\n\n this.options = {\n maxEntries: options.maxEntries ?? 1024,\n maxSize: options.maxSize ?? 1024 * 1024 * 100, // 100MB default\n enableValidation: options.enableValidation ?? true,\n enableStateVerification: options.enableStateVerification ?? false, // off by default for performance\n persistToStorage: options.persistToStorage ?? false,\n storageKey: options.storageKey ?? 'inspector-undo-redo-history',\n maxStorageSize: options.maxStorageSize ?? 1024 * 1024 * 10, // 10MB limit for localStorage\n ignoredComponents: options.ignoredComponents ?? [], // components to ignore for undo/redo\n };\n\n this.undoList = UndoRedoArray(this.options.maxEntries, this.options.maxSize);\n this.redoList = UndoRedoArray(this.options.maxEntries, this.options.maxSize);\n\n if (this.options.persistToStorage) {\n this.loadFromStorage();\n }\n }\n\n static async create(\n fs: FileSystemInterface,\n engine: IEngine,\n getComposite: () => CompositeDefinition | null,\n options: UndoRedoOptions = {},\n ): Promise<UndoRedoProvider> {\n return new UndoRedoProvider(fs, engine, getComposite, options);\n }\n\n private loadFromStorage(): void {\n if (typeof localStorage === 'undefined') return;\n\n try {\n const stored = localStorage.getItem(this.options.storageKey);\n if (!stored) return;\n\n const data: StoredHistory = JSON.parse(stored);\n\n if (data.version !== 1) {\n console.warn('Undo/redo history version mismatch, clearing storage');\n this.clearStorage();\n return;\n }\n\n if (!data.undoStack || !data.redoStack || !Array.isArray(data.undoStack)) {\n throw new Error('Invalid stored history format');\n }\n\n let loadedUndo = 0;\n let loadedRedo = 0;\n\n for (const serialized of data.undoStack) {\n const operation = this.deserializeOperation(serialized);\n if (operation) {\n this.undoList.push(operation);\n loadedUndo++;\n }\n }\n\n for (const serialized of data.redoStack) {\n const operation = this.deserializeOperation(serialized);\n if (operation) {\n this.redoList.push(operation);\n loadedRedo++;\n }\n }\n\n console.log(`Loaded undo/redo history: ${loadedUndo} undo, ${loadedRedo} redo operations`);\n } catch (error) {\n ErrorHandler.handleError(\n 'Failed to load undo/redo history from storage',\n { operation: 'storage_load' },\n error as Error,\n );\n this.clearStorage();\n }\n }\n\n private saveToStorage(): void {\n if (!this.options.persistToStorage || typeof localStorage === 'undefined') return;\n\n try {\n const undoOperations = this.undoList.values();\n const redoOperations = this.redoList.values();\n\n const data: StoredHistory = {\n version: 1,\n undoStack: undoOperations\n .map(op => this.serializeOperation(op))\n .filter(Boolean) as SerializedUndoRedo[],\n redoStack: redoOperations\n .map(op => this.serializeOperation(op))\n .filter(Boolean) as SerializedUndoRedo[],\n timestamp: Date.now(),\n metadata: {\n totalOperations: undoOperations.length + redoOperations.length,\n memoryUsage: this.undoList.memorySize + this.redoList.memorySize,\n },\n };\n\n const serialized = JSON.stringify(data);\n\n if (serialized.length > this.options.maxStorageSize) {\n console.warn('Undo/redo history too large for localStorage, skipping save');\n return;\n }\n\n localStorage.setItem(this.options.storageKey, serialized);\n } catch (error) {\n ErrorHandler.handleError(\n 'Failed to save undo/redo history to storage',\n { operation: 'storage_save' },\n error as Error,\n );\n }\n }\n\n private serializeOperation(operation: UndoRedo): SerializedUndoRedo | null {\n try {\n if (operation.$case === 'crdt') {\n return {\n $case: 'crdt',\n operations: operation.operations.map(op => ({\n entity: op.entity,\n componentName: op.componentName,\n operation: op.operation,\n prevValue: this.serializeValue(op.prevValue),\n newValue: this.serializeValue(op.newValue),\n })),\n timestamp: Date.now(),\n };\n } else if (operation.$case === 'file') {\n return {\n $case: 'file',\n operations: operation.operations.map(op => ({\n path: op.path,\n prevValue: this.serializeFileValue(op.prevValue),\n newValue: this.serializeFileValue(op.newValue),\n })),\n timestamp: Date.now(),\n };\n } else if (operation.$case === 'composite') {\n return {\n $case: 'composite',\n fileOperations: operation.fileOperations.map(op => ({\n path: op.path,\n prevValue: this.serializeFileValue(op.prevValue),\n newValue: this.serializeFileValue(op.newValue),\n })),\n crdtOperations: operation.crdtOperations.map(op => ({\n entity: op.entity,\n componentName: op.componentName,\n operation: op.operation,\n prevValue: this.serializeValue(op.prevValue),\n newValue: this.serializeValue(op.newValue),\n })),\n timestamp: Date.now(),\n };\n }\n } catch (error) {\n ErrorHandler.handleError(\n 'Failed to serialize operation for storage',\n { operation: 'serialize' },\n error as Error,\n );\n }\n return null;\n }\n\n private deserializeOperation(serialized: SerializedUndoRedo): UndoRedo | null {\n try {\n if (serialized.$case === 'crdt') {\n return {\n $case: 'crdt',\n operations: serialized.operations!.map(op => ({\n entity: op.entity!,\n componentName: op.componentName!,\n operation: op.operation!,\n prevValue: this.deserializeValue(op.prevValue),\n newValue: this.deserializeValue(op.newValue),\n })),\n };\n } else if (serialized.$case === 'file') {\n return {\n $case: 'file',\n operations: serialized.operations!.map(op => ({\n path: op.path!,\n prevValue: this.deserializeFileValue(op.prevValue),\n newValue: this.deserializeFileValue(op.newValue),\n })),\n };\n } else if (serialized.$case === 'composite') {\n return {\n $case: 'composite',\n fileOperations: serialized.fileOperations!.map(op => ({\n path: op.path,\n prevValue: this.deserializeFileValue(op.prevValue),\n newValue: this.deserializeFileValue(op.newValue),\n })),\n crdtOperations: serialized.crdtOperations!.map(op => ({\n entity: op.entity,\n componentName: op.componentName,\n operation: op.operation,\n prevValue: this.deserializeValue(op.prevValue),\n newValue: this.deserializeValue(op.newValue),\n })),\n };\n }\n } catch (error) {\n ErrorHandler.handleError(\n 'Failed to deserialize operation from storage',\n { operation: 'deserialize' },\n error as Error,\n );\n }\n return null;\n }\n\n private serializeValue(value: unknown): string | undefined {\n if (value === null || value === undefined) return undefined;\n try {\n return JSON.stringify(value);\n } catch (error) {\n // TODO: handle circular references or non-serializable values\n return JSON.stringify('[UNSERIALIZABLE]');\n }\n }\n\n private deserializeValue(serialized: string | undefined): unknown {\n if (!serialized) return undefined;\n try {\n const parsed = JSON.parse(serialized);\n return parsed === '[UNSERIALIZABLE]' ? undefined : parsed;\n } catch (error) {\n return undefined;\n }\n }\n\n private serializeFileValue(value: Uint8Array | null): string | undefined {\n if (!value) return undefined;\n try {\n return btoa(String.fromCharCode(...Array.from(value)));\n } catch (error) {\n return undefined;\n }\n }\n\n private deserializeFileValue(serialized: string | undefined): Uint8Array | null {\n if (!serialized) return null;\n try {\n const binaryString = atob(serialized);\n const bytes = new Uint8Array(binaryString.length);\n for (let i = 0; i < binaryString.length; i++) {\n bytes[i] = binaryString.charCodeAt(i);\n }\n return bytes;\n } catch (error) {\n return null;\n }\n }\n\n private clearStorage(): void {\n if (typeof localStorage !== 'undefined') {\n localStorage.removeItem(this.options.storageKey);\n }\n }\n\n canHandle(operation: Operation): boolean {\n if (this.isExecutingUndoRedo) return false;\n\n return (\n operation.type === OperationType.COMPOSITE_UPDATE ||\n operation.type === OperationType.UNDO_CAPTURE\n );\n }\n\n async processOperation(operation: Operation, transaction: Transaction): Promise<void> {\n if (\n !this.canHandle(operation) ||\n transaction.source === 'undo' ||\n transaction.source === 'redo'\n ) {\n return;\n }\n\n if (\n operation.type === OperationType.COMPOSITE_UPDATE &&\n (operation.operation === CrdtMessageType.PUT_COMPONENT ||\n operation.operation === CrdtMessageType.DELETE_COMPONENT)\n ) {\n await this.captureUndoOperation(operation, transaction);\n }\n }\n\n private async captureUndoOperation(\n operation: Operation,\n transaction: Transaction,\n ): Promise<void> {\n const composite = this.getComposite();\n if (!composite) return;\n\n // Skip capturing undo operation if component is in ignore list\n if (this.options.ignoredComponents.includes(operation.componentName)) {\n return;\n }\n\n const prevValue = findPrevValue(composite, operation.componentName, operation.entity);\n const crdtOperation: CrdtOperation = {\n entity: operation.entity,\n operation: operation.operation,\n componentName: operation.componentName,\n prevValue,\n newValue: operation.componentValue,\n };\n\n let operations = this.pendingCrdtOperations.get(transaction.id);\n if (!operations) {\n operations = [];\n this.pendingCrdtOperations.set(transaction.id, operations);\n }\n operations.push(crdtOperation);\n }\n\n async onTransactionComplete(transaction: Transaction): Promise<void> {\n const operations = this.pendingCrdtOperations.get(transaction.id);\n if (operations && operations.length > 0) {\n // Check if we're in deferred mode and should create a composite entry\n if (this.deferredFileOperations) {\n // Clear the timeout since we're creating a composite entry\n if (this.deferredTimeout) {\n clearTimeout(this.deferredTimeout);\n this.deferredTimeout = null;\n }\n\n this.redoList.clear();\n this.undoList.push({\n $case: 'composite',\n fileOperations: this.deferredFileOperations,\n crdtOperations: operations,\n });\n this.saveToStorage();\n this.deferredFileOperations = null;\n } else {\n // Normal CRDT-only operation\n this.redoList.clear();\n this.undoList.push({ $case: 'crdt', operations });\n this.saveToStorage();\n }\n } else if (this.deferredFileOperations) {\n // we had deferred file operations but no CRDT operations followed\n // this shouldn't normally happen, but we'll handle it gracefully\n this.redoList.clear();\n this.undoList.push({ $case: 'file', operations: this.deferredFileOperations });\n this.saveToStorage();\n this.deferredFileOperations = null;\n }\n\n this.pendingCrdtOperations.delete(transaction.id);\n }\n\n async undo(): Promise<{ type: string }> {\n if (this.options.enableStateVerification) {\n return this.undoWithVerification();\n }\n\n return this._undo();\n }\n\n async redo(): Promise<{ type: string }> {\n if (this.options.enableStateVerification) {\n return this.redoWithVerification();\n }\n\n return this._redo();\n }\n\n private async validateCrdtOperation(operation: CrdtOperation): Promise<boolean> {\n if (!this.options.enableValidation) return true;\n\n try {\n const component = this.engine.getComponent(operation.componentName);\n if (!component) {\n ErrorHandler.handleError('Component no longer exists for undo/redo operation', {\n component: operation.componentName,\n entity: operation.entity,\n operation: 'validate',\n });\n return false;\n }\n return true;\n } catch (error) {\n ErrorHandler.handleError(\n 'Validation failed for undo/redo operation',\n {\n component: operation.componentName,\n entity: operation.entity,\n },\n error as Error,\n );\n return false;\n }\n }\n\n private async validateFileOperation(\n operation: FileOperation,\n getValue: UndoRedoGetter,\n ): Promise<boolean> {\n if (!this.options.enableValidation) return true;\n\n try {\n const valueToExecute = getValue(operation);\n\n if (isNil(valueToExecute)) {\n return true;\n }\n\n // only validate parent directory for file creation/update operations\n // Note: We skip parent directory validation because the file system should handle\n // directory creation automatically during writeFile operations\n // This prevents validation failures during redo when directories were cleaned up\n\n return true;\n } catch (error) {\n ErrorHandler.handleError(\n 'File validation failed for undo/redo operation',\n { operation: 'file_validate' },\n error as Error,\n );\n return false;\n }\n }\n\n private async executeUndoRedoLogic(message: UndoRedo, getValue: UndoRedoGetter): Promise<void> {\n const failedOperations: Array<{ operation: any; error: Error }> = [];\n const successfulOperations: any[] = [];\n\n try {\n if (message.$case === 'crdt') {\n for (const operation of message.operations) {\n try {\n const isValid = await this.validateCrdtOperation(operation);\n if (!isValid) {\n failedOperations.push({\n operation,\n error: new Error('Operation validation failed'),\n });\n continue;\n }\n\n const component = this.engine.getComponent(\n operation.componentName,\n ) as LastWriteWinElementSetComponentDefinition<unknown>;\n\n const value = getValue(operation);\n\n if (isNil(value)) {\n component.deleteFrom(operation.entity);\n } else {\n component.createOrReplace(operation.entity, value);\n }\n\n successfulOperations.push(operation);\n } catch (error) {\n failedOperations.push({ operation, error: error as Error });\n ErrorHandler.handleError(\n 'CRDT operation failed during undo/redo',\n {\n component: operation.componentName,\n entity: operation.entity,\n operation: message.$case,\n },\n error as Error,\n );\n }\n }\n } else if (message.$case === 'file') {\n for (const operation of message.operations) {\n try {\n const isValid = await this.validateFileOperation(operation, getValue);\n if (!isValid) {\n failedOperations.push({\n operation,\n error: new Error('File operation validation failed'),\n });\n continue;\n }\n\n const filePath = isFileInAssetDir(operation.path)\n ? operation.path\n : withAssetDir(operation.path);\n\n await upsertAsset(this.fs, filePath, getValue(operation));\n successfulOperations.push(operation);\n } catch (error) {\n failedOperations.push({ operation, error: error as Error });\n ErrorHandler.handleError(\n 'File operation failed during undo/redo',\n {\n component: operation.path,\n operation: message.$case,\n },\n error as Error,\n );\n }\n }\n } else if (message.$case === 'composite') {\n // Execute file operations first, then CRDT operations\n for (const operation of message.fileOperations) {\n try {\n const isValid = await this.validateFileOperation(operation, getValue);\n if (!isValid) {\n failedOperations.push({\n operation,\n error: new Error('File operation validation failed'),\n });\n continue;\n }\n\n const filePath = isFileInAssetDir(operation.path)\n ? operation.path\n : withAssetDir(operation.path);\n\n await upsertAsset(this.fs, filePath, getValue(operation));\n successfulOperations.push(operation);\n } catch (error) {\n failedOperations.push({ operation, error: error as Error });\n ErrorHandler.handleError(\n 'File operation failed during composite undo/redo',\n {\n component: operation.path,\n operation: message.$case,\n },\n error as Error,\n );\n }\n }\n\n // Then execute CRDT operations\n for (const operation of message.crdtOperations) {\n try {\n const isValid = await this.validateCrdtOperation(operation);\n if (!isValid) {\n failedOperations.push({\n operation,\n error: new Error('Operation validation failed'),\n });\n continue;\n }\n\n const component = this.engine.getComponent(\n operation.componentName,\n ) as LastWriteWinElementSetComponentDefinition<unknown>;\n\n const value = getValue(operation);\n\n if (isNil(value)) {\n component.deleteFrom(operation.entity);\n } else {\n component.createOrReplace(operation.entity, value);\n }\n\n successfulOperations.push(operation);\n } catch (error) {\n failedOperations.push({ operation, error: error as Error });\n ErrorHandler.handleError(\n 'CRDT operation failed during composite undo/redo',\n {\n component: operation.componentName,\n entity: operation.entity,\n operation: message.$case,\n },\n error as Error,\n );\n }\n }\n }\n\n if (failedOperations.length > 0) {\n const totalOps =\n message.$case === 'composite'\n ? message.fileOperations.length + message.crdtOperations.length\n : (message as UndoRedoCrdt | UndoRedoFile).operations.length;\n const failedCount = failedOperations.length;\n const successCount = successfulOperations.length;\n\n ErrorHandler.handleError(\n `Undo/Redo completed with ${failedCount}/${totalOps} failures (${successCount} succeeded)`,\n {\n operation: `${message.$case}_partial_failure`,\n },\n );\n\n if (failedCount > totalOps / 2) {\n console.warn('High failure rate in undo/redo operation. Consider manual intervention.');\n }\n }\n } catch (error) {\n ErrorHandler.handleError(\n 'Critical failure in undo/redo execution',\n { operation: message.$case },\n error as Error,\n );\n throw error;\n }\n }\n\n addUndoFile(operations: FileOperation[]): void {\n if (operations.length === 0) {\n return;\n }\n // start deferred mode to potentially group with subsequent CRDT operations\n this.startDeferredMode(operations);\n }\n\n addUndoComposite(fileOperations: FileOperation[], crdtOperations: CrdtOperation[]): void {\n if (fileOperations.length === 0 && crdtOperations.length === 0) {\n return;\n }\n this.redoList.clear();\n this.undoList.push({ $case: 'composite', fileOperations, crdtOperations });\n this.saveToStorage();\n }\n\n startDeferredMode(fileOperations: FileOperation[]): void {\n if (this.deferredTimeout) {\n clearTimeout(this.deferredTimeout);\n }\n\n this.deferredFileOperations = fileOperations;\n\n this.deferredTimeout = setTimeout(() => {\n if (this.deferredFileOperations) {\n this.redoList.clear();\n this.undoList.push({ $case: 'file', operations: this.deferredFileOperations });\n this.saveToStorage();\n this.deferredFileOperations = null;\n }\n this.deferredTimeout = null;\n }, 100); // 100ms timeout - should be enough for immediate CRDT operations\n }\n\n endDeferredMode(): void {\n if (this.deferredTimeout) {\n clearTimeout(this.deferredTimeout);\n this.deferredTimeout = null;\n }\n this.deferredFileOperations = null;\n }\n\n clearHistory(): void {\n this.undoList.clear();\n this.redoList.clear();\n this.pendingCrdtOperations.clear();\n }\n\n getHistorySize(): { undoCount: number; redoCount: number } {\n return {\n undoCount: this.undoList.values().length,\n redoCount: this.redoList.values().length,\n };\n }\n\n private async verifyStateIntegrity(): Promise<boolean> {\n try {\n const composite = this.getComposite();\n if (!composite) {\n ErrorHandler.handleError('No composite available for state verification', {\n operation: 'state_verify',\n });\n return false;\n }\n return true;\n } catch (error) {\n ErrorHandler.handleError(\n 'State verification failed with error',\n { operation: 'state_verify' },\n error as Error,\n );\n return false;\n }\n }\n\n getDebugInfo(): {\n undoCount: number;\n redoCount: number;\n pendingOperations: number;\n memoryUsage: { undo: number; redo: number };\n stateIntegrity: boolean;\n } {\n return {\n undoCount: this.undoList.values().length,\n redoCount: this.redoList.values().length,\n pendingOperations: this.pendingCrdtOperations.size,\n memoryUsage: {\n undo: this.undoList.memorySize,\n redo: this.redoList.memorySize,\n },\n stateIntegrity: false,\n };\n }\n\n async _undo(): Promise<{ type: string }> {\n const msg = this.undoList.pop();\n if (!msg) return { type: '' };\n\n this.redoList.push(msg);\n this.isExecutingUndoRedo = true;\n\n try {\n await this.executeUndoRedoLogic(msg, getUndoValue);\n await this.engine.update(1 / 16);\n } finally {\n this.isExecutingUndoRedo = false;\n }\n\n return { type: msg.$case };\n }\n\n async _redo(): Promise<{ type: string }> {\n const msg = this.redoList.pop();\n if (!msg) return { type: '' };\n\n this.undoList.push(msg);\n this.isExecutingUndoRedo = true;\n\n try {\n await this.executeUndoRedoLogic(msg, getRedoValue);\n await this.engine.update(1 / 16);\n } finally {\n this.isExecutingUndoRedo = false;\n }\n\n return { type: msg.$case };\n }\n\n async undoWithVerification(): Promise<{ type: string; verified: boolean }> {\n const stateOk = await this.verifyStateIntegrity();\n if (!stateOk) {\n ErrorHandler.handleError('Undo operation aborted due to state integrity issues', {\n operation: 'undo_verification_failed',\n });\n return { type: '', verified: false };\n }\n\n const result = await this._undo();\n return { ...result, verified: true };\n }\n\n async redoWithVerification(): Promise<{ type: string; verified: boolean }> {\n const stateOk = await this.verifyStateIntegrity();\n if (!stateOk) {\n ErrorHandler.handleError('Redo operation aborted due to state integrity issues', {\n operation: 'redo_verification_failed',\n });\n return { type: '', verified: false };\n }\n\n const result = await this._redo();\n return { ...result, verified: true };\n }\n\n /**\n * Get storage statistics\n */\n getStorageInfo(): {\n enabled: boolean;\n storageKey: string;\n currentSize: number;\n maxSize: number;\n percentUsed: number;\n operationsStored: number;\n } {\n let currentSize = 0;\n let operationsStored = 0;\n\n if (typeof localStorage !== 'undefined' && this.options.persistToStorage) {\n try {\n const stored = localStorage.getItem(this.options.storageKey);\n if (stored) {\n currentSize = new Blob([stored]).size;\n const data = JSON.parse(stored);\n operationsStored = (data.undoStack?.length || 0) + (data.redoStack?.length || 0);\n }\n // eslint-disable-next-line no-empty\n } catch (error) {}\n }\n\n return {\n enabled: this.options.persistToStorage,\n storageKey: this.options.storageKey,\n currentSize,\n maxSize: this.options.maxStorageSize,\n percentUsed:\n this.options.maxStorageSize > 0 ? (currentSize / this.options.maxStorageSize) * 100 : 0,\n operationsStored,\n };\n }\n\n clearPersistedHistory(): void {\n this.clearStorage();\n console.log('Cleared persisted undo/redo history from localStorage');\n }\n\n forceSaveToStorage(): boolean {\n if (!this.options.persistToStorage) {\n console.warn('Persistent storage is not enabled');\n return false;\n }\n\n try {\n this.saveToStorage();\n return true;\n } catch (error) {\n ErrorHandler.handleError(\n 'Failed to force save to storage',\n { operation: 'force_save' },\n error as Error,\n );\n return false;\n }\n }\n\n setPersistentStorage(enabled: boolean): void {\n const wasEnabled = this.options.persistToStorage;\n this.options.persistToStorage = enabled;\n\n if (enabled && !wasEnabled) {\n this.saveToStorage();\n console.log('Persistent storage enabled for undo/redo');\n } else if (!enabled && wasEnabled) {\n console.log('Persistent storage disabled for undo/redo');\n }\n }\n\n dispose(): void {\n if (this.options.persistToStorage) {\n this.saveToStorage();\n }\n\n // Clean up deferred timeout\n if (this.deferredTimeout) {\n clearTimeout(this.deferredTimeout);\n this.deferredTimeout = null;\n }\n\n this.clearHistory();\n }\n}\n", "import { AsyncQueue } from '@well-known-components/pushable-channel';\nimport type { Transport } from '@dcl/ecs';\n\nimport { consumeAllMessagesInto } from '../../logic/consume-stream';\nimport type { DataLayerContext } from '../types';\nimport { serializeEngine } from './utils/engine';\n\nexport function createStream(\n stream: AsyncIterable<{ data: Uint8Array }>,\n ctx: Omit<DataLayerContext, 'fs'>,\n): AsyncGenerator<{ data: Uint8Array }> {\n const queue = new AsyncQueue<{ data: Uint8Array }>(_ => {});\n const engineSerialized = serializeEngine(ctx.engine);\n\n queue.enqueue({ data: engineSerialized });\n\n const transport: Transport = {\n filter() {\n return !queue.closed;\n },\n async send(message: Uint8Array) {\n if (queue.closed) return;\n queue.enqueue({ data: message });\n },\n };\n Object.assign(transport, { name: 'DataLayerHost' });\n ctx.engine.addTransport(transport);\n\n function processMessage(message: Uint8Array) {\n transport.onmessage!(message);\n void ctx.engine.update(1);\n }\n\n consumeAllMessagesInto(stream, processMessage).catch(err => {\n if (err instanceof Error && !err.message.includes('RPC Transport closed')) {\n console.error('Failed to consume stream from data layer ', err);\n }\n queue.close();\n });\n\n void ctx.engine.update(1);\n\n return queue;\n}\n", "import type { CrdtStreamMessage } from '../data-layer/proto/gen/data-layer.gen';\n\nexport async function consumeAllMessagesInto(\n iter: AsyncIterable<CrdtStreamMessage>,\n cb: (data: Uint8Array) => void,\n) {\n for await (const it of iter) {\n if (it.data.byteLength) {\n cb(it.data);\n }\n }\n}\n", "import type { IEngine, OnChangeFunction } from '@dcl/ecs';\n\nimport type { DataLayerRpcServer, FileSystemInterface } from '../types';\nimport { readPreferencesFromFile, serializeInspectorPreferences } from '../../logic/preferences/io';\nimport type { AssetData } from '../../logic/catalog';\nimport type { InspectorPreferences } from '../../logic/preferences/types';\nimport { EditorComponentNames } from '../../sdk/components/types';\nimport {\n DIRECTORY,\n EXTENSIONS,\n getCurrentCompositePath,\n getFilesInDirectory,\n withAssetDir,\n} from './fs-utils';\nimport type { FileOperation } from './undo-redo-provider';\nimport upsertAsset from './upsert-asset';\nimport { installBin } from './utils/install-bin';\nimport { StateManager } from './state-manager';\nimport { SceneProvider } from './scene-provider';\nimport { CompositeProvider } from './composite-provider';\nimport { UndoRedoProvider } from './undo-redo-provider';\nimport { createStream } from './stream';\n\nconst INSPECTOR_PREFERENCES_PATH = 'inspector-preferences.json';\n\nfunction getIgnoredUndoRedoComponents() {\n return [EditorComponentNames.Selection, EditorComponentNames.TransformConfig];\n}\n\nexport async function initRpcMethods(\n fs: FileSystemInterface,\n engine: IEngine,\n addEngineListener: (fn: OnChangeFunction) => void,\n): Promise<DataLayerRpcServer & { engine: IEngine }> {\n const currentCompositeResourcePath = getCurrentCompositePath();\n let inspectorPreferences = await readPreferencesFromFile(fs, INSPECTOR_PREFERENCES_PATH);\n const getInspectorPreferences = () => inspectorPreferences;\n const setInspectorPreferences = (value: InspectorPreferences) => {\n inspectorPreferences = value;\n fs.writeFile(INSPECTOR_PREFERENCES_PATH, serializeInspectorPreferences(value));\n };\n const getComposite = () => stateManager.getComposite();\n\n const stateManager = new StateManager({\n fs,\n engine,\n getInspectorPreferences,\n compositePath: currentCompositeResourcePath,\n });\n\n addEngineListener(stateManager.createOnChangeHandler()); // register state manager to engine changes\n\n const sceneProvider = await SceneProvider.create(fs);\n const compositeProvider = await CompositeProvider.create(\n fs,\n engine,\n getInspectorPreferences,\n currentCompositeResourcePath,\n );\n const undoRedoProvider = await UndoRedoProvider.create(fs, engine, getComposite, {\n enableValidation: true,\n enableStateVerification: true,\n persistToStorage: false, // disabled for now\n ignoredComponents: getIgnoredUndoRedoComponents(),\n });\n\n // order here matters!!!!: undo-redo, scene, composite\n stateManager.registerProvider(undoRedoProvider);\n stateManager.registerProvider(sceneProvider);\n stateManager.registerProvider(compositeProvider);\n\n await installBin(fs);\n\n return {\n engine,\n async redo() {\n return stateManager.executeTransaction('redo', async () => {\n return undoRedoProvider.redo();\n });\n },\n\n async undo() {\n return stateManager.executeTransaction('undo', async () => {\n return undoRedoProvider.undo();\n });\n },\n\n async getUndoRedoState() {\n const historySize = undoRedoProvider.getHistorySize();\n return {\n canUndo: historySize.undoCount > 0,\n canRedo: historySize.redoCount > 0,\n };\n },\n\n crdtStream(iter) {\n return createStream(iter, { engine });\n },\n\n async getAssetData(req) {\n if (!req.path) throw new Error('Invalid path');\n if (await fs.existFile(req.path)) {\n return {\n data: await fs.readFile(req.path),\n };\n }\n throw new Error(`Couldn't find the asset ${req.path}`);\n },\n\n async getFiles({ path, ignore = [] }) {\n const filesInDir = await getFilesInDirectory(fs, path, [], true, ignore);\n const files = await Promise.all(\n filesInDir.map(async $ => ({\n path: $,\n content: await fs.readFile($),\n })),\n );\n return { files };\n },\n\n async saveFile({ path, content }) {\n await fs.writeFile(path, Buffer.from(content));\n return {};\n },\n\n async getAssetCatalog() {\n const ignore = ['.git', 'node_modules'];\n const basePath = withAssetDir();\n\n const assets = (await getFilesInDirectory(fs, basePath, [], true, ignore)).filter(item => {\n const itemLower = item.toLowerCase();\n return EXTENSIONS.some(ext => itemLower.endsWith(ext));\n });\n\n return { basePath, assets: assets.map($ => ({ path: $ })) };\n },\n\n async importAsset({ assetPackageName, basePath, content }) {\n return stateManager.executeTransaction('external', async () => {\n const baseFolder = basePath.length ? basePath + '/' : '';\n const undoAcc: FileOperation[] = [];\n\n for (const [fileName, fileContent] of content) {\n const importName = assetPackageName ? `${assetPackageName}/${fileName}` : fileName;\n const filePath = (baseFolder + importName).replaceAll('//', '/');\n const prevValue = (await fs.existFile(filePath)) ? await fs.readFile(filePath) : null;\n undoAcc.push({ prevValue, newValue: fileContent, path: filePath });\n await upsertAsset(fs, filePath, fileContent);\n }\n\n if (undoAcc.length > 0) {\n undoRedoProvider.addUndoFile(undoAcc);\n }\n return {};\n });\n },\n\n async removeAsset(req) {\n return stateManager.executeTransaction('external', async () => {\n const filePath = req.path;\n if (await fs.existFile(filePath)) {\n const prevValue = await fs.readFile(filePath);\n await fs.rm(filePath);\n undoRedoProvider.addUndoFile([{ prevValue, newValue: null, path: filePath }]);\n }\n return {};\n });\n },\n\n async save() {\n await compositeProvider.saveComposite(true);\n return {};\n },\n\n async getInspectorPreferences() {\n return getInspectorPreferences();\n },\n\n async setInspectorPreferences(req) {\n setInspectorPreferences(req);\n return {};\n },\n\n async copyFile(req) {\n return stateManager.executeTransaction('external', async () => {\n const content = await fs.readFile(req.fromPath);\n const prevValue = (await fs.existFile(req.toPath)) ? await fs.readFile(req.toPath) : null;\n await fs.writeFile(req.toPath, content);\n\n undoRedoProvider.addUndoFile([{ prevValue, newValue: content, path: req.toPath }]);\n return {};\n });\n },\n\n async getFile(req) {\n const content = await fs.readFile(req.path);\n return { content };\n },\n\n async createCustomAsset(req) {\n return stateManager.executeTransaction('external', async () => {\n const { name, composite, resources, thumbnail } = req;\n\n const slug = name\n .toLowerCase()\n .replace(/[^a-z0-9]+/g, '_')\n .replace(/(^_|_$)/g, '');\n\n const basePath = `${DIRECTORY.CUSTOM}`;\n let customAssetPath = `${basePath}/${slug}`;\n let counter = 1;\n while (await fs.existFile(`${customAssetPath}/data.json`)) {\n customAssetPath = `${basePath}/${slug}_${++counter}`;\n }\n\n const data: Omit<AssetData, 'composite'> = {\n id: crypto.randomUUID(),\n name,\n category: 'custom',\n tags: [],\n };\n\n await fs.writeFile(\n `${customAssetPath}/data.json`,\n Buffer.from(JSON.stringify(data, null, 2)) as Buffer,\n );\n await fs.writeFile(\n `${customAssetPath}/composite.json`,\n Buffer.from(JSON.stringify(JSON.parse(new TextDecoder().decode(composite)), null, 2)),\n );\n\n if (thumbnail) {\n const thumbnailBuffer = Buffer.from(thumbnail);\n await fs.writeFile(`${customAssetPath}/thumbnail.png`, thumbnailBuffer);\n }\n\n const undoAcc: FileOperation[] = [];\n for (const resourcePath of resources) {\n const fileName = resourcePath.split('/').pop()!;\n const targetPath = `${customAssetPath}/${fileName}`;\n const content = await fs.readFile(resourcePath);\n\n undoAcc.push({\n prevValue: null,\n newValue: content,\n path: targetPath,\n });\n await fs.writeFile(targetPath, content);\n }\n\n undoRedoProvider.addUndoFile([\n ...undoAcc,\n {\n prevValue: null,\n newValue: Buffer.from(JSON.stringify(data, null, 2)),\n path: `${customAssetPath}/data.json`,\n },\n ]);\n\n const asset: AssetData = {\n id: data.id,\n name: data.name,\n category: data.category,\n tags: data.tags,\n composite: JSON.parse(new TextDecoder().decode(composite)),\n };\n\n return { asset: { data: Buffer.from(JSON.stringify(asset)) } };\n });\n },\n\n async getCustomAssets() {\n const paths = await getFilesInDirectory(fs, `${DIRECTORY.CUSTOM}`, [], true);\n const folders = [...new Set(paths.map(path => path.split('/')[1]))];\n const assets = (\n await Promise.all(\n folders.map(async path => {\n try {\n const files = await getFilesInDirectory(fs, `${DIRECTORY.CUSTOM}/${path}`, [], true);\n let dataPath: string | null = null;\n let compositePath: string | null = null;\n let thumbnailPath: string | null = null;\n const resources: string[] = [];\n for (const file of files) {\n if (file.endsWith('data.json')) {\n dataPath = file;\n } else if (file.endsWith('composite.json')) {\n compositePath = file;\n } else if (file.endsWith('thumbnail.png')) {\n thumbnailPath = file;\n } else {\n resources.push(file);\n }\n }\n if (!dataPath || !compositePath) {\n return null;\n }\n const data = await fs.readFile(dataPath);\n const composite = await fs.readFile(compositePath);\n const parsedData = JSON.parse(new TextDecoder().decode(data));\n const result: AssetData & { thumbnail?: string } = {\n ...parsedData,\n composite: JSON.parse(new TextDecoder().decode(composite)),\n resources,\n };\n\n if (thumbnailPath) {\n const thumbnailData = await fs.readFile(thumbnailPath);\n const thumbnailBuffer = Buffer.from(thumbnailData);\n result.thumbnail = `data:image/png;base64,${thumbnailBuffer.toString('base64')}`;\n }\n\n return result;\n } catch {\n return null;\n }\n }),\n )\n ).filter((asset): asset is AssetData & { thumbnail?: string } => asset !== null);\n return { assets: assets.map(asset => ({ data: Buffer.from(JSON.stringify(asset)) })) };\n },\n\n async deleteCustomAsset(req) {\n return stateManager.executeTransaction('external', async () => {\n const { assetId } = req;\n const paths = await getFilesInDirectory(fs, `${DIRECTORY.CUSTOM}`, [], true);\n const folders = [...new Set(paths.map(path => path.split('/')[1]))];\n\n const undoAcc: FileOperation[] = [];\n\n for (const folder of folders) {\n const dataPath = `${DIRECTORY.CUSTOM}/${folder}/data.json`;\n\n if (await fs.existFile(dataPath)) {\n try {\n const data = await fs.readFile(dataPath);\n const parsedData = JSON.parse(new TextDecoder().decode(data));\n\n if (parsedData.id === assetId) {\n const folderPath = `${DIRECTORY.CUSTOM}/${folder}`;\n const files = await getFilesInDirectory(fs, folderPath, [], true);\n\n for (const file of files) {\n const content = await fs.readFile(file);\n undoAcc.push({\n prevValue: content,\n newValue: null,\n path: file,\n });\n await fs.rm(file);\n }\n\n undoRedoProvider.addUndoFile(undoAcc);\n return {};\n }\n } catch (err) {\n continue;\n }\n }\n }\n\n throw new Error(`Custom asset with id ${assetId} not found`);\n });\n },\n\n async renameCustomAsset(req: { assetId: string; newName: string }) {\n return stateManager.executeTransaction('external', async () => {\n const { assetId, newName } = req;\n const paths = await getFilesInDirectory(fs, `${DIRECTORY.CUSTOM}`, [], true);\n const folders = [...new Set(paths.map(path => path.split('/')[1]))];\n\n const undoAcc: FileOperation[] = [];\n\n for (const folder of folders) {\n const dataPath = `${DIRECTORY.CUSTOM}/${folder}/data.json`;\n\n if (await fs.existFile(dataPath)) {\n try {\n const data = await fs.readFile(dataPath);\n const parsedData = JSON.parse(new TextDecoder().decode(data));\n\n if (parsedData.id === assetId) {\n const updatedData = { ...parsedData, name: newName };\n const newContent = Buffer.from(JSON.stringify(updatedData, null, 2));\n\n undoAcc.push({\n prevValue: data,\n newValue: newContent,\n path: dataPath,\n });\n\n await fs.writeFile(dataPath, newContent);\n undoRedoProvider.addUndoFile(undoAcc);\n return {};\n }\n } catch (err) {\n continue;\n }\n }\n }\n\n throw new Error(`Custom asset with id ${assetId} not found`);\n });\n },\n };\n}\n", "import type { IEngine, OnChangeFunction } from '@dcl/ecs';\nimport type { DataLayerRpcServer, FileSystemInterface } from '../types';\nimport { initRpcMethods } from './rpc-methods';\nimport { createEngineContext } from './utils/engine';\n\nexport * from './utils/engine';\nexport * from './utils/engine-to-composite';\n\nexport type DataLayerHost = {\n rpcMethods: DataLayerRpcServer;\n engine: IEngine;\n};\n\n/**\n * This RpcClient creates internally the server, implementing its own file system interface and engine.\n * @param fs\n * @returns\n */\n\nexport async function createDataLayerHost(fs: FileSystemInterface): Promise<DataLayerHost> {\n const callbackFunctions: OnChangeFunction[] = [];\n function addEngineListener(func: OnChangeFunction) {\n callbackFunctions.push(func);\n }\n const { engine } = createEngineContext({\n onChangeFunction: (entity, operation, component, componentValue) => {\n callbackFunctions.forEach(func => func(entity, operation, component, componentValue));\n },\n });\n Object.assign(globalThis, { dataLayerEngine: engine });\n\n const rpcMethods = await initRpcMethods(fs, engine, addEngineListener);\n\n return {\n rpcMethods,\n engine,\n };\n}\n", "import type { Transport } from '@dcl/mini-rpc';\nimport { RPC } from '@dcl/mini-rpc';\nimport { name, type Method, type Params, type Result } from './types';\n\nexport class CameraClient extends RPC<Method, Params, Result> {\n constructor(transport: Transport) {\n super(name, transport);\n }\n\n takeScreenshot = (width: number, height: number, precision?: number) => {\n return this.request('take_screenshot', { width, height, precision });\n };\n\n setTarget = (x: number, y: number, z: number) => {\n return this.request('set_target', { x, y, z });\n };\n\n setPosition = (x: number, y: number, z: number) => {\n return this.request('set_position', { x, y, z });\n };\n}\n", "export const name = 'CameraRPC';\n\nexport enum Method {\n TAKE_SCREENSHOT = 'take_screenshot',\n SET_TARGET = 'set_target',\n SET_POSITION = 'set_position',\n}\n\nexport type Params = {\n [Method.TAKE_SCREENSHOT]: { width: number; height: number; precision?: number };\n [Method.SET_TARGET]: { x: number; y: number; z: number };\n [Method.SET_POSITION]: { x: number; y: number; z: number };\n};\n\nexport type Result = {\n [Method.TAKE_SCREENSHOT]: string;\n [Method.SET_TARGET]: void;\n [Method.SET_POSITION]: void;\n};\n", "import type { Transport } from '@dcl/mini-rpc';\nimport { RPC } from '@dcl/mini-rpc';\nimport type { AssetsTab, PanelName, SceneInspectorTab } from '../../../redux/ui/types';\nimport { name, type Method, type Params, type Result } from './types';\n\nexport class UiClient extends RPC<Method, Params, Result> {\n constructor(transport: Transport) {\n super(name, transport);\n }\n\n toggleComponent = (component: string, enabled: boolean) => {\n return this.request('toggle_component', { component, enabled });\n };\n\n togglePanel = (panel: `${PanelName}`, enabled: boolean) => {\n return this.request('toggle_panel', { panel, enabled });\n };\n\n toggleGizmos = (enabled: boolean) => {\n return this.request('toggle_gizmos', { enabled });\n };\n\n toggleGroundGrid = (enabled: boolean) => {\n return this.request('toggle_ground_grid', { enabled });\n };\n\n selectAssetsTab = (tab: `${AssetsTab}`) => {\n return this.request('select_assets_tab', { tab });\n };\n\n selectSceneInspectorTab = (tab: `${SceneInspectorTab}`) => {\n return this.request('select_scene_inspector_tab', { tab });\n };\n\n toggleSceneInspectorTab = (tab: `${SceneInspectorTab}`, enabled: boolean) => {\n return this.request('toggle_scene_inspector_tab', { tab, enabled });\n };\n}\n", "import type { AssetsTab, PanelName, SceneInspectorTab } from '../../../redux/ui/types';\n\nexport const name = 'UiRPC';\n\nexport enum Method {\n TOGGLE_COMPONENT = 'toggle_component',\n TOGGLE_PANEL = 'toggle_panel',\n TOGGLE_GIZMOS = 'toggle_gizmos',\n SELECT_ASSETS_TAB = 'select_assets_tab',\n SELECT_SCENE_INSPECTOR_TAB = 'select_scene_inspector_tab',\n TOGGLE_SCENE_INSPECTOR_TAB = 'toggle_scene_inspector_tab',\n TOGGLE_GROUND_GRID = 'toggle_ground_grid',\n}\n\nexport type Params = {\n [Method.TOGGLE_COMPONENT]: { component: string; enabled: boolean };\n [Method.TOGGLE_PANEL]: { panel: `${PanelName}`; enabled: boolean };\n [Method.TOGGLE_GIZMOS]: { enabled: boolean };\n [Method.SELECT_ASSETS_TAB]: { tab: `${AssetsTab}` };\n [Method.SELECT_SCENE_INSPECTOR_TAB]: { tab: `${SceneInspectorTab}` };\n [Method.TOGGLE_SCENE_INSPECTOR_TAB]: { tab: `${SceneInspectorTab}`; enabled: boolean };\n [Method.TOGGLE_GROUND_GRID]: { enabled: boolean };\n};\n\nexport type Result = {\n [Method.TOGGLE_COMPONENT]: void;\n [Method.TOGGLE_PANEL]: void;\n [Method.TOGGLE_GIZMOS]: void;\n [Method.SELECT_ASSETS_TAB]: void;\n [Method.SELECT_SCENE_INSPECTOR_TAB]: void;\n [Method.TOGGLE_SCENE_INSPECTOR_TAB]: void;\n [Method.TOGGLE_GROUND_GRID]: void;\n};\n", "import type { Transport } from '@dcl/mini-rpc';\nimport { RPC, MessageTransport } from '@dcl/mini-rpc';\nimport type { Storage } from './types';\n\nexport enum Method {\n READ_FILE = 'read_file',\n WRITE_FILE = 'write_file',\n EXISTS = 'exists',\n DELETE = 'delete',\n LIST = 'list',\n}\n\nexport type Params = {\n [Method.READ_FILE]: { path: string };\n [Method.WRITE_FILE]: { path: string; content: Buffer };\n [Method.DELETE]: { path: string };\n [Method.EXISTS]: { path: string };\n [Method.LIST]: { path: string };\n};\n\nexport type Result = {\n [Method.READ_FILE]: Buffer;\n [Method.WRITE_FILE]: void;\n [Method.DELETE]: void;\n [Method.EXISTS]: boolean;\n [Method.LIST]: { name: string; isDirectory: boolean }[];\n};\n\nexport const id = 'IframeStorage';\n\nexport class Client extends RPC<Method, Params, Result> {\n constructor(transport: Transport) {\n super(id, transport);\n }\n\n readFile(path: string) {\n return this.request('read_file', { path });\n }\n\n writeFile(path: string, content: Buffer) {\n return this.request('write_file', { path, content });\n }\n\n exists(path: string) {\n return this.request('exists', { path });\n }\n\n delete(path: string) {\n return this.request('delete', { path });\n }\n\n list(path: string) {\n return this.request('list', { path });\n }\n}\n\nexport class Server extends RPC<Method, Params, Result> {\n constructor(transport: Transport) {\n super(id, transport);\n }\n}\n\nexport function createIframeStorage(origin: string): Storage {\n if (!window.parent) {\n throw new Error('To use this storage the webapp needs to be inside an iframe');\n }\n\n const transport = new MessageTransport(window, window.parent, origin);\n const client = new Client(transport);\n\n return client;\n}\n", "import type { Transport } from '@dcl/mini-rpc';\nimport { RPC } from '@dcl/mini-rpc';\nimport { name, Method, type Params, type Result } from './types';\n\nexport class SceneMetricsClient extends RPC<Method, Params, Result> {\n constructor(transport: Transport) {\n super(name, transport);\n }\n\n getMetrics = () => {\n return this.request(Method.GET_METRICS, undefined);\n };\n\n getLimits = () => {\n return this.request(Method.GET_LIMITS, undefined);\n };\n\n getEntitiesOutOfBoundaries = () => {\n return this.request(Method.GET_ENTITIES_OUT_OF_BOUNDARIES, undefined);\n };\n}\n", "import type { SceneMetrics } from '../../../redux/scene-metrics/types';\n\nexport const name = 'SceneMetricsRPC';\n\nexport enum Method {\n GET_METRICS = 'get_metrics',\n GET_LIMITS = 'get_limits',\n GET_ENTITIES_OUT_OF_BOUNDARIES = 'get_entities_out_of_boundaries',\n}\n\nexport type Params = {\n [Method.GET_METRICS]: undefined;\n [Method.GET_LIMITS]: undefined;\n [Method.GET_ENTITIES_OUT_OF_BOUNDARIES]: undefined;\n};\n\nexport type Result = {\n [Method.GET_METRICS]: SceneMetrics;\n [Method.GET_LIMITS]: SceneMetrics;\n [Method.GET_ENTITIES_OUT_OF_BOUNDARIES]: number[];\n};\n"],
4
+ "sourcesContent": [null, null, null, null, null, null, "export * from './lib/data-layer/remote-data-layer';\nexport * from './lib/rpc/camera/client';\nexport * from './lib/rpc/ui/client';\nexport * from './lib/logic/storage';\nexport * from './lib/rpc/scene-metrics/client';\nexport * from './lib/data-layer/host/utils/engine-to-composite';\nexport * from './lib/data-layer/types';\n", "/* eslint-disable */\nimport _m0 from \"protobufjs/minimal\";\n\nexport const protobufPackage = \"\";\n\nexport interface Empty {\n}\n\n/** TODO: Maybe when we implement the list of undo/redo available we dont need this. */\nexport interface UndoRedoResponse {\n type: string;\n}\n\nexport interface CrdtStreamMessage {\n data: Uint8Array;\n}\n\nexport interface AssetData {\n data: Uint8Array;\n}\n\nexport interface GetFilesRequest {\n path: string;\n ignore: string[];\n}\n\nexport interface GetFilesResponse {\n files: GetFilesResponse_File[];\n}\n\nexport interface GetFilesResponse_File {\n path: string;\n content: Uint8Array;\n}\n\nexport interface SaveFileRequest {\n path: string;\n content: Uint8Array;\n}\n\nexport interface Asset {\n path: string;\n}\n\nexport interface AssetCatalogResponse {\n basePath: string;\n assets: Asset[];\n}\n\nexport interface ImportAssetRequest {\n basePath: string;\n assetPackageName: string;\n content: Map<string, Uint8Array>;\n}\n\nexport interface ImportAssetRequest_ContentEntry {\n key: string;\n value: Uint8Array;\n}\n\nexport interface InspectorPreferencesMessage {\n freeCameraInvertRotation: boolean;\n autosaveEnabled: boolean;\n}\n\nexport interface CopyFileRequest {\n fromPath: string;\n toPath: string;\n}\n\nexport interface GetFileRequest {\n path: string;\n}\n\nexport interface GetFileResponse {\n content: Uint8Array;\n}\n\nexport interface CreateCustomAssetRequest {\n name: string;\n composite: Uint8Array;\n resources: string[];\n thumbnail?: Uint8Array | undefined;\n}\n\nexport interface CreateCustomAssetResponse {\n asset: AssetData | undefined;\n}\n\nexport interface GetCustomAssetsResponse {\n assets: AssetData[];\n}\n\nexport interface DeleteCustomAssetRequest {\n assetId: string;\n}\n\nexport interface RenameCustomAssetRequest {\n assetId: string;\n newName: string;\n}\n\nexport interface UndoRedoStateResponse {\n canUndo: boolean;\n canRedo: boolean;\n}\n\nfunction createBaseEmpty(): Empty {\n return {};\n}\n\nexport namespace Empty {\n export function encode(_: Empty, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n return writer;\n }\n\n export function decode(input: _m0.Reader | Uint8Array, length?: number): Empty {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseEmpty();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n }\n\n export function fromJSON(_: any): Empty {\n return {};\n }\n\n export function toJSON(_: Empty): unknown {\n const obj: any = {};\n return obj;\n }\n\n export function create<I extends Exact<DeepPartial<Empty>, I>>(base?: I): Empty {\n return Empty.fromPartial(base ?? {});\n }\n\n export function fromPartial<I extends Exact<DeepPartial<Empty>, I>>(_: I): Empty {\n const message = createBaseEmpty();\n return message;\n }\n}\n\nfunction createBaseUndoRedoResponse(): UndoRedoResponse {\n return { type: \"\" };\n}\n\nexport namespace UndoRedoResponse {\n export function encode(message: UndoRedoResponse, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n if (message.type !== \"\") {\n writer.uint32(10).string(message.type);\n }\n return writer;\n }\n\n export function decode(input: _m0.Reader | Uint8Array, length?: number): UndoRedoResponse {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseUndoRedoResponse();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.type = reader.string();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n }\n\n export function fromJSON(object: any): UndoRedoResponse {\n return { type: isSet(object.type) ? String(object.type) : \"\" };\n }\n\n export function toJSON(message: UndoRedoResponse): unknown {\n const obj: any = {};\n message.type !== undefined && (obj.type = message.type);\n return obj;\n }\n\n export function create<I extends Exact<DeepPartial<UndoRedoResponse>, I>>(base?: I): UndoRedoResponse {\n return UndoRedoResponse.fromPartial(base ?? {});\n }\n\n export function fromPartial<I extends Exact<DeepPartial<UndoRedoResponse>, I>>(object: I): UndoRedoResponse {\n const message = createBaseUndoRedoResponse();\n message.type = object.type ?? \"\";\n return message;\n }\n}\n\nfunction createBaseCrdtStreamMessage(): CrdtStreamMessage {\n return { data: new Uint8Array(0) };\n}\n\nexport namespace CrdtStreamMessage {\n export function encode(message: CrdtStreamMessage, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n if (message.data.length !== 0) {\n writer.uint32(10).bytes(message.data);\n }\n return writer;\n }\n\n export function decode(input: _m0.Reader | Uint8Array, length?: number): CrdtStreamMessage {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseCrdtStreamMessage();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.data = reader.bytes();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n }\n\n export function fromJSON(object: any): CrdtStreamMessage {\n return { data: isSet(object.data) ? bytesFromBase64(object.data) : new Uint8Array(0) };\n }\n\n export function toJSON(message: CrdtStreamMessage): unknown {\n const obj: any = {};\n message.data !== undefined &&\n (obj.data = base64FromBytes(message.data !== undefined ? message.data : new Uint8Array(0)));\n return obj;\n }\n\n export function create<I extends Exact<DeepPartial<CrdtStreamMessage>, I>>(base?: I): CrdtStreamMessage {\n return CrdtStreamMessage.fromPartial(base ?? {});\n }\n\n export function fromPartial<I extends Exact<DeepPartial<CrdtStreamMessage>, I>>(object: I): CrdtStreamMessage {\n const message = createBaseCrdtStreamMessage();\n message.data = object.data ?? new Uint8Array(0);\n return message;\n }\n}\n\nfunction createBaseAssetData(): AssetData {\n return { data: new Uint8Array(0) };\n}\n\nexport namespace AssetData {\n export function encode(message: AssetData, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n if (message.data.length !== 0) {\n writer.uint32(10).bytes(message.data);\n }\n return writer;\n }\n\n export function decode(input: _m0.Reader | Uint8Array, length?: number): AssetData {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseAssetData();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.data = reader.bytes();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n }\n\n export function fromJSON(object: any): AssetData {\n return { data: isSet(object.data) ? bytesFromBase64(object.data) : new Uint8Array(0) };\n }\n\n export function toJSON(message: AssetData): unknown {\n const obj: any = {};\n message.data !== undefined &&\n (obj.data = base64FromBytes(message.data !== undefined ? message.data : new Uint8Array(0)));\n return obj;\n }\n\n export function create<I extends Exact<DeepPartial<AssetData>, I>>(base?: I): AssetData {\n return AssetData.fromPartial(base ?? {});\n }\n\n export function fromPartial<I extends Exact<DeepPartial<AssetData>, I>>(object: I): AssetData {\n const message = createBaseAssetData();\n message.data = object.data ?? new Uint8Array(0);\n return message;\n }\n}\n\nfunction createBaseGetFilesRequest(): GetFilesRequest {\n return { path: \"\", ignore: [] };\n}\n\nexport namespace GetFilesRequest {\n export function encode(message: GetFilesRequest, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n if (message.path !== \"\") {\n writer.uint32(10).string(message.path);\n }\n for (const v of message.ignore) {\n writer.uint32(18).string(v!);\n }\n return writer;\n }\n\n export function decode(input: _m0.Reader | Uint8Array, length?: number): GetFilesRequest {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseGetFilesRequest();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.path = reader.string();\n continue;\n case 2:\n if (tag !== 18) {\n break;\n }\n\n message.ignore.push(reader.string());\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n }\n\n export function fromJSON(object: any): GetFilesRequest {\n return {\n path: isSet(object.path) ? String(object.path) : \"\",\n ignore: Array.isArray(object?.ignore) ? object.ignore.map((e: any) => String(e)) : [],\n };\n }\n\n export function toJSON(message: GetFilesRequest): unknown {\n const obj: any = {};\n message.path !== undefined && (obj.path = message.path);\n if (message.ignore) {\n obj.ignore = message.ignore.map((e) => e);\n } else {\n obj.ignore = [];\n }\n return obj;\n }\n\n export function create<I extends Exact<DeepPartial<GetFilesRequest>, I>>(base?: I): GetFilesRequest {\n return GetFilesRequest.fromPartial(base ?? {});\n }\n\n export function fromPartial<I extends Exact<DeepPartial<GetFilesRequest>, I>>(object: I): GetFilesRequest {\n const message = createBaseGetFilesRequest();\n message.path = object.path ?? \"\";\n message.ignore = object.ignore?.map((e) => e) || [];\n return message;\n }\n}\n\nfunction createBaseGetFilesResponse(): GetFilesResponse {\n return { files: [] };\n}\n\nexport namespace GetFilesResponse {\n export function encode(message: GetFilesResponse, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n for (const v of message.files) {\n GetFilesResponse_File.encode(v!, writer.uint32(10).fork()).ldelim();\n }\n return writer;\n }\n\n export function decode(input: _m0.Reader | Uint8Array, length?: number): GetFilesResponse {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseGetFilesResponse();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.files.push(GetFilesResponse_File.decode(reader, reader.uint32()));\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n }\n\n export function fromJSON(object: any): GetFilesResponse {\n return {\n files: Array.isArray(object?.files) ? object.files.map((e: any) => GetFilesResponse_File.fromJSON(e)) : [],\n };\n }\n\n export function toJSON(message: GetFilesResponse): unknown {\n const obj: any = {};\n if (message.files) {\n obj.files = message.files.map((e) => e ? GetFilesResponse_File.toJSON(e) : undefined);\n } else {\n obj.files = [];\n }\n return obj;\n }\n\n export function create<I extends Exact<DeepPartial<GetFilesResponse>, I>>(base?: I): GetFilesResponse {\n return GetFilesResponse.fromPartial(base ?? {});\n }\n\n export function fromPartial<I extends Exact<DeepPartial<GetFilesResponse>, I>>(object: I): GetFilesResponse {\n const message = createBaseGetFilesResponse();\n message.files = object.files?.map((e) => GetFilesResponse_File.fromPartial(e)) || [];\n return message;\n }\n}\n\nfunction createBaseGetFilesResponse_File(): GetFilesResponse_File {\n return { path: \"\", content: new Uint8Array(0) };\n}\n\nexport namespace GetFilesResponse_File {\n export function encode(message: GetFilesResponse_File, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n if (message.path !== \"\") {\n writer.uint32(10).string(message.path);\n }\n if (message.content.length !== 0) {\n writer.uint32(18).bytes(message.content);\n }\n return writer;\n }\n\n export function decode(input: _m0.Reader | Uint8Array, length?: number): GetFilesResponse_File {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseGetFilesResponse_File();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.path = reader.string();\n continue;\n case 2:\n if (tag !== 18) {\n break;\n }\n\n message.content = reader.bytes();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n }\n\n export function fromJSON(object: any): GetFilesResponse_File {\n return {\n path: isSet(object.path) ? String(object.path) : \"\",\n content: isSet(object.content) ? bytesFromBase64(object.content) : new Uint8Array(0),\n };\n }\n\n export function toJSON(message: GetFilesResponse_File): unknown {\n const obj: any = {};\n message.path !== undefined && (obj.path = message.path);\n message.content !== undefined &&\n (obj.content = base64FromBytes(message.content !== undefined ? message.content : new Uint8Array(0)));\n return obj;\n }\n\n export function create<I extends Exact<DeepPartial<GetFilesResponse_File>, I>>(base?: I): GetFilesResponse_File {\n return GetFilesResponse_File.fromPartial(base ?? {});\n }\n\n export function fromPartial<I extends Exact<DeepPartial<GetFilesResponse_File>, I>>(\n object: I,\n ): GetFilesResponse_File {\n const message = createBaseGetFilesResponse_File();\n message.path = object.path ?? \"\";\n message.content = object.content ?? new Uint8Array(0);\n return message;\n }\n}\n\nfunction createBaseSaveFileRequest(): SaveFileRequest {\n return { path: \"\", content: new Uint8Array(0) };\n}\n\nexport namespace SaveFileRequest {\n export function encode(message: SaveFileRequest, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n if (message.path !== \"\") {\n writer.uint32(10).string(message.path);\n }\n if (message.content.length !== 0) {\n writer.uint32(18).bytes(message.content);\n }\n return writer;\n }\n\n export function decode(input: _m0.Reader | Uint8Array, length?: number): SaveFileRequest {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseSaveFileRequest();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.path = reader.string();\n continue;\n case 2:\n if (tag !== 18) {\n break;\n }\n\n message.content = reader.bytes();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n }\n\n export function fromJSON(object: any): SaveFileRequest {\n return {\n path: isSet(object.path) ? String(object.path) : \"\",\n content: isSet(object.content) ? bytesFromBase64(object.content) : new Uint8Array(0),\n };\n }\n\n export function toJSON(message: SaveFileRequest): unknown {\n const obj: any = {};\n message.path !== undefined && (obj.path = message.path);\n message.content !== undefined &&\n (obj.content = base64FromBytes(message.content !== undefined ? message.content : new Uint8Array(0)));\n return obj;\n }\n\n export function create<I extends Exact<DeepPartial<SaveFileRequest>, I>>(base?: I): SaveFileRequest {\n return SaveFileRequest.fromPartial(base ?? {});\n }\n\n export function fromPartial<I extends Exact<DeepPartial<SaveFileRequest>, I>>(object: I): SaveFileRequest {\n const message = createBaseSaveFileRequest();\n message.path = object.path ?? \"\";\n message.content = object.content ?? new Uint8Array(0);\n return message;\n }\n}\n\nfunction createBaseAsset(): Asset {\n return { path: \"\" };\n}\n\nexport namespace Asset {\n export function encode(message: Asset, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n if (message.path !== \"\") {\n writer.uint32(10).string(message.path);\n }\n return writer;\n }\n\n export function decode(input: _m0.Reader | Uint8Array, length?: number): Asset {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseAsset();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.path = reader.string();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n }\n\n export function fromJSON(object: any): Asset {\n return { path: isSet(object.path) ? String(object.path) : \"\" };\n }\n\n export function toJSON(message: Asset): unknown {\n const obj: any = {};\n message.path !== undefined && (obj.path = message.path);\n return obj;\n }\n\n export function create<I extends Exact<DeepPartial<Asset>, I>>(base?: I): Asset {\n return Asset.fromPartial(base ?? {});\n }\n\n export function fromPartial<I extends Exact<DeepPartial<Asset>, I>>(object: I): Asset {\n const message = createBaseAsset();\n message.path = object.path ?? \"\";\n return message;\n }\n}\n\nfunction createBaseAssetCatalogResponse(): AssetCatalogResponse {\n return { basePath: \"\", assets: [] };\n}\n\nexport namespace AssetCatalogResponse {\n export function encode(message: AssetCatalogResponse, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n if (message.basePath !== \"\") {\n writer.uint32(10).string(message.basePath);\n }\n for (const v of message.assets) {\n Asset.encode(v!, writer.uint32(18).fork()).ldelim();\n }\n return writer;\n }\n\n export function decode(input: _m0.Reader | Uint8Array, length?: number): AssetCatalogResponse {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseAssetCatalogResponse();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.basePath = reader.string();\n continue;\n case 2:\n if (tag !== 18) {\n break;\n }\n\n message.assets.push(Asset.decode(reader, reader.uint32()));\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n }\n\n export function fromJSON(object: any): AssetCatalogResponse {\n return {\n basePath: isSet(object.basePath) ? String(object.basePath) : \"\",\n assets: Array.isArray(object?.assets) ? object.assets.map((e: any) => Asset.fromJSON(e)) : [],\n };\n }\n\n export function toJSON(message: AssetCatalogResponse): unknown {\n const obj: any = {};\n message.basePath !== undefined && (obj.basePath = message.basePath);\n if (message.assets) {\n obj.assets = message.assets.map((e) => e ? Asset.toJSON(e) : undefined);\n } else {\n obj.assets = [];\n }\n return obj;\n }\n\n export function create<I extends Exact<DeepPartial<AssetCatalogResponse>, I>>(base?: I): AssetCatalogResponse {\n return AssetCatalogResponse.fromPartial(base ?? {});\n }\n\n export function fromPartial<I extends Exact<DeepPartial<AssetCatalogResponse>, I>>(object: I): AssetCatalogResponse {\n const message = createBaseAssetCatalogResponse();\n message.basePath = object.basePath ?? \"\";\n message.assets = object.assets?.map((e) => Asset.fromPartial(e)) || [];\n return message;\n }\n}\n\nfunction createBaseImportAssetRequest(): ImportAssetRequest {\n return { basePath: \"\", assetPackageName: \"\", content: new Map() };\n}\n\nexport namespace ImportAssetRequest {\n export function encode(message: ImportAssetRequest, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n if (message.basePath !== \"\") {\n writer.uint32(10).string(message.basePath);\n }\n if (message.assetPackageName !== \"\") {\n writer.uint32(18).string(message.assetPackageName);\n }\n message.content.forEach((value, key) => {\n ImportAssetRequest_ContentEntry.encode({ key: key as any, value }, writer.uint32(26).fork()).ldelim();\n });\n return writer;\n }\n\n export function decode(input: _m0.Reader | Uint8Array, length?: number): ImportAssetRequest {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseImportAssetRequest();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.basePath = reader.string();\n continue;\n case 2:\n if (tag !== 18) {\n break;\n }\n\n message.assetPackageName = reader.string();\n continue;\n case 3:\n if (tag !== 26) {\n break;\n }\n\n const entry3 = ImportAssetRequest_ContentEntry.decode(reader, reader.uint32());\n if (entry3.value !== undefined) {\n message.content.set(entry3.key, entry3.value);\n }\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n }\n\n export function fromJSON(object: any): ImportAssetRequest {\n return {\n basePath: isSet(object.basePath) ? String(object.basePath) : \"\",\n assetPackageName: isSet(object.assetPackageName) ? String(object.assetPackageName) : \"\",\n content: isObject(object.content)\n ? Object.entries(object.content).reduce<Map<string, Uint8Array>>((acc, [key, value]) => {\n acc.set(key, bytesFromBase64(value as string));\n return acc;\n }, new Map())\n : new Map(),\n };\n }\n\n export function toJSON(message: ImportAssetRequest): unknown {\n const obj: any = {};\n message.basePath !== undefined && (obj.basePath = message.basePath);\n message.assetPackageName !== undefined && (obj.assetPackageName = message.assetPackageName);\n obj.content = {};\n if (message.content) {\n message.content.forEach((v, k) => {\n obj.content[k] = base64FromBytes(v);\n });\n }\n return obj;\n }\n\n export function create<I extends Exact<DeepPartial<ImportAssetRequest>, I>>(base?: I): ImportAssetRequest {\n return ImportAssetRequest.fromPartial(base ?? {});\n }\n\n export function fromPartial<I extends Exact<DeepPartial<ImportAssetRequest>, I>>(object: I): ImportAssetRequest {\n const message = createBaseImportAssetRequest();\n message.basePath = object.basePath ?? \"\";\n message.assetPackageName = object.assetPackageName ?? \"\";\n message.content = (() => {\n const m = new Map();\n (object.content as Map<string, Uint8Array> ?? new Map()).forEach((value, key) => {\n if (value !== undefined) {\n m.set(key, value);\n }\n });\n return m;\n })();\n return message;\n }\n}\n\nfunction createBaseImportAssetRequest_ContentEntry(): ImportAssetRequest_ContentEntry {\n return { key: \"\", value: new Uint8Array(0) };\n}\n\nexport namespace ImportAssetRequest_ContentEntry {\n export function encode(\n message: ImportAssetRequest_ContentEntry,\n writer: _m0.Writer = _m0.Writer.create(),\n ): _m0.Writer {\n if (message.key !== \"\") {\n writer.uint32(10).string(message.key);\n }\n if (message.value.length !== 0) {\n writer.uint32(18).bytes(message.value);\n }\n return writer;\n }\n\n export function decode(input: _m0.Reader | Uint8Array, length?: number): ImportAssetRequest_ContentEntry {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseImportAssetRequest_ContentEntry();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.key = reader.string();\n continue;\n case 2:\n if (tag !== 18) {\n break;\n }\n\n message.value = reader.bytes();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n }\n\n export function fromJSON(object: any): ImportAssetRequest_ContentEntry {\n return {\n key: isSet(object.key) ? String(object.key) : \"\",\n value: isSet(object.value) ? bytesFromBase64(object.value) : new Uint8Array(0),\n };\n }\n\n export function toJSON(message: ImportAssetRequest_ContentEntry): unknown {\n const obj: any = {};\n message.key !== undefined && (obj.key = message.key);\n message.value !== undefined &&\n (obj.value = base64FromBytes(message.value !== undefined ? message.value : new Uint8Array(0)));\n return obj;\n }\n\n export function create<I extends Exact<DeepPartial<ImportAssetRequest_ContentEntry>, I>>(\n base?: I,\n ): ImportAssetRequest_ContentEntry {\n return ImportAssetRequest_ContentEntry.fromPartial(base ?? {});\n }\n\n export function fromPartial<I extends Exact<DeepPartial<ImportAssetRequest_ContentEntry>, I>>(\n object: I,\n ): ImportAssetRequest_ContentEntry {\n const message = createBaseImportAssetRequest_ContentEntry();\n message.key = object.key ?? \"\";\n message.value = object.value ?? new Uint8Array(0);\n return message;\n }\n}\n\nfunction createBaseInspectorPreferencesMessage(): InspectorPreferencesMessage {\n return { freeCameraInvertRotation: false, autosaveEnabled: false };\n}\n\nexport namespace InspectorPreferencesMessage {\n export function encode(message: InspectorPreferencesMessage, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n if (message.freeCameraInvertRotation === true) {\n writer.uint32(8).bool(message.freeCameraInvertRotation);\n }\n if (message.autosaveEnabled === true) {\n writer.uint32(16).bool(message.autosaveEnabled);\n }\n return writer;\n }\n\n export function decode(input: _m0.Reader | Uint8Array, length?: number): InspectorPreferencesMessage {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseInspectorPreferencesMessage();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 8) {\n break;\n }\n\n message.freeCameraInvertRotation = reader.bool();\n continue;\n case 2:\n if (tag !== 16) {\n break;\n }\n\n message.autosaveEnabled = reader.bool();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n }\n\n export function fromJSON(object: any): InspectorPreferencesMessage {\n return {\n freeCameraInvertRotation: isSet(object.freeCameraInvertRotation)\n ? Boolean(object.freeCameraInvertRotation)\n : false,\n autosaveEnabled: isSet(object.autosaveEnabled) ? Boolean(object.autosaveEnabled) : false,\n };\n }\n\n export function toJSON(message: InspectorPreferencesMessage): unknown {\n const obj: any = {};\n message.freeCameraInvertRotation !== undefined && (obj.freeCameraInvertRotation = message.freeCameraInvertRotation);\n message.autosaveEnabled !== undefined && (obj.autosaveEnabled = message.autosaveEnabled);\n return obj;\n }\n\n export function create<I extends Exact<DeepPartial<InspectorPreferencesMessage>, I>>(\n base?: I,\n ): InspectorPreferencesMessage {\n return InspectorPreferencesMessage.fromPartial(base ?? {});\n }\n\n export function fromPartial<I extends Exact<DeepPartial<InspectorPreferencesMessage>, I>>(\n object: I,\n ): InspectorPreferencesMessage {\n const message = createBaseInspectorPreferencesMessage();\n message.freeCameraInvertRotation = object.freeCameraInvertRotation ?? false;\n message.autosaveEnabled = object.autosaveEnabled ?? false;\n return message;\n }\n}\n\nfunction createBaseCopyFileRequest(): CopyFileRequest {\n return { fromPath: \"\", toPath: \"\" };\n}\n\nexport namespace CopyFileRequest {\n export function encode(message: CopyFileRequest, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n if (message.fromPath !== \"\") {\n writer.uint32(10).string(message.fromPath);\n }\n if (message.toPath !== \"\") {\n writer.uint32(18).string(message.toPath);\n }\n return writer;\n }\n\n export function decode(input: _m0.Reader | Uint8Array, length?: number): CopyFileRequest {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseCopyFileRequest();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.fromPath = reader.string();\n continue;\n case 2:\n if (tag !== 18) {\n break;\n }\n\n message.toPath = reader.string();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n }\n\n export function fromJSON(object: any): CopyFileRequest {\n return {\n fromPath: isSet(object.fromPath) ? String(object.fromPath) : \"\",\n toPath: isSet(object.toPath) ? String(object.toPath) : \"\",\n };\n }\n\n export function toJSON(message: CopyFileRequest): unknown {\n const obj: any = {};\n message.fromPath !== undefined && (obj.fromPath = message.fromPath);\n message.toPath !== undefined && (obj.toPath = message.toPath);\n return obj;\n }\n\n export function create<I extends Exact<DeepPartial<CopyFileRequest>, I>>(base?: I): CopyFileRequest {\n return CopyFileRequest.fromPartial(base ?? {});\n }\n\n export function fromPartial<I extends Exact<DeepPartial<CopyFileRequest>, I>>(object: I): CopyFileRequest {\n const message = createBaseCopyFileRequest();\n message.fromPath = object.fromPath ?? \"\";\n message.toPath = object.toPath ?? \"\";\n return message;\n }\n}\n\nfunction createBaseGetFileRequest(): GetFileRequest {\n return { path: \"\" };\n}\n\nexport namespace GetFileRequest {\n export function encode(message: GetFileRequest, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n if (message.path !== \"\") {\n writer.uint32(10).string(message.path);\n }\n return writer;\n }\n\n export function decode(input: _m0.Reader | Uint8Array, length?: number): GetFileRequest {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseGetFileRequest();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.path = reader.string();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n }\n\n export function fromJSON(object: any): GetFileRequest {\n return { path: isSet(object.path) ? String(object.path) : \"\" };\n }\n\n export function toJSON(message: GetFileRequest): unknown {\n const obj: any = {};\n message.path !== undefined && (obj.path = message.path);\n return obj;\n }\n\n export function create<I extends Exact<DeepPartial<GetFileRequest>, I>>(base?: I): GetFileRequest {\n return GetFileRequest.fromPartial(base ?? {});\n }\n\n export function fromPartial<I extends Exact<DeepPartial<GetFileRequest>, I>>(object: I): GetFileRequest {\n const message = createBaseGetFileRequest();\n message.path = object.path ?? \"\";\n return message;\n }\n}\n\nfunction createBaseGetFileResponse(): GetFileResponse {\n return { content: new Uint8Array(0) };\n}\n\nexport namespace GetFileResponse {\n export function encode(message: GetFileResponse, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n if (message.content.length !== 0) {\n writer.uint32(10).bytes(message.content);\n }\n return writer;\n }\n\n export function decode(input: _m0.Reader | Uint8Array, length?: number): GetFileResponse {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseGetFileResponse();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.content = reader.bytes();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n }\n\n export function fromJSON(object: any): GetFileResponse {\n return { content: isSet(object.content) ? bytesFromBase64(object.content) : new Uint8Array(0) };\n }\n\n export function toJSON(message: GetFileResponse): unknown {\n const obj: any = {};\n message.content !== undefined &&\n (obj.content = base64FromBytes(message.content !== undefined ? message.content : new Uint8Array(0)));\n return obj;\n }\n\n export function create<I extends Exact<DeepPartial<GetFileResponse>, I>>(base?: I): GetFileResponse {\n return GetFileResponse.fromPartial(base ?? {});\n }\n\n export function fromPartial<I extends Exact<DeepPartial<GetFileResponse>, I>>(object: I): GetFileResponse {\n const message = createBaseGetFileResponse();\n message.content = object.content ?? new Uint8Array(0);\n return message;\n }\n}\n\nfunction createBaseCreateCustomAssetRequest(): CreateCustomAssetRequest {\n return { name: \"\", composite: new Uint8Array(0), resources: [], thumbnail: undefined };\n}\n\nexport namespace CreateCustomAssetRequest {\n export function encode(message: CreateCustomAssetRequest, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n if (message.name !== \"\") {\n writer.uint32(10).string(message.name);\n }\n if (message.composite.length !== 0) {\n writer.uint32(18).bytes(message.composite);\n }\n for (const v of message.resources) {\n writer.uint32(26).string(v!);\n }\n if (message.thumbnail !== undefined) {\n writer.uint32(34).bytes(message.thumbnail);\n }\n return writer;\n }\n\n export function decode(input: _m0.Reader | Uint8Array, length?: number): CreateCustomAssetRequest {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseCreateCustomAssetRequest();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.name = reader.string();\n continue;\n case 2:\n if (tag !== 18) {\n break;\n }\n\n message.composite = reader.bytes();\n continue;\n case 3:\n if (tag !== 26) {\n break;\n }\n\n message.resources.push(reader.string());\n continue;\n case 4:\n if (tag !== 34) {\n break;\n }\n\n message.thumbnail = reader.bytes();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n }\n\n export function fromJSON(object: any): CreateCustomAssetRequest {\n return {\n name: isSet(object.name) ? String(object.name) : \"\",\n composite: isSet(object.composite) ? bytesFromBase64(object.composite) : new Uint8Array(0),\n resources: Array.isArray(object?.resources) ? object.resources.map((e: any) => String(e)) : [],\n thumbnail: isSet(object.thumbnail) ? bytesFromBase64(object.thumbnail) : undefined,\n };\n }\n\n export function toJSON(message: CreateCustomAssetRequest): unknown {\n const obj: any = {};\n message.name !== undefined && (obj.name = message.name);\n message.composite !== undefined &&\n (obj.composite = base64FromBytes(message.composite !== undefined ? message.composite : new Uint8Array(0)));\n if (message.resources) {\n obj.resources = message.resources.map((e) => e);\n } else {\n obj.resources = [];\n }\n message.thumbnail !== undefined &&\n (obj.thumbnail = message.thumbnail !== undefined ? base64FromBytes(message.thumbnail) : undefined);\n return obj;\n }\n\n export function create<I extends Exact<DeepPartial<CreateCustomAssetRequest>, I>>(\n base?: I,\n ): CreateCustomAssetRequest {\n return CreateCustomAssetRequest.fromPartial(base ?? {});\n }\n\n export function fromPartial<I extends Exact<DeepPartial<CreateCustomAssetRequest>, I>>(\n object: I,\n ): CreateCustomAssetRequest {\n const message = createBaseCreateCustomAssetRequest();\n message.name = object.name ?? \"\";\n message.composite = object.composite ?? new Uint8Array(0);\n message.resources = object.resources?.map((e) => e) || [];\n message.thumbnail = object.thumbnail ?? undefined;\n return message;\n }\n}\n\nfunction createBaseCreateCustomAssetResponse(): CreateCustomAssetResponse {\n return { asset: undefined };\n}\n\nexport namespace CreateCustomAssetResponse {\n export function encode(message: CreateCustomAssetResponse, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n if (message.asset !== undefined) {\n AssetData.encode(message.asset, writer.uint32(10).fork()).ldelim();\n }\n return writer;\n }\n\n export function decode(input: _m0.Reader | Uint8Array, length?: number): CreateCustomAssetResponse {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseCreateCustomAssetResponse();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.asset = AssetData.decode(reader, reader.uint32());\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n }\n\n export function fromJSON(object: any): CreateCustomAssetResponse {\n return { asset: isSet(object.asset) ? AssetData.fromJSON(object.asset) : undefined };\n }\n\n export function toJSON(message: CreateCustomAssetResponse): unknown {\n const obj: any = {};\n message.asset !== undefined && (obj.asset = message.asset ? AssetData.toJSON(message.asset) : undefined);\n return obj;\n }\n\n export function create<I extends Exact<DeepPartial<CreateCustomAssetResponse>, I>>(\n base?: I,\n ): CreateCustomAssetResponse {\n return CreateCustomAssetResponse.fromPartial(base ?? {});\n }\n\n export function fromPartial<I extends Exact<DeepPartial<CreateCustomAssetResponse>, I>>(\n object: I,\n ): CreateCustomAssetResponse {\n const message = createBaseCreateCustomAssetResponse();\n message.asset = (object.asset !== undefined && object.asset !== null)\n ? AssetData.fromPartial(object.asset)\n : undefined;\n return message;\n }\n}\n\nfunction createBaseGetCustomAssetsResponse(): GetCustomAssetsResponse {\n return { assets: [] };\n}\n\nexport namespace GetCustomAssetsResponse {\n export function encode(message: GetCustomAssetsResponse, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n for (const v of message.assets) {\n AssetData.encode(v!, writer.uint32(10).fork()).ldelim();\n }\n return writer;\n }\n\n export function decode(input: _m0.Reader | Uint8Array, length?: number): GetCustomAssetsResponse {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseGetCustomAssetsResponse();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.assets.push(AssetData.decode(reader, reader.uint32()));\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n }\n\n export function fromJSON(object: any): GetCustomAssetsResponse {\n return { assets: Array.isArray(object?.assets) ? object.assets.map((e: any) => AssetData.fromJSON(e)) : [] };\n }\n\n export function toJSON(message: GetCustomAssetsResponse): unknown {\n const obj: any = {};\n if (message.assets) {\n obj.assets = message.assets.map((e) => e ? AssetData.toJSON(e) : undefined);\n } else {\n obj.assets = [];\n }\n return obj;\n }\n\n export function create<I extends Exact<DeepPartial<GetCustomAssetsResponse>, I>>(base?: I): GetCustomAssetsResponse {\n return GetCustomAssetsResponse.fromPartial(base ?? {});\n }\n\n export function fromPartial<I extends Exact<DeepPartial<GetCustomAssetsResponse>, I>>(\n object: I,\n ): GetCustomAssetsResponse {\n const message = createBaseGetCustomAssetsResponse();\n message.assets = object.assets?.map((e) => AssetData.fromPartial(e)) || [];\n return message;\n }\n}\n\nfunction createBaseDeleteCustomAssetRequest(): DeleteCustomAssetRequest {\n return { assetId: \"\" };\n}\n\nexport namespace DeleteCustomAssetRequest {\n export function encode(message: DeleteCustomAssetRequest, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n if (message.assetId !== \"\") {\n writer.uint32(10).string(message.assetId);\n }\n return writer;\n }\n\n export function decode(input: _m0.Reader | Uint8Array, length?: number): DeleteCustomAssetRequest {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseDeleteCustomAssetRequest();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.assetId = reader.string();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n }\n\n export function fromJSON(object: any): DeleteCustomAssetRequest {\n return { assetId: isSet(object.assetId) ? String(object.assetId) : \"\" };\n }\n\n export function toJSON(message: DeleteCustomAssetRequest): unknown {\n const obj: any = {};\n message.assetId !== undefined && (obj.assetId = message.assetId);\n return obj;\n }\n\n export function create<I extends Exact<DeepPartial<DeleteCustomAssetRequest>, I>>(\n base?: I,\n ): DeleteCustomAssetRequest {\n return DeleteCustomAssetRequest.fromPartial(base ?? {});\n }\n\n export function fromPartial<I extends Exact<DeepPartial<DeleteCustomAssetRequest>, I>>(\n object: I,\n ): DeleteCustomAssetRequest {\n const message = createBaseDeleteCustomAssetRequest();\n message.assetId = object.assetId ?? \"\";\n return message;\n }\n}\n\nfunction createBaseRenameCustomAssetRequest(): RenameCustomAssetRequest {\n return { assetId: \"\", newName: \"\" };\n}\n\nexport namespace RenameCustomAssetRequest {\n export function encode(message: RenameCustomAssetRequest, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n if (message.assetId !== \"\") {\n writer.uint32(10).string(message.assetId);\n }\n if (message.newName !== \"\") {\n writer.uint32(18).string(message.newName);\n }\n return writer;\n }\n\n export function decode(input: _m0.Reader | Uint8Array, length?: number): RenameCustomAssetRequest {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseRenameCustomAssetRequest();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.assetId = reader.string();\n continue;\n case 2:\n if (tag !== 18) {\n break;\n }\n\n message.newName = reader.string();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n }\n\n export function fromJSON(object: any): RenameCustomAssetRequest {\n return {\n assetId: isSet(object.assetId) ? String(object.assetId) : \"\",\n newName: isSet(object.newName) ? String(object.newName) : \"\",\n };\n }\n\n export function toJSON(message: RenameCustomAssetRequest): unknown {\n const obj: any = {};\n message.assetId !== undefined && (obj.assetId = message.assetId);\n message.newName !== undefined && (obj.newName = message.newName);\n return obj;\n }\n\n export function create<I extends Exact<DeepPartial<RenameCustomAssetRequest>, I>>(\n base?: I,\n ): RenameCustomAssetRequest {\n return RenameCustomAssetRequest.fromPartial(base ?? {});\n }\n\n export function fromPartial<I extends Exact<DeepPartial<RenameCustomAssetRequest>, I>>(\n object: I,\n ): RenameCustomAssetRequest {\n const message = createBaseRenameCustomAssetRequest();\n message.assetId = object.assetId ?? \"\";\n message.newName = object.newName ?? \"\";\n return message;\n }\n}\n\nfunction createBaseUndoRedoStateResponse(): UndoRedoStateResponse {\n return { canUndo: false, canRedo: false };\n}\n\nexport namespace UndoRedoStateResponse {\n export function encode(message: UndoRedoStateResponse, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n if (message.canUndo === true) {\n writer.uint32(8).bool(message.canUndo);\n }\n if (message.canRedo === true) {\n writer.uint32(16).bool(message.canRedo);\n }\n return writer;\n }\n\n export function decode(input: _m0.Reader | Uint8Array, length?: number): UndoRedoStateResponse {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseUndoRedoStateResponse();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 8) {\n break;\n }\n\n message.canUndo = reader.bool();\n continue;\n case 2:\n if (tag !== 16) {\n break;\n }\n\n message.canRedo = reader.bool();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n }\n\n export function fromJSON(object: any): UndoRedoStateResponse {\n return {\n canUndo: isSet(object.canUndo) ? Boolean(object.canUndo) : false,\n canRedo: isSet(object.canRedo) ? Boolean(object.canRedo) : false,\n };\n }\n\n export function toJSON(message: UndoRedoStateResponse): unknown {\n const obj: any = {};\n message.canUndo !== undefined && (obj.canUndo = message.canUndo);\n message.canRedo !== undefined && (obj.canRedo = message.canRedo);\n return obj;\n }\n\n export function create<I extends Exact<DeepPartial<UndoRedoStateResponse>, I>>(base?: I): UndoRedoStateResponse {\n return UndoRedoStateResponse.fromPartial(base ?? {});\n }\n\n export function fromPartial<I extends Exact<DeepPartial<UndoRedoStateResponse>, I>>(\n object: I,\n ): UndoRedoStateResponse {\n const message = createBaseUndoRedoStateResponse();\n message.canUndo = object.canUndo ?? false;\n message.canRedo = object.canRedo ?? false;\n return message;\n }\n}\n\nexport type DataServiceDefinition = typeof DataServiceDefinition;\nexport const DataServiceDefinition = {\n name: \"DataService\",\n fullName: \"DataService\",\n methods: {\n crdtStream: {\n name: \"CrdtStream\",\n requestType: CrdtStreamMessage,\n requestStream: true,\n responseType: CrdtStreamMessage,\n responseStream: true,\n options: {},\n },\n undo: {\n name: \"Undo\",\n requestType: Empty,\n requestStream: false,\n responseType: UndoRedoResponse,\n responseStream: false,\n options: {},\n },\n redo: {\n name: \"Redo\",\n requestType: Empty,\n requestStream: false,\n responseType: UndoRedoResponse,\n responseStream: false,\n options: {},\n },\n getUndoRedoState: {\n name: \"GetUndoRedoState\",\n requestType: Empty,\n requestStream: false,\n responseType: UndoRedoStateResponse,\n responseStream: false,\n options: {},\n },\n getFiles: {\n name: \"getFiles\",\n requestType: GetFilesRequest,\n requestStream: false,\n responseType: GetFilesResponse,\n responseStream: false,\n options: {},\n },\n saveFile: {\n name: \"saveFile\",\n requestType: SaveFileRequest,\n requestStream: false,\n responseType: Empty,\n responseStream: false,\n options: {},\n },\n getAssetCatalog: {\n name: \"GetAssetCatalog\",\n requestType: Empty,\n requestStream: false,\n responseType: AssetCatalogResponse,\n responseStream: false,\n options: {},\n },\n getAssetData: {\n name: \"GetAssetData\",\n requestType: Asset,\n requestStream: false,\n responseType: AssetData,\n responseStream: false,\n options: {},\n },\n importAsset: {\n name: \"ImportAsset\",\n requestType: ImportAssetRequest,\n requestStream: false,\n responseType: Empty,\n responseStream: false,\n options: {},\n },\n removeAsset: {\n name: \"RemoveAsset\",\n requestType: Asset,\n requestStream: false,\n responseType: Empty,\n responseStream: false,\n options: {},\n },\n save: {\n name: \"Save\",\n requestType: Empty,\n requestStream: false,\n responseType: Empty,\n responseStream: false,\n options: {},\n },\n getInspectorPreferences: {\n name: \"GetInspectorPreferences\",\n requestType: Empty,\n requestStream: false,\n responseType: InspectorPreferencesMessage,\n responseStream: false,\n options: {},\n },\n setInspectorPreferences: {\n name: \"SetInspectorPreferences\",\n requestType: InspectorPreferencesMessage,\n requestStream: false,\n responseType: Empty,\n responseStream: false,\n options: {},\n },\n copyFile: {\n name: \"CopyFile\",\n requestType: CopyFileRequest,\n requestStream: false,\n responseType: Empty,\n responseStream: false,\n options: {},\n },\n getFile: {\n name: \"GetFile\",\n requestType: GetFileRequest,\n requestStream: false,\n responseType: GetFileResponse,\n responseStream: false,\n options: {},\n },\n createCustomAsset: {\n name: \"CreateCustomAsset\",\n requestType: CreateCustomAssetRequest,\n requestStream: false,\n responseType: CreateCustomAssetResponse,\n responseStream: false,\n options: {},\n },\n getCustomAssets: {\n name: \"GetCustomAssets\",\n requestType: Empty,\n requestStream: false,\n responseType: GetCustomAssetsResponse,\n responseStream: false,\n options: {},\n },\n deleteCustomAsset: {\n name: \"DeleteCustomAsset\",\n requestType: DeleteCustomAssetRequest,\n requestStream: false,\n responseType: Empty,\n responseStream: false,\n options: {},\n },\n renameCustomAsset: {\n name: \"RenameCustomAsset\",\n requestType: RenameCustomAssetRequest,\n requestStream: false,\n responseType: Empty,\n responseStream: false,\n options: {},\n },\n },\n} as const;\n\ndeclare const self: any | undefined;\ndeclare const window: any | undefined;\ndeclare const global: any | undefined;\nconst tsProtoGlobalThis: any = (() => {\n if (typeof globalThis !== \"undefined\") {\n return globalThis;\n }\n if (typeof self !== \"undefined\") {\n return self;\n }\n if (typeof window !== \"undefined\") {\n return window;\n }\n if (typeof global !== \"undefined\") {\n return global;\n }\n throw \"Unable to locate global object\";\n})();\n\nfunction bytesFromBase64(b64: string): Uint8Array {\n if (tsProtoGlobalThis.Buffer) {\n return Uint8Array.from(tsProtoGlobalThis.Buffer.from(b64, \"base64\"));\n } else {\n const bin = tsProtoGlobalThis.atob(b64);\n const arr = new Uint8Array(bin.length);\n for (let i = 0; i < bin.length; ++i) {\n arr[i] = bin.charCodeAt(i);\n }\n return arr;\n }\n}\n\nfunction base64FromBytes(arr: Uint8Array): string {\n if (tsProtoGlobalThis.Buffer) {\n return tsProtoGlobalThis.Buffer.from(arr).toString(\"base64\");\n } else {\n const bin: string[] = [];\n arr.forEach((byte) => {\n bin.push(String.fromCharCode(byte));\n });\n return tsProtoGlobalThis.btoa(bin.join(\"\"));\n }\n}\n\ntype Builtin = Date | Function | Uint8Array | string | number | boolean | undefined;\n\nexport type DeepPartial<T> = T extends Builtin ? T\n : T extends Array<infer U> ? Array<DeepPartial<U>> : T extends ReadonlyArray<infer U> ? ReadonlyArray<DeepPartial<U>>\n : T extends { $case: string } ? { [K in keyof Omit<T, \"$case\">]?: DeepPartial<T[K]> } & { $case: T[\"$case\"] }\n : T extends {} ? { [K in keyof T]?: DeepPartial<T[K]> }\n : Partial<T>;\n\ntype KeysOfUnion<T> = T extends T ? keyof T : never;\nexport type Exact<P, I extends P> = P extends Builtin ? P\n : P & { [K in keyof P]: Exact<P[K], I[K]> } & { [K in Exclude<keyof I, KeysOfUnion<P>>]: never };\n\nfunction isObject(value: any): boolean {\n return typeof value === \"object\" && value !== null;\n}\n\nfunction isSet(value: any): boolean {\n return value !== null && value !== undefined;\n}\n", "import type { JTDDataType } from 'ajv/dist/jtd';\nimport Ajv from 'ajv/dist/jtd';\nimport type { FileSystemInterface } from '../../data-layer/types';\nimport type { InspectorPreferences } from './types';\nimport { getDefaultInspectorPreferences } from './types';\n\n/*\n Preferences file is a JSON dictionary with version and data fields.\n This outer structure is called 'shell'.\n Version 1's data is a 1-level deep dictionary, i.e.\n type dataV1 = {[key: string]: string | number | boolean | enum}.\n Every preference (key) is treated as optional.\n Example of valid V1 file:\n {\n \"version\": 1,\n \"data\": {\n \"autosaveEnabled\": true\n }\n }\n\n Versioning policy:\n 1. Adding new fields is OK.\n 2. Deleting or renaming field or changing its type is not OK, requires new version.\n*/\nconst shellSchema = {\n properties: {\n version: { type: 'uint16' },\n data: { properties: {}, additionalProperties: true },\n },\n};\nconst v1Schema = {\n optionalProperties: {\n freeCameraInvertRotation: { type: 'boolean' },\n autosaveEnabled: { type: 'boolean' },\n },\n} as const;\ntype JsonPreferencesV1 = JTDDataType<typeof v1Schema>;\n\nconst ajv = new Ajv();\nconst validateShell = ajv.compile<JTDDataType<typeof shellSchema>>(shellSchema);\nconst validateV1 = ajv.compile<JsonPreferencesV1>(v1Schema);\n\nexport class InvalidPreferences extends Error {}\n\nexport function parseInspectorPreferences(content: string): InspectorPreferences {\n let jsonContent;\n try {\n jsonContent = JSON.parse(content);\n } catch (err) {\n throw new InvalidPreferences(`invalid json: ${err}`);\n }\n\n if (!validateShell(jsonContent)) {\n throw new InvalidPreferences(`invalid shell: ${ajv.errorsText(validateShell.errors)}`);\n }\n\n if (jsonContent.version === 1) {\n if (validateV1(jsonContent.data)) {\n return {\n ...getDefaultInspectorPreferences(),\n ...jsonContent.data,\n };\n } else {\n throw new InvalidPreferences(`invalid v1 data: ${ajv.errorsText(validateV1.errors)}`);\n }\n } else {\n throw new InvalidPreferences(`invalid version: ${jsonContent.version}`);\n }\n}\n\nexport async function readPreferencesFromFile(\n fs: FileSystemInterface,\n path: string,\n): Promise<InspectorPreferences> {\n const fileExists = await fs.existFile(path);\n if (!fileExists) return getDefaultInspectorPreferences();\n\n const fileContent = await fs.readFile(path);\n try {\n return parseInspectorPreferences(new TextDecoder().decode(fileContent));\n } catch (error) {\n if (error instanceof InvalidPreferences) {\n console.log(`bad preferences file: ${error}, returning default preferences`);\n return getDefaultInspectorPreferences();\n } else {\n throw error;\n }\n }\n}\n\nexport function serializeInspectorPreferences(value: InspectorPreferences): Buffer {\n return Buffer.from(JSON.stringify({ version: 1, data: value }, null, 2), 'utf-8');\n}\n", "export type InspectorPreferences = {\n freeCameraInvertRotation: boolean;\n autosaveEnabled: boolean;\n};\n\nexport function getDefaultInspectorPreferences(): InspectorPreferences {\n return {\n freeCameraInvertRotation: false,\n autosaveEnabled: true,\n };\n}\n", "/* eslint-disable */\nimport _m0 from \"protobufjs/minimal\";\nconst protobufPackageSarasa = \"decentraland.sdk.components\";\nfunction createBasePBAnimator() {\n return { states: [] };\n}\n/**\n * @public\n */\nexport var PBAnimator;\n(function (PBAnimator) {\n function encode(message, writer = _m0.Writer.create()) {\n for (const v of message.states) {\n PBAnimationState.encode(v, writer.uint32(10).fork()).ldelim();\n }\n return writer;\n }\n PBAnimator.encode = encode;\n function decode(input, length) {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBasePBAnimator();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n message.states.push(PBAnimationState.decode(reader, reader.uint32()));\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n }\n PBAnimator.decode = decode;\n})(PBAnimator || (PBAnimator = {}));\nfunction createBasePBAnimationState() {\n return { clip: \"\", playing: undefined, weight: undefined, speed: undefined, loop: undefined, shouldReset: undefined };\n}\n/**\n * @public\n */\nexport var PBAnimationState;\n(function (PBAnimationState) {\n function encode(message, writer = _m0.Writer.create()) {\n if (message.clip !== \"\") {\n writer.uint32(18).string(message.clip);\n }\n if (message.playing !== undefined) {\n writer.uint32(24).bool(message.playing);\n }\n if (message.weight !== undefined) {\n writer.uint32(37).float(message.weight);\n }\n if (message.speed !== undefined) {\n writer.uint32(45).float(message.speed);\n }\n if (message.loop !== undefined) {\n writer.uint32(48).bool(message.loop);\n }\n if (message.shouldReset !== undefined) {\n writer.uint32(56).bool(message.shouldReset);\n }\n return writer;\n }\n PBAnimationState.encode = encode;\n function decode(input, length) {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBasePBAnimationState();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 2:\n if (tag !== 18) {\n break;\n }\n message.clip = reader.string();\n continue;\n case 3:\n if (tag !== 24) {\n break;\n }\n message.playing = reader.bool();\n continue;\n case 4:\n if (tag !== 37) {\n break;\n }\n message.weight = reader.float();\n continue;\n case 5:\n if (tag !== 45) {\n break;\n }\n message.speed = reader.float();\n continue;\n case 6:\n if (tag !== 48) {\n break;\n }\n message.loop = reader.bool();\n continue;\n case 7:\n if (tag !== 56) {\n break;\n }\n message.shouldReset = reader.bool();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n }\n PBAnimationState.decode = decode;\n})(PBAnimationState || (PBAnimationState = {}));\n", "import { PBAnimator } from './pb/decentraland/sdk/components/animator.gen';\n/**\n * @internal\n */\nexport const AnimatorSchema = {\n COMPONENT_ID: 1042,\n serialize(value, builder) {\n const writer = PBAnimator.encode(value);\n const buffer = new Uint8Array(writer.finish(), 0, writer.len);\n builder.writeBuffer(buffer, false);\n },\n deserialize(reader) {\n return PBAnimator.decode(reader.buffer(), reader.remainingBytes());\n },\n create() {\n // TODO: this is a hack.\n return PBAnimator.decode(new Uint8Array());\n },\n jsonSchema: {\n type: \"object\",\n properties: {},\n serializationType: \"protocol-buffer\",\n protocolBuffer: \"PBAnimator\"\n }\n};\n", "/* eslint-disable */\nimport _m0 from \"protobufjs/minimal\";\nconst protobufPackageSarasa = \"decentraland.sdk.components\";\nfunction createBasePBAudioEvent() {\n return { state: 0, timestamp: 0 };\n}\n/**\n * @public\n */\nexport var PBAudioEvent;\n(function (PBAudioEvent) {\n function encode(message, writer = _m0.Writer.create()) {\n if (message.state !== 0) {\n writer.uint32(8).int32(message.state);\n }\n if (message.timestamp !== 0) {\n writer.uint32(16).uint32(message.timestamp);\n }\n return writer;\n }\n PBAudioEvent.encode = encode;\n function decode(input, length) {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBasePBAudioEvent();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 8) {\n break;\n }\n message.state = reader.int32();\n continue;\n case 2:\n if (tag !== 16) {\n break;\n }\n message.timestamp = reader.uint32();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n }\n PBAudioEvent.decode = decode;\n})(PBAudioEvent || (PBAudioEvent = {}));\n", "import { PBAudioEvent } from './pb/decentraland/sdk/components/audio_event.gen';\n/**\n * @internal\n */\nexport const AudioEventSchema = {\n COMPONENT_ID: 1105,\n serialize(value, builder) {\n const writer = PBAudioEvent.encode(value);\n const buffer = new Uint8Array(writer.finish(), 0, writer.len);\n builder.writeBuffer(buffer, false);\n },\n deserialize(reader) {\n return PBAudioEvent.decode(reader.buffer(), reader.remainingBytes());\n },\n create() {\n // TODO: this is a hack.\n return PBAudioEvent.decode(new Uint8Array());\n },\n jsonSchema: {\n type: \"object\",\n properties: {},\n serializationType: \"protocol-buffer\",\n protocolBuffer: \"PBAudioEvent\"\n }\n};\n", "/* eslint-disable */\nimport _m0 from \"protobufjs/minimal\";\nconst protobufPackageSarasa = \"decentraland.sdk.components\";\nfunction createBasePBAudioSource() {\n return {\n playing: undefined,\n volume: undefined,\n loop: undefined,\n pitch: undefined,\n audioClipUrl: \"\",\n currentTime: undefined,\n global: undefined,\n };\n}\n/**\n * @public\n */\nexport var PBAudioSource;\n(function (PBAudioSource) {\n function encode(message, writer = _m0.Writer.create()) {\n if (message.playing !== undefined) {\n writer.uint32(8).bool(message.playing);\n }\n if (message.volume !== undefined) {\n writer.uint32(21).float(message.volume);\n }\n if (message.loop !== undefined) {\n writer.uint32(24).bool(message.loop);\n }\n if (message.pitch !== undefined) {\n writer.uint32(37).float(message.pitch);\n }\n if (message.audioClipUrl !== \"\") {\n writer.uint32(42).string(message.audioClipUrl);\n }\n if (message.currentTime !== undefined) {\n writer.uint32(53).float(message.currentTime);\n }\n if (message.global !== undefined) {\n writer.uint32(56).bool(message.global);\n }\n return writer;\n }\n PBAudioSource.encode = encode;\n function decode(input, length) {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBasePBAudioSource();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 8) {\n break;\n }\n message.playing = reader.bool();\n continue;\n case 2:\n if (tag !== 21) {\n break;\n }\n message.volume = reader.float();\n continue;\n case 3:\n if (tag !== 24) {\n break;\n }\n message.loop = reader.bool();\n continue;\n case 4:\n if (tag !== 37) {\n break;\n }\n message.pitch = reader.float();\n continue;\n case 5:\n if (tag !== 42) {\n break;\n }\n message.audioClipUrl = reader.string();\n continue;\n case 6:\n if (tag !== 53) {\n break;\n }\n message.currentTime = reader.float();\n continue;\n case 7:\n if (tag !== 56) {\n break;\n }\n message.global = reader.bool();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n }\n PBAudioSource.decode = decode;\n})(PBAudioSource || (PBAudioSource = {}));\n", "import { PBAudioSource } from './pb/decentraland/sdk/components/audio_source.gen';\n/**\n * @internal\n */\nexport const AudioSourceSchema = {\n COMPONENT_ID: 1020,\n serialize(value, builder) {\n const writer = PBAudioSource.encode(value);\n const buffer = new Uint8Array(writer.finish(), 0, writer.len);\n builder.writeBuffer(buffer, false);\n },\n deserialize(reader) {\n return PBAudioSource.decode(reader.buffer(), reader.remainingBytes());\n },\n create() {\n // TODO: this is a hack.\n return PBAudioSource.decode(new Uint8Array());\n },\n jsonSchema: {\n type: \"object\",\n properties: {},\n serializationType: \"protocol-buffer\",\n protocolBuffer: \"PBAudioSource\"\n }\n};\n", "/* eslint-disable */\nimport _m0 from \"protobufjs/minimal\";\nconst protobufPackageSarasa = \"decentraland.sdk.components\";\nfunction createBasePBAudioStream() {\n return { playing: undefined, volume: undefined, url: \"\" };\n}\n/**\n * @public\n */\nexport var PBAudioStream;\n(function (PBAudioStream) {\n function encode(message, writer = _m0.Writer.create()) {\n if (message.playing !== undefined) {\n writer.uint32(8).bool(message.playing);\n }\n if (message.volume !== undefined) {\n writer.uint32(21).float(message.volume);\n }\n if (message.url !== \"\") {\n writer.uint32(26).string(message.url);\n }\n return writer;\n }\n PBAudioStream.encode = encode;\n function decode(input, length) {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBasePBAudioStream();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 8) {\n break;\n }\n message.playing = reader.bool();\n continue;\n case 2:\n if (tag !== 21) {\n break;\n }\n message.volume = reader.float();\n continue;\n case 3:\n if (tag !== 26) {\n break;\n }\n message.url = reader.string();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n }\n PBAudioStream.decode = decode;\n})(PBAudioStream || (PBAudioStream = {}));\n", "import { PBAudioStream } from './pb/decentraland/sdk/components/audio_stream.gen';\n/**\n * @internal\n */\nexport const AudioStreamSchema = {\n COMPONENT_ID: 1021,\n serialize(value, builder) {\n const writer = PBAudioStream.encode(value);\n const buffer = new Uint8Array(writer.finish(), 0, writer.len);\n builder.writeBuffer(buffer, false);\n },\n deserialize(reader) {\n return PBAudioStream.decode(reader.buffer(), reader.remainingBytes());\n },\n create() {\n // TODO: this is a hack.\n return PBAudioStream.decode(new Uint8Array());\n },\n jsonSchema: {\n type: \"object\",\n properties: {},\n serializationType: \"protocol-buffer\",\n protocolBuffer: \"PBAudioStream\"\n }\n};\n", "/* eslint-disable */\nimport _m0 from \"protobufjs/minimal\";\nconst protobufPackageSarasa = \"decentraland.sdk.components\";\n/** AvatarAnchorPointType determines the part of the avatar's body that anchors the Entity. */\n/**\n * @public\n */\nexport var AvatarAnchorPointType;\n(function (AvatarAnchorPointType) {\n /** AAPT_POSITION - @deprecated consider parenting to `engine.PlayerEntity`, this will attach to player position with an arbitrary offset */\n AvatarAnchorPointType[AvatarAnchorPointType[\"AAPT_POSITION\"] = 0] = \"AAPT_POSITION\";\n AvatarAnchorPointType[AvatarAnchorPointType[\"AAPT_NAME_TAG\"] = 1] = \"AAPT_NAME_TAG\";\n AvatarAnchorPointType[AvatarAnchorPointType[\"AAPT_HEAD\"] = 4] = \"AAPT_HEAD\";\n AvatarAnchorPointType[AvatarAnchorPointType[\"AAPT_NECK\"] = 5] = \"AAPT_NECK\";\n AvatarAnchorPointType[AvatarAnchorPointType[\"AAPT_SPINE\"] = 6] = \"AAPT_SPINE\";\n AvatarAnchorPointType[AvatarAnchorPointType[\"AAPT_SPINE1\"] = 7] = \"AAPT_SPINE1\";\n AvatarAnchorPointType[AvatarAnchorPointType[\"AAPT_SPINE2\"] = 8] = \"AAPT_SPINE2\";\n AvatarAnchorPointType[AvatarAnchorPointType[\"AAPT_HIP\"] = 9] = \"AAPT_HIP\";\n AvatarAnchorPointType[AvatarAnchorPointType[\"AAPT_LEFT_SHOULDER\"] = 10] = \"AAPT_LEFT_SHOULDER\";\n AvatarAnchorPointType[AvatarAnchorPointType[\"AAPT_LEFT_ARM\"] = 11] = \"AAPT_LEFT_ARM\";\n AvatarAnchorPointType[AvatarAnchorPointType[\"AAPT_LEFT_FOREARM\"] = 12] = \"AAPT_LEFT_FOREARM\";\n AvatarAnchorPointType[AvatarAnchorPointType[\"AAPT_LEFT_HAND\"] = 2] = \"AAPT_LEFT_HAND\";\n AvatarAnchorPointType[AvatarAnchorPointType[\"AAPT_LEFT_HAND_INDEX\"] = 13] = \"AAPT_LEFT_HAND_INDEX\";\n AvatarAnchorPointType[AvatarAnchorPointType[\"AAPT_RIGHT_SHOULDER\"] = 14] = \"AAPT_RIGHT_SHOULDER\";\n AvatarAnchorPointType[AvatarAnchorPointType[\"AAPT_RIGHT_ARM\"] = 15] = \"AAPT_RIGHT_ARM\";\n AvatarAnchorPointType[AvatarAnchorPointType[\"AAPT_RIGHT_FOREARM\"] = 16] = \"AAPT_RIGHT_FOREARM\";\n AvatarAnchorPointType[AvatarAnchorPointType[\"AAPT_RIGHT_HAND\"] = 3] = \"AAPT_RIGHT_HAND\";\n AvatarAnchorPointType[AvatarAnchorPointType[\"AAPT_RIGHT_HAND_INDEX\"] = 17] = \"AAPT_RIGHT_HAND_INDEX\";\n AvatarAnchorPointType[AvatarAnchorPointType[\"AAPT_LEFT_UP_LEG\"] = 18] = \"AAPT_LEFT_UP_LEG\";\n AvatarAnchorPointType[AvatarAnchorPointType[\"AAPT_LEFT_LEG\"] = 19] = \"AAPT_LEFT_LEG\";\n AvatarAnchorPointType[AvatarAnchorPointType[\"AAPT_LEFT_FOOT\"] = 20] = \"AAPT_LEFT_FOOT\";\n AvatarAnchorPointType[AvatarAnchorPointType[\"AAPT_LEFT_TOE_BASE\"] = 21] = \"AAPT_LEFT_TOE_BASE\";\n AvatarAnchorPointType[AvatarAnchorPointType[\"AAPT_RIGHT_UP_LEG\"] = 22] = \"AAPT_RIGHT_UP_LEG\";\n AvatarAnchorPointType[AvatarAnchorPointType[\"AAPT_RIGHT_LEG\"] = 23] = \"AAPT_RIGHT_LEG\";\n AvatarAnchorPointType[AvatarAnchorPointType[\"AAPT_RIGHT_FOOT\"] = 24] = \"AAPT_RIGHT_FOOT\";\n AvatarAnchorPointType[AvatarAnchorPointType[\"AAPT_RIGHT_TOE_BASE\"] = 25] = \"AAPT_RIGHT_TOE_BASE\";\n})(AvatarAnchorPointType || (AvatarAnchorPointType = {}));\nfunction createBasePBAvatarAttach() {\n return { avatarId: undefined, anchorPointId: 0 };\n}\n/**\n * @public\n */\nexport var PBAvatarAttach;\n(function (PBAvatarAttach) {\n function encode(message, writer = _m0.Writer.create()) {\n if (message.avatarId !== undefined) {\n writer.uint32(10).string(message.avatarId);\n }\n if (message.anchorPointId !== 0) {\n writer.uint32(16).int32(message.anchorPointId);\n }\n return writer;\n }\n PBAvatarAttach.encode = encode;\n function decode(input, length) {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBasePBAvatarAttach();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n message.avatarId = reader.string();\n continue;\n case 2:\n if (tag !== 16) {\n break;\n }\n message.anchorPointId = reader.int32();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n }\n PBAvatarAttach.decode = decode;\n})(PBAvatarAttach || (PBAvatarAttach = {}));\n", "import { PBAvatarAttach } from './pb/decentraland/sdk/components/avatar_attach.gen';\n/**\n * @internal\n */\nexport const AvatarAttachSchema = {\n COMPONENT_ID: 1073,\n serialize(value, builder) {\n const writer = PBAvatarAttach.encode(value);\n const buffer = new Uint8Array(writer.finish(), 0, writer.len);\n builder.writeBuffer(buffer, false);\n },\n deserialize(reader) {\n return PBAvatarAttach.decode(reader.buffer(), reader.remainingBytes());\n },\n create() {\n // TODO: this is a hack.\n return PBAvatarAttach.decode(new Uint8Array());\n },\n jsonSchema: {\n type: \"object\",\n properties: {},\n serializationType: \"protocol-buffer\",\n protocolBuffer: \"PBAvatarAttach\"\n }\n};\n", "/* eslint-disable */\nimport _m0 from \"protobufjs/minimal\";\nimport { Color3 } from \"../../common/colors.gen\";\nconst protobufPackageSarasa = \"decentraland.sdk.components\";\nfunction createBasePBAvatarBase() {\n return { skinColor: undefined, eyesColor: undefined, hairColor: undefined, bodyShapeUrn: \"\", name: \"\" };\n}\n/**\n * @public\n */\nexport var PBAvatarBase;\n(function (PBAvatarBase) {\n function encode(message, writer = _m0.Writer.create()) {\n if (message.skinColor !== undefined) {\n Color3.encode(message.skinColor, writer.uint32(10).fork()).ldelim();\n }\n if (message.eyesColor !== undefined) {\n Color3.encode(message.eyesColor, writer.uint32(18).fork()).ldelim();\n }\n if (message.hairColor !== undefined) {\n Color3.encode(message.hairColor, writer.uint32(26).fork()).ldelim();\n }\n if (message.bodyShapeUrn !== \"\") {\n writer.uint32(34).string(message.bodyShapeUrn);\n }\n if (message.name !== \"\") {\n writer.uint32(42).string(message.name);\n }\n return writer;\n }\n PBAvatarBase.encode = encode;\n function decode(input, length) {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBasePBAvatarBase();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n message.skinColor = Color3.decode(reader, reader.uint32());\n continue;\n case 2:\n if (tag !== 18) {\n break;\n }\n message.eyesColor = Color3.decode(reader, reader.uint32());\n continue;\n case 3:\n if (tag !== 26) {\n break;\n }\n message.hairColor = Color3.decode(reader, reader.uint32());\n continue;\n case 4:\n if (tag !== 34) {\n break;\n }\n message.bodyShapeUrn = reader.string();\n continue;\n case 5:\n if (tag !== 42) {\n break;\n }\n message.name = reader.string();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n }\n PBAvatarBase.decode = decode;\n})(PBAvatarBase || (PBAvatarBase = {}));\n", "/* eslint-disable */\nimport _m0 from \"protobufjs/minimal\";\nconst protobufPackageSarasa = \"decentraland.common\";\nfunction createBaseColor3() {\n return { r: 0, g: 0, b: 0 };\n}\n/**\n * @public\n */\nexport var Color3;\n(function (Color3) {\n function encode(message, writer = _m0.Writer.create()) {\n if (message.r !== 0) {\n writer.uint32(13).float(message.r);\n }\n if (message.g !== 0) {\n writer.uint32(21).float(message.g);\n }\n if (message.b !== 0) {\n writer.uint32(29).float(message.b);\n }\n return writer;\n }\n Color3.encode = encode;\n function decode(input, length) {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseColor3();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 13) {\n break;\n }\n message.r = reader.float();\n continue;\n case 2:\n if (tag !== 21) {\n break;\n }\n message.g = reader.float();\n continue;\n case 3:\n if (tag !== 29) {\n break;\n }\n message.b = reader.float();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n }\n Color3.decode = decode;\n})(Color3 || (Color3 = {}));\nfunction createBaseColor4() {\n return { r: 0, g: 0, b: 0, a: 0 };\n}\n/**\n * @public\n */\nexport var Color4;\n(function (Color4) {\n function encode(message, writer = _m0.Writer.create()) {\n if (message.r !== 0) {\n writer.uint32(13).float(message.r);\n }\n if (message.g !== 0) {\n writer.uint32(21).float(message.g);\n }\n if (message.b !== 0) {\n writer.uint32(29).float(message.b);\n }\n if (message.a !== 0) {\n writer.uint32(37).float(message.a);\n }\n return writer;\n }\n Color4.encode = encode;\n function decode(input, length) {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseColor4();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 13) {\n break;\n }\n message.r = reader.float();\n continue;\n case 2:\n if (tag !== 21) {\n break;\n }\n message.g = reader.float();\n continue;\n case 3:\n if (tag !== 29) {\n break;\n }\n message.b = reader.float();\n continue;\n case 4:\n if (tag !== 37) {\n break;\n }\n message.a = reader.float();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n }\n Color4.decode = decode;\n})(Color4 || (Color4 = {}));\n", "import { PBAvatarBase } from './pb/decentraland/sdk/components/avatar_base.gen';\n/**\n * @internal\n */\nexport const AvatarBaseSchema = {\n COMPONENT_ID: 1087,\n serialize(value, builder) {\n const writer = PBAvatarBase.encode(value);\n const buffer = new Uint8Array(writer.finish(), 0, writer.len);\n builder.writeBuffer(buffer, false);\n },\n deserialize(reader) {\n return PBAvatarBase.decode(reader.buffer(), reader.remainingBytes());\n },\n create() {\n // TODO: this is a hack.\n return PBAvatarBase.decode(new Uint8Array());\n },\n jsonSchema: {\n type: \"object\",\n properties: {},\n serializationType: \"protocol-buffer\",\n protocolBuffer: \"PBAvatarBase\"\n }\n};\n", "/* eslint-disable */\nimport _m0 from \"protobufjs/minimal\";\nconst protobufPackageSarasa = \"decentraland.sdk.components\";\nfunction createBasePBAvatarEmoteCommand() {\n return { emoteUrn: \"\", loop: false, timestamp: 0 };\n}\n/**\n * @public\n */\nexport var PBAvatarEmoteCommand;\n(function (PBAvatarEmoteCommand) {\n function encode(message, writer = _m0.Writer.create()) {\n if (message.emoteUrn !== \"\") {\n writer.uint32(10).string(message.emoteUrn);\n }\n if (message.loop === true) {\n writer.uint32(16).bool(message.loop);\n }\n if (message.timestamp !== 0) {\n writer.uint32(24).uint32(message.timestamp);\n }\n return writer;\n }\n PBAvatarEmoteCommand.encode = encode;\n function decode(input, length) {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBasePBAvatarEmoteCommand();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n message.emoteUrn = reader.string();\n continue;\n case 2:\n if (tag !== 16) {\n break;\n }\n message.loop = reader.bool();\n continue;\n case 3:\n if (tag !== 24) {\n break;\n }\n message.timestamp = reader.uint32();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n }\n PBAvatarEmoteCommand.decode = decode;\n})(PBAvatarEmoteCommand || (PBAvatarEmoteCommand = {}));\n", "import { PBAvatarEmoteCommand } from './pb/decentraland/sdk/components/avatar_emote_command.gen';\n/**\n * @internal\n */\nexport const AvatarEmoteCommandSchema = {\n COMPONENT_ID: 1088,\n serialize(value, builder) {\n const writer = PBAvatarEmoteCommand.encode(value);\n const buffer = new Uint8Array(writer.finish(), 0, writer.len);\n builder.writeBuffer(buffer, false);\n },\n deserialize(reader) {\n return PBAvatarEmoteCommand.decode(reader.buffer(), reader.remainingBytes());\n },\n create() {\n // TODO: this is a hack.\n return PBAvatarEmoteCommand.decode(new Uint8Array());\n },\n jsonSchema: {\n type: \"object\",\n properties: {},\n serializationType: \"protocol-buffer\",\n protocolBuffer: \"PBAvatarEmoteCommand\"\n }\n};\n", "/* eslint-disable */\nimport _m0 from \"protobufjs/minimal\";\nconst protobufPackageSarasa = \"decentraland.sdk.components\";\nfunction createBasePBAvatarEquippedData() {\n return { wearableUrns: [], emoteUrns: [] };\n}\n/**\n * @public\n */\nexport var PBAvatarEquippedData;\n(function (PBAvatarEquippedData) {\n function encode(message, writer = _m0.Writer.create()) {\n for (const v of message.wearableUrns) {\n writer.uint32(10).string(v);\n }\n for (const v of message.emoteUrns) {\n writer.uint32(18).string(v);\n }\n return writer;\n }\n PBAvatarEquippedData.encode = encode;\n function decode(input, length) {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBasePBAvatarEquippedData();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n message.wearableUrns.push(reader.string());\n continue;\n case 2:\n if (tag !== 18) {\n break;\n }\n message.emoteUrns.push(reader.string());\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n }\n PBAvatarEquippedData.decode = decode;\n})(PBAvatarEquippedData || (PBAvatarEquippedData = {}));\n", "import { PBAvatarEquippedData } from './pb/decentraland/sdk/components/avatar_equipped_data.gen';\n/**\n * @internal\n */\nexport const AvatarEquippedDataSchema = {\n COMPONENT_ID: 1091,\n serialize(value, builder) {\n const writer = PBAvatarEquippedData.encode(value);\n const buffer = new Uint8Array(writer.finish(), 0, writer.len);\n builder.writeBuffer(buffer, false);\n },\n deserialize(reader) {\n return PBAvatarEquippedData.decode(reader.buffer(), reader.remainingBytes());\n },\n create() {\n // TODO: this is a hack.\n return PBAvatarEquippedData.decode(new Uint8Array());\n },\n jsonSchema: {\n type: \"object\",\n properties: {},\n serializationType: \"protocol-buffer\",\n protocolBuffer: \"PBAvatarEquippedData\"\n }\n};\n", "/* eslint-disable */\nimport _m0 from \"protobufjs/minimal\";\nimport { Vector3 } from \"../../common/vectors.gen\";\nconst protobufPackageSarasa = \"decentraland.sdk.components\";\n/** AvatarModifierType is an effect that should be applied to avatars inside the region. */\n/**\n * @public\n */\nexport var AvatarModifierType;\n(function (AvatarModifierType) {\n /** AMT_HIDE_AVATARS - avatars are invisible */\n AvatarModifierType[AvatarModifierType[\"AMT_HIDE_AVATARS\"] = 0] = \"AMT_HIDE_AVATARS\";\n /** AMT_DISABLE_PASSPORTS - selecting (e.g. clicking) an avatar will not bring up their profile. */\n AvatarModifierType[AvatarModifierType[\"AMT_DISABLE_PASSPORTS\"] = 1] = \"AMT_DISABLE_PASSPORTS\";\n})(AvatarModifierType || (AvatarModifierType = {}));\nfunction createBasePBAvatarModifierArea() {\n return { area: undefined, excludeIds: [], modifiers: [] };\n}\n/**\n * @public\n */\nexport var PBAvatarModifierArea;\n(function (PBAvatarModifierArea) {\n function encode(message, writer = _m0.Writer.create()) {\n if (message.area !== undefined) {\n Vector3.encode(message.area, writer.uint32(10).fork()).ldelim();\n }\n for (const v of message.excludeIds) {\n writer.uint32(18).string(v);\n }\n writer.uint32(26).fork();\n for (const v of message.modifiers) {\n writer.int32(v);\n }\n writer.ldelim();\n return writer;\n }\n PBAvatarModifierArea.encode = encode;\n function decode(input, length) {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBasePBAvatarModifierArea();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n message.area = Vector3.decode(reader, reader.uint32());\n continue;\n case 2:\n if (tag !== 18) {\n break;\n }\n message.excludeIds.push(reader.string());\n continue;\n case 3:\n if (tag === 24) {\n message.modifiers.push(reader.int32());\n continue;\n }\n if (tag === 26) {\n const end2 = reader.uint32() + reader.pos;\n while (reader.pos < end2) {\n message.modifiers.push(reader.int32());\n }\n continue;\n }\n break;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n }\n PBAvatarModifierArea.decode = decode;\n})(PBAvatarModifierArea || (PBAvatarModifierArea = {}));\n", "/* eslint-disable */\nimport _m0 from \"protobufjs/minimal\";\nconst protobufPackageSarasa = \"decentraland.common\";\nfunction createBasePosition() {\n return { x: 0, y: 0, z: 0 };\n}\n/**\n * @public\n */\nexport var Position;\n(function (Position) {\n function encode(message, writer = _m0.Writer.create()) {\n if (message.x !== 0) {\n writer.uint32(13).float(message.x);\n }\n if (message.y !== 0) {\n writer.uint32(21).float(message.y);\n }\n if (message.z !== 0) {\n writer.uint32(29).float(message.z);\n }\n return writer;\n }\n Position.encode = encode;\n function decode(input, length) {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBasePosition();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 13) {\n break;\n }\n message.x = reader.float();\n continue;\n case 2:\n if (tag !== 21) {\n break;\n }\n message.y = reader.float();\n continue;\n case 3:\n if (tag !== 29) {\n break;\n }\n message.z = reader.float();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n }\n Position.decode = decode;\n})(Position || (Position = {}));\nfunction createBaseVector3() {\n return { x: 0, y: 0, z: 0 };\n}\n/**\n * @public\n */\nexport var Vector3;\n(function (Vector3) {\n function encode(message, writer = _m0.Writer.create()) {\n if (message.x !== 0) {\n writer.uint32(13).float(message.x);\n }\n if (message.y !== 0) {\n writer.uint32(21).float(message.y);\n }\n if (message.z !== 0) {\n writer.uint32(29).float(message.z);\n }\n return writer;\n }\n Vector3.encode = encode;\n function decode(input, length) {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseVector3();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 13) {\n break;\n }\n message.x = reader.float();\n continue;\n case 2:\n if (tag !== 21) {\n break;\n }\n message.y = reader.float();\n continue;\n case 3:\n if (tag !== 29) {\n break;\n }\n message.z = reader.float();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n }\n Vector3.decode = decode;\n})(Vector3 || (Vector3 = {}));\nfunction createBaseVector2() {\n return { x: 0, y: 0 };\n}\n/**\n * @public\n */\nexport var Vector2;\n(function (Vector2) {\n function encode(message, writer = _m0.Writer.create()) {\n if (message.x !== 0) {\n writer.uint32(13).float(message.x);\n }\n if (message.y !== 0) {\n writer.uint32(21).float(message.y);\n }\n return writer;\n }\n Vector2.encode = encode;\n function decode(input, length) {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseVector2();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 13) {\n break;\n }\n message.x = reader.float();\n continue;\n case 2:\n if (tag !== 21) {\n break;\n }\n message.y = reader.float();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n }\n Vector2.decode = decode;\n})(Vector2 || (Vector2 = {}));\nfunction createBaseQuaternion() {\n return { x: 0, y: 0, z: 0, w: 0 };\n}\n/**\n * @public\n */\nexport var Quaternion;\n(function (Quaternion) {\n function encode(message, writer = _m0.Writer.create()) {\n if (message.x !== 0) {\n writer.uint32(13).float(message.x);\n }\n if (message.y !== 0) {\n writer.uint32(21).float(message.y);\n }\n if (message.z !== 0) {\n writer.uint32(29).float(message.z);\n }\n if (message.w !== 0) {\n writer.uint32(37).float(message.w);\n }\n return writer;\n }\n Quaternion.encode = encode;\n function decode(input, length) {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseQuaternion();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 13) {\n break;\n }\n message.x = reader.float();\n continue;\n case 2:\n if (tag !== 21) {\n break;\n }\n message.y = reader.float();\n continue;\n case 3:\n if (tag !== 29) {\n break;\n }\n message.z = reader.float();\n continue;\n case 4:\n if (tag !== 37) {\n break;\n }\n message.w = reader.float();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n }\n Quaternion.decode = decode;\n})(Quaternion || (Quaternion = {}));\n", "import { PBAvatarModifierArea } from './pb/decentraland/sdk/components/avatar_modifier_area.gen';\n/**\n * @internal\n */\nexport const AvatarModifierAreaSchema = {\n COMPONENT_ID: 1070,\n serialize(value, builder) {\n const writer = PBAvatarModifierArea.encode(value);\n const buffer = new Uint8Array(writer.finish(), 0, writer.len);\n builder.writeBuffer(buffer, false);\n },\n deserialize(reader) {\n return PBAvatarModifierArea.decode(reader.buffer(), reader.remainingBytes());\n },\n create() {\n // TODO: this is a hack.\n return PBAvatarModifierArea.decode(new Uint8Array());\n },\n jsonSchema: {\n type: \"object\",\n properties: {},\n serializationType: \"protocol-buffer\",\n protocolBuffer: \"PBAvatarModifierArea\"\n }\n};\n", "/* eslint-disable */\nimport Long from \"long\";\nimport _m0 from \"protobufjs/minimal\";\nimport { Color3 } from \"../../common/colors.gen\";\nconst protobufPackageSarasa = \"decentraland.sdk.components\";\nfunction createBasePBAvatarShape() {\n return {\n id: \"\",\n name: undefined,\n bodyShape: undefined,\n skinColor: undefined,\n hairColor: undefined,\n eyeColor: undefined,\n expressionTriggerId: undefined,\n expressionTriggerTimestamp: undefined,\n talking: undefined,\n wearables: [],\n emotes: [],\n showOnlyWearables: undefined,\n };\n}\n/**\n * @public\n */\nexport var PBAvatarShape;\n(function (PBAvatarShape) {\n function encode(message, writer = _m0.Writer.create()) {\n if (message.id !== \"\") {\n writer.uint32(10).string(message.id);\n }\n if (message.name !== undefined) {\n writer.uint32(18).string(message.name);\n }\n if (message.bodyShape !== undefined) {\n writer.uint32(26).string(message.bodyShape);\n }\n if (message.skinColor !== undefined) {\n Color3.encode(message.skinColor, writer.uint32(34).fork()).ldelim();\n }\n if (message.hairColor !== undefined) {\n Color3.encode(message.hairColor, writer.uint32(42).fork()).ldelim();\n }\n if (message.eyeColor !== undefined) {\n Color3.encode(message.eyeColor, writer.uint32(50).fork()).ldelim();\n }\n if (message.expressionTriggerId !== undefined) {\n writer.uint32(58).string(message.expressionTriggerId);\n }\n if (message.expressionTriggerTimestamp !== undefined) {\n writer.uint32(64).int64(message.expressionTriggerTimestamp);\n }\n if (message.talking !== undefined) {\n writer.uint32(72).bool(message.talking);\n }\n for (const v of message.wearables) {\n writer.uint32(82).string(v);\n }\n for (const v of message.emotes) {\n writer.uint32(90).string(v);\n }\n if (message.showOnlyWearables !== undefined) {\n writer.uint32(96).bool(message.showOnlyWearables);\n }\n return writer;\n }\n PBAvatarShape.encode = encode;\n function decode(input, length) {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBasePBAvatarShape();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n message.id = reader.string();\n continue;\n case 2:\n if (tag !== 18) {\n break;\n }\n message.name = reader.string();\n continue;\n case 3:\n if (tag !== 26) {\n break;\n }\n message.bodyShape = reader.string();\n continue;\n case 4:\n if (tag !== 34) {\n break;\n }\n message.skinColor = Color3.decode(reader, reader.uint32());\n continue;\n case 5:\n if (tag !== 42) {\n break;\n }\n message.hairColor = Color3.decode(reader, reader.uint32());\n continue;\n case 6:\n if (tag !== 50) {\n break;\n }\n message.eyeColor = Color3.decode(reader, reader.uint32());\n continue;\n case 7:\n if (tag !== 58) {\n break;\n }\n message.expressionTriggerId = reader.string();\n continue;\n case 8:\n if (tag !== 64) {\n break;\n }\n message.expressionTriggerTimestamp = longToNumber(reader.int64());\n continue;\n case 9:\n if (tag !== 72) {\n break;\n }\n message.talking = reader.bool();\n continue;\n case 10:\n if (tag !== 82) {\n break;\n }\n message.wearables.push(reader.string());\n continue;\n case 11:\n if (tag !== 90) {\n break;\n }\n message.emotes.push(reader.string());\n continue;\n case 12:\n if (tag !== 96) {\n break;\n }\n message.showOnlyWearables = reader.bool();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n }\n PBAvatarShape.decode = decode;\n})(PBAvatarShape || (PBAvatarShape = {}));\nconst tsProtoGlobalThis = (() => {\n if (typeof globalThis !== \"undefined\") {\n return globalThis;\n }\n if (typeof self !== \"undefined\") {\n return self;\n }\n if (typeof window !== \"undefined\") {\n return window;\n }\n if (typeof global !== \"undefined\") {\n return global;\n }\n throw \"Unable to locate global object\";\n})();\nfunction longToNumber(long) {\n if (long.gt(Number.MAX_SAFE_INTEGER)) {\n throw new tsProtoGlobalThis.Error(\"Value is larger than Number.MAX_SAFE_INTEGER\");\n }\n return long.toNumber();\n}\nif (_m0.util.Long !== Long) {\n _m0.util.Long = Long;\n _m0.configure();\n}\n", "import { PBAvatarShape } from './pb/decentraland/sdk/components/avatar_shape.gen';\n/**\n * @internal\n */\nexport const AvatarShapeSchema = {\n COMPONENT_ID: 1080,\n serialize(value, builder) {\n const writer = PBAvatarShape.encode(value);\n const buffer = new Uint8Array(writer.finish(), 0, writer.len);\n builder.writeBuffer(buffer, false);\n },\n deserialize(reader) {\n return PBAvatarShape.decode(reader.buffer(), reader.remainingBytes());\n },\n create() {\n // TODO: this is a hack.\n return PBAvatarShape.decode(new Uint8Array());\n },\n jsonSchema: {\n type: \"object\",\n properties: {},\n serializationType: \"protocol-buffer\",\n protocolBuffer: \"PBAvatarShape\"\n }\n};\n", "/* eslint-disable */\nimport _m0 from \"protobufjs/minimal\";\nconst protobufPackageSarasa = \"decentraland.sdk.components\";\n/**\n * BillboardMode indicates one or more axis for automatic rotation, in OR-able bit flag form.\n * Only the values below and the (BM_X | BM_Y) combination are valid.\n */\n/**\n * @public\n */\nexport var BillboardMode;\n(function (BillboardMode) {\n BillboardMode[BillboardMode[\"BM_NONE\"] = 0] = \"BM_NONE\";\n BillboardMode[BillboardMode[\"BM_X\"] = 1] = \"BM_X\";\n BillboardMode[BillboardMode[\"BM_Y\"] = 2] = \"BM_Y\";\n BillboardMode[BillboardMode[\"BM_Z\"] = 4] = \"BM_Z\";\n /** BM_ALL - bitwise combination BM_X | BM_Y | BM_Z */\n BillboardMode[BillboardMode[\"BM_ALL\"] = 7] = \"BM_ALL\";\n})(BillboardMode || (BillboardMode = {}));\nfunction createBasePBBillboard() {\n return { billboardMode: undefined };\n}\n/**\n * @public\n */\nexport var PBBillboard;\n(function (PBBillboard) {\n function encode(message, writer = _m0.Writer.create()) {\n if (message.billboardMode !== undefined) {\n writer.uint32(8).int32(message.billboardMode);\n }\n return writer;\n }\n PBBillboard.encode = encode;\n function decode(input, length) {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBasePBBillboard();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 8) {\n break;\n }\n message.billboardMode = reader.int32();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n }\n PBBillboard.decode = decode;\n})(PBBillboard || (PBBillboard = {}));\n", "import { PBBillboard } from './pb/decentraland/sdk/components/billboard.gen';\n/**\n * @internal\n */\nexport const BillboardSchema = {\n COMPONENT_ID: 1090,\n serialize(value, builder) {\n const writer = PBBillboard.encode(value);\n const buffer = new Uint8Array(writer.finish(), 0, writer.len);\n builder.writeBuffer(buffer, false);\n },\n deserialize(reader) {\n return PBBillboard.decode(reader.buffer(), reader.remainingBytes());\n },\n create() {\n // TODO: this is a hack.\n return PBBillboard.decode(new Uint8Array());\n },\n jsonSchema: {\n type: \"object\",\n properties: {},\n serializationType: \"protocol-buffer\",\n protocolBuffer: \"PBBillboard\"\n }\n};\n", "/* eslint-disable */\nimport _m0 from \"protobufjs/minimal\";\nconst protobufPackageSarasa = \"decentraland.sdk.components\";\nfunction createBasePBCameraMode() {\n return { mode: 0 };\n}\n/**\n * @public\n */\nexport var PBCameraMode;\n(function (PBCameraMode) {\n function encode(message, writer = _m0.Writer.create()) {\n if (message.mode !== 0) {\n writer.uint32(8).int32(message.mode);\n }\n return writer;\n }\n PBCameraMode.encode = encode;\n function decode(input, length) {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBasePBCameraMode();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 8) {\n break;\n }\n message.mode = reader.int32();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n }\n PBCameraMode.decode = decode;\n})(PBCameraMode || (PBCameraMode = {}));\n", "import { PBCameraMode } from './pb/decentraland/sdk/components/camera_mode.gen';\n/**\n * @internal\n */\nexport const CameraModeSchema = {\n COMPONENT_ID: 1072,\n serialize(value, builder) {\n const writer = PBCameraMode.encode(value);\n const buffer = new Uint8Array(writer.finish(), 0, writer.len);\n builder.writeBuffer(buffer, false);\n },\n deserialize(reader) {\n return PBCameraMode.decode(reader.buffer(), reader.remainingBytes());\n },\n create() {\n // TODO: this is a hack.\n return PBCameraMode.decode(new Uint8Array());\n },\n jsonSchema: {\n type: \"object\",\n properties: {},\n serializationType: \"protocol-buffer\",\n protocolBuffer: \"PBCameraMode\"\n }\n};\n", "/* eslint-disable */\nimport _m0 from \"protobufjs/minimal\";\nimport { Vector3 } from \"../../common/vectors.gen\";\nconst protobufPackageSarasa = \"decentraland.sdk.components\";\nfunction createBasePBCameraModeArea() {\n return { area: undefined, mode: 0 };\n}\n/**\n * @public\n */\nexport var PBCameraModeArea;\n(function (PBCameraModeArea) {\n function encode(message, writer = _m0.Writer.create()) {\n if (message.area !== undefined) {\n Vector3.encode(message.area, writer.uint32(10).fork()).ldelim();\n }\n if (message.mode !== 0) {\n writer.uint32(16).int32(message.mode);\n }\n return writer;\n }\n PBCameraModeArea.encode = encode;\n function decode(input, length) {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBasePBCameraModeArea();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n message.area = Vector3.decode(reader, reader.uint32());\n continue;\n case 2:\n if (tag !== 16) {\n break;\n }\n message.mode = reader.int32();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n }\n PBCameraModeArea.decode = decode;\n})(PBCameraModeArea || (PBCameraModeArea = {}));\n", "import { PBCameraModeArea } from './pb/decentraland/sdk/components/camera_mode_area.gen';\n/**\n * @internal\n */\nexport const CameraModeAreaSchema = {\n COMPONENT_ID: 1071,\n serialize(value, builder) {\n const writer = PBCameraModeArea.encode(value);\n const buffer = new Uint8Array(writer.finish(), 0, writer.len);\n builder.writeBuffer(buffer, false);\n },\n deserialize(reader) {\n return PBCameraModeArea.decode(reader.buffer(), reader.remainingBytes());\n },\n create() {\n // TODO: this is a hack.\n return PBCameraModeArea.decode(new Uint8Array());\n },\n jsonSchema: {\n type: \"object\",\n properties: {},\n serializationType: \"protocol-buffer\",\n protocolBuffer: \"PBCameraModeArea\"\n }\n};\n", "/* eslint-disable */\nimport _m0 from \"protobufjs/minimal\";\nconst protobufPackageSarasa = \"decentraland.sdk.components\";\nfunction createBasePBEngineInfo() {\n return { frameNumber: 0, totalRuntime: 0, tickNumber: 0 };\n}\n/**\n * @public\n */\nexport var PBEngineInfo;\n(function (PBEngineInfo) {\n function encode(message, writer = _m0.Writer.create()) {\n if (message.frameNumber !== 0) {\n writer.uint32(8).uint32(message.frameNumber);\n }\n if (message.totalRuntime !== 0) {\n writer.uint32(21).float(message.totalRuntime);\n }\n if (message.tickNumber !== 0) {\n writer.uint32(24).uint32(message.tickNumber);\n }\n return writer;\n }\n PBEngineInfo.encode = encode;\n function decode(input, length) {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBasePBEngineInfo();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 8) {\n break;\n }\n message.frameNumber = reader.uint32();\n continue;\n case 2:\n if (tag !== 21) {\n break;\n }\n message.totalRuntime = reader.float();\n continue;\n case 3:\n if (tag !== 24) {\n break;\n }\n message.tickNumber = reader.uint32();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n }\n PBEngineInfo.decode = decode;\n})(PBEngineInfo || (PBEngineInfo = {}));\n", "import { PBEngineInfo } from './pb/decentraland/sdk/components/engine_info.gen';\n/**\n * @internal\n */\nexport const EngineInfoSchema = {\n COMPONENT_ID: 1048,\n serialize(value, builder) {\n const writer = PBEngineInfo.encode(value);\n const buffer = new Uint8Array(writer.finish(), 0, writer.len);\n builder.writeBuffer(buffer, false);\n },\n deserialize(reader) {\n return PBEngineInfo.decode(reader.buffer(), reader.remainingBytes());\n },\n create() {\n // TODO: this is a hack.\n return PBEngineInfo.decode(new Uint8Array());\n },\n jsonSchema: {\n type: \"object\",\n properties: {},\n serializationType: \"protocol-buffer\",\n protocolBuffer: \"PBEngineInfo\"\n }\n};\n", "/* eslint-disable */\nimport _m0 from \"protobufjs/minimal\";\nconst protobufPackageSarasa = \"decentraland.sdk.components\";\nfunction createBasePBGltfContainer() {\n return { src: \"\", visibleMeshesCollisionMask: undefined, invisibleMeshesCollisionMask: undefined };\n}\n/**\n * @public\n */\nexport var PBGltfContainer;\n(function (PBGltfContainer) {\n function encode(message, writer = _m0.Writer.create()) {\n if (message.src !== \"\") {\n writer.uint32(10).string(message.src);\n }\n if (message.visibleMeshesCollisionMask !== undefined) {\n writer.uint32(32).uint32(message.visibleMeshesCollisionMask);\n }\n if (message.invisibleMeshesCollisionMask !== undefined) {\n writer.uint32(40).uint32(message.invisibleMeshesCollisionMask);\n }\n return writer;\n }\n PBGltfContainer.encode = encode;\n function decode(input, length) {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBasePBGltfContainer();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n message.src = reader.string();\n continue;\n case 4:\n if (tag !== 32) {\n break;\n }\n message.visibleMeshesCollisionMask = reader.uint32();\n continue;\n case 5:\n if (tag !== 40) {\n break;\n }\n message.invisibleMeshesCollisionMask = reader.uint32();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n }\n PBGltfContainer.decode = decode;\n})(PBGltfContainer || (PBGltfContainer = {}));\n", "import { PBGltfContainer } from './pb/decentraland/sdk/components/gltf_container.gen';\n/**\n * @internal\n */\nexport const GltfContainerSchema = {\n COMPONENT_ID: 1041,\n serialize(value, builder) {\n const writer = PBGltfContainer.encode(value);\n const buffer = new Uint8Array(writer.finish(), 0, writer.len);\n builder.writeBuffer(buffer, false);\n },\n deserialize(reader) {\n return PBGltfContainer.decode(reader.buffer(), reader.remainingBytes());\n },\n create() {\n // TODO: this is a hack.\n return PBGltfContainer.decode(new Uint8Array());\n },\n jsonSchema: {\n type: \"object\",\n properties: {},\n serializationType: \"protocol-buffer\",\n protocolBuffer: \"PBGltfContainer\"\n }\n};\n", "/* eslint-disable */\nimport _m0 from \"protobufjs/minimal\";\nconst protobufPackageSarasa = \"decentraland.sdk.components\";\nfunction createBasePBGltfContainerLoadingState() {\n return { currentState: 0 };\n}\n/**\n * @public\n */\nexport var PBGltfContainerLoadingState;\n(function (PBGltfContainerLoadingState) {\n function encode(message, writer = _m0.Writer.create()) {\n if (message.currentState !== 0) {\n writer.uint32(8).int32(message.currentState);\n }\n return writer;\n }\n PBGltfContainerLoadingState.encode = encode;\n function decode(input, length) {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBasePBGltfContainerLoadingState();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 8) {\n break;\n }\n message.currentState = reader.int32();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n }\n PBGltfContainerLoadingState.decode = decode;\n})(PBGltfContainerLoadingState || (PBGltfContainerLoadingState = {}));\n", "import { PBGltfContainerLoadingState } from './pb/decentraland/sdk/components/gltf_container_loading_state.gen';\n/**\n * @internal\n */\nexport const GltfContainerLoadingStateSchema = {\n COMPONENT_ID: 1049,\n serialize(value, builder) {\n const writer = PBGltfContainerLoadingState.encode(value);\n const buffer = new Uint8Array(writer.finish(), 0, writer.len);\n builder.writeBuffer(buffer, false);\n },\n deserialize(reader) {\n return PBGltfContainerLoadingState.decode(reader.buffer(), reader.remainingBytes());\n },\n create() {\n // TODO: this is a hack.\n return PBGltfContainerLoadingState.decode(new Uint8Array());\n },\n jsonSchema: {\n type: \"object\",\n properties: {},\n serializationType: \"protocol-buffer\",\n protocolBuffer: \"PBGltfContainerLoadingState\"\n }\n};\n", "/* eslint-disable */\nimport _m0 from \"protobufjs/minimal\";\nimport { PBMaterial } from \"./material.gen\";\nconst protobufPackageSarasa = \"decentraland.sdk.components\";\nfunction createBasePBGltfNodeModifiers() {\n return { modifiers: [] };\n}\n/**\n * @public\n */\nexport var PBGltfNodeModifiers;\n(function (PBGltfNodeModifiers) {\n function encode(message, writer = _m0.Writer.create()) {\n for (const v of message.modifiers) {\n PBGltfNodeModifiers_GltfNodeModifier.encode(v, writer.uint32(10).fork()).ldelim();\n }\n return writer;\n }\n PBGltfNodeModifiers.encode = encode;\n function decode(input, length) {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBasePBGltfNodeModifiers();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n message.modifiers.push(PBGltfNodeModifiers_GltfNodeModifier.decode(reader, reader.uint32()));\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n }\n PBGltfNodeModifiers.decode = decode;\n})(PBGltfNodeModifiers || (PBGltfNodeModifiers = {}));\nfunction createBasePBGltfNodeModifiers_GltfNodeModifier() {\n return { path: \"\", castShadows: undefined, material: undefined };\n}\n/**\n * @public\n */\nexport var PBGltfNodeModifiers_GltfNodeModifier;\n(function (PBGltfNodeModifiers_GltfNodeModifier) {\n function encode(message, writer = _m0.Writer.create()) {\n if (message.path !== \"\") {\n writer.uint32(10).string(message.path);\n }\n if (message.castShadows !== undefined) {\n writer.uint32(16).bool(message.castShadows);\n }\n if (message.material !== undefined) {\n PBMaterial.encode(message.material, writer.uint32(26).fork()).ldelim();\n }\n return writer;\n }\n PBGltfNodeModifiers_GltfNodeModifier.encode = encode;\n function decode(input, length) {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBasePBGltfNodeModifiers_GltfNodeModifier();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n message.path = reader.string();\n continue;\n case 2:\n if (tag !== 16) {\n break;\n }\n message.castShadows = reader.bool();\n continue;\n case 3:\n if (tag !== 26) {\n break;\n }\n message.material = PBMaterial.decode(reader, reader.uint32());\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n }\n PBGltfNodeModifiers_GltfNodeModifier.decode = decode;\n})(PBGltfNodeModifiers_GltfNodeModifier || (PBGltfNodeModifiers_GltfNodeModifier = {}));\n", "/* eslint-disable */\nimport _m0 from \"protobufjs/minimal\";\nimport { Color3, Color4 } from \"../../common/colors.gen\";\nimport { TextureUnion } from \"../../common/texture.gen\";\nconst protobufPackageSarasa = \"decentraland.sdk.components\";\n/**\n * @public\n */\nexport var MaterialTransparencyMode;\n(function (MaterialTransparencyMode) {\n MaterialTransparencyMode[MaterialTransparencyMode[\"MTM_OPAQUE\"] = 0] = \"MTM_OPAQUE\";\n MaterialTransparencyMode[MaterialTransparencyMode[\"MTM_ALPHA_TEST\"] = 1] = \"MTM_ALPHA_TEST\";\n MaterialTransparencyMode[MaterialTransparencyMode[\"MTM_ALPHA_BLEND\"] = 2] = \"MTM_ALPHA_BLEND\";\n MaterialTransparencyMode[MaterialTransparencyMode[\"MTM_ALPHA_TEST_AND_ALPHA_BLEND\"] = 3] = \"MTM_ALPHA_TEST_AND_ALPHA_BLEND\";\n MaterialTransparencyMode[MaterialTransparencyMode[\"MTM_AUTO\"] = 4] = \"MTM_AUTO\";\n})(MaterialTransparencyMode || (MaterialTransparencyMode = {}));\nfunction createBasePBMaterial() {\n return { material: undefined };\n}\n/**\n * @public\n */\nexport var PBMaterial;\n(function (PBMaterial) {\n function encode(message, writer = _m0.Writer.create()) {\n switch (message.material?.$case) {\n case \"unlit\":\n PBMaterial_UnlitMaterial.encode(message.material.unlit, writer.uint32(10).fork()).ldelim();\n break;\n case \"pbr\":\n PBMaterial_PbrMaterial.encode(message.material.pbr, writer.uint32(18).fork()).ldelim();\n break;\n }\n return writer;\n }\n PBMaterial.encode = encode;\n function decode(input, length) {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBasePBMaterial();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n message.material = { $case: \"unlit\", unlit: PBMaterial_UnlitMaterial.decode(reader, reader.uint32()) };\n continue;\n case 2:\n if (tag !== 18) {\n break;\n }\n message.material = { $case: \"pbr\", pbr: PBMaterial_PbrMaterial.decode(reader, reader.uint32()) };\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n }\n PBMaterial.decode = decode;\n})(PBMaterial || (PBMaterial = {}));\nfunction createBasePBMaterial_UnlitMaterial() {\n return {\n texture: undefined,\n alphaTest: undefined,\n castShadows: undefined,\n diffuseColor: undefined,\n alphaTexture: undefined,\n };\n}\n/**\n * @public\n */\nexport var PBMaterial_UnlitMaterial;\n(function (PBMaterial_UnlitMaterial) {\n function encode(message, writer = _m0.Writer.create()) {\n if (message.texture !== undefined) {\n TextureUnion.encode(message.texture, writer.uint32(10).fork()).ldelim();\n }\n if (message.alphaTest !== undefined) {\n writer.uint32(21).float(message.alphaTest);\n }\n if (message.castShadows !== undefined) {\n writer.uint32(24).bool(message.castShadows);\n }\n if (message.diffuseColor !== undefined) {\n Color4.encode(message.diffuseColor, writer.uint32(34).fork()).ldelim();\n }\n if (message.alphaTexture !== undefined) {\n TextureUnion.encode(message.alphaTexture, writer.uint32(42).fork()).ldelim();\n }\n return writer;\n }\n PBMaterial_UnlitMaterial.encode = encode;\n function decode(input, length) {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBasePBMaterial_UnlitMaterial();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n message.texture = TextureUnion.decode(reader, reader.uint32());\n continue;\n case 2:\n if (tag !== 21) {\n break;\n }\n message.alphaTest = reader.float();\n continue;\n case 3:\n if (tag !== 24) {\n break;\n }\n message.castShadows = reader.bool();\n continue;\n case 4:\n if (tag !== 34) {\n break;\n }\n message.diffuseColor = Color4.decode(reader, reader.uint32());\n continue;\n case 5:\n if (tag !== 42) {\n break;\n }\n message.alphaTexture = TextureUnion.decode(reader, reader.uint32());\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n }\n PBMaterial_UnlitMaterial.decode = decode;\n})(PBMaterial_UnlitMaterial || (PBMaterial_UnlitMaterial = {}));\nfunction createBasePBMaterial_PbrMaterial() {\n return {\n texture: undefined,\n alphaTest: undefined,\n castShadows: undefined,\n alphaTexture: undefined,\n emissiveTexture: undefined,\n bumpTexture: undefined,\n albedoColor: undefined,\n emissiveColor: undefined,\n reflectivityColor: undefined,\n transparencyMode: undefined,\n metallic: undefined,\n roughness: undefined,\n specularIntensity: undefined,\n emissiveIntensity: undefined,\n directIntensity: undefined,\n };\n}\n/**\n * @public\n */\nexport var PBMaterial_PbrMaterial;\n(function (PBMaterial_PbrMaterial) {\n function encode(message, writer = _m0.Writer.create()) {\n if (message.texture !== undefined) {\n TextureUnion.encode(message.texture, writer.uint32(10).fork()).ldelim();\n }\n if (message.alphaTest !== undefined) {\n writer.uint32(21).float(message.alphaTest);\n }\n if (message.castShadows !== undefined) {\n writer.uint32(24).bool(message.castShadows);\n }\n if (message.alphaTexture !== undefined) {\n TextureUnion.encode(message.alphaTexture, writer.uint32(34).fork()).ldelim();\n }\n if (message.emissiveTexture !== undefined) {\n TextureUnion.encode(message.emissiveTexture, writer.uint32(42).fork()).ldelim();\n }\n if (message.bumpTexture !== undefined) {\n TextureUnion.encode(message.bumpTexture, writer.uint32(50).fork()).ldelim();\n }\n if (message.albedoColor !== undefined) {\n Color4.encode(message.albedoColor, writer.uint32(58).fork()).ldelim();\n }\n if (message.emissiveColor !== undefined) {\n Color3.encode(message.emissiveColor, writer.uint32(66).fork()).ldelim();\n }\n if (message.reflectivityColor !== undefined) {\n Color3.encode(message.reflectivityColor, writer.uint32(74).fork()).ldelim();\n }\n if (message.transparencyMode !== undefined) {\n writer.uint32(80).int32(message.transparencyMode);\n }\n if (message.metallic !== undefined) {\n writer.uint32(93).float(message.metallic);\n }\n if (message.roughness !== undefined) {\n writer.uint32(101).float(message.roughness);\n }\n if (message.specularIntensity !== undefined) {\n writer.uint32(117).float(message.specularIntensity);\n }\n if (message.emissiveIntensity !== undefined) {\n writer.uint32(125).float(message.emissiveIntensity);\n }\n if (message.directIntensity !== undefined) {\n writer.uint32(133).float(message.directIntensity);\n }\n return writer;\n }\n PBMaterial_PbrMaterial.encode = encode;\n function decode(input, length) {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBasePBMaterial_PbrMaterial();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n message.texture = TextureUnion.decode(reader, reader.uint32());\n continue;\n case 2:\n if (tag !== 21) {\n break;\n }\n message.alphaTest = reader.float();\n continue;\n case 3:\n if (tag !== 24) {\n break;\n }\n message.castShadows = reader.bool();\n continue;\n case 4:\n if (tag !== 34) {\n break;\n }\n message.alphaTexture = TextureUnion.decode(reader, reader.uint32());\n continue;\n case 5:\n if (tag !== 42) {\n break;\n }\n message.emissiveTexture = TextureUnion.decode(reader, reader.uint32());\n continue;\n case 6:\n if (tag !== 50) {\n break;\n }\n message.bumpTexture = TextureUnion.decode(reader, reader.uint32());\n continue;\n case 7:\n if (tag !== 58) {\n break;\n }\n message.albedoColor = Color4.decode(reader, reader.uint32());\n continue;\n case 8:\n if (tag !== 66) {\n break;\n }\n message.emissiveColor = Color3.decode(reader, reader.uint32());\n continue;\n case 9:\n if (tag !== 74) {\n break;\n }\n message.reflectivityColor = Color3.decode(reader, reader.uint32());\n continue;\n case 10:\n if (tag !== 80) {\n break;\n }\n message.transparencyMode = reader.int32();\n continue;\n case 11:\n if (tag !== 93) {\n break;\n }\n message.metallic = reader.float();\n continue;\n case 12:\n if (tag !== 101) {\n break;\n }\n message.roughness = reader.float();\n continue;\n case 14:\n if (tag !== 117) {\n break;\n }\n message.specularIntensity = reader.float();\n continue;\n case 15:\n if (tag !== 125) {\n break;\n }\n message.emissiveIntensity = reader.float();\n continue;\n case 16:\n if (tag !== 133) {\n break;\n }\n message.directIntensity = reader.float();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n }\n PBMaterial_PbrMaterial.decode = decode;\n})(PBMaterial_PbrMaterial || (PBMaterial_PbrMaterial = {}));\n", "/* eslint-disable */\nimport _m0 from \"protobufjs/minimal\";\nimport { Vector2 } from \"./vectors.gen\";\nconst protobufPackageSarasa = \"decentraland.common\";\n/**\n * @public\n */\nexport var TextureWrapMode;\n(function (TextureWrapMode) {\n TextureWrapMode[TextureWrapMode[\"TWM_REPEAT\"] = 0] = \"TWM_REPEAT\";\n TextureWrapMode[TextureWrapMode[\"TWM_CLAMP\"] = 1] = \"TWM_CLAMP\";\n TextureWrapMode[TextureWrapMode[\"TWM_MIRROR\"] = 2] = \"TWM_MIRROR\";\n})(TextureWrapMode || (TextureWrapMode = {}));\n/**\n * @public\n */\nexport var TextureFilterMode;\n(function (TextureFilterMode) {\n TextureFilterMode[TextureFilterMode[\"TFM_POINT\"] = 0] = \"TFM_POINT\";\n TextureFilterMode[TextureFilterMode[\"TFM_BILINEAR\"] = 1] = \"TFM_BILINEAR\";\n TextureFilterMode[TextureFilterMode[\"TFM_TRILINEAR\"] = 2] = \"TFM_TRILINEAR\";\n})(TextureFilterMode || (TextureFilterMode = {}));\nfunction createBaseTexture() {\n return { src: \"\", wrapMode: undefined, filterMode: undefined, offset: undefined, tiling: undefined };\n}\n/**\n * @public\n */\nexport var Texture;\n(function (Texture) {\n function encode(message, writer = _m0.Writer.create()) {\n if (message.src !== \"\") {\n writer.uint32(10).string(message.src);\n }\n if (message.wrapMode !== undefined) {\n writer.uint32(16).int32(message.wrapMode);\n }\n if (message.filterMode !== undefined) {\n writer.uint32(24).int32(message.filterMode);\n }\n if (message.offset !== undefined) {\n Vector2.encode(message.offset, writer.uint32(34).fork()).ldelim();\n }\n if (message.tiling !== undefined) {\n Vector2.encode(message.tiling, writer.uint32(42).fork()).ldelim();\n }\n return writer;\n }\n Texture.encode = encode;\n function decode(input, length) {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseTexture();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n message.src = reader.string();\n continue;\n case 2:\n if (tag !== 16) {\n break;\n }\n message.wrapMode = reader.int32();\n continue;\n case 3:\n if (tag !== 24) {\n break;\n }\n message.filterMode = reader.int32();\n continue;\n case 4:\n if (tag !== 34) {\n break;\n }\n message.offset = Vector2.decode(reader, reader.uint32());\n continue;\n case 5:\n if (tag !== 42) {\n break;\n }\n message.tiling = Vector2.decode(reader, reader.uint32());\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n }\n Texture.decode = decode;\n})(Texture || (Texture = {}));\nfunction createBaseAvatarTexture() {\n return { userId: \"\", wrapMode: undefined, filterMode: undefined };\n}\n/**\n * @public\n */\nexport var AvatarTexture;\n(function (AvatarTexture) {\n function encode(message, writer = _m0.Writer.create()) {\n if (message.userId !== \"\") {\n writer.uint32(10).string(message.userId);\n }\n if (message.wrapMode !== undefined) {\n writer.uint32(16).int32(message.wrapMode);\n }\n if (message.filterMode !== undefined) {\n writer.uint32(24).int32(message.filterMode);\n }\n return writer;\n }\n AvatarTexture.encode = encode;\n function decode(input, length) {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseAvatarTexture();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n message.userId = reader.string();\n continue;\n case 2:\n if (tag !== 16) {\n break;\n }\n message.wrapMode = reader.int32();\n continue;\n case 3:\n if (tag !== 24) {\n break;\n }\n message.filterMode = reader.int32();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n }\n AvatarTexture.decode = decode;\n})(AvatarTexture || (AvatarTexture = {}));\nfunction createBaseVideoTexture() {\n return { videoPlayerEntity: 0, wrapMode: undefined, filterMode: undefined };\n}\n/**\n * @public\n */\nexport var VideoTexture;\n(function (VideoTexture) {\n function encode(message, writer = _m0.Writer.create()) {\n if (message.videoPlayerEntity !== 0) {\n writer.uint32(8).uint32(message.videoPlayerEntity);\n }\n if (message.wrapMode !== undefined) {\n writer.uint32(16).int32(message.wrapMode);\n }\n if (message.filterMode !== undefined) {\n writer.uint32(24).int32(message.filterMode);\n }\n return writer;\n }\n VideoTexture.encode = encode;\n function decode(input, length) {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseVideoTexture();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 8) {\n break;\n }\n message.videoPlayerEntity = reader.uint32();\n continue;\n case 2:\n if (tag !== 16) {\n break;\n }\n message.wrapMode = reader.int32();\n continue;\n case 3:\n if (tag !== 24) {\n break;\n }\n message.filterMode = reader.int32();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n }\n VideoTexture.decode = decode;\n})(VideoTexture || (VideoTexture = {}));\nfunction createBaseTextureUnion() {\n return { tex: undefined };\n}\n/**\n * @public\n */\nexport var TextureUnion;\n(function (TextureUnion) {\n function encode(message, writer = _m0.Writer.create()) {\n switch (message.tex?.$case) {\n case \"texture\":\n Texture.encode(message.tex.texture, writer.uint32(10).fork()).ldelim();\n break;\n case \"avatarTexture\":\n AvatarTexture.encode(message.tex.avatarTexture, writer.uint32(18).fork()).ldelim();\n break;\n case \"videoTexture\":\n VideoTexture.encode(message.tex.videoTexture, writer.uint32(26).fork()).ldelim();\n break;\n }\n return writer;\n }\n TextureUnion.encode = encode;\n function decode(input, length) {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseTextureUnion();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n message.tex = { $case: \"texture\", texture: Texture.decode(reader, reader.uint32()) };\n continue;\n case 2:\n if (tag !== 18) {\n break;\n }\n message.tex = { $case: \"avatarTexture\", avatarTexture: AvatarTexture.decode(reader, reader.uint32()) };\n continue;\n case 3:\n if (tag !== 26) {\n break;\n }\n message.tex = { $case: \"videoTexture\", videoTexture: VideoTexture.decode(reader, reader.uint32()) };\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n }\n TextureUnion.decode = decode;\n})(TextureUnion || (TextureUnion = {}));\n", "import { PBGltfNodeModifiers } from './pb/decentraland/sdk/components/gltf_node_modifiers.gen';\n/**\n * @internal\n */\nexport const GltfNodeModifiersSchema = {\n COMPONENT_ID: 1099,\n serialize(value, builder) {\n const writer = PBGltfNodeModifiers.encode(value);\n const buffer = new Uint8Array(writer.finish(), 0, writer.len);\n builder.writeBuffer(buffer, false);\n },\n deserialize(reader) {\n return PBGltfNodeModifiers.decode(reader.buffer(), reader.remainingBytes());\n },\n create() {\n // TODO: this is a hack.\n return PBGltfNodeModifiers.decode(new Uint8Array());\n },\n jsonSchema: {\n type: \"object\",\n properties: {},\n serializationType: \"protocol-buffer\",\n protocolBuffer: \"PBGltfNodeModifiers\"\n }\n};\n", "/* eslint-disable */\nimport _m0 from \"protobufjs/minimal\";\nconst protobufPackageSarasa = \"decentraland.sdk.components\";\nfunction createBasePBInputModifier() {\n return { mode: undefined };\n}\n/**\n * @public\n */\nexport var PBInputModifier;\n(function (PBInputModifier) {\n function encode(message, writer = _m0.Writer.create()) {\n switch (message.mode?.$case) {\n case \"standard\":\n PBInputModifier_StandardInput.encode(message.mode.standard, writer.uint32(10).fork()).ldelim();\n break;\n }\n return writer;\n }\n PBInputModifier.encode = encode;\n function decode(input, length) {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBasePBInputModifier();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n message.mode = { $case: \"standard\", standard: PBInputModifier_StandardInput.decode(reader, reader.uint32()) };\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n }\n PBInputModifier.decode = decode;\n})(PBInputModifier || (PBInputModifier = {}));\nfunction createBasePBInputModifier_StandardInput() {\n return {\n disableAll: undefined,\n disableWalk: undefined,\n disableJog: undefined,\n disableRun: undefined,\n disableJump: undefined,\n disableEmote: undefined,\n };\n}\n/**\n * @public\n */\nexport var PBInputModifier_StandardInput;\n(function (PBInputModifier_StandardInput) {\n function encode(message, writer = _m0.Writer.create()) {\n if (message.disableAll !== undefined) {\n writer.uint32(8).bool(message.disableAll);\n }\n if (message.disableWalk !== undefined) {\n writer.uint32(16).bool(message.disableWalk);\n }\n if (message.disableJog !== undefined) {\n writer.uint32(24).bool(message.disableJog);\n }\n if (message.disableRun !== undefined) {\n writer.uint32(32).bool(message.disableRun);\n }\n if (message.disableJump !== undefined) {\n writer.uint32(40).bool(message.disableJump);\n }\n if (message.disableEmote !== undefined) {\n writer.uint32(48).bool(message.disableEmote);\n }\n return writer;\n }\n PBInputModifier_StandardInput.encode = encode;\n function decode(input, length) {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBasePBInputModifier_StandardInput();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 8) {\n break;\n }\n message.disableAll = reader.bool();\n continue;\n case 2:\n if (tag !== 16) {\n break;\n }\n message.disableWalk = reader.bool();\n continue;\n case 3:\n if (tag !== 24) {\n break;\n }\n message.disableJog = reader.bool();\n continue;\n case 4:\n if (tag !== 32) {\n break;\n }\n message.disableRun = reader.bool();\n continue;\n case 5:\n if (tag !== 40) {\n break;\n }\n message.disableJump = reader.bool();\n continue;\n case 6:\n if (tag !== 48) {\n break;\n }\n message.disableEmote = reader.bool();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n }\n PBInputModifier_StandardInput.decode = decode;\n})(PBInputModifier_StandardInput || (PBInputModifier_StandardInput = {}));\n", "import { PBInputModifier } from './pb/decentraland/sdk/components/input_modifier.gen';\n/**\n * @internal\n */\nexport const InputModifierSchema = {\n COMPONENT_ID: 1078,\n serialize(value, builder) {\n const writer = PBInputModifier.encode(value);\n const buffer = new Uint8Array(writer.finish(), 0, writer.len);\n builder.writeBuffer(buffer, false);\n },\n deserialize(reader) {\n return PBInputModifier.decode(reader.buffer(), reader.remainingBytes());\n },\n create() {\n // TODO: this is a hack.\n return PBInputModifier.decode(new Uint8Array());\n },\n jsonSchema: {\n type: \"object\",\n properties: {},\n serializationType: \"protocol-buffer\",\n protocolBuffer: \"PBInputModifier\"\n }\n};\n", "/* eslint-disable */\nimport _m0 from \"protobufjs/minimal\";\nimport { Color3 } from \"../../common/colors.gen\";\nimport { TextureUnion } from \"../../common/texture.gen\";\nconst protobufPackageSarasa = \"decentraland.sdk.components\";\nfunction createBasePBLightSource() {\n return {\n active: undefined,\n color: undefined,\n intensity: undefined,\n range: undefined,\n shadow: undefined,\n shadowMaskTexture: undefined,\n type: undefined,\n };\n}\n/**\n * @public\n */\nexport var PBLightSource;\n(function (PBLightSource) {\n function encode(message, writer = _m0.Writer.create()) {\n if (message.active !== undefined) {\n writer.uint32(8).bool(message.active);\n }\n if (message.color !== undefined) {\n Color3.encode(message.color, writer.uint32(18).fork()).ldelim();\n }\n if (message.intensity !== undefined) {\n writer.uint32(29).float(message.intensity);\n }\n if (message.range !== undefined) {\n writer.uint32(37).float(message.range);\n }\n if (message.shadow !== undefined) {\n writer.uint32(40).bool(message.shadow);\n }\n if (message.shadowMaskTexture !== undefined) {\n TextureUnion.encode(message.shadowMaskTexture, writer.uint32(50).fork()).ldelim();\n }\n switch (message.type?.$case) {\n case \"point\":\n PBLightSource_Point.encode(message.type.point, writer.uint32(58).fork()).ldelim();\n break;\n case \"spot\":\n PBLightSource_Spot.encode(message.type.spot, writer.uint32(66).fork()).ldelim();\n break;\n }\n return writer;\n }\n PBLightSource.encode = encode;\n function decode(input, length) {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBasePBLightSource();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 8) {\n break;\n }\n message.active = reader.bool();\n continue;\n case 2:\n if (tag !== 18) {\n break;\n }\n message.color = Color3.decode(reader, reader.uint32());\n continue;\n case 3:\n if (tag !== 29) {\n break;\n }\n message.intensity = reader.float();\n continue;\n case 4:\n if (tag !== 37) {\n break;\n }\n message.range = reader.float();\n continue;\n case 5:\n if (tag !== 40) {\n break;\n }\n message.shadow = reader.bool();\n continue;\n case 6:\n if (tag !== 50) {\n break;\n }\n message.shadowMaskTexture = TextureUnion.decode(reader, reader.uint32());\n continue;\n case 7:\n if (tag !== 58) {\n break;\n }\n message.type = { $case: \"point\", point: PBLightSource_Point.decode(reader, reader.uint32()) };\n continue;\n case 8:\n if (tag !== 66) {\n break;\n }\n message.type = { $case: \"spot\", spot: PBLightSource_Spot.decode(reader, reader.uint32()) };\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n }\n PBLightSource.decode = decode;\n})(PBLightSource || (PBLightSource = {}));\nfunction createBasePBLightSource_Point() {\n return {};\n}\n/**\n * @public\n */\nexport var PBLightSource_Point;\n(function (PBLightSource_Point) {\n function encode(_, writer = _m0.Writer.create()) {\n return writer;\n }\n PBLightSource_Point.encode = encode;\n function decode(input, length) {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBasePBLightSource_Point();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n }\n PBLightSource_Point.decode = decode;\n})(PBLightSource_Point || (PBLightSource_Point = {}));\nfunction createBasePBLightSource_Spot() {\n return { innerAngle: undefined, outerAngle: undefined };\n}\n/**\n * @public\n */\nexport var PBLightSource_Spot;\n(function (PBLightSource_Spot) {\n function encode(message, writer = _m0.Writer.create()) {\n if (message.innerAngle !== undefined) {\n writer.uint32(77).float(message.innerAngle);\n }\n if (message.outerAngle !== undefined) {\n writer.uint32(85).float(message.outerAngle);\n }\n return writer;\n }\n PBLightSource_Spot.encode = encode;\n function decode(input, length) {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBasePBLightSource_Spot();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 9:\n if (tag !== 77) {\n break;\n }\n message.innerAngle = reader.float();\n continue;\n case 10:\n if (tag !== 85) {\n break;\n }\n message.outerAngle = reader.float();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n }\n PBLightSource_Spot.decode = decode;\n})(PBLightSource_Spot || (PBLightSource_Spot = {}));\n", "import { PBLightSource } from './pb/decentraland/sdk/components/light_source.gen';\n/**\n * @internal\n */\nexport const LightSourceSchema = {\n COMPONENT_ID: 1079,\n serialize(value, builder) {\n const writer = PBLightSource.encode(value);\n const buffer = new Uint8Array(writer.finish(), 0, writer.len);\n builder.writeBuffer(buffer, false);\n },\n deserialize(reader) {\n return PBLightSource.decode(reader.buffer(), reader.remainingBytes());\n },\n create() {\n // TODO: this is a hack.\n return PBLightSource.decode(new Uint8Array());\n },\n jsonSchema: {\n type: \"object\",\n properties: {},\n serializationType: \"protocol-buffer\",\n protocolBuffer: \"PBLightSource\"\n }\n};\n", "/* eslint-disable */\nimport _m0 from \"protobufjs/minimal\";\nconst protobufPackageSarasa = \"decentraland.sdk.components\";\nfunction createBasePBMainCamera() {\n return { virtualCameraEntity: undefined };\n}\n/**\n * @public\n */\nexport var PBMainCamera;\n(function (PBMainCamera) {\n function encode(message, writer = _m0.Writer.create()) {\n if (message.virtualCameraEntity !== undefined) {\n writer.uint32(8).uint32(message.virtualCameraEntity);\n }\n return writer;\n }\n PBMainCamera.encode = encode;\n function decode(input, length) {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBasePBMainCamera();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 8) {\n break;\n }\n message.virtualCameraEntity = reader.uint32();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n }\n PBMainCamera.decode = decode;\n})(PBMainCamera || (PBMainCamera = {}));\n", "import { PBMainCamera } from './pb/decentraland/sdk/components/main_camera.gen';\n/**\n * @internal\n */\nexport const MainCameraSchema = {\n COMPONENT_ID: 1075,\n serialize(value, builder) {\n const writer = PBMainCamera.encode(value);\n const buffer = new Uint8Array(writer.finish(), 0, writer.len);\n builder.writeBuffer(buffer, false);\n },\n deserialize(reader) {\n return PBMainCamera.decode(reader.buffer(), reader.remainingBytes());\n },\n create() {\n // TODO: this is a hack.\n return PBMainCamera.decode(new Uint8Array());\n },\n jsonSchema: {\n type: \"object\",\n properties: {},\n serializationType: \"protocol-buffer\",\n protocolBuffer: \"PBMainCamera\"\n }\n};\n", "import { PBMaterial } from './pb/decentraland/sdk/components/material.gen';\n/**\n * @internal\n */\nexport const MaterialSchema = {\n COMPONENT_ID: 1017,\n serialize(value, builder) {\n const writer = PBMaterial.encode(value);\n const buffer = new Uint8Array(writer.finish(), 0, writer.len);\n builder.writeBuffer(buffer, false);\n },\n deserialize(reader) {\n return PBMaterial.decode(reader.buffer(), reader.remainingBytes());\n },\n create() {\n // TODO: this is a hack.\n return PBMaterial.decode(new Uint8Array());\n },\n jsonSchema: {\n type: \"object\",\n properties: {},\n serializationType: \"protocol-buffer\",\n protocolBuffer: \"PBMaterial\"\n }\n};\n", "/* eslint-disable */\nimport _m0 from \"protobufjs/minimal\";\nconst protobufPackageSarasa = \"decentraland.sdk.components\";\n/** ColliderLayer determines the kind of collision to detect, in OR-able bit flag form. */\n/**\n * @public\n */\nexport var ColliderLayer;\n(function (ColliderLayer) {\n /** CL_NONE - no collisions */\n ColliderLayer[ColliderLayer[\"CL_NONE\"] = 0] = \"CL_NONE\";\n /** CL_POINTER - collisions with the player's pointer ray (e.g. mouse cursor hovering) */\n ColliderLayer[ColliderLayer[\"CL_POINTER\"] = 1] = \"CL_POINTER\";\n /** CL_PHYSICS - collision affecting your player's physics i.e. walls, floor, moving platfroms */\n ColliderLayer[ColliderLayer[\"CL_PHYSICS\"] = 2] = \"CL_PHYSICS\";\n /** CL_PLAYER - layer corresponding to any player avatar */\n ColliderLayer[ColliderLayer[\"CL_PLAYER\"] = 4] = \"CL_PLAYER\";\n ColliderLayer[ColliderLayer[\"CL_RESERVED2\"] = 8] = \"CL_RESERVED2\";\n ColliderLayer[ColliderLayer[\"CL_RESERVED3\"] = 16] = \"CL_RESERVED3\";\n ColliderLayer[ColliderLayer[\"CL_RESERVED4\"] = 32] = \"CL_RESERVED4\";\n ColliderLayer[ColliderLayer[\"CL_RESERVED5\"] = 64] = \"CL_RESERVED5\";\n ColliderLayer[ColliderLayer[\"CL_RESERVED6\"] = 128] = \"CL_RESERVED6\";\n ColliderLayer[ColliderLayer[\"CL_CUSTOM1\"] = 256] = \"CL_CUSTOM1\";\n ColliderLayer[ColliderLayer[\"CL_CUSTOM2\"] = 512] = \"CL_CUSTOM2\";\n ColliderLayer[ColliderLayer[\"CL_CUSTOM3\"] = 1024] = \"CL_CUSTOM3\";\n ColliderLayer[ColliderLayer[\"CL_CUSTOM4\"] = 2048] = \"CL_CUSTOM4\";\n ColliderLayer[ColliderLayer[\"CL_CUSTOM5\"] = 4096] = \"CL_CUSTOM5\";\n ColliderLayer[ColliderLayer[\"CL_CUSTOM6\"] = 8192] = \"CL_CUSTOM6\";\n ColliderLayer[ColliderLayer[\"CL_CUSTOM7\"] = 16384] = \"CL_CUSTOM7\";\n ColliderLayer[ColliderLayer[\"CL_CUSTOM8\"] = 32768] = \"CL_CUSTOM8\";\n})(ColliderLayer || (ColliderLayer = {}));\nfunction createBasePBMeshCollider() {\n return { collisionMask: undefined, mesh: undefined };\n}\n/**\n * @public\n */\nexport var PBMeshCollider;\n(function (PBMeshCollider) {\n function encode(message, writer = _m0.Writer.create()) {\n if (message.collisionMask !== undefined) {\n writer.uint32(8).uint32(message.collisionMask);\n }\n switch (message.mesh?.$case) {\n case \"box\":\n PBMeshCollider_BoxMesh.encode(message.mesh.box, writer.uint32(18).fork()).ldelim();\n break;\n case \"sphere\":\n PBMeshCollider_SphereMesh.encode(message.mesh.sphere, writer.uint32(26).fork()).ldelim();\n break;\n case \"cylinder\":\n PBMeshCollider_CylinderMesh.encode(message.mesh.cylinder, writer.uint32(34).fork()).ldelim();\n break;\n case \"plane\":\n PBMeshCollider_PlaneMesh.encode(message.mesh.plane, writer.uint32(42).fork()).ldelim();\n break;\n }\n return writer;\n }\n PBMeshCollider.encode = encode;\n function decode(input, length) {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBasePBMeshCollider();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 8) {\n break;\n }\n message.collisionMask = reader.uint32();\n continue;\n case 2:\n if (tag !== 18) {\n break;\n }\n message.mesh = { $case: \"box\", box: PBMeshCollider_BoxMesh.decode(reader, reader.uint32()) };\n continue;\n case 3:\n if (tag !== 26) {\n break;\n }\n message.mesh = { $case: \"sphere\", sphere: PBMeshCollider_SphereMesh.decode(reader, reader.uint32()) };\n continue;\n case 4:\n if (tag !== 34) {\n break;\n }\n message.mesh = { $case: \"cylinder\", cylinder: PBMeshCollider_CylinderMesh.decode(reader, reader.uint32()) };\n continue;\n case 5:\n if (tag !== 42) {\n break;\n }\n message.mesh = { $case: \"plane\", plane: PBMeshCollider_PlaneMesh.decode(reader, reader.uint32()) };\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n }\n PBMeshCollider.decode = decode;\n})(PBMeshCollider || (PBMeshCollider = {}));\nfunction createBasePBMeshCollider_BoxMesh() {\n return {};\n}\n/**\n * @public\n */\nexport var PBMeshCollider_BoxMesh;\n(function (PBMeshCollider_BoxMesh) {\n function encode(_, writer = _m0.Writer.create()) {\n return writer;\n }\n PBMeshCollider_BoxMesh.encode = encode;\n function decode(input, length) {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBasePBMeshCollider_BoxMesh();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n }\n PBMeshCollider_BoxMesh.decode = decode;\n})(PBMeshCollider_BoxMesh || (PBMeshCollider_BoxMesh = {}));\nfunction createBasePBMeshCollider_CylinderMesh() {\n return { radiusTop: undefined, radiusBottom: undefined };\n}\n/**\n * @public\n */\nexport var PBMeshCollider_CylinderMesh;\n(function (PBMeshCollider_CylinderMesh) {\n function encode(message, writer = _m0.Writer.create()) {\n if (message.radiusTop !== undefined) {\n writer.uint32(13).float(message.radiusTop);\n }\n if (message.radiusBottom !== undefined) {\n writer.uint32(21).float(message.radiusBottom);\n }\n return writer;\n }\n PBMeshCollider_CylinderMesh.encode = encode;\n function decode(input, length) {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBasePBMeshCollider_CylinderMesh();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 13) {\n break;\n }\n message.radiusTop = reader.float();\n continue;\n case 2:\n if (tag !== 21) {\n break;\n }\n message.radiusBottom = reader.float();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n }\n PBMeshCollider_CylinderMesh.decode = decode;\n})(PBMeshCollider_CylinderMesh || (PBMeshCollider_CylinderMesh = {}));\nfunction createBasePBMeshCollider_PlaneMesh() {\n return {};\n}\n/**\n * @public\n */\nexport var PBMeshCollider_PlaneMesh;\n(function (PBMeshCollider_PlaneMesh) {\n function encode(_, writer = _m0.Writer.create()) {\n return writer;\n }\n PBMeshCollider_PlaneMesh.encode = encode;\n function decode(input, length) {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBasePBMeshCollider_PlaneMesh();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n }\n PBMeshCollider_PlaneMesh.decode = decode;\n})(PBMeshCollider_PlaneMesh || (PBMeshCollider_PlaneMesh = {}));\nfunction createBasePBMeshCollider_SphereMesh() {\n return {};\n}\n/**\n * @public\n */\nexport var PBMeshCollider_SphereMesh;\n(function (PBMeshCollider_SphereMesh) {\n function encode(_, writer = _m0.Writer.create()) {\n return writer;\n }\n PBMeshCollider_SphereMesh.encode = encode;\n function decode(input, length) {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBasePBMeshCollider_SphereMesh();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n }\n PBMeshCollider_SphereMesh.decode = decode;\n})(PBMeshCollider_SphereMesh || (PBMeshCollider_SphereMesh = {}));\n", "import { PBMeshCollider } from './pb/decentraland/sdk/components/mesh_collider.gen';\n/**\n * @internal\n */\nexport const MeshColliderSchema = {\n COMPONENT_ID: 1019,\n serialize(value, builder) {\n const writer = PBMeshCollider.encode(value);\n const buffer = new Uint8Array(writer.finish(), 0, writer.len);\n builder.writeBuffer(buffer, false);\n },\n deserialize(reader) {\n return PBMeshCollider.decode(reader.buffer(), reader.remainingBytes());\n },\n create() {\n // TODO: this is a hack.\n return PBMeshCollider.decode(new Uint8Array());\n },\n jsonSchema: {\n type: \"object\",\n properties: {},\n serializationType: \"protocol-buffer\",\n protocolBuffer: \"PBMeshCollider\"\n }\n};\n", "/* eslint-disable */\nimport _m0 from \"protobufjs/minimal\";\nconst protobufPackageSarasa = \"decentraland.sdk.components\";\nfunction createBasePBMeshRenderer() {\n return { mesh: undefined };\n}\n/**\n * @public\n */\nexport var PBMeshRenderer;\n(function (PBMeshRenderer) {\n function encode(message, writer = _m0.Writer.create()) {\n switch (message.mesh?.$case) {\n case \"box\":\n PBMeshRenderer_BoxMesh.encode(message.mesh.box, writer.uint32(10).fork()).ldelim();\n break;\n case \"sphere\":\n PBMeshRenderer_SphereMesh.encode(message.mesh.sphere, writer.uint32(18).fork()).ldelim();\n break;\n case \"cylinder\":\n PBMeshRenderer_CylinderMesh.encode(message.mesh.cylinder, writer.uint32(26).fork()).ldelim();\n break;\n case \"plane\":\n PBMeshRenderer_PlaneMesh.encode(message.mesh.plane, writer.uint32(34).fork()).ldelim();\n break;\n }\n return writer;\n }\n PBMeshRenderer.encode = encode;\n function decode(input, length) {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBasePBMeshRenderer();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n message.mesh = { $case: \"box\", box: PBMeshRenderer_BoxMesh.decode(reader, reader.uint32()) };\n continue;\n case 2:\n if (tag !== 18) {\n break;\n }\n message.mesh = { $case: \"sphere\", sphere: PBMeshRenderer_SphereMesh.decode(reader, reader.uint32()) };\n continue;\n case 3:\n if (tag !== 26) {\n break;\n }\n message.mesh = { $case: \"cylinder\", cylinder: PBMeshRenderer_CylinderMesh.decode(reader, reader.uint32()) };\n continue;\n case 4:\n if (tag !== 34) {\n break;\n }\n message.mesh = { $case: \"plane\", plane: PBMeshRenderer_PlaneMesh.decode(reader, reader.uint32()) };\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n }\n PBMeshRenderer.decode = decode;\n})(PBMeshRenderer || (PBMeshRenderer = {}));\nfunction createBasePBMeshRenderer_BoxMesh() {\n return { uvs: [] };\n}\n/**\n * @public\n */\nexport var PBMeshRenderer_BoxMesh;\n(function (PBMeshRenderer_BoxMesh) {\n function encode(message, writer = _m0.Writer.create()) {\n writer.uint32(10).fork();\n for (const v of message.uvs) {\n writer.float(v);\n }\n writer.ldelim();\n return writer;\n }\n PBMeshRenderer_BoxMesh.encode = encode;\n function decode(input, length) {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBasePBMeshRenderer_BoxMesh();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag === 13) {\n message.uvs.push(reader.float());\n continue;\n }\n if (tag === 10) {\n const end2 = reader.uint32() + reader.pos;\n while (reader.pos < end2) {\n message.uvs.push(reader.float());\n }\n continue;\n }\n break;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n }\n PBMeshRenderer_BoxMesh.decode = decode;\n})(PBMeshRenderer_BoxMesh || (PBMeshRenderer_BoxMesh = {}));\nfunction createBasePBMeshRenderer_CylinderMesh() {\n return { radiusTop: undefined, radiusBottom: undefined };\n}\n/**\n * @public\n */\nexport var PBMeshRenderer_CylinderMesh;\n(function (PBMeshRenderer_CylinderMesh) {\n function encode(message, writer = _m0.Writer.create()) {\n if (message.radiusTop !== undefined) {\n writer.uint32(13).float(message.radiusTop);\n }\n if (message.radiusBottom !== undefined) {\n writer.uint32(21).float(message.radiusBottom);\n }\n return writer;\n }\n PBMeshRenderer_CylinderMesh.encode = encode;\n function decode(input, length) {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBasePBMeshRenderer_CylinderMesh();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 13) {\n break;\n }\n message.radiusTop = reader.float();\n continue;\n case 2:\n if (tag !== 21) {\n break;\n }\n message.radiusBottom = reader.float();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n }\n PBMeshRenderer_CylinderMesh.decode = decode;\n})(PBMeshRenderer_CylinderMesh || (PBMeshRenderer_CylinderMesh = {}));\nfunction createBasePBMeshRenderer_PlaneMesh() {\n return { uvs: [] };\n}\n/**\n * @public\n */\nexport var PBMeshRenderer_PlaneMesh;\n(function (PBMeshRenderer_PlaneMesh) {\n function encode(message, writer = _m0.Writer.create()) {\n writer.uint32(10).fork();\n for (const v of message.uvs) {\n writer.float(v);\n }\n writer.ldelim();\n return writer;\n }\n PBMeshRenderer_PlaneMesh.encode = encode;\n function decode(input, length) {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBasePBMeshRenderer_PlaneMesh();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag === 13) {\n message.uvs.push(reader.float());\n continue;\n }\n if (tag === 10) {\n const end2 = reader.uint32() + reader.pos;\n while (reader.pos < end2) {\n message.uvs.push(reader.float());\n }\n continue;\n }\n break;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n }\n PBMeshRenderer_PlaneMesh.decode = decode;\n})(PBMeshRenderer_PlaneMesh || (PBMeshRenderer_PlaneMesh = {}));\nfunction createBasePBMeshRenderer_SphereMesh() {\n return {};\n}\n/**\n * @public\n */\nexport var PBMeshRenderer_SphereMesh;\n(function (PBMeshRenderer_SphereMesh) {\n function encode(_, writer = _m0.Writer.create()) {\n return writer;\n }\n PBMeshRenderer_SphereMesh.encode = encode;\n function decode(input, length) {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBasePBMeshRenderer_SphereMesh();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n }\n PBMeshRenderer_SphereMesh.decode = decode;\n})(PBMeshRenderer_SphereMesh || (PBMeshRenderer_SphereMesh = {}));\n", "import { PBMeshRenderer } from './pb/decentraland/sdk/components/mesh_renderer.gen';\n/**\n * @internal\n */\nexport const MeshRendererSchema = {\n COMPONENT_ID: 1018,\n serialize(value, builder) {\n const writer = PBMeshRenderer.encode(value);\n const buffer = new Uint8Array(writer.finish(), 0, writer.len);\n builder.writeBuffer(buffer, false);\n },\n deserialize(reader) {\n return PBMeshRenderer.decode(reader.buffer(), reader.remainingBytes());\n },\n create() {\n // TODO: this is a hack.\n return PBMeshRenderer.decode(new Uint8Array());\n },\n jsonSchema: {\n type: \"object\",\n properties: {},\n serializationType: \"protocol-buffer\",\n protocolBuffer: \"PBMeshRenderer\"\n }\n};\n", "/* eslint-disable */\nimport _m0 from \"protobufjs/minimal\";\nimport { Color3 } from \"../../common/colors.gen\";\nconst protobufPackageSarasa = \"decentraland.sdk.components\";\n/** NftFrameType is a predefined framing style for the image. */\n/**\n * @public\n */\nexport var NftFrameType;\n(function (NftFrameType) {\n NftFrameType[NftFrameType[\"NFT_CLASSIC\"] = 0] = \"NFT_CLASSIC\";\n NftFrameType[NftFrameType[\"NFT_BAROQUE_ORNAMENT\"] = 1] = \"NFT_BAROQUE_ORNAMENT\";\n NftFrameType[NftFrameType[\"NFT_DIAMOND_ORNAMENT\"] = 2] = \"NFT_DIAMOND_ORNAMENT\";\n NftFrameType[NftFrameType[\"NFT_MINIMAL_WIDE\"] = 3] = \"NFT_MINIMAL_WIDE\";\n NftFrameType[NftFrameType[\"NFT_MINIMAL_GREY\"] = 4] = \"NFT_MINIMAL_GREY\";\n NftFrameType[NftFrameType[\"NFT_BLOCKY\"] = 5] = \"NFT_BLOCKY\";\n NftFrameType[NftFrameType[\"NFT_GOLD_EDGES\"] = 6] = \"NFT_GOLD_EDGES\";\n NftFrameType[NftFrameType[\"NFT_GOLD_CARVED\"] = 7] = \"NFT_GOLD_CARVED\";\n NftFrameType[NftFrameType[\"NFT_GOLD_WIDE\"] = 8] = \"NFT_GOLD_WIDE\";\n NftFrameType[NftFrameType[\"NFT_GOLD_ROUNDED\"] = 9] = \"NFT_GOLD_ROUNDED\";\n NftFrameType[NftFrameType[\"NFT_METAL_MEDIUM\"] = 10] = \"NFT_METAL_MEDIUM\";\n NftFrameType[NftFrameType[\"NFT_METAL_WIDE\"] = 11] = \"NFT_METAL_WIDE\";\n NftFrameType[NftFrameType[\"NFT_METAL_SLIM\"] = 12] = \"NFT_METAL_SLIM\";\n NftFrameType[NftFrameType[\"NFT_METAL_ROUNDED\"] = 13] = \"NFT_METAL_ROUNDED\";\n NftFrameType[NftFrameType[\"NFT_PINS\"] = 14] = \"NFT_PINS\";\n NftFrameType[NftFrameType[\"NFT_MINIMAL_BLACK\"] = 15] = \"NFT_MINIMAL_BLACK\";\n NftFrameType[NftFrameType[\"NFT_MINIMAL_WHITE\"] = 16] = \"NFT_MINIMAL_WHITE\";\n NftFrameType[NftFrameType[\"NFT_TAPE\"] = 17] = \"NFT_TAPE\";\n NftFrameType[NftFrameType[\"NFT_WOOD_SLIM\"] = 18] = \"NFT_WOOD_SLIM\";\n NftFrameType[NftFrameType[\"NFT_WOOD_WIDE\"] = 19] = \"NFT_WOOD_WIDE\";\n NftFrameType[NftFrameType[\"NFT_WOOD_TWIGS\"] = 20] = \"NFT_WOOD_TWIGS\";\n NftFrameType[NftFrameType[\"NFT_CANVAS\"] = 21] = \"NFT_CANVAS\";\n NftFrameType[NftFrameType[\"NFT_NONE\"] = 22] = \"NFT_NONE\";\n})(NftFrameType || (NftFrameType = {}));\nfunction createBasePBNftShape() {\n return { urn: \"\", style: undefined, color: undefined };\n}\n/**\n * @public\n */\nexport var PBNftShape;\n(function (PBNftShape) {\n function encode(message, writer = _m0.Writer.create()) {\n if (message.urn !== \"\") {\n writer.uint32(10).string(message.urn);\n }\n if (message.style !== undefined) {\n writer.uint32(16).int32(message.style);\n }\n if (message.color !== undefined) {\n Color3.encode(message.color, writer.uint32(26).fork()).ldelim();\n }\n return writer;\n }\n PBNftShape.encode = encode;\n function decode(input, length) {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBasePBNftShape();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n message.urn = reader.string();\n continue;\n case 2:\n if (tag !== 16) {\n break;\n }\n message.style = reader.int32();\n continue;\n case 3:\n if (tag !== 26) {\n break;\n }\n message.color = Color3.decode(reader, reader.uint32());\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n }\n PBNftShape.decode = decode;\n})(PBNftShape || (PBNftShape = {}));\n", "import { PBNftShape } from './pb/decentraland/sdk/components/nft_shape.gen';\n/**\n * @internal\n */\nexport const NftShapeSchema = {\n COMPONENT_ID: 1040,\n serialize(value, builder) {\n const writer = PBNftShape.encode(value);\n const buffer = new Uint8Array(writer.finish(), 0, writer.len);\n builder.writeBuffer(buffer, false);\n },\n deserialize(reader) {\n return PBNftShape.decode(reader.buffer(), reader.remainingBytes());\n },\n create() {\n // TODO: this is a hack.\n return PBNftShape.decode(new Uint8Array());\n },\n jsonSchema: {\n type: \"object\",\n properties: {},\n serializationType: \"protocol-buffer\",\n protocolBuffer: \"PBNftShape\"\n }\n};\n", "/* eslint-disable */\nimport _m0 from \"protobufjs/minimal\";\nconst protobufPackageSarasa = \"decentraland.sdk.components\";\nfunction createBasePBPlayerIdentityData() {\n return { address: \"\", isGuest: false };\n}\n/**\n * @public\n */\nexport var PBPlayerIdentityData;\n(function (PBPlayerIdentityData) {\n function encode(message, writer = _m0.Writer.create()) {\n if (message.address !== \"\") {\n writer.uint32(10).string(message.address);\n }\n if (message.isGuest === true) {\n writer.uint32(24).bool(message.isGuest);\n }\n return writer;\n }\n PBPlayerIdentityData.encode = encode;\n function decode(input, length) {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBasePBPlayerIdentityData();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n message.address = reader.string();\n continue;\n case 3:\n if (tag !== 24) {\n break;\n }\n message.isGuest = reader.bool();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n }\n PBPlayerIdentityData.decode = decode;\n})(PBPlayerIdentityData || (PBPlayerIdentityData = {}));\n", "import { PBPlayerIdentityData } from './pb/decentraland/sdk/components/player_identity_data.gen';\n/**\n * @internal\n */\nexport const PlayerIdentityDataSchema = {\n COMPONENT_ID: 1089,\n serialize(value, builder) {\n const writer = PBPlayerIdentityData.encode(value);\n const buffer = new Uint8Array(writer.finish(), 0, writer.len);\n builder.writeBuffer(buffer, false);\n },\n deserialize(reader) {\n return PBPlayerIdentityData.decode(reader.buffer(), reader.remainingBytes());\n },\n create() {\n // TODO: this is a hack.\n return PBPlayerIdentityData.decode(new Uint8Array());\n },\n jsonSchema: {\n type: \"object\",\n properties: {},\n serializationType: \"protocol-buffer\",\n protocolBuffer: \"PBPlayerIdentityData\"\n }\n};\n", "/* eslint-disable */\nimport _m0 from \"protobufjs/minimal\";\nconst protobufPackageSarasa = \"decentraland.sdk.components\";\nfunction createBasePBPointerEvents() {\n return { pointerEvents: [] };\n}\n/**\n * @public\n */\nexport var PBPointerEvents;\n(function (PBPointerEvents) {\n function encode(message, writer = _m0.Writer.create()) {\n for (const v of message.pointerEvents) {\n PBPointerEvents_Entry.encode(v, writer.uint32(10).fork()).ldelim();\n }\n return writer;\n }\n PBPointerEvents.encode = encode;\n function decode(input, length) {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBasePBPointerEvents();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n message.pointerEvents.push(PBPointerEvents_Entry.decode(reader, reader.uint32()));\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n }\n PBPointerEvents.decode = decode;\n})(PBPointerEvents || (PBPointerEvents = {}));\nfunction createBasePBPointerEvents_Info() {\n return {\n button: undefined,\n hoverText: undefined,\n maxDistance: undefined,\n showFeedback: undefined,\n showHighlight: undefined,\n };\n}\n/**\n * @public\n */\nexport var PBPointerEvents_Info;\n(function (PBPointerEvents_Info) {\n function encode(message, writer = _m0.Writer.create()) {\n if (message.button !== undefined) {\n writer.uint32(8).int32(message.button);\n }\n if (message.hoverText !== undefined) {\n writer.uint32(18).string(message.hoverText);\n }\n if (message.maxDistance !== undefined) {\n writer.uint32(29).float(message.maxDistance);\n }\n if (message.showFeedback !== undefined) {\n writer.uint32(32).bool(message.showFeedback);\n }\n if (message.showHighlight !== undefined) {\n writer.uint32(40).bool(message.showHighlight);\n }\n return writer;\n }\n PBPointerEvents_Info.encode = encode;\n function decode(input, length) {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBasePBPointerEvents_Info();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 8) {\n break;\n }\n message.button = reader.int32();\n continue;\n case 2:\n if (tag !== 18) {\n break;\n }\n message.hoverText = reader.string();\n continue;\n case 3:\n if (tag !== 29) {\n break;\n }\n message.maxDistance = reader.float();\n continue;\n case 4:\n if (tag !== 32) {\n break;\n }\n message.showFeedback = reader.bool();\n continue;\n case 5:\n if (tag !== 40) {\n break;\n }\n message.showHighlight = reader.bool();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n }\n PBPointerEvents_Info.decode = decode;\n})(PBPointerEvents_Info || (PBPointerEvents_Info = {}));\nfunction createBasePBPointerEvents_Entry() {\n return { eventType: 0, eventInfo: undefined };\n}\n/**\n * @public\n */\nexport var PBPointerEvents_Entry;\n(function (PBPointerEvents_Entry) {\n function encode(message, writer = _m0.Writer.create()) {\n if (message.eventType !== 0) {\n writer.uint32(8).int32(message.eventType);\n }\n if (message.eventInfo !== undefined) {\n PBPointerEvents_Info.encode(message.eventInfo, writer.uint32(18).fork()).ldelim();\n }\n return writer;\n }\n PBPointerEvents_Entry.encode = encode;\n function decode(input, length) {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBasePBPointerEvents_Entry();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 8) {\n break;\n }\n message.eventType = reader.int32();\n continue;\n case 2:\n if (tag !== 18) {\n break;\n }\n message.eventInfo = PBPointerEvents_Info.decode(reader, reader.uint32());\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n }\n PBPointerEvents_Entry.decode = decode;\n})(PBPointerEvents_Entry || (PBPointerEvents_Entry = {}));\n", "import { PBPointerEvents } from './pb/decentraland/sdk/components/pointer_events.gen';\n/**\n * @internal\n */\nexport const PointerEventsSchema = {\n COMPONENT_ID: 1062,\n serialize(value, builder) {\n const writer = PBPointerEvents.encode(value);\n const buffer = new Uint8Array(writer.finish(), 0, writer.len);\n builder.writeBuffer(buffer, false);\n },\n deserialize(reader) {\n return PBPointerEvents.decode(reader.buffer(), reader.remainingBytes());\n },\n create() {\n // TODO: this is a hack.\n return PBPointerEvents.decode(new Uint8Array());\n },\n jsonSchema: {\n type: \"object\",\n properties: {},\n serializationType: \"protocol-buffer\",\n protocolBuffer: \"PBPointerEvents\"\n }\n};\n", "/* eslint-disable */\nimport _m0 from \"protobufjs/minimal\";\nimport { RaycastHit } from \"./common/raycast_hit.gen\";\nconst protobufPackageSarasa = \"decentraland.sdk.components\";\nfunction createBasePBPointerEventsResult() {\n return { button: 0, hit: undefined, state: 0, timestamp: 0, analog: undefined, tickNumber: 0 };\n}\n/**\n * @public\n */\nexport var PBPointerEventsResult;\n(function (PBPointerEventsResult) {\n function encode(message, writer = _m0.Writer.create()) {\n if (message.button !== 0) {\n writer.uint32(8).int32(message.button);\n }\n if (message.hit !== undefined) {\n RaycastHit.encode(message.hit, writer.uint32(18).fork()).ldelim();\n }\n if (message.state !== 0) {\n writer.uint32(32).int32(message.state);\n }\n if (message.timestamp !== 0) {\n writer.uint32(40).uint32(message.timestamp);\n }\n if (message.analog !== undefined) {\n writer.uint32(53).float(message.analog);\n }\n if (message.tickNumber !== 0) {\n writer.uint32(56).uint32(message.tickNumber);\n }\n return writer;\n }\n PBPointerEventsResult.encode = encode;\n function decode(input, length) {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBasePBPointerEventsResult();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 8) {\n break;\n }\n message.button = reader.int32();\n continue;\n case 2:\n if (tag !== 18) {\n break;\n }\n message.hit = RaycastHit.decode(reader, reader.uint32());\n continue;\n case 4:\n if (tag !== 32) {\n break;\n }\n message.state = reader.int32();\n continue;\n case 5:\n if (tag !== 40) {\n break;\n }\n message.timestamp = reader.uint32();\n continue;\n case 6:\n if (tag !== 53) {\n break;\n }\n message.analog = reader.float();\n continue;\n case 7:\n if (tag !== 56) {\n break;\n }\n message.tickNumber = reader.uint32();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n }\n PBPointerEventsResult.decode = decode;\n})(PBPointerEventsResult || (PBPointerEventsResult = {}));\n", "/* eslint-disable */\nimport _m0 from \"protobufjs/minimal\";\nimport { Vector3 } from \"../../../common/vectors.gen\";\nconst protobufPackageSarasa = \"decentraland.sdk.components.common\";\nfunction createBaseRaycastHit() {\n return {\n position: undefined,\n globalOrigin: undefined,\n direction: undefined,\n normalHit: undefined,\n length: 0,\n meshName: undefined,\n entityId: undefined,\n };\n}\n/**\n * @public\n */\nexport var RaycastHit;\n(function (RaycastHit) {\n function encode(message, writer = _m0.Writer.create()) {\n if (message.position !== undefined) {\n Vector3.encode(message.position, writer.uint32(10).fork()).ldelim();\n }\n if (message.globalOrigin !== undefined) {\n Vector3.encode(message.globalOrigin, writer.uint32(18).fork()).ldelim();\n }\n if (message.direction !== undefined) {\n Vector3.encode(message.direction, writer.uint32(26).fork()).ldelim();\n }\n if (message.normalHit !== undefined) {\n Vector3.encode(message.normalHit, writer.uint32(34).fork()).ldelim();\n }\n if (message.length !== 0) {\n writer.uint32(45).float(message.length);\n }\n if (message.meshName !== undefined) {\n writer.uint32(50).string(message.meshName);\n }\n if (message.entityId !== undefined) {\n writer.uint32(56).uint32(message.entityId);\n }\n return writer;\n }\n RaycastHit.encode = encode;\n function decode(input, length) {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseRaycastHit();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n message.position = Vector3.decode(reader, reader.uint32());\n continue;\n case 2:\n if (tag !== 18) {\n break;\n }\n message.globalOrigin = Vector3.decode(reader, reader.uint32());\n continue;\n case 3:\n if (tag !== 26) {\n break;\n }\n message.direction = Vector3.decode(reader, reader.uint32());\n continue;\n case 4:\n if (tag !== 34) {\n break;\n }\n message.normalHit = Vector3.decode(reader, reader.uint32());\n continue;\n case 5:\n if (tag !== 45) {\n break;\n }\n message.length = reader.float();\n continue;\n case 6:\n if (tag !== 50) {\n break;\n }\n message.meshName = reader.string();\n continue;\n case 7:\n if (tag !== 56) {\n break;\n }\n message.entityId = reader.uint32();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n }\n RaycastHit.decode = decode;\n})(RaycastHit || (RaycastHit = {}));\n", "import { PBPointerEventsResult } from './pb/decentraland/sdk/components/pointer_events_result.gen';\n/**\n * @internal\n */\nexport const PointerEventsResultSchema = {\n COMPONENT_ID: 1063,\n serialize(value, builder) {\n const writer = PBPointerEventsResult.encode(value);\n const buffer = new Uint8Array(writer.finish(), 0, writer.len);\n builder.writeBuffer(buffer, false);\n },\n deserialize(reader) {\n return PBPointerEventsResult.decode(reader.buffer(), reader.remainingBytes());\n },\n create() {\n // TODO: this is a hack.\n return PBPointerEventsResult.decode(new Uint8Array());\n },\n jsonSchema: {\n type: \"object\",\n properties: {},\n serializationType: \"protocol-buffer\",\n protocolBuffer: \"PBPointerEventsResult\"\n }\n};\n", "/* eslint-disable */\nimport _m0 from \"protobufjs/minimal\";\nconst protobufPackageSarasa = \"decentraland.sdk.components\";\nfunction createBasePBPointerLock() {\n return { isPointerLocked: false };\n}\n/**\n * @public\n */\nexport var PBPointerLock;\n(function (PBPointerLock) {\n function encode(message, writer = _m0.Writer.create()) {\n if (message.isPointerLocked === true) {\n writer.uint32(8).bool(message.isPointerLocked);\n }\n return writer;\n }\n PBPointerLock.encode = encode;\n function decode(input, length) {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBasePBPointerLock();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 8) {\n break;\n }\n message.isPointerLocked = reader.bool();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n }\n PBPointerLock.decode = decode;\n})(PBPointerLock || (PBPointerLock = {}));\n", "import { PBPointerLock } from './pb/decentraland/sdk/components/pointer_lock.gen';\n/**\n * @internal\n */\nexport const PointerLockSchema = {\n COMPONENT_ID: 1074,\n serialize(value, builder) {\n const writer = PBPointerLock.encode(value);\n const buffer = new Uint8Array(writer.finish(), 0, writer.len);\n builder.writeBuffer(buffer, false);\n },\n deserialize(reader) {\n return PBPointerLock.decode(reader.buffer(), reader.remainingBytes());\n },\n create() {\n // TODO: this is a hack.\n return PBPointerLock.decode(new Uint8Array());\n },\n jsonSchema: {\n type: \"object\",\n properties: {},\n serializationType: \"protocol-buffer\",\n protocolBuffer: \"PBPointerLock\"\n }\n};\n", "/* eslint-disable */\nimport _m0 from \"protobufjs/minimal\";\nimport { Vector2, Vector3 } from \"../../common/vectors.gen\";\nconst protobufPackageSarasa = \"decentraland.sdk.components\";\n/**\n * PointerType enumerates the different input devices that can be used for pointer interactions.\n * Each type has specific characteristics and use cases in the virtual world.\n */\n/**\n * @public\n */\nexport var PointerType;\n(function (PointerType) {\n /** POT_NONE - No pointer input */\n PointerType[PointerType[\"POT_NONE\"] = 0] = \"POT_NONE\";\n /** POT_MOUSE - Traditional mouse input */\n PointerType[PointerType[\"POT_MOUSE\"] = 1] = \"POT_MOUSE\";\n})(PointerType || (PointerType = {}));\nfunction createBasePBPrimaryPointerInfo() {\n return { pointerType: undefined, screenCoordinates: undefined, screenDelta: undefined, worldRayDirection: undefined };\n}\n/**\n * @public\n */\nexport var PBPrimaryPointerInfo;\n(function (PBPrimaryPointerInfo) {\n function encode(message, writer = _m0.Writer.create()) {\n if (message.pointerType !== undefined) {\n writer.uint32(8).int32(message.pointerType);\n }\n if (message.screenCoordinates !== undefined) {\n Vector2.encode(message.screenCoordinates, writer.uint32(18).fork()).ldelim();\n }\n if (message.screenDelta !== undefined) {\n Vector2.encode(message.screenDelta, writer.uint32(26).fork()).ldelim();\n }\n if (message.worldRayDirection !== undefined) {\n Vector3.encode(message.worldRayDirection, writer.uint32(34).fork()).ldelim();\n }\n return writer;\n }\n PBPrimaryPointerInfo.encode = encode;\n function decode(input, length) {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBasePBPrimaryPointerInfo();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 8) {\n break;\n }\n message.pointerType = reader.int32();\n continue;\n case 2:\n if (tag !== 18) {\n break;\n }\n message.screenCoordinates = Vector2.decode(reader, reader.uint32());\n continue;\n case 3:\n if (tag !== 26) {\n break;\n }\n message.screenDelta = Vector2.decode(reader, reader.uint32());\n continue;\n case 4:\n if (tag !== 34) {\n break;\n }\n message.worldRayDirection = Vector3.decode(reader, reader.uint32());\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n }\n PBPrimaryPointerInfo.decode = decode;\n})(PBPrimaryPointerInfo || (PBPrimaryPointerInfo = {}));\n", "import { PBPrimaryPointerInfo } from './pb/decentraland/sdk/components/primary_pointer_info.gen';\n/**\n * @internal\n */\nexport const PrimaryPointerInfoSchema = {\n COMPONENT_ID: 1209,\n serialize(value, builder) {\n const writer = PBPrimaryPointerInfo.encode(value);\n const buffer = new Uint8Array(writer.finish(), 0, writer.len);\n builder.writeBuffer(buffer, false);\n },\n deserialize(reader) {\n return PBPrimaryPointerInfo.decode(reader.buffer(), reader.remainingBytes());\n },\n create() {\n // TODO: this is a hack.\n return PBPrimaryPointerInfo.decode(new Uint8Array());\n },\n jsonSchema: {\n type: \"object\",\n properties: {},\n serializationType: \"protocol-buffer\",\n protocolBuffer: \"PBPrimaryPointerInfo\"\n }\n};\n", "/* eslint-disable */\nimport _m0 from \"protobufjs/minimal\";\nimport { Vector3 } from \"../../common/vectors.gen\";\nconst protobufPackageSarasa = \"decentraland.sdk.components\";\n/** RaycastQueryType indicates whether the ray should stop on the first collition, or continue. */\n/**\n * @public\n */\nexport var RaycastQueryType;\n(function (RaycastQueryType) {\n /** RQT_HIT_FIRST - Pick the first (not necessarily the closest) hit within the range */\n RaycastQueryType[RaycastQueryType[\"RQT_HIT_FIRST\"] = 0] = \"RQT_HIT_FIRST\";\n /** RQT_QUERY_ALL - Pick all hits within the range */\n RaycastQueryType[RaycastQueryType[\"RQT_QUERY_ALL\"] = 1] = \"RQT_QUERY_ALL\";\n /** RQT_NONE - Do not perform the raycast, only set the raycast result with empty hits */\n RaycastQueryType[RaycastQueryType[\"RQT_NONE\"] = 2] = \"RQT_NONE\";\n})(RaycastQueryType || (RaycastQueryType = {}));\nfunction createBasePBRaycast() {\n return {\n timestamp: undefined,\n originOffset: undefined,\n direction: undefined,\n maxDistance: 0,\n queryType: 0,\n continuous: undefined,\n collisionMask: undefined,\n };\n}\n/**\n * @public\n */\nexport var PBRaycast;\n(function (PBRaycast) {\n function encode(message, writer = _m0.Writer.create()) {\n if (message.timestamp !== undefined) {\n writer.uint32(8).uint32(message.timestamp);\n }\n if (message.originOffset !== undefined) {\n Vector3.encode(message.originOffset, writer.uint32(18).fork()).ldelim();\n }\n switch (message.direction?.$case) {\n case \"localDirection\":\n Vector3.encode(message.direction.localDirection, writer.uint32(50).fork()).ldelim();\n break;\n case \"globalDirection\":\n Vector3.encode(message.direction.globalDirection, writer.uint32(26).fork()).ldelim();\n break;\n case \"globalTarget\":\n Vector3.encode(message.direction.globalTarget, writer.uint32(58).fork()).ldelim();\n break;\n case \"targetEntity\":\n writer.uint32(80).uint32(message.direction.targetEntity);\n break;\n }\n if (message.maxDistance !== 0) {\n writer.uint32(37).float(message.maxDistance);\n }\n if (message.queryType !== 0) {\n writer.uint32(40).int32(message.queryType);\n }\n if (message.continuous !== undefined) {\n writer.uint32(64).bool(message.continuous);\n }\n if (message.collisionMask !== undefined) {\n writer.uint32(72).uint32(message.collisionMask);\n }\n return writer;\n }\n PBRaycast.encode = encode;\n function decode(input, length) {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBasePBRaycast();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 8) {\n break;\n }\n message.timestamp = reader.uint32();\n continue;\n case 2:\n if (tag !== 18) {\n break;\n }\n message.originOffset = Vector3.decode(reader, reader.uint32());\n continue;\n case 6:\n if (tag !== 50) {\n break;\n }\n message.direction = { $case: \"localDirection\", localDirection: Vector3.decode(reader, reader.uint32()) };\n continue;\n case 3:\n if (tag !== 26) {\n break;\n }\n message.direction = { $case: \"globalDirection\", globalDirection: Vector3.decode(reader, reader.uint32()) };\n continue;\n case 7:\n if (tag !== 58) {\n break;\n }\n message.direction = { $case: \"globalTarget\", globalTarget: Vector3.decode(reader, reader.uint32()) };\n continue;\n case 10:\n if (tag !== 80) {\n break;\n }\n message.direction = { $case: \"targetEntity\", targetEntity: reader.uint32() };\n continue;\n case 4:\n if (tag !== 37) {\n break;\n }\n message.maxDistance = reader.float();\n continue;\n case 5:\n if (tag !== 40) {\n break;\n }\n message.queryType = reader.int32();\n continue;\n case 8:\n if (tag !== 64) {\n break;\n }\n message.continuous = reader.bool();\n continue;\n case 9:\n if (tag !== 72) {\n break;\n }\n message.collisionMask = reader.uint32();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n }\n PBRaycast.decode = decode;\n})(PBRaycast || (PBRaycast = {}));\n", "import { PBRaycast } from './pb/decentraland/sdk/components/raycast.gen';\n/**\n * @internal\n */\nexport const RaycastSchema = {\n COMPONENT_ID: 1067,\n serialize(value, builder) {\n const writer = PBRaycast.encode(value);\n const buffer = new Uint8Array(writer.finish(), 0, writer.len);\n builder.writeBuffer(buffer, false);\n },\n deserialize(reader) {\n return PBRaycast.decode(reader.buffer(), reader.remainingBytes());\n },\n create() {\n // TODO: this is a hack.\n return PBRaycast.decode(new Uint8Array());\n },\n jsonSchema: {\n type: \"object\",\n properties: {},\n serializationType: \"protocol-buffer\",\n protocolBuffer: \"PBRaycast\"\n }\n};\n", "/* eslint-disable */\nimport _m0 from \"protobufjs/minimal\";\nimport { Vector3 } from \"../../common/vectors.gen\";\nimport { RaycastHit } from \"./common/raycast_hit.gen\";\nconst protobufPackageSarasa = \"decentraland.sdk.components\";\nfunction createBasePBRaycastResult() {\n return { timestamp: undefined, globalOrigin: undefined, direction: undefined, hits: [], tickNumber: 0 };\n}\n/**\n * @public\n */\nexport var PBRaycastResult;\n(function (PBRaycastResult) {\n function encode(message, writer = _m0.Writer.create()) {\n if (message.timestamp !== undefined) {\n writer.uint32(8).uint32(message.timestamp);\n }\n if (message.globalOrigin !== undefined) {\n Vector3.encode(message.globalOrigin, writer.uint32(18).fork()).ldelim();\n }\n if (message.direction !== undefined) {\n Vector3.encode(message.direction, writer.uint32(26).fork()).ldelim();\n }\n for (const v of message.hits) {\n RaycastHit.encode(v, writer.uint32(34).fork()).ldelim();\n }\n if (message.tickNumber !== 0) {\n writer.uint32(40).uint32(message.tickNumber);\n }\n return writer;\n }\n PBRaycastResult.encode = encode;\n function decode(input, length) {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBasePBRaycastResult();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 8) {\n break;\n }\n message.timestamp = reader.uint32();\n continue;\n case 2:\n if (tag !== 18) {\n break;\n }\n message.globalOrigin = Vector3.decode(reader, reader.uint32());\n continue;\n case 3:\n if (tag !== 26) {\n break;\n }\n message.direction = Vector3.decode(reader, reader.uint32());\n continue;\n case 4:\n if (tag !== 34) {\n break;\n }\n message.hits.push(RaycastHit.decode(reader, reader.uint32()));\n continue;\n case 5:\n if (tag !== 40) {\n break;\n }\n message.tickNumber = reader.uint32();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n }\n PBRaycastResult.decode = decode;\n})(PBRaycastResult || (PBRaycastResult = {}));\n", "import { PBRaycastResult } from './pb/decentraland/sdk/components/raycast_result.gen';\n/**\n * @internal\n */\nexport const RaycastResultSchema = {\n COMPONENT_ID: 1068,\n serialize(value, builder) {\n const writer = PBRaycastResult.encode(value);\n const buffer = new Uint8Array(writer.finish(), 0, writer.len);\n builder.writeBuffer(buffer, false);\n },\n deserialize(reader) {\n return PBRaycastResult.decode(reader.buffer(), reader.remainingBytes());\n },\n create() {\n // TODO: this is a hack.\n return PBRaycastResult.decode(new Uint8Array());\n },\n jsonSchema: {\n type: \"object\",\n properties: {},\n serializationType: \"protocol-buffer\",\n protocolBuffer: \"PBRaycastResult\"\n }\n};\n", "/* eslint-disable */\nimport _m0 from \"protobufjs/minimal\";\nconst protobufPackageSarasa = \"decentraland.sdk.components\";\nfunction createBasePBRealmInfo() {\n return {\n baseUrl: \"\",\n realmName: \"\",\n networkId: 0,\n commsAdapter: \"\",\n isPreview: false,\n room: undefined,\n isConnectedSceneRoom: undefined,\n };\n}\n/**\n * @public\n */\nexport var PBRealmInfo;\n(function (PBRealmInfo) {\n function encode(message, writer = _m0.Writer.create()) {\n if (message.baseUrl !== \"\") {\n writer.uint32(10).string(message.baseUrl);\n }\n if (message.realmName !== \"\") {\n writer.uint32(18).string(message.realmName);\n }\n if (message.networkId !== 0) {\n writer.uint32(24).int32(message.networkId);\n }\n if (message.commsAdapter !== \"\") {\n writer.uint32(34).string(message.commsAdapter);\n }\n if (message.isPreview === true) {\n writer.uint32(40).bool(message.isPreview);\n }\n if (message.room !== undefined) {\n writer.uint32(50).string(message.room);\n }\n if (message.isConnectedSceneRoom !== undefined) {\n writer.uint32(56).bool(message.isConnectedSceneRoom);\n }\n return writer;\n }\n PBRealmInfo.encode = encode;\n function decode(input, length) {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBasePBRealmInfo();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n message.baseUrl = reader.string();\n continue;\n case 2:\n if (tag !== 18) {\n break;\n }\n message.realmName = reader.string();\n continue;\n case 3:\n if (tag !== 24) {\n break;\n }\n message.networkId = reader.int32();\n continue;\n case 4:\n if (tag !== 34) {\n break;\n }\n message.commsAdapter = reader.string();\n continue;\n case 5:\n if (tag !== 40) {\n break;\n }\n message.isPreview = reader.bool();\n continue;\n case 6:\n if (tag !== 50) {\n break;\n }\n message.room = reader.string();\n continue;\n case 7:\n if (tag !== 56) {\n break;\n }\n message.isConnectedSceneRoom = reader.bool();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n }\n PBRealmInfo.decode = decode;\n})(PBRealmInfo || (PBRealmInfo = {}));\n", "import { PBRealmInfo } from './pb/decentraland/sdk/components/realm_info.gen';\n/**\n * @internal\n */\nexport const RealmInfoSchema = {\n COMPONENT_ID: 1106,\n serialize(value, builder) {\n const writer = PBRealmInfo.encode(value);\n const buffer = new Uint8Array(writer.finish(), 0, writer.len);\n builder.writeBuffer(buffer, false);\n },\n deserialize(reader) {\n return PBRealmInfo.decode(reader.buffer(), reader.remainingBytes());\n },\n create() {\n // TODO: this is a hack.\n return PBRealmInfo.decode(new Uint8Array());\n },\n jsonSchema: {\n type: \"object\",\n properties: {},\n serializationType: \"protocol-buffer\",\n protocolBuffer: \"PBRealmInfo\"\n }\n};\n", "/* eslint-disable */\nimport _m0 from \"protobufjs/minimal\";\nconst protobufPackageSarasa = \"decentraland.sdk.components\";\n/** Controls the direction for animated skybox transitions */\n/**\n * @public\n */\nexport var TransitionMode;\n(function (TransitionMode) {\n /** TM_FORWARD - transitions forward (default) */\n TransitionMode[TransitionMode[\"TM_FORWARD\"] = 0] = \"TM_FORWARD\";\n /** TM_BACKWARD - transitions backward */\n TransitionMode[TransitionMode[\"TM_BACKWARD\"] = 1] = \"TM_BACKWARD\";\n})(TransitionMode || (TransitionMode = {}));\nfunction createBasePBSkyboxTime() {\n return { fixedTime: 0, transitionMode: undefined };\n}\n/**\n * @public\n */\nexport var PBSkyboxTime;\n(function (PBSkyboxTime) {\n function encode(message, writer = _m0.Writer.create()) {\n if (message.fixedTime !== 0) {\n writer.uint32(8).uint32(message.fixedTime);\n }\n if (message.transitionMode !== undefined) {\n writer.uint32(16).int32(message.transitionMode);\n }\n return writer;\n }\n PBSkyboxTime.encode = encode;\n function decode(input, length) {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBasePBSkyboxTime();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 8) {\n break;\n }\n message.fixedTime = reader.uint32();\n continue;\n case 2:\n if (tag !== 16) {\n break;\n }\n message.transitionMode = reader.int32();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n }\n PBSkyboxTime.decode = decode;\n})(PBSkyboxTime || (PBSkyboxTime = {}));\n", "import { PBSkyboxTime } from './pb/decentraland/sdk/components/skybox_time.gen';\n/**\n * @internal\n */\nexport const SkyboxTimeSchema = {\n COMPONENT_ID: 1210,\n serialize(value, builder) {\n const writer = PBSkyboxTime.encode(value);\n const buffer = new Uint8Array(writer.finish(), 0, writer.len);\n builder.writeBuffer(buffer, false);\n },\n deserialize(reader) {\n return PBSkyboxTime.decode(reader.buffer(), reader.remainingBytes());\n },\n create() {\n // TODO: this is a hack.\n return PBSkyboxTime.decode(new Uint8Array());\n },\n jsonSchema: {\n type: \"object\",\n properties: {},\n serializationType: \"protocol-buffer\",\n protocolBuffer: \"PBSkyboxTime\"\n }\n};\n", "/* eslint-disable */\nimport _m0 from \"protobufjs/minimal\";\nimport { Color3, Color4 } from \"../../common/colors.gen\";\nconst protobufPackageSarasa = \"decentraland.sdk.components\";\nfunction createBasePBTextShape() {\n return {\n text: \"\",\n font: undefined,\n fontSize: undefined,\n fontAutoSize: undefined,\n textAlign: undefined,\n width: undefined,\n height: undefined,\n paddingTop: undefined,\n paddingRight: undefined,\n paddingBottom: undefined,\n paddingLeft: undefined,\n lineSpacing: undefined,\n lineCount: undefined,\n textWrapping: undefined,\n shadowBlur: undefined,\n shadowOffsetX: undefined,\n shadowOffsetY: undefined,\n outlineWidth: undefined,\n shadowColor: undefined,\n outlineColor: undefined,\n textColor: undefined,\n };\n}\n/**\n * @public\n */\nexport var PBTextShape;\n(function (PBTextShape) {\n function encode(message, writer = _m0.Writer.create()) {\n if (message.text !== \"\") {\n writer.uint32(10).string(message.text);\n }\n if (message.font !== undefined) {\n writer.uint32(16).int32(message.font);\n }\n if (message.fontSize !== undefined) {\n writer.uint32(29).float(message.fontSize);\n }\n if (message.fontAutoSize !== undefined) {\n writer.uint32(32).bool(message.fontAutoSize);\n }\n if (message.textAlign !== undefined) {\n writer.uint32(40).int32(message.textAlign);\n }\n if (message.width !== undefined) {\n writer.uint32(53).float(message.width);\n }\n if (message.height !== undefined) {\n writer.uint32(61).float(message.height);\n }\n if (message.paddingTop !== undefined) {\n writer.uint32(69).float(message.paddingTop);\n }\n if (message.paddingRight !== undefined) {\n writer.uint32(77).float(message.paddingRight);\n }\n if (message.paddingBottom !== undefined) {\n writer.uint32(85).float(message.paddingBottom);\n }\n if (message.paddingLeft !== undefined) {\n writer.uint32(93).float(message.paddingLeft);\n }\n if (message.lineSpacing !== undefined) {\n writer.uint32(101).float(message.lineSpacing);\n }\n if (message.lineCount !== undefined) {\n writer.uint32(104).int32(message.lineCount);\n }\n if (message.textWrapping !== undefined) {\n writer.uint32(112).bool(message.textWrapping);\n }\n if (message.shadowBlur !== undefined) {\n writer.uint32(125).float(message.shadowBlur);\n }\n if (message.shadowOffsetX !== undefined) {\n writer.uint32(133).float(message.shadowOffsetX);\n }\n if (message.shadowOffsetY !== undefined) {\n writer.uint32(141).float(message.shadowOffsetY);\n }\n if (message.outlineWidth !== undefined) {\n writer.uint32(149).float(message.outlineWidth);\n }\n if (message.shadowColor !== undefined) {\n Color3.encode(message.shadowColor, writer.uint32(154).fork()).ldelim();\n }\n if (message.outlineColor !== undefined) {\n Color3.encode(message.outlineColor, writer.uint32(162).fork()).ldelim();\n }\n if (message.textColor !== undefined) {\n Color4.encode(message.textColor, writer.uint32(170).fork()).ldelim();\n }\n return writer;\n }\n PBTextShape.encode = encode;\n function decode(input, length) {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBasePBTextShape();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n message.text = reader.string();\n continue;\n case 2:\n if (tag !== 16) {\n break;\n }\n message.font = reader.int32();\n continue;\n case 3:\n if (tag !== 29) {\n break;\n }\n message.fontSize = reader.float();\n continue;\n case 4:\n if (tag !== 32) {\n break;\n }\n message.fontAutoSize = reader.bool();\n continue;\n case 5:\n if (tag !== 40) {\n break;\n }\n message.textAlign = reader.int32();\n continue;\n case 6:\n if (tag !== 53) {\n break;\n }\n message.width = reader.float();\n continue;\n case 7:\n if (tag !== 61) {\n break;\n }\n message.height = reader.float();\n continue;\n case 8:\n if (tag !== 69) {\n break;\n }\n message.paddingTop = reader.float();\n continue;\n case 9:\n if (tag !== 77) {\n break;\n }\n message.paddingRight = reader.float();\n continue;\n case 10:\n if (tag !== 85) {\n break;\n }\n message.paddingBottom = reader.float();\n continue;\n case 11:\n if (tag !== 93) {\n break;\n }\n message.paddingLeft = reader.float();\n continue;\n case 12:\n if (tag !== 101) {\n break;\n }\n message.lineSpacing = reader.float();\n continue;\n case 13:\n if (tag !== 104) {\n break;\n }\n message.lineCount = reader.int32();\n continue;\n case 14:\n if (tag !== 112) {\n break;\n }\n message.textWrapping = reader.bool();\n continue;\n case 15:\n if (tag !== 125) {\n break;\n }\n message.shadowBlur = reader.float();\n continue;\n case 16:\n if (tag !== 133) {\n break;\n }\n message.shadowOffsetX = reader.float();\n continue;\n case 17:\n if (tag !== 141) {\n break;\n }\n message.shadowOffsetY = reader.float();\n continue;\n case 18:\n if (tag !== 149) {\n break;\n }\n message.outlineWidth = reader.float();\n continue;\n case 19:\n if (tag !== 154) {\n break;\n }\n message.shadowColor = Color3.decode(reader, reader.uint32());\n continue;\n case 20:\n if (tag !== 162) {\n break;\n }\n message.outlineColor = Color3.decode(reader, reader.uint32());\n continue;\n case 21:\n if (tag !== 170) {\n break;\n }\n message.textColor = Color4.decode(reader, reader.uint32());\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n }\n PBTextShape.decode = decode;\n})(PBTextShape || (PBTextShape = {}));\n", "import { PBTextShape } from './pb/decentraland/sdk/components/text_shape.gen';\n/**\n * @internal\n */\nexport const TextShapeSchema = {\n COMPONENT_ID: 1030,\n serialize(value, builder) {\n const writer = PBTextShape.encode(value);\n const buffer = new Uint8Array(writer.finish(), 0, writer.len);\n builder.writeBuffer(buffer, false);\n },\n deserialize(reader) {\n return PBTextShape.decode(reader.buffer(), reader.remainingBytes());\n },\n create() {\n // TODO: this is a hack.\n return PBTextShape.decode(new Uint8Array());\n },\n jsonSchema: {\n type: \"object\",\n properties: {},\n serializationType: \"protocol-buffer\",\n protocolBuffer: \"PBTextShape\"\n }\n};\n", "/* eslint-disable */\nimport _m0 from \"protobufjs/minimal\";\nconst protobufPackageSarasa = \"decentraland.sdk.components\";\n/**\n * @public\n */\nexport var TriggerAreaMeshType;\n(function (TriggerAreaMeshType) {\n TriggerAreaMeshType[TriggerAreaMeshType[\"TAMT_BOX\"] = 0] = \"TAMT_BOX\";\n TriggerAreaMeshType[TriggerAreaMeshType[\"TAMT_SPHERE\"] = 1] = \"TAMT_SPHERE\";\n})(TriggerAreaMeshType || (TriggerAreaMeshType = {}));\nfunction createBasePBTriggerArea() {\n return { mesh: undefined, collisionMask: undefined };\n}\n/**\n * @public\n */\nexport var PBTriggerArea;\n(function (PBTriggerArea) {\n function encode(message, writer = _m0.Writer.create()) {\n if (message.mesh !== undefined) {\n writer.uint32(8).int32(message.mesh);\n }\n if (message.collisionMask !== undefined) {\n writer.uint32(16).uint32(message.collisionMask);\n }\n return writer;\n }\n PBTriggerArea.encode = encode;\n function decode(input, length) {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBasePBTriggerArea();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 8) {\n break;\n }\n message.mesh = reader.int32();\n continue;\n case 2:\n if (tag !== 16) {\n break;\n }\n message.collisionMask = reader.uint32();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n }\n PBTriggerArea.decode = decode;\n})(PBTriggerArea || (PBTriggerArea = {}));\n", "import { PBTriggerArea } from './pb/decentraland/sdk/components/trigger_area.gen';\n/**\n * @internal\n */\nexport const TriggerAreaSchema = {\n COMPONENT_ID: 1060,\n serialize(value, builder) {\n const writer = PBTriggerArea.encode(value);\n const buffer = new Uint8Array(writer.finish(), 0, writer.len);\n builder.writeBuffer(buffer, false);\n },\n deserialize(reader) {\n return PBTriggerArea.decode(reader.buffer(), reader.remainingBytes());\n },\n create() {\n // TODO: this is a hack.\n return PBTriggerArea.decode(new Uint8Array());\n },\n jsonSchema: {\n type: \"object\",\n properties: {},\n serializationType: \"protocol-buffer\",\n protocolBuffer: \"PBTriggerArea\"\n }\n};\n", "/* eslint-disable */\nimport _m0 from \"protobufjs/minimal\";\nimport { Quaternion, Vector3 } from \"../../common/vectors.gen\";\nconst protobufPackageSarasa = \"decentraland.sdk.components\";\n/**\n * @public\n */\nexport var TriggerAreaEventType;\n(function (TriggerAreaEventType) {\n TriggerAreaEventType[TriggerAreaEventType[\"TAET_ENTER\"] = 0] = \"TAET_ENTER\";\n TriggerAreaEventType[TriggerAreaEventType[\"TAET_STAY\"] = 1] = \"TAET_STAY\";\n TriggerAreaEventType[TriggerAreaEventType[\"TAET_EXIT\"] = 2] = \"TAET_EXIT\";\n})(TriggerAreaEventType || (TriggerAreaEventType = {}));\nfunction createBasePBTriggerAreaResult() {\n return {\n triggeredEntity: 0,\n triggeredEntityPosition: undefined,\n triggeredEntityRotation: undefined,\n eventType: 0,\n timestamp: 0,\n trigger: undefined,\n };\n}\n/**\n * @public\n */\nexport var PBTriggerAreaResult;\n(function (PBTriggerAreaResult) {\n function encode(message, writer = _m0.Writer.create()) {\n if (message.triggeredEntity !== 0) {\n writer.uint32(8).uint32(message.triggeredEntity);\n }\n if (message.triggeredEntityPosition !== undefined) {\n Vector3.encode(message.triggeredEntityPosition, writer.uint32(18).fork()).ldelim();\n }\n if (message.triggeredEntityRotation !== undefined) {\n Quaternion.encode(message.triggeredEntityRotation, writer.uint32(26).fork()).ldelim();\n }\n if (message.eventType !== 0) {\n writer.uint32(32).int32(message.eventType);\n }\n if (message.timestamp !== 0) {\n writer.uint32(40).uint32(message.timestamp);\n }\n if (message.trigger !== undefined) {\n PBTriggerAreaResult_Trigger.encode(message.trigger, writer.uint32(50).fork()).ldelim();\n }\n return writer;\n }\n PBTriggerAreaResult.encode = encode;\n function decode(input, length) {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBasePBTriggerAreaResult();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 8) {\n break;\n }\n message.triggeredEntity = reader.uint32();\n continue;\n case 2:\n if (tag !== 18) {\n break;\n }\n message.triggeredEntityPosition = Vector3.decode(reader, reader.uint32());\n continue;\n case 3:\n if (tag !== 26) {\n break;\n }\n message.triggeredEntityRotation = Quaternion.decode(reader, reader.uint32());\n continue;\n case 4:\n if (tag !== 32) {\n break;\n }\n message.eventType = reader.int32();\n continue;\n case 5:\n if (tag !== 40) {\n break;\n }\n message.timestamp = reader.uint32();\n continue;\n case 6:\n if (tag !== 50) {\n break;\n }\n message.trigger = PBTriggerAreaResult_Trigger.decode(reader, reader.uint32());\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n }\n PBTriggerAreaResult.decode = decode;\n})(PBTriggerAreaResult || (PBTriggerAreaResult = {}));\nfunction createBasePBTriggerAreaResult_Trigger() {\n return { entity: 0, layers: 0, position: undefined, rotation: undefined, scale: undefined };\n}\n/**\n * @public\n */\nexport var PBTriggerAreaResult_Trigger;\n(function (PBTriggerAreaResult_Trigger) {\n function encode(message, writer = _m0.Writer.create()) {\n if (message.entity !== 0) {\n writer.uint32(8).uint32(message.entity);\n }\n if (message.layers !== 0) {\n writer.uint32(16).uint32(message.layers);\n }\n if (message.position !== undefined) {\n Vector3.encode(message.position, writer.uint32(26).fork()).ldelim();\n }\n if (message.rotation !== undefined) {\n Quaternion.encode(message.rotation, writer.uint32(34).fork()).ldelim();\n }\n if (message.scale !== undefined) {\n Vector3.encode(message.scale, writer.uint32(42).fork()).ldelim();\n }\n return writer;\n }\n PBTriggerAreaResult_Trigger.encode = encode;\n function decode(input, length) {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBasePBTriggerAreaResult_Trigger();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 8) {\n break;\n }\n message.entity = reader.uint32();\n continue;\n case 2:\n if (tag !== 16) {\n break;\n }\n message.layers = reader.uint32();\n continue;\n case 3:\n if (tag !== 26) {\n break;\n }\n message.position = Vector3.decode(reader, reader.uint32());\n continue;\n case 4:\n if (tag !== 34) {\n break;\n }\n message.rotation = Quaternion.decode(reader, reader.uint32());\n continue;\n case 5:\n if (tag !== 42) {\n break;\n }\n message.scale = Vector3.decode(reader, reader.uint32());\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n }\n PBTriggerAreaResult_Trigger.decode = decode;\n})(PBTriggerAreaResult_Trigger || (PBTriggerAreaResult_Trigger = {}));\n", "import { PBTriggerAreaResult } from './pb/decentraland/sdk/components/trigger_area_result.gen';\n/**\n * @internal\n */\nexport const TriggerAreaResultSchema = {\n COMPONENT_ID: 1061,\n serialize(value, builder) {\n const writer = PBTriggerAreaResult.encode(value);\n const buffer = new Uint8Array(writer.finish(), 0, writer.len);\n builder.writeBuffer(buffer, false);\n },\n deserialize(reader) {\n return PBTriggerAreaResult.decode(reader.buffer(), reader.remainingBytes());\n },\n create() {\n // TODO: this is a hack.\n return PBTriggerAreaResult.decode(new Uint8Array());\n },\n jsonSchema: {\n type: \"object\",\n properties: {},\n serializationType: \"protocol-buffer\",\n protocolBuffer: \"PBTriggerAreaResult\"\n }\n};\n", "/* eslint-disable */\nimport _m0 from \"protobufjs/minimal\";\nimport { Quaternion, Vector2, Vector3 } from \"../../common/vectors.gen\";\nconst protobufPackageSarasa = \"decentraland.sdk.components\";\n/**\n * @public\n */\nexport var TextureMovementType;\n(function (TextureMovementType) {\n /** TMT_OFFSET - default = TextureMovementType.TMT_OFFSET */\n TextureMovementType[TextureMovementType[\"TMT_OFFSET\"] = 0] = \"TMT_OFFSET\";\n TextureMovementType[TextureMovementType[\"TMT_TILING\"] = 1] = \"TMT_TILING\";\n})(TextureMovementType || (TextureMovementType = {}));\n/**\n * Implementation guidelines for these easing functions can be found\n * at https://github.com/ai/easings.net/blob/6fcd5f852a470bf1a7890e8178afa0f471d5f2ec/src/easings/easingsFunctions.ts\n */\n/**\n * @public\n */\nexport var EasingFunction;\n(function (EasingFunction) {\n /** EF_LINEAR - default */\n EasingFunction[EasingFunction[\"EF_LINEAR\"] = 0] = \"EF_LINEAR\";\n EasingFunction[EasingFunction[\"EF_EASEINQUAD\"] = 1] = \"EF_EASEINQUAD\";\n EasingFunction[EasingFunction[\"EF_EASEOUTQUAD\"] = 2] = \"EF_EASEOUTQUAD\";\n EasingFunction[EasingFunction[\"EF_EASEQUAD\"] = 3] = \"EF_EASEQUAD\";\n EasingFunction[EasingFunction[\"EF_EASEINSINE\"] = 4] = \"EF_EASEINSINE\";\n EasingFunction[EasingFunction[\"EF_EASEOUTSINE\"] = 5] = \"EF_EASEOUTSINE\";\n EasingFunction[EasingFunction[\"EF_EASESINE\"] = 6] = \"EF_EASESINE\";\n EasingFunction[EasingFunction[\"EF_EASEINEXPO\"] = 7] = \"EF_EASEINEXPO\";\n EasingFunction[EasingFunction[\"EF_EASEOUTEXPO\"] = 8] = \"EF_EASEOUTEXPO\";\n EasingFunction[EasingFunction[\"EF_EASEEXPO\"] = 9] = \"EF_EASEEXPO\";\n EasingFunction[EasingFunction[\"EF_EASEINELASTIC\"] = 10] = \"EF_EASEINELASTIC\";\n EasingFunction[EasingFunction[\"EF_EASEOUTELASTIC\"] = 11] = \"EF_EASEOUTELASTIC\";\n EasingFunction[EasingFunction[\"EF_EASEELASTIC\"] = 12] = \"EF_EASEELASTIC\";\n EasingFunction[EasingFunction[\"EF_EASEINBOUNCE\"] = 13] = \"EF_EASEINBOUNCE\";\n EasingFunction[EasingFunction[\"EF_EASEOUTBOUNCE\"] = 14] = \"EF_EASEOUTBOUNCE\";\n EasingFunction[EasingFunction[\"EF_EASEBOUNCE\"] = 15] = \"EF_EASEBOUNCE\";\n EasingFunction[EasingFunction[\"EF_EASEINCUBIC\"] = 16] = \"EF_EASEINCUBIC\";\n EasingFunction[EasingFunction[\"EF_EASEOUTCUBIC\"] = 17] = \"EF_EASEOUTCUBIC\";\n EasingFunction[EasingFunction[\"EF_EASECUBIC\"] = 18] = \"EF_EASECUBIC\";\n EasingFunction[EasingFunction[\"EF_EASEINQUART\"] = 19] = \"EF_EASEINQUART\";\n EasingFunction[EasingFunction[\"EF_EASEOUTQUART\"] = 20] = \"EF_EASEOUTQUART\";\n EasingFunction[EasingFunction[\"EF_EASEQUART\"] = 21] = \"EF_EASEQUART\";\n EasingFunction[EasingFunction[\"EF_EASEINQUINT\"] = 22] = \"EF_EASEINQUINT\";\n EasingFunction[EasingFunction[\"EF_EASEOUTQUINT\"] = 23] = \"EF_EASEOUTQUINT\";\n EasingFunction[EasingFunction[\"EF_EASEQUINT\"] = 24] = \"EF_EASEQUINT\";\n EasingFunction[EasingFunction[\"EF_EASEINCIRC\"] = 25] = \"EF_EASEINCIRC\";\n EasingFunction[EasingFunction[\"EF_EASEOUTCIRC\"] = 26] = \"EF_EASEOUTCIRC\";\n EasingFunction[EasingFunction[\"EF_EASECIRC\"] = 27] = \"EF_EASECIRC\";\n EasingFunction[EasingFunction[\"EF_EASEINBACK\"] = 28] = \"EF_EASEINBACK\";\n EasingFunction[EasingFunction[\"EF_EASEOUTBACK\"] = 29] = \"EF_EASEOUTBACK\";\n EasingFunction[EasingFunction[\"EF_EASEBACK\"] = 30] = \"EF_EASEBACK\";\n})(EasingFunction || (EasingFunction = {}));\nfunction createBasePBTween() {\n return { duration: 0, easingFunction: 0, mode: undefined, playing: undefined, currentTime: undefined };\n}\n/**\n * @public\n */\nexport var PBTween;\n(function (PBTween) {\n function encode(message, writer = _m0.Writer.create()) {\n if (message.duration !== 0) {\n writer.uint32(13).float(message.duration);\n }\n if (message.easingFunction !== 0) {\n writer.uint32(16).int32(message.easingFunction);\n }\n switch (message.mode?.$case) {\n case \"move\":\n Move.encode(message.mode.move, writer.uint32(26).fork()).ldelim();\n break;\n case \"rotate\":\n Rotate.encode(message.mode.rotate, writer.uint32(34).fork()).ldelim();\n break;\n case \"scale\":\n Scale.encode(message.mode.scale, writer.uint32(42).fork()).ldelim();\n break;\n case \"textureMove\":\n TextureMove.encode(message.mode.textureMove, writer.uint32(66).fork()).ldelim();\n break;\n }\n if (message.playing !== undefined) {\n writer.uint32(48).bool(message.playing);\n }\n if (message.currentTime !== undefined) {\n writer.uint32(61).float(message.currentTime);\n }\n return writer;\n }\n PBTween.encode = encode;\n function decode(input, length) {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBasePBTween();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 13) {\n break;\n }\n message.duration = reader.float();\n continue;\n case 2:\n if (tag !== 16) {\n break;\n }\n message.easingFunction = reader.int32();\n continue;\n case 3:\n if (tag !== 26) {\n break;\n }\n message.mode = { $case: \"move\", move: Move.decode(reader, reader.uint32()) };\n continue;\n case 4:\n if (tag !== 34) {\n break;\n }\n message.mode = { $case: \"rotate\", rotate: Rotate.decode(reader, reader.uint32()) };\n continue;\n case 5:\n if (tag !== 42) {\n break;\n }\n message.mode = { $case: \"scale\", scale: Scale.decode(reader, reader.uint32()) };\n continue;\n case 8:\n if (tag !== 66) {\n break;\n }\n message.mode = { $case: \"textureMove\", textureMove: TextureMove.decode(reader, reader.uint32()) };\n continue;\n case 6:\n if (tag !== 48) {\n break;\n }\n message.playing = reader.bool();\n continue;\n case 7:\n if (tag !== 61) {\n break;\n }\n message.currentTime = reader.float();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n }\n PBTween.decode = decode;\n})(PBTween || (PBTween = {}));\nfunction createBaseMove() {\n return { start: undefined, end: undefined, faceDirection: undefined };\n}\n/**\n * @public\n */\nexport var Move;\n(function (Move) {\n function encode(message, writer = _m0.Writer.create()) {\n if (message.start !== undefined) {\n Vector3.encode(message.start, writer.uint32(10).fork()).ldelim();\n }\n if (message.end !== undefined) {\n Vector3.encode(message.end, writer.uint32(18).fork()).ldelim();\n }\n if (message.faceDirection !== undefined) {\n writer.uint32(24).bool(message.faceDirection);\n }\n return writer;\n }\n Move.encode = encode;\n function decode(input, length) {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseMove();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n message.start = Vector3.decode(reader, reader.uint32());\n continue;\n case 2:\n if (tag !== 18) {\n break;\n }\n message.end = Vector3.decode(reader, reader.uint32());\n continue;\n case 3:\n if (tag !== 24) {\n break;\n }\n message.faceDirection = reader.bool();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n }\n Move.decode = decode;\n})(Move || (Move = {}));\nfunction createBaseRotate() {\n return { start: undefined, end: undefined };\n}\n/**\n * @public\n */\nexport var Rotate;\n(function (Rotate) {\n function encode(message, writer = _m0.Writer.create()) {\n if (message.start !== undefined) {\n Quaternion.encode(message.start, writer.uint32(10).fork()).ldelim();\n }\n if (message.end !== undefined) {\n Quaternion.encode(message.end, writer.uint32(18).fork()).ldelim();\n }\n return writer;\n }\n Rotate.encode = encode;\n function decode(input, length) {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseRotate();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n message.start = Quaternion.decode(reader, reader.uint32());\n continue;\n case 2:\n if (tag !== 18) {\n break;\n }\n message.end = Quaternion.decode(reader, reader.uint32());\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n }\n Rotate.decode = decode;\n})(Rotate || (Rotate = {}));\nfunction createBaseScale() {\n return { start: undefined, end: undefined };\n}\n/**\n * @public\n */\nexport var Scale;\n(function (Scale) {\n function encode(message, writer = _m0.Writer.create()) {\n if (message.start !== undefined) {\n Vector3.encode(message.start, writer.uint32(10).fork()).ldelim();\n }\n if (message.end !== undefined) {\n Vector3.encode(message.end, writer.uint32(18).fork()).ldelim();\n }\n return writer;\n }\n Scale.encode = encode;\n function decode(input, length) {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseScale();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n message.start = Vector3.decode(reader, reader.uint32());\n continue;\n case 2:\n if (tag !== 18) {\n break;\n }\n message.end = Vector3.decode(reader, reader.uint32());\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n }\n Scale.decode = decode;\n})(Scale || (Scale = {}));\nfunction createBaseTextureMove() {\n return { start: undefined, end: undefined, movementType: undefined };\n}\n/**\n * @public\n */\nexport var TextureMove;\n(function (TextureMove) {\n function encode(message, writer = _m0.Writer.create()) {\n if (message.start !== undefined) {\n Vector2.encode(message.start, writer.uint32(10).fork()).ldelim();\n }\n if (message.end !== undefined) {\n Vector2.encode(message.end, writer.uint32(18).fork()).ldelim();\n }\n if (message.movementType !== undefined) {\n writer.uint32(24).int32(message.movementType);\n }\n return writer;\n }\n TextureMove.encode = encode;\n function decode(input, length) {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseTextureMove();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n message.start = Vector2.decode(reader, reader.uint32());\n continue;\n case 2:\n if (tag !== 18) {\n break;\n }\n message.end = Vector2.decode(reader, reader.uint32());\n continue;\n case 3:\n if (tag !== 24) {\n break;\n }\n message.movementType = reader.int32();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n }\n TextureMove.decode = decode;\n})(TextureMove || (TextureMove = {}));\n", "import { PBTween } from './pb/decentraland/sdk/components/tween.gen';\n/**\n * @internal\n */\nexport const TweenSchema = {\n COMPONENT_ID: 1102,\n serialize(value, builder) {\n const writer = PBTween.encode(value);\n const buffer = new Uint8Array(writer.finish(), 0, writer.len);\n builder.writeBuffer(buffer, false);\n },\n deserialize(reader) {\n return PBTween.decode(reader.buffer(), reader.remainingBytes());\n },\n create() {\n // TODO: this is a hack.\n return PBTween.decode(new Uint8Array());\n },\n jsonSchema: {\n type: \"object\",\n properties: {},\n serializationType: \"protocol-buffer\",\n protocolBuffer: \"PBTween\"\n }\n};\n", "/* eslint-disable */\nimport _m0 from \"protobufjs/minimal\";\nimport { PBTween } from \"./tween.gen\";\nconst protobufPackageSarasa = \"decentraland.sdk.components\";\n/**\n * @public\n */\nexport var TweenLoop;\n(function (TweenLoop) {\n TweenLoop[TweenLoop[\"TL_RESTART\"] = 0] = \"TL_RESTART\";\n TweenLoop[TweenLoop[\"TL_YOYO\"] = 1] = \"TL_YOYO\";\n})(TweenLoop || (TweenLoop = {}));\nfunction createBasePBTweenSequence() {\n return { sequence: [], loop: undefined };\n}\n/**\n * @public\n */\nexport var PBTweenSequence;\n(function (PBTweenSequence) {\n function encode(message, writer = _m0.Writer.create()) {\n for (const v of message.sequence) {\n PBTween.encode(v, writer.uint32(10).fork()).ldelim();\n }\n if (message.loop !== undefined) {\n writer.uint32(16).int32(message.loop);\n }\n return writer;\n }\n PBTweenSequence.encode = encode;\n function decode(input, length) {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBasePBTweenSequence();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n message.sequence.push(PBTween.decode(reader, reader.uint32()));\n continue;\n case 2:\n if (tag !== 16) {\n break;\n }\n message.loop = reader.int32();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n }\n PBTweenSequence.decode = decode;\n})(PBTweenSequence || (PBTweenSequence = {}));\n", "import { PBTweenSequence } from './pb/decentraland/sdk/components/tween_sequence.gen';\n/**\n * @internal\n */\nexport const TweenSequenceSchema = {\n COMPONENT_ID: 1104,\n serialize(value, builder) {\n const writer = PBTweenSequence.encode(value);\n const buffer = new Uint8Array(writer.finish(), 0, writer.len);\n builder.writeBuffer(buffer, false);\n },\n deserialize(reader) {\n return PBTweenSequence.decode(reader.buffer(), reader.remainingBytes());\n },\n create() {\n // TODO: this is a hack.\n return PBTweenSequence.decode(new Uint8Array());\n },\n jsonSchema: {\n type: \"object\",\n properties: {},\n serializationType: \"protocol-buffer\",\n protocolBuffer: \"PBTweenSequence\"\n }\n};\n", "/* eslint-disable */\nimport _m0 from \"protobufjs/minimal\";\nconst protobufPackageSarasa = \"decentraland.sdk.components\";\n/**\n * @public\n */\nexport var TweenStateStatus;\n(function (TweenStateStatus) {\n TweenStateStatus[TweenStateStatus[\"TS_ACTIVE\"] = 0] = \"TS_ACTIVE\";\n TweenStateStatus[TweenStateStatus[\"TS_COMPLETED\"] = 1] = \"TS_COMPLETED\";\n TweenStateStatus[TweenStateStatus[\"TS_PAUSED\"] = 2] = \"TS_PAUSED\";\n})(TweenStateStatus || (TweenStateStatus = {}));\nfunction createBasePBTweenState() {\n return { state: 0, currentTime: 0 };\n}\n/**\n * @public\n */\nexport var PBTweenState;\n(function (PBTweenState) {\n function encode(message, writer = _m0.Writer.create()) {\n if (message.state !== 0) {\n writer.uint32(8).int32(message.state);\n }\n if (message.currentTime !== 0) {\n writer.uint32(21).float(message.currentTime);\n }\n return writer;\n }\n PBTweenState.encode = encode;\n function decode(input, length) {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBasePBTweenState();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 8) {\n break;\n }\n message.state = reader.int32();\n continue;\n case 2:\n if (tag !== 21) {\n break;\n }\n message.currentTime = reader.float();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n }\n PBTweenState.decode = decode;\n})(PBTweenState || (PBTweenState = {}));\n", "import { PBTweenState } from './pb/decentraland/sdk/components/tween_state.gen';\n/**\n * @internal\n */\nexport const TweenStateSchema = {\n COMPONENT_ID: 1103,\n serialize(value, builder) {\n const writer = PBTweenState.encode(value);\n const buffer = new Uint8Array(writer.finish(), 0, writer.len);\n builder.writeBuffer(buffer, false);\n },\n deserialize(reader) {\n return PBTweenState.decode(reader.buffer(), reader.remainingBytes());\n },\n create() {\n // TODO: this is a hack.\n return PBTweenState.decode(new Uint8Array());\n },\n jsonSchema: {\n type: \"object\",\n properties: {},\n serializationType: \"protocol-buffer\",\n protocolBuffer: \"PBTweenState\"\n }\n};\n", "/* eslint-disable */\nimport _m0 from \"protobufjs/minimal\";\nimport { BorderRect } from \"../../common/border_rect.gen\";\nimport { Color4 } from \"../../common/colors.gen\";\nimport { TextureUnion } from \"../../common/texture.gen\";\nconst protobufPackageSarasa = \"decentraland.sdk.components\";\n/**\n * @public\n */\nexport var BackgroundTextureMode;\n(function (BackgroundTextureMode) {\n /**\n * NINE_SLICES - https://docs.unity3d.com/Manual/UIE-USS-SupportedProperties.html (Slicing section)\n * https://forum.unity.com/threads/how-does-slicing-in-ui-tookkit-works.1235863/\n * https://docs.unity3d.com/Manual/9SliceSprites.html\n * https://developer.mozilla.org/en-US/docs/Web/CSS/border-image-slice\n */\n BackgroundTextureMode[BackgroundTextureMode[\"NINE_SLICES\"] = 0] = \"NINE_SLICES\";\n /**\n * CENTER - CENTER enables the texture to be rendered centered in relation to the\n * element. If the element is smaller than the texture then the background\n * should use the element as stencil to cut off the out-of-bounds area\n */\n BackgroundTextureMode[BackgroundTextureMode[\"CENTER\"] = 1] = \"CENTER\";\n /**\n * STRETCH - STRETCH enables the texture to cover all the area of the container,\n * adopting its aspect ratio.\n */\n BackgroundTextureMode[BackgroundTextureMode[\"STRETCH\"] = 2] = \"STRETCH\";\n})(BackgroundTextureMode || (BackgroundTextureMode = {}));\nfunction createBasePBUiBackground() {\n return { color: undefined, texture: undefined, textureMode: 0, textureSlices: undefined, uvs: [] };\n}\n/**\n * @public\n */\nexport var PBUiBackground;\n(function (PBUiBackground) {\n function encode(message, writer = _m0.Writer.create()) {\n if (message.color !== undefined) {\n Color4.encode(message.color, writer.uint32(10).fork()).ldelim();\n }\n if (message.texture !== undefined) {\n TextureUnion.encode(message.texture, writer.uint32(18).fork()).ldelim();\n }\n if (message.textureMode !== 0) {\n writer.uint32(24).int32(message.textureMode);\n }\n if (message.textureSlices !== undefined) {\n BorderRect.encode(message.textureSlices, writer.uint32(34).fork()).ldelim();\n }\n writer.uint32(42).fork();\n for (const v of message.uvs) {\n writer.float(v);\n }\n writer.ldelim();\n return writer;\n }\n PBUiBackground.encode = encode;\n function decode(input, length) {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBasePBUiBackground();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n message.color = Color4.decode(reader, reader.uint32());\n continue;\n case 2:\n if (tag !== 18) {\n break;\n }\n message.texture = TextureUnion.decode(reader, reader.uint32());\n continue;\n case 3:\n if (tag !== 24) {\n break;\n }\n message.textureMode = reader.int32();\n continue;\n case 4:\n if (tag !== 34) {\n break;\n }\n message.textureSlices = BorderRect.decode(reader, reader.uint32());\n continue;\n case 5:\n if (tag === 45) {\n message.uvs.push(reader.float());\n continue;\n }\n if (tag === 42) {\n const end2 = reader.uint32() + reader.pos;\n while (reader.pos < end2) {\n message.uvs.push(reader.float());\n }\n continue;\n }\n break;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n }\n PBUiBackground.decode = decode;\n})(PBUiBackground || (PBUiBackground = {}));\n", "/* eslint-disable */\nimport _m0 from \"protobufjs/minimal\";\nconst protobufPackageSarasa = \"decentraland.common\";\nfunction createBaseBorderRect() {\n return { top: 0, left: 0, right: 0, bottom: 0 };\n}\n/**\n * @public\n */\nexport var BorderRect;\n(function (BorderRect) {\n function encode(message, writer = _m0.Writer.create()) {\n if (message.top !== 0) {\n writer.uint32(13).float(message.top);\n }\n if (message.left !== 0) {\n writer.uint32(21).float(message.left);\n }\n if (message.right !== 0) {\n writer.uint32(29).float(message.right);\n }\n if (message.bottom !== 0) {\n writer.uint32(37).float(message.bottom);\n }\n return writer;\n }\n BorderRect.encode = encode;\n function decode(input, length) {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseBorderRect();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 13) {\n break;\n }\n message.top = reader.float();\n continue;\n case 2:\n if (tag !== 21) {\n break;\n }\n message.left = reader.float();\n continue;\n case 3:\n if (tag !== 29) {\n break;\n }\n message.right = reader.float();\n continue;\n case 4:\n if (tag !== 37) {\n break;\n }\n message.bottom = reader.float();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n }\n BorderRect.decode = decode;\n})(BorderRect || (BorderRect = {}));\nfunction createBaseRect() {\n return { x: 0, y: 0, width: 0, height: 0 };\n}\n/**\n * @public\n */\nexport var Rect;\n(function (Rect) {\n function encode(message, writer = _m0.Writer.create()) {\n if (message.x !== 0) {\n writer.uint32(13).float(message.x);\n }\n if (message.y !== 0) {\n writer.uint32(21).float(message.y);\n }\n if (message.width !== 0) {\n writer.uint32(29).float(message.width);\n }\n if (message.height !== 0) {\n writer.uint32(37).float(message.height);\n }\n return writer;\n }\n Rect.encode = encode;\n function decode(input, length) {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseRect();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 13) {\n break;\n }\n message.x = reader.float();\n continue;\n case 2:\n if (tag !== 21) {\n break;\n }\n message.y = reader.float();\n continue;\n case 3:\n if (tag !== 29) {\n break;\n }\n message.width = reader.float();\n continue;\n case 4:\n if (tag !== 37) {\n break;\n }\n message.height = reader.float();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n }\n Rect.decode = decode;\n})(Rect || (Rect = {}));\n", "import { PBUiBackground } from './pb/decentraland/sdk/components/ui_background.gen';\n/**\n * @internal\n */\nexport const UiBackgroundSchema = {\n COMPONENT_ID: 1053,\n serialize(value, builder) {\n const writer = PBUiBackground.encode(value);\n const buffer = new Uint8Array(writer.finish(), 0, writer.len);\n builder.writeBuffer(buffer, false);\n },\n deserialize(reader) {\n return PBUiBackground.decode(reader.buffer(), reader.remainingBytes());\n },\n create() {\n // TODO: this is a hack.\n return PBUiBackground.decode(new Uint8Array());\n },\n jsonSchema: {\n type: \"object\",\n properties: {},\n serializationType: \"protocol-buffer\",\n protocolBuffer: \"PBUiBackground\"\n }\n};\n", "/* eslint-disable */\nimport _m0 from \"protobufjs/minimal\";\nimport { BorderRect } from \"../../common/border_rect.gen\";\nconst protobufPackageSarasa = \"decentraland.sdk.components\";\nfunction createBasePBUiCanvasInformation() {\n return { devicePixelRatio: 0, width: 0, height: 0, interactableArea: undefined };\n}\n/**\n * @public\n */\nexport var PBUiCanvasInformation;\n(function (PBUiCanvasInformation) {\n function encode(message, writer = _m0.Writer.create()) {\n if (message.devicePixelRatio !== 0) {\n writer.uint32(13).float(message.devicePixelRatio);\n }\n if (message.width !== 0) {\n writer.uint32(16).int32(message.width);\n }\n if (message.height !== 0) {\n writer.uint32(24).int32(message.height);\n }\n if (message.interactableArea !== undefined) {\n BorderRect.encode(message.interactableArea, writer.uint32(34).fork()).ldelim();\n }\n return writer;\n }\n PBUiCanvasInformation.encode = encode;\n function decode(input, length) {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBasePBUiCanvasInformation();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 13) {\n break;\n }\n message.devicePixelRatio = reader.float();\n continue;\n case 2:\n if (tag !== 16) {\n break;\n }\n message.width = reader.int32();\n continue;\n case 3:\n if (tag !== 24) {\n break;\n }\n message.height = reader.int32();\n continue;\n case 4:\n if (tag !== 34) {\n break;\n }\n message.interactableArea = BorderRect.decode(reader, reader.uint32());\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n }\n PBUiCanvasInformation.decode = decode;\n})(PBUiCanvasInformation || (PBUiCanvasInformation = {}));\n", "import { PBUiCanvasInformation } from './pb/decentraland/sdk/components/ui_canvas_information.gen';\n/**\n * @internal\n */\nexport const UiCanvasInformationSchema = {\n COMPONENT_ID: 1054,\n serialize(value, builder) {\n const writer = PBUiCanvasInformation.encode(value);\n const buffer = new Uint8Array(writer.finish(), 0, writer.len);\n builder.writeBuffer(buffer, false);\n },\n deserialize(reader) {\n return PBUiCanvasInformation.decode(reader.buffer(), reader.remainingBytes());\n },\n create() {\n // TODO: this is a hack.\n return PBUiCanvasInformation.decode(new Uint8Array());\n },\n jsonSchema: {\n type: \"object\",\n properties: {},\n serializationType: \"protocol-buffer\",\n protocolBuffer: \"PBUiCanvasInformation\"\n }\n};\n", "/* eslint-disable */\nimport _m0 from \"protobufjs/minimal\";\nimport { Color4 } from \"../../common/colors.gen\";\nconst protobufPackageSarasa = \"decentraland.sdk.components\";\nfunction createBasePBUiDropdown() {\n return {\n acceptEmpty: false,\n emptyLabel: undefined,\n options: [],\n selectedIndex: undefined,\n disabled: false,\n color: undefined,\n textAlign: undefined,\n font: undefined,\n fontSize: undefined,\n };\n}\n/**\n * @public\n */\nexport var PBUiDropdown;\n(function (PBUiDropdown) {\n function encode(message, writer = _m0.Writer.create()) {\n if (message.acceptEmpty === true) {\n writer.uint32(8).bool(message.acceptEmpty);\n }\n if (message.emptyLabel !== undefined) {\n writer.uint32(18).string(message.emptyLabel);\n }\n for (const v of message.options) {\n writer.uint32(26).string(v);\n }\n if (message.selectedIndex !== undefined) {\n writer.uint32(32).int32(message.selectedIndex);\n }\n if (message.disabled === true) {\n writer.uint32(40).bool(message.disabled);\n }\n if (message.color !== undefined) {\n Color4.encode(message.color, writer.uint32(50).fork()).ldelim();\n }\n if (message.textAlign !== undefined) {\n writer.uint32(80).int32(message.textAlign);\n }\n if (message.font !== undefined) {\n writer.uint32(88).int32(message.font);\n }\n if (message.fontSize !== undefined) {\n writer.uint32(96).int32(message.fontSize);\n }\n return writer;\n }\n PBUiDropdown.encode = encode;\n function decode(input, length) {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBasePBUiDropdown();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 8) {\n break;\n }\n message.acceptEmpty = reader.bool();\n continue;\n case 2:\n if (tag !== 18) {\n break;\n }\n message.emptyLabel = reader.string();\n continue;\n case 3:\n if (tag !== 26) {\n break;\n }\n message.options.push(reader.string());\n continue;\n case 4:\n if (tag !== 32) {\n break;\n }\n message.selectedIndex = reader.int32();\n continue;\n case 5:\n if (tag !== 40) {\n break;\n }\n message.disabled = reader.bool();\n continue;\n case 6:\n if (tag !== 50) {\n break;\n }\n message.color = Color4.decode(reader, reader.uint32());\n continue;\n case 10:\n if (tag !== 80) {\n break;\n }\n message.textAlign = reader.int32();\n continue;\n case 11:\n if (tag !== 88) {\n break;\n }\n message.font = reader.int32();\n continue;\n case 12:\n if (tag !== 96) {\n break;\n }\n message.fontSize = reader.int32();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n }\n PBUiDropdown.decode = decode;\n})(PBUiDropdown || (PBUiDropdown = {}));\n", "import { PBUiDropdown } from './pb/decentraland/sdk/components/ui_dropdown.gen';\n/**\n * @internal\n */\nexport const UiDropdownSchema = {\n COMPONENT_ID: 1094,\n serialize(value, builder) {\n const writer = PBUiDropdown.encode(value);\n const buffer = new Uint8Array(writer.finish(), 0, writer.len);\n builder.writeBuffer(buffer, false);\n },\n deserialize(reader) {\n return PBUiDropdown.decode(reader.buffer(), reader.remainingBytes());\n },\n create() {\n // TODO: this is a hack.\n return PBUiDropdown.decode(new Uint8Array());\n },\n jsonSchema: {\n type: \"object\",\n properties: {},\n serializationType: \"protocol-buffer\",\n protocolBuffer: \"PBUiDropdown\"\n }\n};\n", "/* eslint-disable */\nimport _m0 from \"protobufjs/minimal\";\nconst protobufPackageSarasa = \"decentraland.sdk.components\";\nfunction createBasePBUiDropdownResult() {\n return { value: 0 };\n}\n/**\n * @public\n */\nexport var PBUiDropdownResult;\n(function (PBUiDropdownResult) {\n function encode(message, writer = _m0.Writer.create()) {\n if (message.value !== 0) {\n writer.uint32(8).int32(message.value);\n }\n return writer;\n }\n PBUiDropdownResult.encode = encode;\n function decode(input, length) {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBasePBUiDropdownResult();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 8) {\n break;\n }\n message.value = reader.int32();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n }\n PBUiDropdownResult.decode = decode;\n})(PBUiDropdownResult || (PBUiDropdownResult = {}));\n", "import { PBUiDropdownResult } from './pb/decentraland/sdk/components/ui_dropdown_result.gen';\n/**\n * @internal\n */\nexport const UiDropdownResultSchema = {\n COMPONENT_ID: 1096,\n serialize(value, builder) {\n const writer = PBUiDropdownResult.encode(value);\n const buffer = new Uint8Array(writer.finish(), 0, writer.len);\n builder.writeBuffer(buffer, false);\n },\n deserialize(reader) {\n return PBUiDropdownResult.decode(reader.buffer(), reader.remainingBytes());\n },\n create() {\n // TODO: this is a hack.\n return PBUiDropdownResult.decode(new Uint8Array());\n },\n jsonSchema: {\n type: \"object\",\n properties: {},\n serializationType: \"protocol-buffer\",\n protocolBuffer: \"PBUiDropdownResult\"\n }\n};\n", "/* eslint-disable */\nimport _m0 from \"protobufjs/minimal\";\nimport { Color4 } from \"../../common/colors.gen\";\nconst protobufPackageSarasa = \"decentraland.sdk.components\";\nfunction createBasePBUiInput() {\n return {\n placeholder: \"\",\n color: undefined,\n placeholderColor: undefined,\n disabled: false,\n textAlign: undefined,\n font: undefined,\n fontSize: undefined,\n value: undefined,\n };\n}\n/**\n * @public\n */\nexport var PBUiInput;\n(function (PBUiInput) {\n function encode(message, writer = _m0.Writer.create()) {\n if (message.placeholder !== \"\") {\n writer.uint32(10).string(message.placeholder);\n }\n if (message.color !== undefined) {\n Color4.encode(message.color, writer.uint32(18).fork()).ldelim();\n }\n if (message.placeholderColor !== undefined) {\n Color4.encode(message.placeholderColor, writer.uint32(26).fork()).ldelim();\n }\n if (message.disabled === true) {\n writer.uint32(32).bool(message.disabled);\n }\n if (message.textAlign !== undefined) {\n writer.uint32(80).int32(message.textAlign);\n }\n if (message.font !== undefined) {\n writer.uint32(88).int32(message.font);\n }\n if (message.fontSize !== undefined) {\n writer.uint32(96).int32(message.fontSize);\n }\n if (message.value !== undefined) {\n writer.uint32(106).string(message.value);\n }\n return writer;\n }\n PBUiInput.encode = encode;\n function decode(input, length) {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBasePBUiInput();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n message.placeholder = reader.string();\n continue;\n case 2:\n if (tag !== 18) {\n break;\n }\n message.color = Color4.decode(reader, reader.uint32());\n continue;\n case 3:\n if (tag !== 26) {\n break;\n }\n message.placeholderColor = Color4.decode(reader, reader.uint32());\n continue;\n case 4:\n if (tag !== 32) {\n break;\n }\n message.disabled = reader.bool();\n continue;\n case 10:\n if (tag !== 80) {\n break;\n }\n message.textAlign = reader.int32();\n continue;\n case 11:\n if (tag !== 88) {\n break;\n }\n message.font = reader.int32();\n continue;\n case 12:\n if (tag !== 96) {\n break;\n }\n message.fontSize = reader.int32();\n continue;\n case 13:\n if (tag !== 106) {\n break;\n }\n message.value = reader.string();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n }\n PBUiInput.decode = decode;\n})(PBUiInput || (PBUiInput = {}));\n", "import { PBUiInput } from './pb/decentraland/sdk/components/ui_input.gen';\n/**\n * @internal\n */\nexport const UiInputSchema = {\n COMPONENT_ID: 1093,\n serialize(value, builder) {\n const writer = PBUiInput.encode(value);\n const buffer = new Uint8Array(writer.finish(), 0, writer.len);\n builder.writeBuffer(buffer, false);\n },\n deserialize(reader) {\n return PBUiInput.decode(reader.buffer(), reader.remainingBytes());\n },\n create() {\n // TODO: this is a hack.\n return PBUiInput.decode(new Uint8Array());\n },\n jsonSchema: {\n type: \"object\",\n properties: {},\n serializationType: \"protocol-buffer\",\n protocolBuffer: \"PBUiInput\"\n }\n};\n", "/* eslint-disable */\nimport _m0 from \"protobufjs/minimal\";\nconst protobufPackageSarasa = \"decentraland.sdk.components\";\nfunction createBasePBUiInputResult() {\n return { value: \"\", isSubmit: undefined };\n}\n/**\n * @public\n */\nexport var PBUiInputResult;\n(function (PBUiInputResult) {\n function encode(message, writer = _m0.Writer.create()) {\n if (message.value !== \"\") {\n writer.uint32(10).string(message.value);\n }\n if (message.isSubmit !== undefined) {\n writer.uint32(16).bool(message.isSubmit);\n }\n return writer;\n }\n PBUiInputResult.encode = encode;\n function decode(input, length) {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBasePBUiInputResult();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n message.value = reader.string();\n continue;\n case 2:\n if (tag !== 16) {\n break;\n }\n message.isSubmit = reader.bool();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n }\n PBUiInputResult.decode = decode;\n})(PBUiInputResult || (PBUiInputResult = {}));\n", "import { PBUiInputResult } from './pb/decentraland/sdk/components/ui_input_result.gen';\n/**\n * @internal\n */\nexport const UiInputResultSchema = {\n COMPONENT_ID: 1095,\n serialize(value, builder) {\n const writer = PBUiInputResult.encode(value);\n const buffer = new Uint8Array(writer.finish(), 0, writer.len);\n builder.writeBuffer(buffer, false);\n },\n deserialize(reader) {\n return PBUiInputResult.decode(reader.buffer(), reader.remainingBytes());\n },\n create() {\n // TODO: this is a hack.\n return PBUiInputResult.decode(new Uint8Array());\n },\n jsonSchema: {\n type: \"object\",\n properties: {},\n serializationType: \"protocol-buffer\",\n protocolBuffer: \"PBUiInputResult\"\n }\n};\n", "/* eslint-disable */\nimport _m0 from \"protobufjs/minimal\";\nimport { Color4 } from \"../../common/colors.gen\";\nconst protobufPackageSarasa = \"decentraland.sdk.components\";\n/**\n * @public\n */\nexport var TextWrap;\n(function (TextWrap) {\n TextWrap[TextWrap[\"TW_WRAP\"] = 0] = \"TW_WRAP\";\n TextWrap[TextWrap[\"TW_NO_WRAP\"] = 1] = \"TW_NO_WRAP\";\n})(TextWrap || (TextWrap = {}));\nfunction createBasePBUiText() {\n return {\n value: \"\",\n color: undefined,\n textAlign: undefined,\n font: undefined,\n fontSize: undefined,\n textWrap: undefined,\n };\n}\n/**\n * @public\n */\nexport var PBUiText;\n(function (PBUiText) {\n function encode(message, writer = _m0.Writer.create()) {\n if (message.value !== \"\") {\n writer.uint32(10).string(message.value);\n }\n if (message.color !== undefined) {\n Color4.encode(message.color, writer.uint32(18).fork()).ldelim();\n }\n if (message.textAlign !== undefined) {\n writer.uint32(24).int32(message.textAlign);\n }\n if (message.font !== undefined) {\n writer.uint32(32).int32(message.font);\n }\n if (message.fontSize !== undefined) {\n writer.uint32(40).int32(message.fontSize);\n }\n if (message.textWrap !== undefined) {\n writer.uint32(48).int32(message.textWrap);\n }\n return writer;\n }\n PBUiText.encode = encode;\n function decode(input, length) {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBasePBUiText();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n message.value = reader.string();\n continue;\n case 2:\n if (tag !== 18) {\n break;\n }\n message.color = Color4.decode(reader, reader.uint32());\n continue;\n case 3:\n if (tag !== 24) {\n break;\n }\n message.textAlign = reader.int32();\n continue;\n case 4:\n if (tag !== 32) {\n break;\n }\n message.font = reader.int32();\n continue;\n case 5:\n if (tag !== 40) {\n break;\n }\n message.fontSize = reader.int32();\n continue;\n case 6:\n if (tag !== 48) {\n break;\n }\n message.textWrap = reader.int32();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n }\n PBUiText.decode = decode;\n})(PBUiText || (PBUiText = {}));\n", "import { PBUiText } from './pb/decentraland/sdk/components/ui_text.gen';\n/**\n * @internal\n */\nexport const UiTextSchema = {\n COMPONENT_ID: 1052,\n serialize(value, builder) {\n const writer = PBUiText.encode(value);\n const buffer = new Uint8Array(writer.finish(), 0, writer.len);\n builder.writeBuffer(buffer, false);\n },\n deserialize(reader) {\n return PBUiText.decode(reader.buffer(), reader.remainingBytes());\n },\n create() {\n // TODO: this is a hack.\n return PBUiText.decode(new Uint8Array());\n },\n jsonSchema: {\n type: \"object\",\n properties: {},\n serializationType: \"protocol-buffer\",\n protocolBuffer: \"PBUiText\"\n }\n};\n", "/* eslint-disable */\nimport _m0 from \"protobufjs/minimal\";\nimport { Color4 } from \"../../common/colors.gen\";\nconst protobufPackageSarasa = \"decentraland.sdk.components\";\n/**\n * @public\n */\nexport var YGPositionType;\n(function (YGPositionType) {\n YGPositionType[YGPositionType[\"YGPT_RELATIVE\"] = 0] = \"YGPT_RELATIVE\";\n YGPositionType[YGPositionType[\"YGPT_ABSOLUTE\"] = 1] = \"YGPT_ABSOLUTE\";\n})(YGPositionType || (YGPositionType = {}));\n/**\n * @public\n */\nexport var YGAlign;\n(function (YGAlign) {\n YGAlign[YGAlign[\"YGA_AUTO\"] = 0] = \"YGA_AUTO\";\n YGAlign[YGAlign[\"YGA_FLEX_START\"] = 1] = \"YGA_FLEX_START\";\n YGAlign[YGAlign[\"YGA_CENTER\"] = 2] = \"YGA_CENTER\";\n YGAlign[YGAlign[\"YGA_FLEX_END\"] = 3] = \"YGA_FLEX_END\";\n YGAlign[YGAlign[\"YGA_STRETCH\"] = 4] = \"YGA_STRETCH\";\n YGAlign[YGAlign[\"YGA_BASELINE\"] = 5] = \"YGA_BASELINE\";\n YGAlign[YGAlign[\"YGA_SPACE_BETWEEN\"] = 6] = \"YGA_SPACE_BETWEEN\";\n YGAlign[YGAlign[\"YGA_SPACE_AROUND\"] = 7] = \"YGA_SPACE_AROUND\";\n})(YGAlign || (YGAlign = {}));\n/**\n * @public\n */\nexport var YGUnit;\n(function (YGUnit) {\n YGUnit[YGUnit[\"YGU_UNDEFINED\"] = 0] = \"YGU_UNDEFINED\";\n YGUnit[YGUnit[\"YGU_POINT\"] = 1] = \"YGU_POINT\";\n YGUnit[YGUnit[\"YGU_PERCENT\"] = 2] = \"YGU_PERCENT\";\n YGUnit[YGUnit[\"YGU_AUTO\"] = 3] = \"YGU_AUTO\";\n})(YGUnit || (YGUnit = {}));\n/**\n * @public\n */\nexport var YGFlexDirection;\n(function (YGFlexDirection) {\n YGFlexDirection[YGFlexDirection[\"YGFD_ROW\"] = 0] = \"YGFD_ROW\";\n YGFlexDirection[YGFlexDirection[\"YGFD_COLUMN\"] = 1] = \"YGFD_COLUMN\";\n YGFlexDirection[YGFlexDirection[\"YGFD_COLUMN_REVERSE\"] = 2] = \"YGFD_COLUMN_REVERSE\";\n YGFlexDirection[YGFlexDirection[\"YGFD_ROW_REVERSE\"] = 3] = \"YGFD_ROW_REVERSE\";\n})(YGFlexDirection || (YGFlexDirection = {}));\n/**\n * @public\n */\nexport var YGWrap;\n(function (YGWrap) {\n YGWrap[YGWrap[\"YGW_NO_WRAP\"] = 0] = \"YGW_NO_WRAP\";\n YGWrap[YGWrap[\"YGW_WRAP\"] = 1] = \"YGW_WRAP\";\n YGWrap[YGWrap[\"YGW_WRAP_REVERSE\"] = 2] = \"YGW_WRAP_REVERSE\";\n})(YGWrap || (YGWrap = {}));\n/**\n * @public\n */\nexport var YGJustify;\n(function (YGJustify) {\n YGJustify[YGJustify[\"YGJ_FLEX_START\"] = 0] = \"YGJ_FLEX_START\";\n YGJustify[YGJustify[\"YGJ_CENTER\"] = 1] = \"YGJ_CENTER\";\n YGJustify[YGJustify[\"YGJ_FLEX_END\"] = 2] = \"YGJ_FLEX_END\";\n YGJustify[YGJustify[\"YGJ_SPACE_BETWEEN\"] = 3] = \"YGJ_SPACE_BETWEEN\";\n YGJustify[YGJustify[\"YGJ_SPACE_AROUND\"] = 4] = \"YGJ_SPACE_AROUND\";\n YGJustify[YGJustify[\"YGJ_SPACE_EVENLY\"] = 5] = \"YGJ_SPACE_EVENLY\";\n})(YGJustify || (YGJustify = {}));\n/**\n * @public\n */\nexport var YGOverflow;\n(function (YGOverflow) {\n YGOverflow[YGOverflow[\"YGO_VISIBLE\"] = 0] = \"YGO_VISIBLE\";\n YGOverflow[YGOverflow[\"YGO_HIDDEN\"] = 1] = \"YGO_HIDDEN\";\n YGOverflow[YGOverflow[\"YGO_SCROLL\"] = 2] = \"YGO_SCROLL\";\n})(YGOverflow || (YGOverflow = {}));\n/**\n * @public\n */\nexport var YGDisplay;\n(function (YGDisplay) {\n YGDisplay[YGDisplay[\"YGD_FLEX\"] = 0] = \"YGD_FLEX\";\n YGDisplay[YGDisplay[\"YGD_NONE\"] = 1] = \"YGD_NONE\";\n})(YGDisplay || (YGDisplay = {}));\n/**\n * @public\n */\nexport var YGEdge;\n(function (YGEdge) {\n YGEdge[YGEdge[\"YGE_LEFT\"] = 0] = \"YGE_LEFT\";\n YGEdge[YGEdge[\"YGE_TOP\"] = 1] = \"YGE_TOP\";\n YGEdge[YGEdge[\"YGE_RIGHT\"] = 2] = \"YGE_RIGHT\";\n YGEdge[YGEdge[\"YGE_BOTTOM\"] = 3] = \"YGE_BOTTOM\";\n YGEdge[YGEdge[\"YGE_START\"] = 4] = \"YGE_START\";\n YGEdge[YGEdge[\"YGE_END\"] = 5] = \"YGE_END\";\n YGEdge[YGEdge[\"YGE_HORIZONTAL\"] = 6] = \"YGE_HORIZONTAL\";\n YGEdge[YGEdge[\"YGE_VERTICAL\"] = 7] = \"YGE_VERTICAL\";\n YGEdge[YGEdge[\"YGE_ALL\"] = 8] = \"YGE_ALL\";\n})(YGEdge || (YGEdge = {}));\n/**\n * @public\n */\nexport var PointerFilterMode;\n(function (PointerFilterMode) {\n PointerFilterMode[PointerFilterMode[\"PFM_NONE\"] = 0] = \"PFM_NONE\";\n PointerFilterMode[PointerFilterMode[\"PFM_BLOCK\"] = 1] = \"PFM_BLOCK\";\n})(PointerFilterMode || (PointerFilterMode = {}));\nfunction createBasePBUiTransform() {\n return {\n parent: 0,\n rightOf: 0,\n alignContent: undefined,\n alignItems: undefined,\n flexWrap: undefined,\n flexShrink: undefined,\n positionType: 0,\n alignSelf: 0,\n flexDirection: 0,\n justifyContent: 0,\n overflow: 0,\n display: 0,\n flexBasisUnit: 0,\n flexBasis: 0,\n flexGrow: 0,\n widthUnit: 0,\n width: 0,\n heightUnit: 0,\n height: 0,\n minWidthUnit: 0,\n minWidth: 0,\n minHeightUnit: 0,\n minHeight: 0,\n maxWidthUnit: 0,\n maxWidth: 0,\n maxHeightUnit: 0,\n maxHeight: 0,\n positionLeftUnit: 0,\n positionLeft: 0,\n positionTopUnit: 0,\n positionTop: 0,\n positionRightUnit: 0,\n positionRight: 0,\n positionBottomUnit: 0,\n positionBottom: 0,\n marginLeftUnit: 0,\n marginLeft: 0,\n marginTopUnit: 0,\n marginTop: 0,\n marginRightUnit: 0,\n marginRight: 0,\n marginBottomUnit: 0,\n marginBottom: 0,\n paddingLeftUnit: 0,\n paddingLeft: 0,\n paddingTopUnit: 0,\n paddingTop: 0,\n paddingRightUnit: 0,\n paddingRight: 0,\n paddingBottomUnit: 0,\n paddingBottom: 0,\n pointerFilter: undefined,\n borderLeftWidthUnit: undefined,\n borderLeftWidth: undefined,\n borderTopWidthUnit: undefined,\n borderTopWidth: undefined,\n borderRightWidthUnit: undefined,\n borderRightWidth: undefined,\n borderBottomWidthUnit: undefined,\n borderBottomWidth: undefined,\n borderTopLeftRadiusUnit: undefined,\n borderTopLeftRadius: undefined,\n borderTopRightRadiusUnit: undefined,\n borderTopRightRadius: undefined,\n borderBottomLeftRadiusUnit: undefined,\n borderBottomLeftRadius: undefined,\n borderBottomRightRadiusUnit: undefined,\n borderBottomRightRadius: undefined,\n borderTopColor: undefined,\n borderBottomColor: undefined,\n borderLeftColor: undefined,\n borderRightColor: undefined,\n opacity: undefined,\n zIndex: undefined,\n };\n}\n/**\n * @public\n */\nexport var PBUiTransform;\n(function (PBUiTransform) {\n function encode(message, writer = _m0.Writer.create()) {\n if (message.parent !== 0) {\n writer.uint32(8).int32(message.parent);\n }\n if (message.rightOf !== 0) {\n writer.uint32(16).int32(message.rightOf);\n }\n if (message.alignContent !== undefined) {\n writer.uint32(24).int32(message.alignContent);\n }\n if (message.alignItems !== undefined) {\n writer.uint32(32).int32(message.alignItems);\n }\n if (message.flexWrap !== undefined) {\n writer.uint32(40).int32(message.flexWrap);\n }\n if (message.flexShrink !== undefined) {\n writer.uint32(53).float(message.flexShrink);\n }\n if (message.positionType !== 0) {\n writer.uint32(56).int32(message.positionType);\n }\n if (message.alignSelf !== 0) {\n writer.uint32(64).int32(message.alignSelf);\n }\n if (message.flexDirection !== 0) {\n writer.uint32(72).int32(message.flexDirection);\n }\n if (message.justifyContent !== 0) {\n writer.uint32(80).int32(message.justifyContent);\n }\n if (message.overflow !== 0) {\n writer.uint32(88).int32(message.overflow);\n }\n if (message.display !== 0) {\n writer.uint32(96).int32(message.display);\n }\n if (message.flexBasisUnit !== 0) {\n writer.uint32(104).int32(message.flexBasisUnit);\n }\n if (message.flexBasis !== 0) {\n writer.uint32(117).float(message.flexBasis);\n }\n if (message.flexGrow !== 0) {\n writer.uint32(125).float(message.flexGrow);\n }\n if (message.widthUnit !== 0) {\n writer.uint32(128).int32(message.widthUnit);\n }\n if (message.width !== 0) {\n writer.uint32(141).float(message.width);\n }\n if (message.heightUnit !== 0) {\n writer.uint32(144).int32(message.heightUnit);\n }\n if (message.height !== 0) {\n writer.uint32(157).float(message.height);\n }\n if (message.minWidthUnit !== 0) {\n writer.uint32(160).int32(message.minWidthUnit);\n }\n if (message.minWidth !== 0) {\n writer.uint32(173).float(message.minWidth);\n }\n if (message.minHeightUnit !== 0) {\n writer.uint32(176).int32(message.minHeightUnit);\n }\n if (message.minHeight !== 0) {\n writer.uint32(189).float(message.minHeight);\n }\n if (message.maxWidthUnit !== 0) {\n writer.uint32(192).int32(message.maxWidthUnit);\n }\n if (message.maxWidth !== 0) {\n writer.uint32(205).float(message.maxWidth);\n }\n if (message.maxHeightUnit !== 0) {\n writer.uint32(208).int32(message.maxHeightUnit);\n }\n if (message.maxHeight !== 0) {\n writer.uint32(221).float(message.maxHeight);\n }\n if (message.positionLeftUnit !== 0) {\n writer.uint32(224).int32(message.positionLeftUnit);\n }\n if (message.positionLeft !== 0) {\n writer.uint32(237).float(message.positionLeft);\n }\n if (message.positionTopUnit !== 0) {\n writer.uint32(240).int32(message.positionTopUnit);\n }\n if (message.positionTop !== 0) {\n writer.uint32(253).float(message.positionTop);\n }\n if (message.positionRightUnit !== 0) {\n writer.uint32(256).int32(message.positionRightUnit);\n }\n if (message.positionRight !== 0) {\n writer.uint32(269).float(message.positionRight);\n }\n if (message.positionBottomUnit !== 0) {\n writer.uint32(272).int32(message.positionBottomUnit);\n }\n if (message.positionBottom !== 0) {\n writer.uint32(285).float(message.positionBottom);\n }\n if (message.marginLeftUnit !== 0) {\n writer.uint32(288).int32(message.marginLeftUnit);\n }\n if (message.marginLeft !== 0) {\n writer.uint32(301).float(message.marginLeft);\n }\n if (message.marginTopUnit !== 0) {\n writer.uint32(304).int32(message.marginTopUnit);\n }\n if (message.marginTop !== 0) {\n writer.uint32(317).float(message.marginTop);\n }\n if (message.marginRightUnit !== 0) {\n writer.uint32(320).int32(message.marginRightUnit);\n }\n if (message.marginRight !== 0) {\n writer.uint32(333).float(message.marginRight);\n }\n if (message.marginBottomUnit !== 0) {\n writer.uint32(336).int32(message.marginBottomUnit);\n }\n if (message.marginBottom !== 0) {\n writer.uint32(349).float(message.marginBottom);\n }\n if (message.paddingLeftUnit !== 0) {\n writer.uint32(352).int32(message.paddingLeftUnit);\n }\n if (message.paddingLeft !== 0) {\n writer.uint32(365).float(message.paddingLeft);\n }\n if (message.paddingTopUnit !== 0) {\n writer.uint32(368).int32(message.paddingTopUnit);\n }\n if (message.paddingTop !== 0) {\n writer.uint32(381).float(message.paddingTop);\n }\n if (message.paddingRightUnit !== 0) {\n writer.uint32(384).int32(message.paddingRightUnit);\n }\n if (message.paddingRight !== 0) {\n writer.uint32(397).float(message.paddingRight);\n }\n if (message.paddingBottomUnit !== 0) {\n writer.uint32(400).int32(message.paddingBottomUnit);\n }\n if (message.paddingBottom !== 0) {\n writer.uint32(413).float(message.paddingBottom);\n }\n if (message.pointerFilter !== undefined) {\n writer.uint32(416).int32(message.pointerFilter);\n }\n if (message.borderLeftWidthUnit !== undefined) {\n writer.uint32(424).int32(message.borderLeftWidthUnit);\n }\n if (message.borderLeftWidth !== undefined) {\n writer.uint32(437).float(message.borderLeftWidth);\n }\n if (message.borderTopWidthUnit !== undefined) {\n writer.uint32(440).int32(message.borderTopWidthUnit);\n }\n if (message.borderTopWidth !== undefined) {\n writer.uint32(453).float(message.borderTopWidth);\n }\n if (message.borderRightWidthUnit !== undefined) {\n writer.uint32(456).int32(message.borderRightWidthUnit);\n }\n if (message.borderRightWidth !== undefined) {\n writer.uint32(469).float(message.borderRightWidth);\n }\n if (message.borderBottomWidthUnit !== undefined) {\n writer.uint32(472).int32(message.borderBottomWidthUnit);\n }\n if (message.borderBottomWidth !== undefined) {\n writer.uint32(485).float(message.borderBottomWidth);\n }\n if (message.borderTopLeftRadiusUnit !== undefined) {\n writer.uint32(488).int32(message.borderTopLeftRadiusUnit);\n }\n if (message.borderTopLeftRadius !== undefined) {\n writer.uint32(501).float(message.borderTopLeftRadius);\n }\n if (message.borderTopRightRadiusUnit !== undefined) {\n writer.uint32(504).int32(message.borderTopRightRadiusUnit);\n }\n if (message.borderTopRightRadius !== undefined) {\n writer.uint32(517).float(message.borderTopRightRadius);\n }\n if (message.borderBottomLeftRadiusUnit !== undefined) {\n writer.uint32(520).int32(message.borderBottomLeftRadiusUnit);\n }\n if (message.borderBottomLeftRadius !== undefined) {\n writer.uint32(533).float(message.borderBottomLeftRadius);\n }\n if (message.borderBottomRightRadiusUnit !== undefined) {\n writer.uint32(536).int32(message.borderBottomRightRadiusUnit);\n }\n if (message.borderBottomRightRadius !== undefined) {\n writer.uint32(549).float(message.borderBottomRightRadius);\n }\n if (message.borderTopColor !== undefined) {\n Color4.encode(message.borderTopColor, writer.uint32(554).fork()).ldelim();\n }\n if (message.borderBottomColor !== undefined) {\n Color4.encode(message.borderBottomColor, writer.uint32(562).fork()).ldelim();\n }\n if (message.borderLeftColor !== undefined) {\n Color4.encode(message.borderLeftColor, writer.uint32(570).fork()).ldelim();\n }\n if (message.borderRightColor !== undefined) {\n Color4.encode(message.borderRightColor, writer.uint32(578).fork()).ldelim();\n }\n if (message.opacity !== undefined) {\n writer.uint32(589).float(message.opacity);\n }\n if (message.zIndex !== undefined) {\n writer.uint32(616).int32(message.zIndex);\n }\n return writer;\n }\n PBUiTransform.encode = encode;\n function decode(input, length) {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBasePBUiTransform();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 8) {\n break;\n }\n message.parent = reader.int32();\n continue;\n case 2:\n if (tag !== 16) {\n break;\n }\n message.rightOf = reader.int32();\n continue;\n case 3:\n if (tag !== 24) {\n break;\n }\n message.alignContent = reader.int32();\n continue;\n case 4:\n if (tag !== 32) {\n break;\n }\n message.alignItems = reader.int32();\n continue;\n case 5:\n if (tag !== 40) {\n break;\n }\n message.flexWrap = reader.int32();\n continue;\n case 6:\n if (tag !== 53) {\n break;\n }\n message.flexShrink = reader.float();\n continue;\n case 7:\n if (tag !== 56) {\n break;\n }\n message.positionType = reader.int32();\n continue;\n case 8:\n if (tag !== 64) {\n break;\n }\n message.alignSelf = reader.int32();\n continue;\n case 9:\n if (tag !== 72) {\n break;\n }\n message.flexDirection = reader.int32();\n continue;\n case 10:\n if (tag !== 80) {\n break;\n }\n message.justifyContent = reader.int32();\n continue;\n case 11:\n if (tag !== 88) {\n break;\n }\n message.overflow = reader.int32();\n continue;\n case 12:\n if (tag !== 96) {\n break;\n }\n message.display = reader.int32();\n continue;\n case 13:\n if (tag !== 104) {\n break;\n }\n message.flexBasisUnit = reader.int32();\n continue;\n case 14:\n if (tag !== 117) {\n break;\n }\n message.flexBasis = reader.float();\n continue;\n case 15:\n if (tag !== 125) {\n break;\n }\n message.flexGrow = reader.float();\n continue;\n case 16:\n if (tag !== 128) {\n break;\n }\n message.widthUnit = reader.int32();\n continue;\n case 17:\n if (tag !== 141) {\n break;\n }\n message.width = reader.float();\n continue;\n case 18:\n if (tag !== 144) {\n break;\n }\n message.heightUnit = reader.int32();\n continue;\n case 19:\n if (tag !== 157) {\n break;\n }\n message.height = reader.float();\n continue;\n case 20:\n if (tag !== 160) {\n break;\n }\n message.minWidthUnit = reader.int32();\n continue;\n case 21:\n if (tag !== 173) {\n break;\n }\n message.minWidth = reader.float();\n continue;\n case 22:\n if (tag !== 176) {\n break;\n }\n message.minHeightUnit = reader.int32();\n continue;\n case 23:\n if (tag !== 189) {\n break;\n }\n message.minHeight = reader.float();\n continue;\n case 24:\n if (tag !== 192) {\n break;\n }\n message.maxWidthUnit = reader.int32();\n continue;\n case 25:\n if (tag !== 205) {\n break;\n }\n message.maxWidth = reader.float();\n continue;\n case 26:\n if (tag !== 208) {\n break;\n }\n message.maxHeightUnit = reader.int32();\n continue;\n case 27:\n if (tag !== 221) {\n break;\n }\n message.maxHeight = reader.float();\n continue;\n case 28:\n if (tag !== 224) {\n break;\n }\n message.positionLeftUnit = reader.int32();\n continue;\n case 29:\n if (tag !== 237) {\n break;\n }\n message.positionLeft = reader.float();\n continue;\n case 30:\n if (tag !== 240) {\n break;\n }\n message.positionTopUnit = reader.int32();\n continue;\n case 31:\n if (tag !== 253) {\n break;\n }\n message.positionTop = reader.float();\n continue;\n case 32:\n if (tag !== 256) {\n break;\n }\n message.positionRightUnit = reader.int32();\n continue;\n case 33:\n if (tag !== 269) {\n break;\n }\n message.positionRight = reader.float();\n continue;\n case 34:\n if (tag !== 272) {\n break;\n }\n message.positionBottomUnit = reader.int32();\n continue;\n case 35:\n if (tag !== 285) {\n break;\n }\n message.positionBottom = reader.float();\n continue;\n case 36:\n if (tag !== 288) {\n break;\n }\n message.marginLeftUnit = reader.int32();\n continue;\n case 37:\n if (tag !== 301) {\n break;\n }\n message.marginLeft = reader.float();\n continue;\n case 38:\n if (tag !== 304) {\n break;\n }\n message.marginTopUnit = reader.int32();\n continue;\n case 39:\n if (tag !== 317) {\n break;\n }\n message.marginTop = reader.float();\n continue;\n case 40:\n if (tag !== 320) {\n break;\n }\n message.marginRightUnit = reader.int32();\n continue;\n case 41:\n if (tag !== 333) {\n break;\n }\n message.marginRight = reader.float();\n continue;\n case 42:\n if (tag !== 336) {\n break;\n }\n message.marginBottomUnit = reader.int32();\n continue;\n case 43:\n if (tag !== 349) {\n break;\n }\n message.marginBottom = reader.float();\n continue;\n case 44:\n if (tag !== 352) {\n break;\n }\n message.paddingLeftUnit = reader.int32();\n continue;\n case 45:\n if (tag !== 365) {\n break;\n }\n message.paddingLeft = reader.float();\n continue;\n case 46:\n if (tag !== 368) {\n break;\n }\n message.paddingTopUnit = reader.int32();\n continue;\n case 47:\n if (tag !== 381) {\n break;\n }\n message.paddingTop = reader.float();\n continue;\n case 48:\n if (tag !== 384) {\n break;\n }\n message.paddingRightUnit = reader.int32();\n continue;\n case 49:\n if (tag !== 397) {\n break;\n }\n message.paddingRight = reader.float();\n continue;\n case 50:\n if (tag !== 400) {\n break;\n }\n message.paddingBottomUnit = reader.int32();\n continue;\n case 51:\n if (tag !== 413) {\n break;\n }\n message.paddingBottom = reader.float();\n continue;\n case 52:\n if (tag !== 416) {\n break;\n }\n message.pointerFilter = reader.int32();\n continue;\n case 53:\n if (tag !== 424) {\n break;\n }\n message.borderLeftWidthUnit = reader.int32();\n continue;\n case 54:\n if (tag !== 437) {\n break;\n }\n message.borderLeftWidth = reader.float();\n continue;\n case 55:\n if (tag !== 440) {\n break;\n }\n message.borderTopWidthUnit = reader.int32();\n continue;\n case 56:\n if (tag !== 453) {\n break;\n }\n message.borderTopWidth = reader.float();\n continue;\n case 57:\n if (tag !== 456) {\n break;\n }\n message.borderRightWidthUnit = reader.int32();\n continue;\n case 58:\n if (tag !== 469) {\n break;\n }\n message.borderRightWidth = reader.float();\n continue;\n case 59:\n if (tag !== 472) {\n break;\n }\n message.borderBottomWidthUnit = reader.int32();\n continue;\n case 60:\n if (tag !== 485) {\n break;\n }\n message.borderBottomWidth = reader.float();\n continue;\n case 61:\n if (tag !== 488) {\n break;\n }\n message.borderTopLeftRadiusUnit = reader.int32();\n continue;\n case 62:\n if (tag !== 501) {\n break;\n }\n message.borderTopLeftRadius = reader.float();\n continue;\n case 63:\n if (tag !== 504) {\n break;\n }\n message.borderTopRightRadiusUnit = reader.int32();\n continue;\n case 64:\n if (tag !== 517) {\n break;\n }\n message.borderTopRightRadius = reader.float();\n continue;\n case 65:\n if (tag !== 520) {\n break;\n }\n message.borderBottomLeftRadiusUnit = reader.int32();\n continue;\n case 66:\n if (tag !== 533) {\n break;\n }\n message.borderBottomLeftRadius = reader.float();\n continue;\n case 67:\n if (tag !== 536) {\n break;\n }\n message.borderBottomRightRadiusUnit = reader.int32();\n continue;\n case 68:\n if (tag !== 549) {\n break;\n }\n message.borderBottomRightRadius = reader.float();\n continue;\n case 69:\n if (tag !== 554) {\n break;\n }\n message.borderTopColor = Color4.decode(reader, reader.uint32());\n continue;\n case 70:\n if (tag !== 562) {\n break;\n }\n message.borderBottomColor = Color4.decode(reader, reader.uint32());\n continue;\n case 71:\n if (tag !== 570) {\n break;\n }\n message.borderLeftColor = Color4.decode(reader, reader.uint32());\n continue;\n case 72:\n if (tag !== 578) {\n break;\n }\n message.borderRightColor = Color4.decode(reader, reader.uint32());\n continue;\n case 73:\n if (tag !== 589) {\n break;\n }\n message.opacity = reader.float();\n continue;\n case 77:\n if (tag !== 616) {\n break;\n }\n message.zIndex = reader.int32();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n }\n PBUiTransform.decode = decode;\n})(PBUiTransform || (PBUiTransform = {}));\n", "import { PBUiTransform } from './pb/decentraland/sdk/components/ui_transform.gen';\n/**\n * @internal\n */\nexport const UiTransformSchema = {\n COMPONENT_ID: 1050,\n serialize(value, builder) {\n const writer = PBUiTransform.encode(value);\n const buffer = new Uint8Array(writer.finish(), 0, writer.len);\n builder.writeBuffer(buffer, false);\n },\n deserialize(reader) {\n return PBUiTransform.decode(reader.buffer(), reader.remainingBytes());\n },\n create() {\n // TODO: this is a hack.\n return PBUiTransform.decode(new Uint8Array());\n },\n jsonSchema: {\n type: \"object\",\n properties: {},\n serializationType: \"protocol-buffer\",\n protocolBuffer: \"PBUiTransform\"\n }\n};\n", "/* eslint-disable */\nimport _m0 from \"protobufjs/minimal\";\nconst protobufPackageSarasa = \"decentraland.sdk.components\";\n/**\n * @public\n */\nexport var VideoState;\n(function (VideoState) {\n VideoState[VideoState[\"VS_NONE\"] = 0] = \"VS_NONE\";\n VideoState[VideoState[\"VS_ERROR\"] = 1] = \"VS_ERROR\";\n VideoState[VideoState[\"VS_LOADING\"] = 2] = \"VS_LOADING\";\n VideoState[VideoState[\"VS_READY\"] = 3] = \"VS_READY\";\n VideoState[VideoState[\"VS_PLAYING\"] = 4] = \"VS_PLAYING\";\n VideoState[VideoState[\"VS_BUFFERING\"] = 5] = \"VS_BUFFERING\";\n VideoState[VideoState[\"VS_SEEKING\"] = 6] = \"VS_SEEKING\";\n VideoState[VideoState[\"VS_PAUSED\"] = 7] = \"VS_PAUSED\";\n})(VideoState || (VideoState = {}));\nfunction createBasePBVideoEvent() {\n return { timestamp: 0, tickNumber: 0, currentOffset: 0, videoLength: 0, state: 0 };\n}\n/**\n * @public\n */\nexport var PBVideoEvent;\n(function (PBVideoEvent) {\n function encode(message, writer = _m0.Writer.create()) {\n if (message.timestamp !== 0) {\n writer.uint32(8).uint32(message.timestamp);\n }\n if (message.tickNumber !== 0) {\n writer.uint32(16).uint32(message.tickNumber);\n }\n if (message.currentOffset !== 0) {\n writer.uint32(29).float(message.currentOffset);\n }\n if (message.videoLength !== 0) {\n writer.uint32(37).float(message.videoLength);\n }\n if (message.state !== 0) {\n writer.uint32(40).int32(message.state);\n }\n return writer;\n }\n PBVideoEvent.encode = encode;\n function decode(input, length) {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBasePBVideoEvent();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 8) {\n break;\n }\n message.timestamp = reader.uint32();\n continue;\n case 2:\n if (tag !== 16) {\n break;\n }\n message.tickNumber = reader.uint32();\n continue;\n case 3:\n if (tag !== 29) {\n break;\n }\n message.currentOffset = reader.float();\n continue;\n case 4:\n if (tag !== 37) {\n break;\n }\n message.videoLength = reader.float();\n continue;\n case 5:\n if (tag !== 40) {\n break;\n }\n message.state = reader.int32();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n }\n PBVideoEvent.decode = decode;\n})(PBVideoEvent || (PBVideoEvent = {}));\n", "import { PBVideoEvent } from './pb/decentraland/sdk/components/video_event.gen';\n/**\n * @internal\n */\nexport const VideoEventSchema = {\n COMPONENT_ID: 1044,\n serialize(value, builder) {\n const writer = PBVideoEvent.encode(value);\n const buffer = new Uint8Array(writer.finish(), 0, writer.len);\n builder.writeBuffer(buffer, false);\n },\n deserialize(reader) {\n return PBVideoEvent.decode(reader.buffer(), reader.remainingBytes());\n },\n create() {\n // TODO: this is a hack.\n return PBVideoEvent.decode(new Uint8Array());\n },\n jsonSchema: {\n type: \"object\",\n properties: {},\n serializationType: \"protocol-buffer\",\n protocolBuffer: \"PBVideoEvent\"\n }\n};\n", "/* eslint-disable */\nimport _m0 from \"protobufjs/minimal\";\nconst protobufPackageSarasa = \"decentraland.sdk.components\";\nfunction createBasePBVideoPlayer() {\n return {\n src: \"\",\n playing: undefined,\n position: undefined,\n volume: undefined,\n playbackRate: undefined,\n loop: undefined,\n };\n}\n/**\n * @public\n */\nexport var PBVideoPlayer;\n(function (PBVideoPlayer) {\n function encode(message, writer = _m0.Writer.create()) {\n if (message.src !== \"\") {\n writer.uint32(10).string(message.src);\n }\n if (message.playing !== undefined) {\n writer.uint32(16).bool(message.playing);\n }\n if (message.position !== undefined) {\n writer.uint32(29).float(message.position);\n }\n if (message.volume !== undefined) {\n writer.uint32(37).float(message.volume);\n }\n if (message.playbackRate !== undefined) {\n writer.uint32(45).float(message.playbackRate);\n }\n if (message.loop !== undefined) {\n writer.uint32(48).bool(message.loop);\n }\n return writer;\n }\n PBVideoPlayer.encode = encode;\n function decode(input, length) {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBasePBVideoPlayer();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n message.src = reader.string();\n continue;\n case 2:\n if (tag !== 16) {\n break;\n }\n message.playing = reader.bool();\n continue;\n case 3:\n if (tag !== 29) {\n break;\n }\n message.position = reader.float();\n continue;\n case 4:\n if (tag !== 37) {\n break;\n }\n message.volume = reader.float();\n continue;\n case 5:\n if (tag !== 45) {\n break;\n }\n message.playbackRate = reader.float();\n continue;\n case 6:\n if (tag !== 48) {\n break;\n }\n message.loop = reader.bool();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n }\n PBVideoPlayer.decode = decode;\n})(PBVideoPlayer || (PBVideoPlayer = {}));\n", "import { PBVideoPlayer } from './pb/decentraland/sdk/components/video_player.gen';\n/**\n * @internal\n */\nexport const VideoPlayerSchema = {\n COMPONENT_ID: 1043,\n serialize(value, builder) {\n const writer = PBVideoPlayer.encode(value);\n const buffer = new Uint8Array(writer.finish(), 0, writer.len);\n builder.writeBuffer(buffer, false);\n },\n deserialize(reader) {\n return PBVideoPlayer.decode(reader.buffer(), reader.remainingBytes());\n },\n create() {\n // TODO: this is a hack.\n return PBVideoPlayer.decode(new Uint8Array());\n },\n jsonSchema: {\n type: \"object\",\n properties: {},\n serializationType: \"protocol-buffer\",\n protocolBuffer: \"PBVideoPlayer\"\n }\n};\n", "/* eslint-disable */\nimport _m0 from \"protobufjs/minimal\";\nimport { CameraTransition } from \"./common/camera_transition.gen\";\nconst protobufPackageSarasa = \"decentraland.sdk.components\";\nfunction createBasePBVirtualCamera() {\n return { defaultTransition: undefined, lookAtEntity: undefined };\n}\n/**\n * @public\n */\nexport var PBVirtualCamera;\n(function (PBVirtualCamera) {\n function encode(message, writer = _m0.Writer.create()) {\n if (message.defaultTransition !== undefined) {\n CameraTransition.encode(message.defaultTransition, writer.uint32(10).fork()).ldelim();\n }\n if (message.lookAtEntity !== undefined) {\n writer.uint32(16).uint32(message.lookAtEntity);\n }\n return writer;\n }\n PBVirtualCamera.encode = encode;\n function decode(input, length) {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBasePBVirtualCamera();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n message.defaultTransition = CameraTransition.decode(reader, reader.uint32());\n continue;\n case 2:\n if (tag !== 16) {\n break;\n }\n message.lookAtEntity = reader.uint32();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n }\n PBVirtualCamera.decode = decode;\n})(PBVirtualCamera || (PBVirtualCamera = {}));\n", "/* eslint-disable */\nimport _m0 from \"protobufjs/minimal\";\nconst protobufPackageSarasa = \"decentraland.sdk.components.common\";\nfunction createBaseCameraTransition() {\n return { transitionMode: undefined };\n}\n/**\n * @public\n */\nexport var CameraTransition;\n(function (CameraTransition) {\n function encode(message, writer = _m0.Writer.create()) {\n switch (message.transitionMode?.$case) {\n case \"time\":\n writer.uint32(13).float(message.transitionMode.time);\n break;\n case \"speed\":\n writer.uint32(21).float(message.transitionMode.speed);\n break;\n }\n return writer;\n }\n CameraTransition.encode = encode;\n function decode(input, length) {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseCameraTransition();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 13) {\n break;\n }\n message.transitionMode = { $case: \"time\", time: reader.float() };\n continue;\n case 2:\n if (tag !== 21) {\n break;\n }\n message.transitionMode = { $case: \"speed\", speed: reader.float() };\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n }\n CameraTransition.decode = decode;\n})(CameraTransition || (CameraTransition = {}));\n", "import { PBVirtualCamera } from './pb/decentraland/sdk/components/virtual_camera.gen';\n/**\n * @internal\n */\nexport const VirtualCameraSchema = {\n COMPONENT_ID: 1076,\n serialize(value, builder) {\n const writer = PBVirtualCamera.encode(value);\n const buffer = new Uint8Array(writer.finish(), 0, writer.len);\n builder.writeBuffer(buffer, false);\n },\n deserialize(reader) {\n return PBVirtualCamera.decode(reader.buffer(), reader.remainingBytes());\n },\n create() {\n // TODO: this is a hack.\n return PBVirtualCamera.decode(new Uint8Array());\n },\n jsonSchema: {\n type: \"object\",\n properties: {},\n serializationType: \"protocol-buffer\",\n protocolBuffer: \"PBVirtualCamera\"\n }\n};\n", "/* eslint-disable */\nimport _m0 from \"protobufjs/minimal\";\nconst protobufPackageSarasa = \"decentraland.sdk.components\";\nfunction createBasePBVisibilityComponent() {\n return { visible: undefined };\n}\n/**\n * @public\n */\nexport var PBVisibilityComponent;\n(function (PBVisibilityComponent) {\n function encode(message, writer = _m0.Writer.create()) {\n if (message.visible !== undefined) {\n writer.uint32(8).bool(message.visible);\n }\n return writer;\n }\n PBVisibilityComponent.encode = encode;\n function decode(input, length) {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBasePBVisibilityComponent();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 8) {\n break;\n }\n message.visible = reader.bool();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n }\n PBVisibilityComponent.decode = decode;\n})(PBVisibilityComponent || (PBVisibilityComponent = {}));\n", "import { PBVisibilityComponent } from './pb/decentraland/sdk/components/visibility_component.gen';\n/**\n * @internal\n */\nexport const VisibilityComponentSchema = {\n COMPONENT_ID: 1081,\n serialize(value, builder) {\n const writer = PBVisibilityComponent.encode(value);\n const buffer = new Uint8Array(writer.finish(), 0, writer.len);\n builder.writeBuffer(buffer, false);\n },\n deserialize(reader) {\n return PBVisibilityComponent.decode(reader.buffer(), reader.remainingBytes());\n },\n create() {\n // TODO: this is a hack.\n return PBVisibilityComponent.decode(new Uint8Array());\n },\n jsonSchema: {\n type: \"object\",\n properties: {},\n serializationType: \"protocol-buffer\",\n protocolBuffer: \"PBVisibilityComponent\"\n }\n};\n", "import { AnimatorSchema } from './Animator.gen';\nimport { AudioEventSchema } from './AudioEvent.gen';\nimport { AudioSourceSchema } from './AudioSource.gen';\nimport { AudioStreamSchema } from './AudioStream.gen';\nimport { AvatarAttachSchema } from './AvatarAttach.gen';\nimport { AvatarBaseSchema } from './AvatarBase.gen';\nimport { AvatarEmoteCommandSchema } from './AvatarEmoteCommand.gen';\nimport { AvatarEquippedDataSchema } from './AvatarEquippedData.gen';\nimport { AvatarModifierAreaSchema } from './AvatarModifierArea.gen';\nimport { AvatarShapeSchema } from './AvatarShape.gen';\nimport { BillboardSchema } from './Billboard.gen';\nimport { CameraModeSchema } from './CameraMode.gen';\nimport { CameraModeAreaSchema } from './CameraModeArea.gen';\nimport { EngineInfoSchema } from './EngineInfo.gen';\nimport { GltfContainerSchema } from './GltfContainer.gen';\nimport { GltfContainerLoadingStateSchema } from './GltfContainerLoadingState.gen';\nimport { GltfNodeModifiersSchema } from './GltfNodeModifiers.gen';\nimport { InputModifierSchema } from './InputModifier.gen';\nimport { LightSourceSchema } from './LightSource.gen';\nimport { MainCameraSchema } from './MainCamera.gen';\nimport { MaterialSchema } from './Material.gen';\nimport { MeshColliderSchema } from './MeshCollider.gen';\nimport { MeshRendererSchema } from './MeshRenderer.gen';\nimport { NftShapeSchema } from './NftShape.gen';\nimport { PlayerIdentityDataSchema } from './PlayerIdentityData.gen';\nimport { PointerEventsSchema } from './PointerEvents.gen';\nimport { PointerEventsResultSchema } from './PointerEventsResult.gen';\nimport { PointerLockSchema } from './PointerLock.gen';\nimport { PrimaryPointerInfoSchema } from './PrimaryPointerInfo.gen';\nimport { RaycastSchema } from './Raycast.gen';\nimport { RaycastResultSchema } from './RaycastResult.gen';\nimport { RealmInfoSchema } from './RealmInfo.gen';\nimport { SkyboxTimeSchema } from './SkyboxTime.gen';\nimport { TextShapeSchema } from './TextShape.gen';\nimport { TriggerAreaSchema } from './TriggerArea.gen';\nimport { TriggerAreaResultSchema } from './TriggerAreaResult.gen';\nimport { TweenSchema } from './Tween.gen';\nimport { TweenSequenceSchema } from './TweenSequence.gen';\nimport { TweenStateSchema } from './TweenState.gen';\nimport { UiBackgroundSchema } from './UiBackground.gen';\nimport { UiCanvasInformationSchema } from './UiCanvasInformation.gen';\nimport { UiDropdownSchema } from './UiDropdown.gen';\nimport { UiDropdownResultSchema } from './UiDropdownResult.gen';\nimport { UiInputSchema } from './UiInput.gen';\nimport { UiInputResultSchema } from './UiInputResult.gen';\nimport { UiTextSchema } from './UiText.gen';\nimport { UiTransformSchema } from './UiTransform.gen';\nimport { VideoEventSchema } from './VideoEvent.gen';\nimport { VideoPlayerSchema } from './VideoPlayer.gen';\nimport { VirtualCameraSchema } from './VirtualCamera.gen';\nimport { VisibilityComponentSchema } from './VisibilityComponent.gen';\nexport * from './pb/decentraland/sdk/components/animator.gen';\nexport * from './pb/decentraland/sdk/components/audio_event.gen';\nexport * from './pb/decentraland/sdk/components/audio_source.gen';\nexport * from './pb/decentraland/sdk/components/audio_stream.gen';\nexport * from './pb/decentraland/sdk/components/avatar_attach.gen';\nexport * from './pb/decentraland/sdk/components/avatar_base.gen';\nexport * from './pb/decentraland/sdk/components/avatar_emote_command.gen';\nexport * from './pb/decentraland/sdk/components/avatar_equipped_data.gen';\nexport * from './pb/decentraland/sdk/components/avatar_modifier_area.gen';\nexport * from './pb/decentraland/sdk/components/avatar_shape.gen';\nexport * from './pb/decentraland/sdk/components/billboard.gen';\nexport * from './pb/decentraland/sdk/components/camera_mode.gen';\nexport * from './pb/decentraland/sdk/components/camera_mode_area.gen';\nexport * from './pb/decentraland/sdk/components/engine_info.gen';\nexport * from './pb/decentraland/sdk/components/gltf_container.gen';\nexport * from './pb/decentraland/sdk/components/gltf_container_loading_state.gen';\nexport * from './pb/decentraland/sdk/components/gltf_node_modifiers.gen';\nexport * from './pb/decentraland/sdk/components/input_modifier.gen';\nexport * from './pb/decentraland/sdk/components/light_source.gen';\nexport * from './pb/decentraland/sdk/components/main_camera.gen';\nexport * from './pb/decentraland/sdk/components/material.gen';\nexport * from './pb/decentraland/sdk/components/mesh_collider.gen';\nexport * from './pb/decentraland/sdk/components/mesh_renderer.gen';\nexport * from './pb/decentraland/sdk/components/nft_shape.gen';\nexport * from './pb/decentraland/sdk/components/player_identity_data.gen';\nexport * from './pb/decentraland/sdk/components/pointer_events.gen';\nexport * from './pb/decentraland/sdk/components/pointer_events_result.gen';\nexport * from './pb/decentraland/sdk/components/pointer_lock.gen';\nexport * from './pb/decentraland/sdk/components/primary_pointer_info.gen';\nexport * from './pb/decentraland/sdk/components/raycast.gen';\nexport * from './pb/decentraland/sdk/components/raycast_result.gen';\nexport * from './pb/decentraland/sdk/components/realm_info.gen';\nexport * from './pb/decentraland/sdk/components/skybox_time.gen';\nexport * from './pb/decentraland/sdk/components/text_shape.gen';\nexport * from './pb/decentraland/sdk/components/trigger_area.gen';\nexport * from './pb/decentraland/sdk/components/trigger_area_result.gen';\nexport * from './pb/decentraland/sdk/components/tween.gen';\nexport * from './pb/decentraland/sdk/components/tween_sequence.gen';\nexport * from './pb/decentraland/sdk/components/tween_state.gen';\nexport * from './pb/decentraland/sdk/components/ui_background.gen';\nexport * from './pb/decentraland/sdk/components/ui_canvas_information.gen';\nexport * from './pb/decentraland/sdk/components/ui_dropdown.gen';\nexport * from './pb/decentraland/sdk/components/ui_dropdown_result.gen';\nexport * from './pb/decentraland/sdk/components/ui_input.gen';\nexport * from './pb/decentraland/sdk/components/ui_input_result.gen';\nexport * from './pb/decentraland/sdk/components/ui_text.gen';\nexport * from './pb/decentraland/sdk/components/ui_transform.gen';\nexport * from './pb/decentraland/sdk/components/video_event.gen';\nexport * from './pb/decentraland/sdk/components/video_player.gen';\nexport * from './pb/decentraland/sdk/components/virtual_camera.gen';\nexport * from './pb/decentraland/sdk/components/visibility_component.gen';\n/** @public */ export const Animator = engine => \n/* @__PURE__ */ engine.defineComponentFromSchema(\"core::Animator\", AnimatorSchema);\n/** @public */ export const AudioEvent = (engine) => /* @__PURE__ */ engine.defineValueSetComponentFromSchema(\"core::AudioEvent\", AudioEventSchema, {\n timestampFunction: (t) => t.timestamp,\n maxElements: 100\n});\n/** @public */ export const AudioSource = engine => \n/* @__PURE__ */ engine.defineComponentFromSchema(\"core::AudioSource\", AudioSourceSchema);\n/** @public */ export const AudioStream = engine => \n/* @__PURE__ */ engine.defineComponentFromSchema(\"core::AudioStream\", AudioStreamSchema);\n/** @public */ export const AvatarAttach = engine => \n/* @__PURE__ */ engine.defineComponentFromSchema(\"core::AvatarAttach\", AvatarAttachSchema);\n/** @public */ export const AvatarBase = engine => \n/* @__PURE__ */ engine.defineComponentFromSchema(\"core::AvatarBase\", AvatarBaseSchema);\n/** @public */ export const AvatarEmoteCommand = (engine) => /* @__PURE__ */ engine.defineValueSetComponentFromSchema(\"core::AvatarEmoteCommand\", AvatarEmoteCommandSchema, {\n timestampFunction: (t) => t.timestamp,\n maxElements: 100\n});\n/** @public */ export const AvatarEquippedData = engine => \n/* @__PURE__ */ engine.defineComponentFromSchema(\"core::AvatarEquippedData\", AvatarEquippedDataSchema);\n/** @public */ export const AvatarModifierArea = engine => \n/* @__PURE__ */ engine.defineComponentFromSchema(\"core::AvatarModifierArea\", AvatarModifierAreaSchema);\n/** @public */ export const AvatarShape = engine => \n/* @__PURE__ */ engine.defineComponentFromSchema(\"core::AvatarShape\", AvatarShapeSchema);\n/** @public */ export const Billboard = engine => \n/* @__PURE__ */ engine.defineComponentFromSchema(\"core::Billboard\", BillboardSchema);\n/** @public */ export const CameraMode = engine => \n/* @__PURE__ */ engine.defineComponentFromSchema(\"core::CameraMode\", CameraModeSchema);\n/** @public */ export const CameraModeArea = engine => \n/* @__PURE__ */ engine.defineComponentFromSchema(\"core::CameraModeArea\", CameraModeAreaSchema);\n/** @public */ export const EngineInfo = engine => \n/* @__PURE__ */ engine.defineComponentFromSchema(\"core::EngineInfo\", EngineInfoSchema);\n/** @public */ export const GltfContainer = engine => \n/* @__PURE__ */ engine.defineComponentFromSchema(\"core::GltfContainer\", GltfContainerSchema);\n/** @public */ export const GltfContainerLoadingState = engine => \n/* @__PURE__ */ engine.defineComponentFromSchema(\"core::GltfContainerLoadingState\", GltfContainerLoadingStateSchema);\n/** @public */ export const GltfNodeModifiers = engine => \n/* @__PURE__ */ engine.defineComponentFromSchema(\"core::GltfNodeModifiers\", GltfNodeModifiersSchema);\n/** @public */ export const InputModifier = engine => \n/* @__PURE__ */ engine.defineComponentFromSchema(\"core::InputModifier\", InputModifierSchema);\n/** @public */ export const LightSource = engine => \n/* @__PURE__ */ engine.defineComponentFromSchema(\"core::LightSource\", LightSourceSchema);\n/** @public */ export const MainCamera = engine => \n/* @__PURE__ */ engine.defineComponentFromSchema(\"core::MainCamera\", MainCameraSchema);\n/** @public */ export const Material = engine => \n/* @__PURE__ */ engine.defineComponentFromSchema(\"core::Material\", MaterialSchema);\n/** @public */ export const MeshCollider = engine => \n/* @__PURE__ */ engine.defineComponentFromSchema(\"core::MeshCollider\", MeshColliderSchema);\n/** @public */ export const MeshRenderer = engine => \n/* @__PURE__ */ engine.defineComponentFromSchema(\"core::MeshRenderer\", MeshRendererSchema);\n/** @public */ export const NftShape = engine => \n/* @__PURE__ */ engine.defineComponentFromSchema(\"core::NftShape\", NftShapeSchema);\n/** @public */ export const PlayerIdentityData = engine => \n/* @__PURE__ */ engine.defineComponentFromSchema(\"core::PlayerIdentityData\", PlayerIdentityDataSchema);\n/** @public */ export const PointerEvents = engine => \n/* @__PURE__ */ engine.defineComponentFromSchema(\"core::PointerEvents\", PointerEventsSchema);\n/** @public */ export const PointerEventsResult = (engine) => /* @__PURE__ */ engine.defineValueSetComponentFromSchema(\"core::PointerEventsResult\", PointerEventsResultSchema, {\n timestampFunction: (t) => t.timestamp,\n maxElements: 100\n});\n/** @public */ export const PointerLock = engine => \n/* @__PURE__ */ engine.defineComponentFromSchema(\"core::PointerLock\", PointerLockSchema);\n/** @public */ export const PrimaryPointerInfo = engine => \n/* @__PURE__ */ engine.defineComponentFromSchema(\"core::PrimaryPointerInfo\", PrimaryPointerInfoSchema);\n/** @public */ export const Raycast = engine => \n/* @__PURE__ */ engine.defineComponentFromSchema(\"core::Raycast\", RaycastSchema);\n/** @public */ export const RaycastResult = engine => \n/* @__PURE__ */ engine.defineComponentFromSchema(\"core::RaycastResult\", RaycastResultSchema);\n/** @public */ export const RealmInfo = engine => \n/* @__PURE__ */ engine.defineComponentFromSchema(\"core::RealmInfo\", RealmInfoSchema);\n/** @public */ export const SkyboxTime = engine => \n/* @__PURE__ */ engine.defineComponentFromSchema(\"core::SkyboxTime\", SkyboxTimeSchema);\n/** @public */ export const TextShape = engine => \n/* @__PURE__ */ engine.defineComponentFromSchema(\"core::TextShape\", TextShapeSchema);\n/** @public */ export const TriggerArea = engine => \n/* @__PURE__ */ engine.defineComponentFromSchema(\"core::TriggerArea\", TriggerAreaSchema);\n/** @public */ export const TriggerAreaResult = (engine) => /* @__PURE__ */ engine.defineValueSetComponentFromSchema(\"core::TriggerAreaResult\", TriggerAreaResultSchema, {\n timestampFunction: (t) => t.timestamp,\n maxElements: 100\n});\n/** @public */ export const Tween = engine => \n/* @__PURE__ */ engine.defineComponentFromSchema(\"core::Tween\", TweenSchema);\n/** @public */ export const TweenSequence = engine => \n/* @__PURE__ */ engine.defineComponentFromSchema(\"core::TweenSequence\", TweenSequenceSchema);\n/** @public */ export const TweenState = engine => \n/* @__PURE__ */ engine.defineComponentFromSchema(\"core::TweenState\", TweenStateSchema);\n/** @public */ export const UiBackground = engine => \n/* @__PURE__ */ engine.defineComponentFromSchema(\"core::UiBackground\", UiBackgroundSchema);\n/** @public */ export const UiCanvasInformation = engine => \n/* @__PURE__ */ engine.defineComponentFromSchema(\"core::UiCanvasInformation\", UiCanvasInformationSchema);\n/** @public */ export const UiDropdown = engine => \n/* @__PURE__ */ engine.defineComponentFromSchema(\"core::UiDropdown\", UiDropdownSchema);\n/** @public */ export const UiDropdownResult = engine => \n/* @__PURE__ */ engine.defineComponentFromSchema(\"core::UiDropdownResult\", UiDropdownResultSchema);\n/** @public */ export const UiInput = engine => \n/* @__PURE__ */ engine.defineComponentFromSchema(\"core::UiInput\", UiInputSchema);\n/** @public */ export const UiInputResult = engine => \n/* @__PURE__ */ engine.defineComponentFromSchema(\"core::UiInputResult\", UiInputResultSchema);\n/** @public */ export const UiText = engine => \n/* @__PURE__ */ engine.defineComponentFromSchema(\"core::UiText\", UiTextSchema);\n/** @public */ export const UiTransform = engine => \n/* @__PURE__ */ engine.defineComponentFromSchema(\"core::UiTransform\", UiTransformSchema);\n/** @public */ export const VideoEvent = (engine) => /* @__PURE__ */ engine.defineValueSetComponentFromSchema(\"core::VideoEvent\", VideoEventSchema, {\n timestampFunction: (t) => t.timestamp,\n maxElements: 100\n});\n/** @public */ export const VideoPlayer = engine => \n/* @__PURE__ */ engine.defineComponentFromSchema(\"core::VideoPlayer\", VideoPlayerSchema);\n/** @public */ export const VirtualCamera = engine => \n/* @__PURE__ */ engine.defineComponentFromSchema(\"core::VirtualCamera\", VirtualCameraSchema);\n/** @public */ export const VisibilityComponent = engine => \n/* @__PURE__ */ engine.defineComponentFromSchema(\"core::VisibilityComponent\", VisibilityComponentSchema);\n/** public */\nexport const componentDefinitionByName = /* @__PURE__ */ {\n \"core::Animator\": Animator,\n \"core::AudioEvent\": AudioEvent,\n \"core::AudioSource\": AudioSource,\n \"core::AudioStream\": AudioStream,\n \"core::AvatarAttach\": AvatarAttach,\n \"core::AvatarBase\": AvatarBase,\n \"core::AvatarEmoteCommand\": AvatarEmoteCommand,\n \"core::AvatarEquippedData\": AvatarEquippedData,\n \"core::AvatarModifierArea\": AvatarModifierArea,\n \"core::AvatarShape\": AvatarShape,\n \"core::Billboard\": Billboard,\n \"core::CameraMode\": CameraMode,\n \"core::CameraModeArea\": CameraModeArea,\n \"core::EngineInfo\": EngineInfo,\n \"core::GltfContainer\": GltfContainer,\n \"core::GltfContainerLoadingState\": GltfContainerLoadingState,\n \"core::GltfNodeModifiers\": GltfNodeModifiers,\n \"core::InputModifier\": InputModifier,\n \"core::LightSource\": LightSource,\n \"core::MainCamera\": MainCamera,\n \"core::Material\": Material,\n \"core::MeshCollider\": MeshCollider,\n \"core::MeshRenderer\": MeshRenderer,\n \"core::NftShape\": NftShape,\n \"core::PlayerIdentityData\": PlayerIdentityData,\n \"core::PointerEvents\": PointerEvents,\n \"core::PointerEventsResult\": PointerEventsResult,\n \"core::PointerLock\": PointerLock,\n \"core::PrimaryPointerInfo\": PrimaryPointerInfo,\n \"core::Raycast\": Raycast,\n \"core::RaycastResult\": RaycastResult,\n \"core::RealmInfo\": RealmInfo,\n \"core::SkyboxTime\": SkyboxTime,\n \"core::TextShape\": TextShape,\n \"core::TriggerArea\": TriggerArea,\n \"core::TriggerAreaResult\": TriggerAreaResult,\n \"core::Tween\": Tween,\n \"core::TweenSequence\": TweenSequence,\n \"core::TweenState\": TweenState,\n \"core::UiBackground\": UiBackground,\n \"core::UiCanvasInformation\": UiCanvasInformation,\n \"core::UiDropdown\": UiDropdown,\n \"core::UiDropdownResult\": UiDropdownResult,\n \"core::UiInput\": UiInput,\n \"core::UiInputResult\": UiInputResult,\n \"core::UiText\": UiText,\n \"core::UiTransform\": UiTransform,\n \"core::VideoEvent\": VideoEvent,\n \"core::VideoPlayer\": VideoPlayer,\n \"core::VirtualCamera\": VirtualCamera,\n \"core::VisibilityComponent\": VisibilityComponent,\n};\n", "import { Animator } from '../generated/index.gen';\nexport function defineAnimatorComponent(engine) {\n const theComponent = Animator(engine);\n /**\n * @returns The tuple [animator, clip]\n */\n function getClipAndAnimator(entity, clipName) {\n const anim = theComponent.getMutableOrNull(entity);\n if (!anim)\n return [null, null];\n const state = anim.states.find((item) => item.clip === clipName);\n if (!state)\n return [anim, null];\n return [anim, state];\n }\n return {\n ...theComponent,\n getClipOrNull(entity, clipName) {\n const [_, state] = getClipAndAnimator(entity, clipName);\n return state;\n },\n getClip(entity, clipName) {\n const [animator, state] = getClipAndAnimator(entity, clipName);\n if (!animator) {\n throw new Error(`There is no Animator found in the entity ${entity}`);\n }\n if (!state) {\n throw new Error(`The Animator component of ${entity} has no the state ${clipName}`);\n }\n return state;\n },\n playSingleAnimation(entity, clipName, shouldReset = true) {\n const [animator, state] = getClipAndAnimator(entity, clipName);\n if (!animator || !state)\n return false;\n // Reset all other animations\n for (const state of animator.states) {\n state.playing = false;\n state.shouldReset = true;\n }\n state.playing = true;\n state.shouldReset = shouldReset;\n return true;\n },\n stopAllAnimations(entity, resetCursor = true) {\n // Get the mutable to modifying\n const animator = theComponent.getMutableOrNull(entity);\n if (!animator)\n return false;\n // Reset all other animations\n for (const state of animator.states) {\n state.playing = false;\n state.shouldReset = resetCursor;\n }\n return true;\n }\n };\n}\n", "import { AudioSource } from '../generated/index.gen';\nexport function defineAudioSourceComponent(engine) {\n const theComponent = AudioSource(engine);\n return {\n ...theComponent,\n playSound(entity, src, resetCursor = true) {\n // Get the mutable to modify\n const audioSource = theComponent.getMutableOrNull(entity);\n if (!audioSource)\n return false;\n audioSource.audioClipUrl = src;\n audioSource.playing = true;\n audioSource.currentTime = resetCursor ? 0 : audioSource.currentTime;\n return true;\n },\n stopSound(entity, resetCursor = true) {\n // Get the mutable to modify\n const audioSource = theComponent.getMutableOrNull(entity);\n if (!audioSource)\n return false;\n audioSource.playing = false;\n audioSource.currentTime = resetCursor ? 0 : audioSource.currentTime;\n return true;\n }\n };\n}\n", "import { Material } from '../generated/index.gen';\nconst TextureHelper = {\n Common(texture) {\n return {\n tex: {\n $case: 'texture',\n texture\n }\n };\n },\n Avatar(avatarTexture) {\n return {\n tex: {\n $case: 'avatarTexture',\n avatarTexture\n }\n };\n },\n Video(videoTexture) {\n return {\n tex: {\n $case: 'videoTexture',\n videoTexture\n }\n };\n }\n};\nexport function defineMaterialComponent(engine) {\n const theComponent = Material(engine);\n return {\n ...theComponent,\n Texture: TextureHelper,\n setBasicMaterial(entity, material) {\n theComponent.createOrReplace(entity, {\n material: {\n $case: 'unlit',\n unlit: material\n }\n });\n },\n setPbrMaterial(entity, material) {\n theComponent.createOrReplace(entity, {\n material: {\n $case: 'pbr',\n pbr: material\n }\n });\n }\n };\n}\n", "import { MeshCollider } from '../generated/index.gen';\nexport function defineMeshColliderComponent(engine) {\n const theComponent = MeshCollider(engine);\n function getCollisionMask(layers) {\n if (Array.isArray(layers)) {\n return layers.map((item) => item).reduce((prev, item) => prev | item, 0);\n }\n else if (layers) {\n return layers;\n }\n }\n return {\n ...theComponent,\n setBox(entity, colliderLayers) {\n theComponent.createOrReplace(entity, {\n mesh: { $case: 'box', box: {} },\n collisionMask: getCollisionMask(colliderLayers)\n });\n },\n setPlane(entity, colliderLayers) {\n theComponent.createOrReplace(entity, {\n mesh: { $case: 'plane', plane: {} },\n collisionMask: getCollisionMask(colliderLayers)\n });\n },\n setCylinder(entity, radiusBottom, radiusTop, colliderLayers) {\n theComponent.createOrReplace(entity, {\n mesh: { $case: 'cylinder', cylinder: { radiusBottom, radiusTop } },\n collisionMask: getCollisionMask(colliderLayers)\n });\n },\n setSphere(entity, colliderLayers) {\n theComponent.createOrReplace(entity, {\n mesh: { $case: 'sphere', sphere: {} },\n collisionMask: getCollisionMask(colliderLayers)\n });\n }\n };\n}\n", "import { MeshRenderer } from '../generated/index.gen';\nexport function defineMeshRendererComponent(engine) {\n const theComponent = MeshRenderer(engine);\n return {\n ...theComponent,\n setBox(entity, uvs) {\n theComponent.createOrReplace(entity, {\n mesh: { $case: 'box', box: { uvs: uvs || [] } }\n });\n },\n setPlane(entity, uvs) {\n theComponent.createOrReplace(entity, {\n mesh: { $case: 'plane', plane: { uvs: uvs || [] } }\n });\n },\n setCylinder(entity, radiusBottom, radiusTop) {\n theComponent.createOrReplace(entity, {\n mesh: { $case: 'cylinder', cylinder: { radiusBottom, radiusTop } }\n });\n },\n setSphere(entity) {\n theComponent.createOrReplace(entity, {\n mesh: { $case: 'sphere', sphere: {} }\n });\n }\n };\n}\n", "import { Tween } from '../generated/index.gen';\nconst TweenHelper = {\n Move(move) {\n return {\n $case: 'move',\n move\n };\n },\n Rotate(rotate) {\n return {\n $case: 'rotate',\n rotate\n };\n },\n Scale(scale) {\n return {\n $case: 'scale',\n scale\n };\n },\n TextureMove(textureMove) {\n return {\n $case: 'textureMove',\n textureMove\n };\n }\n};\nexport function defineTweenComponent(engine) {\n const theComponent = Tween(engine);\n return {\n ...theComponent,\n Mode: TweenHelper\n };\n}\n", "/**\n * @internal\n */\nexport const IArray = (type) => {\n return {\n serialize(value, builder) {\n builder.writeUint32(value.length);\n for (const item of value) {\n type.serialize(item, builder);\n }\n },\n deserialize(reader) {\n const newArray = [];\n const length = reader.readUint32();\n for (let index = 0; index < length; index++) {\n newArray.push(type.deserialize(reader));\n }\n return newArray;\n },\n create() {\n return [];\n },\n jsonSchema: {\n type: 'array',\n items: type.jsonSchema,\n serializationType: 'array'\n }\n };\n};\n", "/**\n * @internal\n */\nexport const Bool = {\n serialize(value, builder) {\n builder.writeInt8(value ? 1 : 0);\n },\n deserialize(reader) {\n return reader.readInt8() === 1;\n },\n create() {\n return false;\n },\n jsonSchema: {\n type: 'boolean',\n serializationType: 'boolean'\n }\n};\n", "/**\n * @internal\n */\nexport const Int64 = {\n serialize(value, builder) {\n builder.writeInt64(BigInt(value));\n },\n deserialize(reader) {\n return Number(reader.readInt64());\n },\n create() {\n return 0;\n },\n jsonSchema: {\n type: 'integer',\n serializationType: 'int64'\n }\n};\n/**\n * @internal\n */\nexport const Int32 = {\n serialize(value, builder) {\n builder.writeInt32(value);\n },\n deserialize(reader) {\n return reader.readInt32();\n },\n create() {\n return 0;\n },\n jsonSchema: {\n type: 'integer',\n serializationType: 'int32'\n }\n};\n/**\n * @public\n */\nexport const Int16 = {\n serialize(value, builder) {\n builder.writeInt16(value);\n },\n deserialize(reader) {\n return reader.readInt16();\n },\n create() {\n return 0;\n },\n jsonSchema: {\n type: 'integer',\n serializationType: 'int16'\n }\n};\n/**\n * @public\n */\nexport const Int8 = {\n serialize(value, builder) {\n builder.writeInt8(value);\n },\n deserialize(reader) {\n return reader.readInt8();\n },\n create() {\n return 0;\n },\n jsonSchema: {\n type: 'integer',\n serializationType: 'int8'\n }\n};\n", "/**\n * @internal\n */\nexport const FlatString = {\n serialize(value, builder) {\n builder.writeUtf8String(value);\n },\n deserialize(reader) {\n return reader.readUtf8String();\n },\n create() {\n return '';\n },\n jsonSchema: {\n type: 'string',\n serializationType: 'utf8-string'\n }\n};\n/**\n * @internal\n */\nexport const EcsString = FlatString;\n", "import { Int32 } from './Integer';\nimport { FlatString } from './String';\n/**\n * Validates the enum to ensure all member values are numbers and within the range of Int32.\n * @param enumValue The enum to be checked.\n * @throws If any member value is not a number or is outside the range of Int32.\n */\nfunction validateMemberValuesAreNumbersAndInRangeInt32(enumValue) {\n const MIN_VALUE = -(2 ** 31), MAX_VALUE = 2 ** 31 - 1;\n let valueCount = 0, totalCount = 0;\n for (const key in enumValue) {\n if (typeof enumValue[key] === 'number') {\n if (enumValue[key] > MAX_VALUE || enumValue[key] < MIN_VALUE) {\n throw new Error(`Enum member values must be numbers within the range of ${MIN_VALUE} to ${MAX_VALUE}.`);\n }\n valueCount++;\n }\n totalCount++;\n }\n if (totalCount !== valueCount * 2) {\n throw new Error('All enum member values must be of numeric type.');\n }\n}\n/**\n * Validates the enum to ensure all member values are of string type.\n * @param enumValue The enum to be checked.\n * @throws If any member value is not of string type.\n */\nfunction validateMemberValuesAreStrings(enumValue) {\n for (const key in enumValue) {\n if (typeof enumValue[key] !== 'string') {\n throw new Error('All enum member values must be of string type.');\n }\n }\n}\n/**\n * @internal\n */\nexport const IntEnumReflectionType = 'enum-int';\n/**\n * @internal\n */\nexport const IntEnum = (enumObject, defaultValue) => {\n validateMemberValuesAreNumbersAndInRangeInt32(enumObject);\n return {\n serialize(value, builder) {\n Int32.serialize(value, builder);\n },\n deserialize(reader) {\n return Int32.deserialize(reader);\n },\n create() {\n return defaultValue;\n },\n jsonSchema: {\n // JSON-schema\n type: 'integer',\n enum: Object.values(enumObject).filter((item) => Number.isInteger(item)),\n default: defaultValue,\n // @dcl/ecs Schema Spec\n serializationType: IntEnumReflectionType,\n enumObject\n }\n };\n};\n/**\n * @internal\n */\nexport const StringEnumReflectionType = 'enum-string';\n/**\n * @internal\n */\nexport const StringEnum = (enumObject, defaultValue) => {\n validateMemberValuesAreStrings(enumObject);\n // String enum has the exact mapping from key (our reference in code) to values\n return {\n serialize(value, builder) {\n FlatString.serialize(value, builder);\n },\n deserialize(reader) {\n return FlatString.deserialize(reader);\n },\n create() {\n return defaultValue;\n },\n jsonSchema: {\n // JSON-schema\n type: 'string',\n enum: Object.values(enumObject),\n default: defaultValue,\n // @dcl/ecs Schema Spec\n serializationType: StringEnumReflectionType,\n enumObject\n }\n };\n};\n", "/**\n * @internal\n */\nexport const Float32 = {\n serialize(value, builder) {\n builder.writeFloat32(value);\n },\n deserialize(reader) {\n return reader.readFloat32();\n },\n create() {\n return 0.0;\n },\n jsonSchema: {\n type: 'number',\n serializationType: 'float32'\n }\n};\n/**\n * @internal\n */\nexport const Float64 = {\n serialize(value, builder) {\n builder.writeFloat64(value);\n },\n deserialize(reader) {\n return reader.readFloat64();\n },\n create() {\n return 0.0;\n },\n jsonSchema: {\n type: 'number',\n serializationType: 'float64'\n }\n};\n", "/**\n * @internal\n */\nexport const Color3Schema = {\n serialize(value, builder) {\n builder.writeFloat32(value.r);\n builder.writeFloat32(value.g);\n builder.writeFloat32(value.b);\n },\n deserialize(reader) {\n return {\n r: reader.readFloat32(),\n g: reader.readFloat32(),\n b: reader.readFloat32()\n };\n },\n create() {\n return { r: 0, g: 0, b: 0 };\n },\n jsonSchema: {\n type: 'object',\n properties: {\n r: { type: 'number' },\n g: { type: 'number' },\n b: { type: 'number' }\n },\n serializationType: 'color3'\n }\n};\n", "/**\n * @internal\n */\nexport const Color4Schema = {\n serialize(value, builder) {\n builder.writeFloat32(value.r);\n builder.writeFloat32(value.g);\n builder.writeFloat32(value.b);\n builder.writeFloat32(value.a);\n },\n deserialize(reader) {\n return {\n r: reader.readFloat32(),\n g: reader.readFloat32(),\n b: reader.readFloat32(),\n a: reader.readFloat32()\n };\n },\n create() {\n return { r: 0, g: 0, b: 0, a: 0 };\n },\n jsonSchema: {\n type: 'object',\n properties: {\n r: { type: 'number' },\n g: { type: 'number' },\n b: { type: 'number' },\n a: { type: 'number' }\n },\n serializationType: 'color4'\n }\n};\n", "/**\n * @internal\n */\nexport const EntitySchema = {\n serialize(value, builder) {\n builder.writeInt32(value);\n },\n deserialize(reader) {\n return reader.readInt32();\n },\n create() {\n return 0;\n },\n jsonSchema: {\n type: 'integer',\n serializationType: 'entity'\n }\n};\n", "/**\n * @internal\n */\nexport const QuaternionSchema = {\n serialize(value, builder) {\n builder.writeFloat32(value.x);\n builder.writeFloat32(value.y);\n builder.writeFloat32(value.z);\n builder.writeFloat32(value.w);\n },\n deserialize(reader) {\n return {\n x: reader.readFloat32(),\n y: reader.readFloat32(),\n z: reader.readFloat32(),\n w: reader.readFloat32()\n };\n },\n create() {\n return { x: 0, y: 0, z: 0, w: 0 };\n },\n jsonSchema: {\n type: 'object',\n properties: {\n x: { type: 'number' },\n y: { type: 'number' },\n z: { type: 'number' },\n w: { type: 'number' }\n },\n serializationType: 'quaternion'\n }\n};\n", "/**\n * @internal\n */\nexport const Vector3Schema = {\n serialize(value, builder) {\n builder.writeFloat32(value.x);\n builder.writeFloat32(value.y);\n builder.writeFloat32(value.z);\n },\n deserialize(reader) {\n return {\n x: reader.readFloat32(),\n y: reader.readFloat32(),\n z: reader.readFloat32()\n };\n },\n create() {\n return { x: 0, y: 0, z: 0 };\n },\n jsonSchema: {\n type: 'object',\n properties: {\n x: { type: 'number' },\n y: { type: 'number' },\n z: { type: 'number' },\n w: { type: 'number' }\n },\n serializationType: 'vector3'\n }\n};\n", "/**\n * @internal\n */\nexport const IMap = (spec, defaultValue) => {\n const specReflection = Object.keys(spec).reduce((specReflection, currentKey) => {\n specReflection[currentKey] = spec[currentKey].jsonSchema;\n return specReflection;\n }, {});\n return {\n serialize(value, builder) {\n for (const key in spec) {\n spec[key].serialize(value[key], builder);\n }\n },\n deserialize(reader) {\n const newValue = {};\n for (const key in spec) {\n ;\n newValue[key] = spec[key].deserialize(reader);\n }\n return newValue;\n },\n create() {\n const newValue = {};\n for (const key in spec) {\n ;\n newValue[key] = spec[key].create();\n }\n return { ...newValue, ...defaultValue };\n },\n extend: (base) => {\n const newValue = {};\n for (const key in spec) {\n ;\n newValue[key] = spec[key].create();\n }\n return { ...newValue, ...defaultValue, ...base };\n },\n jsonSchema: {\n type: 'object',\n properties: specReflection,\n serializationType: 'map'\n }\n };\n};\n", "/**\n * @internal\n */\nexport const IOptional = (spec) => {\n return {\n serialize(value, builder) {\n if (value) {\n builder.writeInt8(1);\n spec.serialize(value, builder);\n }\n else {\n builder.writeInt8(0);\n }\n },\n deserialize(reader) {\n const exists = reader.readInt8();\n if (exists) {\n return spec.deserialize(reader);\n }\n },\n create() {\n return undefined;\n },\n jsonSchema: {\n type: spec.jsonSchema.type,\n serializationType: 'optional',\n optionalJsonSchema: spec.jsonSchema\n }\n };\n};\n", "export const IOneOf = (specs) => {\n const specKeys = Object.keys(specs);\n const keyToIndex = specKeys.reduce((dict, key, index) => {\n dict[key] = index;\n return dict;\n }, {});\n const specReflection = specKeys.reduce((specReflection, currentKey) => {\n specReflection[currentKey] = specs[currentKey].jsonSchema;\n return specReflection;\n }, {});\n return {\n serialize({ $case, value }, builder) {\n const _value = keyToIndex[$case.toString()] + 1;\n builder.writeUint8(_value);\n specs[$case].serialize(value, builder);\n },\n deserialize(reader) {\n const $case = specKeys[reader.readInt8() - 1];\n const value = specs[$case].deserialize(reader);\n return { $case, value };\n },\n create() {\n return {};\n },\n jsonSchema: {\n type: 'object',\n properties: specReflection,\n serializationType: 'one-of'\n }\n };\n};\n", "export const isSchemaType = (value, types) => types.includes(value.serializationType);\nexport const isOneOfJsonSchema = (type) => isSchemaType(type, ['one-of']);\nexport const getUnknownSchema = () => ({\n type: { type: 'object', serializationType: 'unknown' },\n value: undefined\n});\nexport const isCompoundType = (type) => isSchemaType(type, ['array', 'map']);\nexport const getTypeAndValue = (properties, value, key) => {\n const type = properties[key];\n const valueKey = value[key];\n if (isOneOfJsonSchema(type)) {\n const typedMapValue = valueKey;\n if (!typedMapValue.$case)\n return getUnknownSchema();\n const propType = type.properties[typedMapValue.$case];\n // transform { $case: string; value: unknown } => { [$case]: value }\n if (isCompoundType(propType))\n value[key] = { [typedMapValue.$case]: typedMapValue.value };\n return { type: propType, value: typedMapValue.value };\n }\n return { type, value: valueKey };\n};\n", "import { IArray } from '../Array';\nimport { Bool } from '../basic/Boolean';\nimport { IntEnum, StringEnum } from '../basic/Enum';\nimport { Float32, Float64 } from '../basic/Float';\nimport { Int16, Int32, Int64, Int8 } from '../basic/Integer';\nimport { EcsString } from '../basic/String';\nimport { Color3Schema } from '../custom/Color3';\nimport { Color4Schema } from '../custom/Color4';\nimport { EntitySchema } from '../custom/Entity';\nimport { QuaternionSchema } from '../custom/Quaternion';\nimport { Vector3Schema } from '../custom/Vector3';\nimport { IMap } from '../Map';\nimport { IOneOf } from '../OneOf';\nimport { IOptional } from '../Optional';\nimport { getTypeAndValue, isCompoundType } from './utils';\nconst primitiveSchemas = {\n [Bool.jsonSchema.serializationType]: Bool,\n [EcsString.jsonSchema.serializationType]: EcsString,\n [Float32.jsonSchema.serializationType]: Float32,\n [Float64.jsonSchema.serializationType]: Float64,\n [Int8.jsonSchema.serializationType]: Int8,\n [Int16.jsonSchema.serializationType]: Int16,\n [Int32.jsonSchema.serializationType]: Int32,\n [Int64.jsonSchema.serializationType]: Int64,\n [Vector3Schema.jsonSchema.serializationType]: Vector3Schema,\n [QuaternionSchema.jsonSchema.serializationType]: QuaternionSchema,\n [Color3Schema.jsonSchema.serializationType]: Color3Schema,\n [Color4Schema.jsonSchema.serializationType]: Color4Schema,\n [EntitySchema.jsonSchema.serializationType]: EntitySchema\n};\n/**\n * Create an ISchema object from the json-schema\n * @param jsonSchema\n * @returns a ISchema or fail for unsupported json-schema\n */\nexport function jsonSchemaToSchema(jsonSchema) {\n if (primitiveSchemas[jsonSchema.serializationType]) {\n return primitiveSchemas[jsonSchema.serializationType];\n }\n if (jsonSchema.serializationType === 'map') {\n const mapJsonSchema = jsonSchema;\n const spec = {};\n for (const key in mapJsonSchema.properties) {\n spec[key] = jsonSchemaToSchema(mapJsonSchema.properties[key]);\n }\n return IMap(spec);\n }\n if (jsonSchema.serializationType === 'optional') {\n const withItemsJsonSchema = jsonSchema;\n return IOptional(jsonSchemaToSchema(withItemsJsonSchema.optionalJsonSchema));\n }\n if (jsonSchema.serializationType === 'array') {\n const withItemsJsonSchema = jsonSchema;\n return IArray(jsonSchemaToSchema(withItemsJsonSchema.items));\n }\n if (jsonSchema.serializationType === 'enum-int') {\n const enumJsonSchema = jsonSchema;\n return IntEnum(enumJsonSchema.enumObject, enumJsonSchema.default);\n }\n if (jsonSchema.serializationType === 'enum-string') {\n const enumJsonSchema = jsonSchema;\n return StringEnum(enumJsonSchema.enumObject, enumJsonSchema.default);\n }\n if (jsonSchema.serializationType === 'one-of') {\n const oneOfJsonSchema = jsonSchema;\n const spec = {};\n for (const key in oneOfJsonSchema.properties) {\n spec[key] = jsonSchemaToSchema(oneOfJsonSchema.properties[key]);\n }\n return IOneOf(spec);\n }\n throw new Error(`${jsonSchema.serializationType} is not supported as reverse schema generation.`);\n}\nexport function mutateValues(jsonSchema, value, mutateFn) {\n if (jsonSchema.serializationType === 'map') {\n const { properties } = jsonSchema;\n const typedValue = value;\n for (const key in properties) {\n const { type, value: mapValue } = getTypeAndValue(properties, typedValue, key);\n if (type.serializationType === 'unknown')\n continue;\n if (isCompoundType(type)) {\n mutateValues(type, mapValue, mutateFn);\n }\n else {\n const newValue = mutateFn(mapValue, type);\n if (newValue.changed) {\n typedValue[key] = newValue.value;\n }\n }\n }\n }\n else if (jsonSchema.serializationType === 'array') {\n const { items } = jsonSchema;\n const arrayValue = value;\n for (let i = 0, n = arrayValue.length; i < n; i++) {\n const { type, value } = getTypeAndValue({ items: items }, { items: arrayValue[i] }, 'items');\n if (isCompoundType(type)) {\n mutateValues(type, value, mutateFn);\n }\n else {\n const newValue = mutateFn(value, type);\n if (newValue.changed) {\n arrayValue[i] = newValue.value;\n }\n }\n }\n }\n}\n", "import { IArray } from './Array';\nimport { Bool } from './basic/Boolean';\nimport { IntEnum as IntEnumSchema, StringEnum as StringEnumSchema } from './basic/Enum';\nimport { Float32, Float64 } from './basic/Float';\nimport { Int16, Int32, Int8, Int64 as iInt64 } from './basic/Integer';\nimport { EcsString } from './basic/String';\nimport { Color3Schema } from './custom/Color3';\nimport { Color4Schema } from './custom/Color4';\nimport { EntitySchema } from './custom/Entity';\nimport { QuaternionSchema } from './custom/Quaternion';\nimport { Vector3Schema } from './custom/Vector3';\nimport { IMap } from './Map';\nimport { IOptional } from './Optional';\nimport { IOneOf } from './OneOf';\nimport { jsonSchemaToSchema, mutateValues } from './buildSchema';\n/**\n * @public\n */\nexport var Schemas;\n(function (Schemas) {\n /** @public */\n Schemas.Boolean = Bool;\n /** @public */\n Schemas.String = EcsString;\n /** @public */\n Schemas.Float = Float32;\n /** @public */\n Schemas.Double = Float64;\n /** @public */\n Schemas.Byte = Int8;\n /** @public */\n Schemas.Short = Int16;\n /** @public */\n Schemas.Int = Int32;\n /** @public */\n Schemas.Int64 = iInt64;\n /** @public */\n Schemas.Number = Float32;\n /** @public */\n Schemas.Vector3 = Vector3Schema;\n /** @public */\n Schemas.Quaternion = QuaternionSchema;\n /** @public */\n Schemas.Color3 = Color3Schema;\n /** @public */\n Schemas.Color4 = Color4Schema;\n /** @public */\n Schemas.Entity = EntitySchema;\n /** @public */\n Schemas.EnumNumber = IntEnumSchema;\n /** @public */\n Schemas.EnumString = StringEnumSchema;\n /** @public */\n Schemas.Array = IArray;\n /** @public */\n Schemas.Map = IMap;\n /** @public */\n Schemas.Optional = IOptional;\n /** @public */\n Schemas.OneOf = IOneOf;\n /**\n * @public Create an ISchema object from the json-schema\n * @param jsonSchema\n * @returns a ISchema or fail for unsupported json-schema\n */\n Schemas.fromJson = jsonSchemaToSchema;\n /**\n * @public\n *\n * Traverses and mutates values in a JSON schema-based structure, applying the given mutation function to each value.\n * The function is designed to work with nested maps and arrays, recursively processing each element.\n *\n * @param jsonSchema - The JSON schema object that describes the structure of the value.\n * It must have a serializationType of 'map', 'array', or other custom types like 'entity'.\n * @param value - The value to be mutated, which should conform to the provided JSON schema.\n * @param mutateFn - A function that takes a value and its corresponding valueType (JsonSchemaExtended) as arguments\n * and returns a tuple [boolean, any]. The boolean indicates whether the mutation should be applied,\n * and the second element is the mutated value.\n */\n Schemas.mutateNestedValues = mutateValues;\n})(Schemas || (Schemas = {}));\n", "import { Schemas } from '../../schemas';\nfunction defineNameComponent(engine) {\n const Name = engine.defineComponent('core-schema::Name', {\n value: Schemas.String\n });\n return Name;\n}\nexport default defineNameComponent;\n", "import { Schemas } from '../../schemas';\nfunction defineSyncComponents(engine) {\n const SyncComponents = engine.defineComponent('core-schema::Sync-Components', {\n componentIds: Schemas.Array(Schemas.Int64)\n });\n return SyncComponents;\n}\nexport default defineSyncComponents;\n", "import { Schemas } from '../../schemas';\nfunction defineNetworkEntityComponent(engine) {\n const EntityNetwork = engine.defineComponent('core-schema::Network-Entity', {\n networkId: Schemas.Int64,\n entityId: Schemas.Entity\n });\n return EntityNetwork;\n}\nexport default defineNetworkEntityComponent;\n", "import { Schemas } from '../../schemas';\nfunction defineNetworkParentComponent(engine) {\n const EntityNetwork = engine.defineComponent('core-schema::Network-Parent', {\n networkId: Schemas.Int64,\n entityId: Schemas.Entity\n });\n return EntityNetwork;\n}\nexport default defineNetworkParentComponent;\n", "/**\n * @internal\n */\nexport const COMPONENT_ID = 1;\n/** @internal */\nexport const TRANSFORM_LENGTH = 44;\n/** @internal */\nexport const TransformSchema = {\n serialize(value, builder) {\n const ptr = builder.incrementWriteOffset(TRANSFORM_LENGTH);\n builder.setFloat32(ptr, value.position.x);\n builder.setFloat32(ptr + 4, value.position.y);\n builder.setFloat32(ptr + 8, value.position.z);\n builder.setFloat32(ptr + 12, value.rotation.x);\n builder.setFloat32(ptr + 16, value.rotation.y);\n builder.setFloat32(ptr + 20, value.rotation.z);\n builder.setFloat32(ptr + 24, value.rotation.w);\n builder.setFloat32(ptr + 28, value.scale.x);\n builder.setFloat32(ptr + 32, value.scale.y);\n builder.setFloat32(ptr + 36, value.scale.z);\n builder.setUint32(ptr + 40, value.parent || 0);\n },\n deserialize(reader) {\n const ptr = reader.incrementReadOffset(TRANSFORM_LENGTH);\n return {\n position: {\n x: reader.getFloat32(ptr),\n y: reader.getFloat32(ptr + 4),\n z: reader.getFloat32(ptr + 8)\n },\n rotation: {\n x: reader.getFloat32(ptr + 12),\n y: reader.getFloat32(ptr + 16),\n z: reader.getFloat32(ptr + 20),\n w: reader.getFloat32(ptr + 24)\n },\n scale: {\n x: reader.getFloat32(ptr + 28),\n y: reader.getFloat32(ptr + 32),\n z: reader.getFloat32(ptr + 36)\n },\n parent: reader.getUint32(ptr + 40)\n };\n },\n create() {\n return {\n position: { x: 0, y: 0, z: 0 },\n scale: { x: 1, y: 1, z: 1 },\n rotation: { x: 0, y: 0, z: 0, w: 1 },\n parent: 0\n };\n },\n extend(value) {\n return {\n position: { x: 0, y: 0, z: 0 },\n scale: { x: 1, y: 1, z: 1 },\n rotation: { x: 0, y: 0, z: 0, w: 1 },\n parent: 0,\n ...value\n };\n },\n jsonSchema: {\n type: 'object',\n properties: {\n position: {\n type: 'object',\n properties: {\n x: { type: 'number' },\n y: { type: 'number' },\n z: { type: 'number' }\n }\n },\n scale: {\n type: 'object',\n properties: {\n x: { type: 'number' },\n y: { type: 'number' },\n z: { type: 'number' }\n }\n },\n rotation: {\n type: 'object',\n properties: {\n x: { type: 'number' },\n y: { type: 'number' },\n z: { type: 'number' },\n w: { type: 'number' }\n }\n },\n parent: { type: 'integer' }\n },\n serializationType: 'transform'\n }\n};\nexport function defineTransformComponent(engine) {\n const transformDef = engine.defineComponentFromSchema('core::Transform', TransformSchema);\n return {\n ...transformDef,\n create(entity, val) {\n return transformDef.create(entity, TransformSchema.extend(val));\n },\n createOrReplace(entity, val) {\n return transformDef.createOrReplace(entity, TransformSchema.extend(val));\n }\n };\n}\n", "import { AudioStream, AudioEvent as defineAudioEventComponent } from '../generated/index.gen';\nexport function defineAudioStreamComponent(engine) {\n const theComponent = AudioStream(engine);\n const AudioEvent = defineAudioEventComponent(engine);\n return {\n ...theComponent,\n getAudioState(entity) {\n const AudioStream = theComponent.getMutableOrNull(entity);\n if (!AudioStream || !AudioEvent.has(entity))\n return undefined;\n const lastEvent = Array.from(AudioEvent.get(entity)).pop();\n return lastEvent;\n }\n };\n}\n", "/* eslint-disable */\nconst protobufPackageSarasa = \"decentraland.sdk.components.common\";\n/**\n * @public\n */\nexport var MediaState;\n(function (MediaState) {\n MediaState[MediaState[\"MS_NONE\"] = 0] = \"MS_NONE\";\n MediaState[MediaState[\"MS_ERROR\"] = 1] = \"MS_ERROR\";\n MediaState[MediaState[\"MS_LOADING\"] = 2] = \"MS_LOADING\";\n MediaState[MediaState[\"MS_READY\"] = 3] = \"MS_READY\";\n MediaState[MediaState[\"MS_PLAYING\"] = 4] = \"MS_PLAYING\";\n MediaState[MediaState[\"MS_BUFFERING\"] = 5] = \"MS_BUFFERING\";\n MediaState[MediaState[\"MS_SEEKING\"] = 6] = \"MS_SEEKING\";\n MediaState[MediaState[\"MS_PAUSED\"] = 7] = \"MS_PAUSED\";\n})(MediaState || (MediaState = {}));\n", "import { LightSource } from '../generated/index.gen';\nconst LightSourceHelper = {\n Point(point) {\n return {\n $case: 'point',\n point\n };\n },\n Spot(spot) {\n return {\n $case: 'spot',\n spot\n };\n }\n};\nexport function defineLightSourceComponent(engine) {\n const theComponent = LightSource(engine);\n return {\n ...theComponent,\n Type: LightSourceHelper\n };\n}\n", "import { Schemas } from '../../schemas';\n/**\n * @public\n *\n * Define the Tags component\n * @param engine - the engine to define the component on\n * @returns the Tags component definition\n */\nfunction defineTagsComponent(engine) {\n const Tags = engine.defineComponent('core-schema::Tags', {\n tags: Schemas.Array(Schemas.String)\n });\n return {\n ...Tags,\n add(entity, tagName) {\n const tagsComponent = Tags.getMutableOrNull(entity);\n if (tagsComponent) {\n tagsComponent.tags.push(tagName);\n }\n else {\n Tags.createOrReplace(entity, { tags: [tagName] });\n }\n return true;\n },\n remove(entity, tagName) {\n const tagsComponent = Tags.getMutableOrNull(entity);\n if (!tagsComponent || !tagsComponent.tags)\n return false;\n const newTags = tagsComponent.tags.filter((tag) => tag !== tagName);\n if (newTags.length === tagsComponent.tags.length)\n return false;\n tagsComponent.tags = newTags;\n return true;\n }\n };\n}\nexport default defineTagsComponent;\n", "import { defineAnimatorComponent } from './extended/Animator';\nimport { defineAudioSourceComponent } from './extended/AudioSource';\nimport { defineMaterialComponent } from './extended/Material';\nimport { defineMeshColliderComponent } from './extended/MeshCollider';\nimport { defineMeshRendererComponent } from './extended/MeshRenderer';\nimport { defineTweenComponent } from './extended/Tween';\nimport defineNameComponent from './manual/Name';\nimport defineSyncComponent from './manual/SyncComponents';\nimport defineNetworkEntity from './manual/NetworkEntity';\nimport defineNetworkParent from './manual/NetworkParent';\nimport { defineTransformComponent } from './manual/Transform';\nimport { defineAudioStreamComponent } from './extended/AudioStream';\nimport { MediaState } from './generated/pb/decentraland/sdk/components/common/media_state.gen';\nimport { defineVirtualCameraComponent } from './extended/VirtualCamera';\nimport { defineInputModifierComponent } from './extended/InputModifier';\nimport { defineLightSourceComponent } from './extended/LightSource';\nimport { defineTriggerAreaComponent } from './extended/TriggerArea';\nimport defineTagsComponent from './manual/Tags';\nexport * from './generated/index.gen';\n/* @__PURE__ */\nexport const Transform = (engine) => defineTransformComponent(engine);\n/* @__PURE__ */\nexport const Material = (engine) => defineMaterialComponent(engine);\n/* @__PURE__ */\nexport const Animator = (engine) => defineAnimatorComponent(engine);\n/* @__PURE__ */\nexport const AudioSource = (engine) => defineAudioSourceComponent(engine);\n/* @__PURE__ */\nexport const AudioStream = (engine) => defineAudioStreamComponent(engine);\n/* @__PURE__ */\nexport const MeshRenderer = (engine) => defineMeshRendererComponent(engine);\n/* @__PURE__ */\nexport const MeshCollider = (engine) => defineMeshColliderComponent(engine);\n/* @__PURE__ */\nexport const Tween = (engine) => defineTweenComponent(engine);\n/* @__PURE__ */\nexport const VirtualCamera = (engine) => defineVirtualCameraComponent(engine);\n/* @__PURE__*/\nexport const InputModifier = (engine) => defineInputModifierComponent(engine);\n/* @__PURE__ */\nexport const LightSource = (engine) => defineLightSourceComponent(engine);\n/* @__PURE__ */\nexport const TriggerArea = (engine) => defineTriggerAreaComponent(engine);\n/**\n * @alpha\n */\n/* @__PURE__ */\nexport const Name = (engine) => defineNameComponent(engine);\n/* @__PURE__ */\nexport const Tags = (engine) => defineTagsComponent(engine);\n/**\n * @alpha\n */\n/* @__PURE__ */\nexport const SyncComponents = (engine) => defineSyncComponent(engine);\n/**\n * @alpha\n */\n/* @__PURE__ */\nexport const NetworkEntity = (engine) => defineNetworkEntity(engine);\n/**\n * @alpha\n */\n/* @__PURE__ */\nexport const NetworkParent = (engine) => defineNetworkParent(engine);\nexport { MediaState };\n", "/**\n * Autogenerated mapping of core components to their component numbers\n */\nexport const coreComponentMappings = {\n \"core::Transform\": 1,\n \"core::Animator\": 1042,\n \"core::AudioEvent\": 1105,\n \"core::AudioSource\": 1020,\n \"core::AudioStream\": 1021,\n \"core::AvatarAttach\": 1073,\n \"core::AvatarBase\": 1087,\n \"core::AvatarEmoteCommand\": 1088,\n \"core::AvatarEquippedData\": 1091,\n \"core::AvatarModifierArea\": 1070,\n \"core::AvatarShape\": 1080,\n \"core::Billboard\": 1090,\n \"core::CameraMode\": 1072,\n \"core::CameraModeArea\": 1071,\n \"core::EngineInfo\": 1048,\n \"core::GltfContainer\": 1041,\n \"core::GltfContainerLoadingState\": 1049,\n \"core::GltfNodeModifiers\": 1099,\n \"core::InputModifier\": 1078,\n \"core::LightSource\": 1079,\n \"core::MainCamera\": 1075,\n \"core::MapPin\": 1097,\n \"core::Material\": 1017,\n \"core::MeshCollider\": 1019,\n \"core::MeshRenderer\": 1018,\n \"core::NftShape\": 1040,\n \"core::PlayerIdentityData\": 1089,\n \"core::PointerEvents\": 1062,\n \"core::PointerEventsResult\": 1063,\n \"core::PointerLock\": 1074,\n \"core::PrimaryPointerInfo\": 1209,\n \"core::Raycast\": 1067,\n \"core::RaycastResult\": 1068,\n \"core::RealmInfo\": 1106,\n \"core::SkyboxTime\": 1210,\n \"core::TextShape\": 1030,\n \"core::TriggerArea\": 1060,\n \"core::TriggerAreaResult\": 1061,\n \"core::Tween\": 1102,\n \"core::TweenSequence\": 1104,\n \"core::TweenState\": 1103,\n \"core::UiBackground\": 1053,\n \"core::UiCanvasInformation\": 1054,\n \"core::UiDropdown\": 1094,\n \"core::UiDropdownResult\": 1096,\n \"core::UiInput\": 1093,\n \"core::UiInputResult\": 1095,\n \"core::UiText\": 1052,\n \"core::UiTransform\": 1050,\n \"core::VideoEvent\": 1044,\n \"core::VideoPlayer\": 1043,\n \"core::VirtualCamera\": 1076,\n \"core::VisibilityComponent\": 1081\n};\n", "import { coreComponentMappings } from './generated/component-names.gen';\nimport * as utf8 from '@protobufjs/utf8';\nimport { unsignedCRC32 } from '../runtime/crc';\n// Max possible pre-defined (static) component.\nexport const MAX_STATIC_COMPONENT = 1 << 11; // 2048\n/**\n * All components that are not part of the coreComponentMappings MUST yield\n * a componentNumber (componentId) greather than MAX_STATIC_COMPONENT.\n * For that reason, we simply add MAX_STATIC_COMPONENT and trim to the domain 2^32\n */\nexport function componentNumberFromName(componentName) {\n if (coreComponentMappings[componentName])\n return coreComponentMappings[componentName];\n const bytes = new Uint8Array(128);\n utf8.write(componentName, bytes, 0);\n return ((unsignedCRC32(bytes) + MAX_STATIC_COMPONENT) & 4294967295) >>> 0;\n}\n", "const CRC_TABLE = new Int32Array([\n 0x00000000, 0x77073096, 0xee0e612c, 0x990951ba, 0x076dc419, 0x706af48f, 0xe963a535, 0x9e6495a3, 0x0edb8832,\n 0x79dcb8a4, 0xe0d5e91e, 0x97d2d988, 0x09b64c2b, 0x7eb17cbd, 0xe7b82d07, 0x90bf1d91, 0x1db71064, 0x6ab020f2,\n 0xf3b97148, 0x84be41de, 0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7, 0x136c9856, 0x646ba8c0, 0xfd62f97a,\n 0x8a65c9ec, 0x14015c4f, 0x63066cd9, 0xfa0f3d63, 0x8d080df5, 0x3b6e20c8, 0x4c69105e, 0xd56041e4, 0xa2677172,\n 0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b, 0x35b5a8fa, 0x42b2986c, 0xdbbbc9d6, 0xacbcf940, 0x32d86ce3,\n 0x45df5c75, 0xdcd60dcf, 0xabd13d59, 0x26d930ac, 0x51de003a, 0xc8d75180, 0xbfd06116, 0x21b4f4b5, 0x56b3c423,\n 0xcfba9599, 0xb8bda50f, 0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924, 0x2f6f7c87, 0x58684c11, 0xc1611dab,\n 0xb6662d3d, 0x76dc4190, 0x01db7106, 0x98d220bc, 0xefd5102a, 0x71b18589, 0x06b6b51f, 0x9fbfe4a5, 0xe8b8d433,\n 0x7807c9a2, 0x0f00f934, 0x9609a88e, 0xe10e9818, 0x7f6a0dbb, 0x086d3d2d, 0x91646c97, 0xe6635c01, 0x6b6b51f4,\n 0x1c6c6162, 0x856530d8, 0xf262004e, 0x6c0695ed, 0x1b01a57b, 0x8208f4c1, 0xf50fc457, 0x65b0d9c6, 0x12b7e950,\n 0x8bbeb8ea, 0xfcb9887c, 0x62dd1ddf, 0x15da2d49, 0x8cd37cf3, 0xfbd44c65, 0x4db26158, 0x3ab551ce, 0xa3bc0074,\n 0xd4bb30e2, 0x4adfa541, 0x3dd895d7, 0xa4d1c46d, 0xd3d6f4fb, 0x4369e96a, 0x346ed9fc, 0xad678846, 0xda60b8d0,\n 0x44042d73, 0x33031de5, 0xaa0a4c5f, 0xdd0d7cc9, 0x5005713c, 0x270241aa, 0xbe0b1010, 0xc90c2086, 0x5768b525,\n 0x206f85b3, 0xb966d409, 0xce61e49f, 0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4, 0x59b33d17, 0x2eb40d81,\n 0xb7bd5c3b, 0xc0ba6cad, 0xedb88320, 0x9abfb3b6, 0x03b6e20c, 0x74b1d29a, 0xead54739, 0x9dd277af, 0x04db2615,\n 0x73dc1683, 0xe3630b12, 0x94643b84, 0x0d6d6a3e, 0x7a6a5aa8, 0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1,\n 0xf00f9344, 0x8708a3d2, 0x1e01f268, 0x6906c2fe, 0xf762575d, 0x806567cb, 0x196c3671, 0x6e6b06e7, 0xfed41b76,\n 0x89d32be0, 0x10da7a5a, 0x67dd4acc, 0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5, 0xd6d6a3e8, 0xa1d1937e,\n 0x38d8c2c4, 0x4fdff252, 0xd1bb67f1, 0xa6bc5767, 0x3fb506dd, 0x48b2364b, 0xd80d2bda, 0xaf0a1b4c, 0x36034af6,\n 0x41047a60, 0xdf60efc3, 0xa867df55, 0x316e8eef, 0x4669be79, 0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236,\n 0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f, 0xc5ba3bbe, 0xb2bd0b28, 0x2bb45a92, 0x5cb36a04, 0xc2d7ffa7,\n 0xb5d0cf31, 0x2cd99e8b, 0x5bdeae1d, 0x9b64c2b0, 0xec63f226, 0x756aa39c, 0x026d930a, 0x9c0906a9, 0xeb0e363f,\n 0x72076785, 0x05005713, 0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0x0cb61b38, 0x92d28e9b, 0xe5d5be0d, 0x7cdcefb7,\n 0x0bdbdf21, 0x86d3d2d4, 0xf1d4e242, 0x68ddb3f8, 0x1fda836e, 0x81be16cd, 0xf6b9265b, 0x6fb077e1, 0x18b74777,\n 0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c, 0x8f659eff, 0xf862ae69, 0x616bffd3, 0x166ccf45, 0xa00ae278,\n 0xd70dd2ee, 0x4e048354, 0x3903b3c2, 0xa7672661, 0xd06016f7, 0x4969474d, 0x3e6e77db, 0xaed16a4a, 0xd9d65adc,\n 0x40df0b66, 0x37d83bf0, 0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9, 0xbdbdf21c, 0xcabac28a, 0x53b39330,\n 0x24b4a3a6, 0xbad03605, 0xcdd70693, 0x54de5729, 0x23d967bf, 0xb3667a2e, 0xc4614ab8, 0x5d681b02, 0x2a6f2b94,\n 0xb40bbe37, 0xc30c8ea1, 0x5a05df1b, 0x2d02ef8d\n]);\nfunction _crc32(buf, previous) {\n let crc = ~~previous ^ -1;\n for (let n = 0; n < buf.length; n++) {\n crc = CRC_TABLE[(crc ^ buf[n]) & 0xff] ^ (crc >>> 8);\n }\n return crc ^ -1;\n}\nexport function unsignedCRC32(data, prev = 0) {\n return _crc32(data, prev) >>> 0;\n}\n", "/* istanbul ignore file */\nexport const __DEV__ = (typeof DEBUG === 'boolean' && DEBUG) ||\n (typeof process === 'object' &&\n (process.env?.NODE_ENV !== 'production' || process.env?.NODE_ENV === 'development')) ||\n false;\nexport function checkNotThenable(t, error) {\n if (__DEV__) {\n if (t && typeof t === 'object' && typeof t.then === 'function') {\n throw new Error(error);\n }\n }\n return t;\n}\n", "/**\n *\n * @returns a new GSet\n */\nexport function createVersionGSet() {\n const lastVersion = new Map();\n return {\n /**\n *\n * @param number\n * @param version\n * @returns\n */\n addTo(number, version) {\n /* istanbul ignore next */\n if (version < 0) {\n /* istanbul ignore next */\n return false;\n }\n const currentValue = lastVersion.get(number);\n // If the version is >=, it means the value it's already in the set\n if (currentValue !== undefined && currentValue >= version) {\n return true;\n }\n lastVersion.set(number, version);\n return true;\n },\n /**\n * @returns the set with [number, version] of each value\n */\n has(n, v) {\n const currentValue = lastVersion.get(n);\n // If the version is >=, it means the value it's already in the set\n if (currentValue !== undefined && currentValue >= v) {\n return true;\n }\n return false;\n },\n /**\n * Warning: this function returns the reference to the internal map,\n * if you need to mutate some value, make a copy.\n * For optimization purpose the copy isn't made here.\n *\n * @returns the map of number to version\n */\n getMap() {\n return lastVersion;\n }\n };\n}\n", "import { createVersionGSet } from '../systems/crdt/gset';\n/**\n * @internal\n */\nexport const MAX_U16 = 0xffff;\nconst MASK_UPPER_16_ON_32 = 0xffff0000;\n/**\n * @internal\n */\nexport const AMOUNT_VERSION_AVAILABLE = MAX_U16 + 1;\n// This type matches with @dcl/crdt entity type.\n/**\n * @internal\n */\nexport const MAX_ENTITY_NUMBER = MAX_U16;\n/**\n * This first 512 entities are reserved by the renderer\n */\nexport const RESERVED_STATIC_ENTITIES = 512;\n/**\n * @public\n */\nexport var EntityUtils;\n(function (EntityUtils) {\n /**\n * @returns [entityNumber, entityVersion]\n */\n function fromEntityId(entityId) {\n return [(entityId & MAX_U16) >>> 0, (((entityId & MASK_UPPER_16_ON_32) >> 16) & MAX_U16) >>> 0];\n }\n EntityUtils.fromEntityId = fromEntityId;\n /**\n * @returns compound number from entityNumber and entityVerison\n */\n function toEntityId(entityNumber, entityVersion) {\n return (((entityNumber & MAX_U16) | ((entityVersion & MAX_U16) << 16)) >>> 0);\n }\n EntityUtils.toEntityId = toEntityId;\n})(EntityUtils || (EntityUtils = {}));\n/**\n * @public\n */\nexport var EntityState;\n(function (EntityState) {\n EntityState[EntityState[\"Unknown\"] = 0] = \"Unknown\";\n /**\n * The entity was generated and added to the usedEntities set\n */\n EntityState[EntityState[\"UsedEntity\"] = 1] = \"UsedEntity\";\n /**\n * The entity was removed from current engine or remotely\n */\n EntityState[EntityState[\"Removed\"] = 2] = \"Removed\";\n /**\n * The entity is reserved number.\n */\n EntityState[EntityState[\"Reserved\"] = 3] = \"Reserved\";\n})(EntityState || (EntityState = {}));\n/**\n * @public\n */\nexport function createEntityContainer(opts) {\n const reservedStaticEntities = opts?.reservedStaticEntities ?? RESERVED_STATIC_ENTITIES;\n // Local entities counter\n let entityCounter = reservedStaticEntities;\n const usedEntities = new Set();\n let toRemoveEntities = [];\n const removedEntities = createVersionGSet();\n function generateNewEntity() {\n if (entityCounter > MAX_ENTITY_NUMBER - 1) {\n throw new Error(`It fails trying to generate an entity out of range ${MAX_ENTITY_NUMBER}.`);\n }\n const entityNumber = entityCounter++;\n const entityVersion = removedEntities.getMap().has(entityNumber)\n ? removedEntities.getMap().get(entityNumber) + 1\n : 0;\n const entity = EntityUtils.toEntityId(entityNumber, entityVersion);\n if (usedEntities.has(entity)) {\n return generateNewEntity();\n }\n usedEntities.add(entity);\n return entity;\n }\n function generateEntity() {\n const usedSize = usedEntities.size;\n // If all entities until `entityCounter` are being used, we need to generate another one\n if (usedSize + reservedStaticEntities >= entityCounter) {\n return generateNewEntity();\n }\n for (const [number, version] of removedEntities.getMap()) {\n if (version < MAX_U16) {\n const entity = EntityUtils.toEntityId(number, version + 1);\n // If the entity is not being used, we can re-use it\n // If the entity was removed in this tick, we're not counting for the usedEntities, but we have it in the toRemoveEntityArray\n if (!usedEntities.has(entity) && !toRemoveEntities.includes(entity)) {\n usedEntities.add(entity);\n return entity;\n }\n }\n }\n return generateNewEntity();\n }\n function removeEntity(entity) {\n if (entity < reservedStaticEntities)\n return false;\n if (usedEntities.has(entity)) {\n usedEntities.delete(entity);\n toRemoveEntities.push(entity);\n }\n else {\n updateRemovedEntity(entity);\n }\n return true;\n }\n function releaseRemovedEntities() {\n const arr = toRemoveEntities;\n if (arr.length) {\n toRemoveEntities = [];\n for (const entity of arr) {\n const [n, v] = EntityUtils.fromEntityId(entity);\n removedEntities.addTo(n, v);\n }\n }\n return arr;\n }\n function updateRemovedEntity(entity) {\n const [n, v] = EntityUtils.fromEntityId(entity);\n // Update the removed entities map\n removedEntities.addTo(n, v);\n // Remove the usedEntities if exist\n for (let i = 0; i <= v; i++) {\n usedEntities.delete(EntityUtils.toEntityId(n, i));\n }\n return true;\n }\n function updateUsedEntity(entity) {\n const [n, v] = EntityUtils.fromEntityId(entity);\n // if the entity was removed then abort fast\n if (removedEntities.has(n, v))\n return false;\n // Update\n if (v > 0) {\n for (let i = 0; i <= v - 1; i++) {\n usedEntities.delete(EntityUtils.toEntityId(n, i));\n }\n removedEntities.addTo(n, v - 1);\n }\n usedEntities.add(entity);\n return true;\n }\n function getEntityState(entity) {\n const [n, v] = EntityUtils.fromEntityId(entity);\n if (n < reservedStaticEntities) {\n return EntityState.Reserved;\n }\n if (usedEntities.has(entity)) {\n return EntityState.UsedEntity;\n }\n const removedVersion = removedEntities.getMap().get(n);\n if (removedVersion !== undefined && removedVersion >= v) {\n return EntityState.Removed;\n }\n return EntityState.Unknown;\n }\n return {\n generateEntity,\n removeEntity,\n getExistingEntities() {\n return new Set(usedEntities);\n },\n getEntityState,\n releaseRemovedEntities,\n updateRemovedEntity,\n updateUsedEntity\n };\n}\n", "var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n};\nvar _ReadWriteByteBuffer_instances, _ReadWriteByteBuffer_woAdd, _ReadWriteByteBuffer_roAdd;\nimport * as utf8 from '@protobufjs/utf8';\n/**\n * Take the max between currentSize and intendedSize and then plus 1024. Then,\n * find the next nearer multiple of 1024.\n * @param currentSize - number\n * @param intendedSize - number\n * @returns the calculated number\n */\nfunction getNextSize(currentSize, intendedSize) {\n const minNewSize = Math.max(currentSize, intendedSize) + 1024;\n return Math.ceil(minNewSize / 1024) * 1024;\n}\nconst defaultInitialCapacity = 10240;\n/**\n * ByteBuffer is a wrapper of DataView which also adds a read and write offset.\n * Also in a write operation it resizes the buffer is being used if it needs.\n *\n * - Use read and write function to generate or consume data.\n * - Use set and get only if you are sure that you're doing.\n *\n * It always passes littleEndian param as true\n */\nexport class ReadWriteByteBuffer {\n /**\n * @param buffer - The initial buffer, provide a buffer if you need to set \"initial capacity\"\n * @param readingOffset - Set the cursor where begins to read. Default 0\n * @param writingOffset - Set the cursor to not start writing from the begin of it. Defaults to the buffer size\n */\n constructor(buffer, readingOffset, writingOffset) {\n _ReadWriteByteBuffer_instances.add(this);\n this._buffer = buffer || new Uint8Array(defaultInitialCapacity);\n this.view = new DataView(this._buffer.buffer, this._buffer.byteOffset);\n this.woffset = writingOffset ?? (buffer ? this._buffer.length : null) ?? 0;\n this.roffset = readingOffset ?? 0;\n }\n buffer() {\n return this._buffer;\n }\n bufferLength() {\n return this._buffer.length;\n }\n resetBuffer() {\n this.roffset = 0;\n this.woffset = 0;\n }\n currentReadOffset() {\n return this.roffset;\n }\n currentWriteOffset() {\n return this.woffset;\n }\n incrementReadOffset(amount) {\n return __classPrivateFieldGet(this, _ReadWriteByteBuffer_instances, \"m\", _ReadWriteByteBuffer_roAdd).call(this, amount);\n }\n remainingBytes() {\n return this.woffset - this.roffset;\n }\n readFloat32() {\n return this.view.getFloat32(__classPrivateFieldGet(this, _ReadWriteByteBuffer_instances, \"m\", _ReadWriteByteBuffer_roAdd).call(this, 4), true); // littleEndian = true\n }\n readFloat64() {\n return this.view.getFloat64(__classPrivateFieldGet(this, _ReadWriteByteBuffer_instances, \"m\", _ReadWriteByteBuffer_roAdd).call(this, 8), true); // littleEndian = true\n }\n readInt8() {\n return this.view.getInt8(__classPrivateFieldGet(this, _ReadWriteByteBuffer_instances, \"m\", _ReadWriteByteBuffer_roAdd).call(this, 1));\n }\n readInt16() {\n return this.view.getInt16(__classPrivateFieldGet(this, _ReadWriteByteBuffer_instances, \"m\", _ReadWriteByteBuffer_roAdd).call(this, 2), true); // littleEndian = true\n }\n readInt32() {\n return this.view.getInt32(__classPrivateFieldGet(this, _ReadWriteByteBuffer_instances, \"m\", _ReadWriteByteBuffer_roAdd).call(this, 4), true); // littleEndian = true\n }\n readInt64() {\n return this.view.getBigInt64(__classPrivateFieldGet(this, _ReadWriteByteBuffer_instances, \"m\", _ReadWriteByteBuffer_roAdd).call(this, 8), true); // littleEndian = true\n }\n readUint8() {\n return this.view.getUint8(__classPrivateFieldGet(this, _ReadWriteByteBuffer_instances, \"m\", _ReadWriteByteBuffer_roAdd).call(this, 1));\n }\n readUint16() {\n return this.view.getUint16(__classPrivateFieldGet(this, _ReadWriteByteBuffer_instances, \"m\", _ReadWriteByteBuffer_roAdd).call(this, 2), true); // littleEndian = true\n }\n readUint32() {\n return this.view.getUint32(__classPrivateFieldGet(this, _ReadWriteByteBuffer_instances, \"m\", _ReadWriteByteBuffer_roAdd).call(this, 4), true); // littleEndian = true\n }\n readUint64() {\n return this.view.getBigUint64(__classPrivateFieldGet(this, _ReadWriteByteBuffer_instances, \"m\", _ReadWriteByteBuffer_roAdd).call(this, 8), true); // littleEndian = true\n }\n readBuffer() {\n const length = this.view.getUint32(__classPrivateFieldGet(this, _ReadWriteByteBuffer_instances, \"m\", _ReadWriteByteBuffer_roAdd).call(this, 4), true); // littleEndian = true\n return this._buffer.subarray(__classPrivateFieldGet(this, _ReadWriteByteBuffer_instances, \"m\", _ReadWriteByteBuffer_roAdd).call(this, length), __classPrivateFieldGet(this, _ReadWriteByteBuffer_instances, \"m\", _ReadWriteByteBuffer_roAdd).call(this, 0));\n }\n readUtf8String() {\n const length = this.view.getUint32(__classPrivateFieldGet(this, _ReadWriteByteBuffer_instances, \"m\", _ReadWriteByteBuffer_roAdd).call(this, 4), true); // littleEndian = true\n return utf8.read(this._buffer, __classPrivateFieldGet(this, _ReadWriteByteBuffer_instances, \"m\", _ReadWriteByteBuffer_roAdd).call(this, length), __classPrivateFieldGet(this, _ReadWriteByteBuffer_instances, \"m\", _ReadWriteByteBuffer_roAdd).call(this, 0));\n }\n incrementWriteOffset(amount) {\n return __classPrivateFieldGet(this, _ReadWriteByteBuffer_instances, \"m\", _ReadWriteByteBuffer_woAdd).call(this, amount);\n }\n toBinary() {\n return this._buffer.subarray(0, this.woffset);\n }\n toCopiedBinary() {\n return new Uint8Array(this.toBinary());\n }\n writeBuffer(value, writeLength = true) {\n if (writeLength) {\n this.writeUint32(value.byteLength);\n }\n const o = __classPrivateFieldGet(this, _ReadWriteByteBuffer_instances, \"m\", _ReadWriteByteBuffer_woAdd).call(this, value.byteLength);\n this._buffer.set(value, o);\n }\n writeUtf8String(value, writeLength = true) {\n const byteLength = utf8.length(value);\n if (writeLength) {\n this.writeUint32(byteLength);\n }\n const o = __classPrivateFieldGet(this, _ReadWriteByteBuffer_instances, \"m\", _ReadWriteByteBuffer_woAdd).call(this, byteLength);\n utf8.write(value, this._buffer, o);\n }\n writeFloat32(value) {\n const o = __classPrivateFieldGet(this, _ReadWriteByteBuffer_instances, \"m\", _ReadWriteByteBuffer_woAdd).call(this, 4);\n this.view.setFloat32(o, value, true); // littleEndian = true\n }\n writeFloat64(value) {\n const o = __classPrivateFieldGet(this, _ReadWriteByteBuffer_instances, \"m\", _ReadWriteByteBuffer_woAdd).call(this, 8);\n this.view.setFloat64(o, value, true); // littleEndian = true\n }\n writeInt8(value) {\n const o = __classPrivateFieldGet(this, _ReadWriteByteBuffer_instances, \"m\", _ReadWriteByteBuffer_woAdd).call(this, 1);\n this.view.setInt8(o, value);\n }\n writeInt16(value) {\n const o = __classPrivateFieldGet(this, _ReadWriteByteBuffer_instances, \"m\", _ReadWriteByteBuffer_woAdd).call(this, 2);\n this.view.setInt16(o, value, true); // littleEndian = true\n }\n writeInt32(value) {\n const o = __classPrivateFieldGet(this, _ReadWriteByteBuffer_instances, \"m\", _ReadWriteByteBuffer_woAdd).call(this, 4);\n this.view.setInt32(o, value, true); // littleEndian = true\n }\n writeInt64(value) {\n const o = __classPrivateFieldGet(this, _ReadWriteByteBuffer_instances, \"m\", _ReadWriteByteBuffer_woAdd).call(this, 8);\n this.view.setBigInt64(o, value, true); // littleEndian = true\n }\n writeUint8(value) {\n const o = __classPrivateFieldGet(this, _ReadWriteByteBuffer_instances, \"m\", _ReadWriteByteBuffer_woAdd).call(this, 1);\n this.view.setUint8(o, value);\n }\n writeUint16(value) {\n const o = __classPrivateFieldGet(this, _ReadWriteByteBuffer_instances, \"m\", _ReadWriteByteBuffer_woAdd).call(this, 2);\n this.view.setUint16(o, value, true); // littleEndian = true\n }\n writeUint32(value) {\n const o = __classPrivateFieldGet(this, _ReadWriteByteBuffer_instances, \"m\", _ReadWriteByteBuffer_woAdd).call(this, 4);\n this.view.setUint32(o, value, true); // littleEndian = true\n }\n writeUint64(value) {\n const o = __classPrivateFieldGet(this, _ReadWriteByteBuffer_instances, \"m\", _ReadWriteByteBuffer_woAdd).call(this, 8);\n this.view.setBigUint64(o, value, true); // littleEndian = true\n }\n // DataView Proxy\n getFloat32(offset) {\n return this.view.getFloat32(offset, true); // littleEndian = true\n }\n getFloat64(offset) {\n return this.view.getFloat64(offset, true); // littleEndian = true\n }\n getInt8(offset) {\n return this.view.getInt8(offset);\n }\n getInt16(offset) {\n return this.view.getInt16(offset, true); // littleEndian = true\n }\n getInt32(offset) {\n return this.view.getInt32(offset, true); // littleEndian = true\n }\n getInt64(offset) {\n return this.view.getBigInt64(offset, true); // littleEndian = true\n }\n getUint8(offset) {\n return this.view.getUint8(offset);\n }\n getUint16(offset) {\n return this.view.getUint16(offset, true); // littleEndian = true\n }\n getUint32(offset) {\n return this.view.getUint32(offset, true); // littleEndian = true >>> 0\n }\n getUint64(offset) {\n return this.view.getBigUint64(offset, true); // littleEndian = true\n }\n setFloat32(offset, value) {\n this.view.setFloat32(offset, value, true); // littleEndian = true\n }\n setFloat64(offset, value) {\n this.view.setFloat64(offset, value, true); // littleEndian = true\n }\n setInt8(offset, value) {\n this.view.setInt8(offset, value);\n }\n setInt16(offset, value) {\n this.view.setInt16(offset, value, true); // littleEndian = true\n }\n setInt32(offset, value) {\n this.view.setInt32(offset, value, true); // littleEndian = true\n }\n setInt64(offset, value) {\n this.view.setBigInt64(offset, value, true); // littleEndian = true\n }\n setUint8(offset, value) {\n this.view.setUint8(offset, value);\n }\n setUint16(offset, value) {\n this.view.setUint16(offset, value, true); // littleEndian = true\n }\n setUint32(offset, value) {\n this.view.setUint32(offset, value, true); // littleEndian = true\n }\n setUint64(offset, value) {\n this.view.setBigUint64(offset, value, true); // littleEndian = true\n }\n}\n_ReadWriteByteBuffer_instances = new WeakSet(), _ReadWriteByteBuffer_woAdd = function _ReadWriteByteBuffer_woAdd(amount) {\n if (this.woffset + amount > this._buffer.byteLength) {\n const newsize = getNextSize(this._buffer.byteLength, this.woffset + amount);\n const newBuffer = new Uint8Array(newsize);\n newBuffer.set(this._buffer);\n const oldOffset = this._buffer.byteOffset;\n this._buffer = newBuffer;\n this.view = new DataView(this._buffer.buffer, oldOffset);\n }\n this.woffset += amount;\n return this.woffset - amount;\n}, _ReadWriteByteBuffer_roAdd = function _ReadWriteByteBuffer_roAdd(amount) {\n if (this.roffset + amount > this.woffset) {\n throw new Error('Outside of the bounds of writen data.');\n }\n this.roffset += amount;\n return this.roffset - amount;\n};\n", "/**\n * @public\n */\nexport var CrdtMessageType;\n(function (CrdtMessageType) {\n CrdtMessageType[CrdtMessageType[\"RESERVED\"] = 0] = \"RESERVED\";\n // Component Operation\n CrdtMessageType[CrdtMessageType[\"PUT_COMPONENT\"] = 1] = \"PUT_COMPONENT\";\n CrdtMessageType[CrdtMessageType[\"DELETE_COMPONENT\"] = 2] = \"DELETE_COMPONENT\";\n CrdtMessageType[CrdtMessageType[\"DELETE_ENTITY\"] = 3] = \"DELETE_ENTITY\";\n CrdtMessageType[CrdtMessageType[\"APPEND_VALUE\"] = 4] = \"APPEND_VALUE\";\n // Network operations\n CrdtMessageType[CrdtMessageType[\"PUT_COMPONENT_NETWORK\"] = 5] = \"PUT_COMPONENT_NETWORK\";\n CrdtMessageType[CrdtMessageType[\"DELETE_COMPONENT_NETWORK\"] = 6] = \"DELETE_COMPONENT_NETWORK\";\n CrdtMessageType[CrdtMessageType[\"DELETE_ENTITY_NETWORK\"] = 7] = \"DELETE_ENTITY_NETWORK\";\n CrdtMessageType[CrdtMessageType[\"MAX_MESSAGE_TYPE\"] = 8] = \"MAX_MESSAGE_TYPE\";\n})(CrdtMessageType || (CrdtMessageType = {}));\n/**\n * @public\n */\nexport const CRDT_MESSAGE_HEADER_LENGTH = 8;\nexport var ProcessMessageResultType;\n(function (ProcessMessageResultType) {\n /**\n * Typical message and new state set.\n * @state CHANGE\n * @reason Incoming message has a timestamp greater\n */\n ProcessMessageResultType[ProcessMessageResultType[\"StateUpdatedTimestamp\"] = 1] = \"StateUpdatedTimestamp\";\n /**\n * Typical message when it is considered old.\n * @state it does NOT CHANGE.\n * @reason incoming message has a timestamp lower.\n */\n ProcessMessageResultType[ProcessMessageResultType[\"StateOutdatedTimestamp\"] = 2] = \"StateOutdatedTimestamp\";\n /**\n * Weird message, same timestamp and data.\n * @state it does NOT CHANGE.\n * @reason consistent state between peers.\n */\n ProcessMessageResultType[ProcessMessageResultType[\"NoChanges\"] = 3] = \"NoChanges\";\n /**\n * Less but typical message, same timestamp, resolution by data.\n * @state it does NOT CHANGE.\n * @reason incoming message has a LOWER data.\n */\n ProcessMessageResultType[ProcessMessageResultType[\"StateOutdatedData\"] = 4] = \"StateOutdatedData\";\n /**\n * Less but typical message, same timestamp, resolution by data.\n * @state CHANGE.\n * @reason incoming message has a GREATER data.\n */\n ProcessMessageResultType[ProcessMessageResultType[\"StateUpdatedData\"] = 5] = \"StateUpdatedData\";\n /**\n * Entity was previously deleted.\n * @state it does NOT CHANGE.\n * @reason The message is considered old.\n */\n ProcessMessageResultType[ProcessMessageResultType[\"EntityWasDeleted\"] = 6] = \"EntityWasDeleted\";\n /**\n * Entity should be deleted.\n * @state CHANGE.\n * @reason the state is storing old entities\n */\n ProcessMessageResultType[ProcessMessageResultType[\"EntityDeleted\"] = 7] = \"EntityDeleted\";\n})(ProcessMessageResultType || (ProcessMessageResultType = {}));\n// we receive LWW, v=6, we have v=5 => we receive with delay the deleteEntity(v=5)\n// => we should generate the deleteEntity message effects internally with deleteEntity(v=5),\n// but don't resend the deleteEntity\n// - (CRDT) addDeletedEntitySet v=5 (with crdt state cleaning) and then LWW v=6\n// - (engine) engine.deleteEntity v=5\n// we receive LWW, v=7, we have v=5 => we receive with delay the deleteEntity(v=5), deleteEntity(v=6), ..., N\n// => we should generate the deleteEntity message effects internally with deleteEntity(v=5),\n// but don't resend the deleteEntity\n// - (CRDT) addDeletedEntitySet v=5 (with crdt state cleaning) and then LWW v=6\n// - (engine) engine.deleteEntity v=5\n// msg delete entity: it only should be sent by deleter\n//\n", "import { CRDT_MESSAGE_HEADER_LENGTH } from './types';\n/**\n * @public\n */\nexport var CrdtMessageProtocol;\n(function (CrdtMessageProtocol) {\n /**\n * Validate if the message incoming is completed\n * @param buf - ByteBuffer\n */\n function validate(buf) {\n const rem = buf.remainingBytes();\n if (rem < CRDT_MESSAGE_HEADER_LENGTH) {\n return false;\n }\n const messageLength = buf.getUint32(buf.currentReadOffset());\n if (rem < messageLength) {\n return false;\n }\n return true;\n }\n CrdtMessageProtocol.validate = validate;\n /**\n * Get the current header, consuming the bytes involved.\n * @param buf - ByteBuffer\n * @returns header or null if there is no validated message\n */\n function readHeader(buf) {\n if (!validate(buf)) {\n return null;\n }\n return {\n length: buf.readUint32(),\n type: buf.readUint32()\n };\n }\n CrdtMessageProtocol.readHeader = readHeader;\n /**\n * Get the current header, without consuming the bytes involved.\n * @param buf - ByteBuffer\n * @returns header or null if there is no validated message\n */\n function getHeader(buf) {\n if (!validate(buf)) {\n return null;\n }\n const currentOffset = buf.currentReadOffset();\n return {\n length: buf.getUint32(currentOffset),\n type: buf.getUint32(currentOffset + 4)\n };\n }\n CrdtMessageProtocol.getHeader = getHeader;\n /**\n * Consume the incoming message without processing it.\n * @param buf - ByteBuffer\n * @returns true in case of success or false if there is no valid message.\n */\n function consumeMessage(buf) {\n const header = getHeader(buf);\n if (!header) {\n return false;\n }\n buf.incrementReadOffset(header.length);\n return true;\n }\n CrdtMessageProtocol.consumeMessage = consumeMessage;\n})(CrdtMessageProtocol || (CrdtMessageProtocol = {}));\n", "import { CrdtMessageProtocol } from './crdtMessageProtocol';\nimport { CrdtMessageType, CRDT_MESSAGE_HEADER_LENGTH } from './types';\n/**\n * @public\n */\nexport var DeleteComponent;\n(function (DeleteComponent) {\n DeleteComponent.MESSAGE_HEADER_LENGTH = 12;\n /**\n * Write DeleteComponent message\n */\n function write(entity, componentId, timestamp, buf) {\n // reserve the beginning\n const messageLength = CRDT_MESSAGE_HEADER_LENGTH + DeleteComponent.MESSAGE_HEADER_LENGTH;\n const startMessageOffset = buf.incrementWriteOffset(messageLength);\n // Write CrdtMessage header\n buf.setUint32(startMessageOffset, messageLength);\n buf.setUint32(startMessageOffset + 4, CrdtMessageType.DELETE_COMPONENT);\n // Write ComponentOperation header\n buf.setUint32(startMessageOffset + 8, entity);\n buf.setUint32(startMessageOffset + 12, componentId);\n buf.setUint32(startMessageOffset + 16, timestamp);\n }\n DeleteComponent.write = write;\n function read(buf) {\n const header = CrdtMessageProtocol.readHeader(buf);\n if (!header) {\n return null;\n }\n if (header.type !== CrdtMessageType.DELETE_COMPONENT) {\n throw new Error('DeleteComponentOperation tried to read another message type.');\n }\n const msg = {\n ...header,\n entityId: buf.readUint32(),\n componentId: buf.readUint32(),\n timestamp: buf.readUint32()\n };\n return msg;\n }\n DeleteComponent.read = read;\n})(DeleteComponent || (DeleteComponent = {}));\n", "import { CrdtMessageProtocol } from './crdtMessageProtocol';\nimport { CrdtMessageType, CRDT_MESSAGE_HEADER_LENGTH } from './types';\n/**\n * @public\n */\nexport var AppendValueOperation;\n(function (AppendValueOperation) {\n AppendValueOperation.MESSAGE_HEADER_LENGTH = 16;\n /**\n * Call this function for an optimal writing data passing the ByteBuffer\n * already allocated\n */\n function write(entity, timestamp, componentId, data, buf) {\n // reserve the beginning\n const startMessageOffset = buf.incrementWriteOffset(CRDT_MESSAGE_HEADER_LENGTH + AppendValueOperation.MESSAGE_HEADER_LENGTH);\n // write body\n buf.writeBuffer(data, false);\n const messageLength = buf.currentWriteOffset() - startMessageOffset;\n // Write CrdtMessage header\n buf.setUint32(startMessageOffset, messageLength);\n buf.setUint32(startMessageOffset + 4, CrdtMessageType.APPEND_VALUE);\n // Write ComponentOperation header\n buf.setUint32(startMessageOffset + 8, entity);\n buf.setUint32(startMessageOffset + 12, componentId);\n buf.setUint32(startMessageOffset + 16, timestamp);\n const newLocal = messageLength - AppendValueOperation.MESSAGE_HEADER_LENGTH - CRDT_MESSAGE_HEADER_LENGTH;\n buf.setUint32(startMessageOffset + 20, newLocal);\n }\n AppendValueOperation.write = write;\n function read(buf) {\n const header = CrdtMessageProtocol.readHeader(buf);\n /* istanbul ignore if */\n if (!header) {\n return null;\n }\n /* istanbul ignore if */\n if (header.type !== CrdtMessageType.APPEND_VALUE) {\n throw new Error('AppendValueOperation tried to read another message type.');\n }\n return {\n ...header,\n entityId: buf.readUint32(),\n componentId: buf.readUint32(),\n timestamp: buf.readUint32(),\n data: buf.readBuffer()\n };\n }\n AppendValueOperation.read = read;\n})(AppendValueOperation || (AppendValueOperation = {}));\n", "import { CrdtMessageProtocol } from './crdtMessageProtocol';\nimport { CrdtMessageType, CRDT_MESSAGE_HEADER_LENGTH } from './types';\n/**\n * @public\n */\nexport var DeleteEntity;\n(function (DeleteEntity) {\n DeleteEntity.MESSAGE_HEADER_LENGTH = 4;\n function write(entity, buf) {\n // Write CrdtMessage header\n buf.writeUint32(CRDT_MESSAGE_HEADER_LENGTH + 4);\n buf.writeUint32(CrdtMessageType.DELETE_ENTITY);\n // body\n buf.writeUint32(entity);\n }\n DeleteEntity.write = write;\n function read(buf) {\n const header = CrdtMessageProtocol.readHeader(buf);\n if (!header) {\n return null;\n }\n if (header.type !== CrdtMessageType.DELETE_ENTITY) {\n throw new Error('DeleteEntity tried to read another message type.');\n }\n return {\n ...header,\n entityId: buf.readUint32()\n };\n }\n DeleteEntity.read = read;\n})(DeleteEntity || (DeleteEntity = {}));\n", "import { CrdtMessageProtocol } from './crdtMessageProtocol';\nimport { CrdtMessageType, CRDT_MESSAGE_HEADER_LENGTH } from './types';\n/**\n * @public\n */\nexport var PutComponentOperation;\n(function (PutComponentOperation) {\n PutComponentOperation.MESSAGE_HEADER_LENGTH = 16;\n /**\n * Call this function for an optimal writing data passing the ByteBuffer\n * already allocated\n */\n function write(entity, timestamp, componentId, data, buf) {\n // reserve the beginning\n const startMessageOffset = buf.incrementWriteOffset(CRDT_MESSAGE_HEADER_LENGTH + PutComponentOperation.MESSAGE_HEADER_LENGTH);\n // write body\n buf.writeBuffer(data, false);\n const messageLength = buf.currentWriteOffset() - startMessageOffset;\n // Write CrdtMessage header\n buf.setUint32(startMessageOffset, messageLength);\n buf.setUint32(startMessageOffset + 4, CrdtMessageType.PUT_COMPONENT);\n // Write ComponentOperation header\n buf.setUint32(startMessageOffset + 8, entity);\n buf.setUint32(startMessageOffset + 12, componentId);\n buf.setUint32(startMessageOffset + 16, timestamp);\n const newLocal = messageLength - PutComponentOperation.MESSAGE_HEADER_LENGTH - CRDT_MESSAGE_HEADER_LENGTH;\n buf.setUint32(startMessageOffset + 20, newLocal);\n }\n PutComponentOperation.write = write;\n function read(buf) {\n const header = CrdtMessageProtocol.readHeader(buf);\n if (!header) {\n return null;\n }\n if (header.type !== CrdtMessageType.PUT_COMPONENT) {\n throw new Error('PutComponentOperation tried to read another message type.');\n }\n return {\n ...header,\n entityId: buf.readUint32(),\n componentId: buf.readUint32(),\n timestamp: buf.readUint32(),\n data: buf.readBuffer()\n };\n }\n PutComponentOperation.read = read;\n})(PutComponentOperation || (PutComponentOperation = {}));\n", "import { CrdtMessageProtocol } from '../crdtMessageProtocol';\nimport { CrdtMessageType, CRDT_MESSAGE_HEADER_LENGTH } from '../types';\n/**\n * @public\n */\nexport var PutNetworkComponentOperation;\n(function (PutNetworkComponentOperation) {\n PutNetworkComponentOperation.MESSAGE_HEADER_LENGTH = 20;\n /**\n * Call this function for an optimal writing data passing the ByteBuffer\n * already allocated\n */\n function write(entity, timestamp, componentId, networkId, data, buf) {\n // reserve the beginning\n const startMessageOffset = buf.incrementWriteOffset(CRDT_MESSAGE_HEADER_LENGTH + PutNetworkComponentOperation.MESSAGE_HEADER_LENGTH);\n // write body\n buf.writeBuffer(data, false);\n const messageLength = buf.currentWriteOffset() - startMessageOffset;\n // Write CrdtMessage header\n buf.setUint32(startMessageOffset, messageLength);\n buf.setUint32(startMessageOffset + 4, CrdtMessageType.PUT_COMPONENT_NETWORK);\n // Write ComponentOperation header\n buf.setUint32(startMessageOffset + 8, entity);\n buf.setUint32(startMessageOffset + 12, componentId);\n buf.setUint32(startMessageOffset + 16, timestamp);\n buf.setUint32(startMessageOffset + 20, networkId);\n const dataLength = messageLength - PutNetworkComponentOperation.MESSAGE_HEADER_LENGTH - CRDT_MESSAGE_HEADER_LENGTH;\n buf.setUint32(startMessageOffset + 24, dataLength);\n }\n PutNetworkComponentOperation.write = write;\n function read(buf) {\n const header = CrdtMessageProtocol.readHeader(buf);\n if (!header) {\n return null;\n }\n if (header.type !== CrdtMessageType.PUT_COMPONENT_NETWORK) {\n throw new Error('PutComponentNetworkOperation tried to read another message type.');\n }\n return {\n ...header,\n entityId: buf.readUint32(),\n componentId: buf.readUint32(),\n timestamp: buf.readUint32(),\n networkId: buf.readUint32(),\n data: buf.readBuffer()\n };\n }\n PutNetworkComponentOperation.read = read;\n})(PutNetworkComponentOperation || (PutNetworkComponentOperation = {}));\n", "import { CrdtMessageProtocol } from '../crdtMessageProtocol';\nimport { CrdtMessageType, CRDT_MESSAGE_HEADER_LENGTH } from '../types';\n/**\n * @public\n */\nexport var DeleteComponentNetwork;\n(function (DeleteComponentNetwork) {\n DeleteComponentNetwork.MESSAGE_HEADER_LENGTH = 16;\n /**\n * Write DeleteComponent message\n */\n function write(entity, componentId, timestamp, networkId, buf) {\n // reserve the beginning\n const messageLength = CRDT_MESSAGE_HEADER_LENGTH + DeleteComponentNetwork.MESSAGE_HEADER_LENGTH;\n const startMessageOffset = buf.incrementWriteOffset(messageLength);\n // Write CrdtMessage header\n buf.setUint32(startMessageOffset, messageLength);\n buf.setUint32(startMessageOffset + 4, CrdtMessageType.DELETE_COMPONENT_NETWORK);\n // Write ComponentOperation header\n buf.setUint32(startMessageOffset + 8, entity);\n buf.setUint32(startMessageOffset + 12, componentId);\n buf.setUint32(startMessageOffset + 16, timestamp);\n buf.setUint32(startMessageOffset + 20, networkId);\n }\n DeleteComponentNetwork.write = write;\n function read(buf) {\n const header = CrdtMessageProtocol.readHeader(buf);\n if (!header) {\n return null;\n }\n if (header.type !== CrdtMessageType.DELETE_COMPONENT_NETWORK) {\n throw new Error('DeleteComponentOperation tried to read another message type.');\n }\n return {\n ...header,\n entityId: buf.readUint32(),\n componentId: buf.readUint32(),\n timestamp: buf.readUint32(),\n networkId: buf.readUint32()\n };\n }\n DeleteComponentNetwork.read = read;\n})(DeleteComponentNetwork || (DeleteComponentNetwork = {}));\n", "import { CrdtMessageProtocol } from '../crdtMessageProtocol';\nimport { CrdtMessageType, CRDT_MESSAGE_HEADER_LENGTH } from '../types';\n/**\n * @public\n */\nexport var DeleteEntityNetwork;\n(function (DeleteEntityNetwork) {\n DeleteEntityNetwork.MESSAGE_HEADER_LENGTH = 8;\n function write(entity, networkId, buf) {\n // Write CrdtMessage header\n buf.writeUint32(CRDT_MESSAGE_HEADER_LENGTH + 4);\n buf.writeUint32(CrdtMessageType.DELETE_ENTITY_NETWORK);\n // body\n buf.writeUint32(entity);\n buf.writeUint32(networkId);\n }\n DeleteEntityNetwork.write = write;\n function read(buf) {\n const header = CrdtMessageProtocol.readHeader(buf);\n if (!header) {\n return null;\n }\n if (header.type !== CrdtMessageType.DELETE_ENTITY_NETWORK) {\n throw new Error('DeleteEntityNetwork tried to read another message type.');\n }\n return {\n ...header,\n entityId: buf.readUint32(),\n networkId: buf.readUint32()\n };\n }\n DeleteEntityNetwork.read = read;\n})(DeleteEntityNetwork || (DeleteEntityNetwork = {}));\n", "import { ReadWriteByteBuffer } from '../../ByteBuffer';\nimport { PutComponentOperation } from '../putComponent';\nimport { CrdtMessageType } from '../types';\nimport { DeleteComponent } from '../deleteComponent';\nimport { DeleteEntity } from '../deleteEntity';\nimport { PutNetworkComponentOperation } from './putComponentNetwork';\nimport { DeleteComponentNetwork } from './deleteComponentNetwork';\nimport { DeleteEntityNetwork } from './deleteEntityNetwork';\nimport { TransformSchema } from '../../../components/manual/Transform';\n/* istanbul ignore next */\nexport function isNetworkMessage(message) {\n return [\n CrdtMessageType.DELETE_COMPONENT_NETWORK,\n CrdtMessageType.DELETE_ENTITY_NETWORK,\n CrdtMessageType.PUT_COMPONENT_NETWORK\n ].includes(message.type);\n}\n/* istanbul ignore next */\nexport function networkMessageToLocal(message, localEntityId, buffer, destinationBuffer) {\n const offset = buffer.currentWriteOffset();\n if (message.type === CrdtMessageType.PUT_COMPONENT_NETWORK) {\n PutComponentOperation.write(localEntityId, message.timestamp, message.componentId, message.data, buffer);\n }\n else if (message.type === CrdtMessageType.DELETE_COMPONENT_NETWORK) {\n DeleteComponent.write(localEntityId, message.componentId, message.timestamp, buffer);\n }\n else if (message.type === CrdtMessageType.DELETE_ENTITY_NETWORK) {\n DeleteEntity.write(localEntityId, buffer);\n }\n destinationBuffer.writeBuffer(buffer.buffer().subarray(offset, buffer.currentWriteOffset()), false);\n}\n/* istanbul ignore next */\nexport function localMessageToNetwork(message, network, buffer, destinationBuffer) {\n const offset = buffer.currentWriteOffset();\n if (message.type === CrdtMessageType.PUT_COMPONENT) {\n PutNetworkComponentOperation.write(network.entityId, message.timestamp, message.componentId, network.networkId, message.data, buffer);\n }\n else if (message.type === CrdtMessageType.DELETE_COMPONENT) {\n DeleteComponentNetwork.write(network.entityId, message.componentId, message.timestamp, network.networkId, buffer);\n }\n else if (message.type === CrdtMessageType.DELETE_ENTITY) {\n DeleteEntityNetwork.write(network.entityId, network.networkId, buffer);\n }\n destinationBuffer.writeBuffer(buffer.buffer().subarray(offset, buffer.currentWriteOffset()), false);\n}\nconst buffer = new ReadWriteByteBuffer();\n/* istanbul ignore next */\nexport function fixTransformParent(message, transformValue, parent) {\n buffer.resetBuffer();\n let transform = transformValue;\n if (!transform && 'data' in message) {\n transform = TransformSchema.deserialize(new ReadWriteByteBuffer(message.data));\n }\n if (!transform)\n throw new Error('Invalid parent transform');\n // Generate new transform raw data with the parent\n const newTransform = { ...transform, parent };\n TransformSchema.serialize(newTransform, buffer);\n return buffer.toBinary();\n}\n", "import { EntityState } from '../../engine/entity';\nimport { ReadWriteByteBuffer } from '../../serialization/ByteBuffer';\nimport { AppendValueOperation, CrdtMessageProtocol, DeleteComponentNetwork, DeleteEntityNetwork } from '../../serialization/crdt';\nimport { DeleteComponent } from '../../serialization/crdt/deleteComponent';\nimport { DeleteEntity } from '../../serialization/crdt/deleteEntity';\nimport { PutComponentOperation } from '../../serialization/crdt/putComponent';\nimport { CrdtMessageType } from '../../serialization/crdt/types';\nimport { PutNetworkComponentOperation } from '../../serialization/crdt/network/putComponentNetwork';\nimport { NetworkEntity as defineNetworkEntity, NetworkParent as defineNetworkParent, Transform as defineTransform } from '../../components';\nimport * as networkUtils from '../../serialization/crdt/network/utils';\n// NetworkMessages can only have a MAX_SIZE of 12kb. So we need to send it in chunks.\nexport const LIVEKIT_MAX_SIZE = 12;\n/**\n * @internal\n */\nexport function crdtSceneSystem(engine, onProcessEntityComponentChange) {\n const transports = [];\n // Components that we used on this system\n const NetworkEntity = defineNetworkEntity(engine);\n const NetworkParent = defineNetworkParent(engine);\n const Transform = defineTransform(engine);\n // Messages that we received at transport.onMessage waiting to be processed\n const receivedMessages = [];\n // Messages already processed by the engine but that we need to broadcast to other transports.\n const broadcastMessages = [];\n /**\n *\n * @param transportId tranport id to identiy messages\n * @returns a function to process received messages\n */\n function parseChunkMessage(transportId) {\n /**\n * Receives a chunk of binary messages and stores all the valid\n * Component Operation Messages at messages queue\n * @param chunkMessage A chunk of binary messages\n */\n return function parseChunkMessage(chunkMessage) {\n const buffer = new ReadWriteByteBuffer(chunkMessage);\n let header;\n while ((header = CrdtMessageProtocol.getHeader(buffer))) {\n const offset = buffer.currentReadOffset();\n let message = undefined;\n if (header.type === CrdtMessageType.DELETE_COMPONENT) {\n message = DeleteComponent.read(buffer);\n }\n else if (header.type === CrdtMessageType.DELETE_COMPONENT_NETWORK) {\n message = DeleteComponentNetwork.read(buffer);\n }\n else if (header.type === CrdtMessageType.PUT_COMPONENT) {\n message = PutComponentOperation.read(buffer);\n }\n else if (header.type === CrdtMessageType.PUT_COMPONENT_NETWORK) {\n message = PutNetworkComponentOperation.read(buffer);\n }\n else if (header.type === CrdtMessageType.DELETE_ENTITY) {\n message = DeleteEntity.read(buffer);\n }\n else if (header.type === CrdtMessageType.DELETE_ENTITY_NETWORK) {\n message = DeleteEntityNetwork.read(buffer);\n }\n else if (header.type === CrdtMessageType.APPEND_VALUE) {\n message = AppendValueOperation.read(buffer);\n // Unknown message, we skip it\n }\n else {\n // consume the message\n buffer.incrementReadOffset(header.length);\n }\n if (message) {\n receivedMessages.push({\n ...message,\n transportId,\n messageBuffer: buffer.buffer().subarray(offset, buffer.currentReadOffset())\n });\n }\n }\n };\n }\n /**\n * Return and clear the messaes queue\n * @returns messages recieved by the transport to process on the next tick\n */\n function getMessages(value) {\n const messagesToProcess = value.splice(0, value.length);\n return messagesToProcess;\n }\n /**\n * Find the local entityId associated to the network component message.\n * It's a mapping Network -> to Local\n * If it's not a network message, return the entityId received by the message\n */\n function findNetworkId(msg) {\n const hasNetworkId = 'networkId' in msg;\n if (hasNetworkId) {\n for (const [entityId, network] of engine.getEntitiesWith(NetworkEntity)) {\n if (network.networkId === msg.networkId && network.entityId === msg.entityId) {\n return { entityId, network };\n }\n }\n }\n return { entityId: msg.entityId };\n }\n /**\n * This fn will be called on every tick.\n * Process all the messages queue received by the transport\n */\n async function receiveMessages() {\n const messagesToProcess = getMessages(receivedMessages);\n const entitiesShouldBeCleaned = [];\n for (const msg of messagesToProcess) {\n let { entityId, network } = findNetworkId(msg);\n // We receive a new Entity. Create the localEntity and map it to the NetworkEntity component\n if (networkUtils.isNetworkMessage(msg) && !network) {\n entityId = engine.addEntity();\n network = { entityId: msg.entityId, networkId: msg.networkId };\n NetworkEntity.createOrReplace(entityId, network);\n }\n if (msg.type === CrdtMessageType.DELETE_ENTITY || msg.type === CrdtMessageType.DELETE_ENTITY_NETWORK) {\n entitiesShouldBeCleaned.push(entityId);\n broadcastMessages.push(msg);\n }\n else {\n const entityState = engine.entityContainer.getEntityState(entityId);\n // Skip updates from removed entityes\n if (entityState === EntityState.Removed)\n continue;\n // Entities with unknown entities should update its entity state\n if (entityState === EntityState.Unknown) {\n engine.entityContainer.updateUsedEntity(entityId);\n }\n const component = engine.getComponentOrNull(msg.componentId);\n /* istanbul ignore else */\n if (component) {\n if (msg.type === CrdtMessageType.PUT_COMPONENT &&\n component.componentId === Transform.componentId &&\n NetworkEntity.has(entityId) &&\n NetworkParent.has(entityId)) {\n msg.data = networkUtils.fixTransformParent(msg);\n }\n const [conflictMessage, value] = component.updateFromCrdt({ ...msg, entityId });\n if (!conflictMessage) {\n // Add message to transport queue to be processed by others transports\n broadcastMessages.push(msg);\n onProcessEntityComponentChange && onProcessEntityComponentChange(entityId, msg.type, component, value);\n }\n }\n else {\n // TODO: test this line, it is fundammental to make the editor work\n broadcastMessages.push(msg);\n }\n }\n }\n // the last stage of the syncrhonization is to delete the entities\n for (const entity of entitiesShouldBeCleaned) {\n for (const definition of engine.componentsIter()) {\n // TODO: check this with pato/pravus\n definition.entityDeleted(entity, true);\n }\n engine.entityContainer.updateRemovedEntity(entity);\n onProcessEntityComponentChange && onProcessEntityComponentChange(entity, CrdtMessageType.DELETE_ENTITY);\n }\n }\n /**\n * Iterates the dirty map and generates crdt messages to be send\n */\n async function sendMessages(entitiesDeletedThisTick) {\n // CRDT Messages will be the merge between the recieved transport messages and the new crdt messages\n const crdtMessages = getMessages(broadcastMessages);\n const buffer = new ReadWriteByteBuffer();\n for (const component of engine.componentsIter()) {\n for (const message of component.getCrdtUpdates()) {\n const offset = buffer.currentWriteOffset();\n // Avoid creating messages if there is no transport that will handle it\n if (transports.some((t) => t.filter(message))) {\n if (message.type === CrdtMessageType.PUT_COMPONENT) {\n PutComponentOperation.write(message.entityId, message.timestamp, message.componentId, message.data, buffer);\n }\n else if (message.type === CrdtMessageType.DELETE_COMPONENT) {\n DeleteComponent.write(message.entityId, component.componentId, message.timestamp, buffer);\n }\n else if (message.type === CrdtMessageType.APPEND_VALUE) {\n AppendValueOperation.write(message.entityId, message.timestamp, message.componentId, message.data, buffer);\n }\n crdtMessages.push({\n ...message,\n messageBuffer: buffer.buffer().subarray(offset, buffer.currentWriteOffset())\n });\n }\n if (onProcessEntityComponentChange) {\n const rawValue = message.type === CrdtMessageType.PUT_COMPONENT || message.type === CrdtMessageType.APPEND_VALUE\n ? component.get(message.entityId)\n : undefined;\n onProcessEntityComponentChange(message.entityId, message.type, component, rawValue);\n }\n }\n }\n // After all updates, I execute the DeletedEntity messages\n for (const entityId of entitiesDeletedThisTick) {\n const offset = buffer.currentWriteOffset();\n DeleteEntity.write(entityId, buffer);\n crdtMessages.push({\n type: CrdtMessageType.DELETE_ENTITY,\n entityId,\n messageBuffer: buffer.buffer().subarray(offset, buffer.currentWriteOffset())\n });\n onProcessEntityComponentChange && onProcessEntityComponentChange(entityId, CrdtMessageType.DELETE_ENTITY);\n }\n // Send CRDT messages to transports\n const transportBuffer = new ReadWriteByteBuffer();\n for (const index in transports) {\n const __NetworkMessagesBuffer = [];\n const transportIndex = Number(index);\n const transport = transports[transportIndex];\n const isRendererTransport = transport.type === 'renderer';\n const isNetworkTransport = transport.type === 'network';\n // Reset Buffer for each Transport\n transportBuffer.resetBuffer();\n const buffer = new ReadWriteByteBuffer();\n // Then we send all the new crdtMessages that the transport needs to process\n for (const message of crdtMessages) {\n // Check if adding this message would exceed the size limit\n const currentBufferSize = transportBuffer.toBinary().byteLength;\n const messageSize = message.messageBuffer.byteLength;\n if (isNetworkTransport && (currentBufferSize + messageSize) / 1024 > LIVEKIT_MAX_SIZE) {\n // If the current buffer has content, save it as a chunk\n if (currentBufferSize > 0) {\n __NetworkMessagesBuffer.push(transportBuffer.toCopiedBinary());\n transportBuffer.resetBuffer();\n }\n // If the message itself is larger than the limit, we need to handle it specially\n // For now, we'll skip it to prevent infinite loops\n if (messageSize / 1024 > LIVEKIT_MAX_SIZE) {\n console.error(`Message too large (${messageSize} bytes), skipping message for entity ${message.entityId}`);\n continue;\n }\n }\n // Avoid echo messages\n if (message.transportId === transportIndex)\n continue;\n // Redundant message for the transport\n if (!transport.filter(message))\n continue;\n const { entityId } = findNetworkId(message);\n const transformNeedsFix = 'componentId' in message &&\n message.componentId === Transform.componentId &&\n Transform.has(entityId) &&\n NetworkParent.has(entityId) &&\n NetworkEntity.has(entityId);\n // If there was a LOCAL change in the transform. Add the parent to that transform\n if (isRendererTransport && message.type === CrdtMessageType.PUT_COMPONENT && transformNeedsFix) {\n const parent = findNetworkId(NetworkParent.get(entityId));\n const transformData = networkUtils.fixTransformParent(message, Transform.get(entityId), parent.entityId);\n const offset = buffer.currentWriteOffset();\n PutComponentOperation.write(entityId, message.timestamp, message.componentId, transformData, buffer);\n transportBuffer.writeBuffer(buffer.buffer().subarray(offset, buffer.currentWriteOffset()), false);\n continue;\n }\n if (isRendererTransport && networkUtils.isNetworkMessage(message)) {\n // If it's the renderer transport and its a NetworkMessage, we need to fix the entityId field and convert it to a known Message.\n // PUT_NETWORK_COMPONENT -> PUT_COMPONENT\n let transformData = 'data' in message ? message.data : new Uint8Array();\n if (transformNeedsFix) {\n const parent = findNetworkId(NetworkParent.get(entityId));\n transformData = networkUtils.fixTransformParent(message, Transform.get(entityId), parent.entityId);\n }\n networkUtils.networkMessageToLocal({ ...message, data: transformData }, entityId, buffer, transportBuffer);\n // Iterate the next message\n continue;\n }\n // If its a network transport and its a PUT_COMPONENT that has a NetworkEntity component, we need to send this message\n // through comms with the EntityID and NetworkID from ther NetworkEntity so everyone can recieve this message and map to their custom entityID.\n if (isNetworkTransport && !networkUtils.isNetworkMessage(message)) {\n const networkData = NetworkEntity.getOrNull(message.entityId);\n // If it has networkData convert the message to PUT_NETWORK_COMPONENT.\n if (networkData) {\n networkUtils.localMessageToNetwork(message, networkData, buffer, transportBuffer);\n // Iterate the next message\n continue;\n }\n }\n // Common message\n transportBuffer.writeBuffer(message.messageBuffer, false);\n }\n if (isNetworkTransport && transportBuffer.currentWriteOffset()) {\n __NetworkMessagesBuffer.push(transportBuffer.toBinary());\n }\n const message = isNetworkTransport ? __NetworkMessagesBuffer : transportBuffer.toBinary();\n await transport.send(message);\n }\n }\n /**\n * @public\n * Add a transport to the crdt system\n */\n function addTransport(transport) {\n const id = transports.push(transport) - 1;\n transport.onmessage = parseChunkMessage(id);\n }\n return {\n sendMessages,\n receiveMessages,\n addTransport\n };\n}\n", "export var CrdtUtils;\n(function (CrdtUtils) {\n let SynchronizedEntityType;\n (function (SynchronizedEntityType) {\n // synchronizes entities with the NetworkSynchronized component only, used for networked games\n SynchronizedEntityType[SynchronizedEntityType[\"NETWORKED\"] = 0] = \"NETWORKED\";\n // synchronizes entities needed by the renderer\n SynchronizedEntityType[SynchronizedEntityType[\"RENDERER\"] = 1] = \"RENDERER\";\n })(SynchronizedEntityType = CrdtUtils.SynchronizedEntityType || (CrdtUtils.SynchronizedEntityType = {}));\n})(CrdtUtils || (CrdtUtils = {}));\nexport default CrdtUtils;\n/**\n * Compare raw data.\n * @public\n * @returns 0 if is the same data, 1 if a > b, -1 if b > a\n */\nexport function dataCompare(a, b) {\n // At reference level\n if (a === b)\n return 0;\n if (a === null && b !== null)\n return -1;\n if (a !== null && b === null)\n return 1;\n if (a instanceof Uint8Array && b instanceof Uint8Array) {\n const lengthDifference = a.byteLength - b.byteLength;\n if (lengthDifference !== 0) {\n return lengthDifference > 0 ? 1 : -1;\n }\n let res;\n for (let i = 0, n = a.byteLength; i < n; i++) {\n res = a[i] - b[i];\n if (res !== 0) {\n return res > 0 ? 1 : -1;\n }\n }\n // the data is exactly the same\n return 0;\n }\n if (typeof a === 'string') {\n const lengthDifference = a.length - b.length;\n if (lengthDifference !== 0) {\n return lengthDifference > 0 ? 1 : -1;\n }\n return a.localeCompare(b);\n }\n return a > b ? 1 : -1;\n}\n", "/**\n * @internal\n */\nexport function deepReadonly(val) {\n return Object.freeze({ ...val });\n}\n", "import { ReadWriteByteBuffer } from '../serialization/ByteBuffer';\nimport { ProcessMessageResultType, CrdtMessageType, PutComponentOperation, DeleteComponent } from '../serialization/crdt';\nimport { dataCompare } from '../systems/crdt/utils';\nimport { deepReadonly } from './readonly';\nexport function incrementTimestamp(entity, timestamps) {\n const newTimestamp = (timestamps.get(entity) || 0) + 1;\n timestamps.set(entity, newTimestamp);\n return newTimestamp;\n}\nexport function createDumpLwwFunctionFromCrdt(componentId, timestamps, schema, data) {\n return function dumpCrdtState(buffer, filterEntity) {\n for (const [entity, timestamp] of timestamps) {\n /* istanbul ignore if */\n if (filterEntity) {\n // I swear that this is being tested on state-to-crdt.spec but jest is trolling me\n /* istanbul ignore next */\n if (!filterEntity(entity))\n continue;\n }\n /* istanbul ignore else */\n if (data.has(entity)) {\n const it = data.get(entity);\n const buf = new ReadWriteByteBuffer();\n schema.serialize(it, buf);\n PutComponentOperation.write(entity, timestamp, componentId, buf.toBinary(), buffer);\n }\n else {\n DeleteComponent.write(entity, componentId, timestamp, buffer);\n }\n }\n };\n}\nexport function createUpdateLwwFromCrdt(componentId, timestamps, schema, data) {\n /**\n * Process the received message only if the lamport number recieved is higher\n * than the stored one. If its lower, we spread it to the network to correct the peer.\n * If they are equal, the bigger raw data wins.\n \n * Returns the recieved data if the lamport number was bigger than ours.\n * If it was an outdated message, then we return void\n * @public\n */\n function crdtRuleForCurrentState(message) {\n const { entityId, timestamp } = message;\n const currentTimestamp = timestamps.get(entityId);\n // The received message is > than our current value, update our state.components.\n if (currentTimestamp === undefined || currentTimestamp < timestamp) {\n return ProcessMessageResultType.StateUpdatedTimestamp;\n }\n // Outdated Message. Resend our state message through the wire.\n if (currentTimestamp > timestamp) {\n // console.log('2', currentTimestamp, timestamp)\n return ProcessMessageResultType.StateOutdatedTimestamp;\n }\n // Deletes are idempotent\n if (message.type === CrdtMessageType.DELETE_COMPONENT && !data.has(entityId)) {\n return ProcessMessageResultType.NoChanges;\n }\n let currentDataGreater = 0;\n if (data.has(entityId)) {\n const writeBuffer = new ReadWriteByteBuffer();\n schema.serialize(data.get(entityId), writeBuffer);\n currentDataGreater = dataCompare(writeBuffer.toBinary(), message.data || null);\n }\n else {\n currentDataGreater = dataCompare(null, message.data);\n }\n // Same data, same timestamp. Weirdo echo message.\n // console.log('3', currentDataGreater, writeBuffer.toBinary(), (message as any).data || null)\n if (currentDataGreater === 0) {\n return ProcessMessageResultType.NoChanges;\n }\n else if (currentDataGreater > 0) {\n // Current data is greater\n return ProcessMessageResultType.StateOutdatedData;\n }\n else {\n // Curent data is lower\n return ProcessMessageResultType.StateUpdatedData;\n }\n }\n return (msg) => {\n /* istanbul ignore next */\n if (msg.type !== CrdtMessageType.PUT_COMPONENT &&\n msg.type !== CrdtMessageType.PUT_COMPONENT_NETWORK &&\n msg.type !== CrdtMessageType.DELETE_COMPONENT &&\n msg.type !== CrdtMessageType.DELETE_COMPONENT_NETWORK)\n /* istanbul ignore next */\n return [null, data.get(msg.entityId)];\n const action = crdtRuleForCurrentState(msg);\n const entity = msg.entityId;\n switch (action) {\n case ProcessMessageResultType.StateUpdatedData:\n case ProcessMessageResultType.StateUpdatedTimestamp: {\n timestamps.set(entity, msg.timestamp);\n if (msg.type === CrdtMessageType.PUT_COMPONENT || msg.type === CrdtMessageType.PUT_COMPONENT_NETWORK) {\n const buf = new ReadWriteByteBuffer(msg.data);\n data.set(entity, schema.deserialize(buf));\n }\n else {\n data.delete(entity);\n }\n return [null, data.get(entity)];\n }\n case ProcessMessageResultType.StateOutdatedTimestamp:\n case ProcessMessageResultType.StateOutdatedData: {\n if (data.has(entity)) {\n const writeBuffer = new ReadWriteByteBuffer();\n schema.serialize(data.get(entity), writeBuffer);\n return [\n {\n type: CrdtMessageType.PUT_COMPONENT,\n componentId,\n data: writeBuffer.toBinary(),\n entityId: entity,\n timestamp: timestamps.get(entity)\n },\n data.get(entity)\n ];\n }\n else {\n return [\n {\n type: CrdtMessageType.DELETE_COMPONENT,\n componentId,\n entityId: entity,\n timestamp: timestamps.get(entity)\n },\n undefined\n ];\n }\n }\n }\n return [null, data.get(entity)];\n };\n}\nexport function createGetCrdtMessagesForLww(componentId, timestamps, dirtyIterator, schema, data) {\n return function* () {\n for (const entity of dirtyIterator) {\n const newTimestamp = incrementTimestamp(entity, timestamps);\n if (data.has(entity)) {\n const writeBuffer = new ReadWriteByteBuffer();\n schema.serialize(data.get(entity), writeBuffer);\n const msg = {\n type: CrdtMessageType.PUT_COMPONENT,\n componentId,\n entityId: entity,\n data: writeBuffer.toBinary(),\n timestamp: newTimestamp\n };\n yield msg;\n }\n else {\n const msg = {\n type: CrdtMessageType.DELETE_COMPONENT,\n componentId,\n entityId: entity,\n timestamp: newTimestamp\n };\n yield msg;\n }\n }\n dirtyIterator.clear();\n };\n}\n/**\n * @internal\n */\nexport function createComponentDefinitionFromSchema(componentName, componentId, schema) {\n const data = new Map();\n const dirtyIterator = new Set();\n const timestamps = new Map();\n const onChangeCallbacks = new Map();\n return {\n get componentId() {\n return componentId;\n },\n get componentName() {\n return componentName;\n },\n get componentType() {\n // a getter is used here to prevent accidental changes\n return 0 /* ComponentType.LastWriteWinElementSet */;\n },\n schema,\n has(entity) {\n return data.has(entity);\n },\n deleteFrom(entity, markAsDirty = true) {\n const component = data.get(entity);\n if (data.delete(entity) && markAsDirty) {\n dirtyIterator.add(entity);\n }\n return component || null;\n },\n entityDeleted(entity, markAsDirty) {\n if (data.delete(entity) && markAsDirty) {\n dirtyIterator.add(entity);\n }\n },\n getOrNull(entity) {\n const component = data.get(entity);\n return component ? deepReadonly(component) : null;\n },\n get(entity) {\n const component = data.get(entity);\n if (!component) {\n throw new Error(`[getFrom] Component ${componentName} for entity #${entity} not found`);\n }\n return deepReadonly(component);\n },\n create(entity, value) {\n const component = data.get(entity);\n if (component) {\n throw new Error(`[create] Component ${componentName} for ${entity} already exists`);\n }\n const usedValue = value === undefined ? schema.create() : schema.extend ? schema.extend(value) : value;\n data.set(entity, usedValue);\n dirtyIterator.add(entity);\n return usedValue;\n },\n createOrReplace(entity, value) {\n const usedValue = value === undefined ? schema.create() : schema.extend ? schema.extend(value) : value;\n data.set(entity, usedValue);\n dirtyIterator.add(entity);\n return usedValue;\n },\n getMutableOrNull(entity) {\n const component = data.get(entity);\n if (!component) {\n return null;\n }\n dirtyIterator.add(entity);\n return component;\n },\n getOrCreateMutable(entity, value) {\n const component = data.get(entity);\n if (!component) {\n return this.create(entity, value);\n }\n else {\n dirtyIterator.add(entity);\n return component;\n }\n },\n getMutable(entity) {\n const component = this.getMutableOrNull(entity);\n if (component === null) {\n throw new Error(`[mutable] Component ${componentName} for ${entity} not found`);\n }\n return component;\n },\n *iterator() {\n for (const [entity, component] of data) {\n yield [entity, component];\n }\n },\n *dirtyIterator() {\n for (const entity of dirtyIterator) {\n yield entity;\n }\n },\n getCrdtUpdates: createGetCrdtMessagesForLww(componentId, timestamps, dirtyIterator, schema, data),\n updateFromCrdt: createUpdateLwwFromCrdt(componentId, timestamps, schema, data),\n dumpCrdtStateToBuffer: createDumpLwwFunctionFromCrdt(componentId, timestamps, schema, data),\n onChange(entity, cb) {\n const cbs = onChangeCallbacks.get(entity) ?? [];\n cbs.push(cb);\n onChangeCallbacks.set(entity, cbs);\n },\n __onChangeCallbacks(entity, value) {\n const cbs = onChangeCallbacks.get(entity);\n if (!cbs)\n return;\n for (const cb of cbs) {\n cb(value);\n }\n }\n };\n}\n", "export const SYSTEMS_REGULAR_PRIORITY = 100e3;\nexport function SystemContainer() {\n const systems = [];\n function sort() {\n // TODO: systems with the same priority should always have the same stable order\n // add a \"counter\" to the System type to ensure that order\n systems.sort((a, b) => b.priority - a.priority);\n }\n function add(fn, priority, name) {\n const systemName = name ?? fn.name;\n if (systems.find((item) => item.fn === fn)) {\n throw new Error(`System ${JSON.stringify(systemName)} already added to the engine`);\n }\n systems.push({\n fn,\n priority,\n name: systemName\n });\n // TODO: replace this sort by an insertion in the right place\n sort();\n }\n function remove(selector) {\n let index = -1;\n if (typeof selector === 'string') {\n index = systems.findIndex((item) => item.name === selector);\n }\n else {\n index = systems.findIndex((item) => item.fn === selector);\n }\n if (index === -1) {\n return false;\n }\n systems.splice(index, 1);\n sort();\n return true;\n }\n return {\n add,\n remove,\n getSystems() {\n return systems;\n }\n };\n}\n", "import { ReadWriteByteBuffer } from '../serialization/ByteBuffer';\nimport { AppendValueOperation, CrdtMessageType } from '../serialization/crdt';\nimport { __DEV__ } from '../runtime/invariant';\nconst emptyReadonlySet = freezeSet(new Set());\nfunction frozenError() {\n throw new Error('The set is frozen');\n}\nfunction freezeSet(set) {\n ;\n set.add = frozenError;\n set.clear = frozenError;\n return set;\n}\nfunction sortByTimestamp(a, b) {\n return a.timestamp > b.timestamp ? 1 : -1;\n}\n/**\n * @internal\n */\nexport function createValueSetComponentDefinitionFromSchema(componentName, componentId, schema, options) {\n const data = new Map();\n const dirtyIterator = new Set();\n const queuedCommands = [];\n const onChangeCallbacks = new Map();\n // only sort the array if the latest (N) element has a timestamp <= N-1\n function shouldSort(row) {\n const len = row.raw.length;\n if (len > 1 && row.raw[len - 1].timestamp <= row.raw[len - 2].timestamp) {\n return true;\n }\n return false;\n }\n function gotUpdated(entity) {\n const row = data.get(entity);\n /* istanbul ignore else */\n if (row) {\n if (shouldSort(row)) {\n row.raw.sort(sortByTimestamp);\n }\n while (row.raw.length > options.maxElements) {\n row.raw.shift();\n }\n const frozenSet = freezeSet(new Set(row?.raw.map(($) => $.value)));\n row.frozenSet = frozenSet;\n return frozenSet;\n }\n else {\n /* istanbul ignore next */\n return emptyReadonlySet;\n }\n }\n function append(entity, value) {\n let row = data.get(entity);\n if (!row) {\n row = { raw: [], frozenSet: emptyReadonlySet };\n data.set(entity, row);\n }\n const usedValue = schema.extend ? schema.extend(value) : value;\n const timestamp = options.timestampFunction(usedValue);\n if (__DEV__) {\n // only freeze the objects in dev mode to warn the developers because\n // it is an expensive operation\n Object.freeze(usedValue);\n }\n row.raw.push({ value: usedValue, timestamp });\n return { set: gotUpdated(entity), value: usedValue };\n }\n const ret = {\n get componentId() {\n return componentId;\n },\n get componentName() {\n return componentName;\n },\n get componentType() {\n // a getter is used here to prevent accidental changes\n return 1 /* ComponentType.GrowOnlyValueSet */;\n },\n schema,\n has(entity) {\n return data.has(entity);\n },\n entityDeleted(entity) {\n data.delete(entity);\n },\n get(entity) {\n const values = data.get(entity);\n if (values) {\n return values.frozenSet;\n }\n else {\n return emptyReadonlySet;\n }\n },\n addValue(entity, rawValue) {\n const { set, value } = append(entity, rawValue);\n dirtyIterator.add(entity);\n const buf = new ReadWriteByteBuffer();\n schema.serialize(value, buf);\n queuedCommands.push({\n componentId,\n data: buf.toBinary(),\n entityId: entity,\n timestamp: 0,\n type: CrdtMessageType.APPEND_VALUE\n });\n return set;\n },\n *iterator() {\n for (const [entity, component] of data) {\n yield [entity, component.frozenSet];\n }\n },\n *dirtyIterator() {\n for (const entity of dirtyIterator) {\n yield entity;\n }\n },\n getCrdtUpdates() {\n // return a copy of the commands, and then clear the local copy\n dirtyIterator.clear();\n return queuedCommands.splice(0, queuedCommands.length);\n },\n updateFromCrdt(_body) {\n if (_body.type === CrdtMessageType.APPEND_VALUE) {\n const buf = new ReadWriteByteBuffer(_body.data);\n const { value } = append(_body.entityId, schema.deserialize(buf));\n return [null, value];\n }\n return [null, undefined];\n },\n dumpCrdtStateToBuffer: function (buffer, filterEntity) {\n for (const [entity, { raw }] of data) {\n if (filterEntity && !filterEntity(entity))\n continue;\n for (const it of raw) {\n const buf = new ReadWriteByteBuffer();\n schema.serialize(it.value, buf);\n AppendValueOperation.write(entity, 0, componentId, buf.toBinary(), buffer);\n }\n }\n },\n onChange(entity, cb) {\n const cbs = onChangeCallbacks.get(entity) ?? [];\n cbs.push(cb);\n onChangeCallbacks.set(entity, cbs);\n },\n __onChangeCallbacks(entity, value) {\n const cbs = onChangeCallbacks.get(entity);\n if (!cbs)\n return;\n for (const cb of cbs) {\n cb(value);\n }\n }\n };\n return ret;\n}\n", "import * as components from '../../components';\nfunction* genEntityTree(entity, entities) {\n // This avoid infinite loop when there is a cyclic parenting\n if (!entities.has(entity))\n return;\n entities.delete(entity);\n for (const [_entity, value] of entities) {\n if (value.parent === entity) {\n yield* genEntityTree(_entity, entities);\n }\n }\n yield entity;\n}\n/**\n * Get an iterator of entities that follow a tree structure for a component\n * @public\n * @param engine - the engine running the entities\n * @param entity - the root entity of the tree\n * @param component - the parenting component to filter by\n * @returns An iterator of an array as [entity, entity2, ...]\n *\n * Example:\n * ```ts\n * const TreeComponent = engine.defineComponent('custom::TreeComponent', {\n * label: Schemas.String,\n * parent: Schemas.Entity\n * })\n *\n * for (const entity of getComponentEntityTree(engine, entity, TreeComponent)) {\n * // entity in the tree\n * }\n * ```\n */\nexport function getComponentEntityTree(engine, entity, component) {\n const entities = new Map(engine.getEntitiesWith(component));\n return genEntityTree(entity, entities);\n}\n// I swear by all the gods that this is being tested on test/sdk/network/sync-engines.spec.ts\n/* istanbul ignore next */\nfunction removeNetworkEntityChildrens(engine, parent) {\n const NetworkParent = components.NetworkParent(engine);\n const NetworkEntity = components.NetworkEntity(engine);\n // Remove parent\n engine.removeEntity(parent);\n // Remove childs\n const network = NetworkEntity.getOrNull(parent);\n if (network) {\n for (const [entity, parent] of engine.getEntitiesWith(NetworkParent)) {\n if (parent.entityId === network.entityId && parent.networkId === network.networkId) {\n removeNetworkEntityChildrens(engine, entity);\n }\n }\n }\n return;\n}\n/**\n * Remove all components of each entity in the tree made with Transform parenting\n * @param engine - the engine running the entities\n * @param firstEntity - the root entity of the tree\n * @public\n */\nexport function removeEntityWithChildren(engine, entity) {\n const Transform = components.Transform(engine);\n const NetworkEntity = components.NetworkEntity(engine);\n /* istanbul ignore if */\n if (NetworkEntity.has(entity)) {\n return removeNetworkEntityChildrens(engine, entity);\n }\n for (const ent of getComponentEntityTree(engine, entity, Transform)) {\n engine.removeEntity(ent);\n }\n}\n", "import * as components from '../components';\nconst InputCommands = [\n 0 /* InputAction.IA_POINTER */,\n 1 /* InputAction.IA_PRIMARY */,\n 2 /* InputAction.IA_SECONDARY */,\n 4 /* InputAction.IA_FORWARD */,\n 5 /* InputAction.IA_BACKWARD */,\n 6 /* InputAction.IA_RIGHT */,\n 7 /* InputAction.IA_LEFT */,\n 8 /* InputAction.IA_JUMP */,\n 9 /* InputAction.IA_WALK */,\n 10 /* InputAction.IA_ACTION_3 */,\n 11 /* InputAction.IA_ACTION_4 */,\n 12 /* InputAction.IA_ACTION_5 */,\n 13 /* InputAction.IA_ACTION_6 */\n];\nconst InputStateUpdateSystemPriority = 1 << 20;\n/**\n * @public\n * ____DO NOT USE ____ use inputSystem instead\n */\nexport function createInputSystem(engine) {\n const PointerEventsResult = components.PointerEventsResult(engine);\n const globalState = {\n previousFrameMaxTimestamp: 0,\n currentFrameMaxTimestamp: 0,\n buttonState: new Map(),\n thisFrameCommands: []\n };\n function findLastAction(pointerEventType, inputAction, entity) {\n const ascendingTimestampIterator = PointerEventsResult.get(entity);\n for (const command of Array.from(ascendingTimestampIterator).reverse()) {\n if (command.button === inputAction && command.state === pointerEventType) {\n return command;\n }\n }\n }\n function* findCommandsByActionDescending(inputAction, entity) {\n const ascendingTimestampIterator = PointerEventsResult.get(entity);\n for (const command of Array.from(ascendingTimestampIterator).reverse()) {\n if (command.button === inputAction) {\n yield command;\n }\n }\n }\n function buttonStateUpdateSystem() {\n // first store the previous' frame timestamp\n let maxTimestamp = globalState.currentFrameMaxTimestamp;\n globalState.previousFrameMaxTimestamp = maxTimestamp;\n if (globalState.thisFrameCommands.length) {\n globalState.thisFrameCommands = [];\n }\n // then iterate over all new commands\n for (const [, commands] of engine.getEntitiesWith(PointerEventsResult)) {\n // TODO: adapt the gset component to have a cached \"reversed\" option by default\n const arrayCommands = Array.from(commands);\n for (let i = arrayCommands.length - 1; i >= 0; i--) {\n const command = arrayCommands[i];\n if (command.timestamp > maxTimestamp) {\n maxTimestamp = command.timestamp;\n }\n if (command.timestamp > globalState.previousFrameMaxTimestamp) {\n globalState.thisFrameCommands.push(command);\n }\n if (command.state === 0 /* PointerEventType.PET_UP */ || command.state === 1 /* PointerEventType.PET_DOWN */) {\n const prevCommand = globalState.buttonState.get(command.button);\n if (!prevCommand || command.timestamp > prevCommand.timestamp) {\n globalState.buttonState.set(command.button, command);\n }\n else {\n // since we are iterating a descending array, we can early finish the\n // loop\n break;\n }\n }\n }\n }\n // update current frame's max timestamp\n globalState.currentFrameMaxTimestamp = maxTimestamp;\n }\n engine.addSystem(buttonStateUpdateSystem, InputStateUpdateSystemPriority, '@dcl/ecs#inputSystem');\n function timestampIsCurrentFrame(timestamp) {\n if (timestamp > globalState.previousFrameMaxTimestamp && timestamp <= globalState.currentFrameMaxTimestamp) {\n return true;\n }\n else {\n return false;\n }\n }\n function getClick(inputAction, entity) {\n if (inputAction !== 3 /* InputAction.IA_ANY */) {\n return findClick(inputAction, entity);\n }\n for (const input of InputCommands) {\n const cmd = findClick(input, entity);\n if (cmd)\n return cmd;\n }\n return null;\n }\n function findClick(inputAction, entity) {\n let down = null;\n let up = null;\n // We search the last UP & DOWN command sorted by timestamp descending\n for (const it of findCommandsByActionDescending(inputAction, entity)) {\n if (!up) {\n if (it.state === 0 /* PointerEventType.PET_UP */) {\n up = it;\n continue;\n }\n }\n else if (!down) {\n if (it.state === 1 /* PointerEventType.PET_DOWN */) {\n down = it;\n break;\n }\n }\n }\n if (!up || !down)\n return null;\n // If the DOWN command has happen before the UP commands, it means that that a clicked has happen\n if (down.timestamp < up.timestamp && timestampIsCurrentFrame(up.timestamp)) {\n return { up, down };\n }\n return null;\n }\n function getInputCommandFromEntity(inputAction, pointerEventType, entity) {\n if (inputAction !== 3 /* InputAction.IA_ANY */) {\n return findInputCommand(inputAction, pointerEventType, entity);\n }\n for (const input of InputCommands) {\n const cmd = findInputCommand(input, pointerEventType, entity);\n if (cmd)\n return cmd;\n }\n return null;\n }\n function getInputCommand(inputAction, pointerEventType, entity) {\n if (entity) {\n return getInputCommandFromEntity(inputAction, pointerEventType, entity);\n }\n else {\n for (const command of globalState.thisFrameCommands) {\n if ((command.button === inputAction || inputAction === 3 /* InputAction.IA_ANY */) &&\n command.state === pointerEventType) {\n return command;\n }\n }\n return null;\n }\n }\n function findInputCommand(inputAction, pointerEventType, entity) {\n // We search the last pointer Event command sorted by timestamp\n const command = findLastAction(pointerEventType, inputAction, entity);\n if (!command)\n return null;\n if (timestampIsCurrentFrame(command.timestamp)) {\n return command;\n }\n else {\n return null;\n }\n }\n // returns true if there was a DOWN (in any past frame), and then an UP in the last frame\n function isClicked(inputAction, entity) {\n return getClick(inputAction, entity) !== null;\n }\n // returns true if the provided last action was triggered in the last frame\n function isTriggered(inputAction, pointerEventType, entity) {\n if (entity) {\n const command = findLastAction(pointerEventType, inputAction, entity);\n return (command && timestampIsCurrentFrame(command.timestamp)) || false;\n }\n else {\n for (const command of globalState.thisFrameCommands) {\n if ((command.button === inputAction || inputAction === 3 /* InputAction.IA_ANY */) &&\n command.state === pointerEventType) {\n return true;\n }\n }\n return false;\n }\n }\n // returns the global state of the input. This global state is updated from the system\n function isPressed(inputAction) {\n return globalState.buttonState.get(inputAction)?.state === 1 /* PointerEventType.PET_DOWN */;\n }\n return {\n isPressed,\n getClick,\n getInputCommand,\n isClicked,\n isTriggered\n };\n}\n", "/**\n * Component types are used to pick the wire protocol and the conflict resolution algorithm\n * @public\n */\nexport var ComponentType;\n(function (ComponentType) {\n ComponentType[ComponentType[\"LastWriteWinElementSet\"] = 0] = \"LastWriteWinElementSet\";\n ComponentType[ComponentType[\"GrowOnlyValueSet\"] = 1] = \"GrowOnlyValueSet\";\n})(ComponentType || (ComponentType = {}));\n", "import * as components from '../components';\nimport { componentNumberFromName } from '../components/component-number';\nimport { checkNotThenable } from '../runtime/invariant';\nimport { Schemas } from '../schemas';\nimport { crdtSceneSystem } from '../systems/crdt';\nimport { createComponentDefinitionFromSchema } from './lww-element-set-component-definition';\nimport { createEntityContainer } from './entity';\nimport { SystemContainer, SYSTEMS_REGULAR_PRIORITY } from './systems';\nimport { createValueSetComponentDefinitionFromSchema } from './grow-only-value-set-component-definition';\nimport { removeEntityWithChildren as removeEntityWithChildrenEngine } from '../runtime/helpers/tree';\nimport { CrdtMessageType } from '../serialization/crdt';\nexport * from './input';\nexport * from './readonly';\nexport * from './types';\nfunction preEngine(options) {\n const entityContainer = options?.entityContainer ?? createEntityContainer();\n const componentsDefinition = new Map();\n const systems = SystemContainer();\n let sealed = false;\n function addSystem(fn, priority = SYSTEMS_REGULAR_PRIORITY, name) {\n systems.add(fn, priority, name);\n }\n function removeSystem(selector) {\n return systems.remove(selector);\n }\n function addEntity() {\n const entity = entityContainer.generateEntity();\n return entity;\n }\n function removeEntity(entity) {\n for (const [, component] of componentsDefinition) {\n // TODO: hack for the moment.\n // We still need the NetworkEntity to forward this message to the SyncTransport.\n // If we remove it then we can't notify the other users which entity was deleted.\n if (component.componentName === 'core-schema::Network-Entity')\n continue;\n component.entityDeleted(entity, true);\n }\n return entityContainer.removeEntity(entity);\n }\n function removeEntityWithChildren(entity) {\n return removeEntityWithChildrenEngine({ removeEntity, defineComponentFromSchema, getEntitiesWith, defineComponent }, entity);\n }\n function registerComponentDefinition(componentName, component) {\n /* istanbul ignore next */\n if (sealed)\n throw new Error('Engine is already sealed. No components can be added at this stage');\n const componentId = componentNumberFromName(componentName);\n const prev = componentsDefinition.get(componentId);\n if (prev) {\n throw new Error(`Component number ${componentId} was already registered.`);\n }\n /* istanbul ignore next */\n if (component.componentName !== componentName) {\n throw new Error(`Component name doesn't match componentDefinition.componentName ${componentName} != ${component.componentName}`);\n }\n /* istanbul ignore next */\n if (component.componentId !== componentId) {\n throw new Error(`Component number doesn't match componentDefinition.componentId ${componentId} != ${component.componentId}`);\n }\n componentsDefinition.set(componentId, component);\n return component;\n }\n function defineComponentFromSchema(componentName, schema) {\n const componentId = componentNumberFromName(componentName);\n const prev = componentsDefinition.get(componentId);\n if (prev) {\n // TODO: assert spec === prev.spec\n return prev;\n }\n /* istanbul ignore next */\n if (sealed)\n throw new Error('Engine is already sealed. No components can be added at this stage');\n const newComponent = createComponentDefinitionFromSchema(componentName, componentId, schema);\n componentsDefinition.set(componentId, newComponent);\n return newComponent;\n }\n function defineValueSetComponentFromSchema(componentName, schema, options) {\n const componentId = componentNumberFromName(componentName);\n const prev = componentsDefinition.get(componentId);\n if (prev) {\n // TODO: assert spec === prev.spec\n return prev;\n }\n /* istanbul ignore next */\n if (sealed)\n throw new Error('Engine is already sealed. No components can be added at this stage');\n const newComponent = createValueSetComponentDefinitionFromSchema(componentName, componentId, schema, options);\n componentsDefinition.set(componentId, newComponent);\n return newComponent;\n }\n function defineComponent(componentName, mapSpec, constructorDefault) {\n const componentId = componentNumberFromName(componentName);\n const prev = componentsDefinition.get(componentId);\n if (prev) {\n // TODO: assert spec === prev.spec\n return prev;\n }\n if (sealed)\n throw new Error('Engine is already sealed. No components can be added at this stage');\n const schemaSpec = Schemas.Map(mapSpec, constructorDefault);\n const def = createComponentDefinitionFromSchema(componentName, componentId, schemaSpec);\n const newComponent = {\n ...def,\n create(entity, val) {\n return def.create(entity, val);\n },\n createOrReplace(entity, val) {\n return def.createOrReplace(entity, val);\n }\n };\n componentsDefinition.set(componentId, newComponent);\n return newComponent;\n }\n function getComponent(componentIdOrName) {\n const componentId = typeof componentIdOrName === 'number' ? componentIdOrName : componentNumberFromName(componentIdOrName);\n const component = componentsDefinition.get(componentId);\n if (!component) {\n throw new Error(`Component ${componentIdOrName} not found. You need to declare the components at the beginnig of the engine declaration`);\n }\n return component;\n }\n function getComponentOrNull(componentIdOrName) {\n const componentId = typeof componentIdOrName === 'number' ? componentIdOrName : componentNumberFromName(componentIdOrName);\n return (componentsDefinition.get(componentId) ??\n /* istanbul ignore next */\n null);\n }\n function* getEntitiesWith(...components) {\n for (const [entity, ...groupComp] of getComponentDefGroup(...components)) {\n yield [entity, ...groupComp.map((c) => c.get(entity))];\n }\n }\n function getEntityOrNullByName(value) {\n const NameComponent = components.Name({ defineComponent });\n for (const [entity, name] of getEntitiesWith(NameComponent)) {\n if (name.value === value)\n return entity;\n }\n return null;\n }\n function getEntityByName(value) {\n const entity = getEntityOrNullByName(value);\n return entity;\n }\n function* getEntitiesByTag(tagName) {\n const TagComponent = components.Tags({ defineComponent });\n for (const [entity, component] of getEntitiesWith(TagComponent)) {\n if (entity !== 0 && component.tags?.some((tag) => tag === tagName)) {\n yield entity;\n }\n }\n }\n function* getComponentDefGroup(...args) {\n const [firstComponentDef, ...componentDefinitions] = args;\n for (const [entity] of firstComponentDef.iterator()) {\n let matches = true;\n for (const componentDef of componentDefinitions) {\n if (!componentDef.has(entity)) {\n matches = false;\n break;\n }\n }\n if (matches) {\n yield [entity, ...args];\n }\n }\n }\n function getSystems() {\n return systems.getSystems();\n }\n function componentsIter() {\n return componentsDefinition.values();\n }\n function removeComponentDefinition(componentIdOrName) {\n if (sealed)\n throw new Error('Engine is already sealed. No components can be removed at this stage');\n const componentId = typeof componentIdOrName === 'number' ? componentIdOrName : componentNumberFromName(componentIdOrName);\n componentsDefinition.delete(componentId);\n }\n components.Transform({ defineComponentFromSchema });\n function seal() {\n if (!sealed) {\n sealed = true;\n }\n }\n return {\n addEntity,\n removeEntity,\n removeEntityWithChildren,\n addSystem,\n getSystems,\n removeSystem,\n defineComponent,\n defineComponentFromSchema,\n defineValueSetComponentFromSchema,\n getEntitiesWith,\n getComponent,\n getComponentOrNull: getComponentOrNull,\n getEntityOrNullByName,\n getEntityByName,\n getEntitiesByTag,\n removeComponentDefinition,\n registerComponentDefinition,\n entityContainer,\n componentsIter,\n seal\n };\n}\n/**\n * Internal constructor of new engines, this is an internal API\n * @public\n * @deprecated Prevent manual usage prefer \"engine\" for scene development\n */\nexport function Engine(options) {\n const partialEngine = preEngine(options);\n const onChangeFunction = (entity, operation, component, componentValue) => {\n if (operation === CrdtMessageType.DELETE_ENTITY) {\n for (const component of partialEngine.componentsIter()) {\n component?.__onChangeCallbacks(entity, undefined);\n }\n }\n else {\n component?.__onChangeCallbacks(entity, componentValue);\n }\n return options?.onChangeFunction(entity, operation, component, componentValue);\n };\n const crdtSystem = crdtSceneSystem(partialEngine, onChangeFunction);\n async function update(dt) {\n await crdtSystem.receiveMessages();\n for (const system of partialEngine.getSystems()) {\n const ret = system.fn(dt);\n checkNotThenable(ret, `A system (${system.name || 'anonymous'}) returned a thenable. Systems cannot be async functions. Documentation: https://dcl.gg/sdk/sync-systems`);\n }\n // get the deleted entities to send the DeleteEntity CRDT commands\n const deletedEntites = partialEngine.entityContainer.releaseRemovedEntities();\n await crdtSystem.sendMessages(deletedEntites);\n }\n return {\n _id: Date.now(),\n addEntity: partialEngine.addEntity,\n removeEntity: partialEngine.removeEntity,\n removeEntityWithChildren: partialEngine.removeEntityWithChildren,\n addSystem: partialEngine.addSystem,\n removeSystem: partialEngine.removeSystem,\n defineComponent: partialEngine.defineComponent,\n defineComponentFromSchema: partialEngine.defineComponentFromSchema,\n defineValueSetComponentFromSchema: partialEngine.defineValueSetComponentFromSchema,\n registerComponentDefinition: partialEngine.registerComponentDefinition,\n getEntitiesWith: partialEngine.getEntitiesWith,\n getComponent: partialEngine.getComponent,\n getComponentOrNull: partialEngine.getComponentOrNull,\n removeComponentDefinition: partialEngine.removeComponentDefinition,\n componentsIter: partialEngine.componentsIter,\n seal: partialEngine.seal,\n getEntityOrNullByName: partialEngine.getEntityOrNullByName,\n getEntityByName: partialEngine.getEntityByName,\n getEntitiesByTag: partialEngine.getEntitiesByTag,\n update,\n RootEntity: 0,\n PlayerEntity: 1,\n CameraEntity: 2,\n getEntityState: partialEngine.entityContainer.getEntityState,\n addTransport: crdtSystem.addTransport,\n entityContainer: partialEngine.entityContainer\n };\n}\n", "import * as components from '../components';\nimport { ReadWriteByteBuffer } from '../serialization/ByteBuffer';\nimport { dataCompare } from './crdt/utils';\n/**\n * Avoid creating multiple tween systems\n */\nconst cacheTween = new Map();\n/**\n * @public\n * @returns tween helper to be used on the scene\n */\nexport function createTweenSystem(engine) {\n if (cacheTween.has(engine._id)) {\n return cacheTween.get(engine._id);\n }\n const Tween = components.Tween(engine);\n const TweenState = components.TweenState(engine);\n const TweenSequence = components.TweenSequence(engine);\n const cache = new Map();\n function isCompleted(entity) {\n const tweenState = TweenState.getOrNull(entity);\n const tween = Tween.getOrNull(entity);\n const tweenCache = cache.get(entity);\n if (!tweenState || !tween)\n return false;\n /* istanbul ignore next */\n if (\n // Renderer notified that the tween is completed\n (tweenChanged(entity) || tweenState.state === 1 /* TweenStateStatus.TS_COMPLETED */) &&\n // Avoid sending isCompleted multiple times\n !tweenCache?.completed &&\n // Amount of frames needed to consider a tween completed\n (tweenCache?.frames ?? 0) > 2) {\n return true;\n }\n return false;\n }\n function tweenChanged(entity) {\n const currentTween = Tween.getOrNull(entity);\n const prevTween = cache.get(entity)?.tween;\n /* istanbul ignore next */\n if ((currentTween && !prevTween) || (!currentTween && prevTween)) {\n return true;\n }\n const currentBuff = new ReadWriteByteBuffer();\n Tween.schema.serialize(currentTween, currentBuff);\n const equal = dataCompare(currentBuff.toBinary(), prevTween);\n return equal;\n }\n const restartTweens = [];\n // Logic for sequence tweens\n engine.addSystem(() => {\n for (const restart of restartTweens) {\n restart();\n }\n restartTweens.length = 0;\n for (const [entity, tween] of engine.getEntitiesWith(Tween)) {\n if (tweenChanged(entity)) {\n const buffer = new ReadWriteByteBuffer();\n Tween.schema.serialize(tween, buffer);\n cache.set(entity, {\n tween: buffer.toBinary(),\n frames: 0,\n completed: false,\n changed: true\n });\n continue;\n }\n const tweenCache = cache.get(entity);\n tweenCache.frames += 1;\n tweenCache.changed = false;\n if (isCompleted(entity)) {\n // Reset tween frames.\n tweenCache.frames = 0;\n // set the tween completed to avoid calling this again for the same tween\n tweenCache.completed = true;\n const tweenSequence = TweenSequence.getOrNull(entity);\n if (!tweenSequence)\n continue;\n const { sequence } = tweenSequence;\n if (sequence && sequence.length) {\n const [nextTweenSequence, ...otherTweens] = sequence;\n Tween.createOrReplace(entity, nextTweenSequence);\n const mutableTweenHelper = TweenSequence.getMutable(entity);\n mutableTweenHelper.sequence = otherTweens;\n if (tweenSequence.loop === 0 /* TweenLoop.TL_RESTART */) {\n mutableTweenHelper.sequence.push(tween);\n }\n }\n else if (tweenSequence.loop === 1 /* TweenLoop.TL_YOYO */) {\n Tween.createOrReplace(entity, backwardsTween(tween));\n }\n else if (tweenSequence.loop === 0 /* TweenLoop.TL_RESTART */) {\n Tween.deleteFrom(entity);\n cache.delete(entity);\n restartTweens.push(() => {\n Tween.createOrReplace(entity, tween);\n });\n }\n }\n }\n }, Number.NEGATIVE_INFINITY);\n function backwardsTween(tween) {\n if (tween.mode?.$case === 'move' && tween.mode.move) {\n return { ...tween, mode: { ...tween.mode, move: { start: tween.mode.move.end, end: tween.mode.move.start } } };\n }\n if (tween.mode?.$case === 'rotate' && tween.mode.rotate) {\n return {\n ...tween,\n mode: { ...tween.mode, rotate: { start: tween.mode.rotate.end, end: tween.mode.rotate.start } }\n };\n }\n if (tween.mode?.$case === 'scale' && tween.mode.scale) {\n return { ...tween, mode: { ...tween.mode, scale: { start: tween.mode.scale.end, end: tween.mode.scale.start } } };\n }\n if (tween.mode?.$case === 'textureMove' && tween.mode.textureMove) {\n return {\n ...tween,\n mode: { ...tween.mode, textureMove: { start: tween.mode.textureMove.end, end: tween.mode.textureMove.start } }\n };\n }\n /* istanbul ignore next */\n throw new Error('Invalid tween');\n }\n const tweenSystem = {\n // This event is fired only once per tween\n tweenCompleted: isCompleted\n };\n cacheTween.set(engine._id, tweenSystem);\n return tweenSystem;\n}\n", "/* istanbul ignore file */\nimport * as components from '../components';\n/**\n * It checks all the entities that has a PointerEvent and check if it has a collider.\n * *\n * @public\n * @params engine\n */\nexport function pointerEventColliderChecker(engine) {\n const PointerEvents = components.PointerEvents(engine);\n const MeshCollider = components.MeshCollider(engine);\n const GltfContainer = components.GltfContainer(engine);\n const UiTransform = components.UiTransform(engine);\n const alreadyShownlog = new Set();\n let timer = 0;\n function systemChecker(dt) {\n timer += dt;\n if (timer <= 10) {\n return;\n }\n timer = 0;\n for (const [entity] of engine.getEntitiesWith(PointerEvents)) {\n if (alreadyShownlog.has(entity))\n continue;\n // Maybe the collider is inside the GLTFContainer. Ignore it\n if (GltfContainer.has(entity))\n continue;\n // UI handles the pointer's in a diff way.\n if (UiTransform.has(entity))\n continue;\n // check for Mesh Pointer Collision Layer\n const mesh = MeshCollider.getOrNull(entity);\n if (mesh) {\n if (mesh.collisionMask === undefined || mesh.collisionMask & 1 /* components.ColliderLayer.CL_POINTER */) {\n continue;\n }\n }\n alreadyShownlog.add(entity);\n console.log(`\u26A0\uFE0F Missing MeshCollider component on entity ${entity}. Add a MeshCollider to the entity so it can be clickeable by the player.\nSee https://docs.decentraland.org/creator/development-guide/sdk7/colliders/#pointer-blocking`);\n }\n }\n engine.removeSystem(systemChecker);\n engine.addSystem(systemChecker);\n}\n", "/**\n * @alpha * This file initialization is an alpha one. This is based on the old-ecs\n * init and it'll be changing.\n */\nimport { Engine } from '../../engine';\nimport { createTaskSystem } from '../../systems/async-task';\nimport { createPointerEventsSystem } from '../../systems/events';\nimport { createInputSystem } from './../../engine/input';\nimport { createRaycastSystem } from '../../systems/raycast';\nimport { createVideoEventsSystem } from '../../systems/videoEvents';\nimport { createTweenSystem } from '../../systems/tween';\nimport { pointerEventColliderChecker } from '../../systems/pointer-event-collider-checker';\nimport { createTriggerAreaEventsSystem } from '../../systems/triggerArea';\n/**\n * @public\n * The engine is the part of the scene that sits in the middle and manages all of the other parts.\n * It determines what entities are rendered and how players interact with them.\n * It also coordinates what functions from systems are executed and when.\n *\n * @example\n * import { engine } from '@dcl/sdk/ecs'\n * const entity = engine.addEntity()\n * engine.addSystem(someSystemFunction)\n *\n */\nexport const engine = /* @__PURE__ */ Engine();\n/**\n * @public\n * Input system manager. Check for button events\n * @example\n * inputSystem.isTriggered: Returns true if an input action ocurred since the last tick.\n * inputSystem.isPressed: Returns true if an input is currently being pressed down. It will return true on every tick until the button goes up again.\n * inputSystem.getInputCommand: Returns an object with data about the input action.\n */\nexport const inputSystem = /* @__PURE__ */ createInputSystem(engine);\n/**\n * @public\n * Register callback functions to a particular entity on input events.\n */\nexport const pointerEventsSystem = /* @__PURE__ */ createPointerEventsSystem(engine, inputSystem);\n/**\n * @public\n * Register callback functions to a particular entity on raycast results.\n */\nexport const raycastSystem = /* @__PURE__ */ createRaycastSystem(engine);\n/**\n * @public\n * Register callback functions to a particular entity on video events.\n */\nexport const videoEventsSystem = /* @__PURE__ */ createVideoEventsSystem(engine);\n/**\n * @public\n * Register callback functions to a particular entity on video events.\n */\nexport const tweenSystem = createTweenSystem(engine);\n/**\n * @public\n * Register callback functions for trigger area results.\n */\nexport const triggerAreaEventsSystem = /* @__PURE__ */ createTriggerAreaEventsSystem(engine);\n/**\n * Adds pointer event collider system only in DEV env\n */\npointerEventColliderChecker(engine);\n/**\n * @public\n * Runs an async function\n */\nexport const executeTask = /* @__PURE__ */ createTaskSystem(engine);\n", "/* eslint-disable */\nconst protobufPackageSarasa = \"decentraland.sdk.components.common\";\n/**\n * @public\n */\nexport var CameraType;\n(function (CameraType) {\n CameraType[CameraType[\"CT_FIRST_PERSON\"] = 0] = \"CT_FIRST_PERSON\";\n CameraType[CameraType[\"CT_THIRD_PERSON\"] = 1] = \"CT_THIRD_PERSON\";\n /** CT_CINEMATIC - controlled by the scene */\n CameraType[CameraType[\"CT_CINEMATIC\"] = 2] = \"CT_CINEMATIC\";\n})(CameraType || (CameraType = {}));\n", "/* eslint-disable */\nconst protobufPackageSarasa = \"decentraland.sdk.components.common\";\n/**\n * @public\n */\nexport var InputAction;\n(function (InputAction) {\n InputAction[InputAction[\"IA_POINTER\"] = 0] = \"IA_POINTER\";\n InputAction[InputAction[\"IA_PRIMARY\"] = 1] = \"IA_PRIMARY\";\n InputAction[InputAction[\"IA_SECONDARY\"] = 2] = \"IA_SECONDARY\";\n InputAction[InputAction[\"IA_ANY\"] = 3] = \"IA_ANY\";\n InputAction[InputAction[\"IA_FORWARD\"] = 4] = \"IA_FORWARD\";\n InputAction[InputAction[\"IA_BACKWARD\"] = 5] = \"IA_BACKWARD\";\n InputAction[InputAction[\"IA_RIGHT\"] = 6] = \"IA_RIGHT\";\n InputAction[InputAction[\"IA_LEFT\"] = 7] = \"IA_LEFT\";\n InputAction[InputAction[\"IA_JUMP\"] = 8] = \"IA_JUMP\";\n InputAction[InputAction[\"IA_WALK\"] = 9] = \"IA_WALK\";\n InputAction[InputAction[\"IA_ACTION_3\"] = 10] = \"IA_ACTION_3\";\n InputAction[InputAction[\"IA_ACTION_4\"] = 11] = \"IA_ACTION_4\";\n InputAction[InputAction[\"IA_ACTION_5\"] = 12] = \"IA_ACTION_5\";\n InputAction[InputAction[\"IA_ACTION_6\"] = 13] = \"IA_ACTION_6\";\n})(InputAction || (InputAction = {}));\n/** PointerEventType is a kind of interaction that can be detected. */\n/**\n * @public\n */\nexport var PointerEventType;\n(function (PointerEventType) {\n PointerEventType[PointerEventType[\"PET_UP\"] = 0] = \"PET_UP\";\n PointerEventType[PointerEventType[\"PET_DOWN\"] = 1] = \"PET_DOWN\";\n PointerEventType[PointerEventType[\"PET_HOVER_ENTER\"] = 2] = \"PET_HOVER_ENTER\";\n PointerEventType[PointerEventType[\"PET_HOVER_LEAVE\"] = 3] = \"PET_HOVER_LEAVE\";\n})(PointerEventType || (PointerEventType = {}));\n", "/* eslint-disable */\nconst protobufPackageSarasa = \"decentraland.sdk.components.common\";\n/**\n * @public\n */\nexport var LoadingState;\n(function (LoadingState) {\n LoadingState[LoadingState[\"UNKNOWN\"] = 0] = \"UNKNOWN\";\n LoadingState[LoadingState[\"LOADING\"] = 1] = \"LOADING\";\n LoadingState[LoadingState[\"NOT_FOUND\"] = 2] = \"NOT_FOUND\";\n LoadingState[LoadingState[\"FINISHED_WITH_ERROR\"] = 3] = \"FINISHED_WITH_ERROR\";\n LoadingState[LoadingState[\"FINISHED\"] = 4] = \"FINISHED\";\n})(LoadingState || (LoadingState = {}));\n", "/* eslint-disable */\nconst protobufPackageSarasa = \"decentraland.sdk.components.common\";\n/**\n * @public\n */\nexport var TextAlignMode;\n(function (TextAlignMode) {\n TextAlignMode[TextAlignMode[\"TAM_TOP_LEFT\"] = 0] = \"TAM_TOP_LEFT\";\n TextAlignMode[TextAlignMode[\"TAM_TOP_CENTER\"] = 1] = \"TAM_TOP_CENTER\";\n TextAlignMode[TextAlignMode[\"TAM_TOP_RIGHT\"] = 2] = \"TAM_TOP_RIGHT\";\n TextAlignMode[TextAlignMode[\"TAM_MIDDLE_LEFT\"] = 3] = \"TAM_MIDDLE_LEFT\";\n TextAlignMode[TextAlignMode[\"TAM_MIDDLE_CENTER\"] = 4] = \"TAM_MIDDLE_CENTER\";\n TextAlignMode[TextAlignMode[\"TAM_MIDDLE_RIGHT\"] = 5] = \"TAM_MIDDLE_RIGHT\";\n TextAlignMode[TextAlignMode[\"TAM_BOTTOM_LEFT\"] = 6] = \"TAM_BOTTOM_LEFT\";\n TextAlignMode[TextAlignMode[\"TAM_BOTTOM_CENTER\"] = 7] = \"TAM_BOTTOM_CENTER\";\n TextAlignMode[TextAlignMode[\"TAM_BOTTOM_RIGHT\"] = 8] = \"TAM_BOTTOM_RIGHT\";\n})(TextAlignMode || (TextAlignMode = {}));\n/**\n * @public\n */\nexport var Font;\n(function (Font) {\n Font[Font[\"F_SANS_SERIF\"] = 0] = \"F_SANS_SERIF\";\n Font[Font[\"F_SERIF\"] = 1] = \"F_SERIF\";\n Font[Font[\"F_MONOSPACE\"] = 2] = \"F_MONOSPACE\";\n})(Font || (Font = {}));\n", "import { Schemas } from '../schemas';\n/**\n * @public\n * @deprecated composite is not being supported so far, please do not use this feature\n */\nexport function getCompositeRootComponent(engine) {\n const component = engine.getComponentOrNull('composite::root');\n if (component) {\n return component;\n }\n return engine.defineComponent('composite::root', {\n src: Schemas.String,\n entities: Schemas.Array(Schemas.Map({\n src: Schemas.Entity,\n dest: Schemas.Entity\n }))\n });\n}\n", "const currentWorkingDir = '/';\n/**\n * The functions `normalizeStringPosix`, `dirname` and `resolve`\n * were extracted from package @browserify/path\n */\n/* istanbul ignore next */\nfunction normalizeStringPosix(path, allowAboveRoot = false) {\n let res = '';\n let lastSegmentLength = 0;\n let lastSlash = -1;\n let dots = 0;\n let code;\n for (let i = 0; i <= path.length; ++i) {\n if (i < path.length)\n code = path.charCodeAt(i);\n else if (code === 47 /*/*/)\n break;\n else\n code = 47; /*/*/\n if (code === 47 /*/*/) {\n if (lastSlash === i - 1 || dots === 1) {\n // NOOP\n }\n else if (lastSlash !== i - 1 && dots === 2) {\n if (res.length < 2 ||\n lastSegmentLength !== 2 ||\n res.charCodeAt(res.length - 1) !== 46 /*.*/ ||\n res.charCodeAt(res.length - 2) !== 46 /*.*/) {\n if (res.length > 2) {\n const lastSlashIndex = res.lastIndexOf('/');\n if (lastSlashIndex !== res.length - 1) {\n if (lastSlashIndex === -1) {\n res = '';\n lastSegmentLength = 0;\n }\n else {\n res = res.slice(0, lastSlashIndex);\n lastSegmentLength = res.length - 1 - res.lastIndexOf('/');\n }\n lastSlash = i;\n dots = 0;\n continue;\n }\n }\n else if (res.length === 2 || res.length === 1) {\n res = '';\n lastSegmentLength = 0;\n lastSlash = i;\n dots = 0;\n continue;\n }\n }\n if (allowAboveRoot) {\n if (res.length > 0)\n res += '/..';\n else\n res = '..';\n lastSegmentLength = 2;\n }\n }\n else {\n if (res.length > 0)\n res += '/' + path.slice(lastSlash + 1, i);\n else\n res = path.slice(lastSlash + 1, i);\n lastSegmentLength = i - lastSlash - 1;\n }\n lastSlash = i;\n dots = 0;\n }\n else if (code === 46 /*.*/ && dots !== -1) {\n ++dots;\n }\n else {\n dots = -1;\n }\n }\n return res;\n}\n/* istanbul ignore next */\nexport function resolve(...args) {\n let resolvedPath = '';\n let resolvedAbsolute = false;\n let cwd;\n for (let i = args.length - 1; i >= -1 && !resolvedAbsolute; i--) {\n let path;\n if (i >= 0)\n path = args[i];\n else {\n if (cwd === undefined)\n cwd = currentWorkingDir;\n path = cwd;\n }\n // Skip empty entries\n if (path.length === 0) {\n continue;\n }\n resolvedPath = path + '/' + resolvedPath;\n resolvedAbsolute = path.charCodeAt(0) === 47; /*/*/\n }\n // At this point the path should be resolved to a full absolute path, but\n // handle relative paths to be safe (might happen when process.cwd() fails)\n // Normalize the path\n resolvedPath = normalizeStringPosix(resolvedPath, !resolvedAbsolute);\n if (resolvedAbsolute) {\n if (resolvedPath.length > 0)\n return '/' + resolvedPath;\n else\n return '/';\n }\n else if (resolvedPath.length > 0) {\n return resolvedPath;\n }\n else {\n return '.';\n }\n}\n/* istanbul ignore next */\nexport function dirname(path) {\n if (path.length === 0)\n return '.';\n let code = path.charCodeAt(0);\n const hasRoot = code === 47; /*/*/\n let end = -1;\n let matchedSlash = true;\n for (let i = path.length - 1; i >= 1; --i) {\n code = path.charCodeAt(i);\n if (code === 47 /*/*/) {\n if (!matchedSlash) {\n end = i;\n break;\n }\n }\n else {\n // We saw the first non-path separator\n matchedSlash = false;\n }\n }\n if (end === -1)\n return hasRoot ? '/' : '.';\n if (hasRoot && end === 1)\n return '//';\n return path.slice(0, end);\n}\nexport function resolveComposite(path, cwd) {\n const absolutePath = path.startsWith('.') ? resolve(cwd, path) : resolve(path);\n return absolutePath.substring(1);\n}\n", "import { componentDefinitionByName } from '../components';\nimport { componentNumberFromName } from '../components/component-number';\nimport { Schemas } from '../schemas';\nimport { ReadWriteByteBuffer } from '../serialization/ByteBuffer';\nimport { getCompositeRootComponent } from './components';\nimport * as path from './path';\n/** @public */\n/* @__PURE__ */\nexport var EntityMappingMode;\n(function (EntityMappingMode) {\n EntityMappingMode[EntityMappingMode[\"EMM_NONE\"] = 0] = \"EMM_NONE\";\n EntityMappingMode[EntityMappingMode[\"EMM_NEXT_AVAILABLE\"] = 1] = \"EMM_NEXT_AVAILABLE\";\n EntityMappingMode[EntityMappingMode[\"EMM_DIRECT_MAPPING\"] = 2] = \"EMM_DIRECT_MAPPING\";\n})(EntityMappingMode || (EntityMappingMode = {}));\n/**\n * Return the component value from composite data\n * @internal\n */\nexport function getComponentValue(componentDefinition, component) {\n if (component.data?.$case === 'json') {\n return component.data.json;\n }\n else {\n return componentDefinition.schema.deserialize(new ReadWriteByteBuffer(component.data?.binary));\n }\n}\n/**\n * Return the component definition from composite info\n * @internal\n */\nexport function getComponentDefinition(engine, component) {\n const existingComponentDefinition = engine.getComponentOrNull(component.name);\n if (!existingComponentDefinition) {\n if (component.name.startsWith('core::')) {\n if (component.name in componentDefinitionByName) {\n return componentDefinitionByName[component.name](engine);\n }\n else {\n throw new Error(`The core component ${component.name} was not found.`);\n }\n }\n else if (component.jsonSchema) {\n return engine.defineComponentFromSchema(component.name, Schemas.fromJson(component.jsonSchema));\n }\n else {\n throw new Error(`${component.name} is not defined and there is no schema to define it.`);\n }\n }\n else {\n return existingComponentDefinition;\n }\n}\n/**\n * Return the entity mapping or fail if there is no more\n * @internal\n */\nexport function getEntityMapping(engine, compositeEntity, mappedEntities, { entityMapping }) {\n const existingEntity = mappedEntities.get(compositeEntity);\n if (existingEntity) {\n return existingEntity;\n }\n if (entityMapping?.type === EntityMappingMode.EMM_DIRECT_MAPPING) {\n const entity = entityMapping.getCompositeEntity(compositeEntity);\n mappedEntities.set(compositeEntity, entity);\n return entity;\n }\n // This function in runtime can be just `engine.addEntity()`\n const newEntity = entityMapping?.type === EntityMappingMode.EMM_NEXT_AVAILABLE\n ? entityMapping.getNextAvailableEntity()\n : engine.addEntity();\n if (newEntity === null) {\n throw new Error('There is no more entities to allocate');\n }\n mappedEntities.set(compositeEntity, newEntity);\n return newEntity;\n}\n/**\n * @internal\n */\n/* @__PURE__ */\nexport function instanceComposite(engine, compositeResource, compositeProvider, options) {\n const { rootEntity, alreadyRequestedSrc: optionalAlreadyRequestedSrc, entityMapping } = options;\n const alreadyRequestedSrc = optionalAlreadyRequestedSrc || new Set();\n const compositeDirectoryPath = path.dirname(path.resolve(compositeResource.src));\n const TransformComponentNumber = componentNumberFromName('core::Transform');\n const CompositeRootComponent = getCompositeRootComponent(engine);\n // Key => EntityNumber from the composite\n // Value => EntityNumber in current engine\n const mappedEntities = new Map();\n const getCompositeEntity = (compositeEntity) => getEntityMapping(engine, compositeEntity, mappedEntities, options);\n // ## 1 ##\n // First entity that I want to map, the root entity from the composite to the target entity in the engine\n // If there is no `rootEntity` passed, we assign one from `getNextAvailableEntity`\n const compositeRootEntity = rootEntity ?? getCompositeEntity(0);\n if (rootEntity) {\n mappedEntities.set(0, rootEntity);\n }\n // ## 2 ##\n // If there are more composite inside this one, we instance first.\n // => This is not only a copy, we need to instance. Otherwise, we'd be missing that branches\n // => TODO: in the future, the instanciation is first, then the overides (to parameterize Composite, e.g. house with different wall colors)\n const childrenComposite = compositeResource.composite.components.find((item) => item.name === CompositeRootComponent.componentName);\n if (childrenComposite) {\n for (const [childCompositeEntity, compositeRawData] of childrenComposite.data) {\n const childComposite = getComponentValue(CompositeRootComponent, compositeRawData);\n const childCompositePath = path.resolveComposite(childComposite.src, compositeDirectoryPath);\n const childCompositeResource = compositeProvider.getCompositeOrNull(childCompositePath);\n const targetEntity = getCompositeEntity(childCompositeEntity);\n if (childCompositeResource) {\n if (alreadyRequestedSrc.has(childCompositeResource.src) ||\n childCompositeResource.src === compositeResource.src) {\n throw new Error(`Composite ${compositeResource.src} has a recursive instanciation while try to instance ${childCompositeResource.src}. Previous instances: ${alreadyRequestedSrc.toString()}`);\n }\n instanceComposite(engine, childCompositeResource, compositeProvider, {\n rootEntity: targetEntity,\n alreadyRequestedSrc: new Set(alreadyRequestedSrc).add(childCompositeResource.src),\n entityMapping: entityMapping?.type === EntityMappingMode.EMM_NEXT_AVAILABLE ? entityMapping : undefined\n });\n }\n }\n }\n // ## 3 ##\n // Then, we copy the all rest of the components (skipping the Composite ones)\n for (const component of compositeResource.composite.components) {\n // We already instanced the composite\n if (component.name === CompositeRootComponent.componentName)\n continue;\n // ## 3a ##\n // We find the component definition\n const componentDefinition = getComponentDefinition(engine, component);\n // ## 3b ##\n // Iterating over all the entities with this component and create the replica\n for (const [entity, compositeComponentValue] of component.data) {\n const componentValueDeserialized = getComponentValue(componentDefinition, compositeComponentValue);\n const targetEntity = getCompositeEntity(entity);\n const componentValue = componentDefinition.create(targetEntity, componentValueDeserialized);\n // ## 3c ##\n // All entities referenced in the composite probably has a different resolved EntityNumber\n // We'll know with the mappedEntityes\n if (componentDefinition.componentId === TransformComponentNumber) {\n const transform = componentValue;\n if (transform.parent) {\n transform.parent = getCompositeEntity(transform.parent);\n }\n else {\n transform.parent = getCompositeEntity(0);\n }\n // TODO: is it going to be necessary to remap assets? e.g. src param from AudioSource and GltfContainer\n }\n else {\n Schemas.mutateNestedValues(componentDefinition.schema.jsonSchema, componentValue, (value, valueType) => {\n if (valueType.serializationType === 'entity') {\n return { changed: true, value: getCompositeEntity(value) };\n }\n else {\n return { changed: false };\n }\n });\n }\n }\n }\n const composite = CompositeRootComponent.getMutableOrNull(compositeRootEntity) || CompositeRootComponent.create(compositeRootEntity);\n for (const [entitySource, targetEntity] of mappedEntities) {\n composite.entities.push({\n src: entitySource,\n dest: targetEntity\n });\n }\n composite.src = compositeResource.src;\n return compositeRootEntity;\n}\n", "/* eslint-disable */\nimport _m0 from \"protobufjs/minimal\";\nimport { Value } from \"./google/protobuf/struct.gen\";\nconst protobufPackageSarasa = \"\";\nfunction createBaseComponentData() {\n return { data: undefined };\n}\n/**\n * @public\n */\nexport var ComponentData;\n(function (ComponentData) {\n function encode(message, writer = _m0.Writer.create()) {\n switch (message.data?.$case) {\n case \"json\":\n Value.encode(Value.wrap(message.data.json), writer.uint32(10).fork()).ldelim();\n break;\n case \"binary\":\n writer.uint32(18).bytes(message.data.binary);\n break;\n }\n return writer;\n }\n ComponentData.encode = encode;\n function decode(input, length) {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseComponentData();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n message.data = { $case: \"json\", json: Value.unwrap(Value.decode(reader, reader.uint32())) };\n continue;\n case 2:\n if (tag !== 18) {\n break;\n }\n message.data = { $case: \"binary\", binary: reader.bytes() };\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n }\n ComponentData.decode = decode;\n function fromJSON(object) {\n return {\n data: isSet(object.json)\n ? { $case: \"json\", json: object.json }\n : isSet(object.binary)\n ? { $case: \"binary\", binary: bytesFromBase64(object.binary) }\n : undefined,\n };\n }\n ComponentData.fromJSON = fromJSON;\n function toJSON(message) {\n const obj = {};\n message.data?.$case === \"json\" && (obj.json = message.data?.json);\n message.data?.$case === \"binary\" &&\n (obj.binary = message.data?.binary !== undefined ? base64FromBytes(message.data?.binary) : undefined);\n return obj;\n }\n ComponentData.toJSON = toJSON;\n})(ComponentData || (ComponentData = {}));\nfunction createBaseCompositeComponent() {\n return { name: \"\", jsonSchema: undefined, data: new Map() };\n}\n/**\n * @public\n */\nexport var CompositeComponent;\n(function (CompositeComponent) {\n function encode(message, writer = _m0.Writer.create()) {\n if (message.name !== \"\") {\n writer.uint32(10).string(message.name);\n }\n if (message.jsonSchema !== undefined) {\n Value.encode(Value.wrap(message.jsonSchema), writer.uint32(18).fork()).ldelim();\n }\n message.data.forEach((value, key) => {\n CompositeComponent_DataEntry.encode({ key: key, value }, writer.uint32(26).fork()).ldelim();\n });\n return writer;\n }\n CompositeComponent.encode = encode;\n function decode(input, length) {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseCompositeComponent();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n message.name = reader.string();\n continue;\n case 2:\n if (tag !== 18) {\n break;\n }\n message.jsonSchema = Value.unwrap(Value.decode(reader, reader.uint32()));\n continue;\n case 3:\n if (tag !== 26) {\n break;\n }\n const entry3 = CompositeComponent_DataEntry.decode(reader, reader.uint32());\n if (entry3.value !== undefined) {\n message.data.set(entry3.key, entry3.value);\n }\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n }\n CompositeComponent.decode = decode;\n function fromJSON(object) {\n return {\n name: isSet(object.name) ? String(object.name) : \"\",\n jsonSchema: isSet(object?.jsonSchema) ? object.jsonSchema : undefined,\n data: isObject(object.data)\n ? Object.entries(object.data).reduce((acc, [key, value]) => {\n acc.set(Number(key), ComponentData.fromJSON(value));\n return acc;\n }, new Map())\n : new Map(),\n };\n }\n CompositeComponent.fromJSON = fromJSON;\n function toJSON(message) {\n const obj = {};\n message.name !== undefined && (obj.name = message.name);\n message.jsonSchema !== undefined && (obj.jsonSchema = message.jsonSchema);\n obj.data = {};\n if (message.data) {\n message.data.forEach((v, k) => {\n obj.data[k] = ComponentData.toJSON(v);\n });\n }\n return obj;\n }\n CompositeComponent.toJSON = toJSON;\n})(CompositeComponent || (CompositeComponent = {}));\nfunction createBaseCompositeComponent_DataEntry() {\n return { key: 0, value: undefined };\n}\n/**\n * @public\n */\nexport var CompositeComponent_DataEntry;\n(function (CompositeComponent_DataEntry) {\n function encode(message, writer = _m0.Writer.create()) {\n if (message.key !== 0) {\n writer.uint32(8).int32(message.key);\n }\n if (message.value !== undefined) {\n ComponentData.encode(message.value, writer.uint32(18).fork()).ldelim();\n }\n return writer;\n }\n CompositeComponent_DataEntry.encode = encode;\n function decode(input, length) {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseCompositeComponent_DataEntry();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 8) {\n break;\n }\n message.key = reader.int32();\n continue;\n case 2:\n if (tag !== 18) {\n break;\n }\n message.value = ComponentData.decode(reader, reader.uint32());\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n }\n CompositeComponent_DataEntry.decode = decode;\n function fromJSON(object) {\n return {\n key: isSet(object.key) ? Number(object.key) : 0,\n value: isSet(object.value) ? ComponentData.fromJSON(object.value) : undefined,\n };\n }\n CompositeComponent_DataEntry.fromJSON = fromJSON;\n function toJSON(message) {\n const obj = {};\n message.key !== undefined && (obj.key = Math.round(message.key));\n message.value !== undefined && (obj.value = message.value ? ComponentData.toJSON(message.value) : undefined);\n return obj;\n }\n CompositeComponent_DataEntry.toJSON = toJSON;\n})(CompositeComponent_DataEntry || (CompositeComponent_DataEntry = {}));\nfunction createBaseCompositeDefinition() {\n return { version: 0, components: [] };\n}\n/**\n * @public\n */\nexport var CompositeDefinition;\n(function (CompositeDefinition) {\n function encode(message, writer = _m0.Writer.create()) {\n if (message.version !== 0) {\n writer.uint32(8).int32(message.version);\n }\n for (const v of message.components) {\n CompositeComponent.encode(v, writer.uint32(18).fork()).ldelim();\n }\n return writer;\n }\n CompositeDefinition.encode = encode;\n function decode(input, length) {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseCompositeDefinition();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 8) {\n break;\n }\n message.version = reader.int32();\n continue;\n case 2:\n if (tag !== 18) {\n break;\n }\n message.components.push(CompositeComponent.decode(reader, reader.uint32()));\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n }\n CompositeDefinition.decode = decode;\n function fromJSON(object) {\n return {\n version: isSet(object.version) ? Number(object.version) : 0,\n components: Array.isArray(object?.components)\n ? object.components.map((e) => CompositeComponent.fromJSON(e))\n : [],\n };\n }\n CompositeDefinition.fromJSON = fromJSON;\n function toJSON(message) {\n const obj = {};\n message.version !== undefined && (obj.version = Math.round(message.version));\n if (message.components) {\n obj.components = message.components.map((e) => e ? CompositeComponent.toJSON(e) : undefined);\n }\n else {\n obj.components = [];\n }\n return obj;\n }\n CompositeDefinition.toJSON = toJSON;\n})(CompositeDefinition || (CompositeDefinition = {}));\nconst tsProtoGlobalThis = (() => {\n if (typeof globalThis !== \"undefined\") {\n return globalThis;\n }\n if (typeof self !== \"undefined\") {\n return self;\n }\n if (typeof window !== \"undefined\") {\n return window;\n }\n if (typeof global !== \"undefined\") {\n return global;\n }\n throw \"Unable to locate global object\";\n})();\nfunction bytesFromBase64(b64) {\n if (tsProtoGlobalThis.Buffer) {\n return Uint8Array.from(tsProtoGlobalThis.Buffer.from(b64, \"base64\"));\n }\n else {\n const bin = tsProtoGlobalThis.atob(b64);\n const arr = new Uint8Array(bin.length);\n for (let i = 0; i < bin.length; ++i) {\n arr[i] = bin.charCodeAt(i);\n }\n return arr;\n }\n}\nfunction base64FromBytes(arr) {\n if (tsProtoGlobalThis.Buffer) {\n return tsProtoGlobalThis.Buffer.from(arr).toString(\"base64\");\n }\n else {\n const bin = [];\n arr.forEach((byte) => {\n bin.push(String.fromCharCode(byte));\n });\n return tsProtoGlobalThis.btoa(bin.join(\"\"));\n }\n}\nfunction isObject(value) {\n return typeof value === \"object\" && value !== null;\n}\nfunction isSet(value) {\n return value !== null && value !== undefined;\n}\n", "/* eslint-disable */\nimport _m0 from \"protobufjs/minimal\";\nconst protobufPackageSarasa = \"google.protobuf\";\n/**\n * `NullValue` is a singleton enumeration to represent the null value for the\n * `Value` type union.\n *\n * The JSON representation for `NullValue` is JSON `null`.\n */\n/**\n * @public\n */\nexport var NullValue;\n(function (NullValue) {\n /** NULL_VALUE - Null value. */\n NullValue[NullValue[\"NULL_VALUE\"] = 0] = \"NULL_VALUE\";\n})(NullValue || (NullValue = {}));\n/**\n * @public\n */\nexport function nullValueFromJSON(object) {\n switch (object) {\n case 0:\n case \"NULL_VALUE\":\n return 0 /* NullValue.NULL_VALUE */;\n default:\n throw new tsProtoGlobalThis.Error(\"Unrecognized enum value \" + object + \" for enum NullValue\");\n }\n}\n/**\n * @public\n */\nexport function nullValueToJSON(object) {\n switch (object) {\n case 0 /* NullValue.NULL_VALUE */:\n return \"NULL_VALUE\";\n default:\n throw new tsProtoGlobalThis.Error(\"Unrecognized enum value \" + object + \" for enum NullValue\");\n }\n}\nfunction createBaseStruct() {\n return { fields: new Map() };\n}\n/**\n * @public\n */\nexport var Struct;\n(function (Struct) {\n function encode(message, writer = _m0.Writer.create()) {\n message.fields.forEach((value, key) => {\n if (value !== undefined) {\n Struct_FieldsEntry.encode({ key: key, value }, writer.uint32(10).fork()).ldelim();\n }\n });\n return writer;\n }\n Struct.encode = encode;\n function decode(input, length) {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseStruct();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n const entry1 = Struct_FieldsEntry.decode(reader, reader.uint32());\n if (entry1.value !== undefined) {\n message.fields.set(entry1.key, entry1.value);\n }\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n }\n Struct.decode = decode;\n function fromJSON(object) {\n return {\n fields: isObject(object.fields)\n ? Object.entries(object.fields).reduce((acc, [key, value]) => {\n acc.set(key, value);\n return acc;\n }, new Map())\n : new Map(),\n };\n }\n Struct.fromJSON = fromJSON;\n function toJSON(message) {\n const obj = {};\n obj.fields = {};\n if (message.fields) {\n message.fields.forEach((v, k) => {\n obj.fields[k] = v;\n });\n }\n return obj;\n }\n Struct.toJSON = toJSON;\n function wrap(object) {\n const struct = createBaseStruct();\n if (object !== undefined) {\n Object.keys(object).forEach((key) => {\n struct.fields.set(key, object[key]);\n });\n }\n return struct;\n }\n Struct.wrap = wrap;\n function unwrap(message) {\n const object = {};\n [...message.fields.keys()].forEach((key) => {\n object[key] = message.fields.get(key);\n });\n return object;\n }\n Struct.unwrap = unwrap;\n})(Struct || (Struct = {}));\nfunction createBaseStruct_FieldsEntry() {\n return { key: \"\", value: undefined };\n}\n/**\n * @public\n */\nexport var Struct_FieldsEntry;\n(function (Struct_FieldsEntry) {\n function encode(message, writer = _m0.Writer.create()) {\n if (message.key !== \"\") {\n writer.uint32(10).string(message.key);\n }\n if (message.value !== undefined) {\n Value.encode(Value.wrap(message.value), writer.uint32(18).fork()).ldelim();\n }\n return writer;\n }\n Struct_FieldsEntry.encode = encode;\n function decode(input, length) {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseStruct_FieldsEntry();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n message.key = reader.string();\n continue;\n case 2:\n if (tag !== 18) {\n break;\n }\n message.value = Value.unwrap(Value.decode(reader, reader.uint32()));\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n }\n Struct_FieldsEntry.decode = decode;\n function fromJSON(object) {\n return { key: isSet(object.key) ? String(object.key) : \"\", value: isSet(object?.value) ? object.value : undefined };\n }\n Struct_FieldsEntry.fromJSON = fromJSON;\n function toJSON(message) {\n const obj = {};\n message.key !== undefined && (obj.key = message.key);\n message.value !== undefined && (obj.value = message.value);\n return obj;\n }\n Struct_FieldsEntry.toJSON = toJSON;\n})(Struct_FieldsEntry || (Struct_FieldsEntry = {}));\nfunction createBaseValue() {\n return { kind: undefined };\n}\n/**\n * @public\n */\nexport var Value;\n(function (Value) {\n function encode(message, writer = _m0.Writer.create()) {\n switch (message.kind?.$case) {\n case \"nullValue\":\n writer.uint32(8).int32(message.kind.nullValue);\n break;\n case \"numberValue\":\n writer.uint32(17).double(message.kind.numberValue);\n break;\n case \"stringValue\":\n writer.uint32(26).string(message.kind.stringValue);\n break;\n case \"boolValue\":\n writer.uint32(32).bool(message.kind.boolValue);\n break;\n case \"structValue\":\n Struct.encode(Struct.wrap(message.kind.structValue), writer.uint32(42).fork()).ldelim();\n break;\n case \"listValue\":\n ListValue.encode(ListValue.wrap(message.kind.listValue), writer.uint32(50).fork()).ldelim();\n break;\n }\n return writer;\n }\n Value.encode = encode;\n function decode(input, length) {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseValue();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 8) {\n break;\n }\n message.kind = { $case: \"nullValue\", nullValue: reader.int32() };\n continue;\n case 2:\n if (tag !== 17) {\n break;\n }\n message.kind = { $case: \"numberValue\", numberValue: reader.double() };\n continue;\n case 3:\n if (tag !== 26) {\n break;\n }\n message.kind = { $case: \"stringValue\", stringValue: reader.string() };\n continue;\n case 4:\n if (tag !== 32) {\n break;\n }\n message.kind = { $case: \"boolValue\", boolValue: reader.bool() };\n continue;\n case 5:\n if (tag !== 42) {\n break;\n }\n message.kind = { $case: \"structValue\", structValue: Struct.unwrap(Struct.decode(reader, reader.uint32())) };\n continue;\n case 6:\n if (tag !== 50) {\n break;\n }\n message.kind = { $case: \"listValue\", listValue: ListValue.unwrap(ListValue.decode(reader, reader.uint32())) };\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n }\n Value.decode = decode;\n function fromJSON(object) {\n return {\n kind: isSet(object.nullValue)\n ? { $case: \"nullValue\", nullValue: nullValueFromJSON(object.nullValue) }\n : isSet(object.numberValue)\n ? { $case: \"numberValue\", numberValue: Number(object.numberValue) }\n : isSet(object.stringValue)\n ? { $case: \"stringValue\", stringValue: String(object.stringValue) }\n : isSet(object.boolValue)\n ? { $case: \"boolValue\", boolValue: Boolean(object.boolValue) }\n : isSet(object.structValue)\n ? { $case: \"structValue\", structValue: object.structValue }\n : isSet(object.listValue)\n ? { $case: \"listValue\", listValue: [...object.listValue] }\n : undefined,\n };\n }\n Value.fromJSON = fromJSON;\n function toJSON(message) {\n const obj = {};\n message.kind?.$case === \"nullValue\" &&\n (obj.nullValue = message.kind?.nullValue !== undefined ? nullValueToJSON(message.kind?.nullValue) : undefined);\n message.kind?.$case === \"numberValue\" && (obj.numberValue = message.kind?.numberValue);\n message.kind?.$case === \"stringValue\" && (obj.stringValue = message.kind?.stringValue);\n message.kind?.$case === \"boolValue\" && (obj.boolValue = message.kind?.boolValue);\n message.kind?.$case === \"structValue\" && (obj.structValue = message.kind?.structValue);\n message.kind?.$case === \"listValue\" && (obj.listValue = message.kind?.listValue);\n return obj;\n }\n Value.toJSON = toJSON;\n function wrap(value) {\n const result = createBaseValue();\n if (value === null) {\n result.kind = { $case: \"nullValue\", nullValue: 0 /* NullValue.NULL_VALUE */ };\n }\n else if (typeof value === \"boolean\") {\n result.kind = { $case: \"boolValue\", boolValue: value };\n }\n else if (typeof value === \"number\") {\n result.kind = { $case: \"numberValue\", numberValue: value };\n }\n else if (typeof value === \"string\") {\n result.kind = { $case: \"stringValue\", stringValue: value };\n }\n else if (Array.isArray(value)) {\n result.kind = { $case: \"listValue\", listValue: value };\n }\n else if (typeof value === \"object\") {\n result.kind = { $case: \"structValue\", structValue: value };\n }\n else if (typeof value !== \"undefined\") {\n throw new Error(\"Unsupported any value type: \" + typeof value);\n }\n return result;\n }\n Value.wrap = wrap;\n function unwrap(message) {\n if (message.kind?.$case === \"nullValue\") {\n return null;\n }\n else if (message.kind?.$case === \"numberValue\") {\n return message.kind?.numberValue;\n }\n else if (message.kind?.$case === \"stringValue\") {\n return message.kind?.stringValue;\n }\n else if (message.kind?.$case === \"boolValue\") {\n return message.kind?.boolValue;\n }\n else if (message.kind?.$case === \"structValue\") {\n return message.kind?.structValue;\n }\n else if (message.kind?.$case === \"listValue\") {\n return message.kind?.listValue;\n }\n else {\n return undefined;\n }\n }\n Value.unwrap = unwrap;\n})(Value || (Value = {}));\nfunction createBaseListValue() {\n return { values: [] };\n}\n/**\n * @public\n */\nexport var ListValue;\n(function (ListValue) {\n function encode(message, writer = _m0.Writer.create()) {\n for (const v of message.values) {\n Value.encode(Value.wrap(v), writer.uint32(10).fork()).ldelim();\n }\n return writer;\n }\n ListValue.encode = encode;\n function decode(input, length) {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseListValue();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n message.values.push(Value.unwrap(Value.decode(reader, reader.uint32())));\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n }\n ListValue.decode = decode;\n function fromJSON(object) {\n return { values: Array.isArray(object?.values) ? [...object.values] : [] };\n }\n ListValue.fromJSON = fromJSON;\n function toJSON(message) {\n const obj = {};\n if (message.values) {\n obj.values = message.values.map((e) => e);\n }\n else {\n obj.values = [];\n }\n return obj;\n }\n ListValue.toJSON = toJSON;\n function wrap(array) {\n const result = createBaseListValue();\n result.values = array ?? [];\n return result;\n }\n ListValue.wrap = wrap;\n function unwrap(message) {\n if (message?.hasOwnProperty(\"values\") && Array.isArray(message.values)) {\n return message.values;\n }\n else {\n return message;\n }\n }\n ListValue.unwrap = unwrap;\n})(ListValue || (ListValue = {}));\nconst tsProtoGlobalThis = (() => {\n if (typeof globalThis !== \"undefined\") {\n return globalThis;\n }\n if (typeof self !== \"undefined\") {\n return self;\n }\n if (typeof window !== \"undefined\") {\n return window;\n }\n if (typeof global !== \"undefined\") {\n return global;\n }\n throw \"Unable to locate global object\";\n})();\nfunction isObject(value) {\n return typeof value === \"object\" && value !== null;\n}\nfunction isSet(value) {\n return value !== null && value !== undefined;\n}\n", "import { getCompositeRootComponent } from './components';\nimport { EntityMappingMode, instanceComposite } from './instance';\nimport { resolveComposite } from './path';\nimport { CompositeDefinition } from './proto/gen/composite.gen';\nexport { EntityMappingMode };\nexport { getCompositeRootComponent };\n/**\n * @public\n * @deprecated composite is not being supported so far, please do not use this feature\n */\nexport var Composite;\n(function (Composite) {\n /** @public */\n function fromJson(object) {\n return CompositeDefinition.fromJSON(object);\n }\n Composite.fromJson = fromJson;\n /** @public */\n function fromBinary(buffer) {\n return CompositeDefinition.decode(buffer);\n }\n Composite.fromBinary = fromBinary;\n /** @public */\n function toJson(composite) {\n return CompositeDefinition.toJSON(composite);\n }\n Composite.toJson = toJson;\n /** @public */\n function toBinary(composite) {\n return CompositeDefinition.encode(composite).finish();\n }\n Composite.toBinary = toBinary;\n /**\n * Instance a composite and returns its root entity\n * @param compositeData - state serialized by the CRDT protocol\n * @param getNextAvailableEntity - function that gives unused entities\n * @param rootEntity - (optional) suggested mapped rootEntity for the composite\n *\n * @public\n */\n /*#__PURE__*/ function instance(engine, compositeData, compositeProvider, options = {}) {\n instanceComposite(engine, compositeData, compositeProvider, options);\n }\n Composite.instance = instance;\n /**\n * Resolve and normalize a composite path\n * @param src - the source path\n * @param cwd - the directory from the resolve should start to resolve\n *\n * @returns the absolute resolved path without slash at the beginning\n * @public\n */\n /*#__PURE__*/ function resolveAndNormalizePath(src, cwd = '/') {\n return resolveComposite(src, cwd);\n }\n Composite.resolveAndNormalizePath = resolveAndNormalizePath;\n})(Composite || (Composite = {}));\n", "// The order of the following imports matters. Please do not auto-sort\nexport * from './engine';\nexport * from './schemas';\nexport * from './runtime/initialization';\nexport * from './runtime/types';\nexport * from './runtime/helpers';\nexport { cyclicParentingChecker } from './systems/cyclicParentingChecker';\nexport * from './systems/events';\nexport * from './systems/raycast';\nexport * from './systems/videoEvents';\nexport * from './systems/async-task';\nexport * from './systems/tween';\nexport * from './systems/triggerArea';\nexport * from './engine/entity';\nexport * from './components/types';\n// @internal\nimport * as components from './components';\n// @internal\nexport { components };\nimport { engine } from './runtime/initialization';\n// export components for global engine\nexport const Transform = /* @__PURE__*/ components.Transform(engine);\nexport const Animator = /* @__PURE__*/ components.Animator(engine);\nexport const AudioSource = /* @__PURE__*/ components.AudioSource(engine);\nexport const AudioStream = /* @__PURE__*/ components.AudioStream(engine);\nexport const Material = /* @__PURE__*/ components.Material(engine);\nexport const MeshRenderer = /* @__PURE__*/ components.MeshRenderer(engine);\nexport const MeshCollider = /* @__PURE__*/ components.MeshCollider(engine);\nexport const Name = components.Name(engine);\nexport const Tags = components.Tags(engine);\nexport const Tween = /* @__PURE__*/ components.Tween(engine);\nexport const VirtualCamera = /* @__PURE__*/ components.VirtualCamera(engine);\nexport const InputModifier = /* @__PURE__*/ components.InputModifier(engine);\nexport const LightSource = /* @__PURE__*/ components.LightSource(engine);\nexport const TriggerArea = /* @__PURE__*/ components.TriggerArea(engine);\n/**\n * @alpha\n * This is going to be used for sync components through a server.\n * Can be modified in the future since it's still in research\n */\nexport const SyncComponents = /* @__PURE__*/ components.SyncComponents(engine);\n/**\n * @alpha\n * Tag a entity to be syncronized through comms\n */\nexport const NetworkEntity = /* @__PURE__*/ components.NetworkEntity(engine);\n/**\n * @alpha\n * Tag a entity to be syncronized through comms\n */\nexport const NetworkParent = /* @__PURE__*/ components.NetworkParent(engine);\n// export components for global engine\nexport * from './components/generated/global.gen';\nexport * from './components/generated/types.gen';\nexport * from './serialization/crdt';\nexport * from './composite';\n", "import { IEngine, ISchema, JsonSchemaExtended, Schemas } from '@dcl/ecs'\nimport {\n Action,\n ActionPayload,\n ActionType,\n ActionTypes,\n ComponentName,\n getComponent,\n} from './definitions'\n\nexport const EMPTY: JsonSchemaExtended = {\n type: 'object',\n properties: {},\n serializationType: 'map',\n}\n\nexport function addActionType<T extends ISchema>(\n engine: IEngine,\n type: string,\n schema?: T,\n) {\n const ActionTypes = getComponent<ActionTypes>(\n ComponentName.ACTION_TYPES,\n engine,\n )\n const actionTypes = ActionTypes.getOrCreateMutable(engine.RootEntity)\n const actionType = {\n type,\n jsonSchema: JSON.stringify(\n schema?.jsonSchema || Schemas.Map({}).jsonSchema,\n ),\n }\n actionTypes.value = [\n ...actionTypes.value.filter(($) => $.type !== actionType.type),\n actionType,\n ]\n}\n\nexport function getActionSchema<T = unknown>(engine: IEngine, type: string) {\n const ActionTypes = getComponent<ActionTypes>(\n ComponentName.ACTION_TYPES,\n engine,\n )\n const actionTypes = ActionTypes.get(engine.RootEntity)\n const actionType = actionTypes.value.find(($) => $.type === type)\n const jsonSchema: JsonSchemaExtended = actionType\n ? JSON.parse(actionType.jsonSchema)\n : EMPTY\n return Schemas.fromJson(jsonSchema) as ISchema<T>\n}\n\nexport function getActionTypes(engine: IEngine) {\n const ActionTypes = getComponent<ActionTypes>(\n ComponentName.ACTION_TYPES,\n engine,\n )\n const actionTypes = ActionTypes.get(engine.RootEntity)\n return actionTypes.value.map(($) => $.type)\n}\n\nexport function getPayload<T extends ActionType>(action: Action) {\n return JSON.parse(action.jsonPayload) as ActionPayload<T>\n}\n\nexport function getJson<T extends ActionType>(payload: ActionPayload<T>) {\n return JSON.stringify(payload)\n}\n", "import { YGAlign, YGJustify } from '@dcl/ecs'\n\nexport enum ComponentName {\n ACTION_TYPES = 'asset-packs::ActionTypes',\n ACTIONS = 'asset-packs::Actions',\n COUNTER = 'asset-packs::Counter',\n TRIGGERS = 'asset-packs::Triggers',\n STATES = 'asset-packs::States',\n COUNTER_BAR = 'asset-packs::CounterBar',\n ADMIN_TOOLS = 'asset-packs::AdminTools',\n VIDEO_SCREEN = 'asset-packs::VideoScreen',\n REWARDS = 'asset-packs::Rewards',\n TEXT_ANNOUNCEMENTS = 'asset-packs::TextAnnouncements',\n VIDEO_CONTROL_STATE = 'asset-packs::VideoControlState',\n}\n\nexport enum TweenType {\n MOVE_ITEM = 'move_item',\n ROTATE_ITEM = 'rotate_item',\n SCALE_ITEM = 'scale_item',\n}\n\nexport enum InterpolationType {\n LINEAR = 'linear',\n EASEINQUAD = 'easeinquad',\n EASEOUTQUAD = 'easeoutquad',\n EASEQUAD = 'easequad',\n EASEINSINE = 'easeinsine',\n EASEOUTSINE = 'easeoutsine',\n EASESINE = 'easeinoutsine',\n EASEINEXPO = 'easeinexpo',\n EASEOUTEXPO = 'easeoutexpo',\n EASEEXPO = 'easeinoutexpo',\n EASEINELASTIC = 'easeinelastic',\n EASEOUTELASTIC = 'easeoutelastic',\n EASEELASTIC = 'easeinoutelastic',\n EASEINBOUNCE = 'easeinbounce',\n EASEOUTEBOUNCE = 'easeoutbounce',\n EASEBOUNCE = 'easeinoutbounce',\n}\n\nexport enum ActionType {\n PLAY_ANIMATION = 'play_animation',\n STOP_ANIMATION = 'stop_animation',\n SET_STATE = 'set_state',\n START_TWEEN = 'start_tween',\n SET_COUNTER = 'set_counter',\n INCREMENT_COUNTER = 'increment_counter',\n DECREASE_COUNTER = 'decrease_counter',\n PLAY_SOUND = 'play_sound',\n STOP_SOUND = 'stop_sound',\n SET_VISIBILITY = 'set_visibility',\n ATTACH_TO_PLAYER = 'attach_to_player',\n DETACH_FROM_PLAYER = 'detach_from_player',\n PLAY_VIDEO_STREAM = 'play_video_stream',\n STOP_VIDEO_STREAM = 'stop_video_stream',\n PLAY_AUDIO_STREAM = 'play_audio_stream',\n STOP_AUDIO_STREAM = 'stop_audio_stream',\n TELEPORT_PLAYER = 'teleport_player',\n MOVE_PLAYER = 'move_player',\n PLAY_DEFAULT_EMOTE = 'play_default_emote',\n PLAY_CUSTOM_EMOTE = 'play_custom_emote',\n OPEN_LINK = 'open_link',\n SHOW_TEXT = 'show_text',\n HIDE_TEXT = 'hide_text',\n START_DELAY = 'start_delay',\n STOP_DELAY = 'stop_delay',\n START_LOOP = 'start_loop',\n STOP_LOOP = 'stop_loop',\n CLONE_ENTITY = 'clone_entity',\n REMOVE_ENTITY = 'remove_entity',\n SHOW_IMAGE = 'show_image',\n HIDE_IMAGE = 'hide_image',\n DAMAGE = 'damage',\n MOVE_PLAYER_HERE = 'move_player_here',\n PLACE_ON_PLAYER = 'place_on_player',\n ROTATE_AS_PLAYER = 'rotate_as_player',\n PLACE_ON_CAMERA = 'place_on_camera',\n ROTATE_AS_CAMERA = 'rotate_as_camera',\n SET_POSITION = 'set_position',\n SET_ROTATION = 'set_rotation',\n SET_SCALE = 'set_scale',\n FOLLOW_PLAYER = 'follow_player',\n STOP_FOLLOWING_PLAYER = 'stop_following_player',\n RANDOM = 'random',\n BATCH = 'batch',\n HEAL_PLAYER = 'heal_player',\n CLAIM_AIRDROP = 'claim_airdrop',\n}\n\nexport enum TriggerType {\n /** @deprecated use ON_INPUT_ACTION instead */\n ON_CLICK = 'on_click',\n ON_INPUT_ACTION = 'on_input_action',\n ON_STATE_CHANGE = 'on_state_change',\n ON_SPAWN = 'on_spawn',\n ON_TWEEN_END = 'on_tween_end',\n ON_COUNTER_CHANGE = 'on_counter_change',\n ON_PLAYER_ENTERS_AREA = 'on_player_enters_area',\n ON_PLAYER_LEAVES_AREA = 'on_player_leaves_area',\n ON_DELAY = 'on_delay',\n ON_LOOP = 'on_loop',\n ON_CLONE = 'on_clone',\n ON_CLICK_IMAGE = 'on_click_image',\n ON_DAMAGE = 'on_damage',\n ON_GLOBAL_CLICK = 'on_global_click',\n ON_GLOBAL_PRIMARY = 'on_global_primary',\n ON_GLOBAL_SECONDARY = 'on_global_secondary',\n ON_TICK = 'on_tick',\n ON_HEAL_PLAYER = 'on_heal_player',\n ON_PLAYER_SPAWN = 'on_player_spawn',\n}\n\nexport enum TriggerConditionType {\n WHEN_STATE_IS = 'when_state_is',\n WHEN_STATE_IS_NOT = 'when_state_is_not',\n WHEN_COUNTER_EQUALS = 'when_counter_equals',\n WHEN_COUNTER_IS_GREATER_THAN = 'when_counter_is_greater_than',\n WHEN_COUNTER_IS_LESS_THAN = 'when_counter_is_less_than',\n WHEN_DISTANCE_TO_PLAYER_LESS_THAN = 'when_distance_to_player_less_than',\n WHEN_DISTANCE_TO_PLAYER_GREATER_THAN = 'when_distance_to_player_greater_than',\n WHEN_PREVIOUS_STATE_IS = 'when_previous_state_is',\n WHEN_PREVIOUS_STATE_IS_NOT = 'when_previous_state_is_not',\n}\n\nexport enum TriggerConditionOperation {\n AND = 'and',\n OR = 'or',\n}\n\n// Defined values instead of using from @dcl/ecs because Schemas doesn't support const enums\nexport enum AlignMode {\n TAM_TOP_LEFT = 0,\n TAM_TOP_CENTER = 1,\n TAM_TOP_RIGHT = 2,\n TAM_MIDDLE_LEFT = 3,\n TAM_MIDDLE_CENTER = 4,\n TAM_MIDDLE_RIGHT = 5,\n TAM_BOTTOM_LEFT = 6,\n TAM_BOTTOM_CENTER = 7,\n TAM_BOTTOM_RIGHT = 8,\n}\n\n// Defined values instead of using from @dcl/ecs because Schemas doesn't support const enums\nexport enum Font {\n F_SANS_SERIF = 0,\n F_SERIF = 1,\n F_MONOSPACE = 2,\n}\n\nexport type ScreenAlignMode = {\n alignItems: YGAlign\n justifyContent: YGJustify\n}\n\n// Defined values instead of using from @dcl/ecs because Schemas doesn't support const enums\nexport enum Colliders {\n /** CL_NONE - no collisions */\n CL_NONE = 0,\n /** CL_POINTER - collisions with the player's pointer ray (e.g. mouse cursor hovering) */\n CL_POINTER = 1,\n /** CL_PHYSICS - collision affecting your player's physics i.e. walls, floor, moving platfroms */\n CL_PHYSICS = 2,\n CL_RESERVED1 = 4,\n CL_RESERVED2 = 8,\n CL_RESERVED3 = 16,\n CL_RESERVED4 = 32,\n CL_RESERVED5 = 64,\n CL_RESERVED6 = 128,\n CL_CUSTOM1 = 256,\n CL_CUSTOM2 = 512,\n CL_CUSTOM3 = 1024,\n CL_CUSTOM4 = 2048,\n CL_CUSTOM5 = 4096,\n CL_CUSTOM6 = 8192,\n CL_CUSTOM7 = 16384,\n CL_CUSTOM8 = 32768,\n}\n\nexport enum ProximityLayer {\n ALL = 'all',\n PLAYER = 'player',\n NON_PLAYER = 'non_player',\n}\n\nexport enum AdminPermissions {\n PUBLIC = 'PUBLIC',\n PRIVATE = 'PRIVATE',\n}\n\nexport enum MediaSource {\n VideoURL,\n LiveStream\n}\n", "import {\n Animator as defineAnimator,\n Transform as defineTransform,\n AudioSource as defineAudioSource,\n AvatarAttach as defineAvatarAttach,\n VisibilityComponent as defineVisibilityComponent,\n GltfContainer as defineGltfContainer,\n UiTransform as defineUiTransform,\n UiText as defineUiText,\n UiBackground as defineUiBackground,\n UiInput as defineUiInput,\n UiInputResult as defineUiInputResult,\n UiCanvasInformation as defineUiCanvasInformation,\n VideoPlayer as defineVideoPlayer,\n Material as defineMaterial,\n MeshRenderer as defineMeshRenderer,\n Billboard as defineBillboard,\n Name as defineName,\n Tween as defineTween,\n TweenSequence as defineTweenSequence,\n PointerEvents as definePointerEvents,\n NetworkEntity as defineNetworkEntity,\n SyncComponents as defineSyncComponents,\n} from '@dcl/ecs/dist/components'\nimport { IEngine } from '@dcl/ecs'\nimport { EngineComponents } from './definitions'\n\nexport function getExplorerComponents(engine: IEngine): EngineComponents {\n return {\n Animator: defineAnimator(engine),\n Transform: defineTransform(engine),\n AudioSource: defineAudioSource(engine),\n AvatarAttach: defineAvatarAttach(engine),\n VisibilityComponent: defineVisibilityComponent(engine),\n GltfContainer: defineGltfContainer(engine),\n UiTransform: defineUiTransform(engine),\n UiText: defineUiText(engine),\n UiBackground: defineUiBackground(engine),\n UiInput: defineUiInput(engine),\n UiInputResult: defineUiInputResult(engine),\n UiCanvasInformation: defineUiCanvasInformation(engine),\n VideoPlayer: defineVideoPlayer(engine),\n Material: defineMaterial(engine),\n MeshRenderer: defineMeshRenderer(engine),\n Billboard: defineBillboard(engine),\n Name: defineName(engine),\n Tween: defineTween(engine),\n TweenSequence: defineTweenSequence(engine),\n PointerEvents: definePointerEvents(engine),\n NetworkEntity: defineNetworkEntity(engine),\n SyncComponents: defineSyncComponents(engine),\n }\n}\n", "import mitt, { Emitter } from 'mitt'\nimport { Entity } from '@dcl/ecs'\nimport { ActionPayload, ActionType, TriggerType } from './definitions'\n\nconst triggers = new Map<Entity, Emitter<Record<TriggerType, void>>>()\n\nconst actions = new Map<\n Entity,\n Emitter<Record<string, ActionPayload<ActionType>>>\n>()\n\nexport function getTriggerEvents(entity: Entity) {\n if (!triggers.has(entity)) {\n triggers.set(entity, mitt())\n }\n return triggers.get(entity)!\n}\n\nexport function getActionEvents(entity: Entity) {\n if (!actions.has(entity)) {\n actions.set(entity, mitt())\n }\n return actions.get(entity)!\n}\n", "import {\n ComponentDefinition,\n IEngine,\n LastWriteWinElementSetComponentDefinition,\n} from '@dcl/ecs'\nimport { ComponentName, Counter } from './definitions'\n\nexport const COMPONENTS_WITH_ID: string[] = [\n ComponentName.ACTIONS,\n ComponentName.STATES,\n ComponentName.COUNTER,\n]\n\nexport function getCounterComponent(engine: IEngine) {\n return engine.getComponent(\n ComponentName.COUNTER,\n ) as LastWriteWinElementSetComponentDefinition<Counter>\n}\n\nexport function getNextId(engine: IEngine) {\n const Counter = getCounterComponent(engine)\n const counter = Counter.getOrCreateMutable(engine.RootEntity)\n return ++counter.value\n}\n\nexport function requiresId<T extends { id: string }>(\n component: ComponentDefinition<unknown>,\n): component is ComponentDefinition<T> {\n return COMPONENTS_WITH_ID.includes(component.componentName)\n}\n", "import {\n Entity,\n IEngine,\n ISchema,\n MaterialComponentDefinitionExtended,\n PBMaterial,\n PBVideoPlayer,\n Schemas,\n VideoTexture,\n AnimatorComponentDefinitionExtended,\n TransformComponentExtended,\n LastWriteWinElementSetComponentDefinition,\n PBAvatarAttach,\n PBVisibilityComponent,\n PBGltfContainer,\n PBUiTransform,\n PBUiText,\n PBUiBackground,\n MeshRendererComponentDefinitionExtended,\n PBBillboard,\n NameType,\n PBTween,\n PBTweenSequence,\n PBPointerEvents,\n NetworkEntity,\n SyncComponents,\n AudioSourceComponentDefinitionExtended,\n PBUiInput,\n PBUiInputResult,\n PBUiCanvasInformation,\n} from '@dcl/ecs'\nimport { addActionType } from './action-types'\nimport {\n ComponentName,\n TweenType,\n InterpolationType,\n ActionType,\n TriggerType,\n TriggerConditionType,\n TriggerConditionOperation,\n AlignMode,\n Font,\n Colliders,\n ProximityLayer,\n AdminPermissions,\n MediaSource,\n} from './enums'\nimport { getExplorerComponents } from './components'\n\nexport const LIVEKIT_STREAM_SRC = 'livekit-video://current-stream'\n\nexport * from './enums'\nexport * from './action-types'\nexport * from './events'\nexport * from './id'\nexport * from './states'\nexport * from './clone'\nexport * from './lww'\nexport * from './types'\n\nexport const ActionSchemas = {\n [ActionType.PLAY_ANIMATION]: Schemas.Map({\n animation: Schemas.String,\n loop: Schemas.Optional(Schemas.Boolean),\n }),\n [ActionType.STOP_ANIMATION]: Schemas.Map({}),\n [ActionType.SET_STATE]: Schemas.Map({ state: Schemas.String }),\n [ActionType.START_TWEEN]: Schemas.Map({\n type: Schemas.EnumString<TweenType>(TweenType, TweenType.MOVE_ITEM),\n end: Schemas.Vector3,\n interpolationType: Schemas.EnumString(\n InterpolationType,\n InterpolationType.LINEAR,\n ),\n duration: Schemas.Float,\n relative: Schemas.Boolean,\n }),\n [ActionType.SET_COUNTER]: Schemas.Map({ counter: Schemas.Int }),\n [ActionType.INCREMENT_COUNTER]: Schemas.Map({\n amount: Schemas.Optional(Schemas.Int),\n }),\n [ActionType.DECREASE_COUNTER]: Schemas.Map({\n amount: Schemas.Optional(Schemas.Int),\n }),\n [ActionType.PLAY_SOUND]: Schemas.Map({\n src: Schemas.String,\n loop: Schemas.Optional(Schemas.Boolean),\n volume: Schemas.Optional(Schemas.Float),\n global: Schemas.Optional(Schemas.Boolean),\n }),\n [ActionType.STOP_SOUND]: Schemas.Map({}),\n [ActionType.SET_VISIBILITY]: Schemas.Map({\n visible: Schemas.Boolean,\n /** @deprecated use collider instead */\n physicsCollider: Schemas.Optional(Schemas.Boolean),\n collider: Schemas.Optional(\n Schemas.EnumNumber(Colliders, Colliders.CL_POINTER),\n ),\n }),\n [ActionType.ATTACH_TO_PLAYER]: Schemas.Map({\n anchorPointId: Schemas.Int,\n }),\n [ActionType.DETACH_FROM_PLAYER]: Schemas.Map({}),\n [ActionType.PLAY_VIDEO_STREAM]: Schemas.Map({\n src: Schemas.Optional(Schemas.String),\n loop: Schemas.Optional(Schemas.Boolean),\n volume: Schemas.Optional(Schemas.Float),\n dclCast: Schemas.Optional(Schemas.Boolean),\n }),\n [ActionType.STOP_VIDEO_STREAM]: Schemas.Map({}),\n [ActionType.PLAY_AUDIO_STREAM]: Schemas.Map({\n url: Schemas.String,\n volume: Schemas.Optional(Schemas.Float),\n }),\n [ActionType.STOP_AUDIO_STREAM]: Schemas.Map({}),\n [ActionType.TELEPORT_PLAYER]: Schemas.Map({\n x: Schemas.Int,\n y: Schemas.Int,\n }),\n [ActionType.MOVE_PLAYER]: Schemas.Map({\n position: Schemas.Vector3,\n cameraTarget: Schemas.Optional(Schemas.Vector3),\n }),\n [ActionType.PLAY_DEFAULT_EMOTE]: Schemas.Map({\n emote: Schemas.String,\n }),\n [ActionType.PLAY_CUSTOM_EMOTE]: Schemas.Map({\n src: Schemas.String,\n loop: Schemas.Optional(Schemas.Boolean),\n }),\n [ActionType.OPEN_LINK]: Schemas.Map({\n url: Schemas.String,\n }),\n [ActionType.SHOW_TEXT]: Schemas.Map({\n text: Schemas.String,\n hideAfterSeconds: Schemas.Float,\n font: Schemas.EnumNumber(Font, Font.F_SANS_SERIF),\n fontSize: Schemas.Optional(Schemas.Float),\n textAlign: Schemas.EnumNumber(AlignMode, AlignMode.TAM_MIDDLE_CENTER),\n }),\n [ActionType.HIDE_TEXT]: Schemas.Map({}),\n [ActionType.START_DELAY]: Schemas.Map({\n actions: Schemas.Array(Schemas.String),\n timeout: Schemas.Float,\n }),\n [ActionType.STOP_DELAY]: Schemas.Map({\n action: Schemas.String,\n }),\n [ActionType.START_LOOP]: Schemas.Map({\n actions: Schemas.Array(Schemas.String),\n interval: Schemas.Float,\n }),\n [ActionType.STOP_LOOP]: Schemas.Map({\n action: Schemas.String,\n }),\n [ActionType.CLONE_ENTITY]: Schemas.Map({\n position: Schemas.Vector3,\n }),\n [ActionType.REMOVE_ENTITY]: Schemas.Map({}),\n [ActionType.SHOW_IMAGE]: Schemas.Map({\n src: Schemas.String,\n align: Schemas.EnumNumber(AlignMode, AlignMode.TAM_MIDDLE_CENTER),\n height: Schemas.Float,\n width: Schemas.Float,\n hideAfterSeconds: Schemas.Optional(Schemas.Float),\n text: Schemas.Optional(Schemas.String),\n fontSize: Schemas.Optional(Schemas.Float),\n }),\n [ActionType.HIDE_IMAGE]: Schemas.Map({\n imageEntity: Schemas.Optional(Schemas.Int),\n }),\n [ActionType.DAMAGE]: Schemas.Map({\n radius: Schemas.Float,\n layer: Schemas.Optional(\n Schemas.EnumString(ProximityLayer, ProximityLayer.ALL),\n ),\n hits: Schemas.Optional(Schemas.Int),\n }),\n [ActionType.MOVE_PLAYER_HERE]: Schemas.Map({}),\n [ActionType.PLACE_ON_PLAYER]: Schemas.Map({}),\n [ActionType.ROTATE_AS_PLAYER]: Schemas.Map({}),\n [ActionType.PLACE_ON_CAMERA]: Schemas.Map({}),\n [ActionType.ROTATE_AS_CAMERA]: Schemas.Map({}),\n [ActionType.SET_POSITION]: Schemas.Map({\n x: Schemas.Float,\n y: Schemas.Float,\n z: Schemas.Float,\n relative: Schemas.Optional(Schemas.Boolean),\n }),\n [ActionType.SET_ROTATION]: Schemas.Map({\n x: Schemas.Float,\n y: Schemas.Float,\n z: Schemas.Float,\n relative: Schemas.Optional(Schemas.Boolean),\n }),\n [ActionType.SET_SCALE]: Schemas.Map({\n x: Schemas.Float,\n y: Schemas.Float,\n z: Schemas.Float,\n relative: Schemas.Optional(Schemas.Boolean),\n }),\n [ActionType.FOLLOW_PLAYER]: Schemas.Map({\n speed: Schemas.Float,\n x: Schemas.Boolean,\n y: Schemas.Boolean,\n z: Schemas.Boolean,\n minDistance: Schemas.Float,\n }),\n [ActionType.STOP_FOLLOWING_PLAYER]: Schemas.Map({}),\n [ActionType.RANDOM]: Schemas.Map({\n actions: Schemas.Array(Schemas.String),\n }),\n [ActionType.BATCH]: Schemas.Map({\n actions: Schemas.Array(Schemas.String),\n }),\n [ActionType.HEAL_PLAYER]: Schemas.Map({\n multiplier: Schemas.Int,\n }),\n [ActionType.CLAIM_AIRDROP]: Schemas.Map({}),\n}\n\nexport type ActionPayload<T extends ActionType = any> =\n T extends keyof typeof ActionSchemas\n ? (typeof ActionSchemas)[T] extends ISchema\n ? ReturnType<(typeof ActionSchemas)[T]['deserialize']>\n : {}\n : {}\n\nexport function getComponent<T>(componentName: string, engine: IEngine) {\n try {\n return engine.getComponent(\n componentName,\n ) as LastWriteWinElementSetComponentDefinition<T>\n } catch (error) {\n console.error(\n `Error using getComponent with componentName=\"${componentName}\"`,\n )\n throw error\n }\n}\n\nexport function getComponents(engine: IEngine) {\n return {\n Actions: getComponent<Actions>(ComponentName.ACTIONS, engine),\n States: getComponent<States>(ComponentName.STATES, engine),\n Counter: getComponent<Counter>(ComponentName.COUNTER, engine),\n Triggers: getComponent<Triggers>(ComponentName.TRIGGERS, engine),\n CounterBar: getComponent<CounterBar>(ComponentName.COUNTER_BAR, engine),\n AdminTools: getComponent<AdminTools>(ComponentName.ADMIN_TOOLS, engine),\n VideoScreen: getComponent<VideoScreen>(ComponentName.VIDEO_SCREEN, engine),\n Rewards: getComponent<Rewards>(ComponentName.REWARDS, engine),\n TextAnnouncements: getComponent<TextAnnouncements>(\n ComponentName.TEXT_ANNOUNCEMENTS,\n engine,\n ),\n VideoControlState: getComponent<VideoControlState>(\n ComponentName.VIDEO_CONTROL_STATE,\n engine,\n ),\n }\n}\n\nexport function createComponents(engine: IEngine) {\n const ActionTypes = engine.defineComponent(ComponentName.ACTION_TYPES, {\n value: Schemas.Array(\n Schemas.Map({\n type: Schemas.String,\n jsonSchema: Schemas.String,\n }),\n ),\n })\n\n const Actions = engine.defineComponent(ComponentName.ACTIONS, {\n id: Schemas.Int,\n value: Schemas.Array(\n Schemas.Map({\n name: Schemas.String,\n type: Schemas.String,\n jsonPayload: Schemas.String,\n allowedInBasicView: Schemas.Optional(Schemas.Boolean),\n basicViewId: Schemas.Optional(Schemas.String),\n default: Schemas.Optional(Schemas.Boolean),\n }),\n ),\n })\n\n const Counter = engine.defineComponent(ComponentName.COUNTER, {\n id: Schemas.Number,\n value: Schemas.Int,\n })\n\n const Triggers = engine.defineComponent(ComponentName.TRIGGERS, {\n value: Schemas.Array(\n Schemas.Map({\n type: Schemas.EnumString<TriggerType>(\n TriggerType,\n TriggerType.ON_INPUT_ACTION,\n ),\n conditions: Schemas.Optional(\n Schemas.Array(\n Schemas.Map({\n id: Schemas.Optional(Schemas.Int),\n type: Schemas.EnumString<TriggerConditionType>(\n TriggerConditionType,\n TriggerConditionType.WHEN_STATE_IS,\n ),\n value: Schemas.String,\n }),\n ),\n ),\n operation: Schemas.Optional(\n Schemas.EnumString<TriggerConditionOperation>(\n TriggerConditionOperation,\n TriggerConditionOperation.AND,\n ),\n ),\n actions: Schemas.Array(\n Schemas.Map({\n id: Schemas.Optional(Schemas.Int),\n name: Schemas.Optional(Schemas.String),\n }),\n ),\n basicViewId: Schemas.Optional(Schemas.String),\n }),\n ),\n })\n\n const States = engine.defineComponent(ComponentName.STATES, {\n id: Schemas.Number,\n value: Schemas.Array(Schemas.String),\n defaultValue: Schemas.Optional(Schemas.String),\n currentValue: Schemas.Optional(Schemas.String),\n previousValue: Schemas.Optional(Schemas.String),\n })\n\n const CounterBar = engine.defineComponent(ComponentName.COUNTER_BAR, {\n primaryColor: Schemas.Optional(Schemas.String),\n secondaryColor: Schemas.Optional(Schemas.String),\n maxValue: Schemas.Optional(Schemas.Float),\n })\n\n const VideoScreen = engine.defineComponent(ComponentName.VIDEO_SCREEN, {\n thumbnail: Schemas.String,\n defaultMediaSource: Schemas.EnumNumber<MediaSource>(\n MediaSource,\n MediaSource.VideoURL,\n ),\n defaultURL: Schemas.String,\n })\n\n const AdminTools = engine.defineComponent(ComponentName.ADMIN_TOOLS, {\n adminPermissions: Schemas.EnumString<AdminPermissions>(\n AdminPermissions,\n AdminPermissions.PUBLIC,\n ),\n authorizedAdminUsers: Schemas.Map({\n me: Schemas.Boolean,\n sceneOwners: Schemas.Boolean,\n allowList: Schemas.Boolean,\n adminAllowList: Schemas.Array(Schemas.String),\n }),\n moderationControl: Schemas.Map({\n isEnabled: Schemas.Boolean,\n kickCoordinates: Schemas.Map({\n x: Schemas.Number,\n y: Schemas.Number,\n z: Schemas.Number,\n }),\n allowNonOwnersManageAdminAllowList: Schemas.Boolean,\n }),\n textAnnouncementControl: Schemas.Map({\n isEnabled: Schemas.Boolean,\n playSoundOnEachAnnouncement: Schemas.Boolean,\n showAuthorOnEachAnnouncement: Schemas.Boolean,\n }),\n videoControl: Schemas.Map({\n isEnabled: Schemas.Boolean,\n disableVideoPlayersSound: Schemas.Boolean,\n showAuthorOnVideoPlayers: Schemas.Boolean,\n linkAllVideoPlayers: Schemas.Boolean,\n videoPlayers: Schemas.Optional(\n Schemas.Array(\n Schemas.Map({\n entity: Schemas.Int,\n customName: Schemas.String,\n }),\n ),\n ),\n }),\n smartItemsControl: Schemas.Map({\n isEnabled: Schemas.Boolean,\n linkAllSmartItems: Schemas.Boolean,\n smartItems: Schemas.Optional(\n Schemas.Array(\n Schemas.Map({\n entity: Schemas.Int,\n customName: Schemas.String,\n defaultAction: Schemas.String,\n }),\n ),\n ),\n }),\n rewardsControl: Schemas.Map({\n isEnabled: Schemas.Boolean,\n rewardItems: Schemas.Optional(\n Schemas.Array(\n Schemas.Map({\n entity: Schemas.Int,\n customName: Schemas.String,\n }),\n ),\n ),\n }),\n })\n\n const Rewards = engine.defineComponent(ComponentName.REWARDS, {\n campaignId: Schemas.String,\n dispenserKey: Schemas.String,\n testMode: Schemas.Boolean,\n })\n\n const TextAnnouncements = engine.defineComponent(\n ComponentName.TEXT_ANNOUNCEMENTS,\n {\n text: Schemas.String,\n author: Schemas.Optional(Schemas.String),\n id: Schemas.String,\n },\n )\n\n const VideoControlState = engine.defineComponent(\n ComponentName.VIDEO_CONTROL_STATE,\n {\n endsAt: Schemas.Optional(Schemas.Int64),\n /** @deprecated streamKey is deprecated and will be removed in a future version */\n streamKey: Schemas.Optional(Schemas.String),\n },\n )\n\n return {\n ActionTypes,\n Actions,\n Counter,\n Triggers,\n States,\n CounterBar,\n AdminTools,\n Rewards,\n TextAnnouncements,\n VideoControlState,\n VideoScreen,\n }\n}\n\nexport type EngineComponents = {\n Animator: AnimatorComponentDefinitionExtended\n Transform: TransformComponentExtended\n AudioSource: AudioSourceComponentDefinitionExtended\n AvatarAttach: LastWriteWinElementSetComponentDefinition<PBAvatarAttach>\n VisibilityComponent: LastWriteWinElementSetComponentDefinition<PBVisibilityComponent>\n GltfContainer: LastWriteWinElementSetComponentDefinition<PBGltfContainer>\n Material: MaterialComponentDefinitionExtended\n MeshRenderer: MeshRendererComponentDefinitionExtended\n VideoPlayer: LastWriteWinElementSetComponentDefinition<PBVideoPlayer>\n UiTransform: LastWriteWinElementSetComponentDefinition<PBUiTransform>\n UiText: LastWriteWinElementSetComponentDefinition<PBUiText>\n UiBackground: LastWriteWinElementSetComponentDefinition<PBUiBackground>\n UiInput: LastWriteWinElementSetComponentDefinition<PBUiInput>\n UiInputResult: LastWriteWinElementSetComponentDefinition<PBUiInputResult>\n UiCanvasInformation: LastWriteWinElementSetComponentDefinition<PBUiCanvasInformation>\n Billboard: LastWriteWinElementSetComponentDefinition<PBBillboard>\n Name: LastWriteWinElementSetComponentDefinition<NameType>\n Tween: LastWriteWinElementSetComponentDefinition<PBTween>\n TweenSequence: LastWriteWinElementSetComponentDefinition<PBTweenSequence>\n PointerEvents: LastWriteWinElementSetComponentDefinition<PBPointerEvents>\n NetworkEntity: typeof NetworkEntity\n SyncComponents: typeof SyncComponents\n}\n\nexport function initComponents(engine: IEngine) {\n // Add actions from this package\n const actionTypes = Object.values(ActionType)\n for (const type of actionTypes) {\n const actionType = type as ActionType\n addActionType(engine, actionType, ActionSchemas[actionType])\n }\n\n // Add counter to root entity\n const Counter = engine.getComponent(\n ComponentName.COUNTER,\n ) as LastWriteWinElementSetComponentDefinition<Counter>\n const counter = Counter.getOrCreateMutable(engine.RootEntity)\n counter.value = counter.value || 0\n\n const { VideoPlayer, Material } = getExplorerComponents(engine)\n initVideoPlayerComponents(engine, { VideoPlayer, Material })\n}\n\nfunction getVideoTexture({ material }: PBMaterial): VideoTexture | undefined {\n if (\n material?.$case === 'unlit' &&\n material.unlit.texture?.tex?.$case === 'videoTexture'\n ) {\n return material.unlit.texture.tex.videoTexture\n }\n\n return undefined\n}\n\nexport function initVideoPlayerComponentMaterial(\n entity: Entity,\n { Material }: Pick<EngineComponents, 'Material'>,\n material?: PBMaterial | null,\n) {\n if (!material || !material.material || material.material.$case !== 'unlit') {\n return null\n }\n\n Material.setBasicMaterial(entity, {\n ...material.material.unlit,\n texture: Material.Texture.Video({\n videoPlayerEntity: entity,\n }),\n })\n}\n\nfunction initVideoPlayerComponents(\n engine: IEngine,\n components: Pick<EngineComponents, 'Material' | 'VideoPlayer'>,\n) {\n function replaceVideoTexture() {\n const { Material, VideoPlayer } = components\n engine.removeSystem(replaceVideoTexture)\n for (const [entity, material] of engine.getEntitiesWith(\n Material,\n VideoPlayer,\n )) {\n const videoTexture = getVideoTexture(material)\n if (videoTexture?.videoPlayerEntity === engine.RootEntity) {\n initVideoPlayerComponentMaterial(entity, components, material)\n }\n }\n }\n engine.addSystem(replaceVideoTexture)\n}\n\nexport function getConditionTypesByComponentName(componentName: ComponentName) {\n switch (componentName) {\n case ComponentName.STATES: {\n return [\n TriggerConditionType.WHEN_STATE_IS,\n TriggerConditionType.WHEN_STATE_IS_NOT,\n TriggerConditionType.WHEN_PREVIOUS_STATE_IS,\n TriggerConditionType.WHEN_PREVIOUS_STATE_IS_NOT,\n ]\n }\n case ComponentName.COUNTER: {\n return [\n TriggerConditionType.WHEN_COUNTER_EQUALS,\n TriggerConditionType.WHEN_COUNTER_IS_GREATER_THAN,\n TriggerConditionType.WHEN_COUNTER_IS_LESS_THAN,\n ]\n }\n case ComponentName.ACTIONS: {\n return [\n TriggerConditionType.WHEN_DISTANCE_TO_PLAYER_LESS_THAN,\n TriggerConditionType.WHEN_DISTANCE_TO_PLAYER_GREATER_THAN,\n ]\n }\n default: {\n return []\n }\n }\n}\n\nexport type Components = ReturnType<typeof createComponents>\n\nexport type ActionTypesComponent = Components['ActionTypes']\nexport type ActionTypes = ReturnType<\n ActionTypesComponent['schema']['deserialize']\n>\n\nexport type ActionsComponent = Components['Actions']\nexport type Actions = ReturnType<ActionsComponent['schema']['deserialize']>\nexport type Action = Actions['value'][0]\n\nexport type CounterComponent = Components['Counter']\nexport type Counter = ReturnType<CounterComponent['schema']['deserialize']>\n\nexport type CounterBarComponent = Components['CounterBar']\nexport type CounterBar = ReturnType<\n CounterBarComponent['schema']['deserialize']\n>\n\nexport type TriggersComponent = Components['Triggers']\nexport type Triggers = ReturnType<TriggersComponent['schema']['deserialize']>\nexport type Trigger = Triggers['value'][0]\nexport type TriggerAction = Trigger['actions'][0]\nexport type TriggerCondition = Exclude<Trigger['conditions'], undefined>[0]\n\nexport type StatesComponent = Components['States']\nexport type States = ReturnType<StatesComponent['schema']['deserialize']>\n\nexport type AdminToolsComponent = Components['AdminTools']\nexport type AdminTools = ReturnType<\n AdminToolsComponent['schema']['deserialize']\n>\n\nexport type VideoScreenComponent = Components['VideoScreen']\nexport type VideoScreen = ReturnType<\n VideoScreenComponent['schema']['deserialize']\n>\n\nexport type RewardsComponent = Components['Rewards']\nexport type Rewards = ReturnType<RewardsComponent['schema']['deserialize']>\n\nexport type TextAnnouncementsComponent = Components['TextAnnouncements']\nexport type TextAnnouncements = ReturnType<\n TextAnnouncementsComponent['schema']['deserialize']\n>\n\nexport type VideoControlStateComponent = Components['VideoControlState']\nexport type VideoControlState = ReturnType<\n VideoControlStateComponent['schema']['deserialize']\n>\n", "import type { IEngine } from '@dcl/ecs';\nimport { Schemas } from '@dcl/ecs/dist/schemas';\n\nexport enum SceneAgeRating {\n Teen = 'T',\n Adult = 'A',\n}\n\nexport enum SceneCategory {\n ART = 'art',\n GAME = 'game',\n CASINO = 'casino',\n SOCIAL = 'social',\n MUSIC = 'music',\n FASHION = 'fashion',\n CRYPTO = 'crypto',\n EDUCATION = 'education',\n SHOP = 'shop',\n BUSINESS = 'business',\n SPORTS = 'sports',\n}\n\nexport const Coords = Schemas.Map({\n x: Schemas.Int,\n y: Schemas.Int,\n});\n\nexport enum TransitionMode {\n TM_FORWARD = 0,\n TM_BACKWARD = 1,\n}\n\n//SceneMetadata component is now versioned, to add new versions you must need to keep the previous properties and add the new ones\nexport const SceneMetadataV0 = {\n name: Schemas.Optional(Schemas.String),\n description: Schemas.Optional(Schemas.String),\n thumbnail: Schemas.Optional(Schemas.String),\n ageRating: Schemas.Optional(Schemas.EnumString(SceneAgeRating, SceneAgeRating.Teen)),\n categories: Schemas.Optional(\n Schemas.Array(Schemas.EnumString(SceneCategory, SceneCategory.GAME)),\n ),\n author: Schemas.Optional(Schemas.String),\n email: Schemas.Optional(Schemas.String),\n tags: Schemas.Optional(Schemas.Array(Schemas.String)),\n layout: Schemas.Map({\n base: Coords,\n parcels: Schemas.Array(Coords),\n }),\n silenceVoiceChat: Schemas.Optional(Schemas.Boolean),\n disablePortableExperiences: Schemas.Optional(Schemas.Boolean),\n spawnPoints: Schemas.Optional(\n Schemas.Array(\n Schemas.Map({\n name: Schemas.String,\n default: Schemas.Optional(Schemas.Boolean),\n position: Schemas.Map({\n x: Schemas.OneOf({\n single: Schemas.Int,\n range: Schemas.Array(Schemas.Int),\n }),\n y: Schemas.OneOf({\n single: Schemas.Int,\n range: Schemas.Array(Schemas.Int),\n }),\n z: Schemas.OneOf({\n single: Schemas.Int,\n range: Schemas.Array(Schemas.Int),\n }),\n }),\n cameraTarget: Schemas.Optional(\n Schemas.Map({\n x: Schemas.Int,\n y: Schemas.Int,\n z: Schemas.Int,\n }),\n ),\n }),\n ),\n ),\n};\n\nexport const SceneMetadataV1 = {\n version: Schemas.Optional(Schemas.Int),\n name: Schemas.Optional(Schemas.String),\n description: Schemas.Optional(Schemas.String),\n thumbnail: Schemas.Optional(Schemas.String),\n ageRating: Schemas.Optional(Schemas.EnumString(SceneAgeRating, SceneAgeRating.Teen)),\n categories: Schemas.Optional(\n Schemas.Array(Schemas.EnumString(SceneCategory, SceneCategory.GAME)),\n ),\n author: Schemas.Optional(Schemas.String),\n email: Schemas.Optional(Schemas.String),\n tags: Schemas.Optional(Schemas.Array(Schemas.String)),\n layout: Schemas.Map({\n base: Coords,\n parcels: Schemas.Array(Coords),\n }),\n silenceVoiceChat: Schemas.Optional(Schemas.Boolean),\n disablePortableExperiences: Schemas.Optional(Schemas.Boolean),\n skyboxConfig: Schemas.Optional(\n Schemas.Map({\n fixedTime: Schemas.Optional(Schemas.Int),\n transitionMode: Schemas.Optional(\n Schemas.EnumNumber(TransitionMode, TransitionMode.TM_FORWARD),\n ),\n }),\n ),\n spawnPoints: Schemas.Optional(\n Schemas.Array(\n Schemas.Map({\n name: Schemas.String,\n default: Schemas.Optional(Schemas.Boolean),\n position: Schemas.Map({\n x: Schemas.OneOf({\n single: Schemas.Int,\n range: Schemas.Array(Schemas.Int),\n }),\n y: Schemas.OneOf({\n single: Schemas.Int,\n range: Schemas.Array(Schemas.Int),\n }),\n z: Schemas.OneOf({\n single: Schemas.Int,\n range: Schemas.Array(Schemas.Int),\n }),\n }),\n cameraTarget: Schemas.Optional(\n Schemas.Map({\n x: Schemas.Int,\n y: Schemas.Int,\n z: Schemas.Int,\n }),\n ),\n }),\n ),\n ),\n};\n\nconst SceneMetadata = 'inspector::SceneMetadata';\n\nexport const VERSIONS = [\n { key: SceneMetadata, value: SceneMetadataV0 },\n { key: `${SceneMetadata}-v1`, value: SceneMetadataV1 },\n];\n\nexport function getLatestSceneComponentVersion() {\n return VERSIONS[VERSIONS.length - 1];\n}\n\nexport function defineSceneComponents(engine: IEngine) {\n const components = VERSIONS.map(({ key, value }) => {\n return engine.defineComponent(key, value);\n });\n\n return components;\n}\n\nexport function removeOldSceneVersions(engine: IEngine, currentSceneVersion: string) {\n VERSIONS.forEach(({ key }) => {\n if (key !== currentSceneVersion) {\n engine.removeComponentDefinition(key);\n }\n });\n}\n", "import { ComponentName } from '@dcl/asset-packs';\nimport { getLatestSceneComponentVersion } from './SceneMetadata';\n\nexport enum CoreComponents {\n ANIMATOR = 'core::Animator',\n AUDIO_SOURCE = 'core::AudioSource',\n AUDIO_STREAM = 'core::AudioStream',\n AVATAR_ATTACH = 'core::AvatarAttach',\n GLTF_CONTAINER = 'core::GltfContainer',\n NETWORK_ENTITY = 'core-schema::Network-Entity',\n MATERIAL = 'core::Material',\n MESH_COLLIDER = 'core::MeshCollider',\n MESH_RENDERER = 'core::MeshRenderer',\n NFT_SHAPE = 'core::NftShape',\n POINTER_EVENTS = 'core::PointerEvents',\n SYNC_COMPONENTS = 'core-schema::Sync-Components',\n TEXT_SHAPE = 'core::TextShape',\n TRANSFORM = 'core::Transform',\n TWEEN = 'core::Tween',\n TWEEN_SEQUENCE = 'core::TweenSequence',\n VIDEO_PLAYER = 'core::VideoPlayer',\n VISIBILITY_COMPONENT = 'core::VisibilityComponent',\n LIGHT_SOURCE = 'core::LightSource',\n GLTF_NODE_MODIFIERS = 'core::GltfNodeModifiers',\n}\n\nexport const EditorComponentNames = {\n Selection: 'inspector::Selection',\n Scene: getLatestSceneComponentVersion().key,\n Nodes: 'inspector::Nodes',\n ActionTypes: ComponentName.ACTION_TYPES,\n Actions: ComponentName.ACTIONS,\n Counter: ComponentName.COUNTER,\n CounterBar: ComponentName.COUNTER_BAR,\n Triggers: ComponentName.TRIGGERS,\n States: ComponentName.STATES,\n TransformConfig: 'inspector::TransformConfig',\n Hide: 'inspector::Hide',\n Lock: 'inspector::Lock',\n Config: 'inspector::Config',\n Ground: 'inspector::Ground',\n Tile: 'inspector::Tile',\n CustomAsset: 'inspector::CustomAsset',\n AdminTools: ComponentName.ADMIN_TOOLS,\n Rewards: ComponentName.REWARDS,\n VideoScreen: ComponentName.VIDEO_SCREEN,\n};\n\nexport type AllComponentsType =\n | CoreComponents\n | (typeof EditorComponentNames)[keyof typeof EditorComponentNames];\n\nexport const AllComponents = {\n ...CoreComponents,\n ...EditorComponentNames,\n};\n", "import type { FileSystemInterface } from '../types';\n\nexport async function getFilesInDirectory(\n fs: FileSystemInterface,\n dirPath: string,\n files: string[],\n recursive: boolean = true,\n ignore: string[] = [], // This functionality can be extended, now only 'absolute' path can be ignored\n): Promise<string[]> {\n try {\n const currentDirFiles = await fs.readdir(dirPath);\n for (const currentPath of currentDirFiles) {\n if (ignore.includes(currentPath.name)) continue;\n\n const slashIfRequire = (dirPath.length && !dirPath.endsWith('/') && '/') || '';\n const fullPath = dirPath + slashIfRequire + currentPath.name;\n\n if (currentPath.isDirectory && recursive) {\n await getFilesInDirectory(fs, fullPath, files, recursive);\n } else {\n files.push(fullPath);\n }\n }\n return files;\n } catch (_) {\n return [];\n }\n}\n\nexport const DIRECTORY = {\n ASSETS: 'assets',\n SCENE: 'scene',\n THUMBNAILS: 'thumbnails',\n CUSTOM: 'custom',\n ASSET_PACKS: 'asset-packs',\n};\n\nexport const EXTENSIONS = [\n '.glb',\n '.png',\n '.composite',\n '.composite.bin',\n '.gltf',\n '.jpg',\n '.mp3',\n '.ogg',\n '.wav',\n '.mp4',\n];\n\nexport function withAssetDir(filePath: string = '') {\n return filePath ? `${DIRECTORY.ASSETS}/${filePath}` : DIRECTORY.ASSETS;\n}\n\nexport function withAssetPacksDir(filePath: string) {\n return withAssetDir(`${DIRECTORY.ASSET_PACKS}/${filePath}`);\n}\n\nexport function isFileInAssetDir(filePath: string = '') {\n return filePath.startsWith(DIRECTORY.ASSETS);\n}\n\nexport function getCurrentCompositePath() {\n return withAssetDir(`${DIRECTORY.SCENE}/main.composite`);\n}\n\nexport function transformBinaryToBase64Resource(content: Uint8Array): string {\n return `data:image/png;base64,${Buffer.from(content).toString('base64')}`;\n}\n\nexport function transformBase64ResourceToBinary(base64Resource: string): Buffer {\n const header = 'data:image/png;base64,';\n return Buffer.from(base64Resource.slice(header.length), 'base64');\n}\n", "import type { FileSystemInterface } from '../types';\n\nasync function upsertAsset(fs: FileSystemInterface, path: string, content: Uint8Array | null) {\n if (content) {\n await fs.writeFile(path, Buffer.from(content));\n } else {\n await fs.rm(path);\n }\n}\n\nexport default upsertAsset;\n", "import fetch from 'node-fetch';\nimport type { FileSystemInterface } from '../../types';\nimport { getConfig } from '../../../logic/config';\n\nexport async function installBin(fs: FileSystemInterface) {\n const config = getConfig();\n if (!config.binIndexJsUrl) {\n return;\n }\n\n console.log('Installing binaries');\n const bin = await fetch(config.binIndexJsUrl).then(resp => resp.text());\n await fs.writeFile('bin/index.js', Buffer.from(bin));\n}\n", "{\n \"name\": \"@dcl/asset-packs\",\n \"version\": \"2.6.1\",\n \"description\": \"\",\n \"main\": \"dist/definitions.js\",\n \"typings\": \"dist/definitions.d.ts\",\n \"scripts\": {\n \"download\": \"ts-node --project tsconfig.scripts.json ./scripts/download.ts\",\n \"validate\": \"ts-node --project tsconfig.scripts.json ./scripts/validate.ts\",\n \"upload\": \"ts-node --project tsconfig.scripts.json ./scripts/upload.ts\",\n \"start\": \"concurrently \\\"npm run start:js\\\" \\\"npm run start:lib\\\" \\\"npm run start:catalog\\\"\",\n \"start:js\": \"sdk-commands start --no-browser\",\n \"start:lib\": \"npm run build:lib -- --watch\",\n \"start:catalog\": \"nodemon --watch packs -x \\\"npm run build:catalog\\\"\",\n \"start:dev\": \"concurrently \\\"npm run start:js -- --data-layer\\\" \\\"npm run start:lib\\\" \\\"npm run start:catalog\\\"\",\n \"build:js\": \"sdk-commands build\",\n \"build:lib\": \"tsc --project tsconfig.lib.json\",\n \"build:catalog\": \"ts-node --project tsconfig.scripts.json ./scripts/catalog.ts\",\n \"build\": \"npm run build:js && npm run build:lib && npm run build:catalog\",\n \"migrate\": \"ts-node --project tsconfig.scripts.json ./scripts/migrate.ts\"\n },\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"git+https://github.com/decentraland/asset-packs.git\"\n },\n \"keywords\": [],\n \"author\": \"\",\n \"license\": \"ISC\",\n \"bugs\": {\n \"url\": \"https://github.com/decentraland/asset-packs/issues\"\n },\n \"homepage\": \"https://github.com/decentraland/asset-packs#readme\",\n \"devDependencies\": {\n \"@aws-sdk/client-s3\": \"^3.405.0\",\n \"@aws-sdk/lib-storage\": \"^3.405.0\",\n \"@dcl/ecs\": \"^7.8.1-14131012904.commit-6157fcb\",\n \"@dcl/hashing\": \"^3.0.4\",\n \"@dcl/js-runtime\": \"7.8.0\",\n \"@dcl/react-ecs\": \"^7.8.1-14131012904.commit-6157fcb\",\n \"@dcl/sdk-commands\": \"^7.7.6-13418365922.commit-c459a2f\",\n \"@types/mime-types\": \"^2.1.1\",\n \"@types/node-fetch\": \"^2.6.4\",\n \"concurrently\": \"^8.2.1\",\n \"dotenv\": \"^16.3.1\",\n \"fp-future\": \"^1.0.1\",\n \"mime-types\": \"^2.1.35\",\n \"node-fetch\": \"^2.7.0\",\n \"nodemon\": \"^3.0.1\",\n \"p-queue\": \"^7.4.1\",\n \"prettier\": \"^3.0.2\",\n \"rimraf\": \"^5.0.1\",\n \"serve\": \"^14.2.1\",\n \"serve-handler\": \"^6.1.5\",\n \"ts-node\": \"^10.9.1\",\n \"typescript\": \"^5.1.6\"\n },\n \"dependencies\": {\n \"@dcl-sdk/utils\": \"^1.3.0\",\n \"@types/glob\": \"^8.1.0\",\n \"glob\": \"^11.0.0\",\n \"mitt\": \"^3.0.1\"\n },\n \"prettier\": {\n \"singleQuote\": true,\n \"semi\": false,\n \"printWidth\": 80\n },\n \"commit\": \"b8ef05acc10848cc2b0bb5654ff3567493bc2b79\"\n}\n", "import { version } from '@dcl/asset-packs/package.json';\n\nexport type InspectorConfig = {\n dataLayerRpcWsUrl: string | null;\n dataLayerRpcParentUrl: string | null;\n binIndexJsUrl: string | null;\n disableSmartItems: boolean;\n contentUrl: string;\n segmentAppId: string | null;\n segmentUserId: string | null;\n segmentKey: string | null;\n projectId: string | null;\n catalystBaseUrl: string | null;\n};\n\nexport type GlobalWithConfig = typeof globalThis & {\n InspectorConfig?: Partial<InspectorConfig>;\n};\n\nexport const CONTENT_URL = version.includes('commit')\n ? 'https://builder-items.decentraland.zone'\n : 'https://builder-items.decentraland.org';\n\nexport const CATALYST_BASE_URL = 'https://peer.decentraland.org';\n\nexport function getConfig(): InspectorConfig {\n const config = (globalThis as GlobalWithConfig).InspectorConfig;\n const params = new URLSearchParams(globalThis?.location?.search || '');\n return {\n dataLayerRpcWsUrl:\n params.get('ws') || params.get('dataLayerRpcWsUrl') || config?.dataLayerRpcWsUrl || null,\n dataLayerRpcParentUrl:\n params.get('parent') ||\n params.get('dataLayerRpcParentUrl') ||\n config?.dataLayerRpcParentUrl ||\n null,\n binIndexJsUrl: params.get('binIndexJsUrl') || config?.binIndexJsUrl || null,\n disableSmartItems: params.has('disableSmartItems') || !!config?.disableSmartItems,\n contentUrl: params.get('contentUrl') || config?.contentUrl || CONTENT_URL,\n segmentAppId: params.get('segmentAppId') || config?.segmentAppId || null,\n segmentUserId: params.get('segmentUserId') || config?.segmentUserId || null,\n segmentKey: params.get('segmentKey') || config?.segmentKey || null,\n projectId: params.get('projectId') || config?.projectId || null,\n catalystBaseUrl: params.get('catalystBaseUrl') || config?.catalystBaseUrl || CATALYST_BASE_URL,\n };\n}\n", "import { Schemas } from '@dcl/ecs';\nimport type { MapResult } from '@dcl/ecs/dist/schemas/Map';\nimport type { AllComponentsType } from './types';\nimport { AllComponents } from './types';\n\nenum TransformOnError {\n FAIL = 'fail',\n SKIP = 'skip',\n NOOP = 'noop',\n}\n\nexport const ConfigComponentSchema = {\n isBasicViewEnabled: Schemas.Boolean,\n // @deprecated - Legacy property for backward compatibility\n componentName: Schemas.String,\n // @deprecated - Legacy property for backward compatibility\n fields: Schemas.Array(\n Schemas.Map({\n name: Schemas.String,\n type: Schemas.EnumString<AllComponentsType>(AllComponents, AllComponents.Actions),\n layout: Schemas.Optional(Schemas.String),\n basicViewId: Schemas.Optional(Schemas.String),\n }),\n ),\n // @deprecated - Legacy property for backward compatibility\n assetId: Schemas.Optional(Schemas.String),\n\n // V2 properties\n label: Schemas.Optional(Schemas.String),\n sections: Schemas.Optional(\n Schemas.Array(\n Schemas.Map({\n id: Schemas.String,\n label: Schemas.Optional(Schemas.String),\n items: Schemas.Array(\n Schemas.Map({\n component: Schemas.String,\n widget: Schemas.String,\n label: Schemas.Optional(Schemas.String),\n type: Schemas.Optional(Schemas.String),\n path: Schemas.Optional(Schemas.String),\n basicViewId: Schemas.Optional(Schemas.String),\n // Additional props for the widget, we should make all of them optional\n props: Schemas.Optional(\n Schemas.Map({\n basic: Schemas.Optional(Schemas.Boolean),\n }),\n ),\n constraints: Schemas.Optional(\n Schemas.Map({\n min: Schemas.Optional(Schemas.Number),\n max: Schemas.Optional(Schemas.Number),\n minExclusive: Schemas.Optional(Schemas.Number),\n maxExclusive: Schemas.Optional(Schemas.Number),\n step: Schemas.Optional(Schemas.Number),\n multipleOf: Schemas.Optional(Schemas.Number),\n minLength: Schemas.Optional(Schemas.Number),\n maxLength: Schemas.Optional(Schemas.Number),\n pattern: Schemas.Optional(Schemas.String),\n format: Schemas.Optional(Schemas.String),\n default: Schemas.Optional(Schemas.String),\n }),\n ),\n transform: Schemas.Optional(\n Schemas.Map({\n in: Schemas.Optional(\n Schemas.Map({\n steps: Schemas.Array(\n Schemas.Map({\n op: Schemas.String,\n onError: Schemas.Optional(\n Schemas.EnumString<TransformOnError>(\n TransformOnError,\n TransformOnError.NOOP,\n ),\n ),\n }),\n ),\n }),\n ),\n out: Schemas.Optional(\n Schemas.Map({\n steps: Schemas.Array(\n Schemas.Map({\n op: Schemas.String,\n onError: Schemas.Optional(\n Schemas.EnumString<TransformOnError>(\n TransformOnError,\n TransformOnError.NOOP,\n ),\n ),\n }),\n ),\n }),\n ),\n }),\n ),\n dataSource: Schemas.Optional(\n Schemas.Map({\n kind: Schemas.String,\n // [key: string]: unknown // TODO: Define a better dataSource schema to get data from components or other sources\n }),\n ),\n }),\n ),\n columns: Schemas.Optional(Schemas.Number),\n helpTooltip: Schemas.Optional(\n Schemas.Map({\n text: Schemas.String,\n link: Schemas.Optional(Schemas.String),\n }),\n ),\n }),\n ),\n ),\n helpTooltip: Schemas.Optional(\n Schemas.Map({\n text: Schemas.String,\n link: Schemas.Optional(Schemas.String),\n }),\n ),\n version: Schemas.Optional(Schemas.Number),\n};\n\nexport type ConfigComponentType = MapResult<typeof ConfigComponentSchema>;\n", "import type {\n ComponentDefinition,\n Entity,\n IEngine,\n LastWriteWinElementSetComponentDefinition,\n} from '@dcl/ecs';\nimport { Schemas } from '@dcl/ecs';\nimport * as components from '@dcl/ecs/dist/components';\nimport type {\n States,\n ActionTypes,\n Actions,\n Triggers,\n Counter,\n CounterBar,\n AdminTools,\n Rewards,\n VideoScreen,\n} from '@dcl/asset-packs';\nimport { createComponents as createAssetPacksComponents } from '@dcl/asset-packs';\nimport type { Layout } from '../../utils/layout';\nimport type { GizmoType } from '../../utils/gizmo';\nimport type { TransformConfig } from './TransformConfig';\nimport type { TransitionMode } from './SceneMetadata';\nimport {\n Coords,\n defineSceneComponents,\n getLatestSceneComponentVersion,\n SceneAgeRating,\n SceneCategory,\n} from './SceneMetadata';\nimport type { ConfigComponentType } from './Config';\nimport { ConfigComponentSchema } from './Config';\nimport { EditorComponentNames as BaseEditorComponentNames } from './types';\n\nexport { SceneAgeRating, SceneCategory };\nexport { CoreComponents, AllComponentsType } from './types';\n\n// Override the Scene property with the dynamic value\nexport const EditorComponentNames = {\n ...BaseEditorComponentNames,\n Scene: getLatestSceneComponentVersion().key,\n};\n\nexport type Component<T = unknown> = ComponentDefinition<T>;\nexport type Node = { entity: Entity; open?: boolean; children: Entity[] };\n\nexport type SceneSpawnPointCoord =\n | { $case: 'single'; value: number }\n | { $case: 'range'; value: number[] };\n\nexport type SceneSpawnPoint = {\n name: string;\n default?: boolean;\n position: {\n x: SceneSpawnPointCoord;\n y: SceneSpawnPointCoord;\n z: SceneSpawnPointCoord;\n };\n cameraTarget?: {\n x: number;\n y: number;\n z: number;\n };\n};\n\nexport type SceneComponent = {\n name?: string;\n description?: string;\n skyboxConfig?: {\n fixedTime?: number;\n transitionMode?: TransitionMode;\n };\n thumbnail?: string;\n ageRating?: SceneAgeRating;\n main?: string;\n categories?: SceneCategory[];\n author?: string;\n email?: string;\n tags?: string[];\n layout: Layout;\n silenceVoiceChat?: boolean;\n disablePortableExperiences?: boolean;\n spawnPoints?: SceneSpawnPoint[];\n};\n\n// eslint-disable-next-line @typescript-eslint/ban-types\nexport type GroundComponent = {};\n// eslint-disable-next-line @typescript-eslint/ban-types\nexport type TileComponent = {};\n\nexport type CustomAssetComponent = {\n assetId: string;\n};\n\nexport type EditorComponentsTypes = {\n Selection: { gizmo: GizmoType };\n Scene: SceneComponent;\n Nodes: { value: Node[] };\n TransformConfig: TransformConfig;\n ActionTypes: ActionTypes;\n Actions: Actions;\n Triggers: Triggers;\n States: States;\n Counter: Counter;\n Hide: { value: boolean };\n Lock: { value: boolean };\n CounterBar: CounterBar;\n Config: ConfigComponentType;\n Ground: GroundComponent;\n Tile: TileComponent;\n CustomAsset: CustomAssetComponent;\n AdminTools: AdminTools;\n VideoScreen: VideoScreen;\n Rewards: Rewards;\n};\n\nexport type EditorComponents = {\n Selection: LastWriteWinElementSetComponentDefinition<EditorComponentsTypes['Selection']>;\n Scene: LastWriteWinElementSetComponentDefinition<EditorComponentsTypes['Scene']>;\n Nodes: LastWriteWinElementSetComponentDefinition<EditorComponentsTypes['Nodes']>;\n TransformConfig: LastWriteWinElementSetComponentDefinition<\n EditorComponentsTypes['TransformConfig']\n >;\n ActionTypes: LastWriteWinElementSetComponentDefinition<EditorComponentsTypes['ActionTypes']>;\n Actions: LastWriteWinElementSetComponentDefinition<EditorComponentsTypes['Actions']>;\n Counter: LastWriteWinElementSetComponentDefinition<EditorComponentsTypes['Counter']>;\n Triggers: LastWriteWinElementSetComponentDefinition<EditorComponentsTypes['Triggers']>;\n States: LastWriteWinElementSetComponentDefinition<EditorComponentsTypes['States']>;\n Hide: LastWriteWinElementSetComponentDefinition<EditorComponentsTypes['Hide']>;\n Lock: LastWriteWinElementSetComponentDefinition<EditorComponentsTypes['Lock']>;\n CounterBar: LastWriteWinElementSetComponentDefinition<EditorComponentsTypes['CounterBar']>;\n Config: LastWriteWinElementSetComponentDefinition<EditorComponentsTypes['Config']>;\n Ground: LastWriteWinElementSetComponentDefinition<EditorComponentsTypes['Ground']>;\n Tile: LastWriteWinElementSetComponentDefinition<EditorComponentsTypes['Tile']>;\n CustomAsset: LastWriteWinElementSetComponentDefinition<EditorComponentsTypes['CustomAsset']>;\n AdminTools: LastWriteWinElementSetComponentDefinition<EditorComponentsTypes['AdminTools']>;\n VideoScreen: LastWriteWinElementSetComponentDefinition<EditorComponentsTypes['VideoScreen']>;\n Rewards: LastWriteWinElementSetComponentDefinition<EditorComponentsTypes['Rewards']>;\n};\n\nexport type SdkComponents = {\n Animator: ReturnType<typeof components.Animator>;\n AudioSource: ReturnType<typeof components.AudioSource>;\n AudioStream: ReturnType<typeof components.AudioStream>;\n AvatarAttach: ReturnType<typeof components.AvatarAttach>;\n Billboard: ReturnType<typeof components.Billboard>;\n GltfContainer: ReturnType<typeof components.GltfContainer>;\n Material: ReturnType<typeof components.Material>;\n MeshCollider: ReturnType<typeof components.MeshCollider>;\n MeshRenderer: ReturnType<typeof components.MeshRenderer>;\n Name: ReturnType<typeof components.Name>;\n NetworkEntity: ReturnType<typeof components.NetworkEntity>;\n NftShape: ReturnType<typeof components.NftShape>;\n PointerEvents: ReturnType<typeof components.PointerEvents>;\n SyncComponents: ReturnType<typeof components.SyncComponents>;\n TextShape: ReturnType<typeof components.TextShape>;\n Transform: ReturnType<typeof components.Transform>;\n Tween: ReturnType<typeof components.Tween>;\n TweenSequence: ReturnType<typeof components.TweenSequence>;\n VideoPlayer: ReturnType<typeof components.VideoPlayer>;\n VisibilityComponent: ReturnType<typeof components.VisibilityComponent>;\n Tags: ReturnType<typeof components.Tags>;\n LightSource: ReturnType<typeof components.LightSource>;\n GltfNodeModifiers: ReturnType<typeof components.GltfNodeModifiers>;\n};\n\nexport function createComponents(engine: IEngine): SdkComponents {\n const Animator = components.Animator(engine);\n const AudioSource = components.AudioSource(engine);\n const AudioStream = components.AudioStream(engine);\n const AvatarAttach = components.AvatarAttach(engine);\n const Billboard = components.Billboard(engine);\n const GltfContainer = components.GltfContainer(engine);\n const Material = components.Material(engine);\n const MeshCollider = components.MeshCollider(engine);\n const MeshRenderer = components.MeshRenderer(engine);\n const Name = components.Name(engine);\n const NetworkEntity = components.NetworkEntity(engine);\n const NftShape = components.NftShape(engine);\n const PointerEvents = components.PointerEvents(engine);\n const SyncComponents = components.SyncComponents(engine);\n const TextShape = components.TextShape(engine);\n const Transform = components.Transform(engine);\n const Tween = components.Tween(engine);\n const TweenSequence = components.TweenSequence(engine);\n const VideoPlayer = components.VideoPlayer(engine);\n const VisibilityComponent = components.VisibilityComponent(engine);\n const Tags = components.Tags(engine);\n const LightSource = components.LightSource(engine);\n const GltfNodeModifiers = components.GltfNodeModifiers(engine);\n\n return {\n Animator,\n AudioSource,\n AudioStream,\n AvatarAttach,\n Billboard,\n GltfContainer,\n Material,\n MeshCollider,\n MeshRenderer,\n Name,\n NetworkEntity,\n NftShape,\n PointerEvents,\n SyncComponents,\n Tags,\n TextShape,\n Transform,\n Tween,\n TweenSequence,\n VideoPlayer,\n VisibilityComponent,\n LightSource,\n GltfNodeModifiers,\n };\n}\n\n/* istanbul ignore next */\nexport function createEditorComponents(engine: IEngine): EditorComponents {\n const Selection = engine.defineComponent(EditorComponentNames.Selection, {\n gizmo: Schemas.Int,\n });\n\n // legacy component\n // we define the schema of the legacy component for retrocompat purposes\n engine.defineComponent('inspector::Scene', {\n layout: Schemas.Map({\n base: Coords,\n parcels: Schemas.Array(Coords),\n }),\n });\n\n const Scene = defineSceneComponents(engine).pop() as ReturnType<typeof defineSceneComponents>[0];\n\n const Nodes = engine.defineComponent(EditorComponentNames.Nodes, {\n value: Schemas.Array(\n Schemas.Map({\n entity: Schemas.Entity,\n open: Schemas.Optional(Schemas.Boolean),\n children: Schemas.Array(Schemas.Entity),\n }),\n ),\n });\n\n const {\n ActionTypes,\n Actions,\n Counter,\n Triggers,\n States,\n CounterBar,\n AdminTools,\n Rewards,\n VideoScreen,\n } = createAssetPacksComponents(engine as any);\n\n const TransformConfig = engine.defineComponent(EditorComponentNames.TransformConfig, {\n porportionalScaling: Schemas.Optional(Schemas.Boolean),\n });\n\n const Hide = engine.defineComponent(EditorComponentNames.Hide, {\n value: Schemas.Boolean,\n });\n\n const Lock = engine.defineComponent(EditorComponentNames.Lock, {\n value: Schemas.Boolean,\n });\n\n const Config = engine.defineComponent(EditorComponentNames.Config, ConfigComponentSchema);\n\n const Ground = engine.defineComponent(EditorComponentNames.Ground, {});\n const Tile = engine.defineComponent(EditorComponentNames.Tile, {});\n const CustomAsset = engine.defineComponent(EditorComponentNames.CustomAsset, {\n assetId: Schemas.String,\n });\n\n return {\n Selection,\n Scene,\n Nodes,\n TransformConfig,\n Hide,\n Lock,\n Config,\n ActionTypes: ActionTypes as unknown as LastWriteWinElementSetComponentDefinition<\n EditorComponentsTypes['ActionTypes']\n >,\n Actions: Actions as unknown as LastWriteWinElementSetComponentDefinition<\n EditorComponentsTypes['Actions']\n >,\n Counter: Counter as unknown as LastWriteWinElementSetComponentDefinition<\n EditorComponentsTypes['Counter']\n >,\n Triggers: Triggers as unknown as LastWriteWinElementSetComponentDefinition<\n EditorComponentsTypes['Triggers']\n >,\n States: States as unknown as LastWriteWinElementSetComponentDefinition<\n EditorComponentsTypes['States']\n >,\n CounterBar: CounterBar as unknown as LastWriteWinElementSetComponentDefinition<\n EditorComponentsTypes['CounterBar']\n >,\n Ground: Ground as unknown as LastWriteWinElementSetComponentDefinition<\n EditorComponentsTypes['Ground']\n >,\n Tile: Tile as unknown as LastWriteWinElementSetComponentDefinition<\n EditorComponentsTypes['Tile']\n >,\n CustomAsset: CustomAsset as unknown as LastWriteWinElementSetComponentDefinition<\n EditorComponentsTypes['CustomAsset']\n >,\n AdminTools: AdminTools as unknown as LastWriteWinElementSetComponentDefinition<\n EditorComponentsTypes['AdminTools']\n >,\n VideoScreen: VideoScreen as unknown as LastWriteWinElementSetComponentDefinition<\n EditorComponentsTypes['VideoScreen']\n >,\n Rewards: Rewards as unknown as LastWriteWinElementSetComponentDefinition<\n EditorComponentsTypes['Rewards']\n >,\n };\n}\n", "export interface ErrorContext {\n provider?: string;\n transaction?: string;\n operation?: string;\n component?: string;\n entity?: number;\n}\n\nexport class StateManagerError extends Error {\n constructor(\n message: string,\n public readonly context: ErrorContext,\n public readonly originalError?: Error,\n ) {\n super(message);\n this.name = 'StateManagerError';\n }\n}\n\nexport class ErrorHandler {\n private static formatContext(context: ErrorContext): string {\n const parts = [];\n if (context.provider) parts.push(`provider:${context.provider}`);\n if (context.transaction) parts.push(`tx:${context.transaction.slice(0, 8)}`);\n if (context.operation) parts.push(`op:${context.operation}`);\n if (context.component) parts.push(`comp:${context.component}`);\n if (context.entity !== undefined) parts.push(`entity:${context.entity}`);\n return parts.join(' ');\n }\n\n static handleError(message: string, context: ErrorContext, error?: Error): void {\n const contextStr = this.formatContext(context);\n const fullMessage = `${message} [${contextStr}]`;\n\n if (error) {\n console.error(fullMessage, error);\n } else {\n console.error(fullMessage);\n }\n }\n\n static createError(\n message: string,\n context: ErrorContext,\n originalError?: Error,\n ): StateManagerError {\n return new StateManagerError(message, context, originalError);\n }\n}\n", "import type {\n ComponentDefinition,\n CompositeDefinition,\n Entity,\n IEngine,\n OnChangeFunction,\n} from '@dcl/ecs';\nimport { CrdtMessageType } from '@dcl/ecs';\nimport type { FileSystemInterface } from '../types';\nimport type { InspectorPreferences } from '../../logic/preferences/types';\nimport { EditorComponentNames } from '../../sdk/components';\nimport { ErrorHandler } from './error-handler';\n\nexport enum OperationType {\n SCENE_UPDATE = 'scene_update',\n COMPOSITE_UPDATE = 'composite_update',\n UNDO_CAPTURE = 'undo_capture',\n FILE_OPERATION = 'file_operation',\n}\n\nexport interface BaseOperation {\n type: OperationType;\n entity: Entity;\n componentName: string;\n operation: CrdtMessageType;\n timestamp: number;\n}\n\nexport interface SceneOperation extends BaseOperation {\n type: OperationType.SCENE_UPDATE;\n componentValue: unknown;\n}\n\nexport interface CompositeOperation extends BaseOperation {\n type: OperationType.COMPOSITE_UPDATE;\n componentValue: unknown;\n}\n\nexport interface UndoCaptureOperation extends BaseOperation {\n type: OperationType.UNDO_CAPTURE;\n componentValue: unknown;\n}\n\nexport type Operation = SceneOperation | CompositeOperation | UndoCaptureOperation;\n\nexport interface Transaction {\n id: string;\n operations: Operation[];\n source: 'engine' | 'undo' | 'redo' | 'external';\n completed: boolean;\n}\n\nexport interface StateProvider {\n readonly name: string;\n canHandle(operation: Operation): boolean;\n processOperation(operation: Operation, transaction: Transaction): Promise<void>;\n onTransactionComplete(transaction: Transaction): Promise<void>;\n}\n\nexport interface StateManagerOptions {\n fs: FileSystemInterface;\n engine: IEngine;\n getInspectorPreferences: () => InspectorPreferences;\n compositePath: string;\n}\n\nexport class StateManager {\n private providers = new Map<string, StateProvider>();\n private pendingTransaction: Transaction | null = null;\n private transactionQueue: Transaction[] = [];\n private processing = false;\n private readonly maxBatchSize = 50; // prevent oversized batches\n private readonly fs: FileSystemInterface;\n private readonly engine: IEngine;\n private readonly getInspectorPreferences: () => InspectorPreferences;\n private readonly compositePath: string;\n private pendingTimeouts = new Set<NodeJS.Timeout>();\n\n constructor(options: StateManagerOptions) {\n this.fs = options.fs;\n this.engine = options.engine;\n this.getInspectorPreferences = options.getInspectorPreferences;\n this.compositePath = options.compositePath;\n }\n\n registerProvider(provider: StateProvider): void {\n this.providers.set(provider.name, provider);\n }\n\n unregisterProvider(name: string): void {\n this.providers.delete(name);\n }\n\n getProvider<T extends StateProvider>(name: string): T | undefined {\n return this.providers.get(name) as T;\n }\n\n createOnChangeHandler(): OnChangeFunction {\n return (entity, operation, component, componentValue) => {\n if (this.processing) return;\n\n const opType = this.determineOperationType(operation, component);\n const baseOp = {\n entity,\n componentName: component?.componentName || 'unknown',\n operation,\n timestamp: Date.now(),\n };\n\n let op: Operation;\n switch (opType) {\n case OperationType.SCENE_UPDATE:\n op = { ...baseOp, type: OperationType.SCENE_UPDATE, componentValue };\n break;\n case OperationType.COMPOSITE_UPDATE:\n op = { ...baseOp, type: OperationType.COMPOSITE_UPDATE, componentValue };\n break;\n case OperationType.UNDO_CAPTURE:\n op = { ...baseOp, type: OperationType.UNDO_CAPTURE, componentValue };\n break;\n default:\n op = { ...baseOp, type: OperationType.UNDO_CAPTURE, componentValue };\n }\n\n this.addToCurrentTransaction(op);\n };\n }\n\n private determineOperationType(\n operation: CrdtMessageType,\n component: ComponentDefinition<unknown> | undefined,\n ): OperationType {\n if (!component) return OperationType.COMPOSITE_UPDATE;\n\n switch (component.componentName) {\n case EditorComponentNames.Scene:\n return OperationType.SCENE_UPDATE;\n case EditorComponentNames.Selection:\n return OperationType.UNDO_CAPTURE;\n default:\n if (\n operation === CrdtMessageType.PUT_COMPONENT ||\n operation === CrdtMessageType.DELETE_COMPONENT\n ) {\n return OperationType.COMPOSITE_UPDATE;\n }\n return OperationType.UNDO_CAPTURE;\n }\n }\n\n private addToCurrentTransaction(operation: Operation): void {\n if (!this.pendingTransaction) {\n this.pendingTransaction = {\n id: crypto.randomUUID(),\n operations: [],\n source: 'engine',\n completed: false,\n };\n\n /**\n * Use setTimeout(0) to batch operations into a single transaction.\n *\n * This delays the transaction commit until the next tick of the event loop,\n * allowing multiple synchronous operations to be grouped together.\n *\n * Example without batching:\n * component1.update() \u2192 Transaction 1 \u2192 Process \u2192 Complete\n * component2.update() \u2192 Transaction 2 \u2192 Process \u2192 Complete\n * component3.update() \u2192 Transaction 3 \u2192 Process \u2192 Complete\n *\n * Example with batching (more efficient? probably):\n * component1.update() \u2192 \\\n * component2.update() \u2192 \u2192 Single Transaction \u2192 Process \u2192 Complete\n * component3.update() \u2192 /\n */\n const timeoutId = setTimeout(() => {\n this.pendingTimeouts.delete(timeoutId);\n this.commitPendingTransaction();\n }, 0);\n this.pendingTimeouts.add(timeoutId);\n }\n\n this.pendingTransaction.operations.push(operation);\n\n // force commit if batch gets too large to prevent memory issues\n if (this.pendingTransaction.operations.length >= this.maxBatchSize) {\n this.commitPendingTransaction();\n }\n }\n\n private async commitPendingTransaction(): Promise<void> {\n if (!this.pendingTransaction || this.pendingTransaction.operations.length === 0) {\n this.pendingTransaction = null;\n return;\n }\n\n const transaction = this.pendingTransaction;\n this.pendingTransaction = null;\n transaction.completed = true;\n\n this.transactionQueue.push(transaction);\n await this.processTransactionQueue();\n }\n\n private async processTransactionQueue(): Promise<void> {\n if (this.processing || this.transactionQueue.length === 0) {\n return;\n }\n\n this.processing = true;\n\n try {\n while (this.transactionQueue.length > 0) {\n const transaction = this.transactionQueue.shift()!;\n await this.processTransaction(transaction);\n }\n } catch (error) {\n console.error('Error processing transaction queue:', error);\n } finally {\n this.processing = false;\n }\n }\n\n private async processTransaction(transaction: Transaction): Promise<void> {\n const providers = Array.from(this.providers.values());\n\n for (const provider of providers) {\n const handledOperations = transaction.operations.filter(op => provider.canHandle(op));\n\n if (handledOperations.length > 0) {\n try {\n await Promise.allSettled(\n handledOperations.map(op => provider.processOperation(op, transaction)),\n );\n } catch (error) {\n ErrorHandler.handleError(\n 'Provider failed to process operations',\n { provider: provider.name, transaction: transaction.id },\n error as Error,\n );\n }\n }\n }\n\n // complete transactions sequentially to maintain consistency\n for (const provider of providers) {\n try {\n await provider.onTransactionComplete(transaction);\n } catch (error) {\n ErrorHandler.handleError(\n 'Provider failed to complete transaction',\n { provider: provider.name, transaction: transaction.id },\n error as Error,\n );\n }\n }\n }\n\n async executeTransaction<T>(\n source: Transaction['source'],\n operations: () => Promise<T>,\n ): Promise<T> {\n if (this.processing) {\n throw new Error('Cannot execute transaction while processing');\n }\n\n const wasProcessing = this.processing;\n this.processing = true;\n\n try {\n return await operations();\n } finally {\n this.processing = wasProcessing;\n await this.processTransactionQueue();\n }\n }\n\n getComposite(): CompositeDefinition | null {\n const compositeProvider = this.getProvider('composite');\n return (compositeProvider as any)?.getComposite?.() || null;\n }\n\n async dispose(): Promise<void> {\n for (const timeout of Array.from(this.pendingTimeouts)) {\n clearTimeout(timeout);\n }\n this.pendingTimeouts.clear();\n\n if (this.pendingTransaction) {\n await this.commitPendingTransaction();\n }\n\n while (this.transactionQueue.length > 0) {\n await this.processTransactionQueue();\n }\n\n this.providers.clear();\n }\n}\n", "import { merge } from 'ts-deepmerge';\nimport { CrdtMessageType } from '@dcl/ecs';\nimport type { Scene } from '@dcl/schemas';\nimport type { FileSystemInterface } from '../types';\nimport type { EditorComponentsTypes } from '../../sdk/components';\nimport { EditorComponentNames } from '../../sdk/components';\nimport { fromSceneComponent } from './utils/component';\nimport {\n type StateProvider,\n type Operation,\n type Transaction,\n OperationType,\n} from './state-manager';\n\ntype SceneWithDefaults = Scene & {\n display: {\n title: string;\n };\n};\n\nexport class SceneProvider implements StateProvider {\n readonly name = 'scene';\n private scene: SceneWithDefaults;\n private readonly fs: FileSystemInterface;\n private pendingSceneUpdates = new Map<string, Partial<Scene>>();\n private savePromise: Promise<void> | null = null;\n\n constructor(fs: FileSystemInterface, initialScene: SceneWithDefaults) {\n this.fs = fs;\n this.scene = initialScene;\n }\n\n static async create(fs: FileSystemInterface): Promise<SceneProvider> {\n const scene = await SceneProvider.loadScene(fs);\n return new SceneProvider(fs, scene);\n }\n\n private static async loadScene(fs: FileSystemInterface): Promise<SceneWithDefaults> {\n let scene: Scene = {} as Scene;\n try {\n const buffer = await fs.readFile('scene.json');\n scene = JSON.parse(new TextDecoder().decode(buffer));\n } catch (e) {\n console.error('Reading scene.json file failed: ', e);\n }\n\n return SceneProvider.augmentDefaults(scene);\n }\n\n private static augmentDefaults(scene: Scene): SceneWithDefaults {\n return {\n ...scene,\n display: {\n ...scene.display,\n title: scene.display?.title || '',\n },\n };\n }\n\n canHandle(operation: Operation): boolean {\n return (\n operation.type === OperationType.SCENE_UPDATE &&\n operation.operation === CrdtMessageType.PUT_COMPONENT &&\n operation.componentName === EditorComponentNames.Scene\n );\n }\n\n async processOperation(operation: Operation, transaction: Transaction): Promise<void> {\n if (!this.canHandle(operation)) return;\n\n try {\n const partialScene = fromSceneComponent(\n operation.componentValue as EditorComponentsTypes['Scene'],\n );\n\n this.pendingSceneUpdates.set(transaction.id, partialScene);\n } catch (error) {\n console.error('Failed to process scene operation:', error);\n }\n }\n\n async onTransactionComplete(transaction: Transaction): Promise<void> {\n const pendingUpdate = this.pendingSceneUpdates.get(transaction.id);\n if (!pendingUpdate) return;\n\n try {\n const merged = merge.withOptions({ mergeArrays: false }, this.scene, pendingUpdate) as Scene;\n\n this.scene = SceneProvider.augmentDefaults(merged);\n this.pendingSceneUpdates.delete(transaction.id);\n\n if (this.savePromise) {\n await this.savePromise;\n }\n\n this.savePromise = this.saveScene();\n } catch (error) {\n console.error('Failed to complete scene transaction:', error);\n this.pendingSceneUpdates.delete(transaction.id);\n }\n }\n\n private async saveScene(): Promise<void> {\n try {\n const buffer = Buffer.from(JSON.stringify(this.scene, null, 2), 'utf-8');\n await this.fs.writeFile('scene.json', buffer);\n } catch (error) {\n console.error('Failed to save scene.json:', error);\n throw error;\n } finally {\n this.savePromise = null;\n }\n }\n\n getScene(): SceneWithDefaults {\n return { ...this.scene };\n }\n\n async forceReload(): Promise<void> {\n this.scene = await SceneProvider.loadScene(this.fs);\n this.pendingSceneUpdates.clear();\n\n if (this.savePromise) {\n await this.savePromise;\n }\n }\n\n async dispose(): Promise<void> {\n if (this.savePromise) {\n await this.savePromise;\n }\n this.pendingSceneUpdates.clear();\n }\n}\n", "import type {\n ComponentDefinition,\n CompositeDefinition,\n DeepReadonlyObject,\n Entity,\n} from '@dcl/ecs';\nimport { ReadWriteByteBuffer } from '@dcl/ecs/dist/serialization/ByteBuffer';\nimport { dataCompare } from '@dcl/ecs/dist/systems/crdt/utils';\nimport type { Scene } from '@dcl/schemas';\n\nimport type {\n EditorComponentsTypes,\n SceneAgeRating,\n SceneComponent,\n} from '../../../sdk/components';\nimport { SceneCategory } from '../../../sdk/components';\nimport { getConfig } from '../../../logic/config';\nimport type { TransitionMode } from '../../../sdk/components/SceneMetadata';\n\nexport function isEqual(\n component: ComponentDefinition<unknown>,\n prevValue: unknown,\n newValue: unknown,\n) {\n if (prevValue === newValue || (!prevValue && !newValue)) return true;\n if ((!prevValue && newValue) || (prevValue && !newValue)) return false;\n const prevBuffer = new ReadWriteByteBuffer();\n const newBuffer = new ReadWriteByteBuffer();\n component.schema.serialize(prevValue as DeepReadonlyObject<unknown>, prevBuffer);\n component.schema.serialize(newValue as DeepReadonlyObject<unknown>, newBuffer);\n return dataCompare(prevBuffer.toBinary(), newBuffer.toBinary()) === 0;\n}\n\nexport function findPrevValue(\n composite: CompositeDefinition,\n componentName: string,\n entity: Entity,\n) {\n const component = composite.components.find(c => c.name === componentName);\n const value = component?.data.get(entity);\n if (value?.data?.$case !== 'json') {\n return null;\n }\n return value.data.json;\n}\n\nconst parseCoords = (coords: string) => {\n const [x, y] = coords.split(',');\n return { x: parseInt(x), y: parseInt(y) };\n};\n\ntype SceneWithRating = Scene & {\n rating: SceneAgeRating;\n skyboxConfig?: { fixedTime?: number; transitionMode?: TransitionMode };\n};\n\nexport function fromSceneComponent(\n value: DeepReadonlyObject<EditorComponentsTypes['Scene']>,\n): Partial<Scene> {\n const tags: string[] = [];\n for (const category of value.categories || []) {\n tags.push(category);\n }\n for (const tag of value.tags || []) {\n const sanitizedTag = tag.trim();\n if (sanitizedTag && !tags.includes(sanitizedTag)) tags.push(sanitizedTag);\n }\n const config = getConfig();\n const scene: Partial<SceneWithRating> = {\n display: {\n title: value.name || '',\n description: value.description || '',\n navmapThumbnail: value.thumbnail || '',\n },\n scene: {\n parcels: value.layout.parcels.map($ => `${$.x},${$.y}`),\n base: `${value.layout.base.x},${value.layout.base.y}`,\n },\n contact: {\n name: value.author || '',\n email: value.email || '',\n },\n tags,\n spawnPoints: value.spawnPoints\n ? value.spawnPoints.map(spawnPoint => ({\n name: spawnPoint.name,\n default: spawnPoint.default,\n position: {\n x: spawnPoint.position.x.value as number[],\n y: spawnPoint.position.y.value as number[],\n z: spawnPoint.position.z.value as number[],\n },\n cameraTarget: spawnPoint.cameraTarget,\n }))\n : [],\n featureToggles: {\n voiceChat: value.silenceVoiceChat ? 'disabled' : 'enabled',\n portableExperiences: value.disablePortableExperiences ? 'disabled' : 'enabled',\n },\n rating: value.ageRating,\n skyboxConfig: {\n fixedTime: value.skyboxConfig?.fixedTime,\n transitionMode: value.skyboxConfig?.transitionMode,\n },\n };\n\n if (config.segmentAppId && config.projectId) {\n // add analytics source\n scene.source = {\n origin: config.segmentAppId,\n projectId: config.projectId,\n };\n }\n\n return scene;\n}\n\nexport function toSceneComponent(value: Scene): EditorComponentsTypes['Scene'] {\n const categories: SceneCategory[] = [];\n const tags: string[] = [];\n\n for (const tag of value.tags || []) {\n if (Object.values(SceneCategory).includes(tag as SceneCategory)) {\n categories.push(tag as SceneCategory);\n } else {\n tags.push(tag);\n }\n }\n\n const scene: SceneComponent = {\n name: value.display?.title || '',\n description: value.display?.description || '',\n thumbnail: value.display?.navmapThumbnail || '',\n layout: {\n parcels: value.scene.parcels.map($ => parseCoords($)),\n base: parseCoords(value.scene.base),\n },\n author: value.contact?.name || '',\n email: value.contact?.email || '',\n categories,\n tags,\n silenceVoiceChat: value.featureToggles?.voiceChat === 'disabled',\n disablePortableExperiences: value.featureToggles?.portableExperiences === 'disabled',\n ageRating: (value as SceneWithRating).rating,\n skyboxConfig: {\n fixedTime: (value as SceneWithRating).skyboxConfig?.fixedTime,\n transitionMode: (value as SceneWithRating).skyboxConfig?.transitionMode,\n },\n spawnPoints: value.spawnPoints?.map((spawnPoint, index) => ({\n name: spawnPoint.name || `Spawn Point ${index + 1}`,\n default: spawnPoint.default,\n position: {\n x: Array.isArray(spawnPoint.position.x)\n ? { $case: 'range', value: spawnPoint.position.x }\n : { $case: 'single', value: spawnPoint.position.x },\n y: Array.isArray(spawnPoint.position.y)\n ? { $case: 'range', value: spawnPoint.position.y }\n : { $case: 'single', value: spawnPoint.position.y },\n z: Array.isArray(spawnPoint.position.z)\n ? { $case: 'range', value: spawnPoint.position.z }\n : { $case: 'single', value: spawnPoint.position.z },\n },\n cameraTarget: spawnPoint.cameraTarget,\n })),\n };\n\n return scene;\n}\n", "import type {\n ComponentData,\n Composite,\n CompositeComponent,\n DeepReadonly,\n Entity,\n IEngine,\n LastWriteWinElementSetComponentDefinition,\n} from '@dcl/ecs';\nimport { ComponentType, PutComponentOperation, getCompositeRootComponent, Name } from '@dcl/ecs';\nimport { ReadWriteByteBuffer } from '@dcl/ecs/dist/serialization/ByteBuffer';\nimport type { FileSystemInterface } from '../../types';\n\nfunction componentToCompositeComponentData<T>(\n $case: 'json' | 'binary',\n value: DeepReadonly<T>,\n _component: LastWriteWinElementSetComponentDefinition<T>,\n): ComponentData {\n if ($case === 'json') {\n return {\n data: {\n $case,\n json: value,\n },\n };\n } else {\n const byteBuffer = new ReadWriteByteBuffer();\n _component.schema.serialize(value, byteBuffer);\n return {\n data: {\n $case,\n binary: byteBuffer.toBinary(),\n },\n };\n }\n}\n\nexport function dumpEngineToComposite(\n engine: IEngine,\n internalDataType: 'json' | 'binary',\n): Composite {\n const ignoreEntities: Set<Entity> = new Set();\n const composite: Composite.Definition = {\n version: 1,\n components: [],\n };\n\n const CompositeRoot = getCompositeRootComponent(engine);\n const childrenComposite = Array.from(engine.getEntitiesWith(CompositeRoot));\n if (childrenComposite.length > 0) {\n const compositeComponent: CompositeComponent = {\n name: CompositeRoot.componentName,\n jsonSchema: CompositeRoot.schema.jsonSchema,\n data: new Map(),\n };\n\n for (const [compositeRootEntity, compositeRootValue] of childrenComposite) {\n if (compositeRootEntity === engine.RootEntity) continue;\n\n compositeRootValue.entities.forEach(item => ignoreEntities.add(item.dest));\n\n const componentData: ComponentData = componentToCompositeComponentData(\n internalDataType,\n {\n src: compositeRootValue.src,\n entities: [],\n },\n CompositeRoot,\n );\n compositeComponent.data.set(compositeRootEntity, componentData);\n }\n\n composite.components.push(compositeComponent);\n }\n\n const ignoreComponentNames = [\n 'inspector:Selection',\n 'editor::Toggle',\n CompositeRoot.componentName,\n ];\n\n for (const itComponentDefinition of engine.componentsIter()) {\n if (ignoreComponentNames.includes(itComponentDefinition.componentName)) continue;\n\n // TODO: will we support APPEND components?\n if (itComponentDefinition.componentType === ComponentType.GrowOnlyValueSet) continue;\n\n const itCompositeComponent: CompositeComponent = {\n name: itComponentDefinition.componentName,\n jsonSchema: itComponentDefinition.schema.jsonSchema,\n data: new Map(),\n };\n\n for (const [entity, value] of engine.getEntitiesWith(itComponentDefinition)) {\n // TODO: see for overrides? check if the value has changed or not (should we tag it?)\n // For now, the entities from children composite are ignored\n if (ignoreEntities.has(entity)) continue;\n\n const componentData: ComponentData = componentToCompositeComponentData(\n internalDataType,\n value,\n itComponentDefinition as LastWriteWinElementSetComponentDefinition<unknown>,\n );\n itCompositeComponent.data.set(entity, componentData);\n }\n\n // TODO: should we save defined component but without entities assigned?\n if (itCompositeComponent.data.size > 0) {\n composite.components.push(itCompositeComponent);\n }\n }\n return composite;\n}\n\nexport function dumpEngineToCrdtCommands(engine: IEngine): Uint8Array {\n const componentBuffer = new ReadWriteByteBuffer();\n const crdtBuffer = new ReadWriteByteBuffer();\n for (const itComponentDefinition of engine.componentsIter()) {\n for (const [entity, value] of engine.getEntitiesWith(itComponentDefinition)) {\n if (value) {\n componentBuffer.resetBuffer();\n itComponentDefinition.schema.serialize(value, componentBuffer);\n\n PutComponentOperation.write(\n entity,\n 0,\n itComponentDefinition.componentId,\n componentBuffer.toBinary(),\n crdtBuffer,\n );\n }\n }\n }\n\n return crdtBuffer.toBinary();\n}\n\n// Polyfill for Set.difference\nfunction setDifference(set: Set<any>, other: Set<any>) {\n if (typeof set.difference === 'function') return set.difference(other);\n return new Set([...set].filter(x => !other.has(x)));\n}\n\n/**\n * Generate a TypeScript declaration file with a string literal union type containing all entity names in the scene.\n * This allows for type-safe references to entities by name in scene scripts.\n *\n * @param engine The ECS engine instance\n * @param outputPath The path where the .d.ts file should be written\n * @param typeName The name for the generated type (default: \"SceneEntityNames\")\n * @param fs FileSystem interface for writing the file\n * @returns Promise that resolves when the file has been written\n */\n\nlet __ENTITY_NAMES_CACHE: Set<string> = new Set();\nexport async function generateEntityNamesType(\n engine: IEngine,\n outputPath: string = 'scene-entity-names.d.ts',\n typeName: string = 'SceneEntityNames',\n fs: FileSystemInterface,\n): Promise<void> {\n try {\n // Find the Name component definition\n const NameComponent: typeof Name = engine.getComponentOrNull(Name.componentId) as typeof Name;\n\n if (!NameComponent) {\n throw new Error('Name component not found in engine');\n }\n\n // Collect all names from entities\n const names: string[] = [];\n for (const [_, nameValue] of engine.getEntitiesWith(NameComponent)) {\n if (nameValue.value) {\n names.push(nameValue.value);\n }\n }\n\n // Sort names for consistency\n names.sort();\n const namesSet = new Set(names);\n\n if (setDifference(namesSet, __ENTITY_NAMES_CACHE).size === 0) {\n return;\n }\n\n __ENTITY_NAMES_CACHE = namesSet;\n\n // Remove duplicates\n const uniqueNames = Array.from(namesSet);\n\n // Generate valid TypeScript identifiers and handle duplicates in a single pass\n const validNameMap = new Map<string, string>();\n const finalNames: Array<{ original: string; valid: string }> = [];\n\n for (const name of uniqueNames) {\n // Create a valid TypeScript identifier\n let validName = name\n .replace(/[^a-zA-Z0-9_]/g, '_') // Replace non-alphanumeric chars with underscore\n .replace(/^[0-9]/, '_$&'); // Prepend underscore if starts with number\n\n // Handle collision if this valid name already exists\n if (validNameMap.has(validName)) {\n // Add numeric suffix for uniqueness\n let suffix = 1;\n while (validNameMap.has(`${validName}_${suffix}`)) {\n suffix++;\n }\n validName = `${validName}_${suffix}`;\n }\n\n // Store the mapping and add to result\n validNameMap.set(validName, name);\n finalNames.push({ original: name, valid: validName });\n }\n\n // Generate the .d.ts file content\n let fileContent = '// Auto-generated entity names from the scene\\n\\n';\n\n // Add a constant object with name keys for IDE autocompletion\n fileContent +=\n '\\n/**\\n * Object containing all entity names in the scene for autocomplete support.\\n */\\n';\n fileContent += `export enum ${typeName} {\\n`;\n\n for (const { original, valid } of finalNames) {\n fileContent += ` ${valid} = \"${original}\",\\n`;\n }\n\n fileContent += '} \\n';\n\n // Check if file exists and compare content before writing\n const fileExists = await fs.existFile(outputPath);\n if (fileExists) {\n const existingContent = (await fs.readFile(outputPath)).toString('utf-8');\n if (existingContent === fileContent) {\n // Content is identical, no need to write\n return;\n }\n }\n\n // Write to file only if content is different or file doesn't exist\n await fs.writeFile(outputPath, Buffer.from(fileContent, 'utf-8'));\n } catch (e) {\n console.error(`Fail to generate entity names types: ${e}\\n`);\n }\n}\n", "import type { ByteBuffer, IEngine, IEngineOptions } from '@dcl/ecs';\nimport { Engine } from '@dcl/ecs';\nimport { ReadWriteByteBuffer } from '@dcl/ecs/dist/serialization/ByteBuffer';\nimport { createComponents, createEditorComponents } from '../../../sdk/components';\n\nexport function serializeEngine(engine: IEngine) {\n const messages: ByteBuffer = new ReadWriteByteBuffer();\n\n for (const component of engine.componentsIter()) {\n component.dumpCrdtStateToBuffer(messages);\n }\n return messages.toBinary();\n}\n\nexport function createEngineContext(opts?: IEngineOptions) {\n // create engine and its components\n const engine = Engine(opts);\n\n const components = {\n ...createComponents(engine),\n ...createEditorComponents(engine),\n };\n return { engine, components };\n}\n", "import type { Storage } from './types';\n\nexport function createInMemoryStorage(initialFs: Record<string, Buffer> = {}): Storage {\n const storage: Map<string, Buffer> = new Map();\n\n for (const [id, content] of Object.entries(initialFs)) {\n storage.set(id, content);\n }\n\n return {\n async writeFile(path: string, content: Buffer) {\n storage.set(path, content);\n },\n async exists(path: string) {\n return storage.has(path);\n },\n async readFile(path: string) {\n const content = storage.get(path);\n if (!content) {\n throw new Error(`File ${path} doesn't exists`);\n }\n return content;\n },\n async delete(path: string) {\n storage.delete(path);\n },\n async list(path: string) {\n const files: { name: string; isDirectory: boolean }[] = [];\n for (const _path of Array.from(storage.keys())) {\n if (!_path.startsWith(path)) continue;\n\n const fileName = _path.substring(path.length);\n const slashPosition = fileName.indexOf('/');\n if (slashPosition !== -1) {\n const directoryName = fileName.substring(0, slashPosition);\n if (!files.find(item => item.name === directoryName)) {\n files.push({ name: directoryName, isDirectory: true });\n }\n } else {\n files.push({ name: fileName, isDirectory: false });\n }\n }\n\n return files;\n },\n };\n}\n", "import { Composite } from '@dcl/ecs';\nimport type { Scene } from '@dcl/schemas';\nimport { PointerEvents } from '@dcl/ecs/dist/components';\nimport { defineMaterialComponent } from '@dcl/ecs/dist/components/extended/Material';\n\nimport { toSceneComponent } from '../host/utils/component';\nimport { dumpEngineToComposite } from '../host/utils/engine-to-composite';\nimport { createFileSystemInterface } from '../../logic/file-system-interface';\nimport { createEngineContext } from '../host/utils/engine';\nimport { createInMemoryStorage } from '../../logic/storage/in-memory';\nimport { SceneAgeRating } from '../../sdk/components';\nimport { TransitionMode } from '../../sdk/components/SceneMetadata';\nimport { downloadAssets } from './builder-utils';\nimport { THUMBNAIL } from './constants';\n\nexport function createTempEngineContext() {\n const { engine, components } = createEngineContext();\n return {\n engine,\n components: {\n ...components,\n Material: defineMaterialComponent(engine),\n PointerEvents: PointerEvents(engine),\n },\n };\n}\n\ntype TempEngine = ReturnType<typeof createTempEngineContext>;\n\nexport function generateMinimalComposite({ engine, components }: TempEngine) {\n // nodes\n components.Nodes.create(engine.RootEntity, {\n value: [\n { entity: engine.RootEntity, children: [], open: true },\n { entity: engine.PlayerEntity, children: [] },\n { entity: engine.CameraEntity, children: [] },\n ],\n });\n\n // scene\n components.Scene.create(engine.RootEntity, {\n name: 'Test Scene',\n description: 'This is a test scene',\n thumbnail: 'assets/scene/thumbnail.png',\n ageRating: SceneAgeRating.Teen,\n skyboxConfig: {\n fixedTime: 36000,\n transitionMode: TransitionMode.TM_FORWARD,\n },\n categories: [],\n author: '',\n email: '',\n tags: [],\n layout: {\n base: {\n x: 0,\n y: 0,\n },\n parcels: [\n {\n x: 0,\n y: 0,\n },\n ],\n },\n });\n\n const composite = dumpEngineToComposite(engine, 'json');\n return Composite.toJson(composite);\n}\n\nexport function generateFeededComposite({ engine, components }: TempEngine, scene: Scene) {\n // custom component\n const cubeIdComponent = engine.defineComponent('cube-id', {});\n\n // entities\n const entity = engine.addEntity();\n const gltfEntity = engine.addEntity();\n\n components.Transform.create(entity, { position: { x: 8, y: 1, z: 8 } });\n components.MeshRenderer.setBox(entity);\n cubeIdComponent.create(entity);\n components.PointerEvents.create(entity, {\n pointerEvents: [\n {\n eventType: 1,\n eventInfo: {\n button: 1,\n hoverText: 'Press E to spawn',\n maxDistance: 100,\n showFeedback: true,\n },\n },\n ],\n });\n components.Material.setPbrMaterial(entity, {\n albedoColor: {\n r: 1,\n g: 1,\n b: 1,\n a: 1,\n },\n });\n components.Name.create(entity, { value: 'Magic Cube' });\n\n components.Transform.create(gltfEntity, {\n position: {\n x: 4,\n y: 0.8,\n z: 8,\n },\n });\n components.GltfContainer.create(gltfEntity, { src: 'assets/scene/Models/example/model.glb' });\n cubeIdComponent.create(gltfEntity);\n components.Name.create(gltfEntity, { value: 'Gltf Test' });\n\n // nodes\n components.Nodes.create(engine.RootEntity, {\n value: [\n { entity: engine.RootEntity, children: [entity, gltfEntity], open: true },\n { entity: engine.PlayerEntity, children: [] },\n { entity: engine.CameraEntity, children: [] },\n { entity, children: [] },\n { entity: gltfEntity, children: [] },\n ],\n });\n\n // scene\n components.Scene.create(engine.RootEntity, toSceneComponent(scene));\n\n const composite = dumpEngineToComposite(engine, 'json');\n return Composite.toJson(composite);\n}\n\nexport const getMinimalComposite = () => generateMinimalComposite(createTempEngineContext());\n\nconst builderMappings: Record<string, string> = {\n 'assets/scene/Models/example/model.glb':\n 'bafkreibzw3d2aziiw2yhq7eoihytxthsulbihbr2ds2zegmsreaycy4h7e',\n};\n\nfunction getFeededEngineAndComposite(scene: Scene) {\n const context = createTempEngineContext();\n return { engineContext: context, composite: generateFeededComposite(context, scene) };\n}\n\nexport async function feededFileSystem(mappings: Record<string, string> = builderMappings) {\n const scene: Scene = {\n main: '',\n display: {\n title: 'Feeded Scene',\n description: 'This is a feeded scene.json into memory',\n navmapThumbnail: 'assets/scene/feeded-thumbnail.png',\n },\n scene: {\n parcels: ['2,2', '2,3', '3,2', '3,3'],\n base: '2,2',\n },\n contact: {\n name: 'John Doe',\n email: 'johndoe@email.com',\n },\n tags: ['game', 'art', 'super fun', 'cool'],\n spawnPoints: [\n {\n name: 'Feeded Spawn Point',\n default: true,\n position: {\n x: [4, 6],\n y: [1, 1],\n z: [4, 6],\n },\n cameraTarget: {\n x: 8,\n y: 1,\n z: 8,\n },\n },\n ],\n featureToggles: {\n voiceChat: 'disabled',\n },\n };\n\n const { composite } = getFeededEngineAndComposite(scene);\n\n const assets = await downloadAssets(mappings);\n\n const storage = createInMemoryStorage({\n ...assets,\n 'assets/scene/main.composite': Buffer.from(JSON.stringify(composite), 'utf-8'),\n 'thumbnails/scene/feeded-thumbnail.png': Buffer.from(THUMBNAIL, 'base64'),\n 'assets/scene/feeded-thumbnail.png': Buffer.from(THUMBNAIL, 'base64'),\n 'scene.json': Buffer.from(JSON.stringify(scene), 'utf-8'),\n });\n\n return createFileSystemInterface(storage);\n}\n", "/**\n * Moves a node to a specific index\n * @param list array to mutate\n * @param from index of the node to move\n * @param to destination index\n */\nexport function move<T>(list: T[], from: number, to: number) {\n list.splice(to, 0, list.splice(from, 1)[0]);\n}\n\n/**\n * Pushes a value to a list only if the value is not already on the list\n * @param list array to update\n * @param value value to push\n * @returns updated list\n */\nexport function cleanPush<T extends number | string>(list: T[], value: T): T[] {\n return Array.from(new Set(list).add(value));\n}\n", "import type { IEngine, Entity, LastWriteWinElementSetComponentDefinition } from '@dcl/ecs';\nimport { Transform } from '@dcl/ecs';\n\nimport type { EditorComponentsTypes, Node } from '../../../../sdk/components';\nimport { EditorComponentNames } from '../../../../sdk/components';\nimport { cleanPush } from '../../../../utils/array';\n\n/**\n * Build Node component hierarchy from current engine status\n * @param engine engine to build upon\n */\nexport function buildNodesHierarchy(engine: IEngine): Node[] {\n const hierarchy = new Map<Entity, Node>([\n [engine.RootEntity, { entity: engine.RootEntity, open: true, children: [] }],\n ]);\n\n // Set all engine's entities in hierarchy (entities without component are unretrievable)\n for (const component of engine.componentsIter()) {\n for (const [entity] of engine.getEntitiesWith(component)) {\n hierarchy.set(entity, { entity, children: [] });\n }\n }\n\n // Update children for nodes in the hierarchy based on Transform's parent value.\n // If there is no parent value, push it to RootEntity children\n for (const [entity] of hierarchy) {\n if (entity === engine.RootEntity) continue;\n const parent = Transform.getOrNull(entity)?.parent;\n if (parent) {\n const children = hierarchy.get(parent)?.children || [];\n hierarchy.set(parent, { entity: parent, children: cleanPush(children, entity) });\n } else {\n const children = hierarchy.get(engine.RootEntity)!.children;\n hierarchy.set(engine.RootEntity, {\n entity: engine.RootEntity,\n open: true,\n children: cleanPush(children, entity),\n });\n }\n }\n\n hierarchy.set(engine.PlayerEntity, { entity: engine.PlayerEntity, children: [] });\n hierarchy.set(engine.CameraEntity, { entity: engine.CameraEntity, children: [] });\n\n const root = hierarchy.get(engine.RootEntity)!;\n hierarchy.set(engine.RootEntity, { ...root, open: true });\n\n return Array.from(hierarchy.values());\n}\n\nexport function buildNodesHierarchyIfNotExists(engine: IEngine) {\n const Nodes = engine.getComponentOrNull(\n EditorComponentNames.Nodes,\n ) as LastWriteWinElementSetComponentDefinition<EditorComponentsTypes['Nodes']> | null;\n\n if (Nodes) {\n const value = Nodes.getOrNull(engine.RootEntity)?.value || [];\n if (value.length) return;\n\n function hierarchySystem() {\n engine.removeSystem(hierarchySystem);\n Nodes!.createOrReplace(engine.RootEntity, { value: buildNodesHierarchy(engine) });\n }\n\n engine.addSystem(hierarchySystem);\n }\n}\n", "import type { Entity, IEngine, LastWriteWinElementSetComponentDefinition } from '@dcl/ecs';\nimport { Name, Transform } from '@dcl/ecs';\n\nexport function removeLegacyEntityNodeComponents(engine: IEngine) {\n // Legacy EntityNode for backwards-compability\n function legacyEntityNode() {\n engine.removeSystem(legacyEntityNode);\n const LegacyEntityNodeComponent = engine.getComponentOrNull(\n 'inspector::EntityNode',\n ) as LastWriteWinElementSetComponentDefinition<{ label: string; parent: Entity }>;\n if (!LegacyEntityNodeComponent) return;\n\n for (const [entity, entityNodeValue] of engine.getEntitiesWith(LegacyEntityNodeComponent)) {\n LegacyEntityNodeComponent.deleteFrom(entity);\n const NameComponent = engine.getComponent(Name.componentId) as typeof Name;\n const TransformComponent = engine.getComponent(Transform.componentId) as typeof Transform;\n NameComponent.createOrReplace(entity, { value: entityNodeValue.label });\n const transform = TransformComponent.getMutableOrNull(entity);\n if (!transform) {\n TransformComponent.create(entity, { parent: entityNodeValue.parent });\n }\n }\n engine.removeComponentDefinition(LegacyEntityNodeComponent.componentId);\n }\n engine.addSystem(legacyEntityNode);\n}\n", "import { Composite } from '@dcl/ecs';\nimport { getFilesInDirectory } from '../fs-utils';\nimport type { FileSystemInterface } from '../../types';\n\nexport type CompositeManager = Composite.Provider & {\n save: (composite: Composite.Resource, type: 'json' | 'binary') => Promise<void>;\n};\n\nexport async function createFsCompositeProvider(\n fs: FileSystemInterface,\n dirPath: string = '',\n): Promise<CompositeManager> {\n const files = await getFilesInDirectory(fs, dirPath, [], true, [\n 'node_modules',\n 'dist',\n 'bin',\n 'src',\n '.vscode',\n ]);\n const compositePaths = files\n .filter(item => item.endsWith('.composite') || item.endsWith('.composite.bin'))\n .map(item => fs.join(fs.dirname(item), fs.basename(item).toLowerCase()));\n\n const compositePromises = compositePaths.map(async itemPath => {\n try {\n if (itemPath.endsWith('.bin')) {\n const compositeContent = new Uint8Array(await fs.readFile(itemPath));\n const composite = Composite.fromBinary(compositeContent);\n return {\n src: itemPath,\n composite,\n };\n } else {\n const compositeContent = new TextDecoder().decode(await fs.readFile(itemPath));\n const json = JSON.parse(compositeContent);\n const composite = Composite.fromJson(json);\n return {\n src: itemPath,\n composite,\n };\n }\n } catch (err) {\n console.error(`Error loading composite ${itemPath}: ${(err as any).toString()}`);\n return null;\n }\n });\n\n const composites = (await Promise.all(compositePromises)).filter(\n item => item,\n ) as Composite.Resource[];\n\n return {\n getCompositeOrNull(src: string, _currentPath?: string) {\n // compositePaths uses fs.join() to generate the .composite file and in windows generates paths like assets\\\\main.composite\n // and the src: string parameter has assets/main.composite path.\n function normalizePath(val: string) {\n return val.replace(/\\\\/g, '/').toLocaleLowerCase();\n }\n return composites.find(item => normalizePath(item.src) === normalizePath(src)) || null;\n },\n // a lot of questions with this method, it's temporal\n // => what should they be the params?, it overides? it's a save&replace, save as..., etc\n save: async (composite: Composite.Resource, type: 'json' | 'binary') => {\n let compositeDefinition: Composite.Definition;\n if (type === 'binary') {\n const bytes = Buffer.from(Composite.toBinary(composite.composite));\n await fs.writeFile(composite.src, bytes);\n\n // deep clone (*)\n compositeDefinition = Composite.fromBinary(bytes);\n } else {\n const text = JSON.stringify(Composite.toJson(composite.composite), null, 2);\n await fs.writeFile(composite.src, Buffer.from(text, 'utf-8'));\n\n // deep clone (*)\n compositeDefinition = Composite.fromJson(JSON.parse(text));\n }\n\n // (*) deep clone: the `composite.composite` could be used, but this would assign\n // the reference and at this point we don't have control about it\n\n // If the composite resource exists in our list, we replaced the definition\n // with a cloned definition\n const existingComposite = composites.find(item => item.src === composite.src);\n if (existingComposite) {\n existingComposite.composite = compositeDefinition;\n }\n },\n };\n}\n", "import type { IEngine, LastWriteWinElementSetComponentDefinition } from '@dcl/ecs';\nimport type { EditorComponentsTypes } from '../../../../sdk/components';\nimport { EditorComponentNames } from '../../../../sdk/components';\n\nexport function addNodesComponentsToPlayerAndCamera(engine: IEngine) {\n function addNodes() {\n engine.removeSystem(addNodes);\n const Nodes = engine.getComponentOrNull(\n EditorComponentNames.Nodes,\n ) as LastWriteWinElementSetComponentDefinition<EditorComponentsTypes['Nodes']>;\n if (!Nodes) return;\n\n const nodes = Nodes.getOrNull(engine.RootEntity)?.value || [];\n const newNodes = [...nodes];\n let shouldUpdate = false;\n\n if (!newNodes.some(node => node.entity === engine.PlayerEntity)) {\n newNodes.push({ entity: engine.PlayerEntity, children: [] });\n shouldUpdate = true;\n }\n if (!newNodes.some(node => node.entity === engine.CameraEntity)) {\n newNodes.push({ entity: engine.CameraEntity, children: [] });\n shouldUpdate = true;\n }\n\n if (shouldUpdate) {\n Nodes.createOrReplace(engine.RootEntity, { value: newNodes });\n }\n }\n\n engine.addSystem(addNodes);\n}\n", "import type { Entity, IEngine, NetworkEntity as NetworkEntityEngine } from '@dcl/ecs';\n\nimport { CoreComponents } from './components';\n\nexport const INSPECTOR_ENUM_ENTITY_ID_START: Entity = 8001 as Entity;\nexport function createEnumEntityId(engine: IEngine) {\n const NetworkEntity = engine.getComponent(\n CoreComponents.NETWORK_ENTITY,\n ) as typeof NetworkEntityEngine;\n\n function getNextEnumEntityId(): Entity {\n let value: Entity = INSPECTOR_ENUM_ENTITY_ID_START;\n for (const [, component] of engine.getEntitiesWith(NetworkEntity)) {\n value = Math.max(value, Number(component.entityId)) as Entity;\n }\n return (value + 1) as Entity;\n }\n\n return {\n getNextEnumEntityId,\n };\n}\n\nexport type EnumEntity = ReturnType<typeof createEnumEntityId>;\n", "import type { Entity, IEngine } from '@dcl/ecs';\nimport type { SdkComponents } from '../../../../sdk/components';\nimport { CoreComponents } from '../../../../sdk/components';\nimport { INSPECTOR_ENUM_ENTITY_ID_START } from '../../../../sdk/enum-entity';\n\n/**\n * Fixes duplicate entity IDs in NetworkEntity components within the engine.\n *\n * This function scans through all entities that have the NetworkEntity component\n * and identifies any duplicate entity IDs. If duplicates are found, it reassigns\n * unique entity IDs to each NetworkEntity component to ensure all entity IDs are unique.\n */\nexport function fixNetworkEntityValues(engine: IEngine) {\n const NetworkEntity = engine.getComponentOrNull(\n CoreComponents.NETWORK_ENTITY,\n ) as SdkComponents['NetworkEntity'];\n\n function needsFixing(): boolean {\n const usedEntities: Set<Entity> = new Set();\n for (const [_, value] of engine.getEntitiesWith(NetworkEntity)) {\n if (usedEntities.has(value.entityId)) {\n return true;\n }\n usedEntities.add(value.entityId);\n }\n return false;\n }\n\n if (!NetworkEntity || !needsFixing()) return;\n\n let lastEntityId = INSPECTOR_ENUM_ENTITY_ID_START;\n for (const [entity] of engine.getEntitiesWith(NetworkEntity)) {\n NetworkEntity.getMutable(entity).entityId = lastEntityId as Entity;\n lastEntityId++;\n }\n\n void engine.update(1);\n}\n", "import type { IEngine, LastWriteWinElementSetComponentDefinition } from '@dcl/ecs';\n\nimport type { EditorComponentsTypes } from '../../../../sdk/components';\nimport { EditorComponentNames } from '../../../../sdk/components';\nimport { GizmoType } from '../../../../utils/gizmo';\n\nexport function selectSceneEntity(engine: IEngine) {\n const Selection = engine.getComponentOrNull(\n EditorComponentNames.Selection,\n ) as LastWriteWinElementSetComponentDefinition<EditorComponentsTypes['Selection']> | null;\n\n if (Selection) {\n for (const [entity] of engine.getEntitiesWith(Selection)) {\n Selection.deleteFrom(entity);\n }\n\n function system() {\n engine.removeSystem(system);\n Selection!.createOrReplace(engine.RootEntity, { gizmo: GizmoType.FREE });\n }\n\n engine.addSystem(system);\n }\n}\n", "import type { IEngine } from '@dcl/ecs';\n\nimport type { EditorComponents } from '../../../../sdk/components';\nimport {\n removeOldSceneVersions,\n VERSIONS,\n getLatestSceneComponentVersion,\n} from '../../../../sdk/components/SceneMetadata';\n\n/**\n * Retrieves the latest version of the Scene component from the engine.\n *\n * This function iterates through the list of known Scene component versions in reverse order,\n * attempting to find the latest version that is present in the engine.\n *\n * @param engine - The engine instance to query for the Scene component.\n * @returns An object containing the latest Scene component and its value, or null if no version is found.\n */\nexport function getCompositeLatestSceneComponent(engine: IEngine) {\n let component = null;\n\n // Iterate in reverse order to find the latest component version\n for (let i = VERSIONS.length - 1; i >= 0; i--) {\n const name = VERSIONS[i].key;\n const Scene = engine.getComponentOrNull(name) as EditorComponents['Scene'] | null;\n\n if (Scene) {\n const scene = Scene.getMutableOrNull(engine.RootEntity);\n if (scene) {\n component = {\n component: Scene,\n value: scene,\n };\n break;\n }\n }\n }\n\n return component;\n}\n\nexport function migrateSceneMetadata(engine: IEngine) {\n const latestComponent = getCompositeLatestSceneComponent(engine);\n\n if (!latestComponent) return;\n\n const { component, value } = latestComponent;\n\n const latestComponentVersion = getLatestSceneComponentVersion();\n const isRunningLatestVersion = component.componentName === latestComponentVersion.key;\n\n if (isRunningLatestVersion) return;\n const oldComponent = component;\n\n oldComponent.deleteFrom(engine.RootEntity);\n removeOldSceneVersions(engine, latestComponentVersion.key);\n\n const SceneMetadata = engine.getComponent(\n latestComponentVersion.key,\n ) as EditorComponents['Scene'];\n SceneMetadata.createOrReplace(engine.RootEntity, value);\n}\n", "import type { IEngine, LastWriteWinElementSetComponentDefinition, TagsType } from '@dcl/ecs';\n\nexport function createTagsComponent(engine: IEngine) {\n const DEFAULT_TAGS = ['Tag Group 1', 'Tag Group 2', 'Tag Group 3', 'Tag Group 4'];\n\n const Tags = engine.getComponentOrNull(\n 'core-schema::Tags',\n ) as LastWriteWinElementSetComponentDefinition<TagsType> | null;\n\n if (Tags) {\n const sceneTags = Tags.getMutableOrNull(engine.RootEntity);\n if (!sceneTags) {\n Tags.createOrReplace(engine.RootEntity, { tags: DEFAULT_TAGS });\n engine.update(1);\n }\n }\n}\n", "import type { Scene } from '@dcl/schemas';\nimport type { CompositeDefinition, Entity, IEngine } from '@dcl/ecs';\nimport { Composite, CrdtMessageType, EntityMappingMode } from '@dcl/ecs';\nimport { initComponents } from '@dcl/asset-packs';\nimport type { EditorComponents } from '../../sdk/components';\nimport { EditorComponentNames } from '../../sdk/components';\nimport type { FileSystemInterface } from '../types';\nimport { getMinimalComposite } from '../client/feeded-local-fs';\nimport type { InspectorPreferences } from '../../logic/preferences/types';\nimport { buildNodesHierarchyIfNotExists } from './utils/migrations/build-nodes-hierarchy';\nimport { removeLegacyEntityNodeComponents } from './utils/migrations/legacy-entity-node';\nimport { DIRECTORY, withAssetDir } from './fs-utils';\nimport {\n dumpEngineToComposite,\n dumpEngineToCrdtCommands,\n generateEntityNamesType,\n} from './utils/engine-to-composite';\nimport type { CompositeManager } from './utils/fs-composite-provider';\nimport { createFsCompositeProvider } from './utils/fs-composite-provider';\nimport { toSceneComponent } from './utils/component';\nimport { addNodesComponentsToPlayerAndCamera } from './utils/migrations/add-nodes-to-player-and-camera';\nimport { fixNetworkEntityValues } from './utils/migrations/fix-network-entity-values';\nimport { selectSceneEntity } from './utils/migrations/select-scene-entity';\nimport { migrateSceneMetadata } from './utils/migrations/migrate-scene-metadata';\nimport {\n type StateProvider,\n type Operation,\n type Transaction,\n OperationType,\n} from './state-manager';\nimport { createTagsComponent } from './utils/migrations/create-tags-components';\n\nenum DirtyState {\n Clean = 'clean',\n Dirty = 'dirty',\n DirtyAndNeedsDump = 'dirty_needs_dump',\n}\n\nexport class CompositeProvider implements StateProvider {\n readonly name = 'composite';\n\n private composite: CompositeDefinition | null = null;\n private dirtyState = DirtyState.Clean;\n private readonly fs: FileSystemInterface;\n private readonly engine: IEngine;\n private readonly getInspectorPreferences: () => InspectorPreferences;\n private readonly compositePath: string;\n private compositeManager: CompositeManager | null = null;\n private pendingOperations = new Set<string>();\n private savePromise: Promise<void> | null = null;\n private lastSaveTime = 0;\n private readonly minSaveInterval = 100;\n\n constructor(\n fs: FileSystemInterface,\n engine: IEngine,\n getInspectorPreferences: () => InspectorPreferences,\n compositePath: string,\n ) {\n this.fs = fs;\n this.engine = engine;\n this.getInspectorPreferences = getInspectorPreferences;\n this.compositePath = compositePath;\n }\n\n static async create(\n fs: FileSystemInterface,\n engine: IEngine,\n getInspectorPreferences: () => InspectorPreferences,\n compositePath: string,\n ): Promise<CompositeProvider> {\n const provider = new CompositeProvider(fs, engine, getInspectorPreferences, compositePath);\n await provider.initialize();\n return provider;\n }\n\n private async initialize(): Promise<void> {\n await this.ensureCompositeExists();\n this.compositeManager = await this.createCompositeManager();\n await this.loadComposite();\n this.runMigrations();\n await this.initializeComponents();\n await this.overrideWithSceneJson();\n }\n\n private async ensureCompositeExists(): Promise<void> {\n if (!(await this.fs.existFile(this.compositePath))) {\n console.log('Main composite does not exist, creating minimal composite');\n const minimal = getMinimalComposite();\n const buffer = Buffer.from(JSON.stringify(minimal, null, 2), 'utf-8');\n await this.fs.writeFile(this.compositePath, buffer);\n } else {\n console.log('Main composite exists');\n }\n }\n\n private async createCompositeManager(): Promise<CompositeManager> {\n return createFsCompositeProvider(this.fs);\n }\n\n private async loadComposite(): Promise<void> {\n if (!this.compositeManager) throw new Error('Composite manager not initialized');\n\n const loadedCompositeResource = this.compositeManager.getCompositeOrNull(this.compositePath);\n if (!loadedCompositeResource) throw new Error('Invalid composite');\n\n console.log('Loading composite into engine...');\n\n Composite.instance(this.engine, loadedCompositeResource, this.compositeManager, {\n entityMapping: {\n type: EntityMappingMode.EMM_DIRECT_MAPPING,\n getCompositeEntity: (entity: number | Entity) => entity as Entity,\n },\n });\n\n this.composite = loadedCompositeResource.composite;\n }\n\n private runMigrations(): void {\n removeLegacyEntityNodeComponents(this.engine);\n buildNodesHierarchyIfNotExists(this.engine);\n addNodesComponentsToPlayerAndCamera(this.engine);\n fixNetworkEntityValues(this.engine);\n selectSceneEntity(this.engine);\n migrateSceneMetadata(this.engine);\n createTagsComponent(this.engine);\n }\n\n private async initializeComponents(): Promise<void> {\n initComponents(this.engine);\n }\n\n private bufferToScene(buffer: Buffer): Scene {\n return JSON.parse(new TextDecoder().decode(buffer));\n }\n\n private async overrideWithSceneJson(): Promise<void> {\n const SceneMetadata = this.engine.getComponent(\n EditorComponentNames.Scene,\n ) as EditorComponents['Scene'];\n\n if (await this.fs.existFile('scene.json')) {\n console.log('Overriding SceneMetadata with scene.json');\n const sceneJsonBuffer = await this.fs.readFile('scene.json');\n const sceneJson = this.bufferToScene(sceneJsonBuffer);\n SceneMetadata.createOrReplace(this.engine.RootEntity, toSceneComponent(sceneJson));\n }\n }\n\n canHandle(operation: Operation): boolean {\n if (operation.type === OperationType.COMPOSITE_UPDATE) {\n if (\n !operation.componentName ||\n operation.componentName === EditorComponentNames.Scene ||\n operation.componentName === EditorComponentNames.Selection\n ) {\n return false;\n }\n\n return (\n operation.operation === CrdtMessageType.PUT_COMPONENT ||\n operation.operation === CrdtMessageType.DELETE_COMPONENT\n );\n }\n\n return false;\n }\n\n async processOperation(operation: Operation, transaction: Transaction): Promise<void> {\n if (!this.canHandle(operation)) return;\n\n this.pendingOperations.add(transaction.id);\n\n if (this.dirtyState === DirtyState.Clean) {\n this.dirtyState = DirtyState.DirtyAndNeedsDump;\n }\n }\n\n async onTransactionComplete(transaction: Transaction): Promise<void> {\n if (!this.pendingOperations.has(transaction.id)) return;\n\n this.pendingOperations.delete(transaction.id);\n\n if (this.dirtyState === DirtyState.DirtyAndNeedsDump) {\n const preferences = this.getInspectorPreferences();\n const shouldAutosave = preferences.autosaveEnabled;\n const now = Date.now();\n\n if (shouldAutosave && now - this.lastSaveTime >= this.minSaveInterval) {\n this.lastSaveTime = now;\n await this.saveComposite(true);\n }\n }\n }\n\n async saveComposite(dump = true): Promise<CompositeDefinition | null> {\n if (this.savePromise) {\n await this.savePromise;\n }\n\n this.savePromise = this.performSave(dump).then(() => {});\n await this.savePromise;\n this.savePromise = null;\n\n return this.composite;\n }\n\n private async performSave(dump: boolean): Promise<CompositeDefinition | null> {\n try {\n this.composite = dumpEngineToComposite(this.engine, 'json');\n\n if (!dump) {\n this.dirtyState = DirtyState.Clean;\n return this.composite;\n }\n\n if (!this.compositeManager) {\n throw new Error('Composite manager not initialized');\n }\n\n const mainCrdt = dumpEngineToCrdtCommands(this.engine);\n await this.fs.writeFile('main.crdt', Buffer.from(mainCrdt));\n await this.compositeManager.save(\n { src: this.compositePath, composite: this.composite! },\n 'json',\n );\n\n await generateEntityNamesType(\n this.engine,\n withAssetDir(DIRECTORY.SCENE + '/entity-names.ts'),\n 'EntityNames',\n this.fs,\n );\n\n this.dirtyState = DirtyState.Clean;\n return this.composite;\n } catch (error) {\n console.error('Failed saving composite:', error);\n return null;\n }\n }\n\n getComposite(): CompositeDefinition | null {\n return this.composite;\n }\n\n isDirty(): boolean {\n return this.dirtyState !== DirtyState.Clean;\n }\n\n getDirtyState(): DirtyState {\n return this.dirtyState;\n }\n\n async forceReload(): Promise<void> {\n await this.initialize();\n }\n\n async dispose(): Promise<void> {\n if (this.savePromise) {\n await this.savePromise;\n }\n\n this.pendingOperations.clear();\n this.dirtyState = DirtyState.Clean;\n this.composite = null;\n this.compositeManager = null;\n }\n}\n", "import type { UndoRedo } from '../undo-redo-provider';\n\nconst ONE_MB_IN_BYTES = 1_048_576;\nconst ONE_GB_IN_BYTES = ONE_MB_IN_BYTES * 1024;\n\nexport function UndoRedoArray(maxEntries: number, maxSize: number = ONE_GB_IN_BYTES) {\n const valueList: UndoRedo[] = [];\n let memorySize: number = 0;\n\n function valueSize(val?: UndoRedo) {\n let fileSize: number = 0;\n if (val?.$case === 'file') {\n for (const operation of val.operations) {\n fileSize += operation.newValue?.length ?? 0;\n fileSize += operation.prevValue?.length ?? 0;\n }\n } else if (val?.$case === 'composite') {\n // Calculate size for file operations in composite\n for (const operation of val.fileOperations) {\n fileSize += operation.newValue?.length ?? 0;\n fileSize += operation.prevValue?.length ?? 0;\n }\n }\n return fileSize;\n }\n\n return {\n push(value: UndoRedo) {\n // If we reach the max entries, remove the first element and calc size\n while (valueList.length >= maxEntries) {\n const valToRemove = valueList.shift();\n memorySize -= valueSize(valToRemove);\n }\n\n // Add current value size to the memory\n const currentSize = valueSize(value);\n memorySize += currentSize;\n\n // add the value to the list.\n valueList.push(value);\n\n // if we reach the max_size limit, start removing files.\n while (memorySize >= maxSize) {\n for (let index = 0; index <= valueList.length - 1; index++) {\n const size = valueSize(valueList[index]);\n if (size) {\n memorySize -= size;\n valueList.splice(index, 1);\n break;\n }\n }\n }\n return valueList[valueList.length - 1] === value ? value : undefined;\n },\n pop() {\n const value = valueList.pop();\n memorySize -= valueSize(value);\n return value;\n },\n clear() {\n memorySize = 0;\n valueList.length = 0;\n },\n values() {\n return Array.from(valueList);\n },\n get memorySize() {\n return memorySize;\n },\n };\n}\n", "import type {\n CompositeDefinition,\n Entity,\n IEngine,\n LastWriteWinElementSetComponentDefinition,\n} from '@dcl/ecs';\nimport { CrdtMessageType } from '@dcl/ecs';\nimport type { FileSystemInterface } from '../types';\nimport upsertAsset from './upsert-asset';\nimport { findPrevValue } from './utils/component';\nimport { UndoRedoArray } from './utils/undo-redo-array';\nimport { isFileInAssetDir, withAssetDir } from './fs-utils';\nimport {\n type StateProvider,\n type Operation,\n type Transaction,\n OperationType,\n} from './state-manager';\nimport { ErrorHandler } from './error-handler';\n\nexport type UndoRedoCrdt = { $case: 'crdt'; operations: CrdtOperation[] };\nexport type UndoRedoFile = { $case: 'file'; operations: FileOperation[] };\nexport type UndoRedoComposite = {\n $case: 'composite';\n fileOperations: FileOperation[];\n crdtOperations: CrdtOperation[];\n};\n\nexport type CrdtOperation = {\n entity: Entity;\n componentName: string;\n prevValue: unknown;\n newValue: unknown;\n operation: CrdtMessageType;\n};\n\nexport type FileOperation = {\n path: string;\n prevValue: Uint8Array | null;\n newValue: Uint8Array | null;\n};\n\nexport type UndoRedo = UndoRedoFile | UndoRedoCrdt | UndoRedoComposite;\nexport type UndoRedoOp = CrdtOperation | FileOperation;\nexport type UndoRedoGetter = <T extends UndoRedoOp>(op: T) => T['newValue'];\n\nexport interface UndoRedoOptions {\n maxEntries?: number;\n maxSize?: number;\n enableValidation?: boolean;\n enableStateVerification?: boolean;\n persistToStorage?: boolean;\n storageKey?: string;\n maxStorageSize?: number; // max size in bytes for localStorage\n ignoredComponents?: string[]; // components to ignore for undo/redo\n}\n\ninterface SerializedUndoRedo {\n $case: 'crdt' | 'file' | 'composite';\n operations?: Array<{\n entity?: Entity;\n componentName?: string;\n operation?: CrdtMessageType;\n prevValue?: string; // JSON serialized\n newValue?: string; // JSON serialized\n path?: string; // for file operations\n }>;\n fileOperations?: Array<{\n path: string;\n prevValue?: string; // base64 encoded\n newValue?: string; // base64 encoded\n }>;\n crdtOperations?: Array<{\n entity: Entity;\n componentName: string;\n operation: CrdtMessageType;\n prevValue?: string; // JSON serialized\n newValue?: string; // JSON serialized\n }>;\n timestamp: number;\n}\n\ninterface StoredHistory {\n version: number;\n undoStack: SerializedUndoRedo[];\n redoStack: SerializedUndoRedo[];\n timestamp: number;\n metadata: {\n totalOperations: number;\n memoryUsage: number;\n };\n}\n\nconst isNil = (val: unknown) => val === null || val === undefined;\nconst getUndoValue: UndoRedoGetter = val => val.prevValue;\nconst getRedoValue: UndoRedoGetter = val => val.newValue;\n\nexport class UndoRedoProvider implements StateProvider {\n readonly name = 'undo-redo';\n\n private readonly undoList: ReturnType<typeof UndoRedoArray>;\n private readonly redoList: ReturnType<typeof UndoRedoArray>;\n private readonly pendingCrdtOperations = new Map<string, CrdtOperation[]>();\n private readonly fs: FileSystemInterface;\n private readonly engine: IEngine;\n private readonly getComposite: () => CompositeDefinition | null;\n private readonly options: Required<UndoRedoOptions>;\n private isExecutingUndoRedo = false;\n private deferredFileOperations: FileOperation[] | null = null;\n private deferredTimeout: NodeJS.Timeout | null = null;\n\n constructor(\n fs: FileSystemInterface,\n engine: IEngine,\n getComposite: () => CompositeDefinition | null,\n options: UndoRedoOptions = {},\n ) {\n this.fs = fs;\n this.engine = engine;\n this.getComposite = getComposite;\n\n this.options = {\n maxEntries: options.maxEntries ?? 1024,\n maxSize: options.maxSize ?? 1024 * 1024 * 100, // 100MB default\n enableValidation: options.enableValidation ?? true,\n enableStateVerification: options.enableStateVerification ?? false, // off by default for performance\n persistToStorage: options.persistToStorage ?? false,\n storageKey: options.storageKey ?? 'inspector-undo-redo-history',\n maxStorageSize: options.maxStorageSize ?? 1024 * 1024 * 10, // 10MB limit for localStorage\n ignoredComponents: options.ignoredComponents ?? [], // components to ignore for undo/redo\n };\n\n this.undoList = UndoRedoArray(this.options.maxEntries, this.options.maxSize);\n this.redoList = UndoRedoArray(this.options.maxEntries, this.options.maxSize);\n\n if (this.options.persistToStorage) {\n this.loadFromStorage();\n }\n }\n\n static async create(\n fs: FileSystemInterface,\n engine: IEngine,\n getComposite: () => CompositeDefinition | null,\n options: UndoRedoOptions = {},\n ): Promise<UndoRedoProvider> {\n return new UndoRedoProvider(fs, engine, getComposite, options);\n }\n\n private loadFromStorage(): void {\n if (typeof localStorage === 'undefined') return;\n\n try {\n const stored = localStorage.getItem(this.options.storageKey);\n if (!stored) return;\n\n const data: StoredHistory = JSON.parse(stored);\n\n if (data.version !== 1) {\n console.warn('Undo/redo history version mismatch, clearing storage');\n this.clearStorage();\n return;\n }\n\n if (!data.undoStack || !data.redoStack || !Array.isArray(data.undoStack)) {\n throw new Error('Invalid stored history format');\n }\n\n let loadedUndo = 0;\n let loadedRedo = 0;\n\n for (const serialized of data.undoStack) {\n const operation = this.deserializeOperation(serialized);\n if (operation) {\n this.undoList.push(operation);\n loadedUndo++;\n }\n }\n\n for (const serialized of data.redoStack) {\n const operation = this.deserializeOperation(serialized);\n if (operation) {\n this.redoList.push(operation);\n loadedRedo++;\n }\n }\n\n console.log(`Loaded undo/redo history: ${loadedUndo} undo, ${loadedRedo} redo operations`);\n } catch (error) {\n ErrorHandler.handleError(\n 'Failed to load undo/redo history from storage',\n { operation: 'storage_load' },\n error as Error,\n );\n this.clearStorage();\n }\n }\n\n private saveToStorage(): void {\n if (!this.options.persistToStorage || typeof localStorage === 'undefined') return;\n\n try {\n const undoOperations = this.undoList.values();\n const redoOperations = this.redoList.values();\n\n const data: StoredHistory = {\n version: 1,\n undoStack: undoOperations\n .map(op => this.serializeOperation(op))\n .filter(Boolean) as SerializedUndoRedo[],\n redoStack: redoOperations\n .map(op => this.serializeOperation(op))\n .filter(Boolean) as SerializedUndoRedo[],\n timestamp: Date.now(),\n metadata: {\n totalOperations: undoOperations.length + redoOperations.length,\n memoryUsage: this.undoList.memorySize + this.redoList.memorySize,\n },\n };\n\n const serialized = JSON.stringify(data);\n\n if (serialized.length > this.options.maxStorageSize) {\n console.warn('Undo/redo history too large for localStorage, skipping save');\n return;\n }\n\n localStorage.setItem(this.options.storageKey, serialized);\n } catch (error) {\n ErrorHandler.handleError(\n 'Failed to save undo/redo history to storage',\n { operation: 'storage_save' },\n error as Error,\n );\n }\n }\n\n private serializeOperation(operation: UndoRedo): SerializedUndoRedo | null {\n try {\n if (operation.$case === 'crdt') {\n return {\n $case: 'crdt',\n operations: operation.operations.map(op => ({\n entity: op.entity,\n componentName: op.componentName,\n operation: op.operation,\n prevValue: this.serializeValue(op.prevValue),\n newValue: this.serializeValue(op.newValue),\n })),\n timestamp: Date.now(),\n };\n } else if (operation.$case === 'file') {\n return {\n $case: 'file',\n operations: operation.operations.map(op => ({\n path: op.path,\n prevValue: this.serializeFileValue(op.prevValue),\n newValue: this.serializeFileValue(op.newValue),\n })),\n timestamp: Date.now(),\n };\n } else if (operation.$case === 'composite') {\n return {\n $case: 'composite',\n fileOperations: operation.fileOperations.map(op => ({\n path: op.path,\n prevValue: this.serializeFileValue(op.prevValue),\n newValue: this.serializeFileValue(op.newValue),\n })),\n crdtOperations: operation.crdtOperations.map(op => ({\n entity: op.entity,\n componentName: op.componentName,\n operation: op.operation,\n prevValue: this.serializeValue(op.prevValue),\n newValue: this.serializeValue(op.newValue),\n })),\n timestamp: Date.now(),\n };\n }\n } catch (error) {\n ErrorHandler.handleError(\n 'Failed to serialize operation for storage',\n { operation: 'serialize' },\n error as Error,\n );\n }\n return null;\n }\n\n private deserializeOperation(serialized: SerializedUndoRedo): UndoRedo | null {\n try {\n if (serialized.$case === 'crdt') {\n return {\n $case: 'crdt',\n operations: serialized.operations!.map(op => ({\n entity: op.entity!,\n componentName: op.componentName!,\n operation: op.operation!,\n prevValue: this.deserializeValue(op.prevValue),\n newValue: this.deserializeValue(op.newValue),\n })),\n };\n } else if (serialized.$case === 'file') {\n return {\n $case: 'file',\n operations: serialized.operations!.map(op => ({\n path: op.path!,\n prevValue: this.deserializeFileValue(op.prevValue),\n newValue: this.deserializeFileValue(op.newValue),\n })),\n };\n } else if (serialized.$case === 'composite') {\n return {\n $case: 'composite',\n fileOperations: serialized.fileOperations!.map(op => ({\n path: op.path,\n prevValue: this.deserializeFileValue(op.prevValue),\n newValue: this.deserializeFileValue(op.newValue),\n })),\n crdtOperations: serialized.crdtOperations!.map(op => ({\n entity: op.entity,\n componentName: op.componentName,\n operation: op.operation,\n prevValue: this.deserializeValue(op.prevValue),\n newValue: this.deserializeValue(op.newValue),\n })),\n };\n }\n } catch (error) {\n ErrorHandler.handleError(\n 'Failed to deserialize operation from storage',\n { operation: 'deserialize' },\n error as Error,\n );\n }\n return null;\n }\n\n private serializeValue(value: unknown): string | undefined {\n if (value === null || value === undefined) return undefined;\n try {\n return JSON.stringify(value);\n } catch (error) {\n // TODO: handle circular references or non-serializable values\n return JSON.stringify('[UNSERIALIZABLE]');\n }\n }\n\n private deserializeValue(serialized: string | undefined): unknown {\n if (!serialized) return undefined;\n try {\n const parsed = JSON.parse(serialized);\n return parsed === '[UNSERIALIZABLE]' ? undefined : parsed;\n } catch (error) {\n return undefined;\n }\n }\n\n private serializeFileValue(value: Uint8Array | null): string | undefined {\n if (!value) return undefined;\n try {\n return btoa(String.fromCharCode(...Array.from(value)));\n } catch (error) {\n return undefined;\n }\n }\n\n private deserializeFileValue(serialized: string | undefined): Uint8Array | null {\n if (!serialized) return null;\n try {\n const binaryString = atob(serialized);\n const bytes = new Uint8Array(binaryString.length);\n for (let i = 0; i < binaryString.length; i++) {\n bytes[i] = binaryString.charCodeAt(i);\n }\n return bytes;\n } catch (error) {\n return null;\n }\n }\n\n private clearStorage(): void {\n if (typeof localStorage !== 'undefined') {\n localStorage.removeItem(this.options.storageKey);\n }\n }\n\n canHandle(operation: Operation): boolean {\n if (this.isExecutingUndoRedo) return false;\n\n return (\n operation.type === OperationType.COMPOSITE_UPDATE ||\n operation.type === OperationType.UNDO_CAPTURE\n );\n }\n\n async processOperation(operation: Operation, transaction: Transaction): Promise<void> {\n if (\n !this.canHandle(operation) ||\n transaction.source === 'undo' ||\n transaction.source === 'redo'\n ) {\n return;\n }\n\n if (\n operation.type === OperationType.COMPOSITE_UPDATE &&\n (operation.operation === CrdtMessageType.PUT_COMPONENT ||\n operation.operation === CrdtMessageType.DELETE_COMPONENT)\n ) {\n await this.captureUndoOperation(operation, transaction);\n }\n }\n\n private async captureUndoOperation(\n operation: Operation,\n transaction: Transaction,\n ): Promise<void> {\n const composite = this.getComposite();\n if (!composite) return;\n\n // Skip capturing undo operation if component is in ignore list\n if (this.options.ignoredComponents.includes(operation.componentName)) {\n return;\n }\n\n const prevValue = findPrevValue(composite, operation.componentName, operation.entity);\n const crdtOperation: CrdtOperation = {\n entity: operation.entity,\n operation: operation.operation,\n componentName: operation.componentName,\n prevValue,\n newValue: operation.componentValue,\n };\n\n let operations = this.pendingCrdtOperations.get(transaction.id);\n if (!operations) {\n operations = [];\n this.pendingCrdtOperations.set(transaction.id, operations);\n }\n operations.push(crdtOperation);\n }\n\n async onTransactionComplete(transaction: Transaction): Promise<void> {\n const operations = this.pendingCrdtOperations.get(transaction.id);\n if (operations && operations.length > 0) {\n // Check if we're in deferred mode and should create a composite entry\n if (this.deferredFileOperations) {\n // Clear the timeout since we're creating a composite entry\n if (this.deferredTimeout) {\n clearTimeout(this.deferredTimeout);\n this.deferredTimeout = null;\n }\n\n this.redoList.clear();\n this.undoList.push({\n $case: 'composite',\n fileOperations: this.deferredFileOperations,\n crdtOperations: operations,\n });\n this.saveToStorage();\n this.deferredFileOperations = null;\n } else {\n // Normal CRDT-only operation\n this.redoList.clear();\n this.undoList.push({ $case: 'crdt', operations });\n this.saveToStorage();\n }\n } else if (this.deferredFileOperations) {\n // we had deferred file operations but no CRDT operations followed\n // this shouldn't normally happen, but we'll handle it gracefully\n this.redoList.clear();\n this.undoList.push({ $case: 'file', operations: this.deferredFileOperations });\n this.saveToStorage();\n this.deferredFileOperations = null;\n }\n\n this.pendingCrdtOperations.delete(transaction.id);\n }\n\n async undo(): Promise<{ type: string }> {\n if (this.options.enableStateVerification) {\n return this.undoWithVerification();\n }\n\n return this._undo();\n }\n\n async redo(): Promise<{ type: string }> {\n if (this.options.enableStateVerification) {\n return this.redoWithVerification();\n }\n\n return this._redo();\n }\n\n private async validateCrdtOperation(operation: CrdtOperation): Promise<boolean> {\n if (!this.options.enableValidation) return true;\n\n try {\n const component = this.engine.getComponent(operation.componentName);\n if (!component) {\n ErrorHandler.handleError('Component no longer exists for undo/redo operation', {\n component: operation.componentName,\n entity: operation.entity,\n operation: 'validate',\n });\n return false;\n }\n return true;\n } catch (error) {\n ErrorHandler.handleError(\n 'Validation failed for undo/redo operation',\n {\n component: operation.componentName,\n entity: operation.entity,\n },\n error as Error,\n );\n return false;\n }\n }\n\n private async validateFileOperation(\n operation: FileOperation,\n getValue: UndoRedoGetter,\n ): Promise<boolean> {\n if (!this.options.enableValidation) return true;\n\n try {\n const valueToExecute = getValue(operation);\n\n if (isNil(valueToExecute)) {\n return true;\n }\n\n // only validate parent directory for file creation/update operations\n // Note: We skip parent directory validation because the file system should handle\n // directory creation automatically during writeFile operations\n // This prevents validation failures during redo when directories were cleaned up\n\n return true;\n } catch (error) {\n ErrorHandler.handleError(\n 'File validation failed for undo/redo operation',\n { operation: 'file_validate' },\n error as Error,\n );\n return false;\n }\n }\n\n private async executeUndoRedoLogic(message: UndoRedo, getValue: UndoRedoGetter): Promise<void> {\n const failedOperations: Array<{ operation: any; error: Error }> = [];\n const successfulOperations: any[] = [];\n\n try {\n if (message.$case === 'crdt') {\n for (const operation of message.operations) {\n try {\n const isValid = await this.validateCrdtOperation(operation);\n if (!isValid) {\n failedOperations.push({\n operation,\n error: new Error('Operation validation failed'),\n });\n continue;\n }\n\n const component = this.engine.getComponent(\n operation.componentName,\n ) as LastWriteWinElementSetComponentDefinition<unknown>;\n\n const value = getValue(operation);\n\n if (isNil(value)) {\n component.deleteFrom(operation.entity);\n } else {\n component.createOrReplace(operation.entity, value);\n }\n\n successfulOperations.push(operation);\n } catch (error) {\n failedOperations.push({ operation, error: error as Error });\n ErrorHandler.handleError(\n 'CRDT operation failed during undo/redo',\n {\n component: operation.componentName,\n entity: operation.entity,\n operation: message.$case,\n },\n error as Error,\n );\n }\n }\n } else if (message.$case === 'file') {\n for (const operation of message.operations) {\n try {\n const isValid = await this.validateFileOperation(operation, getValue);\n if (!isValid) {\n failedOperations.push({\n operation,\n error: new Error('File operation validation failed'),\n });\n continue;\n }\n\n const filePath = isFileInAssetDir(operation.path)\n ? operation.path\n : withAssetDir(operation.path);\n\n await upsertAsset(this.fs, filePath, getValue(operation));\n successfulOperations.push(operation);\n } catch (error) {\n failedOperations.push({ operation, error: error as Error });\n ErrorHandler.handleError(\n 'File operation failed during undo/redo',\n {\n component: operation.path,\n operation: message.$case,\n },\n error as Error,\n );\n }\n }\n } else if (message.$case === 'composite') {\n // Execute file operations first, then CRDT operations\n for (const operation of message.fileOperations) {\n try {\n const isValid = await this.validateFileOperation(operation, getValue);\n if (!isValid) {\n failedOperations.push({\n operation,\n error: new Error('File operation validation failed'),\n });\n continue;\n }\n\n const filePath = isFileInAssetDir(operation.path)\n ? operation.path\n : withAssetDir(operation.path);\n\n await upsertAsset(this.fs, filePath, getValue(operation));\n successfulOperations.push(operation);\n } catch (error) {\n failedOperations.push({ operation, error: error as Error });\n ErrorHandler.handleError(\n 'File operation failed during composite undo/redo',\n {\n component: operation.path,\n operation: message.$case,\n },\n error as Error,\n );\n }\n }\n\n // Then execute CRDT operations\n for (const operation of message.crdtOperations) {\n try {\n const isValid = await this.validateCrdtOperation(operation);\n if (!isValid) {\n failedOperations.push({\n operation,\n error: new Error('Operation validation failed'),\n });\n continue;\n }\n\n const component = this.engine.getComponent(\n operation.componentName,\n ) as LastWriteWinElementSetComponentDefinition<unknown>;\n\n const value = getValue(operation);\n\n if (isNil(value)) {\n component.deleteFrom(operation.entity);\n } else {\n component.createOrReplace(operation.entity, value);\n }\n\n successfulOperations.push(operation);\n } catch (error) {\n failedOperations.push({ operation, error: error as Error });\n ErrorHandler.handleError(\n 'CRDT operation failed during composite undo/redo',\n {\n component: operation.componentName,\n entity: operation.entity,\n operation: message.$case,\n },\n error as Error,\n );\n }\n }\n }\n\n if (failedOperations.length > 0) {\n const totalOps =\n message.$case === 'composite'\n ? message.fileOperations.length + message.crdtOperations.length\n : (message as UndoRedoCrdt | UndoRedoFile).operations.length;\n const failedCount = failedOperations.length;\n const successCount = successfulOperations.length;\n\n ErrorHandler.handleError(\n `Undo/Redo completed with ${failedCount}/${totalOps} failures (${successCount} succeeded)`,\n {\n operation: `${message.$case}_partial_failure`,\n },\n );\n\n if (failedCount > totalOps / 2) {\n console.warn('High failure rate in undo/redo operation. Consider manual intervention.');\n }\n }\n } catch (error) {\n ErrorHandler.handleError(\n 'Critical failure in undo/redo execution',\n { operation: message.$case },\n error as Error,\n );\n throw error;\n }\n }\n\n addUndoFile(operations: FileOperation[]): void {\n if (operations.length === 0) {\n return;\n }\n // start deferred mode to potentially group with subsequent CRDT operations\n this.startDeferredMode(operations);\n }\n\n addUndoComposite(fileOperations: FileOperation[], crdtOperations: CrdtOperation[]): void {\n if (fileOperations.length === 0 && crdtOperations.length === 0) {\n return;\n }\n this.redoList.clear();\n this.undoList.push({ $case: 'composite', fileOperations, crdtOperations });\n this.saveToStorage();\n }\n\n startDeferredMode(fileOperations: FileOperation[]): void {\n if (this.deferredTimeout) {\n clearTimeout(this.deferredTimeout);\n }\n\n this.deferredFileOperations = fileOperations;\n\n this.deferredTimeout = setTimeout(() => {\n if (this.deferredFileOperations) {\n this.redoList.clear();\n this.undoList.push({ $case: 'file', operations: this.deferredFileOperations });\n this.saveToStorage();\n this.deferredFileOperations = null;\n }\n this.deferredTimeout = null;\n }, 100); // 100ms timeout - should be enough for immediate CRDT operations\n }\n\n endDeferredMode(): void {\n if (this.deferredTimeout) {\n clearTimeout(this.deferredTimeout);\n this.deferredTimeout = null;\n }\n this.deferredFileOperations = null;\n }\n\n clearHistory(): void {\n this.undoList.clear();\n this.redoList.clear();\n this.pendingCrdtOperations.clear();\n }\n\n getHistorySize(): { undoCount: number; redoCount: number } {\n return {\n undoCount: this.undoList.values().length,\n redoCount: this.redoList.values().length,\n };\n }\n\n private async verifyStateIntegrity(): Promise<boolean> {\n try {\n const composite = this.getComposite();\n if (!composite) {\n ErrorHandler.handleError('No composite available for state verification', {\n operation: 'state_verify',\n });\n return false;\n }\n return true;\n } catch (error) {\n ErrorHandler.handleError(\n 'State verification failed with error',\n { operation: 'state_verify' },\n error as Error,\n );\n return false;\n }\n }\n\n getDebugInfo(): {\n undoCount: number;\n redoCount: number;\n pendingOperations: number;\n memoryUsage: { undo: number; redo: number };\n stateIntegrity: boolean;\n } {\n return {\n undoCount: this.undoList.values().length,\n redoCount: this.redoList.values().length,\n pendingOperations: this.pendingCrdtOperations.size,\n memoryUsage: {\n undo: this.undoList.memorySize,\n redo: this.redoList.memorySize,\n },\n stateIntegrity: false,\n };\n }\n\n async _undo(): Promise<{ type: string }> {\n const msg = this.undoList.pop();\n if (!msg) return { type: '' };\n\n this.redoList.push(msg);\n this.isExecutingUndoRedo = true;\n\n try {\n await this.executeUndoRedoLogic(msg, getUndoValue);\n await this.engine.update(1 / 16);\n } finally {\n this.isExecutingUndoRedo = false;\n }\n\n return { type: msg.$case };\n }\n\n async _redo(): Promise<{ type: string }> {\n const msg = this.redoList.pop();\n if (!msg) return { type: '' };\n\n this.undoList.push(msg);\n this.isExecutingUndoRedo = true;\n\n try {\n await this.executeUndoRedoLogic(msg, getRedoValue);\n await this.engine.update(1 / 16);\n } finally {\n this.isExecutingUndoRedo = false;\n }\n\n return { type: msg.$case };\n }\n\n async undoWithVerification(): Promise<{ type: string; verified: boolean }> {\n const stateOk = await this.verifyStateIntegrity();\n if (!stateOk) {\n ErrorHandler.handleError('Undo operation aborted due to state integrity issues', {\n operation: 'undo_verification_failed',\n });\n return { type: '', verified: false };\n }\n\n const result = await this._undo();\n return { ...result, verified: true };\n }\n\n async redoWithVerification(): Promise<{ type: string; verified: boolean }> {\n const stateOk = await this.verifyStateIntegrity();\n if (!stateOk) {\n ErrorHandler.handleError('Redo operation aborted due to state integrity issues', {\n operation: 'redo_verification_failed',\n });\n return { type: '', verified: false };\n }\n\n const result = await this._redo();\n return { ...result, verified: true };\n }\n\n /**\n * Get storage statistics\n */\n getStorageInfo(): {\n enabled: boolean;\n storageKey: string;\n currentSize: number;\n maxSize: number;\n percentUsed: number;\n operationsStored: number;\n } {\n let currentSize = 0;\n let operationsStored = 0;\n\n if (typeof localStorage !== 'undefined' && this.options.persistToStorage) {\n try {\n const stored = localStorage.getItem(this.options.storageKey);\n if (stored) {\n currentSize = new Blob([stored]).size;\n const data = JSON.parse(stored);\n operationsStored = (data.undoStack?.length || 0) + (data.redoStack?.length || 0);\n }\n // eslint-disable-next-line no-empty\n } catch (error) {}\n }\n\n return {\n enabled: this.options.persistToStorage,\n storageKey: this.options.storageKey,\n currentSize,\n maxSize: this.options.maxStorageSize,\n percentUsed:\n this.options.maxStorageSize > 0 ? (currentSize / this.options.maxStorageSize) * 100 : 0,\n operationsStored,\n };\n }\n\n clearPersistedHistory(): void {\n this.clearStorage();\n console.log('Cleared persisted undo/redo history from localStorage');\n }\n\n forceSaveToStorage(): boolean {\n if (!this.options.persistToStorage) {\n console.warn('Persistent storage is not enabled');\n return false;\n }\n\n try {\n this.saveToStorage();\n return true;\n } catch (error) {\n ErrorHandler.handleError(\n 'Failed to force save to storage',\n { operation: 'force_save' },\n error as Error,\n );\n return false;\n }\n }\n\n setPersistentStorage(enabled: boolean): void {\n const wasEnabled = this.options.persistToStorage;\n this.options.persistToStorage = enabled;\n\n if (enabled && !wasEnabled) {\n this.saveToStorage();\n console.log('Persistent storage enabled for undo/redo');\n } else if (!enabled && wasEnabled) {\n console.log('Persistent storage disabled for undo/redo');\n }\n }\n\n dispose(): void {\n if (this.options.persistToStorage) {\n this.saveToStorage();\n }\n\n // Clean up deferred timeout\n if (this.deferredTimeout) {\n clearTimeout(this.deferredTimeout);\n this.deferredTimeout = null;\n }\n\n this.clearHistory();\n }\n}\n", "import { AsyncQueue } from '@well-known-components/pushable-channel';\nimport type { Transport } from '@dcl/ecs';\n\nimport { consumeAllMessagesInto } from '../../logic/consume-stream';\nimport type { DataLayerContext } from '../types';\nimport { serializeEngine } from './utils/engine';\n\nexport function createStream(\n stream: AsyncIterable<{ data: Uint8Array }>,\n ctx: Omit<DataLayerContext, 'fs'>,\n): AsyncGenerator<{ data: Uint8Array }> {\n const queue = new AsyncQueue<{ data: Uint8Array }>(_ => {});\n const engineSerialized = serializeEngine(ctx.engine);\n\n queue.enqueue({ data: engineSerialized });\n\n const transport: Transport = {\n filter() {\n return !queue.closed;\n },\n async send(message: Uint8Array) {\n if (queue.closed) return;\n queue.enqueue({ data: message });\n },\n };\n Object.assign(transport, { name: 'DataLayerHost' });\n ctx.engine.addTransport(transport);\n\n function processMessage(message: Uint8Array) {\n transport.onmessage!(message);\n void ctx.engine.update(1);\n }\n\n consumeAllMessagesInto(stream, processMessage).catch(err => {\n if (err instanceof Error && !err.message.includes('RPC Transport closed')) {\n console.error('Failed to consume stream from data layer ', err);\n }\n queue.close();\n });\n\n void ctx.engine.update(1);\n\n return queue;\n}\n", "import type { CrdtStreamMessage } from '../data-layer/proto/gen/data-layer.gen';\n\nexport async function consumeAllMessagesInto(\n iter: AsyncIterable<CrdtStreamMessage>,\n cb: (data: Uint8Array) => void,\n) {\n for await (const it of iter) {\n if (it.data.byteLength) {\n cb(it.data);\n }\n }\n}\n", "import type { IEngine, OnChangeFunction } from '@dcl/ecs';\n\nimport type { DataLayerRpcServer, FileSystemInterface } from '../types';\nimport { readPreferencesFromFile, serializeInspectorPreferences } from '../../logic/preferences/io';\nimport type { AssetData } from '../../logic/catalog';\nimport type { InspectorPreferences } from '../../logic/preferences/types';\nimport { EditorComponentNames } from '../../sdk/components/types';\nimport {\n DIRECTORY,\n EXTENSIONS,\n getCurrentCompositePath,\n getFilesInDirectory,\n withAssetDir,\n} from './fs-utils';\nimport type { FileOperation } from './undo-redo-provider';\nimport upsertAsset from './upsert-asset';\nimport { installBin } from './utils/install-bin';\nimport { StateManager } from './state-manager';\nimport { SceneProvider } from './scene-provider';\nimport { CompositeProvider } from './composite-provider';\nimport { UndoRedoProvider } from './undo-redo-provider';\nimport { createStream } from './stream';\n\nconst INSPECTOR_PREFERENCES_PATH = 'inspector-preferences.json';\n\nfunction getIgnoredUndoRedoComponents() {\n return [EditorComponentNames.Selection, EditorComponentNames.TransformConfig];\n}\n\nexport async function initRpcMethods(\n fs: FileSystemInterface,\n engine: IEngine,\n addEngineListener: (fn: OnChangeFunction) => void,\n): Promise<DataLayerRpcServer & { engine: IEngine }> {\n const currentCompositeResourcePath = getCurrentCompositePath();\n let inspectorPreferences = await readPreferencesFromFile(fs, INSPECTOR_PREFERENCES_PATH);\n const getInspectorPreferences = () => inspectorPreferences;\n const setInspectorPreferences = (value: InspectorPreferences) => {\n inspectorPreferences = value;\n fs.writeFile(INSPECTOR_PREFERENCES_PATH, serializeInspectorPreferences(value));\n };\n const getComposite = () => stateManager.getComposite();\n\n const stateManager = new StateManager({\n fs,\n engine,\n getInspectorPreferences,\n compositePath: currentCompositeResourcePath,\n });\n\n addEngineListener(stateManager.createOnChangeHandler()); // register state manager to engine changes\n\n const sceneProvider = await SceneProvider.create(fs);\n const compositeProvider = await CompositeProvider.create(\n fs,\n engine,\n getInspectorPreferences,\n currentCompositeResourcePath,\n );\n const undoRedoProvider = await UndoRedoProvider.create(fs, engine, getComposite, {\n enableValidation: true,\n enableStateVerification: true,\n persistToStorage: false, // disabled for now\n ignoredComponents: getIgnoredUndoRedoComponents(),\n });\n\n // order here matters!!!!: undo-redo, scene, composite\n stateManager.registerProvider(undoRedoProvider);\n stateManager.registerProvider(sceneProvider);\n stateManager.registerProvider(compositeProvider);\n\n await installBin(fs);\n\n return {\n engine,\n async redo() {\n return stateManager.executeTransaction('redo', async () => {\n return undoRedoProvider.redo();\n });\n },\n\n async undo() {\n return stateManager.executeTransaction('undo', async () => {\n return undoRedoProvider.undo();\n });\n },\n\n async getUndoRedoState() {\n const historySize = undoRedoProvider.getHistorySize();\n return {\n canUndo: historySize.undoCount > 0,\n canRedo: historySize.redoCount > 0,\n };\n },\n\n crdtStream(iter) {\n return createStream(iter, { engine });\n },\n\n async getAssetData(req) {\n if (!req.path) throw new Error('Invalid path');\n if (await fs.existFile(req.path)) {\n return {\n data: await fs.readFile(req.path),\n };\n }\n throw new Error(`Couldn't find the asset ${req.path}`);\n },\n\n async getFiles({ path, ignore = [] }) {\n const filesInDir = await getFilesInDirectory(fs, path, [], true, ignore);\n const files = await Promise.all(\n filesInDir.map(async $ => ({\n path: $,\n content: await fs.readFile($),\n })),\n );\n return { files };\n },\n\n async saveFile({ path, content }) {\n await fs.writeFile(path, Buffer.from(content));\n return {};\n },\n\n async getAssetCatalog() {\n const ignore = ['.git', 'node_modules'];\n const basePath = withAssetDir();\n\n const assets = (await getFilesInDirectory(fs, basePath, [], true, ignore)).filter(item => {\n const itemLower = item.toLowerCase();\n return EXTENSIONS.some(ext => itemLower.endsWith(ext));\n });\n\n return { basePath, assets: assets.map($ => ({ path: $ })) };\n },\n\n async importAsset({ assetPackageName, basePath, content }) {\n return stateManager.executeTransaction('external', async () => {\n const baseFolder = basePath.length ? basePath + '/' : '';\n const undoAcc: FileOperation[] = [];\n\n for (const [fileName, fileContent] of content) {\n const importName = assetPackageName ? `${assetPackageName}/${fileName}` : fileName;\n const filePath = (baseFolder + importName).replaceAll('//', '/');\n const prevValue = (await fs.existFile(filePath)) ? await fs.readFile(filePath) : null;\n undoAcc.push({ prevValue, newValue: fileContent, path: filePath });\n await upsertAsset(fs, filePath, fileContent);\n }\n\n if (undoAcc.length > 0) {\n undoRedoProvider.addUndoFile(undoAcc);\n }\n return {};\n });\n },\n\n async removeAsset(req) {\n return stateManager.executeTransaction('external', async () => {\n const filePath = req.path;\n if (await fs.existFile(filePath)) {\n const prevValue = await fs.readFile(filePath);\n await fs.rm(filePath);\n undoRedoProvider.addUndoFile([{ prevValue, newValue: null, path: filePath }]);\n }\n return {};\n });\n },\n\n async save() {\n await compositeProvider.saveComposite(true);\n return {};\n },\n\n async getInspectorPreferences() {\n return getInspectorPreferences();\n },\n\n async setInspectorPreferences(req) {\n setInspectorPreferences(req);\n return {};\n },\n\n async copyFile(req) {\n return stateManager.executeTransaction('external', async () => {\n const content = await fs.readFile(req.fromPath);\n const prevValue = (await fs.existFile(req.toPath)) ? await fs.readFile(req.toPath) : null;\n await fs.writeFile(req.toPath, content);\n\n undoRedoProvider.addUndoFile([{ prevValue, newValue: content, path: req.toPath }]);\n return {};\n });\n },\n\n async getFile(req) {\n const content = await fs.readFile(req.path);\n return { content };\n },\n\n async createCustomAsset(req) {\n return stateManager.executeTransaction('external', async () => {\n const { name, composite, resources, thumbnail } = req;\n\n const slug = name\n .toLowerCase()\n .replace(/[^a-z0-9]+/g, '_')\n .replace(/(^_|_$)/g, '');\n\n const basePath = `${DIRECTORY.CUSTOM}`;\n let customAssetPath = `${basePath}/${slug}`;\n let counter = 1;\n while (await fs.existFile(`${customAssetPath}/data.json`)) {\n customAssetPath = `${basePath}/${slug}_${++counter}`;\n }\n\n const data: Omit<AssetData, 'composite'> = {\n id: crypto.randomUUID(),\n name,\n category: 'custom',\n tags: [],\n };\n\n await fs.writeFile(\n `${customAssetPath}/data.json`,\n Buffer.from(JSON.stringify(data, null, 2)) as Buffer,\n );\n await fs.writeFile(\n `${customAssetPath}/composite.json`,\n Buffer.from(JSON.stringify(JSON.parse(new TextDecoder().decode(composite)), null, 2)),\n );\n\n if (thumbnail) {\n const thumbnailBuffer = Buffer.from(thumbnail);\n await fs.writeFile(`${customAssetPath}/thumbnail.png`, thumbnailBuffer);\n }\n\n const undoAcc: FileOperation[] = [];\n for (const resourcePath of resources) {\n const fileName = resourcePath.split('/').pop()!;\n const targetPath = `${customAssetPath}/${fileName}`;\n const content = await fs.readFile(resourcePath);\n\n undoAcc.push({\n prevValue: null,\n newValue: content,\n path: targetPath,\n });\n await fs.writeFile(targetPath, content);\n }\n\n undoRedoProvider.addUndoFile([\n ...undoAcc,\n {\n prevValue: null,\n newValue: Buffer.from(JSON.stringify(data, null, 2)),\n path: `${customAssetPath}/data.json`,\n },\n ]);\n\n const asset: AssetData = {\n id: data.id,\n name: data.name,\n category: data.category,\n tags: data.tags,\n composite: JSON.parse(new TextDecoder().decode(composite)),\n };\n\n return { asset: { data: Buffer.from(JSON.stringify(asset)) } };\n });\n },\n\n async getCustomAssets() {\n const paths = await getFilesInDirectory(fs, `${DIRECTORY.CUSTOM}`, [], true);\n const folders = [...new Set(paths.map(path => path.split('/')[1]))];\n const assets = (\n await Promise.all(\n folders.map(async path => {\n try {\n const files = await getFilesInDirectory(fs, `${DIRECTORY.CUSTOM}/${path}`, [], true);\n let dataPath: string | null = null;\n let compositePath: string | null = null;\n let thumbnailPath: string | null = null;\n const resources: string[] = [];\n for (const file of files) {\n if (file.endsWith('data.json')) {\n dataPath = file;\n } else if (file.endsWith('composite.json')) {\n compositePath = file;\n } else if (file.endsWith('thumbnail.png')) {\n thumbnailPath = file;\n } else {\n resources.push(file);\n }\n }\n if (!dataPath || !compositePath) {\n return null;\n }\n const data = await fs.readFile(dataPath);\n const composite = await fs.readFile(compositePath);\n const parsedData = JSON.parse(new TextDecoder().decode(data));\n const result: AssetData & { thumbnail?: string } = {\n ...parsedData,\n composite: JSON.parse(new TextDecoder().decode(composite)),\n resources,\n };\n\n if (thumbnailPath) {\n const thumbnailData = await fs.readFile(thumbnailPath);\n const thumbnailBuffer = Buffer.from(thumbnailData);\n result.thumbnail = `data:image/png;base64,${thumbnailBuffer.toString('base64')}`;\n }\n\n return result;\n } catch {\n return null;\n }\n }),\n )\n ).filter((asset): asset is AssetData & { thumbnail?: string } => asset !== null);\n return { assets: assets.map(asset => ({ data: Buffer.from(JSON.stringify(asset)) })) };\n },\n\n async deleteCustomAsset(req) {\n return stateManager.executeTransaction('external', async () => {\n const { assetId } = req;\n const paths = await getFilesInDirectory(fs, `${DIRECTORY.CUSTOM}`, [], true);\n const folders = [...new Set(paths.map(path => path.split('/')[1]))];\n\n const undoAcc: FileOperation[] = [];\n\n for (const folder of folders) {\n const dataPath = `${DIRECTORY.CUSTOM}/${folder}/data.json`;\n\n if (await fs.existFile(dataPath)) {\n try {\n const data = await fs.readFile(dataPath);\n const parsedData = JSON.parse(new TextDecoder().decode(data));\n\n if (parsedData.id === assetId) {\n const folderPath = `${DIRECTORY.CUSTOM}/${folder}`;\n const files = await getFilesInDirectory(fs, folderPath, [], true);\n\n for (const file of files) {\n const content = await fs.readFile(file);\n undoAcc.push({\n prevValue: content,\n newValue: null,\n path: file,\n });\n await fs.rm(file);\n }\n\n undoRedoProvider.addUndoFile(undoAcc);\n return {};\n }\n } catch (err) {\n continue;\n }\n }\n }\n\n throw new Error(`Custom asset with id ${assetId} not found`);\n });\n },\n\n async renameCustomAsset(req: { assetId: string; newName: string }) {\n return stateManager.executeTransaction('external', async () => {\n const { assetId, newName } = req;\n const paths = await getFilesInDirectory(fs, `${DIRECTORY.CUSTOM}`, [], true);\n const folders = [...new Set(paths.map(path => path.split('/')[1]))];\n\n const undoAcc: FileOperation[] = [];\n\n for (const folder of folders) {\n const dataPath = `${DIRECTORY.CUSTOM}/${folder}/data.json`;\n\n if (await fs.existFile(dataPath)) {\n try {\n const data = await fs.readFile(dataPath);\n const parsedData = JSON.parse(new TextDecoder().decode(data));\n\n if (parsedData.id === assetId) {\n const updatedData = { ...parsedData, name: newName };\n const newContent = Buffer.from(JSON.stringify(updatedData, null, 2));\n\n undoAcc.push({\n prevValue: data,\n newValue: newContent,\n path: dataPath,\n });\n\n await fs.writeFile(dataPath, newContent);\n undoRedoProvider.addUndoFile(undoAcc);\n return {};\n }\n } catch (err) {\n continue;\n }\n }\n }\n\n throw new Error(`Custom asset with id ${assetId} not found`);\n });\n },\n };\n}\n", "import type { IEngine, OnChangeFunction } from '@dcl/ecs';\nimport type { DataLayerRpcServer, FileSystemInterface } from '../types';\nimport { initRpcMethods } from './rpc-methods';\nimport { createEngineContext } from './utils/engine';\n\nexport * from './utils/engine';\nexport * from './utils/engine-to-composite';\n\nexport type DataLayerHost = {\n rpcMethods: DataLayerRpcServer;\n engine: IEngine;\n};\n\n/**\n * This RpcClient creates internally the server, implementing its own file system interface and engine.\n * @param fs\n * @returns\n */\n\nexport async function createDataLayerHost(fs: FileSystemInterface): Promise<DataLayerHost> {\n const callbackFunctions: OnChangeFunction[] = [];\n function addEngineListener(func: OnChangeFunction) {\n callbackFunctions.push(func);\n }\n const { engine } = createEngineContext({\n onChangeFunction: (entity, operation, component, componentValue) => {\n callbackFunctions.forEach(func => func(entity, operation, component, componentValue));\n },\n });\n Object.assign(globalThis, { dataLayerEngine: engine });\n\n const rpcMethods = await initRpcMethods(fs, engine, addEngineListener);\n\n return {\n rpcMethods,\n engine,\n };\n}\n", "import type { Transport } from '@dcl/mini-rpc';\nimport { RPC } from '@dcl/mini-rpc';\nimport { name, type Method, type Params, type Result } from './types';\n\nexport class CameraClient extends RPC<Method, Params, Result> {\n constructor(transport: Transport) {\n super(name, transport);\n }\n\n takeScreenshot = (width: number, height: number, precision?: number) => {\n return this.request('take_screenshot', { width, height, precision });\n };\n\n setTarget = (x: number, y: number, z: number) => {\n return this.request('set_target', { x, y, z });\n };\n\n setPosition = (x: number, y: number, z: number) => {\n return this.request('set_position', { x, y, z });\n };\n}\n", "export const name = 'CameraRPC';\n\nexport enum Method {\n TAKE_SCREENSHOT = 'take_screenshot',\n SET_TARGET = 'set_target',\n SET_POSITION = 'set_position',\n}\n\nexport type Params = {\n [Method.TAKE_SCREENSHOT]: { width: number; height: number; precision?: number };\n [Method.SET_TARGET]: { x: number; y: number; z: number };\n [Method.SET_POSITION]: { x: number; y: number; z: number };\n};\n\nexport type Result = {\n [Method.TAKE_SCREENSHOT]: string;\n [Method.SET_TARGET]: void;\n [Method.SET_POSITION]: void;\n};\n", "import type { Transport } from '@dcl/mini-rpc';\nimport { RPC } from '@dcl/mini-rpc';\nimport type { AssetsTab, PanelName, SceneInspectorTab } from '../../../redux/ui/types';\nimport { name, type Method, type Params, type Result } from './types';\n\nexport class UiClient extends RPC<Method, Params, Result> {\n constructor(transport: Transport) {\n super(name, transport);\n }\n\n toggleComponent = (component: string, enabled: boolean) => {\n return this.request('toggle_component', { component, enabled });\n };\n\n togglePanel = (panel: `${PanelName}`, enabled: boolean) => {\n return this.request('toggle_panel', { panel, enabled });\n };\n\n toggleGizmos = (enabled: boolean) => {\n return this.request('toggle_gizmos', { enabled });\n };\n\n toggleGroundGrid = (enabled: boolean) => {\n return this.request('toggle_ground_grid', { enabled });\n };\n\n selectAssetsTab = (tab: `${AssetsTab}`) => {\n return this.request('select_assets_tab', { tab });\n };\n\n selectSceneInspectorTab = (tab: `${SceneInspectorTab}`) => {\n return this.request('select_scene_inspector_tab', { tab });\n };\n\n toggleSceneInspectorTab = (tab: `${SceneInspectorTab}`, enabled: boolean) => {\n return this.request('toggle_scene_inspector_tab', { tab, enabled });\n };\n}\n", "import type { AssetsTab, PanelName, SceneInspectorTab } from '../../../redux/ui/types';\n\nexport const name = 'UiRPC';\n\nexport enum Method {\n TOGGLE_COMPONENT = 'toggle_component',\n TOGGLE_PANEL = 'toggle_panel',\n TOGGLE_GIZMOS = 'toggle_gizmos',\n SELECT_ASSETS_TAB = 'select_assets_tab',\n SELECT_SCENE_INSPECTOR_TAB = 'select_scene_inspector_tab',\n TOGGLE_SCENE_INSPECTOR_TAB = 'toggle_scene_inspector_tab',\n TOGGLE_GROUND_GRID = 'toggle_ground_grid',\n}\n\nexport type Params = {\n [Method.TOGGLE_COMPONENT]: { component: string; enabled: boolean };\n [Method.TOGGLE_PANEL]: { panel: `${PanelName}`; enabled: boolean };\n [Method.TOGGLE_GIZMOS]: { enabled: boolean };\n [Method.SELECT_ASSETS_TAB]: { tab: `${AssetsTab}` };\n [Method.SELECT_SCENE_INSPECTOR_TAB]: { tab: `${SceneInspectorTab}` };\n [Method.TOGGLE_SCENE_INSPECTOR_TAB]: { tab: `${SceneInspectorTab}`; enabled: boolean };\n [Method.TOGGLE_GROUND_GRID]: { enabled: boolean };\n};\n\nexport type Result = {\n [Method.TOGGLE_COMPONENT]: void;\n [Method.TOGGLE_PANEL]: void;\n [Method.TOGGLE_GIZMOS]: void;\n [Method.SELECT_ASSETS_TAB]: void;\n [Method.SELECT_SCENE_INSPECTOR_TAB]: void;\n [Method.TOGGLE_SCENE_INSPECTOR_TAB]: void;\n [Method.TOGGLE_GROUND_GRID]: void;\n};\n", "import type { Transport } from '@dcl/mini-rpc';\nimport { RPC, MessageTransport } from '@dcl/mini-rpc';\nimport type { Storage } from './types';\n\nexport enum Method {\n READ_FILE = 'read_file',\n WRITE_FILE = 'write_file',\n EXISTS = 'exists',\n DELETE = 'delete',\n LIST = 'list',\n}\n\nexport type Params = {\n [Method.READ_FILE]: { path: string };\n [Method.WRITE_FILE]: { path: string; content: Buffer };\n [Method.DELETE]: { path: string };\n [Method.EXISTS]: { path: string };\n [Method.LIST]: { path: string };\n};\n\nexport type Result = {\n [Method.READ_FILE]: Buffer;\n [Method.WRITE_FILE]: void;\n [Method.DELETE]: void;\n [Method.EXISTS]: boolean;\n [Method.LIST]: { name: string; isDirectory: boolean }[];\n};\n\nexport const id = 'IframeStorage';\n\nexport class Client extends RPC<Method, Params, Result> {\n constructor(transport: Transport) {\n super(id, transport);\n }\n\n readFile(path: string) {\n return this.request('read_file', { path });\n }\n\n writeFile(path: string, content: Buffer) {\n return this.request('write_file', { path, content });\n }\n\n exists(path: string) {\n return this.request('exists', { path });\n }\n\n delete(path: string) {\n return this.request('delete', { path });\n }\n\n list(path: string) {\n return this.request('list', { path });\n }\n}\n\nexport class Server extends RPC<Method, Params, Result> {\n constructor(transport: Transport) {\n super(id, transport);\n }\n}\n\nexport function createIframeStorage(origin: string): Storage {\n if (!window.parent) {\n throw new Error('To use this storage the webapp needs to be inside an iframe');\n }\n\n const transport = new MessageTransport(window, window.parent, origin);\n const client = new Client(transport);\n\n return client;\n}\n", "import type { Transport } from '@dcl/mini-rpc';\nimport { RPC } from '@dcl/mini-rpc';\nimport { name, Method, type Params, type Result } from './types';\n\nexport class SceneMetricsClient extends RPC<Method, Params, Result> {\n constructor(transport: Transport) {\n super(name, transport);\n }\n\n getMetrics = () => {\n return this.request(Method.GET_METRICS, undefined);\n };\n\n getLimits = () => {\n return this.request(Method.GET_LIMITS, undefined);\n };\n\n getEntitiesOutOfBoundaries = () => {\n return this.request(Method.GET_ENTITIES_OUT_OF_BOUNDARIES, undefined);\n };\n}\n", "import type { SceneMetrics } from '../../../redux/scene-metrics/types';\n\nexport const name = 'SceneMetricsRPC';\n\nexport enum Method {\n GET_METRICS = 'get_metrics',\n GET_LIMITS = 'get_limits',\n GET_ENTITIES_OUT_OF_BOUNDARIES = 'get_entities_out_of_boundaries',\n}\n\nexport type Params = {\n [Method.GET_METRICS]: undefined;\n [Method.GET_LIMITS]: undefined;\n [Method.GET_ENTITIES_OUT_OF_BOUNDARIES]: undefined;\n};\n\nexport type Result = {\n [Method.GET_METRICS]: SceneMetrics;\n [Method.GET_LIMITS]: SceneMetrics;\n [Method.GET_ENTITIES_OUT_OF_BOUNDARIES]: number[];\n};\n"],
5
5
  "mappings": "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",
6
6
  "names": ["mitt_1", "__importDefault", "Transport", "type", "message", "handler", "exports", "transport_1", "InMemoryTransport", "transport", "message", "exports", "transport_1", "MessageTransport", "source", "target", "origin", "event", "message", "exports", "in_memory_1", "exports", "message_1", "mitt_1", "__importDefault", "fp_future_1", "RPC", "_RPC", "id", "transport", "message", "event", "request", "handler", "result", "error", "response", "promise", "connection", "frame", "type", "payload", "value", "messageTypes", "data", "method", "params", "exports", "MessageType", "__exportStar", "exports", "tooling_entrypoint_exports", "__export", "Asset", "AssetCatalogResponse", "AssetData", "CameraClient", "Client", "CopyFileRequest", "CrdtStreamMessage", "CreateCustomAssetRequest", "CreateCustomAssetResponse", "DataServiceDefinition", "DeleteCustomAssetRequest", "Empty", "GetCustomAssetsResponse", "GetFileRequest", "GetFileResponse", "GetFilesRequest", "GetFilesResponse", "GetFilesResponse_File", "ImportAssetRequest", "ImportAssetRequest_ContentEntry", "InspectorPreferencesMessage", "Method", "RenameCustomAssetRequest", "SaveFileRequest", "SceneMetricsClient", "Server", "UiClient", "UndoRedoResponse", "UndoRedoStateResponse", "createDataLayerHost", "createEngineContext", "createIframeStorage", "createInMemoryStorage", "dumpEngineToComposite", "dumpEngineToCrdtCommands", "generateEntityNamesType", "id", "protobufPackage", "serializeEngine", "__toCommonJS", "import_minimal", "protobufPackage", "createBaseEmpty", "Empty", "encode", "_", "writer", "_m0", "decode", "input", "length", "reader", "end", "message", "tag", "fromJSON", "toJSON", "create", "base", "fromPartial", "createBaseUndoRedoResponse", "UndoRedoResponse", "object", "isSet", "obj", "createBaseCrdtStreamMessage", "CrdtStreamMessage", "bytesFromBase64", "base64FromBytes", "createBaseAssetData", "AssetData", "createBaseGetFilesRequest", "GetFilesRequest", "v", "e", "createBaseGetFilesResponse", "GetFilesResponse", "GetFilesResponse_File", "createBaseGetFilesResponse_File", "createBaseSaveFileRequest", "SaveFileRequest", "createBaseAsset", "Asset", "createBaseAssetCatalogResponse", "AssetCatalogResponse", "createBaseImportAssetRequest", "ImportAssetRequest", "value", "key", "ImportAssetRequest_ContentEntry", "entry3", "isObject", "acc", "k", "m", "createBaseImportAssetRequest_ContentEntry", "createBaseInspectorPreferencesMessage", "InspectorPreferencesMessage", "createBaseCopyFileRequest", "CopyFileRequest", "createBaseGetFileRequest", "GetFileRequest", "createBaseGetFileResponse", "GetFileResponse", "createBaseCreateCustomAssetRequest", "CreateCustomAssetRequest", "createBaseCreateCustomAssetResponse", "CreateCustomAssetResponse", "createBaseGetCustomAssetsResponse", "GetCustomAssetsResponse", "createBaseDeleteCustomAssetRequest", "DeleteCustomAssetRequest", "createBaseRenameCustomAssetRequest", "RenameCustomAssetRequest", "createBaseUndoRedoStateResponse", "UndoRedoStateResponse", "DataServiceDefinition", "tsProtoGlobalThis", "b64", "bin", "arr", "i", "byte", "import_jtd", "getDefaultInspectorPreferences", "shellSchema", "v1Schema", "ajv", "Ajv", "validateShell", "validateV1", "InvalidPreferences", "parseInspectorPreferences", "content", "jsonContent", "err", "getDefaultInspectorPreferences", "readPreferencesFromFile", "fs", "path", "fileContent", "error", "serializeInspectorPreferences", "value", "import_minimal", "createBasePBAnimator", "PBAnimator", "encode", "message", "writer", "_m0", "v", "PBAnimationState", "decode", "input", "length", "reader", "end", "tag", "createBasePBAnimationState", "AnimatorSchema", "value", "builder", "writer", "PBAnimator", "buffer", "reader", "import_minimal", "createBasePBAudioEvent", "PBAudioEvent", "encode", "message", "writer", "_m0", "decode", "input", "length", "reader", "end", "tag", "AudioEventSchema", "value", "builder", "writer", "PBAudioEvent", "buffer", "reader", "import_minimal", "createBasePBAudioSource", "PBAudioSource", "encode", "message", "writer", "_m0", "decode", "input", "length", "reader", "end", "tag", "AudioSourceSchema", "value", "builder", "writer", "PBAudioSource", "buffer", "reader", "import_minimal", "createBasePBAudioStream", "PBAudioStream", "encode", "message", "writer", "_m0", "decode", "input", "length", "reader", "end", "tag", "AudioStreamSchema", "value", "builder", "writer", "PBAudioStream", "buffer", "reader", "import_minimal", "AvatarAnchorPointType", "createBasePBAvatarAttach", "PBAvatarAttach", "encode", "message", "writer", "_m0", "decode", "input", "length", "reader", "end", "tag", "AvatarAttachSchema", "value", "builder", "writer", "PBAvatarAttach", "buffer", "reader", "import_minimal", "import_minimal", "createBaseColor3", "Color3", "encode", "message", "writer", "_m0", "decode", "input", "length", "reader", "end", "tag", "createBaseColor4", "Color4", "createBasePBAvatarBase", "PBAvatarBase", "encode", "message", "writer", "_m0", "Color3", "decode", "input", "length", "reader", "end", "tag", "AvatarBaseSchema", "value", "builder", "writer", "PBAvatarBase", "buffer", "reader", "import_minimal", "createBasePBAvatarEmoteCommand", "PBAvatarEmoteCommand", "encode", "message", "writer", "_m0", "decode", "input", "length", "reader", "end", "tag", "AvatarEmoteCommandSchema", "value", "builder", "writer", "PBAvatarEmoteCommand", "buffer", "reader", "import_minimal", "createBasePBAvatarEquippedData", "PBAvatarEquippedData", "encode", "message", "writer", "_m0", "v", "decode", "input", "length", "reader", "end", "tag", "AvatarEquippedDataSchema", "value", "builder", "writer", "PBAvatarEquippedData", "buffer", "reader", "import_minimal", "import_minimal", "createBasePosition", "Position", "encode", "message", "writer", "_m0", "decode", "input", "length", "reader", "end", "tag", "createBaseVector3", "Vector3", "createBaseVector2", "Vector2", "createBaseQuaternion", "Quaternion", "AvatarModifierType", "createBasePBAvatarModifierArea", "PBAvatarModifierArea", "encode", "message", "writer", "_m0", "Vector3", "v", "decode", "input", "length", "reader", "end", "tag", "end2", "AvatarModifierAreaSchema", "value", "builder", "writer", "PBAvatarModifierArea", "buffer", "reader", "import_long", "import_minimal", "createBasePBAvatarShape", "PBAvatarShape", "encode", "message", "writer", "_m0", "Color3", "v", "decode", "input", "length", "reader", "end", "tag", "longToNumber", "tsProtoGlobalThis", "long", "Long", "AvatarShapeSchema", "value", "builder", "writer", "PBAvatarShape", "buffer", "reader", "import_minimal", "BillboardMode", "createBasePBBillboard", "PBBillboard", "encode", "message", "writer", "_m0", "decode", "input", "length", "reader", "end", "tag", "BillboardSchema", "value", "builder", "writer", "PBBillboard", "buffer", "reader", "import_minimal", "createBasePBCameraMode", "PBCameraMode", "encode", "message", "writer", "_m0", "decode", "input", "length", "reader", "end", "tag", "CameraModeSchema", "value", "builder", "writer", "PBCameraMode", "buffer", "reader", "import_minimal", "createBasePBCameraModeArea", "PBCameraModeArea", "encode", "message", "writer", "_m0", "Vector3", "decode", "input", "length", "reader", "end", "tag", "CameraModeAreaSchema", "value", "builder", "writer", "PBCameraModeArea", "buffer", "reader", "import_minimal", "createBasePBEngineInfo", "PBEngineInfo", "encode", "message", "writer", "_m0", "decode", "input", "length", "reader", "end", "tag", "EngineInfoSchema", "value", "builder", "writer", "PBEngineInfo", "buffer", "reader", "import_minimal", "createBasePBGltfContainer", "PBGltfContainer", "encode", "message", "writer", "_m0", "decode", "input", "length", "reader", "end", "tag", "GltfContainerSchema", "value", "builder", "writer", "PBGltfContainer", "buffer", "reader", "import_minimal", "createBasePBGltfContainerLoadingState", "PBGltfContainerLoadingState", "encode", "message", "writer", "_m0", "decode", "input", "length", "reader", "end", "tag", "GltfContainerLoadingStateSchema", "value", "builder", "writer", "PBGltfContainerLoadingState", "buffer", "reader", "import_minimal", "import_minimal", "import_minimal", "TextureWrapMode", "TextureFilterMode", "createBaseTexture", "Texture", "encode", "message", "writer", "_m0", "Vector2", "decode", "input", "length", "reader", "end", "tag", "createBaseAvatarTexture", "AvatarTexture", "createBaseVideoTexture", "VideoTexture", "createBaseTextureUnion", "TextureUnion", "MaterialTransparencyMode", "createBasePBMaterial", "PBMaterial", "encode", "message", "writer", "_m0", "PBMaterial_UnlitMaterial", "PBMaterial_PbrMaterial", "decode", "input", "length", "reader", "end", "tag", "createBasePBMaterial_UnlitMaterial", "TextureUnion", "Color4", "createBasePBMaterial_PbrMaterial", "Color3", "createBasePBGltfNodeModifiers", "PBGltfNodeModifiers", "encode", "message", "writer", "_m0", "v", "PBGltfNodeModifiers_GltfNodeModifier", "decode", "input", "length", "reader", "end", "tag", "createBasePBGltfNodeModifiers_GltfNodeModifier", "PBMaterial", "GltfNodeModifiersSchema", "value", "builder", "writer", "PBGltfNodeModifiers", "buffer", "reader", "import_minimal", "createBasePBInputModifier", "PBInputModifier", "encode", "message", "writer", "_m0", "PBInputModifier_StandardInput", "decode", "input", "length", "reader", "end", "tag", "createBasePBInputModifier_StandardInput", "InputModifierSchema", "value", "builder", "writer", "PBInputModifier", "buffer", "reader", "import_minimal", "createBasePBLightSource", "PBLightSource", "encode", "message", "writer", "_m0", "Color3", "TextureUnion", "PBLightSource_Point", "PBLightSource_Spot", "decode", "input", "length", "reader", "end", "tag", "createBasePBLightSource_Point", "_", "createBasePBLightSource_Spot", "LightSourceSchema", "value", "builder", "writer", "PBLightSource", "buffer", "reader", "import_minimal", "createBasePBMainCamera", "PBMainCamera", "encode", "message", "writer", "_m0", "decode", "input", "length", "reader", "end", "tag", "MainCameraSchema", "value", "builder", "writer", "PBMainCamera", "buffer", "reader", "MaterialSchema", "value", "builder", "writer", "PBMaterial", "buffer", "reader", "import_minimal", "ColliderLayer", "createBasePBMeshCollider", "PBMeshCollider", "encode", "message", "writer", "_m0", "PBMeshCollider_BoxMesh", "PBMeshCollider_SphereMesh", "PBMeshCollider_CylinderMesh", "PBMeshCollider_PlaneMesh", "decode", "input", "length", "reader", "end", "tag", "createBasePBMeshCollider_BoxMesh", "_", "createBasePBMeshCollider_CylinderMesh", "createBasePBMeshCollider_PlaneMesh", "createBasePBMeshCollider_SphereMesh", "MeshColliderSchema", "value", "builder", "writer", "PBMeshCollider", "buffer", "reader", "import_minimal", "createBasePBMeshRenderer", "PBMeshRenderer", "encode", "message", "writer", "_m0", "PBMeshRenderer_BoxMesh", "PBMeshRenderer_SphereMesh", "PBMeshRenderer_CylinderMesh", "PBMeshRenderer_PlaneMesh", "decode", "input", "length", "reader", "end", "tag", "createBasePBMeshRenderer_BoxMesh", "v", "end2", "createBasePBMeshRenderer_CylinderMesh", "createBasePBMeshRenderer_PlaneMesh", "createBasePBMeshRenderer_SphereMesh", "_", "MeshRendererSchema", "value", "builder", "writer", "PBMeshRenderer", "buffer", "reader", "import_minimal", "NftFrameType", "createBasePBNftShape", "PBNftShape", "encode", "message", "writer", "_m0", "Color3", "decode", "input", "length", "reader", "end", "tag", "NftShapeSchema", "value", "builder", "writer", "PBNftShape", "buffer", "reader", "import_minimal", "createBasePBPlayerIdentityData", "PBPlayerIdentityData", "encode", "message", "writer", "_m0", "decode", "input", "length", "reader", "end", "tag", "PlayerIdentityDataSchema", "value", "builder", "writer", "PBPlayerIdentityData", "buffer", "reader", "import_minimal", "createBasePBPointerEvents", "PBPointerEvents", "encode", "message", "writer", "_m0", "v", "PBPointerEvents_Entry", "decode", "input", "length", "reader", "end", "tag", "createBasePBPointerEvents_Info", "PBPointerEvents_Info", "createBasePBPointerEvents_Entry", "PointerEventsSchema", "value", "builder", "writer", "PBPointerEvents", "buffer", "reader", "import_minimal", "import_minimal", "createBaseRaycastHit", "RaycastHit", "encode", "message", "writer", "_m0", "Vector3", "decode", "input", "length", "reader", "end", "tag", "createBasePBPointerEventsResult", "PBPointerEventsResult", "encode", "message", "writer", "_m0", "RaycastHit", "decode", "input", "length", "reader", "end", "tag", "PointerEventsResultSchema", "value", "builder", "writer", "PBPointerEventsResult", "buffer", "reader", "import_minimal", "createBasePBPointerLock", "PBPointerLock", "encode", "message", "writer", "_m0", "decode", "input", "length", "reader", "end", "tag", "PointerLockSchema", "value", "builder", "writer", "PBPointerLock", "buffer", "reader", "import_minimal", "PointerType", "createBasePBPrimaryPointerInfo", "PBPrimaryPointerInfo", "encode", "message", "writer", "_m0", "Vector2", "Vector3", "decode", "input", "length", "reader", "end", "tag", "PrimaryPointerInfoSchema", "value", "builder", "writer", "PBPrimaryPointerInfo", "buffer", "reader", "import_minimal", "RaycastQueryType", "createBasePBRaycast", "PBRaycast", "encode", "message", "writer", "_m0", "Vector3", "decode", "input", "length", "reader", "end", "tag", "RaycastSchema", "value", "builder", "writer", "PBRaycast", "buffer", "reader", "import_minimal", "createBasePBRaycastResult", "PBRaycastResult", "encode", "message", "writer", "_m0", "Vector3", "v", "RaycastHit", "decode", "input", "length", "reader", "end", "tag", "RaycastResultSchema", "value", "builder", "writer", "PBRaycastResult", "buffer", "reader", "import_minimal", "createBasePBRealmInfo", "PBRealmInfo", "encode", "message", "writer", "_m0", "decode", "input", "length", "reader", "end", "tag", "RealmInfoSchema", "value", "builder", "writer", "PBRealmInfo", "buffer", "reader", "import_minimal", "TransitionMode", "createBasePBSkyboxTime", "PBSkyboxTime", "encode", "message", "writer", "_m0", "decode", "input", "length", "reader", "end", "tag", "SkyboxTimeSchema", "value", "builder", "writer", "PBSkyboxTime", "buffer", "reader", "import_minimal", "createBasePBTextShape", "PBTextShape", "encode", "message", "writer", "_m0", "Color3", "Color4", "decode", "input", "length", "reader", "end", "tag", "TextShapeSchema", "value", "builder", "writer", "PBTextShape", "buffer", "reader", "import_minimal", "TriggerAreaMeshType", "createBasePBTriggerArea", "PBTriggerArea", "encode", "message", "writer", "_m0", "decode", "input", "length", "reader", "end", "tag", "TriggerAreaSchema", "value", "builder", "writer", "PBTriggerArea", "buffer", "reader", "import_minimal", "TriggerAreaEventType", "createBasePBTriggerAreaResult", "PBTriggerAreaResult", "encode", "message", "writer", "_m0", "Vector3", "Quaternion", "PBTriggerAreaResult_Trigger", "decode", "input", "length", "reader", "end", "tag", "createBasePBTriggerAreaResult_Trigger", "TriggerAreaResultSchema", "value", "builder", "writer", "PBTriggerAreaResult", "buffer", "reader", "import_minimal", "TextureMovementType", "EasingFunction", "createBasePBTween", "PBTween", "encode", "message", "writer", "_m0", "Move", "Rotate", "Scale", "TextureMove", "decode", "input", "length", "reader", "end", "tag", "createBaseMove", "Vector3", "createBaseRotate", "Quaternion", "createBaseScale", "createBaseTextureMove", "Vector2", "TweenSchema", "value", "builder", "writer", "PBTween", "buffer", "reader", "import_minimal", "TweenLoop", "createBasePBTweenSequence", "PBTweenSequence", "encode", "message", "writer", "_m0", "v", "PBTween", "decode", "input", "length", "reader", "end", "tag", "TweenSequenceSchema", "value", "builder", "writer", "PBTweenSequence", "buffer", "reader", "import_minimal", "TweenStateStatus", "createBasePBTweenState", "PBTweenState", "encode", "message", "writer", "_m0", "decode", "input", "length", "reader", "end", "tag", "TweenStateSchema", "value", "builder", "writer", "PBTweenState", "buffer", "reader", "import_minimal", "import_minimal", "createBaseBorderRect", "BorderRect", "encode", "message", "writer", "_m0", "decode", "input", "length", "reader", "end", "tag", "createBaseRect", "Rect", "BackgroundTextureMode", "createBasePBUiBackground", "PBUiBackground", "encode", "message", "writer", "_m0", "Color4", "TextureUnion", "BorderRect", "v", "decode", "input", "length", "reader", "end", "tag", "end2", "UiBackgroundSchema", "value", "builder", "writer", "PBUiBackground", "buffer", "reader", "import_minimal", "createBasePBUiCanvasInformation", "PBUiCanvasInformation", "encode", "message", "writer", "_m0", "BorderRect", "decode", "input", "length", "reader", "end", "tag", "UiCanvasInformationSchema", "value", "builder", "writer", "PBUiCanvasInformation", "buffer", "reader", "import_minimal", "createBasePBUiDropdown", "PBUiDropdown", "encode", "message", "writer", "_m0", "v", "Color4", "decode", "input", "length", "reader", "end", "tag", "UiDropdownSchema", "value", "builder", "writer", "PBUiDropdown", "buffer", "reader", "import_minimal", "createBasePBUiDropdownResult", "PBUiDropdownResult", "encode", "message", "writer", "_m0", "decode", "input", "length", "reader", "end", "tag", "UiDropdownResultSchema", "value", "builder", "writer", "PBUiDropdownResult", "buffer", "reader", "import_minimal", "createBasePBUiInput", "PBUiInput", "encode", "message", "writer", "_m0", "Color4", "decode", "input", "length", "reader", "end", "tag", "UiInputSchema", "value", "builder", "writer", "PBUiInput", "buffer", "reader", "import_minimal", "createBasePBUiInputResult", "PBUiInputResult", "encode", "message", "writer", "_m0", "decode", "input", "length", "reader", "end", "tag", "UiInputResultSchema", "value", "builder", "writer", "PBUiInputResult", "buffer", "reader", "import_minimal", "TextWrap", "createBasePBUiText", "PBUiText", "encode", "message", "writer", "_m0", "Color4", "decode", "input", "length", "reader", "end", "tag", "UiTextSchema", "value", "builder", "writer", "PBUiText", "buffer", "reader", "import_minimal", "YGPositionType", "YGAlign", "YGUnit", "YGFlexDirection", "YGWrap", "YGJustify", "YGOverflow", "YGDisplay", "YGEdge", "PointerFilterMode", "createBasePBUiTransform", "PBUiTransform", "encode", "message", "writer", "_m0", "Color4", "decode", "input", "length", "reader", "end", "tag", "UiTransformSchema", "value", "builder", "writer", "PBUiTransform", "buffer", "reader", "import_minimal", "VideoState", "createBasePBVideoEvent", "PBVideoEvent", "encode", "message", "writer", "_m0", "decode", "input", "length", "reader", "end", "tag", "VideoEventSchema", "value", "builder", "writer", "PBVideoEvent", "buffer", "reader", "import_minimal", "createBasePBVideoPlayer", "PBVideoPlayer", "encode", "message", "writer", "_m0", "decode", "input", "length", "reader", "end", "tag", "VideoPlayerSchema", "value", "builder", "writer", "PBVideoPlayer", "buffer", "reader", "import_minimal", "import_minimal", "createBaseCameraTransition", "CameraTransition", "encode", "message", "writer", "_m0", "decode", "input", "length", "reader", "end", "tag", "createBasePBVirtualCamera", "PBVirtualCamera", "encode", "message", "writer", "_m0", "CameraTransition", "decode", "input", "length", "reader", "end", "tag", "VirtualCameraSchema", "value", "builder", "writer", "PBVirtualCamera", "buffer", "reader", "import_minimal", "createBasePBVisibilityComponent", "PBVisibilityComponent", "encode", "message", "writer", "_m0", "decode", "input", "length", "reader", "end", "tag", "VisibilityComponentSchema", "value", "builder", "writer", "PBVisibilityComponent", "buffer", "reader", "Animator", "engine", "AnimatorSchema", "AudioEvent", "AudioEventSchema", "t", "AudioSource", "AudioSourceSchema", "AudioStream", "AudioStreamSchema", "AvatarAttach", "AvatarAttachSchema", "AvatarBase", "AvatarBaseSchema", "AvatarEmoteCommand", "AvatarEmoteCommandSchema", "AvatarEquippedData", "AvatarEquippedDataSchema", "AvatarModifierArea", "AvatarModifierAreaSchema", "AvatarShape", "AvatarShapeSchema", "Billboard", "BillboardSchema", "CameraMode", "CameraModeSchema", "CameraModeArea", "CameraModeAreaSchema", "EngineInfo", "EngineInfoSchema", "GltfContainer", "GltfContainerSchema", "GltfContainerLoadingState", "GltfContainerLoadingStateSchema", "GltfNodeModifiers", "GltfNodeModifiersSchema", "InputModifier", "InputModifierSchema", "LightSource", "LightSourceSchema", "MainCamera", "MainCameraSchema", "Material", "MaterialSchema", "MeshCollider", "MeshColliderSchema", "MeshRenderer", "MeshRendererSchema", "NftShape", "NftShapeSchema", "PlayerIdentityData", "PlayerIdentityDataSchema", "PointerEvents", "PointerEventsSchema", "PointerEventsResult", "PointerEventsResultSchema", "PointerLock", "PointerLockSchema", "PrimaryPointerInfo", "PrimaryPointerInfoSchema", "Raycast", "RaycastSchema", "RaycastResult", "RaycastResultSchema", "RealmInfo", "RealmInfoSchema", "SkyboxTime", "SkyboxTimeSchema", "TextShape", "TextShapeSchema", "TriggerArea", "TriggerAreaSchema", "TriggerAreaResult", "TriggerAreaResultSchema", "Tween", "TweenSchema", "TweenSequence", "TweenSequenceSchema", "TweenState", "TweenStateSchema", "UiBackground", "UiBackgroundSchema", "UiCanvasInformation", "UiCanvasInformationSchema", "UiDropdown", "UiDropdownSchema", "UiDropdownResult", "UiDropdownResultSchema", "UiInput", "UiInputSchema", "UiInputResult", "UiInputResultSchema", "UiText", "UiTextSchema", "UiTransform", "UiTransformSchema", "VideoEvent", "VideoEventSchema", "VideoPlayer", "VideoPlayerSchema", "VirtualCamera", "VirtualCameraSchema", "VisibilityComponent", "VisibilityComponentSchema", "componentDefinitionByName", "defineAnimatorComponent", "engine", "theComponent", "Animator", "getClipAndAnimator", "entity", "clipName", "anim", "state", "item", "_", "animator", "shouldReset", "resetCursor", "defineAudioSourceComponent", "engine", "theComponent", "AudioSource", "entity", "src", "resetCursor", "audioSource", "TextureHelper", "texture", "avatarTexture", "videoTexture", "defineMaterialComponent", "engine", "theComponent", "Material", "entity", "material", "defineMeshColliderComponent", "engine", "theComponent", "MeshCollider", "getCollisionMask", "layers", "item", "prev", "entity", "colliderLayers", "radiusBottom", "radiusTop", "defineMeshRendererComponent", "engine", "theComponent", "MeshRenderer", "entity", "uvs", "radiusBottom", "radiusTop", "TweenHelper", "move", "rotate", "scale", "textureMove", "defineTweenComponent", "engine", "Tween", "IArray", "type", "value", "builder", "item", "reader", "newArray", "length", "index", "Bool", "value", "builder", "reader", "Int64", "value", "builder", "reader", "Int32", "Int16", "Int8", "FlatString", "value", "builder", "reader", "EcsString", "validateMemberValuesAreNumbersAndInRangeInt32", "enumValue", "valueCount", "totalCount", "key", "validateMemberValuesAreStrings", "IntEnumReflectionType", "IntEnum", "enumObject", "defaultValue", "value", "builder", "Int32", "reader", "item", "StringEnumReflectionType", "StringEnum", "FlatString", "Float32", "value", "builder", "reader", "Float64", "Color3Schema", "value", "builder", "reader", "Color4Schema", "value", "builder", "reader", "EntitySchema", "value", "builder", "reader", "QuaternionSchema", "value", "builder", "reader", "Vector3Schema", "value", "builder", "reader", "IMap", "spec", "defaultValue", "specReflection", "currentKey", "value", "builder", "key", "reader", "newValue", "base", "IOptional", "spec", "value", "builder", "reader", "IOneOf", "specs", "specKeys", "keyToIndex", "dict", "key", "index", "specReflection", "currentKey", "$case", "value", "builder", "_value", "reader", "isSchemaType", "value", "types", "isOneOfJsonSchema", "type", "getUnknownSchema", "isCompoundType", "getTypeAndValue", "properties", "key", "valueKey", "typedMapValue", "propType", "primitiveSchemas", "Bool", "EcsString", "Float32", "Float64", "Int8", "Int16", "Int32", "Int64", "Vector3Schema", "QuaternionSchema", "Color3Schema", "Color4Schema", "EntitySchema", "jsonSchemaToSchema", "jsonSchema", "mapJsonSchema", "spec", "key", "IMap", "IOptional", "IArray", "enumJsonSchema", "IntEnum", "StringEnum", "oneOfJsonSchema", "IOneOf", "mutateValues", "value", "mutateFn", "properties", "typedValue", "type", "mapValue", "getTypeAndValue", "isCompoundType", "newValue", "items", "arrayValue", "i", "n", "Schemas", "Bool", "EcsString", "Float32", "Float64", "Int8", "Int16", "Int32", "Int64", "Vector3Schema", "QuaternionSchema", "Color3Schema", "Color4Schema", "EntitySchema", "IntEnum", "StringEnum", "IArray", "IMap", "IOptional", "IOneOf", "jsonSchemaToSchema", "mutateValues", "defineNameComponent", "engine", "Schemas", "Name_default", "defineSyncComponents", "engine", "Schemas", "SyncComponents_default", "defineNetworkEntityComponent", "engine", "Schemas", "NetworkEntity_default", "defineNetworkParentComponent", "engine", "Schemas", "NetworkParent_default", "TransformSchema", "value", "builder", "ptr", "reader", "defineTransformComponent", "engine", "transformDef", "entity", "val", "defineAudioStreamComponent", "engine", "theComponent", "AudioStream", "AudioEvent", "entity", "MediaState", "LightSourceHelper", "point", "spot", "defineLightSourceComponent", "engine", "LightSource", "defineTagsComponent", "engine", "Tags", "Schemas", "entity", "tagName", "tagsComponent", "newTags", "tag", "Tags_default", "Transform", "engine", "defineTransformComponent", "Material", "defineMaterialComponent", "Animator", "defineAnimatorComponent", "AudioSource", "defineAudioSourceComponent", "AudioStream", "defineAudioStreamComponent", "MeshRenderer", "defineMeshRendererComponent", "MeshCollider", "defineMeshColliderComponent", "Tween", "defineTweenComponent", "LightSource", "engine", "defineLightSourceComponent", "Name", "engine", "Name_default", "Tags", "Tags_default", "SyncComponents", "SyncComponents_default", "NetworkEntity", "NetworkEntity_default", "NetworkParent", "NetworkParent_default", "coreComponentMappings", "utf8", "CRC_TABLE", "_crc32", "buf", "previous", "crc", "n", "unsignedCRC32", "data", "prev", "MAX_STATIC_COMPONENT", "componentNumberFromName", "componentName", "coreComponentMappings", "bytes", "unsignedCRC32", "__DEV__", "checkNotThenable", "t", "error", "createVersionGSet", "lastVersion", "number", "version", "currentValue", "n", "v", "MAX_U16", "MASK_UPPER_16_ON_32", "AMOUNT_VERSION_AVAILABLE", "MAX_ENTITY_NUMBER", "RESERVED_STATIC_ENTITIES", "EntityUtils", "fromEntityId", "entityId", "toEntityId", "entityNumber", "entityVersion", "EntityState", "createEntityContainer", "opts", "reservedStaticEntities", "entityCounter", "usedEntities", "toRemoveEntities", "removedEntities", "createVersionGSet", "generateNewEntity", "entity", "generateEntity", "number", "version", "removeEntity", "updateRemovedEntity", "releaseRemovedEntities", "arr", "n", "v", "i", "updateUsedEntity", "getEntityState", "removedVersion", "utf8", "__classPrivateFieldGet", "receiver", "state", "kind", "f", "_ReadWriteByteBuffer_instances", "_ReadWriteByteBuffer_woAdd", "_ReadWriteByteBuffer_roAdd", "getNextSize", "currentSize", "intendedSize", "minNewSize", "defaultInitialCapacity", "ReadWriteByteBuffer", "buffer", "readingOffset", "writingOffset", "amount", "length", "value", "writeLength", "o", "byteLength", "offset", "newsize", "newBuffer", "oldOffset", "CrdtMessageType", "CRDT_MESSAGE_HEADER_LENGTH", "ProcessMessageResultType", "CrdtMessageProtocol", "validate", "buf", "rem", "CRDT_MESSAGE_HEADER_LENGTH", "messageLength", "readHeader", "getHeader", "currentOffset", "consumeMessage", "header", "DeleteComponent", "write", "entity", "componentId", "timestamp", "buf", "messageLength", "CRDT_MESSAGE_HEADER_LENGTH", "startMessageOffset", "CrdtMessageType", "read", "header", "CrdtMessageProtocol", "AppendValueOperation", "write", "entity", "timestamp", "componentId", "data", "buf", "startMessageOffset", "CRDT_MESSAGE_HEADER_LENGTH", "messageLength", "CrdtMessageType", "newLocal", "read", "header", "CrdtMessageProtocol", "DeleteEntity", "write", "entity", "buf", "CRDT_MESSAGE_HEADER_LENGTH", "CrdtMessageType", "read", "header", "CrdtMessageProtocol", "PutComponentOperation", "write", "entity", "timestamp", "componentId", "data", "buf", "startMessageOffset", "CRDT_MESSAGE_HEADER_LENGTH", "messageLength", "CrdtMessageType", "newLocal", "read", "header", "CrdtMessageProtocol", "PutNetworkComponentOperation", "write", "entity", "timestamp", "componentId", "networkId", "data", "buf", "startMessageOffset", "CRDT_MESSAGE_HEADER_LENGTH", "messageLength", "CrdtMessageType", "dataLength", "read", "header", "CrdtMessageProtocol", "DeleteComponentNetwork", "write", "entity", "componentId", "timestamp", "networkId", "buf", "messageLength", "CRDT_MESSAGE_HEADER_LENGTH", "startMessageOffset", "CrdtMessageType", "read", "header", "CrdtMessageProtocol", "DeleteEntityNetwork", "write", "entity", "networkId", "buf", "CRDT_MESSAGE_HEADER_LENGTH", "CrdtMessageType", "read", "header", "CrdtMessageProtocol", "isNetworkMessage", "message", "CrdtMessageType", "networkMessageToLocal", "localEntityId", "buffer", "destinationBuffer", "offset", "PutComponentOperation", "DeleteComponent", "DeleteEntity", "localMessageToNetwork", "network", "PutNetworkComponentOperation", "DeleteComponentNetwork", "DeleteEntityNetwork", "ReadWriteByteBuffer", "fixTransformParent", "transformValue", "parent", "transform", "TransformSchema", "newTransform", "LIVEKIT_MAX_SIZE", "crdtSceneSystem", "engine", "onProcessEntityComponentChange", "transports", "NetworkEntity", "NetworkParent", "Transform", "receivedMessages", "broadcastMessages", "parseChunkMessage", "transportId", "chunkMessage", "buffer", "ReadWriteByteBuffer", "header", "CrdtMessageProtocol", "offset", "message", "CrdtMessageType", "DeleteComponent", "DeleteComponentNetwork", "PutComponentOperation", "PutNetworkComponentOperation", "DeleteEntity", "DeleteEntityNetwork", "AppendValueOperation", "getMessages", "value", "findNetworkId", "msg", "entityId", "network", "receiveMessages", "messagesToProcess", "entitiesShouldBeCleaned", "isNetworkMessage", "entityState", "EntityState", "component", "fixTransformParent", "conflictMessage", "entity", "definition", "sendMessages", "entitiesDeletedThisTick", "crdtMessages", "t", "rawValue", "transportBuffer", "index", "__NetworkMessagesBuffer", "transportIndex", "transport", "isRendererTransport", "isNetworkTransport", "currentBufferSize", "messageSize", "transformNeedsFix", "parent", "transformData", "networkMessageToLocal", "networkData", "localMessageToNetwork", "addTransport", "id", "CrdtUtils", "SynchronizedEntityType", "dataCompare", "a", "b", "lengthDifference", "res", "deepReadonly", "val", "incrementTimestamp", "entity", "timestamps", "newTimestamp", "createDumpLwwFunctionFromCrdt", "componentId", "schema", "data", "buffer", "filterEntity", "timestamp", "it", "buf", "ReadWriteByteBuffer", "PutComponentOperation", "DeleteComponent", "createUpdateLwwFromCrdt", "crdtRuleForCurrentState", "message", "entityId", "currentTimestamp", "ProcessMessageResultType", "CrdtMessageType", "currentDataGreater", "writeBuffer", "dataCompare", "msg", "action", "createGetCrdtMessagesForLww", "dirtyIterator", "createComponentDefinitionFromSchema", "componentName", "onChangeCallbacks", "markAsDirty", "component", "deepReadonly", "value", "usedValue", "cb", "cbs", "SystemContainer", "systems", "sort", "a", "b", "add", "fn", "priority", "name", "systemName", "item", "remove", "selector", "index", "emptyReadonlySet", "freezeSet", "frozenError", "set", "sortByTimestamp", "a", "b", "createValueSetComponentDefinitionFromSchema", "componentName", "componentId", "schema", "options", "data", "dirtyIterator", "queuedCommands", "onChangeCallbacks", "shouldSort", "row", "len", "gotUpdated", "entity", "frozenSet", "$", "append", "value", "usedValue", "timestamp", "__DEV__", "values", "rawValue", "buf", "ReadWriteByteBuffer", "CrdtMessageType", "component", "_body", "buffer", "filterEntity", "raw", "it", "AppendValueOperation", "cb", "cbs", "genEntityTree", "entity", "entities", "_entity", "value", "getComponentEntityTree", "engine", "component", "removeNetworkEntityChildrens", "parent", "NetworkParent", "NetworkEntity", "network", "removeEntityWithChildren", "Transform", "ent", "InputStateUpdateSystemPriority", "ComponentType", "preEngine", "options", "entityContainer", "createEntityContainer", "componentsDefinition", "systems", "SystemContainer", "sealed", "addSystem", "fn", "priority", "name", "removeSystem", "selector", "addEntity", "removeEntity", "entity", "component", "removeEntityWithChildren", "defineComponentFromSchema", "getEntitiesWith", "defineComponent", "registerComponentDefinition", "componentName", "componentId", "componentNumberFromName", "schema", "prev", "newComponent", "createComponentDefinitionFromSchema", "defineValueSetComponentFromSchema", "createValueSetComponentDefinitionFromSchema", "mapSpec", "constructorDefault", "schemaSpec", "Schemas", "def", "val", "getComponent", "componentIdOrName", "getComponentOrNull", "components", "groupComp", "getComponentDefGroup", "c", "getEntityOrNullByName", "value", "NameComponent", "Name", "getEntityByName", "getEntitiesByTag", "tagName", "TagComponent", "Tags", "tag", "args", "firstComponentDef", "componentDefinitions", "matches", "componentDef", "getSystems", "componentsIter", "removeComponentDefinition", "Transform", "seal", "Engine", "partialEngine", "crdtSystem", "crdtSceneSystem", "operation", "componentValue", "CrdtMessageType", "update", "dt", "system", "ret", "checkNotThenable", "deletedEntites", "cacheTween", "createTweenSystem", "engine", "Tween", "TweenState", "TweenSequence", "cache", "isCompleted", "entity", "tweenState", "tween", "tweenCache", "tweenChanged", "currentTween", "prevTween", "currentBuff", "ReadWriteByteBuffer", "dataCompare", "restartTweens", "restart", "buffer", "tweenSequence", "sequence", "nextTweenSequence", "otherTweens", "mutableTweenHelper", "backwardsTween", "tweenSystem", "pointerEventColliderChecker", "engine", "PointerEvents", "MeshCollider", "GltfContainer", "UiTransform", "alreadyShownlog", "timer", "systemChecker", "dt", "entity", "mesh", "engine", "Engine", "tweenSystem", "createTweenSystem", "engine", "pointerEventColliderChecker", "engine", "CameraType", "InputAction", "PointerEventType", "LoadingState", "TextAlignMode", "Font", "getCompositeRootComponent", "engine", "component", "Schemas", "currentWorkingDir", "normalizeStringPosix", "path", "allowAboveRoot", "res", "lastSegmentLength", "lastSlash", "dots", "code", "i", "lastSlashIndex", "resolve", "args", "resolvedPath", "resolvedAbsolute", "cwd", "dirname", "hasRoot", "end", "matchedSlash", "resolveComposite", "EntityMappingMode", "getComponentValue", "componentDefinition", "component", "ReadWriteByteBuffer", "getComponentDefinition", "engine", "existingComponentDefinition", "componentDefinitionByName", "Schemas", "getEntityMapping", "compositeEntity", "mappedEntities", "entityMapping", "existingEntity", "entity", "newEntity", "instanceComposite", "compositeResource", "compositeProvider", "options", "rootEntity", "optionalAlreadyRequestedSrc", "alreadyRequestedSrc", "compositeDirectoryPath", "dirname", "resolve", "TransformComponentNumber", "componentNumberFromName", "CompositeRootComponent", "getCompositeRootComponent", "getCompositeEntity", "compositeRootEntity", "childrenComposite", "item", "childCompositeEntity", "compositeRawData", "childComposite", "childCompositePath", "resolveComposite", "childCompositeResource", "targetEntity", "compositeComponentValue", "componentValueDeserialized", "componentValue", "transform", "value", "valueType", "composite", "entitySource", "import_minimal", "import_minimal", "NullValue", "nullValueFromJSON", "object", "tsProtoGlobalThis", "nullValueToJSON", "createBaseStruct", "Struct", "encode", "message", "writer", "_m0", "value", "key", "Struct_FieldsEntry", "decode", "input", "length", "reader", "end", "tag", "entry1", "fromJSON", "isObject", "acc", "toJSON", "obj", "v", "k", "wrap", "struct", "unwrap", "createBaseStruct_FieldsEntry", "Value", "isSet", "createBaseValue", "ListValue", "result", "createBaseListValue", "e", "array", "createBaseComponentData", "ComponentData", "encode", "message", "writer", "_m0", "Value", "decode", "input", "length", "reader", "end", "tag", "fromJSON", "object", "isSet", "bytesFromBase64", "toJSON", "obj", "base64FromBytes", "createBaseCompositeComponent", "CompositeComponent", "value", "key", "CompositeComponent_DataEntry", "entry3", "isObject", "acc", "v", "k", "createBaseCompositeComponent_DataEntry", "createBaseCompositeDefinition", "CompositeDefinition", "e", "tsProtoGlobalThis", "b64", "bin", "arr", "i", "byte", "Composite", "fromJson", "object", "CompositeDefinition", "fromBinary", "buffer", "toJson", "composite", "toBinary", "instance", "engine", "compositeData", "compositeProvider", "options", "instanceComposite", "resolveAndNormalizePath", "src", "cwd", "resolveComposite", "Transform", "engine", "Name", "engine", "Tags", "addActionType", "engine", "type", "schema", "actionTypes", "getComponent", "ComponentName", "actionType", "Schemas", "$", "ComponentName", "TweenType", "InterpolationType", "ActionType", "TriggerType", "TriggerConditionType", "TriggerConditionOperation", "AlignMode", "Font", "Colliders", "ProximityLayer", "AdminPermissions", "MediaSource", "getExplorerComponents", "engine", "Animator", "Transform", "AudioSource", "AvatarAttach", "VisibilityComponent", "GltfContainer", "UiTransform", "UiText", "UiBackground", "UiInput", "UiInputResult", "UiCanvasInformation", "VideoPlayer", "Material", "MeshRenderer", "Billboard", "Name", "Tween", "TweenSequence", "PointerEvents", "NetworkEntity", "SyncComponents", "import_mitt", "COMPONENTS_WITH_ID", "ComponentName", "ActionSchemas", "ActionType", "Schemas", "TweenType", "InterpolationType", "Colliders", "Font", "AlignMode", "ProximityLayer", "getComponent", "componentName", "engine", "error", "createComponents", "engine", "ActionTypes", "ComponentName", "Schemas", "Actions", "Counter", "Triggers", "TriggerType", "TriggerConditionType", "TriggerConditionOperation", "States", "CounterBar", "VideoScreen", "MediaSource", "AdminTools", "AdminPermissions", "Rewards", "TextAnnouncements", "VideoControlState", "initComponents", "actionTypes", "ActionType", "type", "actionType", "addActionType", "ActionSchemas", "counter", "VideoPlayer", "Material", "getExplorerComponents", "initVideoPlayerComponents", "getVideoTexture", "material", "initVideoPlayerComponentMaterial", "entity", "components", "replaceVideoTexture", "SceneAgeRating", "SceneCategory", "Coords", "Schemas", "TransitionMode", "SceneMetadataV0", "SceneMetadataV1", "SceneMetadata", "VERSIONS", "getLatestSceneComponentVersion", "defineSceneComponents", "engine", "key", "value", "removeOldSceneVersions", "currentSceneVersion", "CoreComponents", "EditorComponentNames", "getLatestSceneComponentVersion", "ComponentName", "AllComponents", "getFilesInDirectory", "fs", "dirPath", "files", "recursive", "ignore", "currentDirFiles", "currentPath", "slashIfRequire", "fullPath", "DIRECTORY", "EXTENSIONS", "withAssetDir", "filePath", "isFileInAssetDir", "filePath", "DIRECTORY", "getCurrentCompositePath", "withAssetDir", "upsertAsset", "fs", "path", "content", "upsert_asset_default", "import_node_fetch", "version", "CONTENT_URL", "version", "CATALYST_BASE_URL", "getConfig", "config", "params", "installBin", "fs", "config", "getConfig", "bin", "fetch", "resp", "TransformOnError", "ConfigComponentSchema", "Schemas", "AllComponents", "EditorComponentNames", "getLatestSceneComponentVersion", "createComponents", "engine", "Animator", "AudioSource", "AudioStream", "AvatarAttach", "Billboard", "GltfContainer", "Material", "MeshCollider", "MeshRenderer", "Name", "NetworkEntity", "NftShape", "PointerEvents", "SyncComponents", "TextShape", "Transform", "Tween", "TweenSequence", "VideoPlayer", "VisibilityComponent", "Tags", "LightSource", "GltfNodeModifiers", "createEditorComponents", "Selection", "Schemas", "Coords", "Scene", "defineSceneComponents", "Nodes", "ActionTypes", "Actions", "Counter", "Triggers", "States", "CounterBar", "AdminTools", "Rewards", "VideoScreen", "TransformConfig", "Hide", "Lock", "Config", "ConfigComponentSchema", "Ground", "Tile", "CustomAsset", "StateManagerError", "message", "context", "originalError", "ErrorHandler", "parts", "error", "contextStr", "fullMessage", "StateManager", "options", "provider", "name", "entity", "operation", "component", "componentValue", "opType", "baseOp", "op", "EditorComponentNames", "CrdtMessageType", "timeoutId", "transaction", "error", "providers", "handledOperations", "ErrorHandler", "source", "operations", "wasProcessing", "timeout", "import_ts_deepmerge", "findPrevValue", "composite", "componentName", "entity", "value", "c", "parseCoords", "coords", "x", "y", "fromSceneComponent", "tags", "category", "tag", "sanitizedTag", "config", "getConfig", "scene", "$", "spawnPoint", "toSceneComponent", "categories", "SceneCategory", "index", "SceneProvider", "_SceneProvider", "fs", "initialScene", "scene", "buffer", "e", "operation", "CrdtMessageType", "EditorComponentNames", "transaction", "partialScene", "fromSceneComponent", "error", "pendingUpdate", "merged", "componentToCompositeComponentData", "$case", "value", "_component", "byteBuffer", "ReadWriteByteBuffer", "dumpEngineToComposite", "engine", "internalDataType", "ignoreEntities", "composite", "CompositeRoot", "getCompositeRootComponent", "childrenComposite", "compositeComponent", "compositeRootEntity", "compositeRootValue", "item", "componentData", "ignoreComponentNames", "itComponentDefinition", "ComponentType", "itCompositeComponent", "entity", "dumpEngineToCrdtCommands", "componentBuffer", "crdtBuffer", "PutComponentOperation", "setDifference", "set", "other", "x", "__ENTITY_NAMES_CACHE", "generateEntityNamesType", "outputPath", "typeName", "fs", "NameComponent", "Name", "names", "_", "nameValue", "namesSet", "uniqueNames", "validNameMap", "finalNames", "name", "validName", "suffix", "fileContent", "original", "valid", "e", "serializeEngine", "engine", "messages", "ReadWriteByteBuffer", "component", "createEngineContext", "opts", "Engine", "components", "createComponents", "createEditorComponents", "createInMemoryStorage", "initialFs", "storage", "id", "content", "path", "files", "_path", "fileName", "slashPosition", "directoryName", "item", "createTempEngineContext", "engine", "components", "createEngineContext", "defineMaterialComponent", "PointerEvents", "generateMinimalComposite", "composite", "dumpEngineToComposite", "Composite", "getMinimalComposite", "generateMinimalComposite", "createTempEngineContext", "cleanPush", "list", "value", "buildNodesHierarchy", "engine", "hierarchy", "component", "entity", "parent", "Transform", "children", "cleanPush", "root", "buildNodesHierarchyIfNotExists", "Nodes", "EditorComponentNames", "hierarchySystem", "removeLegacyEntityNodeComponents", "engine", "legacyEntityNode", "LegacyEntityNodeComponent", "entity", "entityNodeValue", "NameComponent", "Name", "TransformComponent", "Transform", "createFsCompositeProvider", "fs", "dirPath", "compositePromises", "getFilesInDirectory", "item", "itemPath", "compositeContent", "composite", "Composite", "json", "err", "composites", "src", "_currentPath", "normalizePath", "val", "type", "compositeDefinition", "bytes", "text", "existingComposite", "addNodesComponentsToPlayerAndCamera", "engine", "addNodes", "Nodes", "EditorComponentNames", "newNodes", "shouldUpdate", "node", "INSPECTOR_ENUM_ENTITY_ID_START", "fixNetworkEntityValues", "engine", "NetworkEntity", "needsFixing", "usedEntities", "_", "value", "lastEntityId", "INSPECTOR_ENUM_ENTITY_ID_START", "entity", "selectSceneEntity", "engine", "Selection", "EditorComponentNames", "system", "entity", "getCompositeLatestSceneComponent", "engine", "component", "i", "VERSIONS", "name", "Scene", "scene", "migrateSceneMetadata", "latestComponent", "value", "latestComponentVersion", "getLatestSceneComponentVersion", "removeOldSceneVersions", "createTagsComponent", "engine", "DEFAULT_TAGS", "Tags", "CompositeProvider", "_CompositeProvider", "fs", "engine", "getInspectorPreferences", "compositePath", "provider", "minimal", "getMinimalComposite", "buffer", "createFsCompositeProvider", "loadedCompositeResource", "Composite", "EntityMappingMode", "entity", "removeLegacyEntityNodeComponents", "buildNodesHierarchyIfNotExists", "addNodesComponentsToPlayerAndCamera", "fixNetworkEntityValues", "selectSceneEntity", "migrateSceneMetadata", "createTagsComponent", "initComponents", "SceneMetadata", "EditorComponentNames", "sceneJsonBuffer", "sceneJson", "toSceneComponent", "operation", "CrdtMessageType", "transaction", "shouldAutosave", "now", "dump", "dumpEngineToComposite", "mainCrdt", "dumpEngineToCrdtCommands", "generateEntityNamesType", "withAssetDir", "DIRECTORY", "error", "UndoRedoArray", "maxEntries", "maxSize", "valueList", "memorySize", "valueSize", "val", "fileSize", "operation", "value", "valToRemove", "currentSize", "index", "size", "isNil", "val", "getUndoValue", "getRedoValue", "UndoRedoProvider", "_UndoRedoProvider", "fs", "engine", "getComposite", "options", "UndoRedoArray", "stored", "data", "loadedUndo", "loadedRedo", "serialized", "operation", "error", "ErrorHandler", "undoOperations", "redoOperations", "op", "value", "parsed", "binaryString", "bytes", "transaction", "CrdtMessageType", "composite", "prevValue", "findPrevValue", "crdtOperation", "operations", "getValue", "valueToExecute", "message", "failedOperations", "successfulOperations", "component", "filePath", "isFileInAssetDir", "withAssetDir", "upsert_asset_default", "totalOps", "failedCount", "successCount", "fileOperations", "crdtOperations", "msg", "currentSize", "operationsStored", "enabled", "wasEnabled", "import_pushable_channel", "consumeAllMessagesInto", "iter", "cb", "it", "createStream", "stream", "ctx", "queue", "_", "engineSerialized", "serializeEngine", "transport", "message", "processMessage", "consumeAllMessagesInto", "err", "INSPECTOR_PREFERENCES_PATH", "getIgnoredUndoRedoComponents", "EditorComponentNames", "initRpcMethods", "fs", "engine", "addEngineListener", "currentCompositeResourcePath", "getCurrentCompositePath", "inspectorPreferences", "readPreferencesFromFile", "getInspectorPreferences", "setInspectorPreferences", "value", "serializeInspectorPreferences", "getComposite", "stateManager", "StateManager", "sceneProvider", "SceneProvider", "compositeProvider", "CompositeProvider", "undoRedoProvider", "UndoRedoProvider", "installBin", "historySize", "iter", "createStream", "req", "path", "ignore", "filesInDir", "getFilesInDirectory", "$", "content", "basePath", "withAssetDir", "assets", "item", "itemLower", "EXTENSIONS", "ext", "assetPackageName", "baseFolder", "undoAcc", "fileName", "fileContent", "importName", "filePath", "prevValue", "upsert_asset_default", "name", "composite", "resources", "thumbnail", "slug", "DIRECTORY", "customAssetPath", "counter", "data", "thumbnailBuffer", "resourcePath", "targetPath", "asset", "paths", "folders", "files", "dataPath", "compositePath", "thumbnailPath", "file", "result", "thumbnailData", "assetId", "folder", "folderPath", "newName", "parsedData", "updatedData", "newContent", "createDataLayerHost", "fs", "callbackFunctions", "addEngineListener", "func", "engine", "createEngineContext", "entity", "operation", "component", "componentValue", "initRpcMethods", "import_mini_rpc", "name", "CameraClient", "transport", "name", "width", "height", "precision", "x", "y", "z", "import_mini_rpc", "name", "UiClient", "transport", "name", "component", "enabled", "panel", "tab", "import_mini_rpc", "Method", "id", "Client", "transport", "path", "content", "Server", "createIframeStorage", "origin", "import_mini_rpc", "name", "SceneMetricsClient", "transport", "name"]
7
7
  }