npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

abstract-mapper

v0.1.5

Published

Abstract Object Mapper

Downloads

11

Readme

abstract-mapper

Abstract Object Mapper Build Status

NPM

Utility class to generate a mapper function from the array of handler functions. The array of handler functions is passed as a first argument ot the AbstractMapper constructor. The first handler function in the array being a context initializer.

The result of context initializer is passed as thisarg to every subsequent handler function. Each handler function receives the same arguments. The result of the last handler function is the value that the mapper function will return.

The array of handler functions that is passed to AbstractMapper constructor, can also contain nested arrays. In this case, a nested mapper will be constructed from this array. This nested mapper will be called with the same thisarg, as the rest of the handler functions.

This module was created with CoffeeScript in mind.

Install

npm install --save abstract-mapper

Browser

Usage

mapper = new AbstractMapper [
  (args...) -> ...    # Init
  (args...) -> ...
  [                   # Nested mapper
    (args...) -> ...
    (args...) -> ...
  ]
  (args...) -> ...    # Result
]

Examples

Object -> Object, Swap keys and values

  mapper = new AbstractMapper [
    -> {}
    ($) -> this[value] = key for key, value of $
    -> this
  ]

Explode Object recursively

  mapper = new AbstractMapper [
    -> if this instanceof Array then this else []

    ($) ->
      nested = []
      for key, value of $
        if typeof value is 'object'
          nested.push value
        else
          result = {}
          result[key] = value
          @push result

      for data in nested
        mapper.call this, data

    -> this
  ]

JSON -> DOM

  mapper = new AbstractMapper [
    ($) -> if typeof $ is 'string' then textMapper $ else nodeMapper $
  ]

  textMapper = new AbstractMapper [ ($) -> document.createTextNode $ ]

  nodeMapper = new AbstractMapper [
    ($) -> document.createElement $.element or 'div'
    ($) -> @className = $.class if $.class
    ($) -> @setAttribute 'style', $.style if $.style
    ($) -> @appendChild mapper child for child in $.children or []
    -> this
  ]

DOM -> JSON

  mapper = new AbstractMapper [
    ($) -> if $.nodeType is 3 then textMapper $ else nodeMapper $
  ]

  textMapper = new AbstractMapper [ ($) -> $.data ]

  nodeMapper = new AbstractMapper [
    -> {}
    ($) -> @element = $.nodeName.toLowerCase()
    ($) -> @class = $.className if $.className
    ($) -> @style = style if style = $.getAttribute? 'style'
    ($) -> @children = [] if $.childNodes.length
    ($) -> @children.push mapper child for child in $.childNodes
    -> this
  ]

Build

git clone https://github.com/nhz-io/abstract-mapper.git
cd abstract-mapper
npm install
gulp

Benchmark

JSPERF

LICENSE

MIT

VERSION

0.1.5

  • More README, More meaningful variable names

0.1.4

  • Removed junk rudiment (AbstractMapper.Context)

0.1.3

  • Fixed RangeError: Maximum call stack size exceeded on nested mappers

0.1.2

  • Added empty Context class under AbstractMapper.Context

0.1.1

  • Fixed .npmignore to exclude only browser dist files

0.1.0

  • API is totally different from v0.0.10 (Abusing CoffeeScript sugar)
  • Added build system (GULP)
  • Added travis-ci