theprogrammablemind
Version:
79 lines (66 loc) • 1.25 kB
JavaScript
const counters = {}
const hits = {}
let db = () => {
debugger // eslint-disable-line no-debugger
}
const reset = () => {
Object.keys(counters).forEach(key => delete counters[key])
Object.keys(hits).forEach(key => delete hits[key])
db = () => { debugger } // eslint-disable-line no-debugger
}
const getDb = () => {
return db
}
const setDb = (value) => {
db = value
}
const hit = (name) => {
hits[name] = true
}
const unhit = (name) => {
hits[name] = false
}
const wasHit = (name) => {
return hits[name]
}
const counter = (name, breakAt = [], debugBreak = true) => {
if (!counters[name]) {
counters[name] = 0
}
counters[name] += 1
console.log(`counters[${name}] = ${counters[name]}`)
unhit(name)
if (Array.isArray(breakAt) && breakAt.includes(counters[name])) {
if (debugBreak) {
db()
}
hit(name)
return true
} else if (breakAt == counters[name]) {
if (debugBreak) {
db()
}
hit(name)
return true
}
}
const get = (name) => {
return counters[name]
}
const _break = (name) => {
if (wasHit(name)) {
db()
}
}
module.exports = {
counter,
get,
_break, // break is a keyword
// used for tests
reset,
hit,
unhit,
wasHit,
getDb,
setDb
}