@bsgbryan/madul

2.0.0 • Public • Published

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:

  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

Package Sidebar

Install

npm i @bsgbryan/madul

Homepage

madul.dev

Weekly Downloads

11

Version

2.0.0

License

MIT

Unpacked Size

60.8 kB

Total Files

10

Last publish

Collaborators

  • bryanmaynard