From fbe6f9d2860d71122c7b74152009db93584bd2ba Mon Sep 17 00:00:00 2001 From: Nikolay <46225163+vigdorov@users.noreply.github.com> Date: Mon, 28 Dec 2020 00:27:08 +0300 Subject: [PATCH] =?UTF-8?q?#21.=20=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D0=B8=D0=B5=20json=20=D0=BF=D0=B0=D1=80=D1=81?= =?UTF-8?q?=D0=B5=D1=80=D0=BE=D0=B2=20(#27)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/core/utils/__test__/jsonParse.test.ts | 31 +++++++++++++++++++++++ src/core/utils/jsonParse.ts | 10 ++++++++ src/core/utils/jsonStringify.ts | 3 +++ 3 files changed, 44 insertions(+) create mode 100644 src/core/utils/__test__/jsonParse.test.ts create mode 100644 src/core/utils/jsonParse.ts create mode 100644 src/core/utils/jsonStringify.ts diff --git a/src/core/utils/__test__/jsonParse.test.ts b/src/core/utils/__test__/jsonParse.test.ts new file mode 100644 index 0000000..f75f886 --- /dev/null +++ b/src/core/utils/__test__/jsonParse.test.ts @@ -0,0 +1,31 @@ +import {jsonParse} from '../jsonParse'; + +describe('jsonParse', () => { + it('Должен вернуть значение', () => { + expect(jsonParse('{}')).toEqual({}); + expect(jsonParse('null')).toBeNull(); + expect(jsonParse('0')).toBe(0); + expect(jsonParse(' 1 ')).toBe(1); + }); + + it('Должен вернуть значение при наличии дефолта', () => { + expect(jsonParse('{}', {str: 9})).toEqual({}); + expect(jsonParse('null', {str: 9})).toBeNull(); + expect(jsonParse('0', {str: 9})).toBe(0); + expect(jsonParse(' 1 ', {str: 9})).toBe(1); + }); + + it('Должен вернуть undefined для не корректных значений', () => { + expect(jsonParse()).toBeUndefined(); + expect(jsonParse('')).toBeUndefined(); + expect(jsonParse(' ')).toBeUndefined(); + expect(jsonParse('{"9')).toBeUndefined(); + }); + + it('Должен вернуть дефолтное значение', () => { + expect(jsonParse(undefined, 'to')).toBe('to'); + expect(jsonParse('', 'to')).toBe('to'); + expect(jsonParse(' ', 'to')).toBe('to'); + expect(jsonParse('./6dh', 9)).toBe(9); + }); +}); diff --git a/src/core/utils/jsonParse.ts b/src/core/utils/jsonParse.ts new file mode 100644 index 0000000..73f2176 --- /dev/null +++ b/src/core/utils/jsonParse.ts @@ -0,0 +1,10 @@ +export const jsonParse = (str?: string, defaultValue?: T): Undefinable => { + const trimStr = str?.trim(); + try { + const parsedValue = JSON.parse(trimStr ?? ''); + + return parsedValue === undefined ? defaultValue : parsedValue; + } catch (e) { + return defaultValue; + } +}; diff --git a/src/core/utils/jsonStringify.ts b/src/core/utils/jsonStringify.ts new file mode 100644 index 0000000..4c2c702 --- /dev/null +++ b/src/core/utils/jsonStringify.ts @@ -0,0 +1,3 @@ +export const jsonStringify = (obj: T, space = 4): string => ( + JSON.stringify(obj, null, space) +);