@stryke/json
Version:
A package containing JSON parsing/stringify utilities used by Storm Software.
72 lines (71 loc) • 2.28 kB
JavaScript
;
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");