From c0ce51c213ef32743b6b814010d7a1731f1098de Mon Sep 17 00:00:00 2001 From: StanleySathler Date: Thu, 2 Feb 2023 17:32:42 -0300 Subject: [PATCH 1/5] feat: allow passing Object construtor to properties --- src/utils/isModelValueType.ts | 4 +++- test/model/create.test.ts | 16 ++++++++++++++++ test/utils/isModelValueType.test.ts | 4 ++++ 3 files changed, 23 insertions(+), 1 deletion(-) diff --git a/src/utils/isModelValueType.ts b/src/utils/isModelValueType.ts index 705ff035..97867221 100644 --- a/src/utils/isModelValueType.ts +++ b/src/utils/isModelValueType.ts @@ -1,3 +1,4 @@ +import isObjectLike from 'lodash/isObjectLike' import { ModelValueType, PrimitiveValueType } from '../glossary' function isPrimitiveValueType(value: any): value is PrimitiveValueType { @@ -5,10 +6,11 @@ function isPrimitiveValueType(value: any): value is PrimitiveValueType { typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean' || + isObjectLike(value) || value?.constructor?.name === 'Date' ) } export function isModelValueType(value: any): value is ModelValueType { - return isPrimitiveValueType(value) || Array.isArray(value) + return isPrimitiveValueType(value) } diff --git a/test/model/create.test.ts b/test/model/create.test.ts index cc052c7c..67995c09 100644 --- a/test/model/create.test.ts +++ b/test/model/create.test.ts @@ -30,6 +30,22 @@ test('creates a new entity with initial values', () => { expect(exactUser.id).toEqual('abc-123') }) +test('creates a new entity with an object property', () => { + const db = factory({ + user: { + id: primaryKey(faker.datatype.uuid), + settings: Object, + }, + }) + + const exactUser = db.user.create({ + id: 'abc-123', + settings: { minHue: 1 }, + }) + expect(exactUser.id).toEqual('abc-123') + expect(exactUser.settings).toEqual({ minHue: 1 }) +}) + test('creates a new entity with an array property', () => { const db = factory({ user: { diff --git a/test/utils/isModelValueType.test.ts b/test/utils/isModelValueType.test.ts index ee647b10..5f14fe8a 100644 --- a/test/utils/isModelValueType.test.ts +++ b/test/utils/isModelValueType.test.ts @@ -36,6 +36,10 @@ it('returns true when given nested primitive arrays', () => { expect(isModelValueType(['I am a string', [100]])).toBe(true) }) +it('returns true when given a literal object', () => { + expect(isModelValueType({ intensity: 1 })).toBe(true) +}) + it('returns false given an undefined', () => { expect(isModelValueType(undefined)).toBe(false) }) From 704c03aec83a92026ba707cbb7350ea4f1afc7c2 Mon Sep 17 00:00:00 2001 From: StanleySathler Date: Sun, 10 Sep 2023 11:44:04 -0300 Subject: [PATCH 2/5] chore: reuse utility --- src/utils/isModelValueType.ts | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/utils/isModelValueType.ts b/src/utils/isModelValueType.ts index 97867221..6dd45849 100644 --- a/src/utils/isModelValueType.ts +++ b/src/utils/isModelValueType.ts @@ -1,16 +1,17 @@ import isObjectLike from 'lodash/isObjectLike' import { ModelValueType, PrimitiveValueType } from '../glossary' +import { isObject } from './isObject' function isPrimitiveValueType(value: any): value is PrimitiveValueType { return ( typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean' || - isObjectLike(value) || + isObject(value) || value?.constructor?.name === 'Date' ) } export function isModelValueType(value: any): value is ModelValueType { - return isPrimitiveValueType(value) + return isPrimitiveValueType(value) || Array.isArray(value) } From 02584dc0b4a02f108d97aa2bcabe0a54c2c4c68d Mon Sep 17 00:00:00 2001 From: StanleySathler Date: Sun, 10 Sep 2023 11:49:59 -0300 Subject: [PATCH 3/5] chore: add test to check if default value is {} --- test/model/create.test.ts | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/test/model/create.test.ts b/test/model/create.test.ts index 67995c09..58d4492c 100644 --- a/test/model/create.test.ts +++ b/test/model/create.test.ts @@ -30,7 +30,22 @@ test('creates a new entity with initial values', () => { expect(exactUser.id).toEqual('abc-123') }) -test('creates a new entity with an object property', () => { +test.only('creates a new entity with an object property and no value specified', () => { + const db = factory({ + user: { + id: primaryKey(faker.datatype.uuid), + settings: Object, + }, + }) + + const exactUser = db.user.create({ + id: 'abc-123', + }) + expect(exactUser.id).toEqual('abc-123') + expect(exactUser.settings).toEqual({}) +}) + +test('creates a new entity with an object property and a value specified', () => { const db = factory({ user: { id: primaryKey(faker.datatype.uuid), From 55cdc1761d3ad6a741ee81316801ac31fea26c03 Mon Sep 17 00:00:00 2001 From: StanleySathler Date: Mon, 11 Sep 2023 08:39:35 -0300 Subject: [PATCH 4/5] chore: fix lint --- src/utils/isModelValueType.ts | 1 - test/model/create.test.ts | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/src/utils/isModelValueType.ts b/src/utils/isModelValueType.ts index 6dd45849..f7f5e241 100644 --- a/src/utils/isModelValueType.ts +++ b/src/utils/isModelValueType.ts @@ -1,4 +1,3 @@ -import isObjectLike from 'lodash/isObjectLike' import { ModelValueType, PrimitiveValueType } from '../glossary' import { isObject } from './isObject' diff --git a/test/model/create.test.ts b/test/model/create.test.ts index 58d4492c..5ceee649 100644 --- a/test/model/create.test.ts +++ b/test/model/create.test.ts @@ -30,7 +30,7 @@ test('creates a new entity with initial values', () => { expect(exactUser.id).toEqual('abc-123') }) -test.only('creates a new entity with an object property and no value specified', () => { +test('creates a new entity with an object property and no value specified', () => { const db = factory({ user: { id: primaryKey(faker.datatype.uuid), From 2efe388cf580d85a458c3d23f5251d7ca60c60b9 Mon Sep 17 00:00:00 2001 From: Artem Zakharchenko Date: Mon, 9 Sep 2024 13:27:20 +0200 Subject: [PATCH 5/5] chore(ts): skip lib check --- tsconfig.json | 1 + 1 file changed, 1 insertion(+) diff --git a/tsconfig.json b/tsconfig.json index d1a9877d..00d60c11 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -2,6 +2,7 @@ "compilerOptions": { "strict": true, "strictNullChecks": true, + "skipLibCheck": true, "outDir": "lib", "declaration": true, "moduleResolution": "node",