-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathserialize.js
More file actions
31 lines (29 loc) · 831 Bytes
/
serialize.js
File metadata and controls
31 lines (29 loc) · 831 Bytes
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
const hop = Object.hasOwnProperty;
function serialize(val) {
return function serialize(val) {
if (val === null) {
return 'N;';
}
let type = typeof val;
if (type == 'object') {
let obj = val, vals = [];
for (let key in obj) {
if (!hop.call(obj, key)) continue;
val = obj[key];
if (val !== undefined && typeof val != 'function') {
vals.push(serialize(key), serialize(val));
}
}
return 'a:' + (vals.length / 2) + ':{' + vals.join('') + '}';
}
switch (type) {
case 'string':
return 's:' + val.length + ':"' + val + '";';
case 'number':
return (Math.floor(val) === val ? 'i:' : 'd:') + val + ';';
case 'boolean':
return 'b:' + (val ? 1 : 0) + ';';
}
}(val);
}
module.exports = serialize;