@bsgbryan/madul
v2.0.0
Published
The fun way to do functional programming in TypeScript!
Downloads
6
Maintainers
Readme
Mädūl
Madul is a simple set of tools that help you craft clean functional code that's straightforward to test - and fun to write & maintain
tl;dr
Madul Definition: MessageReciever.ts
export const dependencies = () => ({
'+/db': ['connectAs', 'getAllMessagesBefore', 'getMessagesFrom']
})
export const $init = async ({ connectAs, username }) => await connectAs({ username })
export const getMessagesFrom = async ({
friend,
getAllMessagesBefore,
getMessagesFrom,
sentBefore,
}) => {
const allMessages = await getAllMessagesBefore({ timestamp: sentBefore })
const fromMyFriend = await getMessagesFrom({ friend })
return allMessages.filter(m => fromMyFriend.includes(m))
}
In the above code:
- A madul is just a plain old node module
- The
db
dependency is loaded asynchronously - Dependencies are passed as named parameters to methods
- The
$init
method is guaranteed to be executed after all dependencies have been loaded, but before the madul is available for use; so you know that thedb
will be properly setup and connected to asusername
Madul Usage GetMessagesFromAda.ts
import madul from '@bsgbryan/madul'
const receiver = await madul('+/MessageReciever', { username: 'KatherineJohnson' })
const oneHour = 1000 * 60 * 60
const sentBefore = Date.now() - oneHour
const messages = await receiver.getMessagesFrom({ friend: 'Ada', sentBefore })
console.log('My messages from Ada!', messages)
In the above code:
- We pass the
username
used for connecting to thedb
when creating ourmadul
- We don't call
$init
directly; that's handled for us as part ofmadul
- We don't pass the
db
dependency togetMessagesFrom
; that's handled for us