New Case Study:See how Anthropic automated 95% of dependency reviews with Socket.Learn More
Socket
Sign inDemoInstall
Socket

sansa

Package Overview
Dependencies
Maintainers
1
Versions
7
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

sansa - npm Package Compare versions

Comparing version 0.3.3 to 0.4.0

228

lib/arya.js

@@ -38,15 +38,10 @@ // Generated by CoffeeScript 1.10.0

Arya.prototype.save = function(obj, sink, next) {
var NEW_CONTEXT;
if ((obj == null) || ((typeof obj) !== "object") || (obj instanceof Array)) {
return next(new Error("cannot save " + obj));
}
NEW_CONTEXT = {
arrayList: [],
depth: 0
};
return this._saveObject(NEW_CONTEXT, obj, sink, next);
return this._saveObject({}, [], obj, sink, next);
};
Arya.prototype._dehydrate = function(context, obj, sink, next) {
var checkArray, dObj, i, key, len, ref, type, uuid;
Arya.prototype._dehydrate = function(context, arrayList, obj, sink, next) {
var dObj, dehydrates, key, type;
if (obj instanceof Array) {

@@ -61,35 +56,72 @@ dObj = [];

}
dehydrates = [];
for (key in obj) {
if (obj[key] != null) {
switch (typeof obj[key]) {
case "boolean":
case "number":
case "string":
dObj[key] = obj[key];
break;
case "object":
if (obj[key] instanceof Date) {
dObj[key] = RANGLE + obj[key].getTime().toString();
} else if (obj[key] instanceof Array) {
ref = context.arrayList;
for (i = 0, len = ref.length; i < len; i++) {
checkArray = ref[i];
if (checkArray === obj[key]) {
return next(new Error("circular arrays error detected"));
dehydrates.push(this._dehydratePromise(context, arrayList, obj, key, dObj, sink, next));
}
return Promise.all(dehydrates).then(function() {
return next(NO_ERROR, dObj);
})["catch"](function(err) {
return next(err);
});
};
Arya.prototype._dehydratePromise = function(context, arrayList, obj, key, dObj, sink, next) {
var checkArray, i, len, uuid;
if (obj[key] == null) {
return Promise.resolve(dObj);
}
switch (typeof obj[key]) {
case "boolean":
case "number":
case "string":
dObj[key] = obj[key];
return Promise.resolve(dObj);
case "object":
if (obj[key] instanceof Date) {
dObj[key] = RANGLE + obj[key].getTime().toString();
return Promise.resolve(dObj);
} else if (obj[key] instanceof Array) {
for (i = 0, len = arrayList.length; i < len; i++) {
checkArray = arrayList[i];
if (checkArray === obj[key]) {
return Promise.reject(new Error("circular arrays error detected"));
}
}
return new Promise((function(_this) {
return function(resolve, reject) {
var myArrayList;
myArrayList = arrayList.slice(0);
myArrayList.push(obj[key]);
return _this._dehydrate(context, myArrayList, obj[key], sink, function(err, myObj) {
if (err != null) {
return reject(err);
} else {
dObj[key] = myObj;
return resolve(dObj);
}
}
context.arrayList.push(obj[key]);
dObj[key] = this._dehydrate(context, obj[key], sink, next);
context.arrayList.pop();
} else {
uuid = this._identify(obj[key]);
if (context[uuid] == null) {
this._saveObject(context, obj[key], sink, next);
}
dObj[key] = RANGLE + uuid;
}
});
};
})(this));
} else {
uuid = this._identify(obj[key]);
if (context[uuid] == null) {
return new Promise((function(_this) {
return function(resolve, reject) {
return _this._saveObject(context, arrayList, obj[key], sink, function(err, myObj) {
if (err != null) {
return reject(err);
} else {
dObj[key] = RANGLE + uuid;
return resolve(dObj);
}
});
};
})(this));
} else {
dObj[key] = RANGLE + uuid;
return Promise.resolve(dObj);
}
}
}
}
return dObj;
return Promise.reject(new Error("unable to dehydrate"));
};

@@ -142,8 +174,3 @@

}
_this._rehydrate(context[uuid], dObj, context, uuid, src, function(err) {
if (err != null) {
return next(err);
}
});
return next(NO_ERROR, context[uuid]);
return _this._rehydrate(context[uuid], dObj, context, uuid, src, next);
};

@@ -154,57 +181,84 @@ })(this));

