From 27511806a859f53ae8b95fc38de62ac34939e956 Mon Sep 17 00:00:00 2001 From: Alexander Cerutti Date: Tue, 22 Feb 2022 00:04:07 +0100 Subject: [PATCH] Added falsy fields to be automatically excluded with warn being emitted --- spec/FieldsArray.ts | 12 ++++++++++++ src/FieldsArray.ts | 9 ++++++++- 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/spec/FieldsArray.ts b/spec/FieldsArray.ts index a5f54f1..87ae1f8 100644 --- a/spec/FieldsArray.ts +++ b/spec/FieldsArray.ts @@ -68,6 +68,18 @@ describe("FieldsArray", () => { expect(fa.length).toBe(1); }); + + it("should log a warning if input items contain undefined and, then, ignore it", () => { + console.warn = jasmine.createSpy("log"); + + fa.push(undefined, { key: "t1", value: "v1" }); + + expect(console.warn).toHaveBeenCalledWith( + Messages.FIELDS.INVALID.replace("%s", "undefined"), + ); + + expect(fa.length).toBe(1); + }); }); describe("pop", () => { diff --git a/src/FieldsArray.ts b/src/FieldsArray.ts index 12f02f7..10fad77 100644 --- a/src/FieldsArray.ts +++ b/src/FieldsArray.ts @@ -68,6 +68,11 @@ function registerWithValidation( let validItems: Schemas.Field[] = []; for (const field of items) { + if (!field) { + console.warn(Messages.format(Messages.FIELDS.INVALID, field)); + continue; + } + try { Schemas.assertValidity( Schemas.Field, @@ -76,7 +81,9 @@ function registerWithValidation( ); if (instance[sharedKeysPoolSymbol].has(field.key)) { - throw Messages.format(Messages.FIELDS.REPEATED_KEY, field.key); + throw new TypeError( + Messages.format(Messages.FIELDS.REPEATED_KEY, field.key), + ); } instance[sharedKeysPoolSymbol].add(field.key);