@walltowall/auxline

0.1.2 • Public • Published

auxline

Generate auxillary data using a series of contextually aware functions.

npm version

npm i auxline

Usage

import auxline from 'auxline'

// Data used to generate auxillary data.
const list = [
  { id: 1, type: 'HeroBlock', text: 'Text for a Hero component' },
  { id: 2, type: 'CallToActionBlock', text: 'Hey', buttonText: 'Call Me' },
  { id: 3, type: 'FooterBlock', year: 2074 },
]

// List of functions to generate auxillary data derived from the provided data.
const fns = {
  // Get a list of types for each item in data.
  types: data => data.map(x => x.type),

  // Get a list of keys for each item in data.
  keys: data => data.map(x => x.id),

  // Get a list of containers for each item in data.
  containers: (data, { types }) =>
    data.map((x, i) => (types[i] === 'FooterBlock' ? 'footer' : 'body')),

  // Group data items by container with keys.
  tree: (data, { keys, containers }) =>
    data.reduce((acc, x, i) => {
      const key = keys[i]
      const container = containers[i]

      acc[container] = (acc[container] || []).concat({ ...x, key })

      return acc
    }, {}),
}

const { types, keys, containers, tree } = auxline(fns, list)

API

auxline(fns, data)
  • fns: Object of functions. Each key represents a group of auxillary data. Auxillary data will be available to subsequent functions using the function's key.
  • data: Any data to be used to generate auxillary data.

Each function in fns is provided two pieces of data:

  • data: The original data provided to auxline.
  • context: An object of auxillary data. Each function receives the aggregate auxillary data keyed by function name.

Functions are called serially in the order of property definition.

/@walltowall/auxline/

    Package Sidebar

    Install

    npm i @walltowall/auxline

    Weekly Downloads

    0

    Version

    0.1.2

    License

    MIT

    Unpacked Size

    6.8 kB

    Total Files

    14

    Last publish

    Collaborators

    • kalamak
    • walltowall-dev
    • angeloashmore
    • asyarb
    • kangken