Arya.prototype._rehydrate = function(rObj, dObj, context, uuid, src, next) {
var key;
var key, rehydrates;
rehydrates = [];
for (key in dObj) {
switch (typeof dObj[key]) {
case "boolean":
case "number":
rObj[key] = dObj[key];
break;
case "string":
if (TYPE_TAG_RE.test(key)) {
if (rObj.constructor.name !== dObj[key]) {
return next(new Error("constructor error detected"));
}
rehydrates.push(this._rehydratePromise(rObj, dObj, key, context, uuid, src, next));
}
return Promise.all(rehydrates).then(function() {
return next(NO_ERROR, rObj);
})["catch"](function(err) {
return next(err);
});
};
Arya.prototype._rehydratePromise = function(rObj, dObj, key, context, uuid, src, next) {
switch (typeof dObj[key]) {
case "boolean":
case "number":
rObj[key] = dObj[key];
return Promise.resolve(rObj);
case "string":
if (TYPE_TAG_RE.test(key)) {
if (rObj.constructor.name !== dObj[key]) {
return Promise.reject(new Error("constructor error detected"));
} else {
if (UUID_TAG_RE.test(dObj[key])) {
this._loadObject(context, dObj[key].substring(1), src, function(err, obj) {
return Promise.resolve(rObj);
}
} else {
if (UUID_TAG_RE.test(dObj[key])) {
return new Promise((function(_this) {
return function(resolve, reject) {
return _this._loadObject(context, dObj[key].substring(1), src, function(err, obj) {
if (err != null) {
return reject(err);
} else {
rObj[key] = obj;
return resolve(rObj);
}
});
};
})(this));
} else if (TIME_TAG_RE.test(dObj[key])) {
rObj[key] = new Date(parseInt(dObj[key].substring(1), 10));
return Promise.resolve(rObj);
} else {
rObj[key] = dObj[key];
return Promise.resolve(rObj);
}
}
break;
case "object":
if (dObj[key] instanceof Array) {
rObj[key] = [];
return new Promise((function(_this) {
return function(resolve, reject) {
return _this._rehydrate(rObj[key], dObj[key], context, uuid, src, function(err, obj) {
if (err != null) {
return next(err);
return reject(err);
} else {
return resolve(rObj);
}
return rObj[key] = obj;
});
} else if (TIME_TAG_RE.test(dObj[key])) {
rObj[key] = new Date(parseInt(dObj[key].substring(1), 10));
} else {
rObj[key] = dObj[key];
}
}
break;
case "object":
if (dObj[key] instanceof Array) {
rObj[key] = [];
this._rehydrate(rObj[key], dObj[key], context, uuid, src, function(err) {
if (err != null) {
return next(err);
}
});
} else {
return next(new Error("corrupt JSON input detected"));
}
}
};
})(this));
} else {
return Promise.reject(new Error("corrupt JSON input detected"));
}
}
return next(NO_ERROR);
return Promise.reject(new Error("unable to rehydrate"));
};
Arya.prototype._saveObject = function(context, obj, sink, next) {
var dObj, json, uuid;
context.depth++;
Arya.prototype._saveObject = function(context, arrayList, obj, sink, next) {
var uuid;
uuid = this._identify(obj);
context[uuid] = obj;
dObj = this._dehydrate(context, obj, sink, next);
json = JSON.stringify(dObj, null, 2);
context.depth--;
return sink(uuid, json, function(err) {
if (context.depth === 0) {
return next(err, uuid);
return this._dehydrate(context, arrayList, obj, sink, function(err, dObj) {
var json;
if (err != null) {
return next(err);
}
json = JSON.stringify(dObj, null, 2);
return sink(uuid, json, function(err2) {
return next(err2, uuid);
});
});

@@ -211,0 +265,0 @@ };

{
"name": "sansa",
"version": "0.3.3",
"version": "0.4.0",
"description": "Object graph serialization library.",

@@ -5,0 +5,0 @@ "keywords": [

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