UNPKG

@stryke/json

Version:

A package containing JSON parsing/stringify utilities used by Storm Software.

72 lines (71 loc) 2.28 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.StormJSON = void 0; var _isObject = require("@stryke/type-checks/is-object"); var _isString = require("@stryke/type-checks/is-string"); var _jsoncParser = require("jsonc-parser"); var _nodeBuffer = require("node:buffer"); var _superjson = _interopRequireDefault(require("superjson")); var _parse = require("./utils/parse.cjs"); var _parseError = require("./utils/parse-error.cjs"); var _stringify = require("./utils/stringify.cjs"); function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; } class StormJSON extends _superjson.default { static #r; static get instance() { return StormJSON.#r || (StormJSON.#r = new StormJSON()), StormJSON.#r; } static deserialize(r) { return StormJSON.instance.deserialize(r); } static serialize(r) { return StormJSON.instance.serialize(r); } static parse(r) { return (0, _parse.parse)(r); } static stringify(r, e) { const s = StormJSON.instance.customTransformerRegistry.findApplicable(r); let t = r; return s && s.isApplicable(r) && (t = s.serialize(t)), (0, _stringify.stringify)(t); } static parseJson(r, e) { try { if (e?.expectComments === !1) return StormJSON.instance.parse(r); } catch {} const s = [], t = { allowTrailingComma: !0, ...e }, n = (0, _jsoncParser.parse)(r, s, t); if (s.length > 0 && s[0]) throw new Error((0, _parseError.formatParseError)(r, s[0])); return n; } static register(r, e, s, t) { StormJSON.instance.registerCustom({ isApplicable: t, serialize: e, deserialize: s }, r); } static registerClass(r, e) { StormJSON.instance.registerClass(r, { identifier: (0, _isString.isString)(e) ? e : e?.identifier || r.name, allowProps: e && (0, _isObject.isObject)(e) && e?.allowProps && Array.isArray(e.allowProps) ? e.allowProps : ["__typename"] }); } constructor() { super({ dedupe: !0 }); } } exports.StormJSON = StormJSON; StormJSON.instance.registerCustom({ isApplicable: i => _nodeBuffer.Buffer.isBuffer(i), serialize: i => i.toString("base64"), deserialize: i => _nodeBuffer.Buffer.from(i, "base64") }, "Bytes");