From 8c92499d85917693d2f87252419f0eeccd239a2b Mon Sep 17 00:00:00 2001 From: Florian Dold Date: Mon, 8 Feb 2021 19:59:19 +0100 Subject: idb: add first web platform tests, fix issues detected by them --- packages/idb-bridge/src/util/structuredClone.ts | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) (limited to 'packages/idb-bridge/src/util/structuredClone.ts') diff --git a/packages/idb-bridge/src/util/structuredClone.ts b/packages/idb-bridge/src/util/structuredClone.ts index c49d0377f..9bbeb7151 100644 --- a/packages/idb-bridge/src/util/structuredClone.ts +++ b/packages/idb-bridge/src/util/structuredClone.ts @@ -14,17 +14,24 @@ permissions and limitations under the License. */ -function structuredCloneImpl(val: any, visited: WeakMap): any { - // FIXME: replace with real implementation! - return JSON.parse(JSON.stringify(val)); +// @ts-ignore +import Typeson from "typeson"; +// @ts-ignore +import structuredCloningThrowing from "typeson-registry/dist/presets/structured-cloning-throwing"; + +const TSON = new Typeson().register(structuredCloningThrowing); + +export function structuredEncapsulate(val: any): any { + return TSON.encapsulate(val); +} + +export function structuredRevive(val: any): any { + return TSON.revive(val); } /** * Structured clone for IndexedDB. */ export function structuredClone(val: any): any { - const visited: WeakMap = new WeakMap(); - return structuredCloneImpl(val, visited); + return structuredRevive(structuredEncapsulate(val)); } - -export default structuredClone; -- cgit v1.2.3