@synstack/json
Advanced tools
@@ -1,1 +0,1 @@ | ||
| {"version":3,"sources":["../src/json.index.ts","../src/json.bundle.ts","../src/json.lib.ts"],"sourcesContent":["export * from \"./json.bundle.ts\";\nexport * as json from \"./json.bundle.ts\";\nexport { JsonParseException } from \"./json.lib.ts\";\n","export { deserialize, serialize } from \"./json.lib.ts\";\n","import type { ZodSchema } from \"zod\";\nimport type { Stringable } from \"../../shared/src/ts.utils.ts\";\n\n// Todo: check if passing \"zod\" as peer dependency breaks the build\n\n/**\n * Serializes data to JSON\n * @param data The data to serialize\n * @param config.pretty Whether to pretty print the JSON\n * @param config.schema Optional Zod schema to validate the data against before serializing\n * @returns The JSON as a string\n */\nexport const serialize = (\n data: any,\n config: { pretty?: boolean; schema?: ZodSchema<any> } = {},\n) => {\n const validatedData = config.schema ? config.schema.parse(data) : data;\n return JSON.stringify(validatedData, null, config.pretty ? 2 : undefined);\n};\n\n/**\n * Deserializes JSON to a TypeScript type\n * @param content The JSON content to deserialize\n * @param config.schema Optional Zod schema to validate the data against after deserializing\n * @returns The deserialized data as a js entity\n */\nexport const deserialize = <T = unknown>(\n content: Stringable,\n config: {\n schema?: ZodSchema<T>;\n } = {},\n): T => {\n try {\n const validatedData = JSON.parse(content.toString());\n if (config.schema) return config.schema.parse(validatedData);\n return validatedData as T;\n } catch (error) {\n throw new JsonParseException(content.toString(), error);\n }\n};\n\nexport class JsonParseException extends Error {\n constructor(value: string, cause?: any) {\n const message = `\nFailed to parse JSON\n\n[JSON String Value]:\n ${value}\n\n[Cause]:\n ${cause instanceof Error ? cause.message : String(cause)}\n `;\n\n super(message, { cause });\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA;AAAA;AAAA;AAAA;AAAA;;;ACYO,IAAM,YAAY,CACvB,MACA,SAAwD,CAAC,MACtD;AACH,QAAM,gBAAgB,OAAO,SAAS,OAAO,OAAO,MAAM,IAAI,IAAI;AAClE,SAAO,KAAK,UAAU,eAAe,MAAM,OAAO,SAAS,IAAI,MAAS;AAC1E;AAQO,IAAM,cAAc,CACzB,SACA,SAEI,CAAC,MACC;AACN,MAAI;AACF,UAAM,gBAAgB,KAAK,MAAM,QAAQ,SAAS,CAAC;AACnD,QAAI,OAAO,OAAQ,QAAO,OAAO,OAAO,MAAM,aAAa;AAC3D,WAAO;AAAA,EACT,SAAS,OAAO;AACd,UAAM,IAAI,mBAAmB,QAAQ,SAAS,GAAG,KAAK;AAAA,EACxD;AACF;AAEO,IAAM,qBAAN,cAAiC,MAAM;AAAA,EAC5C,YAAY,OAAe,OAAa;AACtC,UAAM,UAAU;AAAA;AAAA;AAAA;AAAA,IAIhB,KAAK;AAAA;AAAA;AAAA,IAGL,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK,CAAC;AAAA;AAGtD,UAAM,SAAS,EAAE,MAAM,CAAC;AAAA,EAC1B;AACF;","names":[]} | ||
| {"version":3,"sources":["../src/json.index.ts","../src/json.bundle.ts","../src/json.lib.ts"],"sourcesContent":["export * from \"./json.bundle.ts\";\nexport * as json from \"./json.bundle.ts\";\nexport { JsonParseException } from \"./json.lib.ts\";\n","export { deserialize, serialize } from \"./json.lib.ts\";\n","import type { ZodTypeDef as ZodTypeDefV3, ZodType as ZodTypeV3 } from \"zod/v3\";\nimport type { ZodType as ZodTypeV4 } from \"zod/v4\";\nimport type { Stringable } from \"../../shared/src/ts.utils.ts\";\n\n// Union type to support both Zod v3 and v4 schemas\ntype ZodSchema<OUT = any, IN = any> =\n | ZodTypeV3<OUT, ZodTypeDefV3, IN>\n | ZodTypeV4<OUT, IN>;\n\n/**\n * Serializes data to JSON\n * @param data The data to serialize\n * @param config.pretty Whether to pretty print the JSON\n * @param config.schema Optional Zod schema to validate the data against before serializing\n * @returns The JSON as a string\n */\nexport const serialize = <SHAPE = unknown>(\n data: SHAPE,\n config: { pretty?: boolean; schema?: ZodSchema<any, SHAPE> } = {},\n) => {\n const validatedData = config.schema ? config.schema.parse(data) : data;\n return JSON.stringify(validatedData, null, config.pretty ? 2 : undefined);\n};\n\n/**\n * Deserializes JSON to a TypeScript type\n * @param content The JSON content to deserialize\n * @param config.schema Optional Zod schema to validate the data against after deserializing\n * @returns The deserialized data as a js entity\n */\nexport const deserialize = <SHAPE = unknown>(\n content: Stringable,\n config: {\n schema?: ZodSchema<SHAPE>;\n } = {},\n): SHAPE => {\n try {\n const validatedData = JSON.parse(content.toString());\n if (config.schema) return config.schema.parse(validatedData);\n return validatedData;\n } catch (error) {\n throw new JsonParseException(content.toString(), error);\n }\n};\n\nexport class JsonParseException extends Error {\n constructor(value: string, cause?: any) {\n const message = `\nFailed to parse JSON\n\n[JSON String Value]:\n ${value}\n\n[Cause]:\n ${cause instanceof Error ? cause.message : String(cause)}\n `;\n\n super(message, { cause });\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA;AAAA;AAAA;AAAA;AAAA;;;ACgBO,IAAM,YAAY,CACvB,MACA,SAA+D,CAAC,MAC7D;AACH,QAAM,gBAAgB,OAAO,SAAS,OAAO,OAAO,MAAM,IAAI,IAAI;AAClE,SAAO,KAAK,UAAU,eAAe,MAAM,OAAO,SAAS,IAAI,MAAS;AAC1E;AAQO,IAAM,cAAc,CACzB,SACA,SAEI,CAAC,MACK;AACV,MAAI;AACF,UAAM,gBAAgB,KAAK,MAAM,QAAQ,SAAS,CAAC;AACnD,QAAI,OAAO,OAAQ,QAAO,OAAO,OAAO,MAAM,aAAa;AAC3D,WAAO;AAAA,EACT,SAAS,OAAO;AACd,UAAM,IAAI,mBAAmB,QAAQ,SAAS,GAAG,KAAK;AAAA,EACxD;AACF;AAEO,IAAM,qBAAN,cAAiC,MAAM;AAAA,EAC5C,YAAY,OAAe,OAAa;AACtC,UAAM,UAAU;AAAA;AAAA;AAAA;AAAA,IAIhB,KAAK;AAAA;AAAA;AAAA,IAGL,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK,CAAC;AAAA;AAGtD,UAAM,SAAS,EAAE,MAAM,CAAC;AAAA,EAC1B;AACF;","names":[]} |
@@ -1,2 +0,3 @@ | ||
| import { ZodSchema } from 'zod'; | ||
| import { ZodType, ZodTypeDef } from 'zod/v3'; | ||
| import { ZodType as ZodType$1 } from 'zod/v4'; | ||
@@ -10,2 +11,3 @@ /** | ||
| type ZodSchema<OUT = any, IN = any> = ZodType<OUT, ZodTypeDef, IN> | ZodType$1<OUT, IN>; | ||
| /** | ||
@@ -18,5 +20,5 @@ * Serializes data to JSON | ||
| */ | ||
| declare const serialize: (data: any, config?: { | ||
| declare const serialize: <SHAPE = unknown>(data: SHAPE, config?: { | ||
| pretty?: boolean; | ||
| schema?: ZodSchema<any>; | ||
| schema?: ZodSchema<any, SHAPE>; | ||
| }) => string; | ||
@@ -29,5 +31,5 @@ /** | ||
| */ | ||
| declare const deserialize: <T = unknown>(content: Stringable, config?: { | ||
| schema?: ZodSchema<T>; | ||
| }) => T; | ||
| declare const deserialize: <SHAPE = unknown>(content: Stringable, config?: { | ||
| schema?: ZodSchema<SHAPE>; | ||
| }) => SHAPE; | ||
| declare class JsonParseException extends Error { | ||
@@ -34,0 +36,0 @@ constructor(value: string, cause?: any); |
@@ -1,2 +0,3 @@ | ||
| import { ZodSchema } from 'zod'; | ||
| import { ZodType, ZodTypeDef } from 'zod/v3'; | ||
| import { ZodType as ZodType$1 } from 'zod/v4'; | ||
@@ -10,2 +11,3 @@ /** | ||
| type ZodSchema<OUT = any, IN = any> = ZodType<OUT, ZodTypeDef, IN> | ZodType$1<OUT, IN>; | ||
| /** | ||
@@ -18,5 +20,5 @@ * Serializes data to JSON | ||
| */ | ||
| declare const serialize: (data: any, config?: { | ||
| declare const serialize: <SHAPE = unknown>(data: SHAPE, config?: { | ||
| pretty?: boolean; | ||
| schema?: ZodSchema<any>; | ||
| schema?: ZodSchema<any, SHAPE>; | ||
| }) => string; | ||
@@ -29,5 +31,5 @@ /** | ||
| */ | ||
| declare const deserialize: <T = unknown>(content: Stringable, config?: { | ||
| schema?: ZodSchema<T>; | ||
| }) => T; | ||
| declare const deserialize: <SHAPE = unknown>(content: Stringable, config?: { | ||
| schema?: ZodSchema<SHAPE>; | ||
| }) => SHAPE; | ||
| declare class JsonParseException extends Error { | ||
@@ -34,0 +36,0 @@ constructor(value: string, cause?: any); |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"sources":["../src/json.bundle.ts","../src/json.lib.ts"],"sourcesContent":["export { deserialize, serialize } from \"./json.lib.ts\";\n","import type { ZodSchema } from \"zod\";\nimport type { Stringable } from \"../../shared/src/ts.utils.ts\";\n\n// Todo: check if passing \"zod\" as peer dependency breaks the build\n\n/**\n * Serializes data to JSON\n * @param data The data to serialize\n * @param config.pretty Whether to pretty print the JSON\n * @param config.schema Optional Zod schema to validate the data against before serializing\n * @returns The JSON as a string\n */\nexport const serialize = (\n data: any,\n config: { pretty?: boolean; schema?: ZodSchema<any> } = {},\n) => {\n const validatedData = config.schema ? config.schema.parse(data) : data;\n return JSON.stringify(validatedData, null, config.pretty ? 2 : undefined);\n};\n\n/**\n * Deserializes JSON to a TypeScript type\n * @param content The JSON content to deserialize\n * @param config.schema Optional Zod schema to validate the data against after deserializing\n * @returns The deserialized data as a js entity\n */\nexport const deserialize = <T = unknown>(\n content: Stringable,\n config: {\n schema?: ZodSchema<T>;\n } = {},\n): T => {\n try {\n const validatedData = JSON.parse(content.toString());\n if (config.schema) return config.schema.parse(validatedData);\n return validatedData as T;\n } catch (error) {\n throw new JsonParseException(content.toString(), error);\n }\n};\n\nexport class JsonParseException extends Error {\n constructor(value: string, cause?: any) {\n const message = `\nFailed to parse JSON\n\n[JSON String Value]:\n ${value}\n\n[Cause]:\n ${cause instanceof Error ? cause.message : String(cause)}\n `;\n\n super(message, { cause });\n }\n}\n"],"mappings":";;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACYO,IAAM,YAAY,CACvB,MACA,SAAwD,CAAC,MACtD;AACH,QAAM,gBAAgB,OAAO,SAAS,OAAO,OAAO,MAAM,IAAI,IAAI;AAClE,SAAO,KAAK,UAAU,eAAe,MAAM,OAAO,SAAS,IAAI,MAAS;AAC1E;AAQO,IAAM,cAAc,CACzB,SACA,SAEI,CAAC,MACC;AACN,MAAI;AACF,UAAM,gBAAgB,KAAK,MAAM,QAAQ,SAAS,CAAC;AACnD,QAAI,OAAO,OAAQ,QAAO,OAAO,OAAO,MAAM,aAAa;AAC3D,WAAO;AAAA,EACT,SAAS,OAAO;AACd,UAAM,IAAI,mBAAmB,QAAQ,SAAS,GAAG,KAAK;AAAA,EACxD;AACF;AAEO,IAAM,qBAAN,cAAiC,MAAM;AAAA,EAC5C,YAAY,OAAe,OAAa;AACtC,UAAM,UAAU;AAAA;AAAA;AAAA;AAAA,IAIhB,KAAK;AAAA;AAAA;AAAA,IAGL,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK,CAAC;AAAA;AAGtD,UAAM,SAAS,EAAE,MAAM,CAAC;AAAA,EAC1B;AACF;","names":[]} | ||
| {"version":3,"sources":["../src/json.bundle.ts","../src/json.lib.ts"],"sourcesContent":["export { deserialize, serialize } from \"./json.lib.ts\";\n","import type { ZodTypeDef as ZodTypeDefV3, ZodType as ZodTypeV3 } from \"zod/v3\";\nimport type { ZodType as ZodTypeV4 } from \"zod/v4\";\nimport type { Stringable } from \"../../shared/src/ts.utils.ts\";\n\n// Union type to support both Zod v3 and v4 schemas\ntype ZodSchema<OUT = any, IN = any> =\n | ZodTypeV3<OUT, ZodTypeDefV3, IN>\n | ZodTypeV4<OUT, IN>;\n\n/**\n * Serializes data to JSON\n * @param data The data to serialize\n * @param config.pretty Whether to pretty print the JSON\n * @param config.schema Optional Zod schema to validate the data against before serializing\n * @returns The JSON as a string\n */\nexport const serialize = <SHAPE = unknown>(\n data: SHAPE,\n config: { pretty?: boolean; schema?: ZodSchema<any, SHAPE> } = {},\n) => {\n const validatedData = config.schema ? config.schema.parse(data) : data;\n return JSON.stringify(validatedData, null, config.pretty ? 2 : undefined);\n};\n\n/**\n * Deserializes JSON to a TypeScript type\n * @param content The JSON content to deserialize\n * @param config.schema Optional Zod schema to validate the data against after deserializing\n * @returns The deserialized data as a js entity\n */\nexport const deserialize = <SHAPE = unknown>(\n content: Stringable,\n config: {\n schema?: ZodSchema<SHAPE>;\n } = {},\n): SHAPE => {\n try {\n const validatedData = JSON.parse(content.toString());\n if (config.schema) return config.schema.parse(validatedData);\n return validatedData;\n } catch (error) {\n throw new JsonParseException(content.toString(), error);\n }\n};\n\nexport class JsonParseException extends Error {\n constructor(value: string, cause?: any) {\n const message = `\nFailed to parse JSON\n\n[JSON String Value]:\n ${value}\n\n[Cause]:\n ${cause instanceof Error ? cause.message : String(cause)}\n `;\n\n super(message, { cause });\n }\n}\n"],"mappings":";;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACgBO,IAAM,YAAY,CACvB,MACA,SAA+D,CAAC,MAC7D;AACH,QAAM,gBAAgB,OAAO,SAAS,OAAO,OAAO,MAAM,IAAI,IAAI;AAClE,SAAO,KAAK,UAAU,eAAe,MAAM,OAAO,SAAS,IAAI,MAAS;AAC1E;AAQO,IAAM,cAAc,CACzB,SACA,SAEI,CAAC,MACK;AACV,MAAI;AACF,UAAM,gBAAgB,KAAK,MAAM,QAAQ,SAAS,CAAC;AACnD,QAAI,OAAO,OAAQ,QAAO,OAAO,OAAO,MAAM,aAAa;AAC3D,WAAO;AAAA,EACT,SAAS,OAAO;AACd,UAAM,IAAI,mBAAmB,QAAQ,SAAS,GAAG,KAAK;AAAA,EACxD;AACF;AAEO,IAAM,qBAAN,cAAiC,MAAM;AAAA,EAC5C,YAAY,OAAe,OAAa;AACtC,UAAM,UAAU;AAAA;AAAA;AAAA;AAAA,IAIhB,KAAK;AAAA;AAAA;AAAA,IAGL,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK,CAAC;AAAA;AAGtD,UAAM,SAAS,EAAE,MAAM,CAAC;AAAA,EAC1B;AACF;","names":[]} |
+7
-8
@@ -7,3 +7,3 @@ { | ||
| }, | ||
| "version": "1.1.9", | ||
| "version": "1.1.10", | ||
| "description": "Schema-safe and type-safe JSON serialization and deserialization", | ||
@@ -35,4 +35,3 @@ "keywords": [ | ||
| "test:unit:watch": "node --experimental-strip-types --experimental-test-snapshots --no-warnings --watch --test --watch src/**/*.test.ts", | ||
| "test": "yarn test:types && yarn test:unit", | ||
| "prepare": "yarn test && yarn build" | ||
| "test": "pnpm test:types && pnpm test:unit" | ||
| }, | ||
@@ -52,9 +51,9 @@ "exports": { | ||
| "devDependencies": { | ||
| "@types/node": "^22.15.18", | ||
| "tsup": "^8.4.0", | ||
| "@types/node": "^22.15.32", | ||
| "tsup": "^8.5.0", | ||
| "typescript": "^5.8.3", | ||
| "zod": "^3.24.4" | ||
| "zod": "^3.25.67" | ||
| }, | ||
| "peerDependencies": { | ||
| "zod": "*" | ||
| "zod": "^3.25.0" | ||
| }, | ||
@@ -66,3 +65,3 @@ "files": [ | ||
| ], | ||
| "gitHead": "e1e1af9e37deafae1ff7e22df9874af26941ae6b" | ||
| "gitHead": "f0daeeb6dd582a265033f020ba5e4baef3ff2a94" | ||
| } |
+13
-9
@@ -1,5 +0,9 @@ | ||
| import type { ZodSchema } from "zod"; | ||
| import type { ZodTypeDef as ZodTypeDefV3, ZodType as ZodTypeV3 } from "zod/v3"; | ||
| import type { ZodType as ZodTypeV4 } from "zod/v4"; | ||
| import type { Stringable } from "../../shared/src/ts.utils.ts"; | ||
| // Todo: check if passing "zod" as peer dependency breaks the build | ||
| // Union type to support both Zod v3 and v4 schemas | ||
| type ZodSchema<OUT = any, IN = any> = | ||
| | ZodTypeV3<OUT, ZodTypeDefV3, IN> | ||
| | ZodTypeV4<OUT, IN>; | ||
@@ -13,5 +17,5 @@ /** | ||
| */ | ||
| export const serialize = ( | ||
| data: any, | ||
| config: { pretty?: boolean; schema?: ZodSchema<any> } = {}, | ||
| export const serialize = <SHAPE = unknown>( | ||
| data: SHAPE, | ||
| config: { pretty?: boolean; schema?: ZodSchema<any, SHAPE> } = {}, | ||
| ) => { | ||
@@ -28,12 +32,12 @@ const validatedData = config.schema ? config.schema.parse(data) : data; | ||
| */ | ||
| export const deserialize = <T = unknown>( | ||
| export const deserialize = <SHAPE = unknown>( | ||
| content: Stringable, | ||
| config: { | ||
| schema?: ZodSchema<T>; | ||
| schema?: ZodSchema<SHAPE>; | ||
| } = {}, | ||
| ): T => { | ||
| ): SHAPE => { | ||
| try { | ||
| const validatedData = JSON.parse(content.toString()); | ||
| if (config.schema) return config.schema.parse(validatedData); | ||
| return validatedData as T; | ||
| return validatedData; | ||
| } catch (error) { | ||
@@ -40,0 +44,0 @@ throw new JsonParseException(content.toString(), error); |
18055
5.74%204
3.03%