Package Exports
- fliphub-core
This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (fliphub-core) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.
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]