-
Notifications
You must be signed in to change notification settings - Fork 2
/
api.js
94 lines (77 loc) · 1.79 KB
/
api.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
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
const fileIo = require('./fileIo')
const error = require('./modules/error')
const chalk = require('chalk')
class api {
constructor () {
this.state = fileIo.readInitialState()
}
save () {
return fileIo.writeState(this.state)
}
// lists
getList (name) {
const results = this.state.filter( (list) => {
return list.name === name
})
return results.length ? results[0] : null
}
listExists (name) {
return !!this.getList(name)
}
addList (name) {
const list = this.getList(name)
if (!list) {
this.state.push({ name, sites: [] })
} else {
throw 'List already exists.'
}
}
removeList (name) {
const listExists = this.listExists(name)
if (listExists) {
this.state = this.state.filter( list => (list.name !== name))
} else {
throw 'List does not exist.'
}
}
// list items
get (name) {
const list = this.getList(name)
if (list) {
return list
} else {
return this.state
}
}
addItems (name, items) {
const list = this.getList(name)
if (list) {
list.sites = list.sites.concat(items.map((site) => {
// replace https:// with http://
if (site.indexOf('https://') === 0) {
return `http://${site.slice('https://'.length)}`
} else if (site.indexOf('http://') === 0){
return site
}
return `http://${site}`
}));
} else {
throw 'List not found.'
}
}
removeItems (name, indexes) {
const list = this.getList(name)
if (list) {
if (indexes) {
list.sites = list.sites.filter( (item, index) => {
return !indexes.includes(index)
})
} else {
list.sites = [];
}
} else {
throw 'List not found.'
}
}
}
module.exports = new api();