2.0.7 • Published 9 months ago
@bsgbryan/madul v2.0.7
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
Docs
You can find a Getting Started Guide and more here - enjoy! 🤘🏻
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
dbdependency is loaded asynchronously - Dependencies are passed as named parameters to methods
- The
$initmethod is guaranteed to be executed after all dependencies have been loaded, but before the madul is available for use; so you know that thedbwill 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
usernameused for connecting to thedbwhen creating ourmadul - We don't call
$initdirectly; that's handled for us as part ofmadul - We don't pass the
dbdependency togetMessagesFrom; that's handled for us