From 9aaacd2366e05d0459bcc1daed19d2ae34f18bfc Mon Sep 17 00:00:00 2001 From: martinRenou Date: Mon, 11 Sep 2023 11:42:00 +0200 Subject: [PATCH 1/4] Revert "fix: deepcopy with `structuredClone` over JSON.parse/stringify" --- packages/base/src/widget.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/base/src/widget.ts b/packages/base/src/widget.ts index cfea6ef8fe..69fb094468 100644 --- a/packages/base/src/widget.ts +++ b/packages/base/src/widget.ts @@ -584,7 +584,7 @@ export class WidgetModel extends Backbone.Model { state[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) { From 71776daf353be0d21a5c0a43ec48aa354738b8f0 Mon Sep 17 00:00:00 2001 From: martinRenou Date: Mon, 11 Sep 2023 11:50:41 +0200 Subject: [PATCH 2/4] Remove unused variables --- packages/base/src/widget.ts | 6 ------ 1 file changed, 6 deletions(-) diff --git a/packages/base/src/widget.ts b/packages/base/src/widget.ts index 69fb094468..df4a2dc05d 100644 --- a/packages/base/src/widget.ts +++ b/packages/base/src/widget.ts @@ -34,12 +34,6 @@ import { KernelMessage } from '@jupyterlab/services'; */ 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.structuredClone || deepcopyJSON; /** * Replace model ids with models recursively. From 2e7d4f6b39c5591c0c1a5df20d2f26939399d3ee Mon Sep 17 00:00:00 2001 From: martinRenou Date: Mon, 11 Sep 2023 12:59:47 +0200 Subject: [PATCH 3/4] Revert to original code --- packages/base/src/widget.ts | 13 ++----------- 1 file changed, 2 insertions(+), 11 deletions(-) diff --git a/packages/base/src/widget.ts b/packages/base/src/widget.ts index df4a2dc05d..19ea12c661 100644 --- a/packages/base/src/widget.ts +++ b/packages/base/src/widget.ts @@ -566,21 +566,12 @@ export class WidgetModel extends Backbone.Model { JSONExt.emptyObject; for (const k of Object.keys(state)) { try { - const keySerializers = serializers[k] || JSONExt.emptyObject; - let { serialize } = keySerializers; - - 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] = JSON.parse(JSON.stringify(state[k])); } - if (state[k] && state[k].toJSON) { state[k] = state[k].toJSON(); } From dc7ffe6759531bfaf23c7cd428de0d261597f9b8 Mon Sep 17 00:00:00 2001 From: martinRenou Date: Mon, 11 Sep 2023 13:09:19 +0200 Subject: [PATCH 4/4] Linter --- packages/base/src/widget.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/base/src/widget.ts b/packages/base/src/widget.ts index 19ea12c661..6cb981fc02 100644 --- a/packages/base/src/widget.ts +++ b/packages/base/src/widget.ts @@ -34,7 +34,6 @@ import { KernelMessage } from '@jupyterlab/services'; */ const IPY_MODEL_ = 'IPY_MODEL_'; - /** * Replace model ids with models recursively. */