From e9f82326b459eb72a5776cdfa36ca725c9cbcea6 Mon Sep 17 00:00:00 2001 From: Philipp Rudiger Date: Thu, 9 May 2024 16:57:22 +0200 Subject: [PATCH 1/5] Ensure binary buffers are correctly extract in CommManager --- panel/models/comm_manager.ts | 24 ++++++++++++++---------- 1 file changed, 14 insertions(+), 10 deletions(-) diff --git a/panel/models/comm_manager.ts b/panel/models/comm_manager.ts index 644f7502cc..fa2aa1725e 100644 --- a/panel/models/comm_manager.ts +++ b/panel/models/comm_manager.ts @@ -4,6 +4,7 @@ import {View} from "@bokehjs/core/view" import {Model} from "@bokehjs/model" import {Message} from "@bokehjs/protocol/message" import {Receiver} from "@bokehjs/protocol/receiver" +import {Buffer} from "@bokehjs/core/serialization/buffer" import type {Patch, DocumentChangedEvent} from "@bokehjs/document" import {isArray, isPlainObject} from "@bokehjs/core/util/types" import {values, size} from "@bokehjs/core/util/object" @@ -108,17 +109,20 @@ export class CommManager extends Model { for (const val of value) { this._extract_buffers(val, buffers) } + } else if (value instanceof Map) { + for (const key of value.keys()) { + const v = value.get(key) + this._extract_buffers(v, buffers) + } + } else if (value instanceof Buffer) { + const {buffer} = value + delete value.buffer + const id = buffers.length + value.id = id + buffers.push(buffer) } else if (isPlainObject(value)) { - if (size(value) == 1 && value.buffer instanceof ArrayBuffer) { - const {buffer} = value - delete value.buffer - const id = buffers.length - value.id = id - buffers.push(buffer) - } else { - for (const val of values(value)) { - this._extract_buffers(val, buffers) - } + for (const val of values(value)) { + this._extract_buffers(val, buffers) } } } From 393e7bf34edb61692f40a794b7461468eed97de9 Mon Sep 17 00:00:00 2001 From: Philipp Rudiger Date: Thu, 9 May 2024 17:03:58 +0200 Subject: [PATCH 2/5] Fix indents --- panel/models/comm_manager.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/panel/models/comm_manager.ts b/panel/models/comm_manager.ts index fa2aa1725e..238c729614 100644 --- a/panel/models/comm_manager.ts +++ b/panel/models/comm_manager.ts @@ -111,8 +111,8 @@ export class CommManager extends Model { } } else if (value instanceof Map) { for (const key of value.keys()) { - const v = value.get(key) - this._extract_buffers(v, buffers) + const v = value.get(key) + this._extract_buffers(v, buffers) } } else if (value instanceof Buffer) { const {buffer} = value From 12ecea0ab352e5c91c95c4accaee6e6a7e19ec8a Mon Sep 17 00:00:00 2001 From: Philipp Rudiger Date: Thu, 9 May 2024 17:29:56 +0200 Subject: [PATCH 3/5] Do not patch existing Buffer object --- panel/models/comm_manager.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/panel/models/comm_manager.ts b/panel/models/comm_manager.ts index 238c729614..76405f44d3 100644 --- a/panel/models/comm_manager.ts +++ b/panel/models/comm_manager.ts @@ -7,7 +7,7 @@ import {Receiver} from "@bokehjs/protocol/receiver" import {Buffer} from "@bokehjs/core/serialization/buffer" import type {Patch, DocumentChangedEvent} from "@bokehjs/document" import {isArray, isPlainObject} from "@bokehjs/core/util/types" -import {values, size} from "@bokehjs/core/util/object" +import {keys} from "@bokehjs/core/util/object" export const comm_settings: any = { debounce: true, From 03063fd8a06e2bc48769b88c55d5a7cb48db85af Mon Sep 17 00:00:00 2001 From: Philipp Rudiger Date: Thu, 9 May 2024 17:41:36 +0200 Subject: [PATCH 4/5] Do not patch existing Buffer object --- panel/models/comm_manager.ts | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/panel/models/comm_manager.ts b/panel/models/comm_manager.ts index 76405f44d3..9e21cedf42 100644 --- a/panel/models/comm_manager.ts +++ b/panel/models/comm_manager.ts @@ -104,7 +104,7 @@ export class CommManager extends Model { } } - protected _extract_buffers(value: unknown, buffers: ArrayBuffer[]): void { + protected _extract_buffers(value: unknown, buffers: ArrayBuffer[]): any { if (isArray(value)) { for (const val of value) { this._extract_buffers(val, buffers) @@ -116,13 +116,15 @@ export class CommManager extends Model { } } else if (value instanceof Buffer) { const {buffer} = value - delete value.buffer const id = buffers.length - value.id = id buffers.push(buffer) + return {id: id} } else if (isPlainObject(value)) { - for (const val of values(value)) { - this._extract_buffers(val, buffers) + for (const key of keys(value)) { + const replaced = this._extract_buffers(value[key], buffers) + if (replaced != null) { + value[key] = replaced + } } } } From d559d6d5204506c12bf5cc7055ea185691b51fb3 Mon Sep 17 00:00:00 2001 From: Philipp Rudiger Date: Thu, 9 May 2024 18:15:42 +0200 Subject: [PATCH 5/5] Lint fixes --- panel/models/comm_manager.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/panel/models/comm_manager.ts b/panel/models/comm_manager.ts index 9e21cedf42..fd1f046d4c 100644 --- a/panel/models/comm_manager.ts +++ b/panel/models/comm_manager.ts @@ -118,13 +118,13 @@ export class CommManager extends Model { const {buffer} = value const id = buffers.length buffers.push(buffer) - return {id: id} + return {id} } else if (isPlainObject(value)) { for (const key of keys(value)) { const replaced = this._extract_buffers(value[key], buffers) - if (replaced != null) { - value[key] = replaced - } + if (replaced != null) { + value[key] = replaced + } } } }