Skip to content
/ madul Public

Mädūl is the fun way to write functional code in TypeScript!

License

Notifications You must be signed in to change notification settings

bsgbryan/madul

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

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:

  1. A madul is just a plain old node module
  2. The db dependency is loaded asynchronously
  3. Dependencies are passed as named parameters to methods
  4. 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 the db will be properly setup and connected to as username

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:

  1. We pass the username used for connecting to the db when creating our madul
  2. We don't call $init directly; that's handled for us as part of madul
  3. We don't pass the db dependency to getMessagesFrom; that's handled for us