diff --git a/packages/avatar/src/AvatarAssetDownloadManager.ts b/packages/avatar/src/AvatarAssetDownloadManager.ts index 1bac623..ada5077 100644 --- a/packages/avatar/src/AvatarAssetDownloadManager.ts +++ b/packages/avatar/src/AvatarAssetDownloadManager.ts @@ -23,9 +23,18 @@ export class AvatarAssetDownloadManager this._structure = structure; } + private static DEFAULT_MANDATORY_LIBS: string[] = ['hh_human_face']; + public async init(): Promise { - this._missingMandatoryLibs = GetConfiguration().getValue('avatar.mandatory.libraries'); + const configuredLibs = GetConfiguration().getValue('avatar.mandatory.libraries') || []; + + this._missingMandatoryLibs = [ ...configuredLibs ]; + + for(const lib of AvatarAssetDownloadManager.DEFAULT_MANDATORY_LIBS) + { + if(this._missingMandatoryLibs.indexOf(lib) === -1) this._missingMandatoryLibs.push(lib); + } const url = GetConfiguration().getValue('avatar.figuremap.url'); diff --git a/packages/avatar/src/AvatarImage.ts b/packages/avatar/src/AvatarImage.ts index b98e2e3..4cc52cf 100644 --- a/packages/avatar/src/AvatarImage.ts +++ b/packages/avatar/src/AvatarImage.ts @@ -285,6 +285,8 @@ export class AvatarImage implements IAvatarImage, IAvatarEffectListener const container = this.buildAvatarContainer(avatarCanvas, setType); + if(!container) return null; + GetRenderer().render({ target: this._activeTexture, container: container, diff --git a/packages/avatar/src/AvatarRenderManager.ts b/packages/avatar/src/AvatarRenderManager.ts index efd3645..57a8694 100644 --- a/packages/avatar/src/AvatarRenderManager.ts +++ b/packages/avatar/src/AvatarRenderManager.ts @@ -241,6 +241,8 @@ export class AvatarRenderManager implements IAvatarRenderManager const palette = figureData.getPalette(set.paletteID); const colors = container.getPartColorIds(part); + + if(!palette) continue; for(const colorId of colors) { diff --git a/packages/avatar/src/AvatarStructure.ts b/packages/avatar/src/AvatarStructure.ts index a1772b7..d3fff55 100644 --- a/packages/avatar/src/AvatarStructure.ts +++ b/packages/avatar/src/AvatarStructure.ts @@ -37,18 +37,18 @@ export class AvatarStructure } - public initGeometry(k: any): void + public initGeometry(data: any): void { - if(!k) return; + if(!data) return; - this._geometry = new AvatarModelGeometry(k); + this._geometry = new AvatarModelGeometry(data); } - public initActions(k: IAssetManager, _arg_2: any): void + public initActions(assets: IAssetManager, data: any): void { - if(!_arg_2) return; + if(!data) return; - this._actionManager = new AvatarActionManager(k, _arg_2); + this._actionManager = new AvatarActionManager(assets, data); this._defaultAction = this._actionManager.getDefaultAction(); } @@ -59,11 +59,11 @@ export class AvatarStructure this._defaultAction = this._actionManager.getDefaultAction(); } - public initPartSets(k: any): boolean + public initPartSets(data: any): boolean { - if(!k) return false; + if(!data) return false; - if(this._partSetsData.parse(k)) + if(this._partSetsData.parse(data)) { this._partSetsData.getPartDefinition('ri').appendToFigure = true; this._partSetsData.getPartDefinition('li').appendToFigure = true; @@ -74,18 +74,18 @@ export class AvatarStructure return false; } - public initAnimation(k: any): boolean + public initAnimation(data: any): boolean { - if(!k) return false; + if(!data) return false; - return this._animationData.parse(k); + return this._animationData.parse(data); } - public initFigureData(k: IFigureData): boolean + public initFigureData(data: IFigureData): boolean { - if(!k) return false; + if(!data) return false; - return this._figureData.parse(k); + return this._figureData.parse(data); } public injectFigureData(data: IFigureData): void @@ -93,13 +93,13 @@ export class AvatarStructure this._figureData.injectJSON(data); } - public registerAnimations(k: IAssetManager, _arg_2: string = 'fx', _arg_3: number = 200): void + public registerAnimations(assets: IAssetManager, prefix: string = 'fx', maxCount: number = 200): void { let index = 0; - while(index < _arg_3) + while(index < maxCount) { - const collection = k.getCollection((_arg_2 + index)); + const collection = assets.getCollection((prefix + index)); if(collection) { @@ -117,21 +117,21 @@ export class AvatarStructure this._animationManager.registerAnimation(this, data); } - public getPartColor(container: IAvatarFigureContainer, _arg_2: string, _arg_3: number = 0): IPartColor + public getPartColor(figureContainer: IAvatarFigureContainer, partType: string, colorIndex: number = 0): IPartColor { - const _local_4 = container.getPartColorIds(_arg_2); + const colorIds = figureContainer.getPartColorIds(partType); - if((!(_local_4)) || (_local_4.length < _arg_3)) return null; + if(!colorIds || (colorIds.length < colorIndex)) return null; - const _local_5 = this._figureData.getSetType(_arg_2); + const setType = this._figureData.getSetType(partType); - if(_local_5 == null) return null; + if(setType == null) return null; - const _local_6 = this._figureData.getPalette(_local_5.paletteID); + const palette = this._figureData.getPalette(setType.paletteID); - if(!_local_6) return null; + if(!palette) return null; - return _local_6.getColor(_local_4[_arg_3]); + return palette.getColor(colorIds[colorIndex]); } public getBodyPartData(animation: string, frameCount: number, spriteId: string): AvatarAnimationLayerData @@ -139,98 +139,98 @@ export class AvatarStructure return this._animationManager.getLayerData(animation, frameCount, spriteId) as AvatarAnimationLayerData; } - public getAnimation(k: string): Animation + public getAnimation(name: string): Animation { - return this._animationManager.getAnimation(k); + return this._animationManager.getAnimation(name); } - public getActionDefinition(k: string): ActionDefinition + public getActionDefinition(id: string): ActionDefinition { - return this._actionManager.getActionDefinition(k); + return this._actionManager.getActionDefinition(id); } - public getActionDefinitionWithState(k: string): ActionDefinition + public getActionDefinitionWithState(state: string): ActionDefinition { - return this._actionManager.getActionDefinitionWithState(k); + return this._actionManager.getActionDefinitionWithState(state); } - public isMainAvatarSet(k: string): boolean + public isMainAvatarSet(setType: string): boolean { - return this._geometry.isMainAvatarSet(k); + return this._geometry.isMainAvatarSet(setType); } - public sortActions(k: IActiveActionData[]): IActiveActionData[] + public sortActions(actions: IActiveActionData[]): IActiveActionData[] { - return this._actionManager.sortActions(k); + return this._actionManager.sortActions(actions); } - public maxFrames(k: IActiveActionData[]): number + public maxFrames(actions: IActiveActionData[]): number { - let _local_2 = 0; + let maxFrameCount = 0; - for(const _local_3 of k) + for(const action of actions) { - _local_2 = Math.max(_local_2, this._animationData.getFrameCount(_local_3.definition)); - } - return _local_2; - } - - public getMandatorySetTypeIds(k: string, _arg_2: number): string[] - { - if(!this._mandatorySetTypeIds[k]) - { - this._mandatorySetTypeIds[k] = []; + maxFrameCount = Math.max(maxFrameCount, this._animationData.getFrameCount(action.definition)); } - if(this._mandatorySetTypeIds[k][_arg_2]) + return maxFrameCount; + } + + public getMandatorySetTypeIds(gender: string, clubLevel: number): string[] + { + if(!this._mandatorySetTypeIds[gender]) { - return this._mandatorySetTypeIds[k][_arg_2]; + this._mandatorySetTypeIds[gender] = []; } - this._mandatorySetTypeIds[k][_arg_2] = this._figureData.getMandatorySetTypeIds(k, _arg_2); - - return this._mandatorySetTypeIds[k][_arg_2]; - } - - public getDefaultPartSet(k: string, _arg_2: string): IFigurePartSet - { - return this._figureData.getDefaultPartSet(k, _arg_2); - } - - public getCanvasOffsets(k: IActiveActionData[], _arg_2: string, _arg_3: number): number[] - { - return this._actionManager.getCanvasOffsets(k, _arg_2, _arg_3); - } - - public getCanvas(k: string, _arg_2: string): AvatarCanvas - { - return this._geometry.getCanvas(k, _arg_2); - } - - public removeDynamicItems(k: IAvatarImage): void - { - this._geometry.removeDynamicItems(k); - } - - public getActiveBodyPartIds(k: IActiveActionData, _arg_2: IAvatarImage): string[] - { - let _local_3: string[] = []; - - const _local_4: string[] = []; - const _local_5 = k.definition.geometryType; - - if(k.definition.isAnimation) + if(this._mandatorySetTypeIds[gender][clubLevel]) { - const _local_7 = ((k.definition.state + '.') + k.actionParameter); - const _local_8 = this._animationManager.getAnimation(_local_7); + return this._mandatorySetTypeIds[gender][clubLevel]; + } - if(_local_8) + this._mandatorySetTypeIds[gender][clubLevel] = this._figureData.getMandatorySetTypeIds(gender, clubLevel); + + return this._mandatorySetTypeIds[gender][clubLevel]; + } + + public getDefaultPartSet(partType: string, gender: string): IFigurePartSet + { + return this._figureData.getDefaultPartSet(partType, gender); + } + + public getCanvasOffsets(actions: IActiveActionData[], scale: string, direction: number): number[] + { + return this._actionManager.getCanvasOffsets(actions, scale, direction); + } + + public getCanvas(scale: string, geometryType: string): AvatarCanvas + { + return this._geometry.getCanvas(scale, geometryType); + } + + public removeDynamicItems(avatar: IAvatarImage): void + { + this._geometry.removeDynamicItems(avatar); + } + + public getActiveBodyPartIds(action: IActiveActionData, avatar: IAvatarImage): string[] + { + let partTypeIds: string[] = []; + const bodyPartIds: string[] = []; + const geometryType = action.definition.geometryType; + + if(action.definition.isAnimation) + { + const animationKey = ((action.definition.state + '.') + action.actionParameter); + const animation = this._animationManager.getAnimation(animationKey); + + if(animation) { - _local_3 = _local_8.getAnimatedBodyPartIds(0, k.overridingAction); + partTypeIds = animation.getAnimatedBodyPartIds(0, action.overridingAction); - if(_local_8.hasAddData()) + if(animation.hasAddData()) { - const _local_11 = { + const dynamicPart = { id: '', x: 0, y: 0, @@ -242,110 +242,121 @@ export class AvatarStructure double: 1 }; - const _local_12 = { + const partSetDefinition = { setType: '' }; - for(const _local_13 of _local_8.addData) + for(const addData of animation.addData) { - const _local_6 = this._geometry.getBodyPart(_local_5, _local_13.align); + const bodyPart = this._geometry.getBodyPart(geometryType, addData.align); - if(_local_6) + if(bodyPart) { - _local_11.id = _local_13.id; - _local_6.addPart(_local_11, _arg_2); + dynamicPart.id = addData.id; + bodyPart.addPart(dynamicPart, avatar); - _local_12.setType = _local_13.id; + partSetDefinition.setType = addData.id; - const _local_10 = this._partSetsData.addPartDefinition(_local_12); - _local_10.appendToFigure = true; + const partDefinition = this._partSetsData.addPartDefinition(partSetDefinition); + partDefinition.appendToFigure = true; - if(_local_13.base === '') _local_10.staticId = 1; + if(addData.base === '') partDefinition.staticId = 1; - if(_local_4.indexOf(_local_6.id) === -1) _local_4.push(_local_6.id); + if(bodyPartIds.indexOf(bodyPart.id) === -1) bodyPartIds.push(bodyPart.id); } } } } - for(const _local_9 of _local_3) + for(const partTypeId of partTypeIds) { - const _local_6 = this._geometry.getBodyPart(_local_5, _local_9); + const bodyPart = this._geometry.getBodyPart(geometryType, partTypeId); - if(_local_6 && (_local_4.indexOf(_local_6.id) === -1)) _local_4.push(_local_6.id); + if(bodyPart && (bodyPartIds.indexOf(bodyPart.id) === -1)) bodyPartIds.push(bodyPart.id); + } + + if(bodyPartIds.length === 0) + { + partTypeIds = this._partSetsData.getActiveParts(action.definition); + + for(const partType of partTypeIds) + { + const bodyPart = this._geometry.getBodyPartOfItem(geometryType, partType, avatar); + + if(bodyPart && (bodyPartIds.indexOf(bodyPart.id) === -1)) bodyPartIds.push(bodyPart.id); + } } } else { - _local_3 = this._partSetsData.getActiveParts(k.definition); + partTypeIds = this._partSetsData.getActiveParts(action.definition); - for(const _local_14 of _local_3) + for(const partType of partTypeIds) { - const _local_6 = this._geometry.getBodyPartOfItem(_local_5, _local_14, _arg_2); + const bodyPart = this._geometry.getBodyPartOfItem(geometryType, partType, avatar); - if(_local_6 && (_local_4.indexOf(_local_6.id) === -1)) _local_4.push(_local_6.id); + if(bodyPart && (bodyPartIds.indexOf(bodyPart.id) === -1)) bodyPartIds.push(bodyPart.id); } } - return _local_4; + return bodyPartIds; } - public getBodyPartsUnordered(k: string): string[] + public getBodyPartsUnordered(avatarSet: string): string[] { - return this._geometry.getBodyPartIdsInAvatarSet(k); + return this._geometry.getBodyPartIdsInAvatarSet(avatarSet); } - public getBodyParts(k: string, _arg_2: string, _arg_3: number): string[] + public getBodyParts(avatarSet: string, geometryType: string, direction: number): string[] { - const _local_4 = AvatarDirectionAngle.DIRECTION_TO_ANGLE[_arg_3]; + const angle = AvatarDirectionAngle.DIRECTION_TO_ANGLE[direction]; - return this._geometry.getBodyPartsAtAngle(k, _local_4, _arg_2); + return this._geometry.getBodyPartsAtAngle(avatarSet, angle, geometryType); } - public getFrameBodyPartOffset(k: IActiveActionData, _arg_2: number, _arg_3: number, _arg_4: string): Point + public getFrameBodyPartOffset(action: IActiveActionData, direction: number, frameCount: number, bodyPartId: string): Point { - const _local_5 = this._animationData.getAction(k.definition); + const animationAction = this._animationData.getAction(action.definition); - if(_local_5) return _local_5.getFrameBodyPartOffset(_arg_2, _arg_3, _arg_4); + if(animationAction) return animationAction.getFrameBodyPartOffset(direction, frameCount, bodyPartId); return AnimationAction.DEFAULT_OFFSET; } - public getParts(k: string, _arg_2: IAvatarFigureContainer, _arg_3: IActiveActionData, _arg_4: string, _arg_5: number, removes: string[], _arg_7: IAvatarImage, _arg_8: Map = null): AvatarImagePartContainer[] + public getParts(bodyPartId: string, figureContainer: IAvatarFigureContainer, action: IActiveActionData, geometryType: string, direction: number, removes: string[], avatar: IAvatarImage, itemOverrides: Map = null): AvatarImagePartContainer[] { - const _local_10: Animation = null; - let _local_34: IActionDefinition = null; + const effectAnimation: Animation = null; + let actionDefinition: IActionDefinition = null; + let animationFrames: AvatarAnimationFrame[] = []; + let partColor: IPartColor = null; - let _local_20: AvatarAnimationFrame[] = []; - let _local_36: IPartColor = null; + if(!action) return []; - if(!_arg_3) return []; + const activePartTypes = this._partSetsData.getActiveParts(action.definition); + const partContainers: AvatarImagePartContainer[] = []; + let defaultFrames: any[] = [0]; + const animationAction = this._animationData.getAction(action.definition); - const _local_9 = this._partSetsData.getActiveParts(_arg_3.definition); - const _local_11: AvatarImagePartContainer[] = []; - let _local_14: any[] = [0]; - const _local_15 = this._animationData.getAction(_arg_3.definition); - - if(_arg_3.definition.isAnimation) + if(action.definition.isAnimation) { - const _local_24 = ((_arg_3.definition.state + '.') + _arg_3.actionParameter); - const _local_10 = this._animationManager.getAnimation(_local_24); + const animationKey = ((action.definition.state + '.') + action.actionParameter); + const spriteAnimation = this._animationManager.getAnimation(animationKey); - if(_local_10) + if(spriteAnimation) { - _local_14 = this.getPopulatedArray(_local_10.frameCount(_arg_3.overridingAction)); + defaultFrames = this.getPopulatedArray(spriteAnimation.frameCount(action.overridingAction)); - for(const _local_25 of _local_10.getAnimatedBodyPartIds(0, _arg_3.overridingAction)) + for(const animatedPartId of spriteAnimation.getAnimatedBodyPartIds(0, action.overridingAction)) { - if(_local_25 === k) + if(animatedPartId === bodyPartId) { - const _local_26 = this._geometry.getBodyPart(_arg_4, _local_25); + const geometryBodyPart = this._geometry.getBodyPart(geometryType, animatedPartId); - if(_local_26) + if(geometryBodyPart) { - for(const _local_27 of _local_26.getDynamicParts(_arg_7)) + for(const dynamicPart of geometryBodyPart.getDynamicParts(avatar)) { - _local_9.push(_local_27.id); + activePartTypes.push(dynamicPart.id); } } } @@ -353,75 +364,73 @@ export class AvatarStructure } } - const _local_16 = this._geometry.getParts(_arg_4, k, _arg_5, _local_9, _arg_7); - const _local_21 = _arg_2.getPartTypeIds(); + const visiblePartTypes = this._geometry.getParts(geometryType, bodyPartId, direction, activePartTypes, avatar); + const figurePartTypeIds = figureContainer.getPartTypeIds(); - for(const _local_17 of _local_21) + for(const figurePartType of figurePartTypeIds) { - if(_arg_8) + if(itemOverrides) { - if(_arg_8.get(_local_17)) continue; + if(itemOverrides.get(figurePartType)) continue; } - const _local_28 = _arg_2.getPartSetId(_local_17); - const _local_29 = _arg_2.getPartColorIds(_local_17); - const _local_30 = this._figureData.getSetType(_local_17); + const partSetId = figureContainer.getPartSetId(figurePartType); + const partColorIds = figureContainer.getPartColorIds(figurePartType); + const setType = this._figureData.getSetType(figurePartType); - - - if(_local_30) + if(setType) { - const _local_31 = this._figureData.getPalette(_local_30.paletteID); + const palette = this._figureData.getPalette(setType.paletteID); - if(_local_31) + if(palette) { - const _local_32 = _local_30.getPartSet(_local_28); + const figurePartSet = setType.getPartSet(partSetId); - if(_local_32) + if(figurePartSet) { - removes = removes.concat(_local_32.hiddenLayers); + removes = removes.concat(figurePartSet.hiddenLayers); - for(const _local_33 of _local_32.parts) + for(const figurePart of figurePartSet.parts) { - if(_local_16.indexOf(_local_33.type) > -1) + if(visiblePartTypes.indexOf(figurePart.type) > -1) { - if(_local_15) + if(animationAction) { - const _local_19 = _local_15.getPart(_local_33.type); + const animationPart = animationAction.getPart(figurePart.type); - if(_local_19) + if(animationPart) { - _local_20 = _local_19.frames; + animationFrames = animationPart.frames; } else { - _local_20 = _local_14; + animationFrames = defaultFrames; } } else { - _local_20 = _local_14; + animationFrames = defaultFrames; } - _local_34 = _arg_3.definition; + actionDefinition = action.definition; - if(_local_9.indexOf(_local_33.type) === -1) _local_34 = this._defaultAction; + if(activePartTypes.indexOf(figurePart.type) === -1) actionDefinition = this._defaultAction; - const _local_13 = this._partSetsData.getPartDefinition(_local_33.type); + const partDefinition = this._partSetsData.getPartDefinition(figurePart.type); - let _local_35 = (!_local_13) ? _local_33.type : _local_13.flippedSetType; + let flippedPartType = (!partDefinition) ? figurePart.type : partDefinition.flippedSetType; - if(!_local_35 || (_local_35 === '')) _local_35 = _local_33.type; + if(!flippedPartType || (flippedPartType === '')) flippedPartType = figurePart.type; - if(_local_29 && (_local_29.length > (_local_33.colorLayerIndex - 1))) + if(partColorIds && (partColorIds.length > (figurePart.colorLayerIndex - 1))) { - _local_36 = _local_31.getColor(_local_29[(_local_33.colorLayerIndex - 1)]); + partColor = palette.getColor(partColorIds[(figurePart.colorLayerIndex - 1)]); } - const _local_37 = (_local_33.colorLayerIndex > 0); - const _local_18 = new AvatarImagePartContainer(k, _local_33.type, _local_33.id.toString(), _local_36, _local_20, _local_34, _local_37, _local_33.paletteMap, _local_35); + const isColorable = (figurePart.colorLayerIndex > 0); + const container = new AvatarImagePartContainer(bodyPartId, figurePart.type, figurePart.id.toString(), partColor, animationFrames, actionDefinition, isColorable, figurePart.paletteMap, flippedPartType); - _local_11.push(_local_18); + partContainers.push(container); } } } @@ -429,132 +438,132 @@ export class AvatarStructure } } - const _local_22: AvatarImagePartContainer[] = []; + const sortedContainers: AvatarImagePartContainer[] = []; - for(const _local_12 of _local_16) + for(const visiblePartType of visiblePartTypes) { - let _local_39: IPartColor = null; - let _local_38 = false; + let overrideColor: IPartColor = null; + let partFound = false; - const _local_40 = ((_arg_8) && (_arg_8.get(_local_12))); + const hasItemOverride = ((itemOverrides) && (itemOverrides.get(visiblePartType))); - for(const _local_23 of _local_11) + for(const container of partContainers) { - if(_local_23.partType === _local_12) + if(container.partType === visiblePartType) { - if(_local_40) + if(hasItemOverride) { - _local_39 = _local_23.color; + overrideColor = container.color; } else { - _local_38 = true; + partFound = true; - if(removes.indexOf(_local_12) === -1) _local_22.push(_local_23); + if(removes.indexOf(visiblePartType) === -1) sortedContainers.push(container); } } } - if(!_local_38) + if(!partFound) { - if(_local_40) + if(hasItemOverride) { - const _local_41 = _arg_8.get(_local_12); + const itemId = itemOverrides.get(visiblePartType); - let _local_42 = 0; - let _local_43 = 0; + let charCodeSum = 0; + let charIndex = 0; - while(_local_43 < _local_41.length) + while(charIndex < itemId.length) { - _local_42 = (_local_42 + _local_41.charCodeAt(_local_43)); - _local_43++; + charCodeSum = (charCodeSum + itemId.charCodeAt(charIndex)); + charIndex++; } - if(_local_15) + if(animationAction) { - const _local_19 = _local_15.getPart(_local_12); + const animationPart = animationAction.getPart(visiblePartType); - if(_local_19) + if(animationPart) { - _local_20 = _local_19.frames; + animationFrames = animationPart.frames; } else { - _local_20 = _local_14; + animationFrames = defaultFrames; } } else { - _local_20 = _local_14; + animationFrames = defaultFrames; } - const _local_18 = new AvatarImagePartContainer(k, _local_12, _local_41, _local_39, _local_20, _arg_3.definition, (!(_local_39 == null)), -1, _local_12, false, 1); + const container = new AvatarImagePartContainer(bodyPartId, visiblePartType, itemId, overrideColor, animationFrames, action.definition, (!(overrideColor == null)), -1, visiblePartType, false, 1); - _local_22.push(_local_18); + sortedContainers.push(container); } else { - if(_local_9.indexOf(_local_12) > -1) + if(activePartTypes.indexOf(visiblePartType) > -1) { - const _local_44 = this._geometry.getBodyPartOfItem(_arg_4, _local_12, _arg_7); + const ownerBodyPart = this._geometry.getBodyPartOfItem(geometryType, visiblePartType, avatar); - if(k !== _local_44.id) + if(bodyPartId !== ownerBodyPart.id) { // } else { - const _local_13 = this._partSetsData.getPartDefinition(_local_12); + const partDefinition = this._partSetsData.getPartDefinition(visiblePartType); - let _local_45 = false; - let _local_46 = 1; + let isBlended = false; + let blendFactor = 1; - if(_local_13.appendToFigure) + if(partDefinition.appendToFigure) { - let _local_47 = '1'; + let partId = '1'; - if(_arg_3.actionParameter !== '') + if(action.actionParameter !== '') { - _local_47 = _arg_3.actionParameter; + partId = action.actionParameter; } - if(_local_13.hasStaticId()) + if(partDefinition.hasStaticId()) { - _local_47 = _local_13.staticId.toString(); + partId = partDefinition.staticId.toString(); } - if(_local_10 != null) + if(effectAnimation != null) { - const _local_48 = _local_10.getAddData(_local_12); + const addData = effectAnimation.getAddData(visiblePartType); - if(_local_48) + if(addData) { - _local_45 = _local_48.isBlended; - _local_46 = _local_48.blend; + isBlended = addData.isBlended; + blendFactor = addData.blend; } } - if(_local_15) + if(animationAction) { - const _local_19 = _local_15.getPart(_local_12); + const animationPart = animationAction.getPart(visiblePartType); - if(_local_19) + if(animationPart) { - _local_20 = _local_19.frames; + animationFrames = animationPart.frames; } else { - _local_20 = _local_14; + animationFrames = defaultFrames; } } else { - _local_20 = _local_14; + animationFrames = defaultFrames; } - const _local_18 = new AvatarImagePartContainer(k, _local_12, _local_47, null, _local_20, _arg_3.definition, false, -1, _local_12, _local_45, _local_46); + const container = new AvatarImagePartContainer(bodyPartId, visiblePartType, partId, null, animationFrames, action.definition, false, -1, visiblePartType, isBlended, blendFactor); - _local_22.push(_local_18); + sortedContainers.push(container); } } } @@ -562,36 +571,36 @@ export class AvatarStructure } } - return _local_22; + return sortedContainers; } - private getPopulatedArray(k: number): number[] + private getPopulatedArray(count: number): number[] { - const _local_2: number[] = []; + const result: number[] = []; let index = 0; - while(index < k) + while(index < count) { - _local_2.push(index); + result.push(index); index++; } - return _local_2; + return result; } public getItemIds(): string[] { if(this._actionManager) { - const k = this._actionManager.getActionDefinition('CarryItem').params; + const params = this._actionManager.getActionDefinition('CarryItem').params; - const _local_2 = []; + const itemIds = []; - for(const _local_3 of k.values()) _local_2.push(_local_3); + for(const value of params.values()) itemIds.push(value); - return _local_2; + return itemIds; } return []; diff --git a/packages/camera/src/RoomCameraWidgetManager.ts b/packages/camera/src/RoomCameraWidgetManager.ts index 1d28a4c..85b7067 100644 --- a/packages/camera/src/RoomCameraWidgetManager.ts +++ b/packages/camera/src/RoomCameraWidgetManager.ts @@ -117,7 +117,12 @@ export class RoomCameraWidgetManager implements IRoomCameraWidgetManager TextureUtils.writeToTexture(container, renderTexture); - return await TextureUtils.generateImage(renderTexture); + const image = await TextureUtils.generateImage(renderTexture); + + container.destroy({ children: true }); + renderTexture.destroy(true); + + return image; } public get effects(): Map diff --git a/packages/communication/src/CommunicationManager.ts b/packages/communication/src/CommunicationManager.ts index 0fa6a90..3718463 100644 --- a/packages/communication/src/CommunicationManager.ts +++ b/packages/communication/src/CommunicationManager.ts @@ -62,7 +62,8 @@ export class CommunicationManager implements ICommunicationManager t.shadowColor = 'blue'; t.fillRect(-20, 10, 234, 5); const i = e.toDataURL(); - document.body.appendChild(e); + e.width = 0; + e.height = 0; let r = 0; if (i.length === 0) return 'nothing!'; for (let n = 0; n < i.length; n++) { diff --git a/packages/communication/src/NitroMessages.ts b/packages/communication/src/NitroMessages.ts index e3866b7..a1f2e35 100644 --- a/packages/communication/src/NitroMessages.ts +++ b/packages/communication/src/NitroMessages.ts @@ -1,7 +1,8 @@ import { IMessageConfiguration } from '@nitrots/api'; +import { AcceptFriendMessageComposer, AcceptFriendResultEvent, AcceptGameInviteMessageComposer, AcceptQuestMessageComposer, AccountSafetyLockStatusChangeMessageEvent, AchievementEvent, AchievementNotificationMessageEvent, AchievementResolutionCompletedMessageEvent, AchievementResolutionProgressMessageEvent, AchievementResolutionsMessageEvent, AchievementsEvent, AchievementsScoreEvent, ActivateQuestMessageComposer, ActivityPointNotificationMessageEvent, AddFavouriteRoomMessageComposer, AddJukeboxDiskComposer, AddSpamWallPostItMessageComposer, ApplySnapshotMessageComposer, ApplyTonerComposer, ApproveAllMembershipRequestsMessageComposer, ApproveNameMessageComposer, ApproveNameMessageEvent, AreaHideMessageEvent, AuthenticatedEvent, AuthenticationMessageComposer, AvailabilityStatusMessageEvent, AvailabilityTimeMessageEvent, AvailableCommandsEvent, AvatarEffectActivatedComposer, AvatarEffectActivatedEvent, AvatarEffectAddedEvent, AvatarEffectExpiredEvent, AvatarEffectSelectedComposer, AvatarEffectSelectedEvent, AvatarEffectsEvent, BadgePointLimitsEvent, BadgeReceivedEvent, BadgesEvent, BannedUsersFromRoomEvent, BonusRareInfoMessageEvent, BotAddedToInventoryEvent, BotCommandConfigurationEvent, BotErrorEvent, BotForceOpenContextMenuEvent, BotInventoryMessageEvent, BotPlaceComposer, BotReceivedMessageEvent, BotRemoveComposer, BotRemovedFromInventoryEvent, BotSkillListUpdateEvent, BotSkillSaveComposer, BreedPetsMessageComposer, BuildersClubFurniCountMessageEvent, BuildersClubPlaceRoomItemMessageComposer, BuildersClubPlaceWallItemMessageComposer, BuildersClubQueryFurniCountMessageComposer, BuildersClubSubscriptionStatusMessageEvent, BundleDiscountRulesetMessageEvent, BuyMarketplaceOfferMessageComposer, BuyMarketplaceTokensMessageComposer, CallForHelpDisabledNotifyMessageEvent, CallForHelpFromForumMessageMessageComposer, CallForHelpFromForumThreadMessageComposer, CallForHelpFromIMMessageComposer, CallForHelpFromPhotoMessageComposer, CallForHelpFromSelfieMessageComposer, CallForHelpMessageComposer, CallForHelpPendingCallsDeletedMessageEvent, CallForHelpPendingCallsMessageEvent, CallForHelpReplyMessageEvent, CallForHelpResultMessageEvent, CameraPublishStatusMessageEvent, CameraPurchaseOKMessageEvent, CameraSnapshotMessageEvent, CameraStorageUrlMessageEvent, CampaignCalendarDataMessageEvent, CampaignCalendarDoorOpenedMessageEvent, CancelEventMessageComposer, CancelMarketplaceOfferMessageComposer, CancelMysteryBoxWaitMessageEvent, CancelPetBreedingComposer, CancelQuestMessageComposer, CanCreateRoomEvent, CanCreateRoomEventEvent, CanCreateRoomMessageComposer, CatalogAdminCreateOfferComposer, CatalogAdminCreatePageComposer, CatalogAdminDeleteOfferComposer, CatalogAdminDeletePageComposer, CatalogAdminMoveOfferComposer, CatalogAdminMovePageComposer, CatalogAdminPublishComposer, CatalogAdminResultEvent, CatalogAdminSaveOfferComposer, CatalogAdminSavePageComposer, CatalogGroupsComposer, CatalogPageExpirationEvent, CatalogPageMessageEvent, CatalogPagesListEvent, CatalogPageWithEarliestExpiryMessageEvent, CatalogPublishedMessageEvent, CategoriesWithVisitorCountEvent, CfhChatlogEvent, CfhSanctionMessageEvent, CfhTopicsInitEvent, ChangeEmailComposer, ChangeEmailResultEvent, ChangeQueueMessageComposer, ChangeUserNameMessageComposer, ChangeUserNameResultMessageEvent, ChatReviewGuideDecidesOnOfferMessageComposer, ChatReviewGuideDetachedMessageComposer, ChatReviewGuideVoteMessageComposer, ChatReviewSessionCreateMessageComposer, ChatReviewSessionDetachedMessageEvent, ChatReviewSessionOfferedToGuideMessageEvent, ChatReviewSessionResultsMessageEvent, ChatReviewSessionStartedMessageEvent, ChatReviewSessionVotingStatusMessageEvent, CheckUserNameMessageComposer, CheckUserNameResultMessageEvent, ClickFurniMessageComposer, ClientHelloMessageComposer, ClientPingEvent, CloseIssueDefaultActionMessageComposer, CloseIssuesMessageComposer, ClubGiftInfoEvent, ClubGiftNotificationEvent, ClubGiftSelectedEvent, CommunityGoalEarnedPrizesMessageEvent, CommunityGoalHallOfFameMessageEvent, CommunityGoalProgressMessageEvent, CommunityGoalVoteMessageComposer, CommunityGoalVoteMessageEvent, CompetitionEntrySubmitResultEvent, CompetitionRoomsDataMessageEvent, CompetitionRoomsSearchMessageComposer, CompetitionStatusMessageEvent, CompetitionVotingInfoMessageEvent, CompleteDiffieHandshakeEvent, CompleteDiffieHandshakeMessageComposer, CompostPlantMessageComposer, ConcurrentUsersGoalProgressMessageEvent, ConfirmPetBreedingComposer, ConnectionErrorEvent, ControlYoutubeDisplayPlaybackMessageComposer, ConvertedRoomIdEvent, ConvertGlobalRoomIdMessageComposer, CraftableProductsEvent, CraftComposer, CraftingRecipeEvent, CraftingRecipesAvailableEvent, CraftingResultEvent, CraftSecretComposer, CreateFlatMessageComposer, CurrentTimingCodeMessageEvent, CustomUserNotificationMessageEvent, DeclineFriendMessageComposer, DefaultSanctionMessageComposer, DeleteBadgeMessageComposer, DeleteFavouriteRoomMessageComposer, DeleteItemMessageComposer, DeletePendingCallsForHelpMessageComposer, DeletePetMessageComposer, DesktopViewComposer, DesktopViewEvent, DiceValueMessageEvent, DirectSMSClubBuyAvailableMessageEvent, DisconnectMessageComposer, DisconnectReasonEvent, DoorbellMessageEvent, EditEventMessageComposer, ElementPointerMessageEvent, EmailStatusResultEvent, EpicPopupMessageEvent, ExtendedProfileChangedMessageEvent, ExtendRentOrBuyoutFurniMessageComposer, ExtendRentOrBuyoutStripItemMessageComposer, FavoriteMembershipUpdateMessageEvent, FavouriteChangedEvent, FavouritesEvent, FigureSetIdsMessageEvent, FigureUpdateEvent, FindFriendsProcessResultEvent, FindNewFriendsMessageComposer, FireworkChargeDataEvent, FlatAccessDeniedMessageEvent, FlatControllerAddedEvent, FlatControllerRemovedEvent, FlatControllersEvent, FlatCreatedEvent, FloodControlEvent, FloorHeightMapEvent, FollowFriendFailedEvent, FollowFriendMessageComposer, ForumDataMessageEvent, ForumsListMessageEvent, ForwardToACompetitionRoomMessageComposer, ForwardToARandomPromotedRoomMessageComposer, ForwardToASubmittableRoomMessageComposer, ForwardToRandomCompetitionRoomMessageComposer, ForwardToSomeRoomMessageComposer, FriendFurniConfirmLockMessageComposer, FriendListFragmentEvent, FriendListUpdateComposer, FriendListUpdateEvent, FriendNotificationEvent, FriendRequestQuestCompleteMessageComposer, FriendRequestsEvent, FurniRentOrBuyoutOfferMessageEvent, FurnitureAliasesComposer, FurnitureAliasesEvent, FurnitureColorWheelComposer, FurnitureDataEvent, FurnitureDiceActivateComposer, FurnitureDiceDeactivateComposer, FurnitureExchangeComposer, FurnitureFloorAddEvent, FurnitureFloorEvent, FurnitureFloorRemoveEvent, FurnitureFloorUpdateComposer, FurnitureFloorUpdateEvent, FurnitureGroupInfoComposer, FurnitureListAddOrUpdateEvent, FurnitureListComposer, FurnitureListEvent, FurnitureListInvalidateEvent, FurnitureListRemovedEvent, FurnitureMannequinSaveLookComposer, FurnitureMannequinSaveNameComposer, FurnitureMultiStateComposer, FurnitureOneWayDoorComposer, FurniturePickupAllComposer, FurniturePickupComposer, FurniturePlaceComposer, FurniturePlacePaintComposer, FurniturePostItPlaceComposer, FurniturePostItPlacedEvent, FurnitureRandomStateComposer, FurnitureStackHeightComposer, FurnitureStackHeightEvent, FurnitureWallAddEvent, FurnitureWallEvent, FurnitureWallMultiStateComposer, FurnitureWallRemoveEvent, FurnitureWallUpdateComposer, FurnitureWallUpdateEvent, FurniEditorBySpriteComposer, FurniEditorDeleteComposer, FurniEditorDetailComposer, FurniEditorDetailResultEvent, FurniEditorInteractionsComposer, FurniEditorInteractionsResultEvent, FurniEditorResultEvent, FurniEditorSearchComposer, FurniEditorSearchResultEvent, FurniEditorUpdateComposer, Game2AccountGameStatusMessageEvent, Game2CheckGameDirectoryStatusMessageComposer, Game2ExitGameMessageComposer, Game2GameChatMessageComposer, Game2GameDirectoryStatusMessageEvent, Game2GetAccountGameStatusMessageComposer, Game2GetWeeklyFriendsLeaderboardComposer, Game2GetWeeklyLeaderboardComposer, Game2InArenaQueueMessageEvent, Game2JoiningGameFailedMessageEvent, Game2LoadStageReadyMessageComposer, Game2PlayAgainMessageComposer, Game2RequestFullStatusUpdateMessageComposer, Game2StartingGameFailedMessageEvent, Game2StopCounterMessageEvent, Game2UserLeftGameMessageEvent, Game2WeeklyFriendsLeaderboardEvent, Game2WeeklyLeaderboardEvent, GameAchievementsMessageEvent, GameInviteMessageEvent, GameListMessageEvent, GameStatusMessageEvent, GameUnloadedMessageComposer, GenericErrorEvent, GetBadgePointLimitsComposer, GetBonusRareInfoMessageComposer, GetBotInventoryComposer, GetBundleDiscountRulesetComposer, GetCatalogIndexComposer, GetCatalogPageComposer, GetCatalogPageExpirationComposer, GetCatalogPageWithEarliestExpiryComposer, GetCategoriesWithUserCountMessageComposer, GetCfhChatlogMessageComposer, GetCfhStatusMessageComposer, GetClubGiftInfo, GetClubOffersMessageComposer, GetCommunityGoalEarnedPrizesMessageComposer, GetCommunityGoalHallOfFameMessageComposer, GetCommunityGoalProgressMessageComposer, GetConcurrentUsersGoalProgressMessageComposer, GetConcurrentUsersRewardMessageComposer, GetCraftableProductsComposer, GetCraftingRecipeComposer, GetCraftingRecipesAvailableComposer, GetCurrentTimingCodeMessageComposer, GetCustomRoomFilterMessageComposer, GetDailyQuestMessageComposer, GetDirectClubBuyAvailableComposer, GetEmailStatusComposer, GetExtendedProfileByNameMessageComposer, GetFaqCategoryMessageComposer, GetFaqTextMessageComposer, GetForumsListMessageComposer, GetForumStatsMessageComposer, GetFriendRequestsComposer, GetGameAchievementsMessageComposer, GetGameListMessageComposer, GetGameStatusMessageComposer, GetGiftMessageComposer, GetGiftWrappingConfigurationComposer, GetGuestRoomMessageComposer, GetGuestRoomResultEvent, GetGuideReportingStatusMessageComposer, GetHabboBasicMembershipExtendOfferComposer, GetHabboClubExtendOfferMessageComposer, GetHabboGroupBadgesMessageComposer, GetIgnoredUsersComposer, GetInterstitialMessageComposer, GetIsBadgeRequestFulfilledComposer, GetIsOfferGiftableComposer, GetIsUserPartOfCompetitionMessageComposer, GetItemDataComposer, GetJukeboxPlayListMessageComposer, GetLimitedOfferAppearingNextComposer, GetMarketplaceCanMakeOfferComposer, GetMarketplaceConfigurationMessageComposer, GetMarketplaceItemStatsComposer, GetMarketplaceOffersMessageComposer, GetMarketplaceOwnOffersMessageComposer, GetMessagesMessageComposer, GetModeratorRoomInfoMessageComposer, GetModeratorUserInfoMessageComposer, GetNextTargetedOfferComposer, GetNowPlayingMessageComposer, GetOccupiedTilesMessageComposer, GetOfficialRoomsMessageComposer, GetOfficialSongIdMessageComposer, GetPendingCallsForHelpMessageComposer, GetPetCommandsComposer, GetPopularRoomTagsMessageComposer, GetProductOfferComposer, GetPromoArticlesComposer, GetQuestsMessageComposer, GetQuizQuestionsComposer, GetRecyclerStatusMessageComposer, GetRentOrBuyoutOfferMessageComposer, GetResolutionAchievementsMessageComposer, GetRoomAdPurchaseInfoComposer, GetRoomChatlogMessageComposer, GetRoomEntryDataMessageComposer, GetRoomEntryTileMessageComposer, GetRoomVisitsMessageComposer, GetSeasonalCalendarDailyOfferComposer, GetSeasonalQuestsOnlyMessageComposer, GetSecondsUntilMessageComposer, GetSellablePetPalettesComposer, GetSongInfoMessageComposer, GetSoundMachinePlayListMessageComposer, GetSoundSettingsComposer, GetTalentTrackLevelMessageComposer, GetTargetedOfferComposer, GetThreadMessageComposer, GetThreadsMessageComposer, GetUnreadForumsCountMessageComposer, GetUserChatlogMessageComposer, GetUserEventCatsMessageComposer, GetUserFlatCatsMessageComposer, GetUserGameAchievementsMessageComposer, GetUserSongDisksMessageComposer, GetUserTagsComposer, GetWardrobeMessageComposer, GetWeeklyGameRewardComposer, GetWeeklyGameRewardWinnersComposer, GetYoutubeDisplayStatusMessageComposer, GiftReceiverNotFoundEvent, GiftWrappingConfigurationEvent, GotMysteryBoxPrizeMessageEvent, GoToFlatMessageComposer, GroupAdminGiveComposer, GroupAdminTakeComposer, GroupBadgePartsComposer, GroupBadgePartsEvent, GroupBuyComposer, GroupBuyDataComposer, GroupBuyDataEvent, GroupConfirmMemberRemoveEvent, GroupConfirmRemoveMemberComposer, GroupDeleteComposer, GroupDetailsChangedMessageEvent, GroupFavoriteComposer, GroupFurniContextMenuInfoMessageEvent, GroupInformationComposer, GroupInformationEvent, GroupJoinComposer, GroupMembersComposer, GroupMembersEvent, GroupMembershipAcceptComposer, GroupMembershipDeclineComposer, GroupMembershipRequestedMessageEvent, GroupPurchasedEvent, GroupRemoveMemberComposer, GroupSaveBadgeComposer, GroupSaveColorsComposer, GroupSaveInformationComposer, GroupSavePreferencesComposer, GroupSettingsComposer, GroupSettingsEvent, GroupUnfavoriteComposer, GuestRoomSearchResultEvent, GuideOnDutyStatusMessageEvent, GuideReportingStatusMessageEvent, GuideSessionAttachedMessageEvent, GuideSessionCreateMessageComposer, GuideSessionDetachedMessageEvent, GuideSessionEndedMessageEvent, GuideSessionErrorMessageEvent, GuideSessionFeedbackMessageComposer, GuideSessionGetRequesterRoomMessageComposer, GuideSessionGuideDecidesMessageComposer, GuideSessionInvitedToGuideRoomMessageEvent, GuideSessionInviteRequesterMessageComposer, GuideSessionIsTypingMessageComposer, GuideSessionMessageMessageComposer, GuideSessionMessageMessageEvent, GuideSessionOnDutyUpdateMessageComposer, GuideSessionPartnerIsTypingMessageEvent, GuideSessionReportMessageComposer, GuideSessionRequesterCancelsMessageComposer, GuideSessionRequesterRoomMessageEvent, GuideSessionResolvedMessageComposer, GuideSessionStartedMessageEvent, GuideTicketCreationResultMessageEvent, GuideTicketResolutionMessageEvent, GuildBaseSearchMessageComposer, GuildEditFailedMessageEvent, GuildForumThreadsEvent, GuildMemberMgmtFailedMessageEvent, GuildMembershipsMessageEvent, HabboBroadcastMessageEvent, HabboClubExtendOfferMessageEvent, HabboClubOffersMessageEvent, HabboGroupBadgesMessageEvent, HabboGroupDeactivatedMessageEvent, HabboGroupJoinFailedMessageEvent, HabboSearchComposer, HabboSearchResultEvent, HarvestPetMessageComposer, HotelClosedAndOpensEvent, HotelClosesAndWillOpenAtEvent, HotelMergeNameChangeEvent, HotelWillCloseInMinutesEvent, IdentityAccountsEvent, IgnoredUsersEvent, IgnoreResultEvent, IgnoreUserComposer, IgnoreUserIdComposer, InClientLinkEvent, IncomingHeader, InfoFeedEnableMessageEvent, InfoRetrieveMessageComposer, InitCameraMessageEvent, InitDiffieHandshakeEvent, InitDiffieHandshakeMessageComposer, InstantMessageErrorEvent, InterstitialMessageEvent, InterstitialShownMessageComposer, IsBadgeRequestFulfilledEvent, IsOfferGiftableMessageEvent, IssueCloseNotificationMessageEvent, IssueDeletedMessageEvent, IssueInfoMessageEvent, IssuePickFailedMessageEvent, IsUserPartOfCompetitionMessageEvent, ItemDataUpdateMessageEvent, JoinedQueueMessageEvent, JoiningQueueFailedMessageEvent, JoinQueueMessageComposer, JukeboxPlayListFullMessageEvent, JukeboxSongDisksMessageEvent, LagWarningReportMessageComposer, LeaveQueueMessageComposer, LeftQueueMessageEvent, LimitedEditionSoldOutEvent, LimitedOfferAppearingNextMessageEvent, LoadGameMessageEvent, LoadGameUrlEvent, LoveLockFurniFinishedEvent, LoveLockFurniFriendConfirmedEvent, LoveLockFurniStartEvent, MaintenanceStatusMessageEvent, MakeOfferMessageComposer, MarkCatalogNewAdditionsPageOpenedComposer, MarketplaceBuyOfferResultEvent, MarketplaceCancelOfferResultEvent, MarketplaceCanMakeOfferResult, MarketplaceConfigurationEvent, MarketplaceItemStatsEvent, MarketplaceMakeOfferResult, MarketPlaceOffersEvent, MarketplaceOwnOffersEvent, MessageErrorEvent, MessengerInitComposer, MessengerInitEvent, MiniMailNewMessageEvent, MiniMailUnreadCountEvent, ModAlertMessageComposer, ModBanMessageComposer, ModerateMessageMessageComposer, ModerateRoomMessageComposer, ModerateThreadMessageComposer, ModeratorActionMessageComposer, ModeratorActionResultMessageEvent, ModeratorCautionEvent, ModeratorInitMessageEvent, ModeratorMessageEvent, ModeratorRoomInfoEvent, ModeratorToolPreferencesEvent, ModeratorUserInfoEvent, ModKickMessageComposer, ModMessageMessageComposer, ModMuteMessageComposer, ModToolPreferencesComposer, ModToolSanctionComposer, ModTradingLockMessageComposer, MoodlightSettingsComposer, MoodlightSettingsSaveComposer, MoodlightTogggleStateComposer, MOTDNotificationEvent, MuteAllInRoomEvent, MyFavouriteRoomsSearchMessageComposer, MyFrequentRoomHistorySearchMessageComposer, MyFriendsRoomsSearchMessageComposer, MyGuildBasesSearchMessageComposer, MyRecommendedRoomsMessageComposer, MyRoomHistorySearchMessageComposer, MyRoomRightsSearchMessageComposer, MyRoomsSearchMessageComposer, MysteryBoxKeysEvent, MysteryBoxWaitingCanceledMessageComposer, NavigatorCategoryListModeComposer, NavigatorCollapsedEvent, NavigatorDeleteSavedSearchComposer, NavigatorHomeRoomEvent, NavigatorInitComposer, NavigatorLiftedEvent, NavigatorMetadataEvent, NavigatorOpenRoomCreatorEvent, NavigatorSearchCloseComposer, NavigatorSearchComposer, NavigatorSearchesEvent, NavigatorSearchEvent, NavigatorSearchOpenComposer, NavigatorSearchSaveComposer, NavigatorSettingsEvent, NavigatorSettingsSaveComposer, NewConsoleMessageEvent, NewFriendRequestEvent, NewUserExperienceGetGiftsComposer, NewUserExperienceGiftOfferMessageEvent, NewUserExperienceNotCompleteEvent, NewUserExperienceScriptProceedComposer, NoobnessLevelMessageEvent, NoOwnedRoomsAlertMessageEvent, NoSuchFlatEvent, NotEnoughBalanceMessageEvent, NotificationDialogMessageEvent, NowPlayingMessageEvent, ObjectsDataUpdateEvent, ObjectsRollingEvent, OfferRewardDeliveredMessageEvent, OfficialSongIdMessageEvent, OneWayDoorStatusMessageEvent, OpenCampaignCalendarDoorAsStaffComposer, OpenCampaignCalendarDoorComposer, OpenMessageComposer, OpenMysteryTrophyMessageComposer, OpenPetPackageMessageComposer, OpenPetPackageRequestedMessageEvent, OpenPetPackageResultMessageEvent, OpenPresentComposer, OpenQuestTrackerMessageComposer, OpenWelcomeGiftComposer, OutgoingHeader, PeerUsersClassificationMessageComposer, PerformanceLogMessageComposer, PerkAllowancesMessageEvent, PetAddedToInventoryEvent, PetBreedingResultEvent, PetExperienceEvent, PetFigureUpdateEvent, PetInfoEvent, PetInventoryEvent, PetLevelNotificationEvent, PetLevelUpdateMessageEvent, PetMountComposer, PetMoveComposer, PetPlaceComposer, PetPlacingErrorEvent, PetReceivedMessageEvent, PetRemoveComposer, PetRemovedFromInventory, PetRespectComposer, PetRespectNoficationEvent, PetScratchFailedMessageEvent, PetSelectedMessageComposer, PetStatusUpdateEvent, PetSupplementComposer, PetSupplementedNotificationEvent, PetTrainingPanelMessageEvent, PhoneCollectionStateMessageEvent, PhotoCompetitionMessageComposer, PickIssuesMessageComposer, PlayListMessageEvent, PlayListSongAddedMessageEvent, PollAnswerComposer, PollContentsEvent, PollErrorEvent, PollOfferEvent, PollRejectComposer, PollStartComposer, PongMessageComposer, PopularRoomsSearchMessageComposer, PopularRoomTagsResultEvent, PostMessageMessageComposer, PostMessageMessageEvent, PostQuizAnswersComposer, PostThreadMessageEvent, PresentOpenedMessageEvent, ProductOfferEvent, PromoArticlesMessageEvent, PublishPhotoMessageComposer, PurchaseBasicMembershipExtensionComposer, PurchaseErrorMessageEvent, PurchaseFromCatalogAsGiftComposer, PurchaseFromCatalogComposer, PurchaseNotAllowedMessageEvent, PurchaseOKMessageEvent, PurchasePhotoMessageComposer, PurchaseRoomAdMessageComposer, PurchaseTargetedOfferComposer, PurchaseVipMembershipExtensionComposer, QuestCancelledMessageEvent, QuestCompletedMessageEvent, QuestDailyMessageEvent, QuestionAnsweredEvent, QuestionEvent, QuestionFinishedEvent, QuestMessageEvent, QuestsMessageEvent, QuizDataMessageEvent, QuizResultsMessageEvent, RateFlatMessageComposer, RecycleItemsMessageComposer, RecyclerFinishedMessageEvent, RecyclerStatusMessageEvent, RedeemCommunityGoalPrizeMessageComposer, RedeemItemClothingComposer, RedeemMarketplaceOfferCreditsMessageComposer, RedeemVoucherMessageComposer, RejectQuestMessageComposer, RelationshipStatusInfoEvent, ReleaseIssuesMessageComposer, RemainingMuteEvent, RemoveAllRightsMessageComposer, RemoveFriendComposer, RemoveJukeboxDiskComposer, RemoveOwnRoomRightsRoomMessageComposer, RemovePetSaddleComposer, RemoveWallItemComposer, RenderRoomMessageComposer, RenderRoomThumbnailMessageComposer, RentableSpaceCancelRentMessageComposer, RentableSpaceRentFailedMessageEvent, RentableSpaceRentMessageComposer, RentableSpaceRentOkMessageEvent, RentableSpaceStatusMessageComposer, RentableSpaceStatusMessageEvent, RequestABadgeComposer, RequestAchievementsMessageComposer, RequestBadgesComposer, RequestBotCommandConfigurationComposer, RequestCameraConfigurationComposer, RequestFriendComposer, RequestFurniInventoryWhenNotInRoomComposer, RequestPetInfoComposer, RequestPetsComposer, RequestSpamWallPostItMessageEvent, ResetPhoneNumberStateMessageComposer, ResetResolutionAchievementMessageComposer, RespectReceivedEvent, RestoreClientMessageEvent, RoomAdErrorEvent, RoomAdEventTabAdClickedComposer, RoomAdEventTabViewedComposer, RoomAdPurchaseInfoEvent, RoomAdPurchaseInitiatedComposer, RoomAdSearchMessageComposer, RoomAmbassadorAlertComposer, RoomBannedUsersComposer, RoomBanUserComposer, RoomChatlogEvent, RoomChatSettingsEvent, RoomCompetitionInitMessageComposer, RoomDeleteComposer, RoomDimmerPresetsEvent, RoomDoorbellAcceptedEvent, RoomDoorbellAccessComposer, RoomEnterComposer, RoomEnterErrorEvent, RoomEnterEvent, RoomEntryInfoMessageEvent, RoomEntryTileMessageEvent, RoomEventCancelEvent, RoomEventEvent, RoomFilterSettingsMessageEvent, RoomForwardEvent, RoomGiveRightsComposer, RoomHeightMapEvent, RoomHeightMapUpdateEvent, RoomInviteErrorEvent, RoomInviteEvent, RoomKickUserComposer, RoomMessageNotificationMessageEvent, RoomMuteComposer, RoomMuteUserComposer, RoomNetworkOpenConnectionMessageComposer, RoomOccupiedTilesMessageEvent, RoomPaintEvent, RoomPollResultEvent, RoomReadyMessageEvent, RoomRightsClearEvent, RoomRightsEvent, RoomRightsOwnerEvent, RoomScoreEvent, RoomSettingsComposer, RoomSettingsDataEvent, RoomSettingsErrorEvent, RoomSettingsSavedEvent, RoomSettingsSaveErrorEvent, RoomSettingsUpdatedEvent, RoomsWhereMyFriendsAreSearchMessageComposer, RoomsWithHighestScoreSearchMessageComposer, RoomTakeRightsComposer, RoomTextSearchMessageComposer, RoomThumbnailUpdateResultEvent, RoomUnbanUserComposer, RoomUnitActionComposer, RoomUnitBackgroundComposer, RoomUnitChatComposer, RoomUnitChatEvent, RoomUnitChatShoutComposer, RoomUnitChatShoutEvent, RoomUnitChatStyleComposer, RoomUnitChatWhisperComposer, RoomUnitChatWhisperEvent, RoomUnitDanceComposer, RoomUnitDanceEvent, RoomUnitDropHandItemComposer, RoomUnitEffectEvent, RoomUnitEvent, RoomUnitExpressionEvent, RoomUnitGiveHandItemComposer, RoomUnitGiveHandItemPetComposer, RoomUnitHandItemEvent, RoomUnitHandItemReceivedEvent, RoomUnitIdleEvent, RoomUnitInfoEvent, RoomUnitLookComposer, RoomUnitNumberEvent, RoomUnitPostureComposer, RoomUnitRemoveEvent, RoomUnitSignComposer, RoomUnitStatusEvent, RoomUnitTypingEvent, RoomUnitTypingStartComposer, RoomUnitTypingStopComposer, RoomUnitWalkComposer, RoomUsersClassificationMessageComposer, RoomUsersWithRightsComposer, RoomVisitsEvent, RoomVisualizationSettingsEvent, SanctionStatusEvent, SaveRoomSettingsComposer, SaveWardrobeOutfitMessageComposer, ScrGetKickbackInfoMessageComposer, ScrSendKickbackInfoMessageEvent, SearchFaqsMessageComposer, SeasonalCalendarDailyOfferMessageEvent, SeasonalQuestsMessageEvent, SecondsUntilMessageEvent, SelectClubGiftComposer, SellablePetPalettesMessageEvent, SendMessageComposer, SendRoomInviteComposer, SetActivatedBadgesComposer, SetClothingChangeDataMessageComposer, SetItemDataMessageComposer, SetObjectDataMessageComposer, SetPhoneNumberVerificationStatusMessageComposer, SetRelationshipStatusComposer, SetRoomSessionTagsMessageComposer, SetTargetedOfferStateComposer, SetYoutubeDisplayPlaylistMessageComposer, ShopTargetedOfferViewedComposer, ShowEnforceRoomCategoryDialogEvent, ShowMysteryBoxWaitMessageEvent, SimpleAlertMessageEvent, SSOTicketMessageComposer, StartCampaignMessageComposer, StartRoomPollEvent, SubmitRoomToCompetitionMessageComposer, TalentLevelUpEvent, TalentTrackComposer, TalentTrackLevelMessageEvent, TalentTrackMessageEvent, TargetedOfferEvent, TargetedOfferNotFoundEvent, ThreadMessagesMessageEvent, ThumbnailStatusMessageEvent, TogglePetBreedingComposer, TogglePetRidingComposer, ToggleStaffPickMessageComposer, TradingAcceptComposer, TradingAcceptEvent, TradingCancelComposer, TradingCloseComposer, TradingCloseEvent, TradingCompletedEvent, TradingConfirmationComposer, TradingConfirmationEvent, TradingListAddItemComposer, TradingListAddItemsComposer, TradingListItemEvent, TradingListItemRemoveComposer, TradingNoSuchItemEvent, TradingNotOpenEvent, TradingOpenComposer, TradingOpenEvent, TradingOpenFailedEvent, TradingOtherNotAllowedEvent, TradingUnacceptComposer, TradingYouAreNotAllowedEvent, TraxSongInfoMessageEvent, TryPhoneNumberMessageComposer, TryPhoneNumberResultMessageEvent, TryVerificationCodeResultMessageEvent, UnblockGroupMemberMessageComposer, UnignoreUserComposer, UniqueIDMessageComposer, UnloadGameMessageEvent, UnreadForumsCountMessageEvent, UnseenItemsEvent, UnseenResetCategoryComposer, UnseenResetItemsComposer, UpdateActionMessageComposer, UpdateConditionMessageComposer, UpdateFloorPropertiesMessageComposer, UpdateForumReadMarkerMessageComposer, UpdateForumSettingsMessageComposer, UpdateFurniturePositionComposer, UpdateHomeRoomMessageComposer, UpdateMessageMessageEvent, UpdateRoomCategoryAndTradeSettingsComposer, UpdateRoomFilterMessageComposer, UpdateRoomThumbnailMessageComposer, UpdateThreadMessageComposer, UpdateThreadMessageEvent, UpdateTriggerMessageComposer, UsePetProductComposer, UserBannedMessageEvent, UserChatlogEvent, UserClassificationMessageEvent, UserCreditsEvent, UserCurrencyComposer, UserCurrencyEvent, UserCurrentBadgesComposer, UserCurrentBadgesEvent, UserEventCatsEvent, UserFigureComposer, UserFlatCatsEvent, UserGameAchievementsMessageEvent, UserInfoEvent, UserMottoComposer, UserNameChangeMessageEvent, UserPermissionsEvent, UserProfileComposer, UserProfileEvent, UserRelationshipsComposer, UserRespectComposer, UserSettingsCameraFollowComposer, UserSettingsEvent, UserSettingsOldChatComposer, UserSettingsRoomInvitesComposer, UserSettingsSoundComposer, UserSongDisksInventoryMessageEvent, UserSubscriptionComposer, UserSubscriptionEvent, UserTagsMessageEvent, UserUnbannedFromRoomEvent, UserWardrobePageEvent, VerifyCodeMessageComposer, VersionCheckMessageComposer, VisitUserComposer, VoteForRoomMessageComposer, VotePollCounterMessageComposer, VoucherRedeemErrorMessageEvent, VoucherRedeemOkMessageEvent, WardrobeMessageEvent, WeeklyCompetitiveFriendsLeaderboardEvent, WeeklyCompetitiveLeaderboardEvent, WeeklyGameRewardEvent, WeeklyGameRewardWinnersEvent, WelcomeGiftChangeEmailComposer, WelcomeGiftChangeEmailResultEvent, WelcomeGiftStatusEvent, WiredFurniActionEvent, WiredFurniConditionEvent, WiredFurniTriggerEvent, WiredOpenEvent, WiredRewardResultMessageEvent, WiredSaveSuccessEvent, WiredValidationErrorEvent, YouArePlayingGameEvent, YouAreSpectatorMessageEvent, YoutubeControlVideoMessageEvent, YoutubeDisplayPlaylistsEvent, YoutubeDisplayVideoMessageEvent, ClickUserMessageComposer } from './messages'; import { AcceptFriendMessageComposer, AcceptFriendResultEvent, AcceptGameInviteMessageComposer, AcceptQuestMessageComposer, AccountSafetyLockStatusChangeMessageEvent, AchievementEvent, AchievementNotificationMessageEvent, AchievementResolutionCompletedMessageEvent, AchievementResolutionProgressMessageEvent, AchievementResolutionsMessageEvent, AchievementsEvent, AchievementsScoreEvent, ActivateQuestMessageComposer, ActivityPointNotificationMessageEvent, AddFavouriteRoomMessageComposer, AddJukeboxDiskComposer, AddSpamWallPostItMessageComposer, ApplySnapshotMessageComposer, ApplyTonerComposer, ApproveAllMembershipRequestsMessageComposer, ApproveNameMessageComposer, ApproveNameMessageEvent, AreaHideMessageEvent, AuthenticatedEvent, AuthenticationMessageComposer, AvailabilityStatusMessageEvent, AvailabilityTimeMessageEvent, AvailableCommandsEvent, AvatarEffectActivatedComposer, AvatarEffectActivatedEvent, AvatarEffectAddedEvent, AvatarEffectExpiredEvent, AvatarEffectSelectedComposer, AvatarEffectSelectedEvent, AvatarEffectsEvent, BadgePointLimitsEvent, BadgeReceivedEvent, BadgesEvent, BannedUsersFromRoomEvent, BonusRareInfoMessageEvent, BotAddedToInventoryEvent, BotCommandConfigurationEvent, BotErrorEvent, BotForceOpenContextMenuEvent, BotInventoryMessageEvent, BotPlaceComposer, BotReceivedMessageEvent, BotRemoveComposer, BotRemovedFromInventoryEvent, BotSkillListUpdateEvent, BotSkillSaveComposer, BreedPetsMessageComposer, BuildersClubFurniCountMessageEvent, BuildersClubPlaceRoomItemMessageComposer, BuildersClubPlaceWallItemMessageComposer, BuildersClubQueryFurniCountMessageComposer, BuildersClubSubscriptionStatusMessageEvent, BundleDiscountRulesetMessageEvent, BuyMarketplaceOfferMessageComposer, BuyMarketplaceTokensMessageComposer, CallForHelpDisabledNotifyMessageEvent, CallForHelpFromForumMessageMessageComposer, CallForHelpFromForumThreadMessageComposer, CallForHelpFromIMMessageComposer, CallForHelpFromPhotoMessageComposer, CallForHelpFromSelfieMessageComposer, CallForHelpMessageComposer, CallForHelpPendingCallsDeletedMessageEvent, CallForHelpPendingCallsMessageEvent, CallForHelpReplyMessageEvent, CallForHelpResultMessageEvent, CameraPublishStatusMessageEvent, CameraPurchaseOKMessageEvent, CameraSnapshotMessageEvent, CameraStorageUrlMessageEvent, CampaignCalendarDataMessageEvent, CampaignCalendarDoorOpenedMessageEvent, CancelEventMessageComposer, CancelMarketplaceOfferMessageComposer, CancelMysteryBoxWaitMessageEvent, CancelPetBreedingComposer, CancelQuestMessageComposer, CanCreateRoomEvent, CanCreateRoomEventEvent, CanCreateRoomMessageComposer, CatalogAdminCreateOfferComposer, CatalogAdminCreatePageComposer, CatalogAdminDeleteOfferComposer, CatalogAdminDeletePageComposer, CatalogAdminMoveOfferComposer, CatalogAdminMovePageComposer, CatalogAdminPublishComposer, CatalogAdminResultEvent, CatalogAdminSaveOfferComposer, CatalogAdminSavePageComposer, CatalogGroupsComposer, CatalogPageExpirationEvent, CatalogPageMessageEvent, CatalogPagesListEvent, CatalogPageWithEarliestExpiryMessageEvent, CatalogPublishedMessageEvent, CategoriesWithVisitorCountEvent, CfhChatlogEvent, CfhSanctionMessageEvent, CfhTopicsInitEvent, ChangeEmailComposer, ChangeEmailResultEvent, ChangeQueueMessageComposer, ChangeUserNameMessageComposer, ChangeUserNameResultMessageEvent, ChatReviewGuideDecidesOnOfferMessageComposer, ChatReviewGuideDetachedMessageComposer, ChatReviewGuideVoteMessageComposer, ChatReviewSessionCreateMessageComposer, ChatReviewSessionDetachedMessageEvent, ChatReviewSessionOfferedToGuideMessageEvent, ChatReviewSessionResultsMessageEvent, ChatReviewSessionStartedMessageEvent, ChatReviewSessionVotingStatusMessageEvent, CheckUserNameMessageComposer, CheckUserNameResultMessageEvent, ClickFurniMessageComposer, ClientHelloMessageComposer, ClientPingEvent, CloseIssueDefaultActionMessageComposer, CloseIssuesMessageComposer, ClubGiftInfoEvent, ClubGiftNotificationEvent, ClubGiftSelectedEvent, CommunityGoalEarnedPrizesMessageEvent, CommunityGoalHallOfFameMessageEvent, CommunityGoalProgressMessageEvent, CommunityGoalVoteMessageComposer, CommunityGoalVoteMessageEvent, CompetitionEntrySubmitResultEvent, CompetitionRoomsDataMessageEvent, CompetitionRoomsSearchMessageComposer, CompetitionStatusMessageEvent, CompetitionVotingInfoMessageEvent, CompleteDiffieHandshakeEvent, CompleteDiffieHandshakeMessageComposer, CompostPlantMessageComposer, ConcurrentUsersGoalProgressMessageEvent, ConfirmPetBreedingComposer, ConnectionErrorEvent, ControlYoutubeDisplayPlaybackMessageComposer, ConvertedRoomIdEvent, ConvertGlobalRoomIdMessageComposer, CraftableProductsEvent, CraftComposer, CraftingRecipeEvent, CraftingRecipesAvailableEvent, CraftingResultEvent, CraftSecretComposer, CreateFlatMessageComposer, CurrentTimingCodeMessageEvent, CustomUserNotificationMessageEvent, DeclineFriendMessageComposer, DefaultSanctionMessageComposer, DeleteBadgeMessageComposer, DeleteFavouriteRoomMessageComposer, DeleteItemMessageComposer, DeletePendingCallsForHelpMessageComposer, DeletePetMessageComposer, DesktopViewComposer, DesktopViewEvent, DiceValueMessageEvent, DirectSMSClubBuyAvailableMessageEvent, DisconnectMessageComposer, DisconnectReasonEvent, DoorbellMessageEvent, EditEventMessageComposer, ElementPointerMessageEvent, EmailStatusResultEvent, EpicPopupMessageEvent, ExtendedProfileChangedMessageEvent, ExtendRentOrBuyoutFurniMessageComposer, ExtendRentOrBuyoutStripItemMessageComposer, FavoriteMembershipUpdateMessageEvent, FavouriteChangedEvent, FavouritesEvent, FigureSetIdsMessageEvent, FigureUpdateEvent, FindFriendsProcessResultEvent, FindNewFriendsMessageComposer, FireworkChargeDataEvent, FlatAccessDeniedMessageEvent, FlatControllerAddedEvent, FlatControllerRemovedEvent, FlatControllersEvent, FlatCreatedEvent, FloodControlEvent, FloorHeightMapEvent, FollowFriendFailedEvent, FollowFriendMessageComposer, ForumDataMessageEvent, ForumsListMessageEvent, ForwardToACompetitionRoomMessageComposer, ForwardToARandomPromotedRoomMessageComposer, ForwardToASubmittableRoomMessageComposer, ForwardToRandomCompetitionRoomMessageComposer, ForwardToSomeRoomMessageComposer, FriendFurniConfirmLockMessageComposer, FriendListFragmentEvent, FriendListUpdateComposer, FriendListUpdateEvent, FriendNotificationEvent, FriendRequestQuestCompleteMessageComposer, FriendRequestsEvent, FurniRentOrBuyoutOfferMessageEvent, FurnitureAliasesComposer, FurnitureAliasesEvent, FurnitureColorWheelComposer, FurnitureDataEvent, FurnitureDiceActivateComposer, FurnitureDiceDeactivateComposer, FurnitureExchangeComposer, FurnitureFloorAddEvent, FurnitureFloorEvent, FurnitureFloorRemoveEvent, FurnitureFloorUpdateComposer, FurnitureFloorUpdateEvent, FurnitureGroupInfoComposer, FurnitureListAddOrUpdateEvent, FurnitureListComposer, FurnitureListEvent, FurnitureListInvalidateEvent, FurnitureListRemovedEvent, FurnitureMannequinSaveLookComposer, FurnitureMannequinSaveNameComposer, FurnitureMultiStateComposer, FurnitureOneWayDoorComposer, FurniturePickupAllComposer, FurniturePickupComposer, FurniturePlaceComposer, FurniturePlacePaintComposer, FurniturePostItPlaceComposer, FurniturePostItPlacedEvent, FurnitureRandomStateComposer, FurnitureStackHeightComposer, FurnitureStackHeightEvent, FurnitureWallAddEvent, FurnitureWallEvent, FurnitureWallMultiStateComposer, FurnitureWallRemoveEvent, FurnitureWallUpdateComposer, FurnitureWallUpdateEvent, Game2AccountGameStatusMessageEvent, Game2CheckGameDirectoryStatusMessageComposer, Game2ExitGameMessageComposer, Game2GameChatMessageComposer, Game2GameDirectoryStatusMessageEvent, Game2GetAccountGameStatusMessageComposer, Game2GetWeeklyFriendsLeaderboardComposer, Game2GetWeeklyLeaderboardComposer, Game2InArenaQueueMessageEvent, Game2JoiningGameFailedMessageEvent, Game2LoadStageReadyMessageComposer, Game2PlayAgainMessageComposer, Game2RequestFullStatusUpdateMessageComposer, Game2StartingGameFailedMessageEvent, Game2StopCounterMessageEvent, Game2UserLeftGameMessageEvent, Game2WeeklyFriendsLeaderboardEvent, Game2WeeklyLeaderboardEvent, GameAchievementsMessageEvent, GameInviteMessageEvent, GameListMessageEvent, GameStatusMessageEvent, GameUnloadedMessageComposer, GenericErrorEvent, GetBadgePointLimitsComposer, GetBonusRareInfoMessageComposer, GetBotInventoryComposer, GetBundleDiscountRulesetComposer, GetCatalogIndexComposer, GetCatalogPageComposer, GetCatalogPageExpirationComposer, GetCatalogPageWithEarliestExpiryComposer, GetCategoriesWithUserCountMessageComposer, GetCfhChatlogMessageComposer, GetCfhStatusMessageComposer, GetClubGiftInfo, GetClubOffersMessageComposer, GetCommunityGoalEarnedPrizesMessageComposer, GetCommunityGoalHallOfFameMessageComposer, GetCommunityGoalProgressMessageComposer, GetConcurrentUsersGoalProgressMessageComposer, GetConcurrentUsersRewardMessageComposer, GetCraftableProductsComposer, GetCraftingRecipeComposer, GetCraftingRecipesAvailableComposer, GetCurrentTimingCodeMessageComposer, GetCustomRoomFilterMessageComposer, GetDailyQuestMessageComposer, GetDirectClubBuyAvailableComposer, GetEmailStatusComposer, GetExtendedProfileByNameMessageComposer, GetFaqCategoryMessageComposer, GetFaqTextMessageComposer, GetForumsListMessageComposer, GetForumStatsMessageComposer, GetFriendRequestsComposer, GetGameAchievementsMessageComposer, GetGameListMessageComposer, GetGameStatusMessageComposer, GetGiftMessageComposer, GetGiftWrappingConfigurationComposer, GetGuestRoomMessageComposer, GetGuestRoomResultEvent, GetGuideReportingStatusMessageComposer, GetHabboBasicMembershipExtendOfferComposer, GetHabboClubExtendOfferMessageComposer, GetHabboGroupBadgesMessageComposer, GetIgnoredUsersComposer, GetInterstitialMessageComposer, GetIsBadgeRequestFulfilledComposer, GetIsOfferGiftableComposer, GetIsUserPartOfCompetitionMessageComposer, GetItemDataComposer, GetJukeboxPlayListMessageComposer, GetLimitedOfferAppearingNextComposer, GetMarketplaceCanMakeOfferComposer, GetMarketplaceConfigurationMessageComposer, GetMarketplaceItemStatsComposer, GetMarketplaceOffersMessageComposer, GetMarketplaceOwnOffersMessageComposer, GetMessagesMessageComposer, GetModeratorRoomInfoMessageComposer, GetModeratorUserInfoMessageComposer, GetNextTargetedOfferComposer, GetNowPlayingMessageComposer, GetOccupiedTilesMessageComposer, GetOfficialRoomsMessageComposer, GetOfficialSongIdMessageComposer, GetPendingCallsForHelpMessageComposer, GetPetCommandsComposer, GetPopularRoomTagsMessageComposer, GetProductOfferComposer, GetPromoArticlesComposer, GetQuestsMessageComposer, GetQuizQuestionsComposer, GetRecyclerStatusMessageComposer, GetRentOrBuyoutOfferMessageComposer, GetResolutionAchievementsMessageComposer, GetRoomAdPurchaseInfoComposer, GetRoomChatlogMessageComposer, GetRoomEntryDataMessageComposer, GetRoomEntryTileMessageComposer, GetRoomVisitsMessageComposer, GetSeasonalCalendarDailyOfferComposer, GetSeasonalQuestsOnlyMessageComposer, GetSecondsUntilMessageComposer, GetSellablePetPalettesComposer, GetSongInfoMessageComposer, GetSoundMachinePlayListMessageComposer, GetSoundSettingsComposer, GetTalentTrackLevelMessageComposer, GetTargetedOfferComposer, GetThreadMessageComposer, GetThreadsMessageComposer, GetUnreadForumsCountMessageComposer, GetUserChatlogMessageComposer, GetUserEventCatsMessageComposer, GetUserFlatCatsMessageComposer, GetUserGameAchievementsMessageComposer, GetUserSongDisksMessageComposer, GetUserTagsComposer, GetWardrobeMessageComposer, GetWeeklyGameRewardComposer, GetWeeklyGameRewardWinnersComposer, GetYoutubeDisplayStatusMessageComposer, GiftReceiverNotFoundEvent, GiftWrappingConfigurationEvent, GotMysteryBoxPrizeMessageEvent, GoToFlatMessageComposer, GroupAdminGiveComposer, GroupAdminTakeComposer, GroupBadgePartsComposer, GroupBadgePartsEvent, GroupBuyComposer, GroupBuyDataComposer, GroupBuyDataEvent, GroupConfirmMemberRemoveEvent, GroupConfirmRemoveMemberComposer, GroupDeleteComposer, GroupDetailsChangedMessageEvent, GroupFavoriteComposer, GroupFurniContextMenuInfoMessageEvent, GroupInformationComposer, GroupInformationEvent, GroupJoinComposer, GroupMembersComposer, GroupMembersEvent, GroupMembershipAcceptComposer, GroupMembershipDeclineComposer, GroupMembershipRequestedMessageEvent, GroupPurchasedEvent, GroupRemoveMemberComposer, GroupSaveBadgeComposer, GroupSaveColorsComposer, GroupSaveInformationComposer, GroupSavePreferencesComposer, GroupSettingsComposer, GroupSettingsEvent, GroupUnfavoriteComposer, GuestRoomSearchResultEvent, GuideOnDutyStatusMessageEvent, GuideReportingStatusMessageEvent, GuideSessionAttachedMessageEvent, GuideSessionCreateMessageComposer, GuideSessionDetachedMessageEvent, GuideSessionEndedMessageEvent, GuideSessionErrorMessageEvent, GuideSessionFeedbackMessageComposer, GuideSessionGetRequesterRoomMessageComposer, GuideSessionGuideDecidesMessageComposer, GuideSessionInvitedToGuideRoomMessageEvent, GuideSessionInviteRequesterMessageComposer, GuideSessionIsTypingMessageComposer, GuideSessionMessageMessageComposer, GuideSessionMessageMessageEvent, GuideSessionOnDutyUpdateMessageComposer, GuideSessionPartnerIsTypingMessageEvent, GuideSessionReportMessageComposer, GuideSessionRequesterCancelsMessageComposer, GuideSessionRequesterRoomMessageEvent, GuideSessionResolvedMessageComposer, GuideSessionStartedMessageEvent, GuideTicketCreationResultMessageEvent, GuideTicketResolutionMessageEvent, GuildBaseSearchMessageComposer, GuildEditFailedMessageEvent, GuildForumThreadsEvent, GuildMemberMgmtFailedMessageEvent, GuildMembershipsMessageEvent, HabboBroadcastMessageEvent, HabboClubExtendOfferMessageEvent, HabboClubOffersMessageEvent, HabboGroupBadgesMessageEvent, HabboGroupDeactivatedMessageEvent, HabboGroupJoinFailedMessageEvent, HabboSearchComposer, HabboSearchResultEvent, HarvestPetMessageComposer, HotelClosedAndOpensEvent, HotelClosesAndWillOpenAtEvent, HotelMergeNameChangeEvent, HotelWillCloseInMinutesEvent, IdentityAccountsEvent, IgnoredUsersEvent, IgnoreResultEvent, IgnoreUserComposer, IgnoreUserIdComposer, InClientLinkEvent, IncomingHeader, InfoFeedEnableMessageEvent, InfoRetrieveMessageComposer, InitCameraMessageEvent, InitDiffieHandshakeEvent, InitDiffieHandshakeMessageComposer, InstantMessageErrorEvent, InterstitialMessageEvent, InterstitialShownMessageComposer, IsBadgeRequestFulfilledEvent, IsOfferGiftableMessageEvent, IssueCloseNotificationMessageEvent, IssueDeletedMessageEvent, IssueInfoMessageEvent, IssuePickFailedMessageEvent, IsUserPartOfCompetitionMessageEvent, ItemDataUpdateMessageEvent, JoinedQueueMessageEvent, JoiningQueueFailedMessageEvent, JoinQueueMessageComposer, JukeboxPlayListFullMessageEvent, JukeboxSongDisksMessageEvent, LagWarningReportMessageComposer, LeaveQueueMessageComposer, LeftQueueMessageEvent, LimitedEditionSoldOutEvent, LimitedOfferAppearingNextMessageEvent, LoadGameMessageEvent, LoadGameUrlEvent, LoveLockFurniFinishedEvent, LoveLockFurniFriendConfirmedEvent, LoveLockFurniStartEvent, MaintenanceStatusMessageEvent, MakeOfferMessageComposer, MarkCatalogNewAdditionsPageOpenedComposer, MarketplaceBuyOfferResultEvent, MarketplaceCancelOfferResultEvent, MarketplaceCanMakeOfferResult, MarketplaceConfigurationEvent, MarketplaceItemStatsEvent, MarketplaceMakeOfferResult, MarketPlaceOffersEvent, MarketplaceOwnOffersEvent, MessageErrorEvent, MessengerInitComposer, MessengerInitEvent, MiniMailNewMessageEvent, MiniMailUnreadCountEvent, ModAlertMessageComposer, ModBanMessageComposer, ModerateMessageMessageComposer, ModerateRoomMessageComposer, ModerateThreadMessageComposer, ModeratorActionMessageComposer, ModeratorActionResultMessageEvent, ModeratorCautionEvent, ModeratorInitMessageEvent, ModeratorMessageEvent, ModeratorRoomInfoEvent, ModeratorToolPreferencesEvent, ModeratorUserInfoEvent, ModKickMessageComposer, ModMessageMessageComposer, ModMuteMessageComposer, ModToolPreferencesComposer, ModToolSanctionComposer, ModTradingLockMessageComposer, MoodlightSettingsComposer, MoodlightSettingsSaveComposer, MoodlightTogggleStateComposer, MOTDNotificationEvent, MuteAllInRoomEvent, MyFavouriteRoomsSearchMessageComposer, MyFrequentRoomHistorySearchMessageComposer, MyFriendsRoomsSearchMessageComposer, MyGuildBasesSearchMessageComposer, MyRecommendedRoomsMessageComposer, MyRoomHistorySearchMessageComposer, MyRoomRightsSearchMessageComposer, MyRoomsSearchMessageComposer, MysteryBoxKeysEvent, MysteryBoxWaitingCanceledMessageComposer, NavigatorCategoryListModeComposer, NavigatorCollapsedEvent, NavigatorDeleteSavedSearchComposer, NavigatorHomeRoomEvent, NavigatorInitComposer, NavigatorLiftedEvent, NavigatorMetadataEvent, NavigatorOpenRoomCreatorEvent, NavigatorSearchCloseComposer, NavigatorSearchComposer, NavigatorSearchesEvent, NavigatorSearchEvent, NavigatorSearchOpenComposer, NavigatorSearchSaveComposer, NavigatorSettingsEvent, NavigatorSettingsSaveComposer, NewConsoleMessageEvent, NewFriendRequestEvent, NewUserExperienceGetGiftsComposer, NewUserExperienceGiftOfferMessageEvent, NewUserExperienceNotCompleteEvent, NewUserExperienceScriptProceedComposer, NoobnessLevelMessageEvent, NoOwnedRoomsAlertMessageEvent, NoSuchFlatEvent, NotEnoughBalanceMessageEvent, NotificationDialogMessageEvent, NowPlayingMessageEvent, ObjectsDataUpdateEvent, ObjectsRollingEvent, OfferRewardDeliveredMessageEvent, OfficialSongIdMessageEvent, OneWayDoorStatusMessageEvent, OpenCampaignCalendarDoorAsStaffComposer, OpenCampaignCalendarDoorComposer, OpenMessageComposer, OpenMysteryTrophyMessageComposer, OpenPetPackageMessageComposer, OpenPetPackageRequestedMessageEvent, OpenPetPackageResultMessageEvent, OpenPresentComposer, OpenQuestTrackerMessageComposer, OpenWelcomeGiftComposer, OutgoingHeader, PeerUsersClassificationMessageComposer, PerformanceLogMessageComposer, PerkAllowancesMessageEvent, PetAddedToInventoryEvent, PetBreedingResultEvent, PetExperienceEvent, PetFigureUpdateEvent, PetInfoEvent, PetInventoryEvent, PetLevelNotificationEvent, PetLevelUpdateMessageEvent, PetMountComposer, PetMoveComposer, PetPlaceComposer, PetPlacingErrorEvent, PetReceivedMessageEvent, PetRemoveComposer, PetRemovedFromInventory, PetRespectComposer, PetRespectNoficationEvent, PetScratchFailedMessageEvent, PetSelectedMessageComposer, PetStatusUpdateEvent, PetSupplementComposer, PetSupplementedNotificationEvent, PetTrainingPanelMessageEvent, PhoneCollectionStateMessageEvent, PhotoCompetitionMessageComposer, PickIssuesMessageComposer, PlayListMessageEvent, PlayListSongAddedMessageEvent, PollAnswerComposer, PollContentsEvent, PollErrorEvent, PollOfferEvent, PollRejectComposer, PollStartComposer, PongMessageComposer, PopularRoomsSearchMessageComposer, PopularRoomTagsResultEvent, PostMessageMessageComposer, PostMessageMessageEvent, PostQuizAnswersComposer, PostThreadMessageEvent, PresentOpenedMessageEvent, ProductOfferEvent, PromoArticlesMessageEvent, PublishPhotoMessageComposer, PurchaseBasicMembershipExtensionComposer, PurchaseErrorMessageEvent, PurchaseFromCatalogAsGiftComposer, PurchaseFromCatalogComposer, PurchaseNotAllowedMessageEvent, PurchaseOKMessageEvent, PurchasePhotoMessageComposer, PurchaseRoomAdMessageComposer, PurchaseTargetedOfferComposer, PurchaseVipMembershipExtensionComposer, QuestCancelledMessageEvent, QuestCompletedMessageEvent, QuestDailyMessageEvent, QuestionAnsweredEvent, QuestionEvent, QuestionFinishedEvent, QuestMessageEvent, QuestsMessageEvent, QuizDataMessageEvent, QuizResultsMessageEvent, RateFlatMessageComposer, RecycleItemsMessageComposer, RecyclerFinishedMessageEvent, RecyclerStatusMessageEvent, RedeemCommunityGoalPrizeMessageComposer, RedeemItemClothingComposer, RedeemMarketplaceOfferCreditsMessageComposer, RedeemVoucherMessageComposer, RejectQuestMessageComposer, RelationshipStatusInfoEvent, ReleaseIssuesMessageComposer, RemainingMuteEvent, RemoveAllRightsMessageComposer, RemoveFriendComposer, RemoveJukeboxDiskComposer, RemoveOwnRoomRightsRoomMessageComposer, RemovePetSaddleComposer, RemoveWallItemComposer, RenderRoomMessageComposer, RenderRoomThumbnailMessageComposer, RentableSpaceCancelRentMessageComposer, RentableSpaceRentFailedMessageEvent, RentableSpaceRentMessageComposer, RentableSpaceRentOkMessageEvent, RentableSpaceStatusMessageComposer, RentableSpaceStatusMessageEvent, RequestABadgeComposer, RequestAchievementsMessageComposer, RequestBadgesComposer, RequestBotCommandConfigurationComposer, RequestCameraConfigurationComposer, RequestFriendComposer, RequestFurniInventoryWhenNotInRoomComposer, RequestPetInfoComposer, RequestPetsComposer, RequestSpamWallPostItMessageEvent, ResetPhoneNumberStateMessageComposer, ResetResolutionAchievementMessageComposer, RespectReceivedEvent, RestoreClientMessageEvent, RoomAdErrorEvent, RoomAdEventTabAdClickedComposer, RoomAdEventTabViewedComposer, RoomAdPurchaseInfoEvent, RoomAdPurchaseInitiatedComposer, RoomAdSearchMessageComposer, RoomAmbassadorAlertComposer, RoomBannedUsersComposer, RoomBanUserComposer, RoomChatlogEvent, RoomChatSettingsEvent, RoomCompetitionInitMessageComposer, RoomDeleteComposer, RoomDimmerPresetsEvent, RoomDoorbellAcceptedEvent, RoomDoorbellAccessComposer, RoomEnterComposer, RoomEnterErrorEvent, RoomEnterEvent, RoomEntryInfoMessageEvent, RoomEntryTileMessageEvent, RoomEventCancelEvent, RoomEventEvent, RoomFilterSettingsMessageEvent, RoomForwardEvent, RoomGiveRightsComposer, RoomHeightMapEvent, RoomHeightMapUpdateEvent, RoomInviteErrorEvent, RoomInviteEvent, RoomKickUserComposer, RoomMessageNotificationMessageEvent, RoomMuteComposer, RoomMuteUserComposer, RoomNetworkOpenConnectionMessageComposer, RoomOccupiedTilesMessageEvent, RoomPaintEvent, RoomPollResultEvent, RoomReadyMessageEvent, RoomRightsClearEvent, RoomRightsEvent, RoomRightsOwnerEvent, RoomScoreEvent, RoomSettingsComposer, RoomSettingsDataEvent, RoomSettingsErrorEvent, RoomSettingsSavedEvent, RoomSettingsSaveErrorEvent, RoomSettingsUpdatedEvent, RoomsWhereMyFriendsAreSearchMessageComposer, RoomsWithHighestScoreSearchMessageComposer, RoomTakeRightsComposer, RoomTextSearchMessageComposer, RoomThumbnailUpdateResultEvent, RoomUnbanUserComposer, RoomUnitActionComposer, RoomUnitBackgroundComposer, RoomUnitChatComposer, RoomUnitChatEvent, RoomUnitChatShoutComposer, RoomUnitChatShoutEvent, RoomUnitChatStyleComposer, RoomUnitChatWhisperComposer, RoomUnitChatWhisperEvent, RoomUnitDanceComposer, RoomUnitDanceEvent, RoomUnitDropHandItemComposer, RoomUnitEffectEvent, RoomUnitEvent, RoomUnitExpressionEvent, RoomUnitGiveHandItemComposer, RoomUnitGiveHandItemPetComposer, RoomUnitHandItemEvent, RoomUnitHandItemReceivedEvent, RoomUnitIdleEvent, RoomUnitInfoEvent, RoomUnitLookComposer, RoomUnitNumberEvent, RoomUnitPostureComposer, RoomUnitRemoveEvent, RoomUnitSignComposer, RoomUnitStatusEvent, RoomUnitTypingEvent, RoomUnitTypingStartComposer, RoomUnitTypingStopComposer, RoomUnitWalkComposer, RoomUsersClassificationMessageComposer, RoomUsersWithRightsComposer, RoomVisitsEvent, RoomVisualizationSettingsEvent, SanctionStatusEvent, SaveRoomSettingsComposer, SaveWardrobeOutfitMessageComposer, ScrGetKickbackInfoMessageComposer, ScrSendKickbackInfoMessageEvent, SearchFaqsMessageComposer, SeasonalCalendarDailyOfferMessageEvent, SeasonalQuestsMessageEvent, SecondsUntilMessageEvent, SelectClubGiftComposer, SellablePetPalettesMessageEvent, SendMessageComposer, SendRoomInviteComposer, SetActivatedBadgesComposer, SetClothingChangeDataMessageComposer, SetItemDataMessageComposer, SetObjectDataMessageComposer, SetPhoneNumberVerificationStatusMessageComposer, SetRelationshipStatusComposer, SetRoomSessionTagsMessageComposer, SetTargetedOfferStateComposer, SetYoutubeDisplayPlaylistMessageComposer, ShopTargetedOfferViewedComposer, ShowEnforceRoomCategoryDialogEvent, ShowMysteryBoxWaitMessageEvent, SimpleAlertMessageEvent, SSOTicketMessageComposer, StartCampaignMessageComposer, StartRoomPollEvent, SubmitRoomToCompetitionMessageComposer, TalentLevelUpEvent, TalentTrackComposer, TalentTrackLevelMessageEvent, TalentTrackMessageEvent, TargetedOfferEvent, TargetedOfferNotFoundEvent, ThreadMessagesMessageEvent, ThumbnailStatusMessageEvent, TogglePetBreedingComposer, TogglePetRidingComposer, ToggleStaffPickMessageComposer, TradingAcceptComposer, TradingAcceptEvent, TradingCancelComposer, TradingCloseComposer, TradingCloseEvent, TradingCompletedEvent, TradingConfirmationComposer, TradingConfirmationEvent, TradingListAddItemComposer, TradingListAddItemsComposer, TradingListItemEvent, TradingListItemRemoveComposer, TradingNoSuchItemEvent, TradingNotOpenEvent, TradingOpenComposer, TradingOpenEvent, TradingOpenFailedEvent, TradingOtherNotAllowedEvent, TradingUnacceptComposer, TradingYouAreNotAllowedEvent, TraxSongInfoMessageEvent, TryPhoneNumberMessageComposer, TryPhoneNumberResultMessageEvent, TryVerificationCodeResultMessageEvent, UnblockGroupMemberMessageComposer, UnignoreUserComposer, UniqueIDMessageComposer, UnloadGameMessageEvent, UnreadForumsCountMessageEvent, UnseenItemsEvent, UnseenResetCategoryComposer, UnseenResetItemsComposer, UpdateActionMessageComposer, UpdateConditionMessageComposer, UpdateFloorPropertiesMessageComposer, UpdateForumReadMarkerMessageComposer, UpdateForumSettingsMessageComposer, UpdateFurniturePositionComposer, UpdateHomeRoomMessageComposer, UpdateMessageMessageEvent, UpdateRoomCategoryAndTradeSettingsComposer, UpdateRoomFilterMessageComposer, UpdateRoomThumbnailMessageComposer, UpdateThreadMessageComposer, UpdateThreadMessageEvent, UpdateTriggerMessageComposer, UsePetProductComposer, UserBannedMessageEvent, UserChatlogEvent, UserClassificationMessageEvent, UserCreditsEvent, UserCurrencyComposer, UserCurrencyEvent, UserCurrentBadgesComposer, UserCurrentBadgesEvent, UserEventCatsEvent, UserFigureComposer, UserFlatCatsEvent, UserGameAchievementsMessageEvent, UserInfoEvent, UserMottoComposer, UserNameChangeMessageEvent, UserPermissionsEvent, UserProfileComposer, UserProfileEvent, UserRelationshipsComposer, UserRespectComposer, UserSettingsCameraFollowComposer, UserSettingsEvent, UserSettingsOldChatComposer, UserSettingsRoomInvitesComposer, UserSettingsSoundComposer, UserSongDisksInventoryMessageEvent, UserSubscriptionComposer, UserSubscriptionEvent, UserTagsMessageEvent, UserUnbannedFromRoomEvent, UserWardrobePageEvent, VerifyCodeMessageComposer, VersionCheckMessageComposer, VisitUserComposer, VoteForRoomMessageComposer, VotePollCounterMessageComposer, VoucherRedeemErrorMessageEvent, VoucherRedeemOkMessageEvent, WardrobeMessageEvent, WeeklyCompetitiveFriendsLeaderboardEvent, WeeklyCompetitiveLeaderboardEvent, WeeklyGameRewardEvent, WeeklyGameRewardWinnersEvent, WelcomeGiftChangeEmailComposer, WelcomeGiftChangeEmailResultEvent, WelcomeGiftStatusEvent, WiredFurniActionEvent, WiredFurniConditionEvent, WiredFurniTriggerEvent, WiredOpenEvent, WiredRewardResultMessageEvent, WiredSaveSuccessEvent, WiredValidationErrorEvent, YouArePlayingGameEvent, YouAreSpectatorMessageEvent, YoutubeControlVideoMessageEvent, YoutubeDisplayPlaylistsEvent, YoutubeDisplayVideoMessageEvent, ClickUserMessageComposer } from './messages'; +import { WiredMonitorDataEvent, WiredMonitorRequestComposer, WiredRoomSettingsDataEvent, WiredRoomSettingsRequestComposer, WiredRoomSettingsSaveComposer, WiredUserInspectMoveComposer, WiredUserVariableManageComposer, WiredUserVariableUpdateComposer, WiredUserVariablesDataEvent, WiredUserVariablesRequestComposer } from './messages'; import { WiredMovementsEvent } from './messages'; - export class NitroMessages implements IMessageConfiguration { private _events: Map; @@ -71,6 +72,13 @@ export class NitroMessages implements IMessageConfiguration this._events.set(IncomingHeader.CATALOG_EARLIEST_EXPIRY, CatalogPageWithEarliestExpiryMessageEvent); this._events.set(IncomingHeader.CATALOG_PUBLISHED, CatalogPublishedMessageEvent); this._events.set(IncomingHeader.CATALOG_ADMIN_RESULT, CatalogAdminResultEvent); + + // Furni Editor + this._events.set(IncomingHeader.FURNI_EDITOR_SEARCH_RESULT, FurniEditorSearchResultEvent); + this._events.set(IncomingHeader.FURNI_EDITOR_DETAIL_RESULT, FurniEditorDetailResultEvent); + this._events.set(IncomingHeader.FURNI_EDITOR_INTERACTIONS_RESULT, FurniEditorInteractionsResultEvent); + this._events.set(IncomingHeader.FURNI_EDITOR_RESULT, FurniEditorResultEvent); + this._events.set(IncomingHeader.CLUB_GIFT_INFO, ClubGiftInfoEvent); this._events.set(IncomingHeader.CLUB_GIFT_SELECTED, ClubGiftSelectedEvent); this._events.set(IncomingHeader.DIRECT_SMS_CLUB_BUY, DirectSMSClubBuyAvailableMessageEvent); @@ -483,6 +491,9 @@ export class NitroMessages implements IMessageConfiguration this._events.set(IncomingHeader.WIRED_CONDITION, WiredFurniConditionEvent); this._events.set(IncomingHeader.WIRED_TRIGGER, WiredFurniTriggerEvent); this._events.set(IncomingHeader.WIRED_OPEN, WiredOpenEvent); + this._events.set(IncomingHeader.WIRED_MONITOR_DATA, WiredMonitorDataEvent); + this._events.set(IncomingHeader.WIRED_ROOM_SETTINGS_DATA, WiredRoomSettingsDataEvent); + this._events.set(IncomingHeader.WIRED_USER_VARIABLES_DATA, WiredUserVariablesDataEvent); this._events.set(IncomingHeader.WIRED_REWARD, WiredRewardResultMessageEvent); this._events.set(IncomingHeader.WIRED_SAVE, WiredSaveSuccessEvent); this._events.set(IncomingHeader.WIRED_ERROR, WiredValidationErrorEvent); @@ -631,6 +642,15 @@ export class NitroMessages implements IMessageConfiguration this._composers.set(OutgoingHeader.CATALOG_ADMIN_MOVE_OFFER, CatalogAdminMoveOfferComposer); this._composers.set(OutgoingHeader.CATALOG_ADMIN_MOVE_PAGE, CatalogAdminMovePageComposer); this._composers.set(OutgoingHeader.CATALOG_ADMIN_PUBLISH, CatalogAdminPublishComposer); + + // Furni Editor + this._composers.set(OutgoingHeader.FURNI_EDITOR_SEARCH, FurniEditorSearchComposer); + this._composers.set(OutgoingHeader.FURNI_EDITOR_DETAIL, FurniEditorDetailComposer); + this._composers.set(OutgoingHeader.FURNI_EDITOR_BY_SPRITE, FurniEditorBySpriteComposer); + this._composers.set(OutgoingHeader.FURNI_EDITOR_INTERACTIONS, FurniEditorInteractionsComposer); + this._composers.set(OutgoingHeader.FURNI_EDITOR_UPDATE, FurniEditorUpdateComposer); + this._composers.set(OutgoingHeader.FURNI_EDITOR_DELETE, FurniEditorDeleteComposer); + this._composers.set(OutgoingHeader.GET_CATALOG_INDEX, GetCatalogIndexComposer); this._composers.set(OutgoingHeader.GET_CATALOG_PAGE, GetCatalogPageComposer); this._composers.set(OutgoingHeader.CATALOG_PURCHASE, PurchaseFromCatalogComposer); @@ -1044,6 +1064,13 @@ export class NitroMessages implements IMessageConfiguration // ROOM EVENTS this._composers.set(OutgoingHeader.WIRED_APPLY_SNAPSHOT, ApplySnapshotMessageComposer); + this._composers.set(OutgoingHeader.WIRED_MONITOR_REQUEST, WiredMonitorRequestComposer); + this._composers.set(OutgoingHeader.WIRED_ROOM_SETTINGS_REQUEST, WiredRoomSettingsRequestComposer); + this._composers.set(OutgoingHeader.WIRED_ROOM_SETTINGS_SAVE, WiredRoomSettingsSaveComposer); + this._composers.set(OutgoingHeader.WIRED_USER_VARIABLES_REQUEST, WiredUserVariablesRequestComposer); + this._composers.set(OutgoingHeader.WIRED_USER_VARIABLE_UPDATE, WiredUserVariableUpdateComposer); + this._composers.set(OutgoingHeader.WIRED_USER_VARIABLE_MANAGE, WiredUserVariableManageComposer); + this._composers.set(OutgoingHeader.WIRED_USER_INSPECT_MOVE, WiredUserInspectMoveComposer); this._composers.set(OutgoingHeader.WIRED_OPEN, OpenMessageComposer); this._composers.set(OutgoingHeader.WIRED_ACTION_SAVE, UpdateActionMessageComposer); this._composers.set(OutgoingHeader.WIRED_CONDITION_SAVE, UpdateConditionMessageComposer); diff --git a/packages/communication/src/index.ts b/packages/communication/src/index.ts index 5553756..916eaf1 100644 --- a/packages/communication/src/index.ts +++ b/packages/communication/src/index.ts @@ -20,6 +20,7 @@ export * from './messages/incoming/competition'; export * from './messages/incoming/crafting'; export * from './messages/incoming/desktop'; export * from './messages/incoming/friendlist'; +export * from './messages/incoming/furnieditor'; export * from './messages/incoming/game'; export * from './messages/incoming/game/directory'; export * from './messages/incoming/game/lobby'; @@ -94,6 +95,7 @@ export * from './messages/outgoing/crafting'; export * from './messages/outgoing/desktop'; export * from './messages/outgoing/friendfurni'; export * from './messages/outgoing/friendlist'; +export * from './messages/outgoing/furnieditor'; export * from './messages/outgoing/game'; export * from './messages/outgoing/game/arena'; export * from './messages/outgoing/game/directory'; @@ -173,6 +175,7 @@ export * from './messages/parser/competition'; export * from './messages/parser/crafting'; export * from './messages/parser/desktop'; export * from './messages/parser/friendlist'; +export * from './messages/parser/furnieditor'; export * from './messages/parser/game'; export * from './messages/parser/game/directory'; export * from './messages/parser/game/lobby'; diff --git a/packages/communication/src/messages/incoming/IncomingHeader.ts b/packages/communication/src/messages/incoming/IncomingHeader.ts index c34b284..23b41e1 100644 --- a/packages/communication/src/messages/incoming/IncomingHeader.ts +++ b/packages/communication/src/messages/incoming/IncomingHeader.ts @@ -269,6 +269,9 @@ export class IncomingHeader public static WIRED_ACTION = 1434; public static WIRED_CONDITION = 1108; public static WIRED_ERROR = 156; + public static WIRED_MONITOR_DATA = 5101; + public static WIRED_ROOM_SETTINGS_DATA = 5102; + public static WIRED_USER_VARIABLES_DATA = 5103; public static WIRED_OPEN = 1830; public static WIRED_REWARD = 178; public static WIRED_SAVE = 1155; @@ -477,6 +480,12 @@ export class IncomingHeader public static RENTABLE_FURNI_RENT_OR_BUYOUT_OFFER = 35; public static HANDSHAKE_IDENTITY_ACCOUNT = 3523; + // Furni Editor + public static FURNI_EDITOR_SEARCH_RESULT = 10040; + public static FURNI_EDITOR_DETAIL_RESULT = 10041; + public static FURNI_EDITOR_INTERACTIONS_RESULT = 10043; + public static FURNI_EDITOR_RESULT = 10044; + // Catalog Admin public static CATALOG_ADMIN_RESULT = 10059; diff --git a/packages/communication/src/messages/incoming/furnieditor/FurniEditorDetailResultEvent.ts b/packages/communication/src/messages/incoming/furnieditor/FurniEditorDetailResultEvent.ts new file mode 100644 index 0000000..2c1c318 --- /dev/null +++ b/packages/communication/src/messages/incoming/furnieditor/FurniEditorDetailResultEvent.ts @@ -0,0 +1,16 @@ +import { IMessageEvent } from '@nitrots/api'; +import { MessageEvent } from '@nitrots/events'; +import { FurniEditorDetailResultMessageParser } from '../../parser'; + +export class FurniEditorDetailResultEvent extends MessageEvent implements IMessageEvent +{ + constructor(callBack: Function) + { + super(callBack, FurniEditorDetailResultMessageParser); + } + + public getParser(): FurniEditorDetailResultMessageParser + { + return this.parser as FurniEditorDetailResultMessageParser; + } +} diff --git a/packages/communication/src/messages/incoming/furnieditor/FurniEditorInteractionsResultEvent.ts b/packages/communication/src/messages/incoming/furnieditor/FurniEditorInteractionsResultEvent.ts new file mode 100644 index 0000000..5f52dab --- /dev/null +++ b/packages/communication/src/messages/incoming/furnieditor/FurniEditorInteractionsResultEvent.ts @@ -0,0 +1,16 @@ +import { IMessageEvent } from '@nitrots/api'; +import { MessageEvent } from '@nitrots/events'; +import { FurniEditorInteractionsResultMessageParser } from '../../parser'; + +export class FurniEditorInteractionsResultEvent extends MessageEvent implements IMessageEvent +{ + constructor(callBack: Function) + { + super(callBack, FurniEditorInteractionsResultMessageParser); + } + + public getParser(): FurniEditorInteractionsResultMessageParser + { + return this.parser as FurniEditorInteractionsResultMessageParser; + } +} diff --git a/packages/communication/src/messages/incoming/furnieditor/FurniEditorResultEvent.ts b/packages/communication/src/messages/incoming/furnieditor/FurniEditorResultEvent.ts new file mode 100644 index 0000000..90b3a41 --- /dev/null +++ b/packages/communication/src/messages/incoming/furnieditor/FurniEditorResultEvent.ts @@ -0,0 +1,16 @@ +import { IMessageEvent } from '@nitrots/api'; +import { MessageEvent } from '@nitrots/events'; +import { FurniEditorResultMessageParser } from '../../parser'; + +export class FurniEditorResultEvent extends MessageEvent implements IMessageEvent +{ + constructor(callBack: Function) + { + super(callBack, FurniEditorResultMessageParser); + } + + public getParser(): FurniEditorResultMessageParser + { + return this.parser as FurniEditorResultMessageParser; + } +} diff --git a/packages/communication/src/messages/incoming/furnieditor/FurniEditorSearchResultEvent.ts b/packages/communication/src/messages/incoming/furnieditor/FurniEditorSearchResultEvent.ts new file mode 100644 index 0000000..cc277b6 --- /dev/null +++ b/packages/communication/src/messages/incoming/furnieditor/FurniEditorSearchResultEvent.ts @@ -0,0 +1,16 @@ +import { IMessageEvent } from '@nitrots/api'; +import { MessageEvent } from '@nitrots/events'; +import { FurniEditorSearchResultMessageParser } from '../../parser'; + +export class FurniEditorSearchResultEvent extends MessageEvent implements IMessageEvent +{ + constructor(callBack: Function) + { + super(callBack, FurniEditorSearchResultMessageParser); + } + + public getParser(): FurniEditorSearchResultMessageParser + { + return this.parser as FurniEditorSearchResultMessageParser; + } +} diff --git a/packages/communication/src/messages/incoming/furnieditor/index.ts b/packages/communication/src/messages/incoming/furnieditor/index.ts new file mode 100644 index 0000000..7778352 --- /dev/null +++ b/packages/communication/src/messages/incoming/furnieditor/index.ts @@ -0,0 +1,4 @@ +export * from './FurniEditorDetailResultEvent'; +export * from './FurniEditorInteractionsResultEvent'; +export * from './FurniEditorResultEvent'; +export * from './FurniEditorSearchResultEvent'; diff --git a/packages/communication/src/messages/incoming/index.ts b/packages/communication/src/messages/incoming/index.ts index b9b0d3d..ff6445c 100644 --- a/packages/communication/src/messages/incoming/index.ts +++ b/packages/communication/src/messages/incoming/index.ts @@ -13,6 +13,7 @@ export * from './competition'; export * from './crafting'; export * from './desktop'; export * from './friendlist'; +export * from './furnieditor'; export * from './game'; export * from './game/directory'; export * from './game/lobby'; diff --git a/packages/communication/src/messages/incoming/roomevents/WiredMonitorDataEvent.ts b/packages/communication/src/messages/incoming/roomevents/WiredMonitorDataEvent.ts new file mode 100644 index 0000000..14d3095 --- /dev/null +++ b/packages/communication/src/messages/incoming/roomevents/WiredMonitorDataEvent.ts @@ -0,0 +1,16 @@ +import { IMessageEvent } from '@nitrots/api'; +import { MessageEvent } from '@nitrots/events'; +import { WiredMonitorDataParser } from '../../parser'; + +export class WiredMonitorDataEvent extends MessageEvent implements IMessageEvent +{ + constructor(callBack: Function) + { + super(callBack, WiredMonitorDataParser); + } + + public getParser(): WiredMonitorDataParser + { + return this.parser as WiredMonitorDataParser; + } +} diff --git a/packages/communication/src/messages/incoming/roomevents/WiredRoomSettingsDataEvent.ts b/packages/communication/src/messages/incoming/roomevents/WiredRoomSettingsDataEvent.ts new file mode 100644 index 0000000..9519312 --- /dev/null +++ b/packages/communication/src/messages/incoming/roomevents/WiredRoomSettingsDataEvent.ts @@ -0,0 +1,16 @@ +import { IMessageEvent } from '@nitrots/api'; +import { MessageEvent } from '@nitrots/events'; +import { WiredRoomSettingsDataParser } from '../../parser'; + +export class WiredRoomSettingsDataEvent extends MessageEvent implements IMessageEvent +{ + constructor(callBack: Function) + { + super(callBack, WiredRoomSettingsDataParser); + } + + public getParser(): WiredRoomSettingsDataParser + { + return this.parser as WiredRoomSettingsDataParser; + } +} diff --git a/packages/communication/src/messages/incoming/roomevents/WiredUserVariablesDataEvent.ts b/packages/communication/src/messages/incoming/roomevents/WiredUserVariablesDataEvent.ts new file mode 100644 index 0000000..87ebe2e --- /dev/null +++ b/packages/communication/src/messages/incoming/roomevents/WiredUserVariablesDataEvent.ts @@ -0,0 +1,16 @@ +import { IMessageEvent } from '@nitrots/api'; +import { MessageEvent } from '@nitrots/events'; +import { WiredUserVariablesDataParser } from '../../parser'; + +export class WiredUserVariablesDataEvent extends MessageEvent implements IMessageEvent +{ + constructor(callBack: Function) + { + super(callBack, WiredUserVariablesDataParser); + } + + public getParser(): WiredUserVariablesDataParser + { + return this.parser as WiredUserVariablesDataParser; + } +} diff --git a/packages/communication/src/messages/incoming/roomevents/index.ts b/packages/communication/src/messages/incoming/roomevents/index.ts index 0775d57..615fced 100644 --- a/packages/communication/src/messages/incoming/roomevents/index.ts +++ b/packages/communication/src/messages/incoming/roomevents/index.ts @@ -1,7 +1,10 @@ export * from './WiredFurniActionEvent'; export * from './WiredFurniConditionEvent'; export * from './WiredFurniTriggerEvent'; +export * from './WiredMonitorDataEvent'; export * from './WiredOpenEvent'; +export * from './WiredRoomSettingsDataEvent'; export * from './WiredRewardResultMessageEvent'; export * from './WiredSaveSuccessEvent'; +export * from './WiredUserVariablesDataEvent'; export * from './WiredValidationErrorEvent'; diff --git a/packages/communication/src/messages/outgoing/OutgoingHeader.ts b/packages/communication/src/messages/outgoing/OutgoingHeader.ts index 72fe5b8..3393578 100644 --- a/packages/communication/src/messages/outgoing/OutgoingHeader.ts +++ b/packages/communication/src/messages/outgoing/OutgoingHeader.ts @@ -65,8 +65,8 @@ export class OutgoingHeader public static GROUP_CREATE_OPTIONS = 798; public static GROUP_FAVORITE = 3549; public static GET_FORUM_STATS = 3149; - public static GET_FORUM_THREADS = 873; - public static GET_FORUMS_LIST = 436; + public static GET_FORUM_THREADS = 436; + public static GET_FORUMS_LIST = 873; public static GET_FORUM_MESSAGES = 232; public static GET_FORUM_THREAD = 3900; public static GET_UNREAD_FORUMS_COUNT = 2908; @@ -271,6 +271,13 @@ export class OutgoingHeader public static WIRED_ACTION_SAVE = 2281; public static WIRED_APPLY_SNAPSHOT = 3373; public static WIRED_CONDITION_SAVE = 3203; + public static WIRED_MONITOR_REQUEST = 10021; + public static WIRED_ROOM_SETTINGS_REQUEST = 10022; + public static WIRED_ROOM_SETTINGS_SAVE = 10023; + public static WIRED_USER_VARIABLES_REQUEST = 10024; + public static WIRED_USER_VARIABLE_UPDATE = 10025; + public static WIRED_USER_VARIABLE_MANAGE = 10026; + public static WIRED_USER_INSPECT_MOVE = 10027; public static WIRED_OPEN = 768; public static WIRED_TRIGGER_SAVE = 1520; public static GET_ITEM_DATA = 3964; @@ -476,6 +483,14 @@ export class OutgoingHeader public static FURNITURE_PICKUP_ALL = 10017; + // Furni Editor + public static FURNI_EDITOR_SEARCH = 10040; + public static FURNI_EDITOR_DETAIL = 10041; + public static FURNI_EDITOR_BY_SPRITE = 10042; + public static FURNI_EDITOR_INTERACTIONS = 10043; + public static FURNI_EDITOR_UPDATE = 10044; + public static FURNI_EDITOR_DELETE = 10045; + public static CATALOG_ADMIN_SAVE_PAGE = 10050; public static CATALOG_ADMIN_CREATE_PAGE = 10051; public static CATALOG_ADMIN_DELETE_PAGE = 10052; diff --git a/packages/communication/src/messages/outgoing/furnieditor/FurniEditorBySpriteComposer.ts b/packages/communication/src/messages/outgoing/furnieditor/FurniEditorBySpriteComposer.ts new file mode 100644 index 0000000..a7f1aec --- /dev/null +++ b/packages/communication/src/messages/outgoing/furnieditor/FurniEditorBySpriteComposer.ts @@ -0,0 +1,21 @@ +import { IMessageComposer } from '@nitrots/api'; + +export class FurniEditorBySpriteComposer implements IMessageComposer> +{ + private _data: ConstructorParameters; + + constructor(spriteId: number) + { + this._data = [ spriteId ]; + } + + dispose(): void + { + this._data = null; + } + + public getMessageArray() + { + return this._data; + } +} diff --git a/packages/communication/src/messages/outgoing/furnieditor/FurniEditorDeleteComposer.ts b/packages/communication/src/messages/outgoing/furnieditor/FurniEditorDeleteComposer.ts new file mode 100644 index 0000000..70a7231 --- /dev/null +++ b/packages/communication/src/messages/outgoing/furnieditor/FurniEditorDeleteComposer.ts @@ -0,0 +1,21 @@ +import { IMessageComposer } from '@nitrots/api'; + +export class FurniEditorDeleteComposer implements IMessageComposer> +{ + private _data: ConstructorParameters; + + constructor(id: number) + { + this._data = [ id ]; + } + + dispose(): void + { + this._data = null; + } + + public getMessageArray() + { + return this._data; + } +} diff --git a/packages/communication/src/messages/outgoing/furnieditor/FurniEditorDetailComposer.ts b/packages/communication/src/messages/outgoing/furnieditor/FurniEditorDetailComposer.ts new file mode 100644 index 0000000..d3d8a0f --- /dev/null +++ b/packages/communication/src/messages/outgoing/furnieditor/FurniEditorDetailComposer.ts @@ -0,0 +1,21 @@ +import { IMessageComposer } from '@nitrots/api'; + +export class FurniEditorDetailComposer implements IMessageComposer> +{ + private _data: ConstructorParameters; + + constructor(id: number) + { + this._data = [ id ]; + } + + dispose(): void + { + this._data = null; + } + + public getMessageArray() + { + return this._data; + } +} diff --git a/packages/communication/src/messages/outgoing/furnieditor/FurniEditorInteractionsComposer.ts b/packages/communication/src/messages/outgoing/furnieditor/FurniEditorInteractionsComposer.ts new file mode 100644 index 0000000..92324a1 --- /dev/null +++ b/packages/communication/src/messages/outgoing/furnieditor/FurniEditorInteractionsComposer.ts @@ -0,0 +1,21 @@ +import { IMessageComposer } from '@nitrots/api'; + +export class FurniEditorInteractionsComposer implements IMessageComposer> +{ + private _data: ConstructorParameters; + + constructor() + { + this._data = []; + } + + dispose(): void + { + this._data = null; + } + + public getMessageArray() + { + return this._data; + } +} diff --git a/packages/communication/src/messages/outgoing/furnieditor/FurniEditorSearchComposer.ts b/packages/communication/src/messages/outgoing/furnieditor/FurniEditorSearchComposer.ts new file mode 100644 index 0000000..35351f0 --- /dev/null +++ b/packages/communication/src/messages/outgoing/furnieditor/FurniEditorSearchComposer.ts @@ -0,0 +1,21 @@ +import { IMessageComposer } from '@nitrots/api'; + +export class FurniEditorSearchComposer implements IMessageComposer> +{ + private _data: ConstructorParameters; + + constructor(query: string, type: string, page: number) + { + this._data = [ query, type, page ]; + } + + dispose(): void + { + this._data = null; + } + + public getMessageArray() + { + return this._data; + } +} diff --git a/packages/communication/src/messages/outgoing/furnieditor/FurniEditorUpdateComposer.ts b/packages/communication/src/messages/outgoing/furnieditor/FurniEditorUpdateComposer.ts new file mode 100644 index 0000000..8c3ec01 --- /dev/null +++ b/packages/communication/src/messages/outgoing/furnieditor/FurniEditorUpdateComposer.ts @@ -0,0 +1,21 @@ +import { IMessageComposer } from '@nitrots/api'; + +export class FurniEditorUpdateComposer implements IMessageComposer> +{ + private _data: ConstructorParameters; + + constructor(id: number, jsonFields: string) + { + this._data = [ id, jsonFields ]; + } + + dispose(): void + { + this._data = null; + } + + public getMessageArray() + { + return this._data; + } +} diff --git a/packages/communication/src/messages/outgoing/furnieditor/index.ts b/packages/communication/src/messages/outgoing/furnieditor/index.ts new file mode 100644 index 0000000..9e29818 --- /dev/null +++ b/packages/communication/src/messages/outgoing/furnieditor/index.ts @@ -0,0 +1,6 @@ +export * from './FurniEditorBySpriteComposer'; +export * from './FurniEditorDeleteComposer'; +export * from './FurniEditorDetailComposer'; +export * from './FurniEditorInteractionsComposer'; +export * from './FurniEditorSearchComposer'; +export * from './FurniEditorUpdateComposer'; diff --git a/packages/communication/src/messages/outgoing/group/GroupSavePreferencesComposer.ts b/packages/communication/src/messages/outgoing/group/GroupSavePreferencesComposer.ts index 173102c..d380c3c 100644 --- a/packages/communication/src/messages/outgoing/group/GroupSavePreferencesComposer.ts +++ b/packages/communication/src/messages/outgoing/group/GroupSavePreferencesComposer.ts @@ -4,9 +4,9 @@ export class GroupSavePreferencesComposer implements IMessageComposer; - constructor(groupId: number, state: number, onlyAdminCanDecorate: number) + constructor(groupId: number, state: number, onlyAdminCanDecorate: number, forumEnabled: boolean) { - this._data = [groupId, state, onlyAdminCanDecorate]; + this._data = [groupId, state, onlyAdminCanDecorate, forumEnabled]; } public getMessageArray() diff --git a/packages/communication/src/messages/outgoing/index.ts b/packages/communication/src/messages/outgoing/index.ts index 4e36160..894d96d 100644 --- a/packages/communication/src/messages/outgoing/index.ts +++ b/packages/communication/src/messages/outgoing/index.ts @@ -9,6 +9,7 @@ export * from './crafting'; export * from './desktop'; export * from './friendfurni'; export * from './friendlist'; +export * from './furnieditor'; export * from './game'; export * from './game/arena'; export * from './game/directory'; diff --git a/packages/communication/src/messages/outgoing/roomevents/WiredMonitorRequestComposer.ts b/packages/communication/src/messages/outgoing/roomevents/WiredMonitorRequestComposer.ts new file mode 100644 index 0000000..fcc5482 --- /dev/null +++ b/packages/communication/src/messages/outgoing/roomevents/WiredMonitorRequestComposer.ts @@ -0,0 +1,21 @@ +import { IMessageComposer } from '@nitrots/api'; + +export class WiredMonitorRequestComposer implements IMessageComposer> +{ + private _data: ConstructorParameters; + + constructor(action: number = 0) + { + this._data = [ action ]; + } + + public getMessageArray() + { + return this._data; + } + + public dispose(): void + { + return; + } +} diff --git a/packages/communication/src/messages/outgoing/roomevents/WiredRoomSettingsRequestComposer.ts b/packages/communication/src/messages/outgoing/roomevents/WiredRoomSettingsRequestComposer.ts new file mode 100644 index 0000000..c9f6948 --- /dev/null +++ b/packages/communication/src/messages/outgoing/roomevents/WiredRoomSettingsRequestComposer.ts @@ -0,0 +1,14 @@ +import { IMessageComposer } from '@nitrots/api'; + +export class WiredRoomSettingsRequestComposer implements IMessageComposer> +{ + public getMessageArray() + { + return []; + } + + public dispose(): void + { + return; + } +} diff --git a/packages/communication/src/messages/outgoing/roomevents/WiredRoomSettingsSaveComposer.ts b/packages/communication/src/messages/outgoing/roomevents/WiredRoomSettingsSaveComposer.ts new file mode 100644 index 0000000..45cd654 --- /dev/null +++ b/packages/communication/src/messages/outgoing/roomevents/WiredRoomSettingsSaveComposer.ts @@ -0,0 +1,21 @@ +import { IMessageComposer } from '@nitrots/api'; + +export class WiredRoomSettingsSaveComposer implements IMessageComposer> +{ + private _data: ConstructorParameters; + + constructor(inspectMask: number, modifyMask: number) + { + this._data = [ inspectMask, modifyMask ]; + } + + public getMessageArray() + { + return this._data; + } + + public dispose(): void + { + return; + } +} diff --git a/packages/communication/src/messages/outgoing/roomevents/WiredUserInspectMoveComposer.ts b/packages/communication/src/messages/outgoing/roomevents/WiredUserInspectMoveComposer.ts new file mode 100644 index 0000000..b10b96e --- /dev/null +++ b/packages/communication/src/messages/outgoing/roomevents/WiredUserInspectMoveComposer.ts @@ -0,0 +1,21 @@ +import { IMessageComposer } from '@nitrots/api'; + +export class WiredUserInspectMoveComposer implements IMessageComposer> +{ + private _data: ConstructorParameters; + + constructor(roomUnitId: number, x: number, y: number, direction: number) + { + this._data = [ roomUnitId, x, y, direction ]; + } + + public getMessageArray() + { + return this._data; + } + + public dispose(): void + { + return; + } +} diff --git a/packages/communication/src/messages/outgoing/roomevents/WiredUserVariableManageComposer.ts b/packages/communication/src/messages/outgoing/roomevents/WiredUserVariableManageComposer.ts new file mode 100644 index 0000000..65c7f48 --- /dev/null +++ b/packages/communication/src/messages/outgoing/roomevents/WiredUserVariableManageComposer.ts @@ -0,0 +1,21 @@ +import { IMessageComposer } from '@nitrots/api'; + +export class WiredUserVariableManageComposer implements IMessageComposer> +{ + private _data: ConstructorParameters; + + constructor(action: number, targetType: number, targetId: number, variableItemId: number, value: number) + { + this._data = [ action, targetType, targetId, variableItemId, value ]; + } + + public getMessageArray() + { + return this._data; + } + + public dispose(): void + { + return; + } +} diff --git a/packages/communication/src/messages/outgoing/roomevents/WiredUserVariableUpdateComposer.ts b/packages/communication/src/messages/outgoing/roomevents/WiredUserVariableUpdateComposer.ts new file mode 100644 index 0000000..bc60211 --- /dev/null +++ b/packages/communication/src/messages/outgoing/roomevents/WiredUserVariableUpdateComposer.ts @@ -0,0 +1,21 @@ +import { IMessageComposer } from '@nitrots/api'; + +export class WiredUserVariableUpdateComposer implements IMessageComposer> +{ + private _data: ConstructorParameters; + + constructor(targetType: number, targetId: number, variableItemId: number, value: number) + { + this._data = [ targetType, targetId, variableItemId, value ]; + } + + public getMessageArray() + { + return this._data; + } + + public dispose(): void + { + return; + } +} diff --git a/packages/communication/src/messages/outgoing/roomevents/WiredUserVariablesRequestComposer.ts b/packages/communication/src/messages/outgoing/roomevents/WiredUserVariablesRequestComposer.ts new file mode 100644 index 0000000..83c9733 --- /dev/null +++ b/packages/communication/src/messages/outgoing/roomevents/WiredUserVariablesRequestComposer.ts @@ -0,0 +1,14 @@ +import { IMessageComposer } from '@nitrots/api'; + +export class WiredUserVariablesRequestComposer implements IMessageComposer> +{ + public getMessageArray() + { + return []; + } + + public dispose(): void + { + return; + } +} diff --git a/packages/communication/src/messages/outgoing/roomevents/index.ts b/packages/communication/src/messages/outgoing/roomevents/index.ts index 9c4372e..1733df9 100644 --- a/packages/communication/src/messages/outgoing/roomevents/index.ts +++ b/packages/communication/src/messages/outgoing/roomevents/index.ts @@ -4,3 +4,10 @@ export * from './RoomMuteComposer'; export * from './UpdateActionMessageComposer'; export * from './UpdateConditionMessageComposer'; export * from './UpdateTriggerMessageComposer'; +export * from './WiredMonitorRequestComposer'; +export * from './WiredRoomSettingsRequestComposer'; +export * from './WiredRoomSettingsSaveComposer'; +export * from './WiredUserInspectMoveComposer'; +export * from './WiredUserVariableManageComposer'; +export * from './WiredUserVariablesRequestComposer'; +export * from './WiredUserVariableUpdateComposer'; diff --git a/packages/communication/src/messages/parser/furnieditor/CatalogRefData.ts b/packages/communication/src/messages/parser/furnieditor/CatalogRefData.ts new file mode 100644 index 0000000..14950bb --- /dev/null +++ b/packages/communication/src/messages/parser/furnieditor/CatalogRefData.ts @@ -0,0 +1,23 @@ +import { IMessageDataWrapper } from '@nitrots/api'; + +export class CatalogRefData +{ + public id: number; + public catalogName: string; + public costCredits: number; + public costPoints: number; + public pointsType: number; + public pageId: number; + public pageName: string; + + public parse(wrapper: IMessageDataWrapper): void + { + this.id = wrapper.readInt(); + this.catalogName = wrapper.readString(); + this.costCredits = wrapper.readInt(); + this.costPoints = wrapper.readInt(); + this.pointsType = wrapper.readInt(); + this.pageId = wrapper.readInt(); + this.pageName = wrapper.readString(); + } +} diff --git a/packages/communication/src/messages/parser/furnieditor/FurniDetailData.ts b/packages/communication/src/messages/parser/furnieditor/FurniDetailData.ts new file mode 100644 index 0000000..b9dab09 --- /dev/null +++ b/packages/communication/src/messages/parser/furnieditor/FurniDetailData.ts @@ -0,0 +1,38 @@ +import { IMessageDataWrapper } from '@nitrots/api'; +import { FurniItemData } from './FurniItemData'; + +export class FurniDetailData extends FurniItemData +{ + public allowGift: boolean; + public allowTrade: boolean; + public allowRecycle: boolean; + public allowMarketplaceSell: boolean; + public allowInventoryStack: boolean; + public vendingIds: string; + public customparams: string; + public effectIdMale: number; + public effectIdFemale: number; + public clothingOnWalk: string; + public multiheight: string; + public description: string; + public usageCount: number; + + public override parse(wrapper: IMessageDataWrapper): void + { + super.parse(wrapper); + + this.allowGift = wrapper.readBoolean(); + this.allowTrade = wrapper.readBoolean(); + this.allowRecycle = wrapper.readBoolean(); + this.allowMarketplaceSell = wrapper.readBoolean(); + this.allowInventoryStack = wrapper.readBoolean(); + this.vendingIds = wrapper.readString(); + this.customparams = wrapper.readString(); + this.effectIdMale = wrapper.readInt(); + this.effectIdFemale = wrapper.readInt(); + this.clothingOnWalk = wrapper.readString(); + this.multiheight = wrapper.readString(); + this.description = wrapper.readString(); + this.usageCount = wrapper.readInt(); + } +} diff --git a/packages/communication/src/messages/parser/furnieditor/FurniEditorDetailResultMessageParser.ts b/packages/communication/src/messages/parser/furnieditor/FurniEditorDetailResultMessageParser.ts new file mode 100644 index 0000000..60d68a0 --- /dev/null +++ b/packages/communication/src/messages/parser/furnieditor/FurniEditorDetailResultMessageParser.ts @@ -0,0 +1,57 @@ +import { IMessageDataWrapper, IMessageParser } from '@nitrots/api'; +import { CatalogRefData } from './CatalogRefData'; +import { FurniDetailData } from './FurniDetailData'; + +export class FurniEditorDetailResultMessageParser implements IMessageParser +{ + private _item: FurniDetailData; + private _catalogItems: CatalogRefData[]; + private _furniDataJson: string; + + public flush(): boolean + { + this._item = null; + this._catalogItems = []; + this._furniDataJson = ''; + + return true; + } + + public parse(wrapper: IMessageDataWrapper): boolean + { + if(!wrapper) return false; + + this._item = new FurniDetailData(); + this._item.parse(wrapper); + + const catalogCount = wrapper.readInt(); + + this._catalogItems = []; + + for(let i = 0; i < catalogCount; i++) + { + const ref = new CatalogRefData(); + ref.parse(wrapper); + this._catalogItems.push(ref); + } + + this._furniDataJson = wrapper.readString(); + + return true; + } + + public get item(): FurniDetailData + { + return this._item; + } + + public get catalogItems(): CatalogRefData[] + { + return this._catalogItems; + } + + public get furniDataJson(): string + { + return this._furniDataJson; + } +} diff --git a/packages/communication/src/messages/parser/furnieditor/FurniEditorInteractionsResultMessageParser.ts b/packages/communication/src/messages/parser/furnieditor/FurniEditorInteractionsResultMessageParser.ts new file mode 100644 index 0000000..3e2237a --- /dev/null +++ b/packages/communication/src/messages/parser/furnieditor/FurniEditorInteractionsResultMessageParser.ts @@ -0,0 +1,34 @@ +import { IMessageDataWrapper, IMessageParser } from '@nitrots/api'; + +export class FurniEditorInteractionsResultMessageParser implements IMessageParser +{ + private _interactions: string[]; + + public flush(): boolean + { + this._interactions = []; + + return true; + } + + public parse(wrapper: IMessageDataWrapper): boolean + { + if(!wrapper) return false; + + const count = wrapper.readInt(); + + this._interactions = []; + + for(let i = 0; i < count; i++) + { + this._interactions.push(wrapper.readString()); + } + + return true; + } + + public get interactions(): string[] + { + return this._interactions; + } +} diff --git a/packages/communication/src/messages/parser/furnieditor/FurniEditorResultMessageParser.ts b/packages/communication/src/messages/parser/furnieditor/FurniEditorResultMessageParser.ts new file mode 100644 index 0000000..26bf70d --- /dev/null +++ b/packages/communication/src/messages/parser/furnieditor/FurniEditorResultMessageParser.ts @@ -0,0 +1,43 @@ +import { IMessageDataWrapper, IMessageParser } from '@nitrots/api'; + +export class FurniEditorResultMessageParser implements IMessageParser +{ + private _success: boolean; + private _message: string; + private _id: number; + + public flush(): boolean + { + this._success = false; + this._message = ''; + this._id = -1; + + return true; + } + + public parse(wrapper: IMessageDataWrapper): boolean + { + if(!wrapper) return false; + + this._success = wrapper.readBoolean(); + this._message = wrapper.readString(); + this._id = wrapper.readInt(); + + return true; + } + + public get success(): boolean + { + return this._success; + } + + public get message(): string + { + return this._message; + } + + public get id(): number + { + return this._id; + } +} diff --git a/packages/communication/src/messages/parser/furnieditor/FurniEditorSearchResultMessageParser.ts b/packages/communication/src/messages/parser/furnieditor/FurniEditorSearchResultMessageParser.ts new file mode 100644 index 0000000..e654c89 --- /dev/null +++ b/packages/communication/src/messages/parser/furnieditor/FurniEditorSearchResultMessageParser.ts @@ -0,0 +1,54 @@ +import { IMessageDataWrapper, IMessageParser } from '@nitrots/api'; +import { FurniItemData } from './FurniItemData'; + +export class FurniEditorSearchResultMessageParser implements IMessageParser +{ + private _items: FurniItemData[]; + private _total: number; + private _page: number; + + public flush(): boolean + { + this._items = []; + this._total = 0; + this._page = 1; + + return true; + } + + public parse(wrapper: IMessageDataWrapper): boolean + { + if(!wrapper) return false; + + const count = wrapper.readInt(); + + this._items = []; + + for(let i = 0; i < count; i++) + { + const item = new FurniItemData(); + item.parse(wrapper); + this._items.push(item); + } + + this._total = wrapper.readInt(); + this._page = wrapper.readInt(); + + return true; + } + + public get items(): FurniItemData[] + { + return this._items; + } + + public get total(): number + { + return this._total; + } + + public get page(): number + { + return this._page; + } +} diff --git a/packages/communication/src/messages/parser/furnieditor/FurniItemData.ts b/packages/communication/src/messages/parser/furnieditor/FurniItemData.ts new file mode 100644 index 0000000..3c12f2f --- /dev/null +++ b/packages/communication/src/messages/parser/furnieditor/FurniItemData.ts @@ -0,0 +1,37 @@ +import { IMessageDataWrapper } from '@nitrots/api'; + +export class FurniItemData +{ + public id: number; + public spriteId: number; + public itemName: string; + public publicName: string; + public type: string; + public width: number; + public length: number; + public stackHeight: number; + public allowStack: boolean; + public allowWalk: boolean; + public allowSit: boolean; + public allowLay: boolean; + public interactionType: string; + public interactionModesCount: number; + + public parse(wrapper: IMessageDataWrapper): void + { + this.id = wrapper.readInt(); + this.spriteId = wrapper.readInt(); + this.itemName = wrapper.readString(); + this.publicName = wrapper.readString(); + this.type = wrapper.readString(); + this.width = wrapper.readInt(); + this.length = wrapper.readInt(); + this.stackHeight = wrapper.readDouble(); + this.allowStack = wrapper.readBoolean(); + this.allowWalk = wrapper.readBoolean(); + this.allowSit = wrapper.readBoolean(); + this.allowLay = wrapper.readBoolean(); + this.interactionType = wrapper.readString(); + this.interactionModesCount = wrapper.readInt(); + } +} diff --git a/packages/communication/src/messages/parser/furnieditor/index.ts b/packages/communication/src/messages/parser/furnieditor/index.ts new file mode 100644 index 0000000..9f38260 --- /dev/null +++ b/packages/communication/src/messages/parser/furnieditor/index.ts @@ -0,0 +1,7 @@ +export * from './CatalogRefData'; +export * from './FurniDetailData'; +export * from './FurniEditorDetailResultMessageParser'; +export * from './FurniEditorInteractionsResultMessageParser'; +export * from './FurniEditorResultMessageParser'; +export * from './FurniEditorSearchResultMessageParser'; +export * from './FurniItemData'; diff --git a/packages/communication/src/messages/parser/group/GroupInformationParser.ts b/packages/communication/src/messages/parser/group/GroupInformationParser.ts index c73706b..00a71e5 100644 --- a/packages/communication/src/messages/parser/group/GroupInformationParser.ts +++ b/packages/communication/src/messages/parser/group/GroupInformationParser.ts @@ -19,6 +19,7 @@ export class GroupInformationParser implements IMessageParser private _flag: boolean; private _canMembersDecorate: boolean; private _pendingRequestsCount: number; + private _hasForum: boolean; public flush(): boolean { @@ -39,6 +40,7 @@ export class GroupInformationParser implements IMessageParser this._flag = false; this._canMembersDecorate = false; this._pendingRequestsCount = 0; + this._hasForum = false; return true; } @@ -65,6 +67,7 @@ export class GroupInformationParser implements IMessageParser this._flag = wrapper.readBoolean(); this._canMembersDecorate = wrapper.readBoolean(); this._pendingRequestsCount = wrapper.readInt(); + this._hasForum = wrapper.readBoolean(); return true; } @@ -153,4 +156,9 @@ export class GroupInformationParser implements IMessageParser { return this._pendingRequestsCount; } + + public get hasForum(): boolean + { + return this._hasForum; + } } diff --git a/packages/communication/src/messages/parser/group/GroupSettingsParser.ts b/packages/communication/src/messages/parser/group/GroupSettingsParser.ts index 964f9b1..c144321 100644 --- a/packages/communication/src/messages/parser/group/GroupSettingsParser.ts +++ b/packages/communication/src/messages/parser/group/GroupSettingsParser.ts @@ -15,6 +15,7 @@ export class GroupSettingsParser implements IMessageParser private _badgeParts: Map; private _badgeCode: string; private _membersCount: number; + private _hasForum: boolean; public flush(): boolean { @@ -30,6 +31,7 @@ export class GroupSettingsParser implements IMessageParser this._badgeParts = new Map(); this._badgeCode = null; this._membersCount = 0; + this._hasForum = false; return true; } @@ -83,6 +85,7 @@ export class GroupSettingsParser implements IMessageParser this._badgeCode = wrapper.readString(); this._membersCount = wrapper.readInt(); + this._hasForum = wrapper.readBoolean(); return true; } @@ -146,4 +149,9 @@ export class GroupSettingsParser implements IMessageParser { return this._membersCount; } + + public get hasForum(): boolean + { + return this._hasForum; + } } diff --git a/packages/communication/src/messages/parser/index.ts b/packages/communication/src/messages/parser/index.ts index c1b9bc9..aa25b8f 100644 --- a/packages/communication/src/messages/parser/index.ts +++ b/packages/communication/src/messages/parser/index.ts @@ -12,6 +12,7 @@ export * from './competition'; export * from './crafting'; export * from './desktop'; export * from './friendlist'; +export * from './furnieditor'; export * from './game'; export * from './game/directory'; export * from './game/lobby'; diff --git a/packages/communication/src/messages/parser/roomevents/WiredMonitorDataParser.ts b/packages/communication/src/messages/parser/roomevents/WiredMonitorDataParser.ts new file mode 100644 index 0000000..e5e1d32 --- /dev/null +++ b/packages/communication/src/messages/parser/roomevents/WiredMonitorDataParser.ts @@ -0,0 +1,222 @@ +import { IMessageDataWrapper, IMessageParser } from '@nitrots/api'; + +export interface IWiredMonitorLogData +{ + amount: number; + latestOccurrenceSeconds: number; + latestReason: string; + latestSourceId: number; + latestSourceLabel: string; + severity: string; + type: string; +} + +export interface IWiredMonitorHistoryData +{ + occurredAtSeconds: number; + reason: string; + sourceId: number; + sourceLabel: string; + severity: string; + type: string; +} + +export class WiredMonitorDataParser implements IMessageParser +{ + private _usageCurrentWindow: number; + private _usageLimitPerWindow: number; + private _isHeavy: boolean; + private _delayedEventsPending: number; + private _delayedEventsLimit: number; + private _averageExecutionMs: number; + private _peakExecutionMs: number; + private _recursionDepthCurrent: number; + private _recursionDepthLimit: number; + private _killedRemainingSeconds: number; + private _usageWindowMs: number; + private _overloadAverageThresholdMs: number; + private _overloadPeakThresholdMs: number; + private _heavyUsageThresholdPercent: number; + private _heavyConsecutiveWindowsThreshold: number; + private _overloadConsecutiveWindowsThreshold: number; + private _heavyDelayedThresholdPercent: number; + private _logs: IWiredMonitorLogData[]; + private _history: IWiredMonitorHistoryData[]; + + public flush(): boolean + { + this._usageCurrentWindow = 0; + this._usageLimitPerWindow = 0; + this._isHeavy = false; + this._delayedEventsPending = 0; + this._delayedEventsLimit = 0; + this._averageExecutionMs = 0; + this._peakExecutionMs = 0; + this._recursionDepthCurrent = 0; + this._recursionDepthLimit = 0; + this._killedRemainingSeconds = 0; + this._usageWindowMs = 0; + this._overloadAverageThresholdMs = 0; + this._overloadPeakThresholdMs = 0; + this._heavyUsageThresholdPercent = 0; + this._heavyConsecutiveWindowsThreshold = 0; + this._overloadConsecutiveWindowsThreshold = 0; + this._heavyDelayedThresholdPercent = 0; + this._logs = []; + this._history = []; + + return true; + } + + public parse(wrapper: IMessageDataWrapper): boolean + { + if(!wrapper) return false; + + this._usageCurrentWindow = wrapper.readInt(); + this._usageLimitPerWindow = wrapper.readInt(); + this._isHeavy = wrapper.readBoolean(); + this._delayedEventsPending = wrapper.readInt(); + this._delayedEventsLimit = wrapper.readInt(); + this._averageExecutionMs = wrapper.readInt(); + this._peakExecutionMs = wrapper.readInt(); + this._recursionDepthCurrent = wrapper.readInt(); + this._recursionDepthLimit = wrapper.readInt(); + this._killedRemainingSeconds = wrapper.readInt(); + this._usageWindowMs = wrapper.readInt(); + this._overloadAverageThresholdMs = wrapper.readInt(); + this._overloadPeakThresholdMs = wrapper.readInt(); + this._heavyUsageThresholdPercent = wrapper.readInt(); + this._heavyConsecutiveWindowsThreshold = wrapper.readInt(); + this._overloadConsecutiveWindowsThreshold = wrapper.readInt(); + this._heavyDelayedThresholdPercent = wrapper.readInt(); + + const totalLogs = wrapper.readInt(); + + this._logs = []; + this._history = []; + + for(let i = 0; i < totalLogs; i++) + { + this._logs.push({ + type: wrapper.readString(), + severity: wrapper.readString(), + amount: wrapper.readInt(), + latestOccurrenceSeconds: wrapper.readInt(), + latestReason: wrapper.readString(), + latestSourceLabel: wrapper.readString(), + latestSourceId: wrapper.readInt() + }); + } + + const totalHistory = wrapper.readInt(); + + for(let i = 0; i < totalHistory; i++) + { + this._history.push({ + type: wrapper.readString(), + severity: wrapper.readString(), + occurredAtSeconds: wrapper.readInt(), + reason: wrapper.readString(), + sourceLabel: wrapper.readString(), + sourceId: wrapper.readInt() + }); + } + + return true; + } + + public get usageCurrentWindow(): number + { + return this._usageCurrentWindow; + } + + public get usageLimitPerWindow(): number + { + return this._usageLimitPerWindow; + } + + public get isHeavy(): boolean + { + return this._isHeavy; + } + + public get delayedEventsPending(): number + { + return this._delayedEventsPending; + } + + public get delayedEventsLimit(): number + { + return this._delayedEventsLimit; + } + + public get averageExecutionMs(): number + { + return this._averageExecutionMs; + } + + public get peakExecutionMs(): number + { + return this._peakExecutionMs; + } + + public get recursionDepthCurrent(): number + { + return this._recursionDepthCurrent; + } + + public get recursionDepthLimit(): number + { + return this._recursionDepthLimit; + } + + public get killedRemainingSeconds(): number + { + return this._killedRemainingSeconds; + } + + public get usageWindowMs(): number + { + return this._usageWindowMs; + } + + public get overloadAverageThresholdMs(): number + { + return this._overloadAverageThresholdMs; + } + + public get overloadPeakThresholdMs(): number + { + return this._overloadPeakThresholdMs; + } + + public get heavyUsageThresholdPercent(): number + { + return this._heavyUsageThresholdPercent; + } + + public get heavyConsecutiveWindowsThreshold(): number + { + return this._heavyConsecutiveWindowsThreshold; + } + + public get overloadConsecutiveWindowsThreshold(): number + { + return this._overloadConsecutiveWindowsThreshold; + } + + public get heavyDelayedThresholdPercent(): number + { + return this._heavyDelayedThresholdPercent; + } + + public get logs(): IWiredMonitorLogData[] + { + return this._logs; + } + + public get history(): IWiredMonitorHistoryData[] + { + return this._history; + } +} diff --git a/packages/communication/src/messages/parser/roomevents/WiredRoomSettingsDataParser.ts b/packages/communication/src/messages/parser/roomevents/WiredRoomSettingsDataParser.ts new file mode 100644 index 0000000..47ccdd9 --- /dev/null +++ b/packages/communication/src/messages/parser/roomevents/WiredRoomSettingsDataParser.ts @@ -0,0 +1,67 @@ +import { IMessageDataWrapper, IMessageParser } from '@nitrots/api'; + +export class WiredRoomSettingsDataParser implements IMessageParser +{ + private _roomId: number; + private _inspectMask: number; + private _modifyMask: number; + private _canInspect: boolean; + private _canModify: boolean; + private _canManageSettings: boolean; + + public flush(): boolean + { + this._roomId = 0; + this._inspectMask = 0; + this._modifyMask = 0; + this._canInspect = false; + this._canModify = false; + this._canManageSettings = false; + + return true; + } + + public parse(wrapper: IMessageDataWrapper): boolean + { + if(!wrapper) return false; + + this._roomId = wrapper.readInt(); + this._inspectMask = wrapper.readInt(); + this._modifyMask = wrapper.readInt(); + this._canInspect = wrapper.readBoolean(); + this._canModify = wrapper.readBoolean(); + this._canManageSettings = wrapper.readBoolean(); + + return true; + } + + public get roomId(): number + { + return this._roomId; + } + + public get inspectMask(): number + { + return this._inspectMask; + } + + public get modifyMask(): number + { + return this._modifyMask; + } + + public get canInspect(): boolean + { + return this._canInspect; + } + + public get canModify(): boolean + { + return this._canModify; + } + + public get canManageSettings(): boolean + { + return this._canManageSettings; + } +} diff --git a/packages/communication/src/messages/parser/roomevents/WiredUserVariablesDataParser.ts b/packages/communication/src/messages/parser/roomevents/WiredUserVariablesDataParser.ts new file mode 100644 index 0000000..112a966 --- /dev/null +++ b/packages/communication/src/messages/parser/roomevents/WiredUserVariablesDataParser.ts @@ -0,0 +1,301 @@ +import { IMessageDataWrapper, IMessageParser } from '@nitrots/api'; + +export interface IWiredUserVariableDefinitionData +{ + availability: number; + hasValue: boolean; + isReadOnly: boolean; + isTextConnected: boolean; + itemId: number; + name: string; +} + +export interface IWiredUserVariableAssignmentData +{ + createdAt: number; + hasValue: boolean; + updatedAt: number; + value: number | null; + variableItemId: number; +} + +export interface IWiredUserVariablesUserData +{ + assignments: IWiredUserVariableAssignmentData[]; + userId: number; +} + +export interface IWiredFurniVariableDefinitionData +{ + availability: number; + hasValue: boolean; + isReadOnly: boolean; + isTextConnected: boolean; + itemId: number; + name: string; +} + +export interface IWiredUserVariablesFurniData +{ + assignments: IWiredUserVariableAssignmentData[]; + furniId: number; +} + +export interface IWiredRoomVariableDefinitionData +{ + availability: number; + hasValue: boolean; + isReadOnly: boolean; + isTextConnected: boolean; + itemId: number; + name: string; +} + +export interface IWiredRoomVariableAssignmentData +{ + createdAt: number; + hasValue: boolean; + updatedAt: number; + value: number | null; + variableItemId: number; +} + +export interface IWiredContextVariableDefinitionData +{ + availability: number; + hasValue: boolean; + isReadOnly: boolean; + isTextConnected: boolean; + itemId: number; + name: string; +} + +export class WiredUserVariablesDataParser implements IMessageParser +{ + private _roomId: number; + private _definitions: IWiredUserVariableDefinitionData[]; + private _users: IWiredUserVariablesUserData[]; + private _furniDefinitions: IWiredFurniVariableDefinitionData[]; + private _furnis: IWiredUserVariablesFurniData[]; + private _roomDefinitions: IWiredRoomVariableDefinitionData[]; + private _roomAssignments: IWiredRoomVariableAssignmentData[]; + private _contextDefinitions: IWiredContextVariableDefinitionData[]; + + public flush(): boolean + { + this._roomId = 0; + this._definitions = []; + this._users = []; + this._furniDefinitions = []; + this._furnis = []; + this._roomDefinitions = []; + this._roomAssignments = []; + this._contextDefinitions = []; + + return true; + } + + public parse(wrapper: IMessageDataWrapper): boolean + { + if(!wrapper) return false; + + this._roomId = wrapper.readInt(); + + let totalDefinitions = wrapper.readInt(); + + this._definitions = []; + this._users = []; + this._furniDefinitions = []; + this._furnis = []; + this._roomDefinitions = []; + this._roomAssignments = []; + this._contextDefinitions = []; + + while(totalDefinitions > 0) + { + this._definitions.push({ + itemId: wrapper.readInt(), + name: wrapper.readString(), + hasValue: wrapper.readBoolean(), + availability: wrapper.readInt(), + isTextConnected: wrapper.readBoolean(), + isReadOnly: wrapper.readBoolean() + }); + + totalDefinitions--; + } + + let totalUsers = wrapper.readInt(); + + while(totalUsers > 0) + { + const userId = wrapper.readInt(); + let totalAssignments = wrapper.readInt(); + const assignments: IWiredUserVariableAssignmentData[] = []; + + while(totalAssignments > 0) + { + const variableItemId = wrapper.readInt(); + const hasValue = wrapper.readBoolean(); + const rawValue = wrapper.readInt(); + const createdAt = wrapper.readInt(); + const updatedAt = wrapper.readInt(); + + assignments.push({ + variableItemId, + hasValue, + value: (hasValue ? rawValue : null), + createdAt, + updatedAt + }); + + totalAssignments--; + } + + this._users.push({ userId, assignments }); + totalUsers--; + } + + let totalFurniDefinitions = wrapper.readInt(); + + while(totalFurniDefinitions > 0) + { + this._furniDefinitions.push({ + itemId: wrapper.readInt(), + name: wrapper.readString(), + hasValue: wrapper.readBoolean(), + availability: wrapper.readInt(), + isTextConnected: wrapper.readBoolean(), + isReadOnly: wrapper.readBoolean() + }); + + totalFurniDefinitions--; + } + + let totalFurnis = wrapper.readInt(); + + while(totalFurnis > 0) + { + const furniId = wrapper.readInt(); + let totalAssignments = wrapper.readInt(); + const assignments: IWiredUserVariableAssignmentData[] = []; + + while(totalAssignments > 0) + { + const variableItemId = wrapper.readInt(); + const hasValue = wrapper.readBoolean(); + const rawValue = wrapper.readInt(); + const createdAt = wrapper.readInt(); + const updatedAt = wrapper.readInt(); + + assignments.push({ + variableItemId, + hasValue, + value: (hasValue ? rawValue : null), + createdAt, + updatedAt + }); + + totalAssignments--; + } + + this._furnis.push({ furniId, assignments }); + totalFurnis--; + } + + let totalRoomDefinitions = wrapper.readInt(); + + while(totalRoomDefinitions > 0) + { + this._roomDefinitions.push({ + itemId: wrapper.readInt(), + name: wrapper.readString(), + hasValue: wrapper.readBoolean(), + availability: wrapper.readInt(), + isTextConnected: wrapper.readBoolean(), + isReadOnly: wrapper.readBoolean() + }); + + totalRoomDefinitions--; + } + + let totalRoomAssignments = wrapper.readInt(); + + while(totalRoomAssignments > 0) + { + const variableItemId = wrapper.readInt(); + const hasValue = wrapper.readBoolean(); + const rawValue = wrapper.readInt(); + const createdAt = wrapper.readInt(); + const updatedAt = wrapper.readInt(); + + this._roomAssignments.push({ + variableItemId, + hasValue, + value: (hasValue ? rawValue : null), + createdAt, + updatedAt + }); + + totalRoomAssignments--; + } + + let totalContextDefinitions = wrapper.readInt(); + + while(totalContextDefinitions > 0) + { + this._contextDefinitions.push({ + itemId: wrapper.readInt(), + name: wrapper.readString(), + hasValue: wrapper.readBoolean(), + availability: wrapper.readInt(), + isTextConnected: wrapper.readBoolean(), + isReadOnly: wrapper.readBoolean() + }); + + totalContextDefinitions--; + } + + return true; + } + + public get roomId(): number + { + return this._roomId; + } + + public get definitions(): IWiredUserVariableDefinitionData[] + { + return this._definitions; + } + + public get users(): IWiredUserVariablesUserData[] + { + return this._users; + } + + public get furniDefinitions(): IWiredFurniVariableDefinitionData[] + { + return this._furniDefinitions; + } + + public get furnis(): IWiredUserVariablesFurniData[] + { + return this._furnis; + } + + public get roomDefinitions(): IWiredRoomVariableDefinitionData[] + { + return this._roomDefinitions; + } + + public get roomAssignments(): IWiredRoomVariableAssignmentData[] + { + return this._roomAssignments; + } + + public get contextDefinitions(): IWiredContextVariableDefinitionData[] + { + return this._contextDefinitions; + } +} diff --git a/packages/communication/src/messages/parser/roomevents/index.ts b/packages/communication/src/messages/parser/roomevents/index.ts index cca201e..9547d14 100644 --- a/packages/communication/src/messages/parser/roomevents/index.ts +++ b/packages/communication/src/messages/parser/roomevents/index.ts @@ -5,7 +5,10 @@ export * from './WiredActionDefinition'; export * from './WiredFurniActionParser'; export * from './WiredFurniConditionParser'; export * from './WiredFurniTriggerParser'; +export * from './WiredMonitorDataParser'; +export * from './WiredRoomSettingsDataParser'; export * from './WiredOpenParser'; export * from './WiredRewardResultMessageParser'; export * from './WiredSaveSuccessParser'; +export * from './WiredUserVariablesDataParser'; export * from './WiredValidationErrorParser'; diff --git a/packages/room/src/RoomMessageHandler.ts b/packages/room/src/RoomMessageHandler.ts index 706b3d8..5998810 100644 --- a/packages/room/src/RoomMessageHandler.ts +++ b/packages/room/src/RoomMessageHandler.ts @@ -607,6 +607,19 @@ export class RoomMessageHandler return true; } + private getReleasedWiredStatusLocation(status: RoomUnitStatusMessage): IVector3D + { + const activeMovement = this._activeWiredUserMovements.get(status.id); + + if(!activeMovement) return null; + + if(activeMovement.expiresAt <= Date.now()) return null; + + if(!this.shouldReleaseWiredStatusLocation(status, activeMovement)) return null; + + return new Vector3d(activeMovement.targetX, activeMovement.targetY, activeMovement.targetZ); + } + private shouldReleaseWiredStatusLocation(status: RoomUnitStatusMessage, activeMovement: { expiresAt: number, targetX: number, targetY: number, targetZ: number }): boolean { if(!status.didMove) @@ -967,7 +980,8 @@ export class RoomMessageHandler if(height) height = (height / zScale); - const location = new Vector3d(status.x, status.y, (status.z + height)); + const releasedWiredLocation = this.getReleasedWiredStatusLocation(status); + const location = (releasedWiredLocation || new Vector3d(status.x, status.y, (status.z + height))); const direction = new Vector3d(status.direction); let goal: IVector3D = null; diff --git a/packages/room/src/object/visualization/furniture/FurnitureBadgeDisplayVisualization.ts b/packages/room/src/object/visualization/furniture/FurnitureBadgeDisplayVisualization.ts index 7caa949..7e344e8 100644 --- a/packages/room/src/object/visualization/furniture/FurnitureBadgeDisplayVisualization.ts +++ b/packages/room/src/object/visualization/furniture/FurnitureBadgeDisplayVisualization.ts @@ -283,6 +283,8 @@ export class FurnitureBadgeDisplayVisualization extends FurnitureAnimatedVisuali tempCtx.putImageData(patchData, 0, 0); accCtx.drawImage(tempCanvas, frame.dims.left, frame.dims.top); + tempCanvas.width = 0; + tempCanvas.height = 0; // Create a new canvas for this frame and create a texture from it const frameCanvas = document.createElement('canvas'); @@ -299,6 +301,9 @@ export class FurnitureBadgeDisplayVisualization extends FurnitureAnimatedVisuali frameDelays.push(frame.delay || 10); } + accCanvas.width = 0; + accCanvas.height = 0; + // Create AnimatedSprite with frame textures if(this._frameTextures.length > 1) { @@ -340,6 +345,13 @@ export class FurnitureBadgeDisplayVisualization extends FurnitureAnimatedVisuali ctx.clearRect(0, 0, badgeCanvas.width, badgeCanvas.height); ctx.drawImage(img, 0, 0, badgeCanvas.width, badgeCanvas.height); tex.source.update(); + img.onload = null; + img.onerror = null; + }; + img.onerror = () => + { + img.onload = null; + img.onerror = null; }; img.src = badgeUrl; } diff --git a/packages/room/src/object/visualization/furniture/FurnitureDynamicThumbnailVisualization.ts b/packages/room/src/object/visualization/furniture/FurnitureDynamicThumbnailVisualization.ts index 1fdb4d2..4c0697a 100644 --- a/packages/room/src/object/visualization/furniture/FurnitureDynamicThumbnailVisualization.ts +++ b/packages/room/src/object/visualization/furniture/FurnitureDynamicThumbnailVisualization.ts @@ -28,10 +28,19 @@ export class FurnitureDynamicThumbnailVisualization extends IsometricImageFurniV if (image.complete && image.width > 0 && image.height > 0) { const texture = Texture.from(image); texture.source.scaleMode = 'linear'; - this.setThumbnailImages(texture, thumbnailUrl); // Pass URL here + + this.setThumbnailImages(texture, thumbnailUrl); } else { - console.error("Image failed to load properly:", thumbnailUrl); + this.setThumbnailImages(null); } + image.onload = null; + image.onerror = null; + }; + + image.onerror = () => { + this.setThumbnailImages(null); + image.onload = null; + image.onerror = null; }; } else { this.setThumbnailImages(null); diff --git a/packages/room/src/object/visualization/furniture/FurnitureYoutubeVisualization.ts b/packages/room/src/object/visualization/furniture/FurnitureYoutubeVisualization.ts index 1b1a544..73cb319 100644 --- a/packages/room/src/object/visualization/furniture/FurnitureYoutubeVisualization.ts +++ b/packages/room/src/object/visualization/furniture/FurnitureYoutubeVisualization.ts @@ -5,6 +5,13 @@ export class FurnitureYoutubeVisualization extends FurnitureDynamicThumbnailVisu { protected static THUMBNAIL_URL: string = 'THUMBNAIL_URL'; + constructor() + { + super(); + + this._hasOutline = false; + } + protected getThumbnailURL(): string { if(!this.object) return null; diff --git a/packages/room/src/object/visualization/furniture/IsometricImageFurniVisualization.ts b/packages/room/src/object/visualization/furniture/IsometricImageFurniVisualization.ts index 3e5ad89..a5ee557 100644 --- a/packages/room/src/object/visualization/furniture/IsometricImageFurniVisualization.ts +++ b/packages/room/src/object/visualization/furniture/IsometricImageFurniVisualization.ts @@ -1,15 +1,16 @@ import { IGraphicAsset } from '@nitrots/api'; -import { GetRenderer, TextureUtils } from '@nitrots/utils'; -import { Container, Graphics, Matrix, Sprite, Texture, RenderTexture } from 'pixi.js'; +import { GetRenderer } from '@nitrots/utils'; +import { Container, Matrix, Sprite, Texture, RenderTexture } from 'pixi.js'; import { FurnitureAnimatedVisualization } from './FurnitureAnimatedVisualization'; export class IsometricImageFurniVisualization extends FurnitureAnimatedVisualization { protected static THUMBNAIL: string = 'THUMBNAIL'; - private _thumbnailAssetNameNormal: string; private _thumbnailImageNormal: Texture; private _thumbnailDirection: number; private _thumbnailChanged: boolean; + private _thumbnailLayerId: number; + private _thumbnailTexture: Texture; private _uniqueId: string; private _photoUrl: string; protected _hasOutline: boolean; @@ -17,10 +18,11 @@ export class IsometricImageFurniVisualization extends FurnitureAnimatedVisualiza constructor() { super(); - this._thumbnailAssetNameNormal = null; this._thumbnailImageNormal = null; this._thumbnailDirection = -1; this._thumbnailChanged = false; + this._thumbnailLayerId = -1; + this._thumbnailTexture = null; this._uniqueId = `${Date.now()}-${Math.random().toString(36).substring(2, 9)}`; this._photoUrl = null; } @@ -56,13 +58,14 @@ export class IsometricImageFurniVisualization extends FurnitureAnimatedVisualiza return; } - const thumbnailAssetName = this.getThumbnailAssetName(64); - if (this._thumbnailImageNormal) { this.addThumbnailAsset(this._thumbnailImageNormal, 64); } else { - const layerId = 2; - const sprite = this.getSprite(layerId); + if (this._thumbnailTexture instanceof RenderTexture) { + this._thumbnailTexture.destroy(true); + } + this._thumbnailTexture = null; + this._thumbnailLayerId = -1; } this._thumbnailChanged = false; @@ -76,21 +79,16 @@ export class IsometricImageFurniVisualization extends FurnitureAnimatedVisualiza const layerTag = this.getLayerTag(scale, this.direction, layerId); if (layerTag === IsometricImageFurniVisualization.THUMBNAIL) { + this._thumbnailLayerId = layerId; + const assetName = (this.cacheSpriteAssetName(scale, layerId, false) + this.getFrameNumber(scale, layerId)); const asset = this.getAsset(assetName, layerId); - const thumbnailAssetName = `${this.getThumbnailAssetName(scale)}-${this._uniqueId}`; - const transformedTexture = this.generateTransformedThumbnail(k, asset || { width: 64, height: 64 }); - // Use the original asset's registered offsets so the thumbnail is drawn at the - // furniture-defined sprite position. Fall back to centering when no asset exists. - const offsetX = asset ? asset.offsetX : -Math.floor(transformedTexture.width / 2); - const offsetY = asset ? asset.offsetY : -Math.floor(transformedTexture.height / 2); - - this.asset.addAsset(thumbnailAssetName, transformedTexture, true, offsetX, offsetY, false, false); - - const placedSprite = this.getSprite(layerId); - if (placedSprite) { - placedSprite.texture = transformedTexture; + if (asset) { + if (this._thumbnailTexture instanceof RenderTexture) { + this._thumbnailTexture.destroy(true); + } + this._thumbnailTexture = this.generateTransformedThumbnail(k, asset); } return; @@ -100,78 +98,117 @@ export class IsometricImageFurniVisualization extends FurnitureAnimatedVisualiza } } - protected generateTransformedThumbnail(texture: Texture, asset: IGraphicAsset): Texture { - const scaleFactor = (asset?.width || 64) / texture.width; - const verticalScale = 1.0265; - const matrix = new Matrix(); - const frameThickness = 20; - const frameColor = 0x000000; + protected updateSprite(scale: number, layerId: number): void { + super.updateSprite(scale, layerId); - switch (this.direction) { + if (this._thumbnailTexture && this._thumbnailLayerId === layerId) { + const sprite = this.getSprite(layerId); + if (sprite) { + sprite.texture = this._thumbnailTexture; + } + } + } + + protected generateTransformedThumbnail(texture: Texture, asset: IGraphicAsset): Texture { + const assetWidth = asset.width; + const assetHeight = asset.height; + let outlineTexture: RenderTexture = null; + + if(this._hasOutline) + { + const borderSize = 20; + const bgWidth = texture.width + borderSize * 2; + const bgHeight = texture.height + borderSize * 2; + + const container = new Container(); + const background = new Sprite(Texture.WHITE); + background.tint = 0x000000; + background.width = bgWidth; + background.height = bgHeight; + + const imageSprite = new Sprite(texture); + imageSprite.position.set(borderSize, borderSize); + + container.addChild(background, imageSprite); + + outlineTexture = RenderTexture.create({ width: bgWidth, height: bgHeight, resolution: 1 }); + GetRenderer().render({ container, target: outlineTexture, clear: true }); + + texture = outlineTexture; + } + + texture.source.scaleMode = 'linear'; + + const texW = texture.width; + const texH = texture.height; + const scaleX = assetWidth / texW; + const scaleY = assetHeight / texH; + + const matrix = new Matrix(); + + switch(this.direction) + { case 2: - matrix.a = scaleFactor; - matrix.b = (-0.5 * scaleFactor); + matrix.a = scaleX; + matrix.b = -(0.5 * scaleX); matrix.c = 0; - matrix.d = (scaleFactor * verticalScale); + matrix.d = (scaleY / 1.6); matrix.tx = 0; - matrix.ty = (0.5 * scaleFactor * texture.width); + matrix.ty = (0.5 * scaleX * texW); break; case 0: case 4: - matrix.a = scaleFactor; - matrix.b = (0.5 * scaleFactor); + matrix.a = scaleX; + matrix.b = (0.5 * scaleX); matrix.c = 0; - matrix.d = (scaleFactor * verticalScale); + matrix.d = (scaleY / 1.6); matrix.tx = 0; matrix.ty = 0; break; default: - matrix.a = scaleFactor; + matrix.a = scaleX; matrix.b = 0; matrix.c = 0; - matrix.d = scaleFactor; + matrix.d = scaleY; matrix.tx = 0; matrix.ty = 0; } - const imgWidth = texture.width; - const imgHeight = texture.height; - const flatWidth = imgWidth + frameThickness * 2; - const flatHeight = imgHeight + frameThickness * 2; - const flatRenderTexture = TextureUtils.createAndFillRenderTexture(flatWidth, flatHeight, frameColor); - const imageSprite = new Sprite(texture); - imageSprite.position.set(frameThickness, frameThickness); - TextureUtils.writeToTexture(imageSprite, flatRenderTexture, false); - const flatTexture = flatRenderTexture; - const transformedSprite = new Sprite(flatTexture); - transformedSprite.setFromMatrix(matrix); - const width = 80; - const height = 80; - const finalContainer = new Container(); - const posX = (width - transformedSprite.width) / 2; - const posY = (height - transformedSprite.height) / 2; - transformedSprite.position.set(posX, posY); - finalContainer.addChild(transformedSprite); + // Calculate transformed corners manually for accurate bounds + const corners = [ + { x: matrix.tx, y: matrix.ty }, + { x: matrix.a * texW + matrix.tx, y: matrix.b * texW + matrix.ty }, + { x: matrix.c * texH + matrix.tx, y: matrix.d * texH + matrix.ty }, + { x: matrix.a * texW + matrix.c * texH + matrix.tx, y: matrix.b * texW + matrix.d * texH + matrix.ty } + ]; - const renderTexture = RenderTexture.create({ width, height, resolution: 1 }); - GetRenderer().render({ container: finalContainer, target: renderTexture, clear: true }); + let minX = corners[0].x, minY = corners[0].y; + let maxX = corners[0].x, maxY = corners[0].y; + + for (const corner of corners) { + if (corner.x < minX) minX = corner.x; + if (corner.y < minY) minY = corner.y; + if (corner.x > maxX) maxX = corner.x; + if (corner.y > maxY) maxY = corner.y; + } + + const renderWidth = Math.ceil(maxX - minX); + const renderHeight = Math.ceil(maxY - minY); + + matrix.tx -= minX; + matrix.ty -= minY; + + const transformedSprite = new Sprite(texture); + transformedSprite.setFromMatrix(matrix); + + const renderTexture = RenderTexture.create({ width: renderWidth, height: renderHeight, resolution: 1 }); + GetRenderer().render({ container: transformedSprite, target: renderTexture, clear: true }); + + if (outlineTexture) { + outlineTexture.destroy(true); + } return renderTexture; } - protected getSpriteAssetName(scale: number, layerId: number): string { - if (this._thumbnailImageNormal && (this.getLayerTag(scale, this.direction, layerId) === IsometricImageFurniVisualization.THUMBNAIL)) { - return `${this.getThumbnailAssetName(scale)}-${this._uniqueId}`; - } - - return super.getSpriteAssetName(scale, layerId); - } - - protected getThumbnailAssetName(scale: number): string { - return this.cacheSpriteAssetName(scale, 2, false) + this.getFrameNumber(scale, 2); - } - - protected getFullThumbnailAssetName(k: number, _arg_2: number): string { - return [this._type, k, 'thumb', _arg_2].join('_'); - } -} \ No newline at end of file +} diff --git a/packages/room/src/object/visualization/room/RoomPlane.ts b/packages/room/src/object/visualization/room/RoomPlane.ts index a1391bd..3556447 100644 --- a/packages/room/src/object/visualization/room/RoomPlane.ts +++ b/packages/room/src/object/visualization/room/RoomPlane.ts @@ -867,203 +867,218 @@ export class RoomPlane implements IRoomPlane } private renderWindowReflections(): void +{ + if(!this._planeTexture || !this._leftSide || !this._rightSide || !this._normal) return; + + if(this._leftSide.length <= 0 || this._rightSide.length <= 0) return; + + const now = Date.now(); + const fadeDurationMs = 150; + const avatars = RoomWindowReflectionState.getAvatars(); + const canvasWidth = this._landscapeRenderWidth; + const canvasHeight = this._landscapeRenderHeight; + + if(canvasWidth <= 0 || canvasHeight <= 0) return; + + const container = new Container(); + const visibleAvatarIds = new Set(); + + const addReflectionSprite = ( + texture: Texture, + oppositeTexture: Texture, + location: IVector3D, + alpha: number, + verticalOffset: number = 0, + direction: number = 0, + avatarId: number = -1 + ): boolean => { - if(!this._planeTexture || !this._leftSide || !this._rightSide || !this._normal) return; + if(!texture?.source || texture.source.destroyed || !texture.source.style || !location || alpha < 0) + return false; - if(this._leftSide.length <= 0 || this._rightSide.length <= 0) return; + const relative = Vector3d.dif(location, this._location); + const planeDistance = Math.abs(Vector3d.scalarProjection(relative, this._normal)); - const now = Date.now(); - const fadeDurationMs = 150; - const avatars = RoomWindowReflectionState.getAvatars(); - const canvasWidth = this._landscapeRenderWidth; - const canvasHeight = this._landscapeRenderHeight; + if(planeDistance > 0.8) return false; - if(canvasWidth <= 0 || canvasHeight <= 0) return; + const leftSideLoc = Vector3d.scalarProjection(relative, this._leftSide); + const rightSideLoc = Vector3d.scalarProjection(relative, this._rightSide); - const container = new Container(); - const visibleAvatarIds = new Set(); - - const addReflectionSprite = (texture: Texture, oppositeTexture: Texture, location: IVector3D, alpha: number, verticalOffset: number = 0, direction: number = 0, avatarId: number = -1): boolean => { - if(!texture?.source || texture.source.destroyed || !texture.source.style || !location || alpha < 0) return false; - - const relative = Vector3d.dif(location, this._location); - const planeDistance = Math.abs(Vector3d.scalarProjection(relative, this._normal)); - - if(planeDistance > 0.8) return false; - - const leftSideLoc = Vector3d.scalarProjection(relative, this._leftSide); - const rightSideLoc = Vector3d.scalarProjection(relative, this._rightSide); - - const closestMask = this._windowMasks.reduce((best, mask) => { - const score = Math.abs(mask.leftSideLoc - leftSideLoc) + Math.abs(mask.rightSideLoc - rightSideLoc); - - if(!best || (score < best.score)) return { mask, score }; - - return best; - }, null as { mask: { leftSideLoc: number; rightSideLoc: number }; score: number } | null); - - if(!closestMask || (closestMask.score > 3)) return false; - - const x = (canvasWidth - ((canvasWidth * leftSideLoc) / this._leftSide.length)); - const y = (canvasHeight - ((canvasHeight * rightSideLoc) / this._rightSide.length)) + verticalOffset; - - const toPlaneX = (this._location.x - location.x); - const toPlaneY = (this._location.y - location.y); - const toPlaneLength = Math.hypot(toPlaneX, toPlaneY); - - const facingRadians = ((((direction - 90) % 360) + 360) % 360) * (Math.PI / 180); - const facingX = Math.cos(facingRadians); - const facingY = Math.sin(facingRadians); - const facingWindow = (toPlaneLength > 0.001) - ? (((facingX * toPlaneX) + (facingY * toPlaneY)) / toPlaneLength) > 0.5 - : false; - - const deltaLeft = Math.abs(closestMask.mask.leftSideLoc - leftSideLoc); - const deltaRight = Math.abs(closestMask.mask.rightSideLoc - rightSideLoc); - - const isInFrontOfWindow = ((closestMask.score <= 2) && ((deltaLeft <= 0.9) || (deltaRight <= 0.9))); - const shouldMirror = isInFrontOfWindow; - - const normal2DLength = Math.hypot(this._normal.x, this._normal.y); - const normalX = (normal2DLength > 0.0001) ? (this._normal.x / normal2DLength) : 0; - const normalY = (normal2DLength > 0.0001) ? (this._normal.y / normal2DLength) : 0; - const normalFacingDot = Math.abs((facingX * normalX) + (facingY * normalY)); - - const transitionLow = 0.6; - const transitionHigh = 0.8; - let oppositeWeight = 0; - - if(shouldMirror && oppositeTexture) - { - if(normalFacingDot >= transitionHigh) oppositeWeight = 1; - else if(normalFacingDot > transitionLow) oppositeWeight = (normalFacingDot - transitionLow) / (transitionHigh - transitionLow); - } - - if(oppositeWeight < 1) - { - const sprite = new Sprite(texture); - sprite.anchor.set(0.5, 1); - sprite.position.set(Math.trunc(x), Math.trunc(y)); - sprite.scale.set(1, 1); - sprite.tint = 0xCFE3FF; - sprite.alpha = alpha * (1 - oppositeWeight); - container.addChild(sprite); - } - - if(oppositeWeight > 0 && oppositeTexture) - { - const sprite = new Sprite(oppositeTexture); - sprite.anchor.set(0.5, 1); - sprite.position.set(Math.trunc(x), Math.trunc(y)); - sprite.scale.set(1, 1); - sprite.tint = 0xCFE3FF; - sprite.alpha = alpha * oppositeWeight; - container.addChild(sprite); - } - - return true; - }; - - for(const avatar of avatars) + const closestMask = this._windowMasks.reduce((best, mask) => { - if(!avatar?.texture?.source || avatar.texture.source.destroyed || !avatar.texture.source.style || !avatar.location) continue; + const score = Math.abs(mask.leftSideLoc - leftSideLoc) + Math.abs(mask.rightSideLoc - rightSideLoc); - let firstSeenAt = this._windowReflectionFirstSeenAt.get(avatar.id); + if(!best || (score < best.score)) return { mask, score }; - if(firstSeenAt === undefined) - { - firstSeenAt = now; - } + return best; + }, null as { mask: { leftSideLoc: number; rightSideLoc: number }; score: number } | null); - const elapsed = Math.min(fadeDurationMs, Math.max(0, (now - firstSeenAt))); - const progress = (elapsed / fadeDurationMs); - const alpha = (0.4 * progress); + if(!closestMask || (closestMask.score > 3)) return false; - if(!addReflectionSprite(avatar.texture, avatar.oppositeTexture, avatar.location, alpha, avatar.verticalOffset || 0, avatar.direction || 0, avatar.id)) continue; + const x = (canvasWidth - ((canvasWidth * leftSideLoc) / this._leftSide.length)); + const y = (canvasHeight - ((canvasHeight * rightSideLoc) / this._rightSide.length)) + verticalOffset; - if(!this._windowReflectionFirstSeenAt.has(avatar.id)) this._windowReflectionFirstSeenAt.set(avatar.id, firstSeenAt); + const toPlaneX = (this._location.x - location.x); + const toPlaneY = (this._location.y - location.y); + const toPlaneLength = Math.hypot(toPlaneX, toPlaneY); - visibleAvatarIds.add(avatar.id); - this._windowReflectionFadeOut.delete(avatar.id); + const facingRadians = ((((direction - 90) % 360) + 360) % 360) * (Math.PI / 180); + const facingX = Math.cos(facingRadians); + const facingY = Math.sin(facingRadians); + const facingWindow = (toPlaneLength > 0.001) + ? (((facingX * toPlaneX) + (facingY * toPlaneY)) / toPlaneLength) > 0.5 + : false; - const storedLocation = new Vector3d(); - storedLocation.assign(avatar.location); + const deltaLeft = Math.abs(closestMask.mask.leftSideLoc - leftSideLoc); + const deltaRight = Math.abs(closestMask.mask.rightSideLoc - rightSideLoc); - this._windowReflectionLastVisible.set(avatar.id, { - texture: avatar.texture, - oppositeTexture: avatar.oppositeTexture, - location: storedLocation, - verticalOffset: avatar.verticalOffset || 0, - direction: avatar.direction || 0 - }); + const isInFrontOfWindow = ((closestMask.score <= 2) && ((deltaLeft <= 0.9) || (deltaRight <= 0.9))); + const shouldMirror = isInFrontOfWindow; + + const normal2DLength = Math.hypot(this._normal.x, this._normal.y); + const normalX = (normal2DLength > 0.0001) ? (this._normal.x / normal2DLength) : 0; + const normalY = (normal2DLength > 0.0001) ? (this._normal.y / normal2DLength) : 0; + const normalFacingDot = Math.abs((facingX * normalX) + (facingY * normalY)); + + const transitionLow = 0.6; + const transitionHigh = 0.8; + let oppositeWeight = 0; + + if(shouldMirror && oppositeTexture) + { + if(normalFacingDot >= transitionHigh) oppositeWeight = 1; + else if(normalFacingDot > transitionLow) + oppositeWeight = (normalFacingDot - transitionLow) / (transitionHigh - transitionLow); } - for(const [id, lastVisible] of this._windowReflectionLastVisible) + if(oppositeWeight < 1) { - if(visibleAvatarIds.has(id) || this._windowReflectionFadeOut.has(id)) continue; - - if(!lastVisible.texture?.source || lastVisible.texture.source.destroyed || !lastVisible.texture.source.style) - { - this._windowReflectionLastVisible.delete(id); - this._windowReflectionFirstSeenAt.delete(id); - - continue; - } - - this._windowReflectionFadeOut.set(id, { - texture: lastVisible.texture, - oppositeTexture: lastVisible.oppositeTexture, - location: lastVisible.location, - verticalOffset: lastVisible.verticalOffset, - direction: lastVisible.direction, - startedAt: now - }); - - this._windowReflectionLastVisible.delete(id); - this._windowReflectionFirstSeenAt.delete(id); + const sprite = new Sprite(texture); + sprite.anchor.set(0.5, 1); + sprite.position.set(Math.trunc(x), Math.trunc(y)); + sprite.tint = 0xCFE3FF; + sprite.alpha = alpha * (1 - oppositeWeight); + container.addChild(sprite); } - for(const [id, fadeOut] of this._windowReflectionFadeOut) + if(oppositeWeight > 0 && oppositeTexture) { - const elapsed = (now - fadeOut.startedAt); - - if(elapsed >= fadeDurationMs) - { - this._windowReflectionFadeOut.delete(id); - - continue; - } - - const alpha = (0.4 * (1 - (elapsed / fadeDurationMs))); - - if(!addReflectionSprite(fadeOut.texture, fadeOut.oppositeTexture, fadeOut.location, alpha, fadeOut.verticalOffset, fadeOut.direction, id)) this._windowReflectionFadeOut.delete(id); + const sprite = new Sprite(oppositeTexture); + sprite.anchor.set(0.5, 1); + sprite.position.set(Math.trunc(x), Math.trunc(y)); + sprite.tint = 0xCFE3FF; + sprite.alpha = alpha * oppositeWeight; + container.addChild(sprite); } - if(!container.children.length) - { - container.destroy({ children: true }); + return true; + }; - if(!avatars.length) - { - this._windowReflectionFirstSeenAt.clear(); - this._windowReflectionLastVisible.clear(); - } + for(const avatar of avatars) + { + if(!avatar?.texture?.source || avatar.texture.source.destroyed || !avatar.texture.source.style || !avatar.location) + continue; - return; - } + let firstSeenAt = this._windowReflectionFirstSeenAt.get(avatar.id); - if(this._maskFilter) container.filters = [this._maskFilter]; + if(firstSeenAt === undefined) firstSeenAt = now; - GetRenderer().render({ - target: this._planeTexture, - container, - transform: this.getMatrixForDimensions(canvasWidth, canvasHeight), - clear: false + const elapsed = Math.min(fadeDurationMs, Math.max(0, (now - firstSeenAt))); + const alpha = (0.4 * (elapsed / fadeDurationMs)); + + if(!addReflectionSprite( + avatar.texture, + avatar.oppositeTexture, + avatar.location, + alpha, + avatar.verticalOffset || 0, + avatar.direction || 0, + avatar.id)) + continue; + + if(!this._windowReflectionFirstSeenAt.has(avatar.id)) + this._windowReflectionFirstSeenAt.set(avatar.id, firstSeenAt); + + visibleAvatarIds.add(avatar.id); + this._windowReflectionFadeOut.delete(avatar.id); + + const storedLocation = new Vector3d(); + storedLocation.assign(avatar.location); + + this._windowReflectionLastVisible.set(avatar.id, { + texture: avatar.texture, + oppositeTexture: avatar.oppositeTexture, + location: storedLocation, + verticalOffset: avatar.verticalOffset || 0, + direction: avatar.direction || 0 + }); + } + + // move to fade-out (NO destruction) + for(const [id, lastVisible] of this._windowReflectionLastVisible) + { + if(visibleAvatarIds.has(id) || this._windowReflectionFadeOut.has(id)) continue; + + this._windowReflectionFadeOut.set(id, { + ...lastVisible, + startedAt: now }); - container.destroy({ children: true }); + this._windowReflectionLastVisible.delete(id); + this._windowReflectionFirstSeenAt.delete(id); } + // fade-out rendering (NO destruction) + for(const [id, fadeOut] of this._windowReflectionFadeOut) + { + const elapsed = (now - fadeOut.startedAt); + + if(elapsed >= fadeDurationMs) + { + this._windowReflectionFadeOut.delete(id); + continue; + } + + const alpha = (0.4 * (1 - (elapsed / fadeDurationMs))); + + if(!addReflectionSprite( + fadeOut.texture, + fadeOut.oppositeTexture, + fadeOut.location, + alpha, + fadeOut.verticalOffset, + fadeOut.direction, + id)) + { + this._windowReflectionFadeOut.delete(id); + } + } + + if(!container.children.length) + { + container.destroy({ children: true }); + + if(!avatars.length) + { + this._windowReflectionFirstSeenAt.clear(); + this._windowReflectionLastVisible.clear(); + } + + return; + } + + if(this._maskFilter) container.filters = [this._maskFilter]; + + GetRenderer().render({ + target: this._planeTexture, + container, + transform: this.getMatrixForDimensions(canvasWidth, canvasHeight), + clear: false + }); + + container.destroy({ children: true }); + } + private updateCorners(geometry: IRoomGeometry): void { this._cornerA.assign(geometry.getScreenPosition(this._location)); diff --git a/packages/session/src/badge/BadgeImageManager.ts b/packages/session/src/badge/BadgeImageManager.ts index 6a51f7e..9bb5647 100644 --- a/packages/session/src/badge/BadgeImageManager.ts +++ b/packages/session/src/badge/BadgeImageManager.ts @@ -248,6 +248,7 @@ export class BadgeImageManager if(!renderedLayers) return false; const texture = TextureUtils.generateTexture(container); + container.destroy({ children: true }); GetAssetManager().setTexture(groupBadge.code, texture); GetEventDispatcher().dispatchEvent(new BadgeImageReadyEvent(groupBadge.code, texture)); diff --git a/yarn.lock b/yarn.lock index 68009ac..bac5884 100644 --- a/yarn.lock +++ b/yarn.lock @@ -88,37 +88,15 @@ integrity sha512-+B87qS7fIG3L5h3qwJ/IFbjoVoOe/bpOdh9hAjXbvx0o8ImEmUsGXN0inFOnk2ChCFgqkkGFQ+TpM5rbhkKe4w== "@csstools/css-syntax-patches-for-csstree@^1.0.21": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@csstools/css-syntax-patches-for-csstree/-/css-syntax-patches-for-csstree-1.1.1.tgz#ce4c9a0cbe30590491fcd5c03fe6426d22ba89e4" - integrity sha512-BvqN0AMWNAnLk9G8jnUT77D+mUbY/H2b3uDTvg2isJkHaOufUE2R3AOwxWo7VBQKT1lOdwdvorddo2B/lk64+w== + version "1.1.2" + resolved "https://registry.yarnpkg.com/@csstools/css-syntax-patches-for-csstree/-/css-syntax-patches-for-csstree-1.1.2.tgz#bef07c507732a052b662302e7cb4e9fdf522af90" + integrity sha512-5GkLzz4prTIpoyeUiIu3iV6CSG3Plo7xRVOFPKI7FVEJ3mZ0A8SwK0XU3Gl7xAkiQ+mDyam+NNp875/C5y+jSA== "@csstools/css-tokenizer@^4.0.0": version "4.0.0" resolved "https://registry.yarnpkg.com/@csstools/css-tokenizer/-/css-tokenizer-4.0.0.tgz#798a33950d11226a0ebb6acafa60f5594424967f" integrity sha512-QxULHAm7cNu72w97JUNCBFODFaXpbDg+dP8b/oWFAZ2MTRppA3U00Y2L1HqaS4J6yBqxwa/Y3nMBaxVKbB/NsA== -"@emnapi/core@^1.7.1": - version "1.9.1" - resolved "https://registry.yarnpkg.com/@emnapi/core/-/core-1.9.1.tgz#2143069c744ca2442074f8078462e51edd63c7bd" - integrity sha512-mukuNALVsoix/w1BJwFzwXBN/dHeejQtuVzcDsfOEsdpCumXb/E9j8w11h5S54tT1xhifGfbbSm/ICrObRb3KA== - dependencies: - "@emnapi/wasi-threads" "1.2.0" - tslib "^2.4.0" - -"@emnapi/runtime@^1.7.1": - version "1.9.1" - resolved "https://registry.yarnpkg.com/@emnapi/runtime/-/runtime-1.9.1.tgz#115ff2a0d589865be6bd8e9d701e499c473f2a8d" - integrity sha512-VYi5+ZVLhpgK4hQ0TAjiQiZ6ol0oe4mBx7mVv7IflsiEp0OWoVsp/+f9Vc1hOhE0TtkORVrI1GvzyreqpgWtkA== - dependencies: - tslib "^2.4.0" - -"@emnapi/wasi-threads@1.2.0": - version "1.2.0" - resolved "https://registry.yarnpkg.com/@emnapi/wasi-threads/-/wasi-threads-1.2.0.tgz#a19d9772cc3d195370bf6e2a805eec40aa75e18e" - integrity sha512-N10dEJNSsUx41Z6pZsXU8FjPjpBEplgH24sfkmITrBED1/U2Esum9F3lfLrMjKHHjmi557zQn7kR9R+XWXu5Rg== - dependencies: - tslib "^2.4.0" - "@esbuild/aix-ppc64@0.21.5": version "0.21.5" resolved "https://registry.yarnpkg.com/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz#c7184a326533fcdf1b8ee0733e21c713b975575f" @@ -349,12 +327,10 @@ "@jridgewell/sourcemap-codec" "^1.4.14" "@napi-rs/wasm-runtime@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@napi-rs/wasm-runtime/-/wasm-runtime-1.1.1.tgz#c3705ab549d176b8dc5172723d6156c3dc426af2" - integrity sha512-p64ah1M1ld8xjWv3qbvFwHiFVWrq1yFvV4f7w+mzaqiR4IlSgkqhcRdHwsGgomwzBH51sRY4NEowLxnaBjcW/A== + version "1.1.2" + resolved "https://registry.yarnpkg.com/@napi-rs/wasm-runtime/-/wasm-runtime-1.1.2.tgz#e25454b4d44cfabd21d1bc801705359870e33ecc" + integrity sha512-sNXv5oLJ7ob93xkZ1XnxisYhGYXfaG9f65/ZgYuAu3qt7b3NadcOEhLvx28hv31PgX8SZJRYrAIPQilQmFpLVw== dependencies: - "@emnapi/core" "^1.7.1" - "@emnapi/runtime" "^1.7.1" "@tybys/wasm-util" "^0.10.1" "@oxc-project/types@=0.122.0": @@ -372,87 +348,87 @@ resolved "https://registry.yarnpkg.com/@pixi/gif/-/gif-3.0.1.tgz#2709d6559d316161cde1821b0f29cc2c05f88794" integrity sha512-oGl0nkbFAe1vaRLyIvGbJc3fcIrS8vF1E00cwjiV+9f1pYe072D+yijJxHsgYnXs6jdzERh+D0MqSrEag0jRzg== -"@rolldown/binding-android-arm64@1.0.0-rc.11": - version "1.0.0-rc.11" - resolved "https://registry.yarnpkg.com/@rolldown/binding-android-arm64/-/binding-android-arm64-1.0.0-rc.11.tgz#25a584227ed97239fd564451c0db2c359751b42a" - integrity sha512-SJ+/g+xNnOh6NqYxD0V3uVN4W3VfnrGsC9/hoglicgTNfABFG9JjISvkkU0dNY84MNHLWyOgxP9v9Y9pX4S7+A== +"@rolldown/binding-android-arm64@1.0.0-rc.12": + version "1.0.0-rc.12" + resolved "https://registry.yarnpkg.com/@rolldown/binding-android-arm64/-/binding-android-arm64-1.0.0-rc.12.tgz#4e6af08b89da02596cc5da4b105082b68673ffec" + integrity sha512-pv1y2Fv0JybcykuiiD3qBOBdz6RteYojRFY1d+b95WVuzx211CRh+ytI/+9iVyWQ6koTh5dawe4S/yRfOFjgaA== -"@rolldown/binding-darwin-arm64@1.0.0-rc.11": - version "1.0.0-rc.11" - resolved "https://registry.yarnpkg.com/@rolldown/binding-darwin-arm64/-/binding-darwin-arm64-1.0.0-rc.11.tgz#dcfa96c4d8c7baa47f5b90294ce8ebf1b0b1dbf9" - integrity sha512-7WQgR8SfOPwmDZGFkThUvsmd/nwAWv91oCO4I5LS7RKrssPZmOt7jONN0cW17ydGC1n/+puol1IpoieKqQidmg== +"@rolldown/binding-darwin-arm64@1.0.0-rc.12": + version "1.0.0-rc.12" + resolved "https://registry.yarnpkg.com/@rolldown/binding-darwin-arm64/-/binding-darwin-arm64-1.0.0-rc.12.tgz#a06890f4c9b48ff0fc97edbedfc762bef7cffd73" + integrity sha512-cFYr6zTG/3PXXF3pUO+umXxt1wkRK/0AYT8lDwuqvRC+LuKYWSAQAQZjCWDQpAH172ZV6ieYrNnFzVVcnSflAg== -"@rolldown/binding-darwin-x64@1.0.0-rc.11": - version "1.0.0-rc.11" - resolved "https://registry.yarnpkg.com/@rolldown/binding-darwin-x64/-/binding-darwin-x64-1.0.0-rc.11.tgz#6e751ea2067cacee0c94f0e8b087761dde62f9ea" - integrity sha512-39Ks6UvIHq4rEogIfQBoBRusj0Q0nPVWIvqmwBLaT6aqQGIakHdESBVOPRRLacy4WwUPIx4ZKzfZ9PMW+IeyUQ== +"@rolldown/binding-darwin-x64@1.0.0-rc.12": + version "1.0.0-rc.12" + resolved "https://registry.yarnpkg.com/@rolldown/binding-darwin-x64/-/binding-darwin-x64-1.0.0-rc.12.tgz#eddf6aa3ed3509171fe21711f1e8ec8e0fd7ec49" + integrity sha512-ZCsYknnHzeXYps0lGBz8JrF37GpE9bFVefrlmDrAQhOEi4IOIlcoU1+FwHEtyXGx2VkYAvhu7dyBf75EJQffBw== -"@rolldown/binding-freebsd-x64@1.0.0-rc.11": - version "1.0.0-rc.11" - resolved "https://registry.yarnpkg.com/@rolldown/binding-freebsd-x64/-/binding-freebsd-x64-1.0.0-rc.11.tgz#b7582b959398c5871034b94ba0a8ecde0425a8e7" - integrity sha512-jfsm0ZHfhiqrvWjJAmzsqiIFPz5e7mAoCOPBNTcNgkiid/LaFKiq92+0ojH+nmJmKYkre4t71BWXUZDNp7vsag== +"@rolldown/binding-freebsd-x64@1.0.0-rc.12": + version "1.0.0-rc.12" + resolved "https://registry.yarnpkg.com/@rolldown/binding-freebsd-x64/-/binding-freebsd-x64-1.0.0-rc.12.tgz#2102dfed19fd1f1b53435fcaaf0bc61129a266a3" + integrity sha512-dMLeprcVsyJsKolRXyoTH3NL6qtsT0Y2xeuEA8WQJquWFXkEC4bcu1rLZZSnZRMtAqwtrF/Ib9Ddtpa/Gkge9Q== -"@rolldown/binding-linux-arm-gnueabihf@1.0.0-rc.11": - version "1.0.0-rc.11" - resolved "https://registry.yarnpkg.com/@rolldown/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-1.0.0-rc.11.tgz#3b8c5e071d6a0ed1cb1880c1948c6fece553502a" - integrity sha512-zjQaUtSyq1nVe3nxmlSCuR96T1LPlpvmJ0SZy0WJFEsV4kFbXcq2u68L4E6O0XeFj4aex9bEauqjW8UQBeAvfQ== +"@rolldown/binding-linux-arm-gnueabihf@1.0.0-rc.12": + version "1.0.0-rc.12" + resolved "https://registry.yarnpkg.com/@rolldown/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-1.0.0-rc.12.tgz#b2c13f40e990fd1e1935492850536c768c961a0f" + integrity sha512-YqWjAgGC/9M1lz3GR1r1rP79nMgo3mQiiA+Hfo+pvKFK1fAJ1bCi0ZQVh8noOqNacuY1qIcfyVfP6HoyBRZ85Q== -"@rolldown/binding-linux-arm64-gnu@1.0.0-rc.11": - version "1.0.0-rc.11" - resolved "https://registry.yarnpkg.com/@rolldown/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.0.0-rc.11.tgz#2533165620137b077ae4ede92b752a63cd85cfcb" - integrity sha512-WMW1yE6IOnehTcFE9eipFkm3XN63zypWlrJQ2iF7NrQ9b2LDRjumFoOGJE8RJJTJCTBAdmLMnJ8uVitACUUo1Q== +"@rolldown/binding-linux-arm64-gnu@1.0.0-rc.12": + version "1.0.0-rc.12" + resolved "https://registry.yarnpkg.com/@rolldown/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.0.0-rc.12.tgz#32ca9f77c1e76b2913b3d53d2029dc171c0532d6" + integrity sha512-/I5AS4cIroLpslsmzXfwbe5OmWvSsrFuEw3mwvbQ1kDxJ822hFHIx+vsN/TAzNVyepI/j/GSzrtCIwQPeKCLIg== -"@rolldown/binding-linux-arm64-musl@1.0.0-rc.11": - version "1.0.0-rc.11" - resolved "https://registry.yarnpkg.com/@rolldown/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.0.0-rc.11.tgz#b04cf5b806a012027a4e8b139e0f86b2ff7621c0" - integrity sha512-jfndI9tsfm4APzjNt6QdBkYwre5lRPUgHeDHoI7ydKUuJvz3lZeCfMsI56BZj+7BYqiKsJm7cfd/6KYV7ubrBg== +"@rolldown/binding-linux-arm64-musl@1.0.0-rc.12": + version "1.0.0-rc.12" + resolved "https://registry.yarnpkg.com/@rolldown/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.0.0-rc.12.tgz#f4337ddd52f0ed3ada2105b59ee1b757a2c4858c" + integrity sha512-V6/wZztnBqlx5hJQqNWwFdxIKN0m38p8Jas+VoSfgH54HSj9tKTt1dZvG6JRHcjh6D7TvrJPWFGaY9UBVOaWPw== -"@rolldown/binding-linux-ppc64-gnu@1.0.0-rc.11": - version "1.0.0-rc.11" - resolved "https://registry.yarnpkg.com/@rolldown/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-1.0.0-rc.11.tgz#bda9c11fe03482033d5dac6a943802b3e7579550" - integrity sha512-ZlFgw46NOAGMgcdvdYwAGu2Q+SLFA9LzbJLW+iyMOJyhj5wk6P3KEE9Gct4xWwSzFoPI7JCdYmYMzVtlgQ+zfw== +"@rolldown/binding-linux-ppc64-gnu@1.0.0-rc.12": + version "1.0.0-rc.12" + resolved "https://registry.yarnpkg.com/@rolldown/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-1.0.0-rc.12.tgz#22fdd14cb00ee8208c28a39bab7f28860ec6705d" + integrity sha512-AP3E9BpcUYliZCxa3w5Kwj9OtEVDYK6sVoUzy4vTOJsjPOgdaJZKFmN4oOlX0Wp0RPV2ETfmIra9x1xuayFB7g== -"@rolldown/binding-linux-s390x-gnu@1.0.0-rc.11": - version "1.0.0-rc.11" - resolved "https://registry.yarnpkg.com/@rolldown/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-1.0.0-rc.11.tgz#55daa2d35f92f62e958fc44e12db1c16e1f271c5" - integrity sha512-hIOYmuT6ofM4K04XAZd3OzMySEO4K0/nc9+jmNcxNAxRi6c5UWpqfw3KMFV4MVFWL+jQsSh+bGw2VqmaPMTLyw== +"@rolldown/binding-linux-s390x-gnu@1.0.0-rc.12": + version "1.0.0-rc.12" + resolved "https://registry.yarnpkg.com/@rolldown/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-1.0.0-rc.12.tgz#838215096d1de6d3d509e0410801cb7cda8161ff" + integrity sha512-nWwpvUSPkoFmZo0kQazZYOrT7J5DGOJ/+QHHzjvNlooDZED8oH82Yg67HvehPPLAg5fUff7TfWFHQS8IV1n3og== -"@rolldown/binding-linux-x64-gnu@1.0.0-rc.11": - version "1.0.0-rc.11" - resolved "https://registry.yarnpkg.com/@rolldown/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.0.0-rc.11.tgz#8ca1abf607bbe2f7fdd6f6416192937dc9ea1e54" - integrity sha512-qXBQQO9OvkjjQPLdUVr7Nr2t3QTZI7s4KZtfw7HzBgjbmAPSFwSv4rmET9lLSgq3rH/ndA3ngv3Qb8l2njoPNA== +"@rolldown/binding-linux-x64-gnu@1.0.0-rc.12": + version "1.0.0-rc.12" + resolved "https://registry.yarnpkg.com/@rolldown/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.0.0-rc.12.tgz#f7d71d97f6bd43198596b26dc2cb364586e12673" + integrity sha512-RNrafz5bcwRy+O9e6P8Z/OCAJW/A+qtBczIqVYwTs14pf4iV1/+eKEjdOUta93q2TsT/FI0XYDP3TCky38LMAg== -"@rolldown/binding-linux-x64-musl@1.0.0-rc.11": - version "1.0.0-rc.11" - resolved "https://registry.yarnpkg.com/@rolldown/binding-linux-x64-musl/-/binding-linux-x64-musl-1.0.0-rc.11.tgz#36a52beee8ac97a79d1ed8f1b94fab677e3e4d11" - integrity sha512-/tpFfoSTzUkH9LPY+cYbqZBDyyX62w5fICq9qzsHLL8uTI6BHip3Q9Uzft0wylk/i8OOwKik8OxW+QAhDmzwmg== +"@rolldown/binding-linux-x64-musl@1.0.0-rc.12": + version "1.0.0-rc.12" + resolved "https://registry.yarnpkg.com/@rolldown/binding-linux-x64-musl/-/binding-linux-x64-musl-1.0.0-rc.12.tgz#a2ca737f01b0ad620c4c404ca176ea3e3ad804c3" + integrity sha512-Jpw/0iwoKWx3LJ2rc1yjFrj+T7iHZn2JDg1Yny1ma0luviFS4mhAIcd1LFNxK3EYu3DHWCps0ydXQ5i/rrJ2ig== -"@rolldown/binding-openharmony-arm64@1.0.0-rc.11": - version "1.0.0-rc.11" - resolved "https://registry.yarnpkg.com/@rolldown/binding-openharmony-arm64/-/binding-openharmony-arm64-1.0.0-rc.11.tgz#91c74fd23b3f3f3942fe4b3aefc9428ecbaa55fd" - integrity sha512-mcp3Rio2w72IvdZG0oQ4bM2c2oumtwHfUfKncUM6zGgz0KgPz4YmDPQfnXEiY5t3+KD/i8HG2rOB/LxdmieK2g== +"@rolldown/binding-openharmony-arm64@1.0.0-rc.12": + version "1.0.0-rc.12" + resolved "https://registry.yarnpkg.com/@rolldown/binding-openharmony-arm64/-/binding-openharmony-arm64-1.0.0-rc.12.tgz#f66317e29eafcc300bed7af8dddac26ab3b1bf82" + integrity sha512-vRugONE4yMfVn0+7lUKdKvN4D5YusEiPilaoO2sgUWpCvrncvWgPMzK00ZFFJuiPgLwgFNP5eSiUlv2tfc+lpA== -"@rolldown/binding-wasm32-wasi@1.0.0-rc.11": - version "1.0.0-rc.11" - resolved "https://registry.yarnpkg.com/@rolldown/binding-wasm32-wasi/-/binding-wasm32-wasi-1.0.0-rc.11.tgz#6520bafe57ff1cd2fb45f8f22b1cb6d57be44e79" - integrity sha512-LXk5Hii1Ph9asuGRjBuz8TUxdc1lWzB7nyfdoRgI0WGPZKmCxvlKk8KfYysqtr4MfGElu/f/pEQRh8fcEgkrWw== +"@rolldown/binding-wasm32-wasi@1.0.0-rc.12": + version "1.0.0-rc.12" + resolved "https://registry.yarnpkg.com/@rolldown/binding-wasm32-wasi/-/binding-wasm32-wasi-1.0.0-rc.12.tgz#8825523fdffa1f1dc4683be9650ffaa9e4a77f04" + integrity sha512-ykGiLr/6kkiHc0XnBfmFJuCjr5ZYKKofkx+chJWDjitX+KsJuAmrzWhwyOMSHzPhzOHOy7u9HlFoa5MoAOJ/Zg== dependencies: "@napi-rs/wasm-runtime" "^1.1.1" -"@rolldown/binding-win32-arm64-msvc@1.0.0-rc.11": - version "1.0.0-rc.11" - resolved "https://registry.yarnpkg.com/@rolldown/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.0.0-rc.11.tgz#73dd1c4737473c8270b61cd2e42b05a34453ffc0" - integrity sha512-dDwf5otnx0XgRY1yqxOC4ITizcdzS/8cQ3goOWv3jFAo4F+xQYni+hnMuO6+LssHHdJW7+OCVL3CoU4ycnh35Q== +"@rolldown/binding-win32-arm64-msvc@1.0.0-rc.12": + version "1.0.0-rc.12" + resolved "https://registry.yarnpkg.com/@rolldown/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.0.0-rc.12.tgz#4f3a17e3d68a58309c27c0930b0f7986ccabef47" + integrity sha512-5eOND4duWkwx1AzCxadcOrNeighiLwMInEADT0YM7xeEOOFcovWZCq8dadXgcRHSf3Ulh1kFo/qvzoFiCLOL1Q== -"@rolldown/binding-win32-x64-msvc@1.0.0-rc.11": - version "1.0.0-rc.11" - resolved "https://registry.yarnpkg.com/@rolldown/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.0.0-rc.11.tgz#4d922aa6dd6bf27c73eba93fec9a0aed62549095" - integrity sha512-LN4/skhSggybX71ews7dAj6r2geaMJfm3kMbK2KhFMg9B10AZXnKoLCVVgzhMHL0S+aKtr4p8QbAW8k+w95bAA== +"@rolldown/binding-win32-x64-msvc@1.0.0-rc.12": + version "1.0.0-rc.12" + resolved "https://registry.yarnpkg.com/@rolldown/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.0.0-rc.12.tgz#d762765d5660598a96b570b513f535c151272985" + integrity sha512-PyqoipaswDLAZtot351MLhrlrh6lcZPo2LSYE+VDxbVk24LVKAGOuE4hb8xZQmrPAuEtTZW8E6D2zc5EUZX4Lw== -"@rolldown/pluginutils@1.0.0-rc.11": - version "1.0.0-rc.11" - resolved "https://registry.yarnpkg.com/@rolldown/pluginutils/-/pluginutils-1.0.0-rc.11.tgz#110d8cc72990c4e36a79791eeafe7cca979e00c9" - integrity sha512-xQO9vbwBecJRv9EUcQ/y0dzSTJgA7Q6UVN7xp6B81+tBGSLVAK03yJ9NkJaUA7JFD91kbjxRSC/mDnmvXzbHoQ== +"@rolldown/pluginutils@1.0.0-rc.12": + version "1.0.0-rc.12" + resolved "https://registry.yarnpkg.com/@rolldown/pluginutils/-/pluginutils-1.0.0-rc.12.tgz#74163aec62fa51cee18d62709483963dceb3f6dc" + integrity sha512-HHMwmarRKvoFsJorqYlFeFRzXZqCt2ETQlEDOb9aqssrnVBB1/+xgTGtuTrIk5vzLNX1MjMtTf7W9z3tsSbrxw== "@rollup/plugin-typescript@^11.1.6": version "11.1.6" @@ -471,130 +447,130 @@ estree-walker "^2.0.2" picomatch "^4.0.2" -"@rollup/rollup-android-arm-eabi@4.60.0": - version "4.60.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.60.0.tgz#7e158ddfc16f78da99c0d5ccbae6cae403ef3284" - integrity sha512-WOhNW9K8bR3kf4zLxbfg6Pxu2ybOUbB2AjMDHSQx86LIF4rH4Ft7vmMwNt0loO0eonglSNy4cpD3MKXXKQu0/A== +"@rollup/rollup-android-arm-eabi@4.60.1": + version "4.60.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.60.1.tgz#043f145716234529052ef9e1ce1d847ffbe9e674" + integrity sha512-d6FinEBLdIiK+1uACUttJKfgZREXrF0Qc2SmLII7W2AD8FfiZ9Wjd+rD/iRuf5s5dWrr1GgwXCvPqOuDquOowA== -"@rollup/rollup-android-arm64@4.60.0": - version "4.60.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.60.0.tgz#49f4ae0e22b6f9ffbcd3818b9a0758fa2d10b1cd" - integrity sha512-u6JHLll5QKRvjciE78bQXDmqRqNs5M/3GVqZeMwvmjaNODJih/WIrJlFVEihvV0MiYFmd+ZyPr9wxOVbPAG2Iw== +"@rollup/rollup-android-arm64@4.60.1": + version "4.60.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.60.1.tgz#023e1bd146e7519087dfd9e8b29e4cf9f8ecd35c" + integrity sha512-YjG/EwIDvvYI1YvYbHvDz/BYHtkY4ygUIXHnTdLhG+hKIQFBiosfWiACWortsKPKU/+dUwQQCKQM3qrDe8c9BA== -"@rollup/rollup-darwin-arm64@4.60.0": - version "4.60.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.60.0.tgz#bb200269069acf5c1c4d79ad142524f77e8b8236" - integrity sha512-qEF7CsKKzSRc20Ciu2Zw1wRrBz4g56F7r/vRwY430UPp/nt1x21Q/fpJ9N5l47WWvJlkNCPJz3QRVw008fi7yA== +"@rollup/rollup-darwin-arm64@4.60.1": + version "4.60.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.60.1.tgz#55ccb5487c02419954c57a7a80602885d616e1ee" + integrity sha512-mjCpF7GmkRtSJwon+Rq1N8+pI+8l7w5g9Z3vWj4T7abguC4Czwi3Yu/pFaLvA3TTeMVjnu3ctigusqWUfjZzvw== -"@rollup/rollup-darwin-x64@4.60.0": - version "4.60.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.60.0.tgz#1bf7a92b27ebdd5e0d1d48503c7811160773be1a" - integrity sha512-WADYozJ4QCnXCH4wPB+3FuGmDPoFseVCUrANmA5LWwGmC6FL14BWC7pcq+FstOZv3baGX65tZ378uT6WG8ynTw== +"@rollup/rollup-darwin-x64@4.60.1": + version "4.60.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.60.1.tgz#254b65404b14488c83225e88b8819376ad71a784" + integrity sha512-haZ7hJ1JT4e9hqkoT9R/19XW2QKqjfJVv+i5AGg57S+nLk9lQnJ1F/eZloRO3o9Scy9CM3wQ9l+dkXtcBgN5Ew== -"@rollup/rollup-freebsd-arm64@4.60.0": - version "4.60.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.60.0.tgz#5ccf537b99c5175008444702193ad0b1c36f7f16" - integrity sha512-6b8wGHJlDrGeSE3aH5mGNHBjA0TTkxdoNHik5EkvPHCt351XnigA4pS7Wsj/Eo9Y8RBU6f35cjN9SYmCFBtzxw== +"@rollup/rollup-freebsd-arm64@4.60.1": + version "4.60.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.60.1.tgz#6377ff38c052c76fcaffb7b2728d3172fe676fe6" + integrity sha512-czw90wpQq3ZsAVBlinZjAYTKduOjTywlG7fEeWKUA7oCmpA8xdTkxZZlwNJKWqILlq0wehoZcJYfBvOyhPTQ6w== -"@rollup/rollup-freebsd-x64@4.60.0": - version "4.60.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.60.0.tgz#1196ecd7bf4e128624ef83cd1f9d785114474a77" - integrity sha512-h25Ga0t4jaylMB8M/JKAyrvvfxGRjnPQIR8lnCayyzEjEOx2EJIlIiMbhpWxDRKGKF8jbNH01NnN663dH638mA== +"@rollup/rollup-freebsd-x64@4.60.1": + version "4.60.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.60.1.tgz#ba3902309d088eaf7139b916f09b7140b28b406d" + integrity sha512-KVB2rqsxTHuBtfOeySEyzEOB7ltlB/ux38iu2rBQzkjbwRVlkhAGIEDiiYnO2kFOkJp+Z7pUXKyrRRFuFUKt+g== -"@rollup/rollup-linux-arm-gnueabihf@4.60.0": - version "4.60.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.60.0.tgz#cc147633a4af229fee83a737bf2334fbac3dc28e" - integrity sha512-RzeBwv0B3qtVBWtcuABtSuCzToo2IEAIQrcyB/b2zMvBWVbjo8bZDjACUpnaafaxhTw2W+imQbP2BD1usasK4g== +"@rollup/rollup-linux-arm-gnueabihf@4.60.1": + version "4.60.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.60.1.tgz#e011b9a14638267e53b446286e838dbdaf53f167" + integrity sha512-L+34Qqil+v5uC0zEubW7uByo78WOCIrBvci69E7sFASRl0X7b/MB6Cqd1lky/CtcSVTydWa2WZwFuWexjS5o6g== -"@rollup/rollup-linux-arm-musleabihf@4.60.0": - version "4.60.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.60.0.tgz#3559f9f060153ea54594a42c3b87a297bedcc26e" - integrity sha512-Sf7zusNI2CIU1HLzuu9Tc5YGAHEZs5Lu7N1ssJG4Tkw6e0MEsN7NdjUDDfGNHy2IU+ENyWT+L2obgWiguWibWQ== +"@rollup/rollup-linux-arm-musleabihf@4.60.1": + version "4.60.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.60.1.tgz#0bce9ce9a009490abd28fd922dd97ed521311afe" + integrity sha512-n83O8rt4v34hgFzlkb1ycniJh7IR5RCIqt6mz1VRJD6pmhRi0CXdmfnLu9dIUS6buzh60IvACM842Ffb3xd6Gg== -"@rollup/rollup-linux-arm64-gnu@4.60.0": - version "4.60.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.60.0.tgz#e91f887b154123485cfc4b59befe2080fcd8f2df" - integrity sha512-DX2x7CMcrJzsE91q7/O02IJQ5/aLkVtYFryqCjduJhUfGKG6yJV8hxaw8pZa93lLEpPTP/ohdN4wFz7yp/ry9A== +"@rollup/rollup-linux-arm64-gnu@4.60.1": + version "4.60.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.60.1.tgz#6f6cfbbf324fbb4ceff213abdf7f322fd45d25ff" + integrity sha512-Nql7sTeAzhTAja3QXeAI48+/+GjBJ+QmAH13snn0AJSNL50JsDqotyudHyMbO2RbJkskbMbFJfIJKWA6R1LCJQ== -"@rollup/rollup-linux-arm64-musl@4.60.0": - version "4.60.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.60.0.tgz#660752f040df9ba44a24765df698928917c0bf21" - integrity sha512-09EL+yFVbJZlhcQfShpswwRZ0Rg+z/CsSELFCnPt3iK+iqwGsI4zht3secj5vLEs957QvFFXnzAT0FFPIxSrkQ== +"@rollup/rollup-linux-arm64-musl@4.60.1": + version "4.60.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.60.1.tgz#f7cb3eecaea9c151ef77342af05f38ae924bf795" + integrity sha512-+pUymDhd0ys9GcKZPPWlFiZ67sTWV5UU6zOJat02M1+PiuSGDziyRuI/pPue3hoUwm2uGfxdL+trT6Z9rxnlMA== -"@rollup/rollup-linux-loong64-gnu@4.60.0": - version "4.60.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.60.0.tgz#cb0e939a5fa479ccef264f3f45b31971695f869c" - integrity sha512-i9IcCMPr3EXm8EQg5jnja0Zyc1iFxJjZWlb4wr7U2Wx/GrddOuEafxRdMPRYVaXjgbhvqalp6np07hN1w9kAKw== +"@rollup/rollup-linux-loong64-gnu@4.60.1": + version "4.60.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.60.1.tgz#499bfac6bb669fd88bb664357bf6be996a28b92f" + integrity sha512-VSvgvQeIcsEvY4bKDHEDWcpW4Yw7BtlKG1GUT4FzBUlEKQK0rWHYBqQt6Fm2taXS+1bXvJT6kICu5ZwqKCnvlQ== -"@rollup/rollup-linux-loong64-musl@4.60.0": - version "4.60.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.60.0.tgz#42f86fbc82cd1a81be2d346476dd3231cf5ee442" - integrity sha512-DGzdJK9kyJ+B78MCkWeGnpXJ91tK/iKA6HwHxF4TAlPIY7GXEvMe8hBFRgdrR9Ly4qebR/7gfUs9y2IoaVEyog== +"@rollup/rollup-linux-loong64-musl@4.60.1": + version "4.60.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.60.1.tgz#127dfac08764764396bbe04453c545d38a3ab518" + integrity sha512-4LqhUomJqwe641gsPp6xLfhqWMbQV04KtPp7/dIp0nzPxAkNY1AbwL5W0MQpcalLYk07vaW9Kp1PBhdpZYYcEw== -"@rollup/rollup-linux-ppc64-gnu@4.60.0": - version "4.60.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.60.0.tgz#39776a647a789dc95ea049277c5ef8f098df77f9" - integrity sha512-RwpnLsqC8qbS8z1H1AxBA1H6qknR4YpPR9w2XX0vo2Sz10miu57PkNcnHVaZkbqyw/kUWfKMI73jhmfi9BRMUQ== +"@rollup/rollup-linux-ppc64-gnu@4.60.1": + version "4.60.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.60.1.tgz#6a72f4d95852aac18326c5bf708393e8f3a41b70" + integrity sha512-tLQQ9aPvkBxOc/EUT6j3pyeMD6Hb8QF2BTBnCQWP/uu1lhc9AIrIjKnLYMEroIz/JvtGYgI9dF3AxHZNaEH0rw== -"@rollup/rollup-linux-ppc64-musl@4.60.0": - version "4.60.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.60.0.tgz#466f20029a8e8b3bb2954c7ddebc9586420cac2c" - integrity sha512-Z8pPf54Ly3aqtdWC3G4rFigZgNvd+qJlOE52fmko3KST9SoGfAdSRCwyoyG05q1HrrAblLbk1/PSIV+80/pxLg== +"@rollup/rollup-linux-ppc64-musl@4.60.1": + version "4.60.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.60.1.tgz#ba8674666b00d6f9066cb9a5771a8430c34d2de6" + integrity sha512-RMxFhJwc9fSXP6PqmAz4cbv3kAyvD1etJFjTx4ONqFP9DkTkXsAMU4v3Vyc5BgzC+anz7nS/9tp4obsKfqkDHg== -"@rollup/rollup-linux-riscv64-gnu@4.60.0": - version "4.60.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.60.0.tgz#cff9877c78f12e7aa6246f6902ad913e99edb2b7" - integrity sha512-3a3qQustp3COCGvnP4SvrMHnPQ9d1vzCakQVRTliaz8cIp/wULGjiGpbcqrkv0WrHTEp8bQD/B3HBjzujVWLOA== +"@rollup/rollup-linux-riscv64-gnu@4.60.1": + version "4.60.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.60.1.tgz#17cc38b2a71e302547cad29bcf78d0db2618c922" + integrity sha512-QKgFl+Yc1eEk6MmOBfRHYF6lTxiiiV3/z/BRrbSiW2I7AFTXoBFvdMEyglohPj//2mZS4hDOqeB0H1ACh3sBbg== -"@rollup/rollup-linux-riscv64-musl@4.60.0": - version "4.60.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.60.0.tgz#9a762fb99b5a82a921017f56491b7e892b9fb17d" - integrity sha512-pjZDsVH/1VsghMJ2/kAaxt6dL0psT6ZexQVrijczOf+PeP2BUqTHYejk3l6TlPRydggINOeNRhvpLa0AYpCWSQ== +"@rollup/rollup-linux-riscv64-musl@4.60.1": + version "4.60.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.60.1.tgz#e36a41e2d8bd247331bd5cfc13b8c951d33454a2" + integrity sha512-RAjXjP/8c6ZtzatZcA1RaQr6O1TRhzC+adn8YZDnChliZHviqIjmvFwHcxi4JKPSDAt6Uhf/7vqcBzQJy0PDJg== -"@rollup/rollup-linux-s390x-gnu@4.60.0": - version "4.60.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.60.0.tgz#9d25ad8ac7dab681935baf78ac5ea92d14629cdf" - integrity sha512-3ObQs0BhvPgiUVZrN7gqCSvmFuMWvWvsjG5ayJ3Lraqv+2KhOsp+pUbigqbeWqueGIsnn+09HBw27rJ+gYK4VQ== +"@rollup/rollup-linux-s390x-gnu@4.60.1": + version "4.60.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.60.1.tgz#1687265f1f4bdea0726c761a58c2db9933609d68" + integrity sha512-wcuocpaOlaL1COBYiA89O6yfjlp3RwKDeTIA0hM7OpmhR1Bjo9j31G1uQVpDlTvwxGn2nQs65fBFL5UFd76FcQ== -"@rollup/rollup-linux-x64-gnu@4.60.0": - version "4.60.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.60.0.tgz#5e5139e11819fa38a052368da79422cb4afcf466" - integrity sha512-EtylprDtQPdS5rXvAayrNDYoJhIz1/vzN2fEubo3yLE7tfAw+948dO0g4M0vkTVFhKojnF+n6C8bDNe+gDRdTg== +"@rollup/rollup-linux-x64-gnu@4.60.1": + version "4.60.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.60.1.tgz#56a6a0d9076f2a05a976031493b24a20ddcc0e77" + integrity sha512-77PpsFQUCOiZR9+LQEFg9GClyfkNXj1MP6wRnzYs0EeWbPcHs02AXu4xuUbM1zhwn3wqaizle3AEYg5aeoohhg== -"@rollup/rollup-linux-x64-musl@4.60.0": - version "4.60.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.60.0.tgz#b6211d46e11b1f945f5504cc794fce839331ed08" - integrity sha512-k09oiRCi/bHU9UVFqD17r3eJR9bn03TyKraCrlz5ULFJGdJGi7VOmm9jl44vOJvRJ6P7WuBi/s2A97LxxHGIdw== +"@rollup/rollup-linux-x64-musl@4.60.1": + version "4.60.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.60.1.tgz#bc240ebb5b9fd8d41ca8a80cb458452e8c187e0f" + integrity sha512-5cIATbk5vynAjqqmyBjlciMJl1+R/CwX9oLk/EyiFXDWd95KpHdrOJT//rnUl4cUcskrd0jCCw3wpZnhIHdD9w== -"@rollup/rollup-openbsd-x64@4.60.0": - version "4.60.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.60.0.tgz#e6e09eebaa7012bb9c7331b437a9e992bd94ca35" - integrity sha512-1o/0/pIhozoSaDJoDcec+IVLbnRtQmHwPV730+AOD29lHEEo4F5BEUB24H0OBdhbBBDwIOSuf7vgg0Ywxdfiiw== +"@rollup/rollup-openbsd-x64@4.60.1": + version "4.60.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.60.1.tgz#6f80d48a006c4b2ffa7724e95a3e33f6975872af" + integrity sha512-cl0w09WsCi17mcmWqqglez9Gk8isgeWvoUZ3WiJFYSR3zjBQc2J5/ihSjpl+VLjPqjQ/1hJRcqBfLjssREQILw== -"@rollup/rollup-openharmony-arm64@4.60.0": - version "4.60.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.60.0.tgz#f7d99ae857032498e57a5e7259fb7100fd24a87e" - integrity sha512-pESDkos/PDzYwtyzB5p/UoNU/8fJo68vcXM9ZW2V0kjYayj1KaaUfi1NmTUTUpMn4UhU4gTuK8gIaFO4UGuMbA== +"@rollup/rollup-openharmony-arm64@4.60.1": + version "4.60.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.60.1.tgz#8f6db6f70d0a48abd833b263cd6dd3e7199c4c0e" + integrity sha512-4Cv23ZrONRbNtbZa37mLSueXUCtN7MXccChtKpUnQNgF010rjrjfHx3QxkS2PI7LqGT5xXyYs1a7LbzAwT0iCA== -"@rollup/rollup-win32-arm64-msvc@4.60.0": - version "4.60.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.60.0.tgz#41e392f5d9f3bf1253fdaf2f6d6f6b1bfc452856" - integrity sha512-hj1wFStD7B1YBeYmvY+lWXZ7ey73YGPcViMShYikqKT1GtstIKQAtfUI6yrzPjAy/O7pO0VLXGmUVWXQMaYgTQ== +"@rollup/rollup-win32-arm64-msvc@4.60.1": + version "4.60.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.60.1.tgz#b68989bfa815d0b3d4e302ecd90bda744438b177" + integrity sha512-i1okWYkA4FJICtr7KpYzFpRTHgy5jdDbZiWfvny21iIKky5YExiDXP+zbXzm3dUcFpkEeYNHgQ5fuG236JPq0g== -"@rollup/rollup-win32-ia32-msvc@4.60.0": - version "4.60.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.60.0.tgz#f41b0490be0e5d3cf459b4dc076a192b532adea9" - integrity sha512-SyaIPFoxmUPlNDq5EHkTbiKzmSEmq/gOYFI/3HHJ8iS/v1mbugVa7dXUzcJGQfoytp9DJFLhHH4U3/eTy2Bq4w== +"@rollup/rollup-win32-ia32-msvc@4.60.1": + version "4.60.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.60.1.tgz#c098e45338c50f22f1b288476354f025b746285b" + integrity sha512-u09m3CuwLzShA0EYKMNiFgcjjzwqtUMLmuCJLeZWjjOYA3IT2Di09KaxGBTP9xVztWyIWjVdsB2E9goMjZvTQg== -"@rollup/rollup-win32-x64-gnu@4.60.0": - version "4.60.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.60.0.tgz#0fcf9f1fcb750f0317b13aac3b3231687e6397a5" - integrity sha512-RdcryEfzZr+lAr5kRm2ucN9aVlCCa2QNq4hXelZxb8GG0NJSazq44Z3PCCc8wISRuCVnGs0lQJVX5Vp6fKA+IA== +"@rollup/rollup-win32-x64-gnu@4.60.1": + version "4.60.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.60.1.tgz#2c9e15be155b79d05999953b1737b2903842e903" + integrity sha512-k+600V9Zl1CM7eZxJgMyTUzmrmhB/0XZnF4pRypKAlAgxmedUA+1v9R+XOFv56W4SlHEzfeMtzujLJD22Uz5zg== -"@rollup/rollup-win32-x64-msvc@4.60.0": - version "4.60.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.60.0.tgz#3afdb30405f6d4248df5e72e1ca86c5eab55fab8" - integrity sha512-PrsWNQ8BuE00O3Xsx3ALh2Df8fAj9+cvvX9AIA6o4KpATR98c9mud4XtDWVvsEuyia5U4tVSTKygawyJkjm60w== +"@rollup/rollup-win32-x64-msvc@4.60.1": + version "4.60.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.60.1.tgz#23b860113e9f87eea015d1fa3a4240a52b42fcd4" + integrity sha512-lWMnixq/QzxyhTV6NjQJ4SFo1J6PvOX8vUx5Wb4bBPsEb+8xZ89Bz6kOXpfXj9ak9AHTQVQzlgzBEc1SyM27xQ== "@standard-schema/spec@^1.1.0": version "1.1.0" @@ -658,109 +634,109 @@ resolved "https://registry.yarnpkg.com/@types/pako/-/pako-2.0.4.tgz#c3575ef8125e176c345fa0e7b301c1db41170c15" integrity sha512-VWDCbrLeVXJM9fihYodcLiIv0ku+AlOa/TQ1SvYOaBuyrSKgEcro95LJyIsJ4vSo6BXIxOKxiJAat04CmST9Fw== -"@typescript-eslint/eslint-plugin@8.57.2": - version "8.57.2" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.57.2.tgz#ad0dcefeca9c2ecbe09f730d478063666aee010b" - integrity sha512-NZZgp0Fm2IkD+La5PR81sd+g+8oS6JwJje+aRWsDocxHkjyRw0J5L5ZTlN3LI1LlOcGL7ph3eaIUmTXMIjLk0w== +"@typescript-eslint/eslint-plugin@8.58.0": + version "8.58.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.58.0.tgz#ad40e492f1931f46da1bd888e52b9e56df9063aa" + integrity sha512-RLkVSiNuUP1C2ROIWfqX+YcUfLaSnxGE/8M+Y57lopVwg9VTYYfhuz15Yf1IzCKgZj6/rIbYTmJCUSqr76r0Wg== dependencies: "@eslint-community/regexpp" "^4.12.2" - "@typescript-eslint/scope-manager" "8.57.2" - "@typescript-eslint/type-utils" "8.57.2" - "@typescript-eslint/utils" "8.57.2" - "@typescript-eslint/visitor-keys" "8.57.2" + "@typescript-eslint/scope-manager" "8.58.0" + "@typescript-eslint/type-utils" "8.58.0" + "@typescript-eslint/utils" "8.58.0" + "@typescript-eslint/visitor-keys" "8.58.0" ignore "^7.0.5" natural-compare "^1.4.0" - ts-api-utils "^2.4.0" + ts-api-utils "^2.5.0" -"@typescript-eslint/parser@8.57.2": - version "8.57.2" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-8.57.2.tgz#b819955e39f976c0d4f95b5ed67fe22f85cd6898" - integrity sha512-30ScMRHIAD33JJQkgfGW1t8CURZtjc2JpTrq5n2HFhOefbAhb7ucc7xJwdWcrEtqUIYJ73Nybpsggii6GtAHjA== +"@typescript-eslint/parser@8.58.0": + version "8.58.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-8.58.0.tgz#da04ece1967b6c2fe8f10c3473dabf3825795ef7" + integrity sha512-rLoGZIf9afaRBYsPUMtvkDWykwXwUPL60HebR4JgTI8mxfFe2cQTu3AGitANp4b9B2QlVru6WzjgB2IzJKiCSA== dependencies: - "@typescript-eslint/scope-manager" "8.57.2" - "@typescript-eslint/types" "8.57.2" - "@typescript-eslint/typescript-estree" "8.57.2" - "@typescript-eslint/visitor-keys" "8.57.2" + "@typescript-eslint/scope-manager" "8.58.0" + "@typescript-eslint/types" "8.58.0" + "@typescript-eslint/typescript-estree" "8.58.0" + "@typescript-eslint/visitor-keys" "8.58.0" debug "^4.4.3" -"@typescript-eslint/project-service@8.57.2": - version "8.57.2" - resolved "https://registry.yarnpkg.com/@typescript-eslint/project-service/-/project-service-8.57.2.tgz#dfbc7777f9f633f2b06b558cda3836e76f856e3c" - integrity sha512-FuH0wipFywXRTHf+bTTjNyuNQQsQC3qh/dYzaM4I4W0jrCqjCVuUh99+xd9KamUfmCGPvbO8NDngo/vsnNVqgw== +"@typescript-eslint/project-service@8.58.0": + version "8.58.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/project-service/-/project-service-8.58.0.tgz#66ceda0aabf7427aec3e2713fa43eb278dead2aa" + integrity sha512-8Q/wBPWLQP1j16NxoPNIKpDZFMaxl7yWIoqXWYeWO+Bbd2mjgvoF0dxP2jKZg5+x49rgKdf7Ck473M8PC3V9lg== dependencies: - "@typescript-eslint/tsconfig-utils" "^8.57.2" - "@typescript-eslint/types" "^8.57.2" + "@typescript-eslint/tsconfig-utils" "^8.58.0" + "@typescript-eslint/types" "^8.58.0" debug "^4.4.3" -"@typescript-eslint/scope-manager@8.57.2": - version "8.57.2" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-8.57.2.tgz#734dcde40677f430b5d963108337295bdbc09dae" - integrity sha512-snZKH+W4WbWkrBqj4gUNRIGb/jipDW3qMqVJ4C9rzdFc+wLwruxk+2a5D+uoFcKPAqyqEnSb4l2ULuZf95eSkw== +"@typescript-eslint/scope-manager@8.58.0": + version "8.58.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-8.58.0.tgz#e304142775e49a1b7ac3c8bf2536714447c72cab" + integrity sha512-W1Lur1oF50FxSnNdGp3Vs6P+yBRSmZiw4IIjEeYxd8UQJwhUF0gDgDD/W/Tgmh73mxgEU3qX0Bzdl/NGuSPEpQ== dependencies: - "@typescript-eslint/types" "8.57.2" - "@typescript-eslint/visitor-keys" "8.57.2" + "@typescript-eslint/types" "8.58.0" + "@typescript-eslint/visitor-keys" "8.58.0" -"@typescript-eslint/tsconfig-utils@8.57.2", "@typescript-eslint/tsconfig-utils@^8.57.2": - version "8.57.2" - resolved "https://registry.yarnpkg.com/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.57.2.tgz#cf82dc11e884103ec13188a7352591efaa1a887e" - integrity sha512-3Lm5DSM+DCowsUOJC+YqHHnKEfFh5CoGkj5Z31NQSNF4l5wdOwqGn99wmwN/LImhfY3KJnmordBq/4+VDe2eKw== +"@typescript-eslint/tsconfig-utils@8.58.0", "@typescript-eslint/tsconfig-utils@^8.58.0": + version "8.58.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.58.0.tgz#c5a8edb21f31e0fdee565724e1b984171c559482" + integrity sha512-doNSZEVJsWEu4htiVC+PR6NpM+pa+a4ClH9INRWOWCUzMst/VA9c4gXq92F8GUD1rwhNvRLkgjfYtFXegXQF7A== -"@typescript-eslint/type-utils@8.57.2": - version "8.57.2" - resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-8.57.2.tgz#3ec65a94e73776252991a3cf0a15d220734c28f5" - integrity sha512-Co6ZCShm6kIbAM/s+oYVpKFfW7LBc6FXoPXjTRQ449PPNBY8U0KZXuevz5IFuuUj2H9ss40atTaf9dlGLzbWZg== +"@typescript-eslint/type-utils@8.58.0": + version "8.58.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-8.58.0.tgz#ce0e72cd967ffbbe8de322db6089bd4374be352f" + integrity sha512-aGsCQImkDIqMyx1u4PrVlbi/krmDsQUs4zAcCV6M7yPcPev+RqVlndsJy9kJ8TLihW9TZ0kbDAzctpLn5o+lOg== dependencies: - "@typescript-eslint/types" "8.57.2" - "@typescript-eslint/typescript-estree" "8.57.2" - "@typescript-eslint/utils" "8.57.2" + "@typescript-eslint/types" "8.58.0" + "@typescript-eslint/typescript-estree" "8.58.0" + "@typescript-eslint/utils" "8.58.0" debug "^4.4.3" - ts-api-utils "^2.4.0" + ts-api-utils "^2.5.0" -"@typescript-eslint/types@8.57.2", "@typescript-eslint/types@^8.57.2": - version "8.57.2" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-8.57.2.tgz#efe0da4c28b505ed458f113aa960dce2c5c671f4" - integrity sha512-/iZM6FnM4tnx9csuTxspMW4BOSegshwX5oBDznJ7S4WggL7Vczz5d2W11ecc4vRrQMQHXRSxzrCsyG5EsPPTbA== +"@typescript-eslint/types@8.58.0", "@typescript-eslint/types@^8.58.0": + version "8.58.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-8.58.0.tgz#e94ae7abdc1c6530e71183c1007b61fa93112a5a" + integrity sha512-O9CjxypDT89fbHxRfETNoAnHj/i6IpRK0CvbVN3qibxlLdo5p5hcLmUuCCrHMpxiWSwKyI8mCP7qRNYuOJ0Uww== -"@typescript-eslint/typescript-estree@8.57.2": - version "8.57.2" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-8.57.2.tgz#432e61a6cf2ab565837da387e5262c159672abea" - integrity sha512-2MKM+I6g8tJxfSmFKOnHv2t8Sk3T6rF20A1Puk0svLK+uVapDZB/4pfAeB7nE83uAZrU6OxW+HmOd5wHVdXwXA== +"@typescript-eslint/typescript-estree@8.58.0": + version "8.58.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-8.58.0.tgz#ed233faa8e2f2a2e1357c3e7d553d6465a0ee59a" + integrity sha512-7vv5UWbHqew/dvs+D3e1RvLv1v2eeZ9txRHPnEEBUgSNLx5ghdzjHa0sgLWYVKssH+lYmV0JaWdoubo0ncGYLA== dependencies: - "@typescript-eslint/project-service" "8.57.2" - "@typescript-eslint/tsconfig-utils" "8.57.2" - "@typescript-eslint/types" "8.57.2" - "@typescript-eslint/visitor-keys" "8.57.2" + "@typescript-eslint/project-service" "8.58.0" + "@typescript-eslint/tsconfig-utils" "8.58.0" + "@typescript-eslint/types" "8.58.0" + "@typescript-eslint/visitor-keys" "8.58.0" debug "^4.4.3" minimatch "^10.2.2" semver "^7.7.3" tinyglobby "^0.2.15" - ts-api-utils "^2.4.0" + ts-api-utils "^2.5.0" -"@typescript-eslint/utils@8.57.2": - version "8.57.2" - resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-8.57.2.tgz#46a8974c24326fb8899486728428a0f1a3115014" - integrity sha512-krRIbvPK1ju1WBKIefiX+bngPs+odIQUtR7kymzPfo1POVw3jlF+nLkmexdSSd4UCbDcQn+wMBATOOmpBbqgKg== +"@typescript-eslint/utils@8.58.0": + version "8.58.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-8.58.0.tgz#21a74a7963b0d288b719a4121c7dd555adaab3c3" + integrity sha512-RfeSqcFeHMHlAWzt4TBjWOAtoW9lnsAGiP3GbaX9uVgTYYrMbVnGONEfUCiSss+xMHFl+eHZiipmA8WkQ7FuNA== dependencies: "@eslint-community/eslint-utils" "^4.9.1" - "@typescript-eslint/scope-manager" "8.57.2" - "@typescript-eslint/types" "8.57.2" - "@typescript-eslint/typescript-estree" "8.57.2" + "@typescript-eslint/scope-manager" "8.58.0" + "@typescript-eslint/types" "8.58.0" + "@typescript-eslint/typescript-estree" "8.58.0" -"@typescript-eslint/visitor-keys@8.57.2": - version "8.57.2" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-8.57.2.tgz#a5c9605774247336c0412beb7dc288ab2a07c11e" - integrity sha512-zhahknjobV2FiD6Ee9iLbS7OV9zi10rG26odsQdfBO/hjSzUQbkIYgda+iNKK1zNiW2ey+Lf8MU5btN17V3dUw== +"@typescript-eslint/visitor-keys@8.58.0": + version "8.58.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-8.58.0.tgz#2abd55a4be70fd55967aceaba4330b9ba9f45189" + integrity sha512-XJ9UD9+bbDo4a4epraTwG3TsNPeiB9aShrUneAVXy8q4LuwowN+qu89/6ByLMINqvIMeI9H9hOHQtg/ijrYXzQ== dependencies: - "@typescript-eslint/types" "8.57.2" + "@typescript-eslint/types" "8.58.0" eslint-visitor-keys "^5.0.0" "@vitest/coverage-v8@^4.0.18": - version "4.1.1" - resolved "https://registry.yarnpkg.com/@vitest/coverage-v8/-/coverage-v8-4.1.1.tgz#579ba2f997b8863a37b6689221ba74e364d53118" - integrity sha512-nZ4RWwGCoGOQRMmU/Q9wlUY540RVRxJZ9lxFsFfy0QV7Zmo5VVBhB6Sl9Xa0KIp2iIs3zWfPlo9LcY1iqbpzCw== + version "4.1.2" + resolved "https://registry.yarnpkg.com/@vitest/coverage-v8/-/coverage-v8-4.1.2.tgz#2617f76d12065d2caadedb92bb7bb86cd2af1131" + integrity sha512-sPK//PHO+kAkScb8XITeB1bf7fsk85Km7+rt4eeuRR3VS1/crD47cmV5wicisJmjNdfeokTZwjMk4Mj2d58Mgg== dependencies: "@bcoe/v8-coverage" "^1.0.2" - "@vitest/utils" "4.1.1" + "@vitest/utils" "4.1.2" ast-v8-to-istanbul "^1.0.0" istanbul-lib-coverage "^3.2.2" istanbul-lib-report "^3.0.1" @@ -768,67 +744,67 @@ magicast "^0.5.2" obug "^2.1.1" std-env "^4.0.0-rc.1" - tinyrainbow "^3.0.3" + tinyrainbow "^3.1.0" -"@vitest/expect@4.1.1": - version "4.1.1" - resolved "https://registry.yarnpkg.com/@vitest/expect/-/expect-4.1.1.tgz#875b3fcfa3e8803d6a69cf6ddb58613eab7ae772" - integrity sha512-xAV0fqBTk44Rn6SjJReEQkHP3RrqbJo6JQ4zZ7/uVOiJZRarBtblzrOfFIZeYUrukp2YD6snZG6IBqhOoHTm+A== +"@vitest/expect@4.1.2": + version "4.1.2" + resolved "https://registry.yarnpkg.com/@vitest/expect/-/expect-4.1.2.tgz#2aec02233db4eac14777e6a7d14a535c63ae2d9b" + integrity sha512-gbu+7B0YgUJ2nkdsRJrFFW6X7NTP44WlhiclHniUhxADQJH5Szt9mZ9hWnJPJ8YwOK5zUOSSlSvyzRf0u1DSBQ== dependencies: "@standard-schema/spec" "^1.1.0" "@types/chai" "^5.2.2" - "@vitest/spy" "4.1.1" - "@vitest/utils" "4.1.1" + "@vitest/spy" "4.1.2" + "@vitest/utils" "4.1.2" chai "^6.2.2" - tinyrainbow "^3.0.3" + tinyrainbow "^3.1.0" -"@vitest/mocker@4.1.1": - version "4.1.1" - resolved "https://registry.yarnpkg.com/@vitest/mocker/-/mocker-4.1.1.tgz#fe804fbb561e6638864ea8ac4f16a71f5a6f1b91" - integrity sha512-h3BOylsfsCLPeceuCPAAJ+BvNwSENgJa4hXoXu4im0bs9Lyp4URc4JYK4pWLZ4pG/UQn7AT92K6IByi6rE6g3A== +"@vitest/mocker@4.1.2": + version "4.1.2" + resolved "https://registry.yarnpkg.com/@vitest/mocker/-/mocker-4.1.2.tgz#3f23523697f9ab9e851b58b2213c4ab6181aa0e6" + integrity sha512-Ize4iQtEALHDttPRCmN+FKqOl2vxTiNUhzobQFFt/BM1lRUTG7zRCLOykG/6Vo4E4hnUdfVLo5/eqKPukcWW7Q== dependencies: - "@vitest/spy" "4.1.1" + "@vitest/spy" "4.1.2" estree-walker "^3.0.3" magic-string "^0.30.21" -"@vitest/pretty-format@4.1.1": - version "4.1.1" - resolved "https://registry.yarnpkg.com/@vitest/pretty-format/-/pretty-format-4.1.1.tgz#ec0e5e7c1def39c5fac037429166278ef2f85de8" - integrity sha512-GM+TEQN5WhOygr1lp7skeVjdLPqqWMHsfzXrcHAqZJi/lIVh63H0kaRCY8MDhNWikx19zBUK8ceaLB7X5AH9NQ== +"@vitest/pretty-format@4.1.2": + version "4.1.2" + resolved "https://registry.yarnpkg.com/@vitest/pretty-format/-/pretty-format-4.1.2.tgz#c2671aa1c931dc8f2759589fc87ea4b2602892c5" + integrity sha512-dwQga8aejqeuB+TvXCMzSQemvV9hNEtDDpgUKDzOmNQayl2OG241PSWeJwKRH3CiC+sESrmoFd49rfnq7T4RnA== dependencies: - tinyrainbow "^3.0.3" + tinyrainbow "^3.1.0" -"@vitest/runner@4.1.1": - version "4.1.1" - resolved "https://registry.yarnpkg.com/@vitest/runner/-/runner-4.1.1.tgz#bedc6eef9f932788a0253c97f7bee82c0b52334c" - integrity sha512-f7+FPy75vN91QGWsITueq0gedwUZy1fLtHOCMeQpjs8jTekAHeKP80zfDEnhrleviLHzVSDXIWuCIOFn3D3f8A== +"@vitest/runner@4.1.2": + version "4.1.2" + resolved "https://registry.yarnpkg.com/@vitest/runner/-/runner-4.1.2.tgz#6f744fa0d92d31f4c8c255b64bbe073cb75fd96e" + integrity sha512-Gr+FQan34CdiYAwpGJmQG8PgkyFVmARK8/xSijia3eTFgVfpcpztWLuP6FttGNfPLJhaZVP/euvujeNYar36OQ== dependencies: - "@vitest/utils" "4.1.1" + "@vitest/utils" "4.1.2" pathe "^2.0.3" -"@vitest/snapshot@4.1.1": - version "4.1.1" - resolved "https://registry.yarnpkg.com/@vitest/snapshot/-/snapshot-4.1.1.tgz#ffc080d1aa15ce976bf61dcef29dbe489099be69" - integrity sha512-kMVSgcegWV2FibXEx9p9WIKgje58lcTbXgnJixfcg15iK8nzCXhmalL0ZLtTWLW9PH1+1NEDShiFFedB3tEgWg== +"@vitest/snapshot@4.1.2": + version "4.1.2" + resolved "https://registry.yarnpkg.com/@vitest/snapshot/-/snapshot-4.1.2.tgz#3972b8ed7a311133e12cb833bf86463d26cdd455" + integrity sha512-g7yfUmxYS4mNxk31qbOYsSt2F4m1E02LFqO53Xpzg3zKMhLAPZAjjfyl9e6z7HrW6LvUdTwAQR3HHfLjpko16A== dependencies: - "@vitest/pretty-format" "4.1.1" - "@vitest/utils" "4.1.1" + "@vitest/pretty-format" "4.1.2" + "@vitest/utils" "4.1.2" magic-string "^0.30.21" pathe "^2.0.3" -"@vitest/spy@4.1.1": - version "4.1.1" - resolved "https://registry.yarnpkg.com/@vitest/spy/-/spy-4.1.1.tgz#7eb25de32a3d65810cb9adb31a2872c1e8341be5" - integrity sha512-6Ti/KT5OVaiupdIZEuZN7l3CZcR0cxnxt70Z0//3CtwgObwA6jZhmVBA3yrXSVN3gmwjgd7oDNLlsXz526gpRA== +"@vitest/spy@4.1.2": + version "4.1.2" + resolved "https://registry.yarnpkg.com/@vitest/spy/-/spy-4.1.2.tgz#1f312cef5756256639b4c0614f74c8ad9a036ef9" + integrity sha512-DU4fBnbVCJGNBwVA6xSToNXrkZNSiw59H8tcuUspVMsBDBST4nfvsPsEHDHGtWRRnqBERBQu7TrTKskmjqTXKA== -"@vitest/utils@4.1.1": - version "4.1.1" - resolved "https://registry.yarnpkg.com/@vitest/utils/-/utils-4.1.1.tgz#1c8b1f3405008a10bc2cf74eb8ba1b32c1dbc789" - integrity sha512-cNxAlaB3sHoCdL6pj6yyUXv9Gry1NHNg0kFTXdvSIZXLHsqKH7chiWOkwJ5s5+d/oMwcoG9T0bKU38JZWKusrQ== +"@vitest/utils@4.1.2": + version "4.1.2" + resolved "https://registry.yarnpkg.com/@vitest/utils/-/utils-4.1.2.tgz#32be8f42eb6683a598b1c61d7ec9f55596c60ecb" + integrity sha512-xw2/TiX82lQHA06cgbqRKFb5lCAy3axQ4H4SoUFhUsg+wztiet+co86IAMDtF6Vm1hc7J6j09oh/rgDn+JdKIQ== dependencies: - "@vitest/pretty-format" "4.1.1" + "@vitest/pretty-format" "4.1.2" convert-source-map "^2.0.0" - tinyrainbow "^3.0.3" + tinyrainbow "^3.1.0" "@webgpu/types@^0.1.69": version "0.1.69" @@ -836,9 +812,9 @@ integrity sha512-RPmm6kgRbI8e98zSD3RVACvnuktIja5+yLgDAkTmxLr90BEwdTXRQWNLF3ETTTyH/8mKhznZuN5AveXYFEsMGQ== "@xmldom/xmldom@^0.8.11": - version "0.8.11" - resolved "https://registry.yarnpkg.com/@xmldom/xmldom/-/xmldom-0.8.11.tgz#b79de2d67389734c57c52595f7a7305e30c2d608" - integrity sha512-cQzWCtO6C8TQiYl1ruKNn2U6Ao4o4WBBcbL61yJl84x+j5sOWWFU9X7DpND8XZG3daDppSsigMdfAIl2upQBRw== + version "0.8.12" + resolved "https://registry.yarnpkg.com/@xmldom/xmldom/-/xmldom-0.8.12.tgz#cf488a5435fa06c7374ad1449c69cea0f823624b" + integrity sha512-9k/gHF6n/pAi/9tqr3m3aqkuiNosYTurLLUtc7xQ9sxB/wm7WPygCv8GYa6mS0fLJEHhqMC1ATYhz++U/lRHqg== acorn-jsx@^5.3.2: version "5.3.2" @@ -859,11 +835,6 @@ ajv@^6.14.0: version "6.14.0" resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.14.0.tgz#fd067713e228210636ebb08c60bd3765d6dbe73a" integrity sha512-IWrosm/yrn43eiKqkfkHis7QioDleaXQHdDVPKg0FSwwd/DuvyX79TZnFOnYpB7dcsFAMmtFztZuXPDvSePkFw== - dependencies: - fast-deep-equal "^3.1.1" - fast-json-stable-stringify "^2.0.0" - json-schema-traverse "^0.4.1" - uri-js "^4.2.2" ansi-styles@^4.1.0: version "4.3.0" @@ -909,17 +880,17 @@ bidi-js@^1.0.3: require-from-string "^2.0.2" brace-expansion@^1.1.7: - version "1.1.12" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.12.tgz#ab9b454466e5a8cc3a187beaad580412a9c5b843" - integrity sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg== + version "1.1.13" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.13.tgz#d37875c01dc9eff988dd49d112a57cb67b54efe6" + integrity sha512-9ZLprWS6EENmhEOpjCYW2c8VkmOvckIJZfkr7rBW6dObmfgJ/L1GpSYW5Hpo9lDz4D1+n0Ckz8rU7FwHDQiG/w== dependencies: balanced-match "^1.0.0" concat-map "0.0.1" -brace-expansion@^5.0.2: - version "5.0.4" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-5.0.4.tgz#614daaecd0a688f660bbbc909a8748c3d80d4336" - integrity sha512-h+DEnpVvxmfVefa4jFbCf5HdH5YMDXRsmKflpf1pILZWRFlTbJpxeU55nJl4Smt5HQaGzg1o6RHFPJaOqnmBDg== +brace-expansion@^5.0.5: + version "5.0.5" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-5.0.5.tgz#dcc3a37116b79f3e1b46db994ced5d570e930fdb" + integrity sha512-VZznLgtwhn+Mact9tfiwx64fA9erHH/MCXEUfB/0bX/6Fz6ny5EGTXYltMocqg4xFAQZtnO3DHWWXi8RiuN7cQ== dependencies: balanced-match "^4.0.2" @@ -1644,11 +1615,11 @@ mdn-data@2.27.1: integrity sha512-9Yubnt3e8A0OKwxYSXyhLymGW4sCufcLG6VdiDdUGVkPhpqLxlvP5vl1983gQjJl3tqbrM731mjaZaP68AgosQ== minimatch@^10.2.2: - version "10.2.4" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-10.2.4.tgz#465b3accbd0218b8281f5301e27cedc697f96fde" - integrity sha512-oRjTw/97aTBN0RHbYCdtF1MQfvusSIBQM0IZEgzl6426+8jSC0nF1a/GmnVLpfB9yyr6g6FTqWqiZVbxrtaCIg== + version "10.2.5" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-10.2.5.tgz#bd48687a0be38ed2961399105600f832095861d1" + integrity sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg== dependencies: - brace-expansion "^5.0.2" + brace-expansion "^5.0.5" minimatch@^3.1.5: version "3.1.5" @@ -1762,7 +1733,7 @@ picocolors@^1.1.1: resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.1.1.tgz#3d321af3eab939b083c8f929a1d12cda81c26b6b" integrity sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA== -picomatch@^4.0.2, picomatch@^4.0.3: +picomatch@^4.0.2, picomatch@^4.0.3, picomatch@^4.0.4: version "4.0.4" resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-4.0.4.tgz#fd6f5e00a143086e074dffe4c924b8fb293b0589" integrity sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A== @@ -1828,62 +1799,62 @@ resolve@^1.22.1: path-parse "^1.0.7" supports-preserve-symlinks-flag "^1.0.0" -rolldown@1.0.0-rc.11: - version "1.0.0-rc.11" - resolved "https://registry.yarnpkg.com/rolldown/-/rolldown-1.0.0-rc.11.tgz#6eaf091b1bbb5ed92e5302171a3d59f0d026d9c0" - integrity sha512-NRjoKMusSjfRbSYiH3VSumlkgFe7kYAa3pzVOsVYVFY3zb5d7nS+a3KGQ7hJKXuYWbzJKPVQ9Wxq2UvyK+ENpw== +rolldown@1.0.0-rc.12: + version "1.0.0-rc.12" + resolved "https://registry.yarnpkg.com/rolldown/-/rolldown-1.0.0-rc.12.tgz#e226fa74a4c21c71a13f8e44f778f81d58853ad5" + integrity sha512-yP4USLIMYrwpPHEFB5JGH1uxhcslv6/hL0OyvTuY+3qlOSJvZ7ntYnoWpehBxufkgN0cvXxppuTu5hHa/zPh+A== dependencies: "@oxc-project/types" "=0.122.0" - "@rolldown/pluginutils" "1.0.0-rc.11" + "@rolldown/pluginutils" "1.0.0-rc.12" optionalDependencies: - "@rolldown/binding-android-arm64" "1.0.0-rc.11" - "@rolldown/binding-darwin-arm64" "1.0.0-rc.11" - "@rolldown/binding-darwin-x64" "1.0.0-rc.11" - "@rolldown/binding-freebsd-x64" "1.0.0-rc.11" - "@rolldown/binding-linux-arm-gnueabihf" "1.0.0-rc.11" - "@rolldown/binding-linux-arm64-gnu" "1.0.0-rc.11" - "@rolldown/binding-linux-arm64-musl" "1.0.0-rc.11" - "@rolldown/binding-linux-ppc64-gnu" "1.0.0-rc.11" - "@rolldown/binding-linux-s390x-gnu" "1.0.0-rc.11" - "@rolldown/binding-linux-x64-gnu" "1.0.0-rc.11" - "@rolldown/binding-linux-x64-musl" "1.0.0-rc.11" - "@rolldown/binding-openharmony-arm64" "1.0.0-rc.11" - "@rolldown/binding-wasm32-wasi" "1.0.0-rc.11" - "@rolldown/binding-win32-arm64-msvc" "1.0.0-rc.11" - "@rolldown/binding-win32-x64-msvc" "1.0.0-rc.11" + "@rolldown/binding-android-arm64" "1.0.0-rc.12" + "@rolldown/binding-darwin-arm64" "1.0.0-rc.12" + "@rolldown/binding-darwin-x64" "1.0.0-rc.12" + "@rolldown/binding-freebsd-x64" "1.0.0-rc.12" + "@rolldown/binding-linux-arm-gnueabihf" "1.0.0-rc.12" + "@rolldown/binding-linux-arm64-gnu" "1.0.0-rc.12" + "@rolldown/binding-linux-arm64-musl" "1.0.0-rc.12" + "@rolldown/binding-linux-ppc64-gnu" "1.0.0-rc.12" + "@rolldown/binding-linux-s390x-gnu" "1.0.0-rc.12" + "@rolldown/binding-linux-x64-gnu" "1.0.0-rc.12" + "@rolldown/binding-linux-x64-musl" "1.0.0-rc.12" + "@rolldown/binding-openharmony-arm64" "1.0.0-rc.12" + "@rolldown/binding-wasm32-wasi" "1.0.0-rc.12" + "@rolldown/binding-win32-arm64-msvc" "1.0.0-rc.12" + "@rolldown/binding-win32-x64-msvc" "1.0.0-rc.12" rollup@^4.20.0: - version "4.60.0" - resolved "https://registry.yarnpkg.com/rollup/-/rollup-4.60.0.tgz#d7d68c8cda873e96e08b2443505609b7e7be9eb8" - integrity sha512-yqjxruMGBQJ2gG4HtjZtAfXArHomazDHoFwFFmZZl0r7Pdo7qCIXKqKHZc8yeoMgzJJ+pO6pEEHa+V7uzWlrAQ== + version "4.60.1" + resolved "https://registry.yarnpkg.com/rollup/-/rollup-4.60.1.tgz#b4aa2bcb3a5e1437b5fad40d43fe42d4bde7a42d" + integrity sha512-VmtB2rFU/GroZ4oL8+ZqXgSA38O6GR8KSIvWmEFv63pQ0G6KaBH9s07PO8XTXP4vI+3UJUEypOfjkGfmSBBR0w== dependencies: "@types/estree" "1.0.8" optionalDependencies: - "@rollup/rollup-android-arm-eabi" "4.60.0" - "@rollup/rollup-android-arm64" "4.60.0" - "@rollup/rollup-darwin-arm64" "4.60.0" - "@rollup/rollup-darwin-x64" "4.60.0" - "@rollup/rollup-freebsd-arm64" "4.60.0" - "@rollup/rollup-freebsd-x64" "4.60.0" - "@rollup/rollup-linux-arm-gnueabihf" "4.60.0" - "@rollup/rollup-linux-arm-musleabihf" "4.60.0" - "@rollup/rollup-linux-arm64-gnu" "4.60.0" - "@rollup/rollup-linux-arm64-musl" "4.60.0" - "@rollup/rollup-linux-loong64-gnu" "4.60.0" - "@rollup/rollup-linux-loong64-musl" "4.60.0" - "@rollup/rollup-linux-ppc64-gnu" "4.60.0" - "@rollup/rollup-linux-ppc64-musl" "4.60.0" - "@rollup/rollup-linux-riscv64-gnu" "4.60.0" - "@rollup/rollup-linux-riscv64-musl" "4.60.0" - "@rollup/rollup-linux-s390x-gnu" "4.60.0" - "@rollup/rollup-linux-x64-gnu" "4.60.0" - "@rollup/rollup-linux-x64-musl" "4.60.0" - "@rollup/rollup-openbsd-x64" "4.60.0" - "@rollup/rollup-openharmony-arm64" "4.60.0" - "@rollup/rollup-win32-arm64-msvc" "4.60.0" - "@rollup/rollup-win32-ia32-msvc" "4.60.0" - "@rollup/rollup-win32-x64-gnu" "4.60.0" - "@rollup/rollup-win32-x64-msvc" "4.60.0" + "@rollup/rollup-android-arm-eabi" "4.60.1" + "@rollup/rollup-android-arm64" "4.60.1" + "@rollup/rollup-darwin-arm64" "4.60.1" + "@rollup/rollup-darwin-x64" "4.60.1" + "@rollup/rollup-freebsd-arm64" "4.60.1" + "@rollup/rollup-freebsd-x64" "4.60.1" + "@rollup/rollup-linux-arm-gnueabihf" "4.60.1" + "@rollup/rollup-linux-arm-musleabihf" "4.60.1" + "@rollup/rollup-linux-arm64-gnu" "4.60.1" + "@rollup/rollup-linux-arm64-musl" "4.60.1" + "@rollup/rollup-linux-loong64-gnu" "4.60.1" + "@rollup/rollup-linux-loong64-musl" "4.60.1" + "@rollup/rollup-linux-ppc64-gnu" "4.60.1" + "@rollup/rollup-linux-ppc64-musl" "4.60.1" + "@rollup/rollup-linux-riscv64-gnu" "4.60.1" + "@rollup/rollup-linux-riscv64-musl" "4.60.1" + "@rollup/rollup-linux-s390x-gnu" "4.60.1" + "@rollup/rollup-linux-x64-gnu" "4.60.1" + "@rollup/rollup-linux-x64-musl" "4.60.1" + "@rollup/rollup-openbsd-x64" "4.60.1" + "@rollup/rollup-openharmony-arm64" "4.60.1" + "@rollup/rollup-win32-arm64-msvc" "4.60.1" + "@rollup/rollup-win32-ia32-msvc" "4.60.1" + "@rollup/rollup-win32-x64-gnu" "4.60.1" + "@rollup/rollup-win32-x64-msvc" "4.60.1" fsevents "~2.3.2" saxes@^6.0.0: @@ -1975,7 +1946,7 @@ tinyglobby@^0.2.15: fdir "^6.5.0" picomatch "^4.0.3" -tinyrainbow@^3.0.3: +tinyrainbow@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/tinyrainbow/-/tinyrainbow-3.1.0.tgz#1d8a623893f95cf0a2ddb9e5d11150e191409421" integrity sha512-Bf+ILmBgretUrdJxzXM0SgXLZ3XfiaUuOj/IKQHuTXip+05Xn+uyEYdVg0kYDipTBcLrCVyUzAPz7QmArb0mmw== @@ -2006,7 +1977,7 @@ tr46@^6.0.0: dependencies: punycode "^2.3.1" -ts-api-utils@^2.4.0: +ts-api-utils@^2.5.0: version "2.5.0" resolved "https://registry.yarnpkg.com/ts-api-utils/-/ts-api-utils-2.5.0.tgz#4acd4a155e22734990a5ed1fe9e97f113bcb37c1" integrity sha512-OJ/ibxhPlqrMM0UiNHJ/0CKQkoKF243/AEmplt3qpRgkW8VG7IfOS41h7V8TjITqdByHzrjcS/2si+y4lIh8NA== @@ -2024,14 +1995,14 @@ type-check@^0.4.0, type-check@~0.4.0: prelude-ls "^1.2.1" typescript-eslint@^8.26.1: - version "8.57.2" - resolved "https://registry.yarnpkg.com/typescript-eslint/-/typescript-eslint-8.57.2.tgz#d64c6648dda5b15176708701537ab0b55ba3c83d" - integrity sha512-VEPQ0iPgWO/sBaZOU1xo4nuNdODVOajPnTIbog2GKYr31nIlZ0fWPoCQgGfF3ETyBl1vn63F/p50Um9Z4J8O8A== + version "8.58.0" + resolved "https://registry.yarnpkg.com/typescript-eslint/-/typescript-eslint-8.58.0.tgz#5758b1b68ae7ec05d756b98c63a1f6953a01172b" + integrity sha512-e2TQzKfaI85fO+F3QywtX+tCTsu/D3WW5LVU6nz8hTFKFZ8yBJ6mSYRpXqdR3mFjPWmO0eWsTa5f+UpAOe/FMA== dependencies: - "@typescript-eslint/eslint-plugin" "8.57.2" - "@typescript-eslint/parser" "8.57.2" - "@typescript-eslint/typescript-estree" "8.57.2" - "@typescript-eslint/utils" "8.57.2" + "@typescript-eslint/eslint-plugin" "8.58.0" + "@typescript-eslint/parser" "8.58.0" + "@typescript-eslint/typescript-estree" "8.58.0" + "@typescript-eslint/utils" "8.58.0" typescript@~5.5.4: version "5.5.4" @@ -2072,30 +2043,30 @@ vite@^5.4.9: fsevents "~2.3.3" "vite@^6.0.0 || ^7.0.0 || ^8.0.0": - version "8.0.2" - resolved "https://registry.yarnpkg.com/vite/-/vite-8.0.2.tgz#fcee428eb0ad3d4aa9843d7f7ba981679bbe5edc" - integrity sha512-1gFhNi+bHhRE/qKZOJXACm6tX4bA3Isy9KuKF15AgSRuRazNBOJfdDemPBU16/mpMxApDPrWvZ08DcLPEoRnuA== + version "8.0.3" + resolved "https://registry.yarnpkg.com/vite/-/vite-8.0.3.tgz#036d9e3b077ff57b128660b3e3a5d2d12bac9b42" + integrity sha512-B9ifbFudT1TFhfltfaIPgjo9Z3mDynBTJSUYxTjOQruf/zHH+ezCQKcoqO+h7a9Pw9Nm/OtlXAiGT1axBgwqrQ== dependencies: lightningcss "^1.32.0" - picomatch "^4.0.3" + picomatch "^4.0.4" postcss "^8.5.8" - rolldown "1.0.0-rc.11" + rolldown "1.0.0-rc.12" tinyglobby "^0.2.15" optionalDependencies: fsevents "~2.3.3" vitest@^4.0.18: - version "4.1.1" - resolved "https://registry.yarnpkg.com/vitest/-/vitest-4.1.1.tgz#04700de9cb16898640ebfb4613abecfa83fac4fc" - integrity sha512-yF+o4POL41rpAzj5KVILUxm1GCjKnELvaqmU9TLLUbMfDzuN0UpUR9uaDs+mCtjPe+uYPksXDRLQGGPvj1cTmA== + version "4.1.2" + resolved "https://registry.yarnpkg.com/vitest/-/vitest-4.1.2.tgz#3f7b36838ddf1067160489bea9a21ef465496265" + integrity sha512-xjR1dMTVHlFLh98JE3i/f/WePqJsah4A0FK9cc8Ehp9Udk0AZk6ccpIZhh1qJ/yxVWRZ+Q54ocnD8TXmkhspGg== dependencies: - "@vitest/expect" "4.1.1" - "@vitest/mocker" "4.1.1" - "@vitest/pretty-format" "4.1.1" - "@vitest/runner" "4.1.1" - "@vitest/snapshot" "4.1.1" - "@vitest/spy" "4.1.1" - "@vitest/utils" "4.1.1" + "@vitest/expect" "4.1.2" + "@vitest/mocker" "4.1.2" + "@vitest/pretty-format" "4.1.2" + "@vitest/runner" "4.1.2" + "@vitest/snapshot" "4.1.2" + "@vitest/spy" "4.1.2" + "@vitest/utils" "4.1.2" es-module-lexer "^2.0.0" expect-type "^1.3.0" magic-string "^0.30.21" @@ -2106,7 +2077,7 @@ vitest@^4.0.18: tinybench "^2.9.0" tinyexec "^1.0.2" tinyglobby "^0.2.15" - tinyrainbow "^3.0.3" + tinyrainbow "^3.1.0" vite "^6.0.0 || ^7.0.0 || ^8.0.0" why-is-node-running "^2.3.0"