fanboy
Version:
Caching iTunes search proxy
95 lines (73 loc) • 1.71 kB
JavaScript
// A REPL to explore the fanboy API, helpful for debugging:
// $ NODE_DEBUG=fanboy ./repl.js
const { Fanboy, createLevelDB } = require('./')
const repl = require('repl')
const { inspect } = require('util')
const { Transform, pipeline } = require('stream')
function createCache () {
const location = '/tmp/fanboy-repl'
const db = createLevelDB(location)
return new Fanboy(db)
}
const fanboy = createCache()
const server = repl.start({
prompt: 'fanboy> ',
ignoreUndefined: true,
input: process.stdin,
output: process.stdout
})
const { context } = server
function format (obj, prop) {
return inspect(prop ? obj[prop] : obj, { colors: true })
}
const writer = new Transform({
transform (obj, enc, cb) {
const [item, prop] = obj
if (item) {
const chunk = format(item, prop)
this.push(chunk)
this.push('\n')
} else {
this.push(null)
}
cb()
},
objectMode: true
})
pipeline(
writer,
process.stdout,
err => {
console.error(err || new Error('pipeline ended'))
}
)
function print (error, items, prop) {
if (error) {
return console.error(error)
}
process.stdout.write('\n')
for (const item of items) {
writer.write([item, prop])
}
process.stdout.write('ok\n')
server.displayPrompt()
}
function search (term, prop) {
fanboy.search(term, (error, items) => {
print(error, items, prop)
})
}
function lookup (guid, prop) {
fanboy.lookup(guid, (error, item) => {
print(error, [item], prop)
})
}
function suggest (term) {
fanboy.suggest(term, (error, terms) => {
print(error, terms)
})
}
context.search = search
context.lookup = lookup
context.suggest = suggest