alloc/saus

Make state modules more ergonomic

Opened this issue · 1 comments

Currently, state modules typically look like normal variables (lowercased), and you use their .get or .load methods as appropriate. When unwrapping a state module into its raw value, it can be awkward to decide on what the unwrapped value's variable will be named. This proposal is a possible solution.

import { defineStateModule } from 'saus/client'

export const [getFoo, loadFoo] = defineStateModule(
  'foo',
  async function() {
    // TODO: Load the foo
  }
)

With this pattern, the awkwardness is avoided:

import { getFoo, loadFoo } from '../state/foo'

let foo = getFoo(1, 2, 3)

foo = await loadFoo(3, 4, 5)

This proposal could be supported in a backwards compatible manner by simply defining 0 and 1 on the StateModule object, in addition to the pre-existing get and load methods.