From f4b1b96bc0f5b1fe1ce4bda95fb6cb8e00ef4296 Mon Sep 17 00:00:00 2001 From: Chris Wanstrath Date: Fri, 7 Nov 2025 19:36:22 -0800 Subject: [PATCH] json.encode & json.decode --- src/prelude/index.ts | 2 ++ src/prelude/json.ts | 7 +++++++ src/prelude/tests/json.test.ts | 17 +++++++++++++++++ 3 files changed, 26 insertions(+) create mode 100644 src/prelude/json.ts create mode 100644 src/prelude/tests/json.test.ts diff --git a/src/prelude/index.ts b/src/prelude/index.ts index 488414b..a3966e1 100644 --- a/src/prelude/index.ts +++ b/src/prelude/index.ts @@ -6,6 +6,7 @@ import { } from 'reefvm' import { dict } from './dict' +import { json } from './json' import { load } from './load' import { list } from './list' import { math } from './math' @@ -13,6 +14,7 @@ import { str } from './str' export const globals = { dict, + json, load, list, math, diff --git a/src/prelude/json.ts b/src/prelude/json.ts new file mode 100644 index 0000000..c54a908 --- /dev/null +++ b/src/prelude/json.ts @@ -0,0 +1,7 @@ +export const json = { + encode: (s: any) => JSON.stringify(s), + decode: (s: string) => JSON.parse(s), +} + + ; (json as any).parse = json.decode + ; (json as any).stringify = json.encode \ No newline at end of file diff --git a/src/prelude/tests/json.test.ts b/src/prelude/tests/json.test.ts new file mode 100644 index 0000000..ef11a93 --- /dev/null +++ b/src/prelude/tests/json.test.ts @@ -0,0 +1,17 @@ +import { expect, describe, test } from 'bun:test' + +describe('json', () => { + test('json.decode', () => { + expect(`json.decode '[1,2,3]'`).toEvaluateTo([1, 2, 3]) + expect(`json.decode '"heya"'`).toEvaluateTo('heya') + expect(`json.decode '[true, false, null]'`).toEvaluateTo([true, false, null]) + expect(`json.decode '{"a": true, "b": false, "c": "yeah"}'`).toEvaluateTo({ a: true, b: false, c: "yeah" }) + }) + + test('json.encode', () => { + expect(`json.encode [1 2 3]`).toEvaluateTo('[1,2,3]') + expect(`json.encode 'heya'`).toEvaluateTo('"heya"') + expect(`json.encode [true false null]`).toEvaluateTo('[true,false,null]') + expect(`json.encode [a=true b=false c='yeah'] | json.decode`).toEvaluateTo({ a: true, b: false, c: "yeah" }) + }) +}) \ No newline at end of file