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) +);