Socket
Socket
Sign inDemoInstall

superjson

Package Overview
Dependencies
Maintainers
4
Versions
52
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

superjson - npm Package Compare versions

Comparing version 1.2.1 to 1.2.2

420

dist/superjson.cjs.development.js

@@ -5,62 +5,4 @@ 'use strict';

function _extends() {
_extends = Object.assign || function (target) {
for (var i = 1; i < arguments.length; i++) {
var source = arguments[i];
var lodash = require('lodash');
for (var key in source) {
if (Object.prototype.hasOwnProperty.call(source, key)) {
target[key] = source[key];
}
}
}
return target;
};
return _extends.apply(this, arguments);
}
function _unsupportedIterableToArray(o, minLen) {
if (!o) return;
if (typeof o === "string") return _arrayLikeToArray(o, minLen);
var n = Object.prototype.toString.call(o).slice(8, -1);
if (n === "Object" && o.constructor) n = o.constructor.name;
if (n === "Map" || n === "Set") return Array.from(o);
if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);
}
function _arrayLikeToArray(arr, len) {
if (len == null || len > arr.length) len = arr.length;
for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];
return arr2;
}
function _createForOfIteratorHelperLoose(o, allowArrayLike) {
var it;
if (typeof Symbol === "undefined" || o[Symbol.iterator] == null) {
if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") {
if (it) o = it;
var i = 0;
return function () {
if (i >= o.length) return {
done: true
};
return {
done: false,
value: o[i++]
};
};
}
throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
}
it = o[Symbol.iterator]();
return it.next.bind(it);
}
var getType = function getType(payload) {

@@ -134,7 +76,5 @@ return Object.prototype.toString.call(payload).slice(8, -1);

var getDeep = function getDeep(object, path) {
for (var _iterator = _createForOfIteratorHelperLoose(path), _step; !(_step = _iterator()).done;) {
var key = _step.value;
path.forEach(function (key) {
object = object[key];
}
});
return object;

@@ -233,23 +173,2 @@ };

var forEach = function forEach(iterator, func) {
while (true) {
var _iterator$next = iterator.next(),
done = _iterator$next.done,
value = _iterator$next.value;
if (done) {
return;
}
func(value);
}
};
var map = function map(iterator, _map) {
var result = [];
forEach(iterator, function (value) {
result.push(_map(value, result.length));
});
return result;
};
var DoubleIndexedKV = /*#__PURE__*/function () {

@@ -352,76 +271,129 @@ function DoubleIndexedKV() {

if (Array.isArray(value)) {
switch (value[0]) {
case 'map':
return ['number', 'string', 'bigint', 'boolean'].includes(value[1]);
return typeof value[1] === 'string';
}
case 'symbol':
case 'class':
return typeof value[1] === 'string';
}
return lodash.includes(ALL_TYPE_ANNOTATIONS, value);
};
function simpleTransformation(isApplicable, annotation, transform, untransform) {
return {
isApplicable: isApplicable,
annotation: annotation,
transform: transform,
untransform: untransform
};
}
var simpleRules = [/*#__PURE__*/simpleTransformation(isUndefined, 'undefined', function () {
return null;
}, function () {
return undefined;
}), /*#__PURE__*/simpleTransformation(isBigint, 'bigint', function (v) {
return v.toString();
}, BigInt), /*#__PURE__*/simpleTransformation(isDate, 'Date', function (v) {
return v.toISOString();
}, function (v) {
return new Date(v);
}), /*#__PURE__*/simpleTransformation(isRegExp, 'regexp', function (v) {
return '' + v;
}, function (regex) {
var body = regex.slice(1, regex.lastIndexOf('/'));
var flags = regex.slice(regex.lastIndexOf('/') + 1);
return new RegExp(body, flags);
}), /*#__PURE__*/simpleTransformation(isSet, 'set', function (v) {
return lodash.entries(v).map(function (_ref) {
var value = _ref[0];
return value;
});
}, function (v) {
return new Set(v);
}), /*#__PURE__*/simpleTransformation(isMap, 'map', function (v) {
return lodash.entries(v);
}, function (v) {
return new Map(v);
}), /*#__PURE__*/simpleTransformation(function (v) {
return isNaNValue(v) || isInfinite(v);
}, 'number', function (v) {
if (isNaNValue(v)) {
return 'NaN';
}
return ALL_TYPE_ANNOTATIONS.includes(value);
};
if (v > 0) {
return 'Infinity';
} else {
return '-Infinity';
}
}, Number)];
function compositeTransformation(isApplicable, annotation, transform, untransform) {
return {
isApplicable: isApplicable,
annotation: annotation,
transform: transform,
untransform: untransform
};
}
var symbolRule = /*#__PURE__*/compositeTransformation(function (s) {
if (isSymbol(s)) {
var isRegistered = !!SymbolRegistry.getIdentifier(s);
return isRegistered;
}
return false;
}, function (s) {
var identifier = SymbolRegistry.getIdentifier(s);
return ['symbol', identifier];
}, function (v) {
return v.description;
}, function (_, a) {
var value = SymbolRegistry.getValue(a[1]);
if (!value) {
throw new Error('Trying to deserialize unknown symbol');
}
return value;
});
var classRule = /*#__PURE__*/compositeTransformation(function (potentialClass) {
if (potentialClass === null || potentialClass === void 0 ? void 0 : potentialClass.constructor) {
var isRegistered = !!ClassRegistry.getIdentifier(potentialClass.constructor);
return isRegistered;
}
return false;
}, function (clazz) {
var identifier = ClassRegistry.getIdentifier(clazz.constructor);
return ['class', identifier];
}, function (v) {
return v;
}, function (v, a) {
var clazz = ClassRegistry.getValue(a[1]);
if (!clazz) {
throw new Error('Trying to deserialize unknown class');
}
return Object.assign(Object.create(clazz.prototype), v);
});
var compositeRules = [classRule, symbolRule];
var transformValue = function transformValue(value) {
if (isUndefined(value)) {
return {
value: undefined,
type: 'undefined'
};
} else if (isSymbol(value)) {
var identifier = SymbolRegistry.getIdentifier(value);
for (var i in simpleRules) {
var rule = simpleRules[i];
if (identifier) {
if (rule.isApplicable(value)) {
return {
value: value.description,
type: ['symbol', identifier]
value: rule.transform(value),
type: rule.annotation
};
}
} else if (isBigint(value)) {
return {
value: value.toString(),
type: 'bigint'
};
} else if (isDate(value)) {
return {
value: value.toISOString(),
type: 'Date'
};
} else if (isNaNValue(value)) {
return {
value: 'NaN',
type: 'number'
};
} else if (isInfinite(value)) {
return {
value: value > 0 ? 'Infinity' : '-Infinity',
type: 'number'
};
} else if (isSet(value)) {
return {
value: Array.from(value),
type: 'set'
};
} else if (isRegExp(value)) {
return {
value: '' + value,
type: 'regexp'
};
} else if (isMap(value)) {
var entries = map(value.entries(), function (pair) {
return pair;
});
return {
value: entries,
type: 'map'
};
}
if (value === null || value === void 0 ? void 0 : value.constructor) {
var _identifier = ClassRegistry.getIdentifier(value.constructor);
for (var _i in compositeRules) {
var _rule = compositeRules[_i];
if (_identifier) {
if (_rule.isApplicable(value)) {
return {
value: value,
type: ['class', _identifier]
value: _rule.transform(value),
type: _rule.annotation(value)
};

@@ -433,61 +405,46 @@ }

};
var simpleRulesByAnnotation = /*#__PURE__*/lodash.fromPairs( /*#__PURE__*/simpleRules.map(function (r) {
return [r.annotation, r];
}));
var untransformValue = function untransformValue(json, type) {
if (Array.isArray(type)) {
if (isArray(type)) {
switch (type[0]) {
case 'symbol':
return symbolRule.untransform(json, type);
case 'class':
{
var clazz = ClassRegistry.getValue(type[1]);
return classRule.untransform(json, type);
if (!clazz) {
throw new Error('Trying to deserialize unknown class');
}
default:
throw new Error('Unknown transformation: ' + type);
}
} else {
var transformation = simpleRulesByAnnotation[type];
return Object.assign(Object.create(clazz.prototype), json);
}
if (!transformation) {
throw new Error('Unknown transformation: ' + type);
}
case 'symbol':
{
var symbol = SymbolRegistry.getValue(type[1]);
return transformation.untransform(json);
}
};
if (!symbol) {
throw new Error('Trying to deserialize unknown symbol');
}
function _extends() {
_extends = Object.assign || function (target) {
for (var i = 1; i < arguments.length; i++) {
var source = arguments[i];
return symbol;
for (var key in source) {
if (Object.prototype.hasOwnProperty.call(source, key)) {
target[key] = source[key];
}
}
}
}
switch (type) {
case 'bigint':
return BigInt(json);
return target;
};
case 'undefined':
return undefined;
return _extends.apply(this, arguments);
}
case 'Date':
return new Date(json);
case 'number':
return Number(json);
case 'map':
return new Map(json);
case 'set':
return new Set(json);
case 'regexp':
{
var regex = json;
var body = regex.slice(1, regex.lastIndexOf('/'));
var flags = regex.slice(regex.lastIndexOf('/') + 1);
return new RegExp(body, flags);
}
default:
return json;
}
};
var escapeKey = function escapeKey(key) {

@@ -538,3 +495,3 @@ return key.replace(/\./g, '\\.');

} else if (v.length === 2) {
return valueChecker(v[0]) && Object.values(v[1]).every(function (v) {
return valueChecker(v[0]) && lodash.every(v[1], function (v) {
return isTree(v, valueChecker);

@@ -546,2 +503,13 @@ });

}
function isPrefixOf(potentialPrefix, of) {
if (potentialPrefix.length > of.length) {
return false;
}
return potentialPrefix.every(function (value, index) {
return value === of[index];
});
}
var PathTree;

@@ -594,9 +562,8 @@

_children = tree[1];
var availablePaths = Object.keys(_children);
var stringifiedPath = stringifyPath(path); // due to the constraints mentioned in the functions description,
var availablePaths = Object.keys(_children); // due to the constraints mentioned in the functions description,
// there may be prefixes of `path` already set, but no extensions of it.
// If there's such a prefix, we'll find it.
var prefix = availablePaths.find(function (candidate) {
return stringifiedPath.startsWith(candidate);
var prefix = lodash.find(availablePaths, function (candidate) {
return isPrefixOf(parsePath(candidate), path);
});

@@ -641,6 +608,4 @@

children = tree[1];
Object.entries(children).forEach(function (_ref2) {
var key = _ref2[0],
children = _ref2[1];
traverse(children, walker, [].concat(origin, parsePath(key)));
lodash.forEach(children, function (child, key) {
traverse(child, walker, [].concat(origin, parsePath(key)));
});

@@ -683,3 +648,3 @@ walker(_nodeValue2, origin);

if (isPlainObject(v)) {
return Object.values(v).every(function (v) {
return lodash.every(v, function (v) {
return isTree(v, valueChecker);

@@ -783,3 +748,3 @@ });

var tree = PathTree.create(null);
forEach(this.objectIdentities.values(), function (paths) {
this.objectIdentities.forEach(function (paths) {
if (paths.length <= 1) {

@@ -798,8 +763,5 @@ return;

var identities = PathTree.create(null);
for (var _iterator = _createForOfIteratorHelperLoose(identicalPaths), _step; !(_step = _iterator()).done;) {
var identicalPath = _step.value;
identicalPaths.forEach(function (identicalPath) {
identities = PathTree.appendPath(identities, identicalPath);
}
});
var minimizedIdentities = PathTree.collapseRoot(identities);

@@ -889,2 +851,3 @@

var object = getDeep(plain, path);
console.log(object);
PathTree.traversePaths(PathTree.expandRoot(identicalObjects), function (identicalObjectPath) {

@@ -905,14 +868,2 @@ plain = setDeep(plain, identicalObjectPath, function () {

var entries = function entries(object) {
if (isMap(object)) {
return object.entries();
}
if (isPlainObject(object)) {
return Object.entries(object).values();
}
throw new Error('Illegal Argument: ' + typeof object);
};
var plainer = function plainer(object, walker, path, alreadySeenObjects) {

@@ -941,3 +892,3 @@ if (path === void 0) {

if (alreadySeenObjects.includes(object)) {
if (lodash.includes(alreadySeenObjects, object)) {
return null;

@@ -950,4 +901,4 @@ }

if (isArray(object) || isSet(object)) {
return map(object.values(), function (value, index) {
if (isArray(object)) {
return lodash.values(object).map(function (value, index) {
return plainer(value, walker, [].concat(path, [index]), alreadySeenObjects);

@@ -957,6 +908,13 @@ });

if (isSet(object)) {
return lodash.entries(object).map(function (_ref, index) {
var value = _ref[0];
return plainer(value, walker, [].concat(path, [index]), alreadySeenObjects);
});
}
if (isMap(object)) {
return map(entries(object), function (_ref, index) {
var key = _ref[0],
value = _ref[1];
return lodash.entries(object).map(function (_ref2, index) {
var key = _ref2[0],
value = _ref2[1];
return [plainer(key, walker, [].concat(path, [index, 0]), alreadySeenObjects), plainer(value, walker, [].concat(path, [index, 1]), alreadySeenObjects)];

@@ -967,7 +925,5 @@ });

if (isPlainObject(object)) {
return Object.fromEntries(Object.entries(object).map(function (_ref2) {
var key = _ref2[0],
value = _ref2[1];
return [key, plainer(value, walker, [].concat(path, [key]), alreadySeenObjects)];
}));
return lodash.mapValues(object, function (value, key) {
return plainer(value, walker, [].concat(path, [key]), alreadySeenObjects);
});
}

@@ -977,3 +933,3 @@ };

function isSuperJSONResult(object) {
if (isUndefined(object.json)) {
if (!('json' in object)) {
return false;

@@ -980,0 +936,0 @@ }

@@ -1,2 +0,2 @@

"use strict";function e(){return(e=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e}).apply(this,arguments)}function t(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function n(e,n){var r;if("undefined"==typeof Symbol||null==e[Symbol.iterator]){if(Array.isArray(e)||(r=function(e,n){if(e){if("string"==typeof e)return t(e,void 0);var r=Object.prototype.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?t(e,void 0):void 0}}(e))||n&&e&&"number"==typeof e.length){r&&(e=r);var i=0;return function(){return i>=e.length?{done:!0}:{done:!1,value:e[i++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}return(r=e[Symbol.iterator]()).next.bind(r)}Object.defineProperty(exports,"__esModule",{value:!0});var r,i=function(e){return Object.prototype.toString.call(e).slice(8,-1)},u=function(e){return"Undefined"===i(e)},o=function(e){return"Null"===i(e)},a=function(e){return"Object"===i(e)&&e.constructor===Object&&Object.getPrototypeOf(e)===Object.prototype},c=function(e){return"Array"===i(e)},s=function(e){return"String"===i(e)},l=function(e){return"Map"===i(e)},f=function(e){return"Set"===i(e)},v=function(e){return"Symbol"===i(e)},g=function(e){return function(e){return"Boolean"===i(e)}(e)||o(e)||u(e)||function(e){return"Number"===i(e)&&!isNaN(e)}(e)||s(e)||v(e)},p=function(e,t){for(var n=e.keys();t>0;)n.next(),t--;return n.next().value},h=function(e,t,n){if(0===t.length)return n(e);for(var r=e,i=0;i<t.length-1;i++){var u=t[i];if(c(r))r=r[+u];else if(a(r))r=r[u];else if(f(r))r=p(r,+u);else if(l(r)){if(i===t.length-2)break;var o=0==+t[i+1]?"key":"value",s=p(r,+u);switch(o){case"key":r=s;break;case"value":r=r.get(s)}i++}}var v=t[t.length-1];if((c(r)||a(r))&&(r[v]=n(r[v])),f(r)){var g=p(r,+v),h=n(g);g!==h&&(r.delete(g),r.add(h))}if(l(r)){var y=p(r,+t[t.length-2]);switch(0==+v?"key":"value"){case"key":var d=n(y);r.set(d,r.get(y)),d!==y&&r.delete(y);break;case"value":r.set(y,n(r.get(y)))}}return e},y=function(e,t){for(;;){var n=e.next();if(n.done)return;t(n.value)}},d=function(e,t){var n=[];return y(e,(function(e){n.push(t(e,n.length))})),n},b=function(){function e(){this.keyToValue=new Map,this.valueToKey=new Map}var t=e.prototype;return t.set=function(e,t){this.keyToValue.set(e,t),this.valueToKey.set(t,e)},t.deleteByValue=function(e){var t=this;this.valueToKey.delete(e),this.keyToValue.forEach((function(n,r){e===n&&t.keyToValue.delete(r)}))},t.getByKey=function(e){return this.keyToValue.get(e)},t.getByValue=function(e){return this.valueToKey.get(e)},t.clear=function(){this.keyToValue.clear(),this.valueToKey.clear()},e}(),m=function(){function e(e){this.generateIdentifier=e,this.kv=new b}var t=e.prototype;return t.register=function(e,t){if(!this.kv.getByValue(e)){if(t||(t=this.generateIdentifier(e)),this.kv.getByKey(t))throw new Error("Ambiguous class, provide a unique identifier.");this.kv.set(t,e)}},t.unregister=function(e){this.kv.deleteByValue(e)},t.clear=function(){this.kv.clear()},t.getIdentifier=function(e){return this.kv.getByValue(e)},t.getValue=function(e){return this.kv.getByKey(e)},e}(),w=new m((function(e){return e.name})),j=new m((function(e){var t;return null!==(t=e.description)&&void 0!==t?t:""})),I=["undefined","number","bigint"].concat(["map","regexp","set","Date"]),O=function(e){if(Array.isArray(e))switch(e[0]){case"map":return["number","string","bigint","boolean"].includes(e[1]);case"symbol":case"class":return"string"==typeof e[1]}return I.includes(e)},k=function(e){return e.replace(/\./g,"\\.")},S=function(e){return e.map(String).map(k).join(".")},A=function(e){for(var t=[],n="",r=0;r<e.length;r++){var i=e.charAt(r);"\\"===i&&"."===e.charAt(r+1)?(n+=".",r++):"."===i?(t.push(n),n=""):n+=i}return t.push(n),t};function x(e,t){return!!c(e)&&(1===e.length?t(e[0]):2===e.length&&t(e[0])&&Object.values(e[1]).every((function(e){return x(e,t)})))}!function(t){function n(t,r,i){var o;if(0===r.length)return 1===t.length?[i]:[i,t[1]];if(1===t.length)return[t[0],(o={},o[S(r)]=[i],o)];var a,c=t[0],s=t[1],l=Object.keys(s),f=S(r),v=l.find((function(e){return f.startsWith(e)}));if(u(v))return[c,e({},s,(a={},a[S(r)]=[i],a))];var g,p=r.slice(A(v).length);return[c,e({},s,(g={},g[v]=n(s[v],p,i),g))]}function r(e,t,n){if(void 0===n&&(n=[]),1===e.length)t(e[0],n);else{var i=e[0];Object.entries(e[1]).forEach((function(e){r(e[1],t,[].concat(n,A(e[0])))})),t(i,n)}}function i(e,t){r(e,(function(e,n){if(o(e)){if(0===n.length)return;throw new Error("Illegal State")}t(e,n)}))}t.create=function(e){return[e]},t.get=function e(t,n){if(0===n.length)return[t[0],!0];if(1===t.length)return[null,!1];var r=n[0],i=n.slice(1);return e(t[1][r],i)},t.append=n,t.appendPath=function(e,t){return n(e,t.slice(0,t.length-1),t[t.length-1])},t.traverse=r,t.traverseWhileIgnoringNullRoot=i,t.traversePaths=function(e,t){i(e,(function(e,n){return t([].concat(n,[e]))}))},t.isMinimizedTree=function(e,t){return!!u(e)||(a(e)?Object.values(e).every((function(e){return x(e,t)})):x(e,t))},t.collapseRoot=function(e){return o(e[0])?1===e.length?void 0:e[1]:e},t.expandRoot=function(e){return c(e)?e:u(e)?[null]:[null,e]}}(r||(r={}));var N=function(){function e(){this.tree=r.create(null)}var t=e.prototype;return t.add=function(e,t){this.tree=r.append(this.tree,e.map(String),t)},t.create=function(){return r.collapseRoot(this.tree)},e}(),E=function(){function e(){this.objectIdentities=new Map}var t=e.prototype;return t.register=function(e,t){var n,r=null!==(n=this.objectIdentities.get(e))&&void 0!==n?n:[];r.push(t),this.objectIdentities.set(e,r)},t.create=function(){var e=r.create(null);return y(this.objectIdentities.values(),(function(t){if(!(t.length<=1)){for(var i,u=t.map((function(e){return e.map(String)})).sort((function(e,t){return e.length-t.length})),o=u[0],a=u.slice(1),c=r.create(null),s=n(a);!(i=s()).done;)c=r.appendPath(c,i.value);var l=r.collapseRoot(c);if(!l)throw new Error("Illegal State");e=r.append(e,o,l)}})),r.collapseRoot(e)},e}(),T=function(){function e(){this.valueAnnotations=new N,this.objectIdentities=new E}return e.prototype.create=function(){var e={},t=this.valueAnnotations.create();t&&(e.values=t);var n=this.objectIdentities.create();return n&&(e.referentialEqualities=n),e},e}(),V=function(e){var t,n,r,o,s=(t=new T,n=t.valueAnnotations,r=t.objectIdentities,{getAnnotations:function(){return t.create()},annotator:function(e){var t=e.path,o=e.node;g(o)||r.register(o,t);var a=function(e){if(u(e))return{value:void 0,type:"undefined"};if(v(e)){var t=j.getIdentifier(e);if(t)return{value:e.description,type:["symbol",t]}}else{if("BigInt"===i(e))return{value:e.toString(),type:"bigint"};if(function(e){return"Date"===i(e)&&!isNaN(e)}(e))return{value:e.toISOString(),type:"Date"};if(function(e){return"Number"===i(e)&&isNaN(e)}(e))return{value:"NaN",type:"number"};if(function(e){return Infinity===e||-Infinity===e}(e))return{value:e>0?"Infinity":"-Infinity",type:"number"};if(f(e))return{value:Array.from(e),type:"set"};if(function(e){return"RegExp"===i(e)}(e))return{value:""+e,type:"regexp"};if(l(e))return{value:d(e.entries(),(function(e){return e})),type:"map"}}if(null==e?void 0:e.constructor){var n=w.getIdentifier(e.constructor);if(n)return{value:e,type:["class",n]}}}(o);return a?(n.add(t,a.type),a.value):o}}),p=s.getAnnotations,h=function e(t,n,r,i){return void 0===r&&(r=[]),void 0===i&&(i=[]),function(e){return a(e)||c(e)||l(e)||f(e)}(t)?(n({isLeaf:!1,path:r,node:t}),i.includes(t)?null:(g(t)||(i=[].concat(i,[t])),c(t)||f(t)?d(t.values(),(function(t,u){return e(t,n,[].concat(r,[u]),i)})):l(t)?d(function(e){if(l(e))return e.entries();if(a(e))return Object.entries(e).values();throw new Error("Illegal Argument: "+typeof e)}(t),(function(t,u){var o=t[1];return[e(t[0],n,[].concat(r,[u,0]),i),e(o,n,[].concat(r,[u,1]),i)]})):a(t)?Object.fromEntries(Object.entries(t).map((function(t){var u=t[0];return[u,e(t[1],n,[].concat(r,[u]),i)]}))):void 0)):n({isLeaf:!0,node:t,path:r})}(e,s.annotator),y=p();return{json:h,meta:(o=y,a(o)&&0===Object.keys(o).length?void 0:y)}},R=function(e){if(u((t=e).json)||!u(t.meta)&&!function(e){try{return!(e.values&&!r.isMinimizedTree(e.values,O)||e.referentialEqualities&&!r.isMinimizedTree(e.referentialEqualities,(function(e){return r.isMinimizedTree(e,s)})))}catch(e){return!1}}(t.meta))throw new Error("Not a valid SuperJSON payload.");var t,i,o,a=e.meta,c=e.json;return a?(i=c,(o=a).values&&r.traverseWhileIgnoringNullRoot(r.expandRoot(o.values),(function(e,t){i=h(i,t,(function(t){return function(e,t){if(Array.isArray(t))switch(t[0]){case"class":var n=w.getValue(t[1]);if(!n)throw new Error("Trying to deserialize unknown class");return Object.assign(Object.create(n.prototype),e);case"symbol":var r=j.getValue(t[1]);if(!r)throw new Error("Trying to deserialize unknown symbol");return r}switch(t){case"bigint":return BigInt(e);case"undefined":return;case"Date":return new Date(e);case"number":return Number(e);case"map":return new Map(e);case"set":return new Set(e);case"regexp":var i=e,u=i.slice(1,i.lastIndexOf("/")),o=i.slice(i.lastIndexOf("/")+1);return new RegExp(u,o);default:return e}}(t,e)}))})),o.referentialEqualities&&r.traverseWhileIgnoringNullRoot(r.expandRoot(o.referentialEqualities),(function(e,t){var u=function(e,t){for(var r,i=n(t);!(r=i()).done;)e=e[r.value];return e}(i,t);r.traversePaths(r.expandRoot(e),(function(e){i=h(i,e,(function(){return u}))}))})),i):c},B=function(e){return R(JSON.parse(e))};exports.default={stringify:function(e){return JSON.stringify(V(e))},parse:B,serialize:V,deserialize:R,registerClass:function(e,t){return w.register(e,t)},unregisterClass:function(e){return w.unregister(e)},registerSymbol:function(e,t){return j.register(e,t)},unregisterSymbol:function(e){return j.unregister(e)}},exports.deserialize=R,exports.parse=B,exports.serialize=V;
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var n=require("lodash"),t=function(n){return Object.prototype.toString.call(n).slice(8,-1)},e=function(n){return"Undefined"===t(n)},r=function(n){return"Null"===t(n)},i=function(n){return"Object"===t(n)&&n.constructor===Object&&Object.getPrototypeOf(n)===Object.prototype},u=function(n){return"Array"===t(n)},o=function(n){return"String"===t(n)},a=function(n){return"RegExp"===t(n)},c=function(n){return"Map"===t(n)},f=function(n){return"Set"===t(n)},s=function(n){return"Symbol"===t(n)},l=function(n){return"Date"===t(n)&&!isNaN(n)},v=function(n){return"Number"===t(n)&&isNaN(n)},g=function(n){return function(n){return"Boolean"===t(n)}(n)||r(n)||e(n)||function(n){return"Number"===t(n)&&!isNaN(n)}(n)||o(n)||s(n)},p=function(n){return"BigInt"===t(n)},h=function(n,t){for(var e=n.keys();t>0;)e.next(),t--;return e.next().value},d=function(n,t,e){if(0===t.length)return e(n);for(var r=n,o=0;o<t.length-1;o++){var a=t[o];if(u(r))r=r[+a];else if(i(r))r=r[a];else if(f(r))r=h(r,+a);else if(c(r)){if(o===t.length-2)break;var s=0==+t[o+1]?"key":"value",l=h(r,+a);switch(s){case"key":r=l;break;case"value":r=r.get(l)}o++}}var v=t[t.length-1];if((u(r)||i(r))&&(r[v]=e(r[v])),f(r)){var g=h(r,+v),p=e(g);g!==p&&(r.delete(g),r.add(p))}if(c(r)){var d=h(r,+t[t.length-2]);switch(0==+v?"key":"value"){case"key":var y=e(d);r.set(y,r.get(d)),y!==d&&r.delete(d);break;case"value":r.set(d,e(r.get(d)))}}return n},y=function(){function n(){this.keyToValue=new Map,this.valueToKey=new Map}var t=n.prototype;return t.set=function(n,t){this.keyToValue.set(n,t),this.valueToKey.set(t,n)},t.deleteByValue=function(n){var t=this;this.valueToKey.delete(n),this.keyToValue.forEach((function(e,r){n===e&&t.keyToValue.delete(r)}))},t.getByKey=function(n){return this.keyToValue.get(n)},t.getByValue=function(n){return this.valueToKey.get(n)},t.clear=function(){this.keyToValue.clear(),this.valueToKey.clear()},n}(),m=function(){function n(n){this.generateIdentifier=n,this.kv=new y}var t=n.prototype;return t.register=function(n,t){if(!this.kv.getByValue(n)){if(t||(t=this.generateIdentifier(n)),this.kv.getByKey(t))throw new Error("Ambiguous class, provide a unique identifier.");this.kv.set(t,n)}},t.unregister=function(n){this.kv.deleteByValue(n)},t.clear=function(){this.kv.clear()},t.getIdentifier=function(n){return this.kv.getByValue(n)},t.getValue=function(n){return this.kv.getByKey(n)},n}(),b=new m((function(n){return n.name})),w=new m((function(n){var t;return null!==(t=n.description)&&void 0!==t?t:""})),k=["undefined","number","bigint"].concat(["map","regexp","set","Date"]),I=function(t){return Array.isArray(t)?"string"==typeof t[1]:n.includes(k,t)};function j(n,t,e,r){return{isApplicable:n,annotation:t,transform:e,untransform:r}}var E=[j(e,"undefined",(function(){return null}),(function(){})),j(p,"bigint",(function(n){return n.toString()}),BigInt),j(l,"Date",(function(n){return n.toISOString()}),(function(n){return new Date(n)})),j(a,"regexp",(function(n){return""+n}),(function(n){var t=n.slice(1,n.lastIndexOf("/")),e=n.slice(n.lastIndexOf("/")+1);return new RegExp(t,e)})),j(f,"set",(function(t){return n.entries(t).map((function(n){return n[0]}))}),(function(n){return new Set(n)})),j(c,"map",(function(t){return n.entries(t)}),(function(n){return new Map(n)})),j((function(n){return v(n)||Infinity===(t=n)||-Infinity===t;var t}),"number",(function(n){return v(n)?"NaN":n>0?"Infinity":"-Infinity"}),Number)];function O(n,t,e,r){return{isApplicable:n,annotation:t,transform:e,untransform:r}}var N=O((function(n){return!!s(n)&&!!w.getIdentifier(n)}),(function(n){return["symbol",w.getIdentifier(n)]}),(function(n){return n.description}),(function(n,t){var e=w.getValue(t[1]);if(!e)throw new Error("Trying to deserialize unknown symbol");return e})),S=O((function(n){return!!(null==n?void 0:n.constructor)&&!!b.getIdentifier(n.constructor)}),(function(n){return["class",b.getIdentifier(n.constructor)]}),(function(n){return n}),(function(n,t){var e=b.getValue(t[1]);if(!e)throw new Error("Trying to deserialize unknown class");return Object.assign(Object.create(e.prototype),n)})),x=[S,N],T=n.fromPairs(E.map((function(n){return[n.annotation,n]})));function A(){return(A=Object.assign||function(n){for(var t=1;t<arguments.length;t++){var e=arguments[t];for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(n[r]=e[r])}return n}).apply(this,arguments)}var V,R=function(n){return n.replace(/\./g,"\\.")},B=function(n){return n.map(String).map(R).join(".")},z=function(n){for(var t=[],e="",r=0;r<n.length;r++){var i=n.charAt(r);"\\"===i&&"."===n.charAt(r+1)?(e+=".",r++):"."===i?(t.push(e),e=""):e+=i}return t.push(e),t};function M(t,e){return!!u(t)&&(1===t.length?e(t[0]):2===t.length&&e(t[0])&&n.every(t[1],(function(n){return M(n,e)})))}!function(t){function o(t,r,i){var u;if(0===r.length)return 1===t.length?[i]:[i,t[1]];if(1===t.length)return[t[0],(u={},u[B(r)]=[i],u)];var a,c=t[0],f=t[1],s=Object.keys(f),l=n.find(s,(function(n){return!((t=z(n)).length>(e=r).length)&&t.every((function(n,t){return n===e[t]}));var t,e}));if(e(l))return[c,A({},f,(a={},a[B(r)]=[i],a))];var v,g=r.slice(z(l).length);return[c,A({},f,(v={},v[l]=o(f[l],g,i),v))]}function a(t,e,r){if(void 0===r&&(r=[]),1===t.length)e(t[0],r);else{var i=t[0];n.forEach(t[1],(function(n,t){a(n,e,[].concat(r,z(t)))})),e(i,r)}}function c(n,t){a(n,(function(n,e){if(r(n)){if(0===e.length)return;throw new Error("Illegal State")}t(n,e)}))}t.create=function(n){return[n]},t.get=function n(t,e){if(0===e.length)return[t[0],!0];if(1===t.length)return[null,!1];var r=e[0],i=e.slice(1);return n(t[1][r],i)},t.append=o,t.appendPath=function(n,t){return o(n,t.slice(0,t.length-1),t[t.length-1])},t.traverse=a,t.traverseWhileIgnoringNullRoot=c,t.traversePaths=function(n,t){c(n,(function(n,e){return t([].concat(e,[n]))}))},t.isMinimizedTree=function(t,r){return!!e(t)||(i(t)?n.every(t,(function(n){return M(n,r)})):M(t,r))},t.collapseRoot=function(n){return r(n[0])?1===n.length?void 0:n[1]:n},t.expandRoot=function(n){return u(n)?n:e(n)?[null]:[null,n]}}(V||(V={}));var K=function(){function n(){this.tree=V.create(null)}var t=n.prototype;return t.add=function(n,t){this.tree=V.append(this.tree,n.map(String),t)},t.create=function(){return V.collapseRoot(this.tree)},n}(),P=function(){function n(){this.objectIdentities=new Map}var t=n.prototype;return t.register=function(n,t){var e,r=null!==(e=this.objectIdentities.get(n))&&void 0!==e?e:[];r.push(t),this.objectIdentities.set(n,r)},t.create=function(){var n=V.create(null);return this.objectIdentities.forEach((function(t){if(!(t.length<=1)){var e=t.map((function(n){return n.map(String)})).sort((function(n,t){return n.length-t.length})),r=e[0],i=e.slice(1),u=V.create(null);i.forEach((function(n){u=V.appendPath(u,n)}));var o=V.collapseRoot(u);if(!o)throw new Error("Illegal State");n=V.append(n,r,o)}})),V.collapseRoot(n)},n}(),q=function(){function n(){this.valueAnnotations=new K,this.objectIdentities=new P}return n.prototype.create=function(){var n={},t=this.valueAnnotations.create();t&&(n.values=t);var e=this.objectIdentities.create();return e&&(n.referentialEqualities=e),n},n}(),D=function(t){var e,r,o,a,s=(r=new q,o=r.valueAnnotations,a=r.objectIdentities,{getAnnotations:function(){return r.create()},annotator:function(n){var t=n.path,e=n.node;g(e)||a.register(e,t);var r=function(n){for(var t in E){var e=E[t];if(e.isApplicable(n))return{value:e.transform(n),type:e.annotation}}for(var r in x){var i=x[r];if(i.isApplicable(n))return{value:i.transform(n),type:i.annotation(n)}}}(e);return r?(o.add(t,r.type),r.value):e}}),l=s.getAnnotations,v=function t(e,r,o,a){return void 0===o&&(o=[]),void 0===a&&(a=[]),function(n){return i(n)||u(n)||c(n)||f(n)}(e)?(r({isLeaf:!1,path:o,node:e}),n.includes(a,e)?null:(g(e)||(a=[].concat(a,[e])),u(e)?n.values(e).map((function(n,e){return t(n,r,[].concat(o,[e]),a)})):f(e)?n.entries(e).map((function(n,e){return t(n[0],r,[].concat(o,[e]),a)})):c(e)?n.entries(e).map((function(n,e){var i=n[1];return[t(n[0],r,[].concat(o,[e,0]),a),t(i,r,[].concat(o,[e,1]),a)]})):i(e)?n.mapValues(e,(function(n,e){return t(n,r,[].concat(o,[e]),a)})):void 0)):r({isLeaf:!0,node:e,path:o})}(t,s.annotator),p=l();return{json:v,meta:(e=p,i(e)&&0===Object.keys(e).length?void 0:p)}},J=function(n){if(!("json"in(t=n))||!e(t.meta)&&!function(n){try{return!(n.values&&!V.isMinimizedTree(n.values,I)||n.referentialEqualities&&!V.isMinimizedTree(n.referentialEqualities,(function(n){return V.isMinimizedTree(n,o)})))}catch(n){return!1}}(t.meta))throw new Error("Not a valid SuperJSON payload.");var t,r,i,a=n.meta,c=n.json;return a?(r=c,(i=a).values&&V.traverseWhileIgnoringNullRoot(V.expandRoot(i.values),(function(n,t){r=d(r,t,(function(t){return function(n,t){if(!u(t)){var e=T[t];if(!e)throw new Error("Unknown transformation: "+t);return e.untransform(n)}switch(t[0]){case"symbol":return N.untransform(n,t);case"class":return S.untransform(n,t);default:throw new Error("Unknown transformation: "+t)}}(t,n)}))})),i.referentialEqualities&&V.traverseWhileIgnoringNullRoot(V.expandRoot(i.referentialEqualities),(function(n,t){var e=function(n,t){return t.forEach((function(t){n=n[t]})),n}(r,t);console.log(e),V.traversePaths(V.expandRoot(n),(function(n){r=d(r,n,(function(){return e}))}))})),r):c},U=function(n){return J(JSON.parse(n))};exports.default={stringify:function(n){return JSON.stringify(D(n))},parse:U,serialize:D,deserialize:J,registerClass:function(n,t){return b.register(n,t)},unregisterClass:function(n){return b.unregister(n)},registerSymbol:function(n,t){return w.register(n,t)},unregisterSymbol:function(n){return w.unregister(n)}},exports.deserialize=J,exports.parse=U,exports.serialize=D;
//# sourceMappingURL=superjson.cjs.production.min.js.map

@@ -1,61 +0,3 @@

function _extends() {
_extends = Object.assign || function (target) {
for (var i = 1; i < arguments.length; i++) {
var source = arguments[i];
import { includes, entries, fromPairs, find, forEach, every, values, mapValues } from 'lodash-es';
for (var key in source) {
if (Object.prototype.hasOwnProperty.call(source, key)) {
target[key] = source[key];
}
}
}
return target;
};
return _extends.apply(this, arguments);
}
function _unsupportedIterableToArray(o, minLen) {
if (!o) return;
if (typeof o === "string") return _arrayLikeToArray(o, minLen);
var n = Object.prototype.toString.call(o).slice(8, -1);
if (n === "Object" && o.constructor) n = o.constructor.name;
if (n === "Map" || n === "Set") return Array.from(o);
if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);
}
function _arrayLikeToArray(arr, len) {
if (len == null || len > arr.length) len = arr.length;
for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];
return arr2;
}
function _createForOfIteratorHelperLoose(o, allowArrayLike) {
var it;
if (typeof Symbol === "undefined" || o[Symbol.iterator] == null) {
if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") {
if (it) o = it;
var i = 0;
return function () {
if (i >= o.length) return {
done: true
};
return {
done: false,
value: o[i++]
};
};
}
throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
}
it = o[Symbol.iterator]();
return it.next.bind(it);
}
var getType = function getType(payload) {

@@ -129,7 +71,5 @@ return Object.prototype.toString.call(payload).slice(8, -1);

var getDeep = function getDeep(object, path) {
for (var _iterator = _createForOfIteratorHelperLoose(path), _step; !(_step = _iterator()).done;) {
var key = _step.value;
path.forEach(function (key) {
object = object[key];
}
});
return object;

@@ -228,23 +168,2 @@ };

var forEach = function forEach(iterator, func) {
while (true) {
var _iterator$next = iterator.next(),
done = _iterator$next.done,
value = _iterator$next.value;
if (done) {
return;
}
func(value);
}
};
var map = function map(iterator, _map) {
var result = [];
forEach(iterator, function (value) {
result.push(_map(value, result.length));
});
return result;
};
var DoubleIndexedKV = /*#__PURE__*/function () {

@@ -347,76 +266,129 @@ function DoubleIndexedKV() {

if (Array.isArray(value)) {
switch (value[0]) {
case 'map':
return ['number', 'string', 'bigint', 'boolean'].includes(value[1]);
return typeof value[1] === 'string';
}
case 'symbol':
case 'class':
return typeof value[1] === 'string';
}
return includes(ALL_TYPE_ANNOTATIONS, value);
};
function simpleTransformation(isApplicable, annotation, transform, untransform) {
return {
isApplicable: isApplicable,
annotation: annotation,
transform: transform,
untransform: untransform
};
}
var simpleRules = [/*#__PURE__*/simpleTransformation(isUndefined, 'undefined', function () {
return null;
}, function () {
return undefined;
}), /*#__PURE__*/simpleTransformation(isBigint, 'bigint', function (v) {
return v.toString();
}, BigInt), /*#__PURE__*/simpleTransformation(isDate, 'Date', function (v) {
return v.toISOString();
}, function (v) {
return new Date(v);
}), /*#__PURE__*/simpleTransformation(isRegExp, 'regexp', function (v) {
return '' + v;
}, function (regex) {
var body = regex.slice(1, regex.lastIndexOf('/'));
var flags = regex.slice(regex.lastIndexOf('/') + 1);
return new RegExp(body, flags);
}), /*#__PURE__*/simpleTransformation(isSet, 'set', function (v) {
return entries(v).map(function (_ref) {
var value = _ref[0];
return value;
});
}, function (v) {
return new Set(v);
}), /*#__PURE__*/simpleTransformation(isMap, 'map', function (v) {
return entries(v);
}, function (v) {
return new Map(v);
}), /*#__PURE__*/simpleTransformation(function (v) {
return isNaNValue(v) || isInfinite(v);
}, 'number', function (v) {
if (isNaNValue(v)) {
return 'NaN';
}
return ALL_TYPE_ANNOTATIONS.includes(value);
};
if (v > 0) {
return 'Infinity';
} else {
return '-Infinity';
}
}, Number)];
function compositeTransformation(isApplicable, annotation, transform, untransform) {
return {
isApplicable: isApplicable,
annotation: annotation,
transform: transform,
untransform: untransform
};
}
var symbolRule = /*#__PURE__*/compositeTransformation(function (s) {
if (isSymbol(s)) {
var isRegistered = !!SymbolRegistry.getIdentifier(s);
return isRegistered;
}
return false;
}, function (s) {
var identifier = SymbolRegistry.getIdentifier(s);
return ['symbol', identifier];
}, function (v) {
return v.description;
}, function (_, a) {
var value = SymbolRegistry.getValue(a[1]);
if (!value) {
throw new Error('Trying to deserialize unknown symbol');
}
return value;
});
var classRule = /*#__PURE__*/compositeTransformation(function (potentialClass) {
if (potentialClass === null || potentialClass === void 0 ? void 0 : potentialClass.constructor) {
var isRegistered = !!ClassRegistry.getIdentifier(potentialClass.constructor);
return isRegistered;
}
return false;
}, function (clazz) {
var identifier = ClassRegistry.getIdentifier(clazz.constructor);
return ['class', identifier];
}, function (v) {
return v;
}, function (v, a) {
var clazz = ClassRegistry.getValue(a[1]);
if (!clazz) {
throw new Error('Trying to deserialize unknown class');
}
return Object.assign(Object.create(clazz.prototype), v);
});
var compositeRules = [classRule, symbolRule];
var transformValue = function transformValue(value) {
if (isUndefined(value)) {
return {
value: undefined,
type: 'undefined'
};
} else if (isSymbol(value)) {
var identifier = SymbolRegistry.getIdentifier(value);
for (var i in simpleRules) {
var rule = simpleRules[i];
if (identifier) {
if (rule.isApplicable(value)) {
return {
value: value.description,
type: ['symbol', identifier]
value: rule.transform(value),
type: rule.annotation
};
}
} else if (isBigint(value)) {
return {
value: value.toString(),
type: 'bigint'
};
} else if (isDate(value)) {
return {
value: value.toISOString(),
type: 'Date'
};
} else if (isNaNValue(value)) {
return {
value: 'NaN',
type: 'number'
};
} else if (isInfinite(value)) {
return {
value: value > 0 ? 'Infinity' : '-Infinity',
type: 'number'
};
} else if (isSet(value)) {
return {
value: Array.from(value),
type: 'set'
};
} else if (isRegExp(value)) {
return {
value: '' + value,
type: 'regexp'
};
} else if (isMap(value)) {
var entries = map(value.entries(), function (pair) {
return pair;
});
return {
value: entries,
type: 'map'
};
}
if (value === null || value === void 0 ? void 0 : value.constructor) {
var _identifier = ClassRegistry.getIdentifier(value.constructor);
for (var _i in compositeRules) {
var _rule = compositeRules[_i];
if (_identifier) {
if (_rule.isApplicable(value)) {
return {
value: value,
type: ['class', _identifier]
value: _rule.transform(value),
type: _rule.annotation(value)
};

@@ -428,61 +400,46 @@ }

};
var simpleRulesByAnnotation = /*#__PURE__*/fromPairs( /*#__PURE__*/simpleRules.map(function (r) {
return [r.annotation, r];
}));
var untransformValue = function untransformValue(json, type) {
if (Array.isArray(type)) {
if (isArray(type)) {
switch (type[0]) {
case 'symbol':
return symbolRule.untransform(json, type);
case 'class':
{
var clazz = ClassRegistry.getValue(type[1]);
return classRule.untransform(json, type);
if (!clazz) {
throw new Error('Trying to deserialize unknown class');
}
default:
throw new Error('Unknown transformation: ' + type);
}
} else {
var transformation = simpleRulesByAnnotation[type];
return Object.assign(Object.create(clazz.prototype), json);
}
if (!transformation) {
throw new Error('Unknown transformation: ' + type);
}
case 'symbol':
{
var symbol = SymbolRegistry.getValue(type[1]);
return transformation.untransform(json);
}
};
if (!symbol) {
throw new Error('Trying to deserialize unknown symbol');
}
function _extends() {
_extends = Object.assign || function (target) {
for (var i = 1; i < arguments.length; i++) {
var source = arguments[i];
return symbol;
for (var key in source) {
if (Object.prototype.hasOwnProperty.call(source, key)) {
target[key] = source[key];
}
}
}
}
switch (type) {
case 'bigint':
return BigInt(json);
return target;
};
case 'undefined':
return undefined;
return _extends.apply(this, arguments);
}
case 'Date':
return new Date(json);
case 'number':
return Number(json);
case 'map':
return new Map(json);
case 'set':
return new Set(json);
case 'regexp':
{
var regex = json;
var body = regex.slice(1, regex.lastIndexOf('/'));
var flags = regex.slice(regex.lastIndexOf('/') + 1);
return new RegExp(body, flags);
}
default:
return json;
}
};
var escapeKey = function escapeKey(key) {

@@ -533,3 +490,3 @@ return key.replace(/\./g, '\\.');

} else if (v.length === 2) {
return valueChecker(v[0]) && Object.values(v[1]).every(function (v) {
return valueChecker(v[0]) && every(v[1], function (v) {
return isTree(v, valueChecker);

@@ -541,2 +498,13 @@ });

}
function isPrefixOf(potentialPrefix, of) {
if (potentialPrefix.length > of.length) {
return false;
}
return potentialPrefix.every(function (value, index) {
return value === of[index];
});
}
var PathTree;

@@ -589,9 +557,8 @@

_children = tree[1];
var availablePaths = Object.keys(_children);
var stringifiedPath = stringifyPath(path); // due to the constraints mentioned in the functions description,
var availablePaths = Object.keys(_children); // due to the constraints mentioned in the functions description,
// there may be prefixes of `path` already set, but no extensions of it.
// If there's such a prefix, we'll find it.
var prefix = availablePaths.find(function (candidate) {
return stringifiedPath.startsWith(candidate);
var prefix = find(availablePaths, function (candidate) {
return isPrefixOf(parsePath(candidate), path);
});

@@ -636,6 +603,4 @@

children = tree[1];
Object.entries(children).forEach(function (_ref2) {
var key = _ref2[0],
children = _ref2[1];
traverse(children, walker, [].concat(origin, parsePath(key)));
forEach(children, function (child, key) {
traverse(child, walker, [].concat(origin, parsePath(key)));
});

@@ -678,3 +643,3 @@ walker(_nodeValue2, origin);

if (isPlainObject(v)) {
return Object.values(v).every(function (v) {
return every(v, function (v) {
return isTree(v, valueChecker);

@@ -778,3 +743,3 @@ });

var tree = PathTree.create(null);
forEach(this.objectIdentities.values(), function (paths) {
this.objectIdentities.forEach(function (paths) {
if (paths.length <= 1) {

@@ -793,8 +758,5 @@ return;

var identities = PathTree.create(null);
for (var _iterator = _createForOfIteratorHelperLoose(identicalPaths), _step; !(_step = _iterator()).done;) {
var identicalPath = _step.value;
identicalPaths.forEach(function (identicalPath) {
identities = PathTree.appendPath(identities, identicalPath);
}
});
var minimizedIdentities = PathTree.collapseRoot(identities);

@@ -884,2 +846,3 @@

var object = getDeep(plain, path);
console.log(object);
PathTree.traversePaths(PathTree.expandRoot(identicalObjects), function (identicalObjectPath) {

@@ -900,14 +863,2 @@ plain = setDeep(plain, identicalObjectPath, function () {

var entries = function entries(object) {
if (isMap(object)) {
return object.entries();
}
if (isPlainObject(object)) {
return Object.entries(object).values();
}
throw new Error('Illegal Argument: ' + typeof object);
};
var plainer = function plainer(object, walker, path, alreadySeenObjects) {

@@ -936,3 +887,3 @@ if (path === void 0) {

if (alreadySeenObjects.includes(object)) {
if (includes(alreadySeenObjects, object)) {
return null;

@@ -945,4 +896,4 @@ }

if (isArray(object) || isSet(object)) {
return map(object.values(), function (value, index) {
if (isArray(object)) {
return values(object).map(function (value, index) {
return plainer(value, walker, [].concat(path, [index]), alreadySeenObjects);

@@ -952,6 +903,13 @@ });

if (isSet(object)) {
return entries(object).map(function (_ref, index) {
var value = _ref[0];
return plainer(value, walker, [].concat(path, [index]), alreadySeenObjects);
});
}
if (isMap(object)) {
return map(entries(object), function (_ref, index) {
var key = _ref[0],
value = _ref[1];
return entries(object).map(function (_ref2, index) {
var key = _ref2[0],
value = _ref2[1];
return [plainer(key, walker, [].concat(path, [index, 0]), alreadySeenObjects), plainer(value, walker, [].concat(path, [index, 1]), alreadySeenObjects)];

@@ -962,7 +920,5 @@ });

if (isPlainObject(object)) {
return Object.fromEntries(Object.entries(object).map(function (_ref2) {
var key = _ref2[0],
value = _ref2[1];
return [key, plainer(value, walker, [].concat(path, [key]), alreadySeenObjects)];
}));
return mapValues(object, function (value, key) {
return plainer(value, walker, [].concat(path, [key]), alreadySeenObjects);
});
}

@@ -972,3 +928,3 @@ };

function isSuperJSONResult(object) {
if (isUndefined(object.json)) {
if (!('json' in object)) {
return false;

@@ -975,0 +931,0 @@ }

@@ -5,4 +5,5 @@ export declare type PrimitiveTypeAnnotation = 'number' | 'undefined' | 'bigint';

declare type SymbolTypeAnnotation = ['symbol', string];
declare type ContainerTypeAnnotation = 'map' | 'set' | ClassTypeAnnotation | SymbolTypeAnnotation;
export declare type TypeAnnotation = LeafTypeAnnotation | ContainerTypeAnnotation;
declare type SimpleTypeAnnotation = LeafTypeAnnotation | 'map' | 'set';
declare type CompositeTypeAnnotation = ClassTypeAnnotation | SymbolTypeAnnotation;
export declare type TypeAnnotation = SimpleTypeAnnotation | CompositeTypeAnnotation;
export declare const isPrimitiveTypeAnnotation: (value: any) => value is PrimitiveTypeAnnotation;

@@ -9,0 +10,0 @@ export declare const isTypeAnnotation: (value: any) => value is TypeAnnotation;

{
"version": "1.2.1",
"version": "1.2.2",
"license": "MIT",

@@ -38,3 +38,19 @@ "main": "dist/index.js",

"name": "superjson",
"author": "merelinguist",
"author": {
"name": "Simon Knott",
"email": "info@simonknott.de",
"url": "https://simonknott.de"
},
"contributors": [
{
"name": "Dylan Brookes",
"email": "dylan@brookes.net",
"url": "https://github.com/merelinguist"
},
{
"name": "Brandon Bayer",
"email": "b@bayer.w",
"url": "https://twitter.com/flybayer"
}
],
"module": "dist/superjson.esm.js",

@@ -46,3 +62,5 @@ "repository": {

"devDependencies": {
"@types/lodash": "^4.14.161",
"benchmark": "^2.1.4",
"eslint-plugin-es5": "^1.5.0",
"husky": "^4.2.5",

@@ -52,3 +70,7 @@ "tsdx": "^0.13.2",

"typescript": "^3.9.6"
},
"dependencies": {
"lodash": "^4.17.20",
"lodash-es": "^4.17.15"
}
}

@@ -11,3 +11,3 @@ <p align="center">

<!-- ALL-CONTRIBUTORS-BADGE:START - Do not remove or modify this section -->
<a href="#contributors"><img src="https://img.shields.io/badge/all_contributors-4-orange.svg?style=flat-square" alt="All Contributors"/></a>
<a href="#contributors"><img src="https://img.shields.io/badge/all_contributors-5-orange.svg?style=flat-square" alt="All Contributors"/></a>
<!-- ALL-CONTRIBUTORS-BADGE:END -->

@@ -108,3 +108,3 @@ <a href="https://www.npmjs.com/package/otion">

## Using with Next.js `getServerSideProps`, `getInitialProps`, and `getStaticProps`
## Using with Next.js

@@ -115,36 +115,22 @@ The `getServerSideProps`, `getInitialProps`, and `getStaticProps` data hooks provided by Next.js do not allow you to transmit Javascript objects like Dates. It will error unless you convert Dates to strings, etc.

```js
import { useMemo } from 'react';
import superjson from 'superjson';
Install the library with your package manager of choice, e.g.:
export const getServerSideProps = async () => {
const products = [{ name: 'Hat', publishedAt: new Date(0) }];
```sh
yarn add -D babel-plugin-superjson-next
```
const dataString = superjson.stringify(products);
Add the plugin to your .babelrc. If you don't have one, create it.
return {
props: {
dataString,
},
};
};
export default function Page({ dataString }) {
const products = useMemo(() => superjson.parse(dataString), [dataString]);
return (
<div>
<h1>Products</h1>
{products.map(product => (
<p key={product.id}>
<span>Name: {product.name}</span>
{/* Note: publishedAt is an actual Date object! */}
<span>Published at: {product.publishedAt.toISOString()}</span>
</p>
))}
</div>
);
```js
{
"presets": ["next/babel"],
"plugins": [
...
"superjson-next" // 👈
]
}
```
Done! Now you can safely use all JS datatypes in your `getServerSideProps` / etc. .
## API

@@ -244,6 +230,7 @@

<tr>
<td align="center"><a href="https://github.com/merelinguist"><img src="https://avatars3.githubusercontent.com/u/24858006?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Dylan Brookes</b></sub></a><br /><a href="https://github.com/blitz-js/superjson/commits?author=merelinguist" title="Code">💻</a> <a href="https://github.com/blitz-js/superjson/commits?author=merelinguist" title="Documentation">📖</a> <a href="#design-merelinguist" title="Design">🎨</a> <a href="https://github.com/blitz-js/superjson/commits?author=merelinguist" title="Tests">⚠️</a></td>
<td align="center"><a href="http://simonknott.de"><img src="https://avatars1.githubusercontent.com/u/14912729?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Simon Knott</b></sub></a><br /><a href="https://github.com/blitz-js/superjson/commits?author=Skn0tt" title="Code">💻</a> <a href="#ideas-Skn0tt" title="Ideas, Planning, & Feedback">🤔</a> <a href="https://github.com/blitz-js/superjson/commits?author=Skn0tt" title="Tests">⚠️</a> <a href="https://github.com/blitz-js/superjson/commits?author=Skn0tt" title="Documentation">📖</a></td>
<td align="center"><a href="https://twitter.com/flybayer"><img src="https://avatars3.githubusercontent.com/u/8813276?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Brandon Bayer</b></sub></a><br /><a href="#ideas-flybayer" title="Ideas, Planning, & Feedback">🤔</a></td>
<td align="center"><a href="http://jeremyliberman.com/"><img src="https://avatars3.githubusercontent.com/u/2754163?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Jeremy Liberman</b></sub></a><br /><a href="https://github.com/blitz-js/superjson/commits?author=mrleebo" title="Tests">⚠️</a> <a href="https://github.com/blitz-js/superjson/commits?author=mrleebo" title="Code">💻</a></td>
<td align="center"><a href="https://github.com/merelinguist"><img src="https://avatars3.githubusercontent.com/u/24858006?v=4" width="100px;" alt=""/><br /><sub><b>Dylan Brookes</b></sub></a><br /><a href="https://github.com/blitz-js/superjson/commits?author=merelinguist" title="Code">💻</a> <a href="https://github.com/blitz-js/superjson/commits?author=merelinguist" title="Documentation">📖</a> <a href="#design-merelinguist" title="Design">🎨</a> <a href="https://github.com/blitz-js/superjson/commits?author=merelinguist" title="Tests">⚠️</a></td>
<td align="center"><a href="http://simonknott.de"><img src="https://avatars1.githubusercontent.com/u/14912729?v=4" width="100px;" alt=""/><br /><sub><b>Simon Knott</b></sub></a><br /><a href="https://github.com/blitz-js/superjson/commits?author=Skn0tt" title="Code">💻</a> <a href="#ideas-Skn0tt" title="Ideas, Planning, & Feedback">🤔</a> <a href="https://github.com/blitz-js/superjson/commits?author=Skn0tt" title="Tests">⚠️</a> <a href="https://github.com/blitz-js/superjson/commits?author=Skn0tt" title="Documentation">📖</a></td>
<td align="center"><a href="https://twitter.com/flybayer"><img src="https://avatars3.githubusercontent.com/u/8813276?v=4" width="100px;" alt=""/><br /><sub><b>Brandon Bayer</b></sub></a><br /><a href="#ideas-flybayer" title="Ideas, Planning, & Feedback">🤔</a></td>
<td align="center"><a href="http://jeremyliberman.com/"><img src="https://avatars3.githubusercontent.com/u/2754163?v=4" width="100px;" alt=""/><br /><sub><b>Jeremy Liberman</b></sub></a><br /><a href="https://github.com/blitz-js/superjson/commits?author=mrleebo" title="Tests">⚠️</a> <a href="https://github.com/blitz-js/superjson/commits?author=mrleebo" title="Code">💻</a></td>
<td align="center"><a href="https://github.com/jorisre"><img src="https://avatars1.githubusercontent.com/u/7545547?v=4" width="100px;" alt=""/><br /><sub><b>Joris</b></sub></a><br /><a href="https://github.com/blitz-js/superjson/commits?author=jorisre" title="Code">💻</a></td>
</tr>

@@ -254,3 +241,2 @@ </table>

<!-- prettier-ignore-end -->
<!-- ALL-CONTRIBUTORS-LIST:END -->

@@ -257,0 +243,0 @@

@@ -14,5 +14,5 @@ import { isMap, isArray, isPlainObject, isSet } from './is';

export const getDeep = (object: object, path: (string | number)[]): object => {
for (const key of path) {
path.forEach(key => {
object = (object as any)[key];
}
});

@@ -19,0 +19,0 @@ return object;

@@ -13,3 +13,3 @@ import { makeAnnotator } from './annotator';

})
).toBe(undefined);
).toBe(null);

@@ -16,0 +16,0 @@ expect(getAnnotations()).toEqual({

import { getDeep, setDeep } from './accessDeep';
import { isPrimitive, isString } from './is';
import * as IteratorUtils from './iteratorutils';
import { Walker } from './plainer';

@@ -68,3 +67,3 @@ import {

IteratorUtils.forEach(this.objectIdentities.values(), paths => {
this.objectIdentities.forEach(paths => {
if (paths.length <= 1) {

@@ -79,5 +78,5 @@ return;

let identities = PathTree.create<string | null>(null);
for (const identicalPath of identicalPaths) {
identicalPaths.forEach(identicalPath => {
identities = PathTree.appendPath(identities, identicalPath);
}
});

@@ -154,2 +153,3 @@ const minimizedIdentities = PathTree.collapseRoot(identities);

const object = getDeep(plain, path);
console.log(object);

@@ -156,0 +156,0 @@ PathTree.traversePaths(

@@ -0,1 +1,4 @@

/* eslint-disable es5/no-for-of */
/* eslint-disable es5/no-es6-methods */
import SuperJSON from './';

@@ -43,3 +46,3 @@ import { JSONValue, SuperJSONValue } from './types';

output: {
a: [1, undefined, 2],
a: [1, null, 2],
},

@@ -58,3 +61,3 @@ outputAnnotations: {

output: {
a: [1, undefined, 2],
a: [1, null, 2],
},

@@ -70,3 +73,3 @@ outputAnnotations: {

input: new Set([1, undefined, 2]),
output: [1, undefined, 2],
output: [1, null, 2],
outputAnnotations: {

@@ -410,2 +413,48 @@ values: ['set', { 1: ['undefined'] }],

},
'issue #58': {
input: () => {
const cool = Symbol('cool');
SuperJSON.registerSymbol(cool);
return {
q: [
9,
{
henlo: undefined,
yee: new Date(2020, 1, 1),
yee2: new Date(2020, 1, 1),
foo1: new Date(2020, 1, 1),
z: cool,
},
],
};
},
output: {
q: [
9,
{
henlo: null,
yee: new Date(2020, 1, 1).toISOString(),
yee2: new Date(2020, 1, 1).toISOString(),
foo1: new Date(2020, 1, 1).toISOString(),
z: 'cool',
},
],
},
outputAnnotations: {
values: {
'q.1.henlo': ['undefined'],
'q.1.yee': ['Date'],
'q.1.yee2': ['Date'],
'q.1.foo1': ['Date'],
'q.1.z': [['symbol', 'cool']],
},
},
},
'works for undefined, issue #48': {
input: undefined,
output: null,
outputAnnotations: { values: ['undefined'] },
},
};

@@ -412,0 +461,0 @@

import { stringifyPath, parsePath } from './pathstringifier';
import { isUndefined, isNull, isArray, isPlainObject } from './is';
import { forEach, every, find } from 'lodash';

@@ -19,6 +20,3 @@ export type Tree<T> = InnerNode<T> | Leaf<T>;

} else if (v.length === 2) {
return (
valueChecker(v[0]) &&
Object.values(v[1]).every(v => isTree(v, valueChecker))
);
return valueChecker(v[0]) && every(v[1], v => isTree(v, valueChecker));
}

@@ -29,2 +27,10 @@

function isPrefixOf<T>(potentialPrefix: T[], of: T[]): boolean {
if (potentialPrefix.length > of.length) {
return false;
}
return potentialPrefix.every((value, index) => value === of[index]);
}
export module PathTree {

@@ -72,8 +78,7 @@ export function create<T>(value: T): Tree<T> {

const stringifiedPath = stringifyPath(path);
// due to the constraints mentioned in the functions description,
// there may be prefixes of `path` already set, but no extensions of it.
// If there's such a prefix, we'll find it.
const prefix = availablePaths.find(candidate =>
stringifiedPath.startsWith(candidate)
const prefix = find(availablePaths, candidate =>
isPrefixOf(parsePath(candidate), path)
);

@@ -119,4 +124,4 @@

Object.entries(children).forEach(([key, children]) => {
traverse(children, walker, [...origin, ...parsePath(key)]);
forEach(children, (child, key) => {
traverse(child, walker, [...origin, ...parsePath(key)]);
});

@@ -168,3 +173,3 @@

if (isPlainObject(v)) {
return Object.values(v).every(v => isTree(v, valueChecker));
return every(v, v => isTree(v, valueChecker));
}

@@ -171,0 +176,0 @@

import { isArray, isMap, isPlainObject, isPrimitive, isSet } from './is';
import * as IteratorUtils from './iteratorutils';
import { mapValues, values, includes, entries } from 'lodash';

@@ -15,14 +15,2 @@ interface WalkerValue {

const entries = (object: object | Map<any, any>): Iterator<[any, any]> => {
if (isMap(object)) {
return object.entries();
}
if (isPlainObject(object)) {
return Object.entries(object).values();
}
throw new Error('Illegal Argument: ' + typeof object);
};
export const plainer = (

@@ -40,3 +28,3 @@ object: any,

if (alreadySeenObjects.includes(object)) {
if (includes(alreadySeenObjects, object)) {
return null;

@@ -49,4 +37,4 @@ }

if (isArray(object) || isSet(object)) {
return IteratorUtils.map(object.values(), (value, index) =>
if (isArray(object)) {
return values(object).map((value, index) =>
plainer(value, walker, [...path, index], alreadySeenObjects)

@@ -56,4 +44,10 @@ );

if (isSet(object)) {
return entries(object).map(([value], index) =>
plainer(value, walker, [...path, index], alreadySeenObjects)
);
}
if (isMap(object)) {
return IteratorUtils.map(entries(object), ([key, value], index) => [
return entries(object).map(([key, value], index) => [
plainer(key, walker, [...path, index, 0], alreadySeenObjects),

@@ -65,9 +59,6 @@ plainer(value, walker, [...path, index, 1], alreadySeenObjects),

if (isPlainObject(object)) {
return Object.fromEntries(
Object.entries(object).map(([key, value]) => [
key,
plainer(value, walker, [...path, key], alreadySeenObjects),
])
return mapValues(object, (value, key) =>
plainer(value, walker, [...path, key], alreadySeenObjects)
);
}
};

@@ -11,6 +11,7 @@ import {

isSymbol,
isArray,
} from './is';
import { ClassRegistry } from './class-registry';
import { SymbolRegistry } from './symbol-registry';
import * as IteratorUtils from './iteratorutils';
import { fromPairs, includes, entries } from 'lodash';

@@ -24,10 +25,8 @@ export type PrimitiveTypeAnnotation = 'number' | 'undefined' | 'bigint';

type ContainerTypeAnnotation =
| 'map'
| 'set'
| ClassTypeAnnotation
| SymbolTypeAnnotation;
type SimpleTypeAnnotation = LeafTypeAnnotation | 'map' | 'set';
export type TypeAnnotation = LeafTypeAnnotation | ContainerTypeAnnotation;
type CompositeTypeAnnotation = ClassTypeAnnotation | SymbolTypeAnnotation;
export type TypeAnnotation = SimpleTypeAnnotation | CompositeTypeAnnotation;
const ALL_PRIMITIVE_TYPE_ANNOTATIONS: TypeAnnotation[] = [

@@ -42,3 +41,3 @@ 'undefined',

): value is PrimitiveTypeAnnotation => {
return ALL_PRIMITIVE_TYPE_ANNOTATIONS.includes(value);
return includes(ALL_PRIMITIVE_TYPE_ANNOTATIONS, value);
};

@@ -52,74 +51,162 @@

if (Array.isArray(value)) {
switch (value[0]) {
case 'map':
return ['number', 'string', 'bigint', 'boolean'].includes(value[1]);
case 'symbol':
case 'class':
return typeof value[1] === 'string';
}
return typeof value[1] === 'string';
}
return ALL_TYPE_ANNOTATIONS.includes(value);
return includes(ALL_TYPE_ANNOTATIONS, value);
};
function simpleTransformation<I, O, A extends SimpleTypeAnnotation>(
isApplicable: (v: any) => v is I,
annotation: A,
transform: (v: I) => O,
untransform: (v: O) => I
) {
return {
isApplicable,
annotation,
transform,
untransform,
};
}
const simpleRules = [
simpleTransformation(
isUndefined,
'undefined',
() => null,
() => undefined
),
simpleTransformation(isBigint, 'bigint', v => v.toString(), BigInt),
simpleTransformation(
isDate,
'Date',
v => v.toISOString(),
v => new Date(v)
),
simpleTransformation(
isRegExp,
'regexp',
v => '' + v,
regex => {
const body = regex.slice(1, regex.lastIndexOf('/'));
const flags = regex.slice(regex.lastIndexOf('/') + 1);
return new RegExp(body, flags);
}
),
simpleTransformation(
isSet,
'set',
v => entries(v).map(([value]) => value),
v => new Set(v)
),
simpleTransformation(
isMap,
'map',
v => entries(v),
v => new Map(v)
),
simpleTransformation<number, 'NaN' | 'Infinity' | '-Infinity', 'number'>(
(v): v is number => isNaNValue(v) || isInfinite(v),
'number',
v => {
if (isNaNValue(v)) {
return 'NaN';
}
if (v > 0) {
return 'Infinity';
} else {
return '-Infinity';
}
},
Number
),
];
function compositeTransformation<I, O, A extends CompositeTypeAnnotation>(
isApplicable: (v: any) => v is I,
annotation: (v: I) => A,
transform: (v: I) => O,
untransform: (v: O, a: A) => I
) {
return {
isApplicable,
annotation,
transform,
untransform,
};
}
const symbolRule = compositeTransformation(
(s): s is Symbol => {
if (isSymbol(s)) {
const isRegistered = !!SymbolRegistry.getIdentifier(s);
return isRegistered;
}
return false;
},
s => {
const identifier = SymbolRegistry.getIdentifier(s);
return ['symbol', identifier!];
},
v => v.description,
(_, a) => {
const value = SymbolRegistry.getValue(a[1]);
if (!value) {
throw new Error('Trying to deserialize unknown symbol');
}
return value;
}
);
const classRule = compositeTransformation(
(potentialClass): potentialClass is any => {
if (potentialClass?.constructor) {
const isRegistered = !!ClassRegistry.getIdentifier(
potentialClass.constructor
);
return isRegistered;
}
return false;
},
clazz => {
const identifier = ClassRegistry.getIdentifier(clazz.constructor);
return ['class', identifier!];
},
v => v,
(v, a) => {
const clazz = ClassRegistry.getValue(a[1]);
if (!clazz) {
throw new Error('Trying to deserialize unknown class');
}
return Object.assign(Object.create(clazz.prototype), v);
}
);
const compositeRules = [classRule, symbolRule];
export const transformValue = (
value: any
): { value: any; type: TypeAnnotation } | undefined => {
if (isUndefined(value)) {
return {
value: undefined,
type: 'undefined',
};
} else if (isSymbol(value)) {
const identifier = SymbolRegistry.getIdentifier(value);
if (identifier) {
for (const i in simpleRules) {
const rule = simpleRules[i];
if (rule.isApplicable(value)) {
return {
value: value.description,
type: ['symbol', identifier],
value: rule.transform(value as never),
type: rule.annotation,
};
}
} else if (isBigint(value)) {
return {
value: value.toString(),
type: 'bigint',
};
} else if (isDate(value)) {
return {
value: value.toISOString(),
type: 'Date',
};
} else if (isNaNValue(value)) {
return {
value: 'NaN',
type: 'number',
};
} else if (isInfinite(value)) {
return {
value: value > 0 ? 'Infinity' : '-Infinity',
type: 'number',
};
} else if (isSet(value)) {
return {
value: Array.from(value) as any[],
type: 'set',
};
} else if (isRegExp(value)) {
return {
value: '' + value,
type: 'regexp',
};
} else if (isMap(value)) {
const entries = IteratorUtils.map(value.entries(), pair => pair);
return {
value: entries,
type: 'map',
};
}
if (value?.constructor) {
const identifier = ClassRegistry.getIdentifier(value.constructor);
if (identifier) {
for (const i in compositeRules) {
const rule = compositeRules[i];
if (rule.isApplicable(value)) {
return {
value: value,
type: ['class', identifier],
value: rule.transform(value),
type: rule.annotation(value),
};

@@ -132,49 +219,24 @@ }

const simpleRulesByAnnotation = fromPairs(
simpleRules.map(r => [r.annotation, r])
);
export const untransformValue = (json: any, type: TypeAnnotation) => {
if (Array.isArray(type)) {
if (isArray(type)) {
switch (type[0]) {
case 'class': {
const clazz = ClassRegistry.getValue(type[1]);
if (!clazz) {
throw new Error('Trying to deserialize unknown class');
}
return Object.assign(Object.create(clazz.prototype), json);
}
case 'symbol': {
const symbol = SymbolRegistry.getValue(type[1]);
if (!symbol) {
throw new Error('Trying to deserialize unknown symbol');
}
return symbol;
}
case 'symbol':
return symbolRule.untransform(json, type);
case 'class':
return classRule.untransform(json, type);
default:
throw new Error('Unknown transformation: ' + type);
}
}
} else {
const transformation = simpleRulesByAnnotation[type];
if (!transformation) {
throw new Error('Unknown transformation: ' + type);
}
switch (type) {
case 'bigint':
return BigInt(json);
case 'undefined':
return undefined;
case 'Date':
return new Date(json as string);
case 'number':
return Number(json);
case 'map':
return new Map(json);
case 'set':
return new Set(json as unknown[]);
case 'regexp': {
const regex = json as string;
const body = regex.slice(1, regex.lastIndexOf('/'));
const flags = regex.slice(regex.lastIndexOf('/') + 1);
return new RegExp(body, flags);
}
default:
return json;
return transformation.untransform(json as never);
}
};

@@ -46,3 +46,3 @@ import { Annotations, isAnnotations } from './annotator';

export function isSuperJSONResult(object: any): object is SuperJSONResult {
if (isUndefined(object.json)) {
if (!('json' in object)) {
return false;

@@ -49,0 +49,0 @@ }

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc