Skip to content

Commit

Permalink
Ensure binary buffers are correctly extracted in CommManager (#6818)
Browse files Browse the repository at this point in the history
  • Loading branch information
philippjfr committed May 9, 2024
1 parent 9e92736 commit 2850bc7
Showing 1 changed file with 21 additions and 17 deletions.
38 changes: 21 additions & 17 deletions panel/models/comm_manager.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,10 @@ 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 {keys} from "@bokehjs/core/util/object"

export const comm_settings: any = {
debounce: true,
Expand Down Expand Up @@ -101,28 +104,29 @@ export class CommManager extends Model {
}
}

protected _extract_buffers(value: any, buffers: ArrayBuffer[]): any {
let extracted: any
if (value instanceof Array) {
extracted = []
protected _extract_buffers(value: unknown, buffers: ArrayBuffer[]): any {
if (isArray(value)) {
for (const val of value) {
extracted.push(this._extract_buffers(val, buffers))
this._extract_buffers(val, buffers)
}
} else if (value instanceof Object) {
extracted = {}
for (const key in value) {
if (key === "buffer" && value[key] instanceof ArrayBuffer) {
const id = Object.keys(buffers).length
extracted = {id}
buffers.push(value[key])
break
} 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
const id = buffers.length
buffers.push(buffer)
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
}
extracted[key] = this._extract_buffers(value[key], buffers)
}
} else {
extracted = value
}
return extracted
}

process_events() {
Expand Down

0 comments on commit 2850bc7

Please sign in to comment.