From abca13e2603e2ada36481da21ecae6df8b470a68 Mon Sep 17 00:00:00 2001 From: Tony Garnock-Jones Date: Sun, 17 Jan 2021 13:37:16 +0100 Subject: [PATCH] Idempotent Map/Set extensions --- implementations/javascript/src/flex.ts | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/implementations/javascript/src/flex.ts b/implementations/javascript/src/flex.ts index 7cc4585..687a167 100644 --- a/implementations/javascript/src/flex.ts +++ b/implementations/javascript/src/flex.ts @@ -31,10 +31,14 @@ declare global { interface Set { [IsSet]: boolean; } interface SetConstructor { isSet(x: any): x is Set; } } -Object.defineProperty(Map.prototype, IsMap, { get() { return true; } }); -Map.isMap = (x: any): x is Map => !!x?.[IsMap]; -Object.defineProperty(Set.prototype, IsSet, { get() { return true; } }); -Set.isSet = (x: any): x is Set => !!x?.[IsSet]; +if (!(IsMap in Map.prototype)) { + Object.defineProperty(Map.prototype, IsMap, { get() { return true; } }); + Map.isMap = (x: any): x is Map => !!x?.[IsMap]; +} +if (!(IsSet in Set.prototype)) { + Object.defineProperty(Set.prototype, IsSet, { get() { return true; } }); + Set.isSet = (x: any): x is Set => !!x?.[IsSet]; +} export function _iterMap(i: Iterator, f : (s: S) => T): IterableIterator { const _f = (r: IteratorResult): IteratorResult => {