diff --git a/packages/base/src/widget.ts b/packages/base/src/widget.ts index 6dfd330717..f5cc378cc0 100644 --- a/packages/base/src/widget.ts +++ b/packages/base/src/widget.ts @@ -37,13 +37,6 @@ import { */ const IPY_MODEL_ = 'IPY_MODEL_'; -/** - * A best-effort method for performing deep copies. - */ -const deepcopyJSON = (x: JSONValue) => JSON.parse(JSON.stringify(x)); - -const deepcopy = (globalThis as any).structuredClone || deepcopyJSON; - /** * Replace model ids with models recursively. */ @@ -538,18 +531,11 @@ class WidgetModel extends Backbone.Model { const serializers = (this.constructor as typeof WidgetModel).serializers || {}; for (const k of Object.keys(state)) { try { - const keySerializers : any = serializers[k] || null; - let serialize = keySerializers?.serialize || null; - if (serialize == null && keySerializers?.deserialize === unpack_models) { - // handle https://github.com/jupyter-widgets/ipywidgets/issues/3735 - serialize = deepcopyJSON; - } - - if (serialize) { - state[k] = serialize(state[k], this); + if (serializers[k] && serializers[k].serialize) { + state[k] = serializers[k].serialize!(state[k], this); } else { // the default serializer just deep-copies the object - state[k] = deepcopy(state[k]); + state[k] = JSON.parse(JSON.stringify(state[k])); } if (state[k] && state[k].toJSON) {