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

immutable-prop-types

v0.0.3

Published

PropType validators that work with Immutable.js

Downloads

8,197

Readme

immutable-prop-types

License: MIT npm package Build Status Greenkeeper badge

PropType validators that work with Immutable.js. Forked from react-immutable-proptypes.

About

Usage is simple, they work with and like any PropType.* validator.

import PropTypes from 'prop-types';
import ImmutablePropTypes from 'immutable-prop-types';
class MyReactComponent extends React.Component {
  // ...
}

MyReactComponent.propTypes = {
  myRequiredImmutableList: ImmutablePropTypes.listOf(
    ImmutablePropTypes.contains({
      someNumberProp: PropTypes.number.isRequired
    })
  ).isRequired
};

Convenience helpers for "primitive" Immutable.js objects:

propTypes: {
  oldListTypeChecker: PropTypes.instanceOf(Immutable.List),
  anotherWay: ImmutablePropTypes.list,
  requiredList: ImmutablePropTypes.list.isRequired,
  mapsToo: ImmutablePropTypes.map,
  evenIterable: ImmutablePropTypes.iterable
}

Installation

Installing via npmjs

npm install --save immutable-prop-types

API

Immutable prop types has:

  • Primitive Types
ImmutablePropTypes.list         // Immutable.List.isList
ImmutablePropTypes.map          // Immutable.Map.isMap
ImmutablePropTypes.orderedMap   // Immutable.OrderedMap.isOrderedMap
ImmutablePropTypes.set          // Immutable.Set.isSet
ImmutablePropTypes.orderedSet   // Immutable.OrderedSet.isOrderedSet
ImmutablePropTypes.stack        // Immutable.Stack.isStack
ImmutablePropTypes.seq          // Immutable.Seq.isSeq
ImmutablePropTypes.iterable     // Immutable.Iterable.isIterable
ImmutablePropTypes.record       // instanceof Record
ImmutablePropTypes.contains     // Immutable.Iterable.isIterable - contains(shape)
ImmutablePropTypes.mapContains  // Immutable.Map.isMap - contains(shape)
  • ImmutablePropTypes.contains (formerly shape) is based on PropTypes.shape and will try to work with any Immutable.Iterable. In my usage it is the most used validator, as I'm often trying to validate that a map has certain properties with certain values.
// ...
aMap: ImmutablePropTypes.contains({
  aList: ImmutablePropTypes.contains({
    0: PropTypes.number,
    1: PropTypes.string,
    2: PropTypes.number.isRequired,
  }).isRequired,
})
// ...
<SomeComponent aList={Immutable.fromJS({aList: [1, 'two', 3]})} />
  • ImmutablePropTypes.listOf is based on PropTypes.array and is specific to Immutable.List.

  • ImmutablePropTypes.mapOf allows you to control both map values and keys (in Immutable.Map, keys could be anything including another Immutable collections). It accepts two arguments - first one for values, second one for keys (optional). If you are interested in validation of keys only, just pass PropTypes.any as the first argument.

// ...
aMap: ImmutablePropTypes.mapOf(
  PropTypes.any, // validation for values
  ImmutablePropTypes.mapContains({ // validation for keys
    a: PropTypes.number.isRequired,
    b: PropTypes.string
  })
)
// ...
const aMap = Immutable.Map([
  [Immutable.Map({a: 1, b: '2'}), 'foo'],
  [Immutable.Map({a: 3}), [1, '2', 3]]
]);
<SomeComponent aMap={aMap} />
  • ImmutablePropTypes.orderedMapOf is basically the same as mapOf, but it is specific to Immutable.OrderedMap.

  • ImmutablePropTypes.orderedSetOf is basically the same as listOf, but it is specific to Immutable.OrderedSet.

  • ImmutablePropTypes.stackOf is basically the same as listOf, but it is specific to Immutable.Stack.

  • ImmutablePropTypes.iterableOf is the generic form of listOf/mapOf. It is useful when there is no need to validate anything other than Immutable.js compatible (ie. Immutable.Iterable). Continue to use listOf and/or mapOf when you know the type.

  • ImmutablePropTypes.recordOf is like contains, except it operates on Record properties.

// ...
aRecord: ImmutablePropTypes.recordOf({
  keyA: PropTypes.string,
  keyB: ImmutablePropTypes.list.isRequired
})
// ...
  • ImmutablePropTypes.mapContains is based on PropTypes.shape and will only work with Immutable.Map.
// ...
aMap: ImmutablePropTypes.mapContains({
  aList: ImmutablePropTypes.list.isRequired,
})
// ...
<SomeComponent aList={Immutable.fromJS({aList: [1, 2]})} />

These two validators cover the output of Immutable.fromJS on standard JSON data sources.