fliphub-core
v0.0.6
Published
the core of fliphub, an extensible hub api
Downloads
35
Readme
💠💗 fliphub-core
the core of fliphub, an extensible hub api for building programs with an event-based core/workflow/context/presets
📦 usage
yarn add fliphub-core
npm i fliphub-core --save
const FlipHubCore = require('fliphub-core')
🏛️ paradigm
❔ when
there are multiple things context, one core, one workflow to connect them, and reusable configurations that optionally can be inherited
❔ why
creating a program which has a core that is as minimal as possible as much functionality is added via presets as possible
in turn, a phenomenal external api is created, since you use it to build your program.
this allows extremely easy maintenance and extension because
💗 core
- extends flipchain/ChainedMapExtendable
- your core program
- one core for every system
- every core has a core config
- high level
💮 workflow
- extends flipchain/ChainedMapExtendable
- connecting the core-hubs-context
- is passed into each lifecycle event to use one object to access the whole program easily
✳️ context
- extends flipchain/ChainedMapExtendable
⚙ configs
- options/config/opts/prefs/settings/args
- 🍉 rehydratable
- ⛓ chainable / fluent
💗⚙ coreConfig
- user settings for your core, inheritable if
inherit
is not false
💮⚙ contextContext
- configs per context, each context can have multiple configs if hubs extend, but it is usually just one
💠 hub
- is essentially middleware, but a shorter name, and can do
- decorators
- middleware
🍰 presets
- combinations of hubs, or/and configurations.
👂 events & 📚 docs
📘 examples
emitting
// emits for core
this.workflow.evt.name('name-of-event-scoped-to->').core().emit(data)
// subscribe to a core event
this.workflow.evt.core().name('eh').cb(this.cb)
// emits for a single context
this.workflow.evt.name('name-of-event-scoped-to->').context('name').emit(data)
// emits for * contexts
this.workflow.evt.name('name-of-event-scoped-to->').contexts().emit(data)
example (fliphub)
workflow.contextsFrom(config.apps)
workflow.emitForContexts('merge.pre')
workflow.emitForContexts('init.pre')
workflow.emitForContexts('init')
workflow.emitForContexts('init.post')
workflow.emitForContexts('merge.post')
workflow.mapContexts((context) => {
// edit context
return context
})
☕💠 filterhub
- built in filtering for filtering contexts by calling the functions
exports / extending
// export as named, and as abstract for destructuring support
const {
log,
resolve,
Core,
AbstractCore,
Context,
AbstractContext,
Workflow,
AbstractWorkflow,
Hub,
AbstractHub,
Presets,
AbstractPresets,
ChainedMap,
} = require('fliphub-core')
📦 deps
- flipchain for a powerful fluent chainable api
- eventemitter2 in Event for fast event emitting lifecycle
- fliplog + inspector-gadget for debugging
schema
- [core] 1 - 1 [workflow]
- [core] 1 - 1 [config]
- [workflow] 1 - * [hub]
- [workflow] 1 - * [context]
- [context] 1 - * [config]