|
@@ -143,36 +143,73 @@ SessionData.helpers({
|
|
|
|
|
|
SessionData.unpickle = pickle => {
|
|
|
return JSON.parse(pickle, (key, value) => {
|
|
|
- if (value === null) {
|
|
|
- return null;
|
|
|
- } else if (typeof value === 'object') {
|
|
|
- // eslint-disable-next-line no-prototype-builtins
|
|
|
- if (value.hasOwnProperty('$$class')) {
|
|
|
- if (value.$$class === 'RegExp') {
|
|
|
+ return unpickleValue(value);
|
|
|
+ });
|
|
|
+};
|
|
|
+
|
|
|
+function unpickleValue(value) {
|
|
|
+ if (value === null) {
|
|
|
+ return null;
|
|
|
+ } else if (typeof value === 'object') {
|
|
|
+ // eslint-disable-next-line no-prototype-builtins
|
|
|
+ if (value.hasOwnProperty('$$class')) {
|
|
|
+ switch (value.$$class) {
|
|
|
+ case 'RegExp':
|
|
|
return new RegExp(value.source, value.flags);
|
|
|
- }
|
|
|
+ case 'Date':
|
|
|
+ return new Date(value.stringValue);
|
|
|
+ case 'Object':
|
|
|
+ return unpickleObject(value);
|
|
|
}
|
|
|
}
|
|
|
- return value;
|
|
|
+ }
|
|
|
+ return value;
|
|
|
+}
|
|
|
+
|
|
|
+function unpickleObject(obj) {
|
|
|
+ const newObject = {};
|
|
|
+ Object.entries(obj).forEach(([key, value]) => {
|
|
|
+ newObject[key] = unpickleValue(value);
|
|
|
});
|
|
|
-};
|
|
|
+ return newObject;
|
|
|
+}
|
|
|
|
|
|
SessionData.pickle = value => {
|
|
|
return JSON.stringify(value, (key, value) => {
|
|
|
- if (value === null) {
|
|
|
- return null;
|
|
|
- } else if (typeof value === 'object') {
|
|
|
- if (value.constructor.name === 'RegExp') {
|
|
|
+ return pickleValue(value);
|
|
|
+ });
|
|
|
+};
|
|
|
+
|
|
|
+function pickleValue(value) {
|
|
|
+ if (value === null) {
|
|
|
+ return null;
|
|
|
+ } else if (typeof value === 'object') {
|
|
|
+ switch(value.constructor.name) {
|
|
|
+ case 'RegExp':
|
|
|
return {
|
|
|
$$class: 'RegExp',
|
|
|
source: value.source,
|
|
|
flags: value.flags,
|
|
|
};
|
|
|
- }
|
|
|
+ case 'Date':
|
|
|
+ return {
|
|
|
+ $$class: 'Date',
|
|
|
+ stringValue: String(value),
|
|
|
+ };
|
|
|
+ case 'Object':
|
|
|
+ return pickleObject(value);
|
|
|
}
|
|
|
- return value;
|
|
|
+ }
|
|
|
+ return value;
|
|
|
+}
|
|
|
+
|
|
|
+function pickleObject(obj) {
|
|
|
+ const newObject = {};
|
|
|
+ Object.entries(obj).forEach(([key, value]) => {
|
|
|
+ newObject[key] = pickleValue(value);
|
|
|
});
|
|
|
-};
|
|
|
+ return newObject;
|
|
|
+}
|
|
|
|
|
|
if (!Meteor.isServer) {
|
|
|
SessionData.getSessionId = () => {
|