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

mapargs

v2.0.0

Published

map function parameters to named options with optional validation

Downloads

20

Readme

mapargs

map function parameters to types

installation

$ npm install mapargs

usage

Stop manually writing mapping and validation logic. Stop it right now. It's brittle and not fun.

var mapArgs = require('mapargs')

var listDocuments = mapArgs(function (authorId, skip, limit) {
  // do stuff
}, {
  authorId: Number,
  skip: {$map: Number, $optional: true, $default: 0},
  limit: {$map: Number, $optional: true, $default: 100}
})

This returns a function which we can call either with positional arguments (like the original), or named arguments by passing in an object with property names matching the parameter names.

listDocuments({name: 'f43', skip: '100'})
// equivalent to calling the original function with
// fn(43, 100, 100)

Use this when wiring up user input to application logic. Separate your gnarly HttpRequest objects from your core domain functions. Automatically map objects to their constructors.

api

mapArgs(fn: Function, mapObj?: Object) => Function

Returns a function which accepts named arguments and (optionally) has validation and defaults specified in mapObj

var add3 = function (a, b, c) {
  return a + b + c
}

var named = mapArgs(add3)

named({a: 1, b: 2, c: 3})
// => 6

mapObj should have property names corresponding to fn's parameter names. The values should be either mapping functions to be applied to the matching argument or an options object.

mapArgs.validate(mapObj: Object) => Function

Returns a function which will apply all of the validation and default logic and return an arguments object or throw an error.

options

$map: Function

A mapping function to be applied to the matching argument

$default: Value

A value used when the argument is not supplied or is undefined

$valid: Predicate Function

A function returning true if the argument is valid, false otherwise. mapArgs will throw an Error if the validation fails. Validation is run after the mapping function is applied.

$optional: Boolean

If true, the parameter is optional. If a default is specified, it will be used if the argument is undefined. If there is no default specified and the parameter is not marked optional, an error will be thrown.

a note about booleans

We treat the built-in Boolean constructor liberally. Unlike native Boolean, not all non-empty strings evaluate to true. Instead, only strings which case-insensitively compare to t, true, y, or yes are true; otherwise they're false. And only numbers > 0 evaluate to true; otherwise they're false.

running the tests

change to package root directory

$ npm install
$ npm test

contributors

js-standard-style

jden [email protected]

license

ISC. (c) 2015 AgileMD, Inc [email protected]. See LICENSE.md