bifrost-common
A library of commonly used functions to interact with BIFROST. Useful for module developers.
Installation
npm i bifrost-common
Components
BasicBifrostModule
A base class for simple BIFROST modules.
import { BasicBifrostModule } from 'bifrost-common'
const newModule = new BasicBifrostModule({
moduleId : 'NewModule',
moduleDescription : 'A simple template module',
author : 'rmos'
})
newModule.start()
Log
A module to print nice logging information to the console and, optionally, to files.
const { Log } = require('bifrost-common')
const log = new Log('myComponent', 'myApplication', options)
log.write(`Abandon ship`, Log.level.WARNING)
log.write(`Run like hell`, Log.level.INFO)
Log levels are DEBUG
, INFO
, WARNING
, ERROR
, FAILURE
Allowed options
are:
enableLogFiles
(default: false
): log to files as well as the consolelogDir
(default: log
): the log file directory (will be created as necessary)maxLogFileSize
(default: 1m
): maximum size of the log files, after which a new file will be startedmaxArchiveSize
(default: 5): maximum number of log files to keep
time
Some useful operations involving time, mostly for formatting Log
output.
idOfRef
Resolve the ID contained in an object. If no 'id' field is found in the
object pointed to with ref
, the last part of the reference is returned instead.
const { idOfRef } = require('bifrost-common')
console.log(idOfRef({ A: { id: '1' }}, '/A')) // '1'
console.log(idOfRef({ A: { B: {} }}, '/A/B')) // 'B'
tokens
An object collecting string tokens commonly used in the BIFROST state.
const { tokens } = require('bifrost-common')
console.log(tokens.tkId) // "id"
select
Selectors returning fully-qualified JSON paths into the BIFROST state.
const { select } = require('bifrost-common')
console.log(select.meta()) // "/meta"
console.log(select.dynamicId('DYNAMIC-1')) // "/dynamics/byId/DYNAMIC-1"
console.log(select.eventParentRef('EVENT-1')) // "/events/byId/EVENT-1/parentRef"
safepointer
A wrapper around json-pointer
that allows to specify default values if paths can not be resolved. This is best used in conjunction with select
and a copy of the BIFROST state.
API
const { safepointer } = require('bifrost-common')
.has(obj, path)
Determine whether the fully-qualified JSON pointer path
points to something in obj
.
safepointer.has({ A: { B: 1} }, '/A/B') // true
safepointer.has({ A: { B: 1} }, '/A/C') // false
.get(obj, path, def = null)
Resolve path
against obj
. If the path does not exist, def
is returned instead.
safepointer.get({ A: { B: 1} }, '/A/B', 0) // 1
safepointer.get({ A: { B: 1} }, '/A/C', 0) // 0
const { select } = require('bifrost-common')
safepointer.get(state, select.meta(), {}) // { id: ... }
SelectFrom
A declarative state selection library. Use this to select elements from the BIFROST state or from module subscription data.
SelectFrom(state)
.allDynamics()
.ofType('VOLTAGE-3P')
.asValueMap()
SelectFrom(subs)
.allEntries()
.ofType('CLIMATE-MODEL')
.asValueList()
SelectFrom(subs, state)
.allEntries()
.withParentOfType('WEATHER')
.asValueMap()