1 | // Copyright 2016 Luca-SAS, licensed under the Apache License 2.0
|
2 |
|
3 | ;
|
4 |
|
5 | module.exports = function sizeof(obj) {
|
6 | var size = 0;
|
7 |
|
8 | function sizeOf(obj) {
|
9 | var i;
|
10 | if (obj === undefined || obj === null) return size;
|
11 | switch (typeof obj) {
|
12 | case 'number':
|
13 | size += 8;
|
14 | break;
|
15 | case 'string':
|
16 | size += obj.length * 2;
|
17 | break;
|
18 | case 'boolean':
|
19 | size += 4;
|
20 | break;
|
21 | case 'object':
|
22 | if (obj instanceof Array) {
|
23 | size += 8 * obj.length;
|
24 | for (i = 0; i < obj.length; i++) sizeOf(obj[i]);
|
25 | } else {
|
26 | for (i in obj) {
|
27 | size += i.length * 2;
|
28 | sizeOf(obj[i]);
|
29 | }
|
30 | }
|
31 | break;
|
32 | }
|
33 | return size;
|
34 | }
|
35 | return sizeOf(obj);
|
36 | };
|