-
Notifications
You must be signed in to change notification settings - Fork 10
Expand file tree
/
Copy pathextractJsonFromExample.js
More file actions
58 lines (47 loc) · 1.53 KB
/
extractJsonFromExample.js
File metadata and controls
58 lines (47 loc) · 1.53 KB
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
var sqlite3 = require('sqlite3');
var bplist = require('bplist');
var _ = require('lodash');
var fs = require('fs');
var db = new sqlite3.Database('./example/example.sketch', sqlite3.OPEN_READONLY);
db.each('SELECT * FROM payload', function(err, row) {
if(err) {
console.log(err);
process.exit(-1);
}
bplist.parseBuffer(row.value, function(err, results) {
if(err) {
console.log(err);
process.exit(-1);
}
var objects = results[0].$objects;
fs.writeFileSync('./example/objects.json', JSON.stringify(objects, null, 2));
var classes = _.compact(_.map(objects, (o, idx) => {
if(o.$classname) {
return {
classname: o.$classname,
index: idx,
fields: [],
examples: []
};
}
}));
_.each(objects, (o, idx) => {
if(o.$class) {
var thisClass = _.find(classes, (c) => c.index === o.$class);
var fields = Object.keys(o);
thisClass.fields = _.union(thisClass.fields, fields);
var p = JSON.parse(JSON.stringify(o));
p.$$id = idx;
thisClass.examples.push(p);
}
});
classes = _.reduce(classes, (obj, c) => {
if(!obj[c.classname]) { obj[c.classname] = {}; }
obj[c.classname].index = c.index;
obj[c.classname].fields = _.union(obj[c.classname].fields, c.fields);
obj[c.classname].examples = _.union(obj[c.classname].examples, c.examples);
return obj;
}, {});
fs.writeFileSync('./example/classes.json', JSON.stringify(classes, null, 2));
});
});