Skip to content

Commit dfc94f6

Browse files
committed
Add subscribe interface
1 parent 3632ddf commit dfc94f6

File tree

2 files changed

+23
-2
lines changed

2 files changed

+23
-2
lines changed

index.js

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
const flatfile = require('flat-file-db')
22
const promisify = require('then-flat-file-db')
33
const escapeRegexp = require('escape-regex')
4+
const Observable = require("zen-observable")
45

56
const db = promisify(flatfile.sync(process.env.DB_NAME || 'views.db'))
67

@@ -9,8 +10,24 @@ const keyRegex = (str) => {
910
return new RegExp('^' + str.replace('*','.*'))
1011
}
1112

13+
14+
let handlers = [];
15+
16+
const observable = new Observable((observer) => {
17+
handlers.push((data) => observer.next(data))
18+
let index = handlers.length;
19+
return () => {
20+
handlers = [...handlers.slice(0, index), ...handlers.slice(index)]
21+
}
22+
});
23+
1224
module.exports = {
13-
put: db.put.bind(db),
25+
put: (key, value) => {
26+
db.put(key, value)
27+
handlers.forEach(handler => {
28+
handler({key, value});
29+
})
30+
},
1431
has: (key) => Promise.resolve(db.has(key)),
1532
keys: () => Promise.resolve(db.keys()),
1633
// Get a value and filter it
@@ -44,5 +61,8 @@ module.exports = {
4461
await Promise.all(keys)
4562

4663
return data
64+
},
65+
subscribe: (cb) => {
66+
return observable.subscribe(cb);
4767
}
4868
}

package.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,8 @@
2626
"dependencies": {
2727
"escape-regex": "^1.0.7",
2828
"flat-file-db": "^1.0.0",
29-
"then-flat-file-db": "^1.0.0"
29+
"then-flat-file-db": "^1.0.0",
30+
"zen-observable": "^0.4.0"
3031
},
3132
"peerDependencies": {
3233
"micro-analytics-cli": "^1.2.0"

0 commit comments

Comments
 (0)