-
Notifications
You must be signed in to change notification settings - Fork 348
Expand file tree
/
Copy pathjson2u.js
More file actions
72 lines (65 loc) · 1.62 KB
/
Copy pathjson2u.js
File metadata and controls
72 lines (65 loc) · 1.62 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
59
60
61
62
63
64
65
66
67
68
69
70
71
72
"use strict"
module.exports = function() {
let _ = require('lodash')
let meta_map = new Map()
let meta_ref = {}
function resolve_ref(ref) {
return meta_ref[ref]
}
function public_create_meta(ref,schema) {
let meta = create_meta(schema)
meta_ref[ref] = meta
return meta
}
function create_meta(schema) {
let old = meta_map.get(schema)
if (old) {
return old
} else {
let cur = internal_create_meta(schema)
if (cur) {
meta_map.set(schema,cur)
}
return cur
}
}
function internal_create_meta(schema) {
let section = schema.title
let typedict = {
integer: 'int'
}
let lines = _.map(schema.properties,(v,k) => {
function resolve(v) {
if (v.$ref) {
return resolve(resolve_ref(v.$ref))
}
let type = typedict[v.type] || v.type
if (type == "array") {
return resolve(v.items) + '[]'
}
if (type == "object") {
type = create_meta(v).name
}
return type
}
let type = resolve(v)
return `this.${k}/*Category:${section}+EditAnywhere+${type}*/;`
}
)
let code = `
(function () {
class ${section} ${schema.struct ? '/* Struct */' : ''}{
properties() {
${lines.join('\n')}
}
}
return ${section}
})()
`
return require('uclass')()(global,eval(code))
}
return {
create : public_create_meta,
get : resolve_ref
}
}