-
Notifications
You must be signed in to change notification settings - Fork 0
/
model.js
76 lines (69 loc) · 1.49 KB
/
model.js
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
73
74
75
76
const split = expr => expr.match(/[a-zA-Z0-9]+/g)
const { dirname, relative } = require('path')
class Model {
/**
* @param {string} name
* @param {string[]} aliases
* @param {string} groupLabel
*/
constructor ({
name,
type,
labels,
path,
aliases,
groupLabel,
groupColor,
groupIndex,
description,
properties,
sourceUrl,
editUrl,
notes
}) {
this.name = name
this.type = type
this.labels = labels
this.path = path
this.aliases = aliases
this.groupLabel = groupLabel
this.groupColor = groupColor
this.groupIndex = groupIndex
this.description = description
this.properties = properties
this.sourceUrl = sourceUrl
this.editUrl = editUrl
this.notes = notes
}
/**
* Returns true if this model has the given model as a property.
* @param {Model} model The model
* @return {boolean}
*/
has (model) {
return this.properties.some(prop => split(prop.type).includes(model.name))
}
/**
* @param {string} basepath
*/
getHref (basepath) {
return `${basepath}/${this.path}`
}
/**
* Gets the basepath relative from this model
*/
basepath () {
return dirname(relative(this.path, ''))
}
/**
* @param {Model} that
* @return {number}
*/
compare (that) {
if (this.groupIndex !== that.groupIndex) {
return this.groupIndex - that.groupIndex
}
return this.name > that.name ? 1 : this.name < that.name ? -1 : 0
}
}
module.exports = Model