1.0.1 • Published 10 years ago

sass-proptypes v1.0.1

Weekly downloads
4
License
MIT
Repository
github
Last release
10 years ago

Sass propTypes

Inspired by React's PropTypes validation, Sass PropTypes helps you validate required arguments for your Sass mixins. For example, imagine you've written a mixin that compiles buttons. The mixin accepts one of several $style arguments:

@mixin button($style: default) {
  @if $style == 'default' {
    // Default button styles
  }

  @if $style == 'primary' {
    // Primary button styles
  }

  @if $style == 'negative' {
    // Negative button styles
  }

  @if $style == 'positive' {
    // Positive button styles
  }
}

The mixin works well so long as you pass in a valid $style argument (one of default, primary, negative, or positive). But what happens if you accidentally pass in a invalid argument, like brand or even a misspelling like positve? Well, nothing. You'll just lose some time debugging your compiled CSS.

This where Sass propTypes steps in. If you make a mistake and pass in a invalid argument, PropTypes will throw a warning in the console.

How to use

Simply include the propTypes mixin in the mixin you wish to validate. For the example above:

@mixin button($style: default) {
  $propTypes: default, primary, negaive, positive;
  @include propTypes($style, $propTypes);

  ...
}

The propTypes mixin accepts two arguments:

  • $prop the mixin argument you wish to validate.
  • $propType a list of valid arguments.

If you were to pass in an invalid argument, the console will provide a helpful warning, with a stack trace that tells you exactly where to look:

WARNING: prmary must be one of default, primary, positive, negative
	on line 5 of src/stylesheets/library/_proptypes.scss
	from line 43 of src/stylesheets/library/_buttons.scss
	from line 40 of src/stylesheets/buttons/_base.scss

Get to work

Sass propTypes is available on Bower...

$ bower install sass-proptypes

...and NPM...

$ npm install sass-proptypes

Improvements

Got an idea to make this better? PRs welcome.