55 lines
1.6 KiB
JavaScript
55 lines
1.6 KiB
JavaScript
|
"use strict";
|
||
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||
|
exports.stringify = exports.parse = void 0;
|
||
|
/**
|
||
|
* @since 2.10.0
|
||
|
*/
|
||
|
var Either_1 = require("./Either");
|
||
|
var function_1 = require("./function");
|
||
|
/**
|
||
|
* Converts a JavaScript Object Notation (JSON) string into a `Json` type.
|
||
|
*
|
||
|
* @example
|
||
|
* import * as J from 'fp-ts/Json'
|
||
|
* import * as E from 'fp-ts/Either'
|
||
|
* import { pipe } from 'fp-ts/function'
|
||
|
*
|
||
|
* assert.deepStrictEqual(pipe('{"a":1}', J.parse), E.right({ a: 1 }))
|
||
|
* assert.deepStrictEqual(pipe('{"a":}', J.parse), E.left(new SyntaxError('Unexpected token } in JSON at position 5')))
|
||
|
*
|
||
|
* @since 2.10.0
|
||
|
*/
|
||
|
var parse = function (s) { return (0, Either_1.tryCatch)(function () { return JSON.parse(s); }, function_1.identity); };
|
||
|
exports.parse = parse;
|
||
|
/**
|
||
|
* Converts a JavaScript value to a JavaScript Object Notation (JSON) string.
|
||
|
*
|
||
|
* @example
|
||
|
* import * as E from 'fp-ts/Either'
|
||
|
* import * as J from 'fp-ts/Json'
|
||
|
* import { pipe } from 'fp-ts/function'
|
||
|
*
|
||
|
* assert.deepStrictEqual(J.stringify({ a: 1 }), E.right('{"a":1}'))
|
||
|
* const circular: any = { ref: null }
|
||
|
* circular.ref = circular
|
||
|
* assert.deepStrictEqual(
|
||
|
* pipe(
|
||
|
* J.stringify(circular),
|
||
|
* E.mapLeft(e => e instanceof Error && e.message.includes('Converting circular structure to JSON'))
|
||
|
* ),
|
||
|
* E.left(true)
|
||
|
* )
|
||
|
*
|
||
|
* @since 2.10.0
|
||
|
*/
|
||
|
var stringify = function (a) {
|
||
|
return (0, Either_1.tryCatch)(function () {
|
||
|
var s = JSON.stringify(a);
|
||
|
if (typeof s !== 'string') {
|
||
|
throw new Error('Converting unsupported structure to JSON');
|
||
|
}
|
||
|
return s;
|
||
|
}, function_1.identity);
|
||
|
};
|
||
|
exports.stringify = stringify;
|