Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Serializer = (function () {
- SerializableParentClass = {};
- return {
- addDeserializationPassin(name, func) {
- if (name) {
- SerializableParentClass[name] = func;
- }
- return SerializableParentClass;
- },
- Serializer: function Serializer(obj, seperator, parent) {
- var SEPERATOR = seperator || "";
- return {
- serialize(final, itt, arr) {
- itt = itt || 0;
- if (itt > 10) {
- return ["U"];
- }
- var raw = [""];
- var key = Object.keys(obj);
- var bottom = 0;
- for (const item of key) {
- if (obj.constructor === Window) {
- if (item === "frames" || item === "self" || (obj[item] && obj[item].window != undefined))
- continue;
- }
- if (obj[item] === undefined) {
- raw.push(`U${item}`);
- } else if (obj[item] === null) {
- raw.push(`N${item}`);
- } else if (obj[item].constructor === Function) {
- // console.log("F", obj[item]);
- var code = obj[item].toString();
- if (code.match(/\) { \[native code\] }/)) {
- console.log("NOT LOADING", item, code);
- } else {
- raw.push(`F${item}${escape(code)}`);
- }
- } else if (obj[item].constructor === String) {
- raw.push(`S${item}${escape(obj[item])}`);
- } else if (obj[item].constructor === Number) {
- raw.push(`N${item}${obj[item]}`);
- } else if (obj[item].constructor === Boolean) {
- raw.push(`B${item}${1 - obj[item]}`);
- } else if (obj[item] === obj) {
- raw.push(`IN${item}`);
- } else {
- var subobject = Serializer(obj[item], SEPERATOR).serialize(true, itt + 1);
- var size = subobject.length;
- raw.push(`I${item}${size}`);
- subobject.forEach(element => {
- raw.push(element);
- });
- }
- }
- if (raw.length > 1)
- raw[0] = "SC" + (raw.length - 1);
- return final ? raw : raw.join(SEPERATOR);
- },
- deserialize(isobj) {
- var raw = obj.split(SEPERATOR);
- var out = !isobj ? {} : [];
- var express_array = true;
- for (var i = 1; i < raw.length; i++) {
- var parts = raw[i].split("");
- switch (parts[0]) {
- case "I":
- var section = [];
- for (var j = 1; j < 1 + Number(parts[2]); j++) {
- section.push(raw[i + j]);
- }
- i += Number(parts[2]);
- var result = Serializer(section.join(SEPERATOR), SEPERATOR).deserialize();
- // debugger;
- if (!Object.keys(result).join("").match(/[^0-9]/)) {
- result = Object.assign([], result);
- }
- out[parts[1]] = result;
- break;
- case "N":
- out[parts[1]] = Number(parts[2]);
- break;
- case "U":
- out[parts[1]] = undefined;
- break;
- case "B":
- out[parts[1]] = !Number(parts[2]);
- break;
- case "N":
- out[parts[1]] = null;
- break;
- case "S":
- out[parts[1]] = unescape(parts[2]);
- break;
- case "F":
- try {
- var keys = Object.keys(SerializableParentClass);
- var func = Function.apply(Function, [...keys, "return " + unescape(parts[2])]);
- var args = [];
- for (var j = 0; j < keys.length; j++) {
- args.push(SerializableParentClass[keys[i]]);
- }
- // console.log(func);
- out[parts[1]] = func.apply({}, args);
- } catch (e) {
- console.warn("FAILED TO LOAD SCRIPT\n", unescape(parts[2]), "\n", e);
- }
- break;
- case "IN":
- out[parts[1]] = out;
- }
- }
- if (!Object.keys(out).join("").match(/[^0-9]/g)) {
- out = Object.assign({}, out);
- }
- return out;
- }
- };
- }
- }
- })();
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement