From 99d1acdec7beb77d5dae03120c9f2ac1886cbaa9 Mon Sep 17 00:00:00 2001 From: Tony Garnock-Jones Date: Thu, 28 Mar 2024 09:57:38 +0100 Subject: [PATCH] Accept fewer `Object`s as `JsDictionary` --- implementations/javascript/packages/core/src/dictionary.ts | 7 +------ .../javascript/packages/core/src/jsdictionary.ts | 4 +++- 2 files changed, 4 insertions(+), 7 deletions(-) diff --git a/implementations/javascript/packages/core/src/dictionary.ts b/implementations/javascript/packages/core/src/dictionary.ts index cf2a613..ef8165c 100644 --- a/implementations/javascript/packages/core/src/dictionary.ts +++ b/implementations/javascript/packages/core/src/dictionary.ts @@ -230,12 +230,7 @@ export namespace Dictionary { if (typeof x !== 'object' || x === null) return false; switch (x[DictionaryType]) { case 'Dictionary': return true; - case void 0: - if (Array.isArray(x)) return false; - if (isEmbedded(x)) return false; - if (Float.isFloat(x)) return false; - if (Bytes.isBytes(x)) return false; - return true; + case void 0: return JsDictionary.isJsDictionary(x); default: return false; } } diff --git a/implementations/javascript/packages/core/src/jsdictionary.ts b/implementations/javascript/packages/core/src/jsdictionary.ts index 820a0ef..8b00da7 100644 --- a/implementations/javascript/packages/core/src/jsdictionary.ts +++ b/implementations/javascript/packages/core/src/jsdictionary.ts @@ -7,7 +7,9 @@ export interface JsDictionary { export namespace JsDictionary { export function isJsDictionary(x: any): x is JsDictionary { - return Dictionary.isDictionary(x) && (x as any)[DictionaryType] === void 0; + // We accept only literal objects and objects created via `new Object` + // as dictionaries. + return Object.getPrototypeOf(Object.getPrototypeOf(x ?? false)) === null; } export function from(entries: Iterable<[symbol, V]>): JsDictionary {