├── .eslintrc ├── .gitignore ├── .travis.yml ├── CHANGELOG.md ├── CONTRIBUTORS.md ├── LICENSE ├── README.md ├── bin ├── cmd.js └── help.txt ├── index.js ├── package-lock.json ├── package.json └── test ├── fixtures ├── autoprefixer.css ├── autoprefixer.expected.css ├── clearfix.css ├── clearfix.expected.css ├── easings.css ├── easings.expected.css ├── fontpath.css ├── fontpath.expected.css ├── hexrgba.css ├── hexrgba.expected.css ├── input.css ├── input.expected.css ├── laggard.css ├── laggard.expected.css ├── position.css ├── position.expected.css ├── quantity.css ├── quantity.expected.css ├── responsive-type.css └── responsive-type.expected.css └── test.js /.eslintrc: -------------------------------------------------------------------------------- 1 | { 2 | "env": { 3 | "node": true, 4 | "mocha": true, 5 | "es6": true 6 | }, 7 | "extends": "eslint:recommended", 8 | "rules": { 9 | "indent": [ 10 | "error", 11 | 2, 12 | { "VariableDeclarator": 2 } 13 | ], 14 | "linebreak-style": [ 15 | "error", 16 | "unix" 17 | ], 18 | "quotes": [ 19 | "error", 20 | "single" 21 | ], 22 | "semi": [ 23 | "error", 24 | "always" 25 | ] 26 | } 27 | } -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Deps 2 | node_modules 3 | 4 | # Runtime 5 | *.log 6 | .DS_Store 7 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | language: node_js 2 | node_js: 3 | - "4" 4 | - "6" 5 | - "8" 6 | -------------------------------------------------------------------------------- /CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # Change Log 2 | 3 | ## [v1.0.0](https://github.com/simplaio/rucksack/tree/v1.0.0) (2017-08-01) 4 | [Full Changelog](https://github.com/simplaio/rucksack/compare/v0.9.1...v1.0.0) 5 | 6 | **Closed issues:** 7 | 8 | - Impossible to use rems if set responsive on html? [\#53](https://github.com/simplaio/rucksack/issues/53) 9 | - Position shorthand doesn't work more [\#48](https://github.com/simplaio/rucksack/issues/48) 10 | 11 | ## [v0.9.1](https://github.com/simplaio/rucksack/tree/v0.9.1) (2016-11-25) 12 | [Full Changelog](https://github.com/simplaio/rucksack/compare/v0.9.0...v0.9.1) 13 | 14 | **Closed issues:** 15 | 16 | - Document reporter as addon in website [\#46](https://github.com/simplaio/rucksack/issues/46) 17 | 18 | ## [v0.9.0](https://github.com/simplaio/rucksack/tree/v0.9.0) (2016-11-25) 19 | [Full Changelog](https://github.com/simplaio/rucksack/compare/v0.8.6...v0.9.0) 20 | 21 | **Fixed bugs:** 22 | 23 | - Problem when declaring text in content property if same as alias [\#41](https://github.com/simplaio/rucksack/issues/41) 24 | 25 | **Closed issues:** 26 | 27 | - I get undefined \[undefined\] - how I can debug it [\#44](https://github.com/simplaio/rucksack/issues/44) 28 | - postcss-position-alt [\#43](https://github.com/simplaio/rucksack/issues/43) 29 | - Autoprefixer options [\#40](https://github.com/simplaio/rucksack/issues/40) 30 | - Responsive typography + line height? [\#31](https://github.com/simplaio/rucksack/issues/31) 31 | 32 | **Merged pull requests:** 33 | 34 | - Make reporter configurable, off by default [\#45](https://github.com/simplaio/rucksack/pull/45) ([jescalan](https://github.com/jescalan)) 35 | 36 | ## [v0.8.6](https://github.com/simplaio/rucksack/tree/v0.8.6) (2016-04-17) 37 | [Full Changelog](https://github.com/simplaio/rucksack/compare/v0.8.5...v0.8.6) 38 | 39 | **Implemented enhancements:** 40 | 41 | - Show output code on home page [\#21](https://github.com/simplaio/rucksack/issues/21) 42 | 43 | **Fixed bugs:** 44 | 45 | - @font-face [\#26](https://github.com/simplaio/rucksack/issues/26) 46 | 47 | **Closed issues:** 48 | 49 | - Font shorthand property with calc\(\) statements don't work in Firefox [\#37](https://github.com/simplaio/rucksack/issues/37) 50 | - Extension to quantity queries. Last 4 of 7 items. [\#35](https://github.com/simplaio/rucksack/issues/35) 51 | - Invalid input file path error, when using Rucksack on Windows platform [\#33](https://github.com/simplaio/rucksack/issues/33) 52 | - Autoprefixer with options? [\#29](https://github.com/simplaio/rucksack/issues/29) 53 | - Font-size responsive no longer working as of ~Chrome 47.0.2526.73 [\#27](https://github.com/simplaio/rucksack/issues/27) 54 | - Responsive font-size breaks in Chrome Canary [\#24](https://github.com/simplaio/rucksack/issues/24) 55 | 56 | **Merged pull requests:** 57 | 58 | - Fix psuedo -\> pseudo typo [\#34](https://github.com/simplaio/rucksack/pull/34) ([rmobis](https://github.com/rmobis)) 59 | - Fix typo in input pseudo-elements title [\#32](https://github.com/simplaio/rucksack/pull/32) ([viki53](https://github.com/viki53)) 60 | 61 | ## [v0.8.5](https://github.com/simplaio/rucksack/tree/v0.8.5) (2015-10-17) 62 | [Full Changelog](https://github.com/simplaio/rucksack/compare/v0.8.4...v0.8.5) 63 | 64 | **Implemented enhancements:** 65 | 66 | - Add node-pixrem to fallbacks [\#9](https://github.com/simplaio/rucksack/issues/9) 67 | 68 | ## [v0.8.4](https://github.com/simplaio/rucksack/tree/v0.8.4) (2015-10-17) 69 | [Full Changelog](https://github.com/simplaio/rucksack/compare/v0.8.3...v0.8.4) 70 | 71 | ## [v0.8.3](https://github.com/simplaio/rucksack/tree/v0.8.3) (2015-10-17) 72 | [Full Changelog](https://github.com/simplaio/rucksack/compare/v0.8.2...v0.8.3) 73 | 74 | **Closed issues:** 75 | 76 | - Alias and font responsive not working together [\#25](https://github.com/simplaio/rucksack/issues/25) 77 | 78 | ## [v0.8.2](https://github.com/simplaio/rucksack/tree/v0.8.2) (2015-09-14) 79 | [Full Changelog](https://github.com/simplaio/rucksack/compare/v0.8.1...v0.8.2) 80 | 81 | ## [v0.8.1](https://github.com/simplaio/rucksack/tree/v0.8.1) (2015-09-14) 82 | [Full Changelog](https://github.com/simplaio/rucksack/compare/v0.8.0...v0.8.1) 83 | 84 | ## [v0.8.0](https://github.com/simplaio/rucksack/tree/v0.8.0) (2015-09-13) 85 | [Full Changelog](https://github.com/simplaio/rucksack/compare/v0.7.0...v0.8.0) 86 | 87 | **Implemented enhancements:** 88 | 89 | - Create transform scale\(\) -\> zoom fallback [\#17](https://github.com/simplaio/rucksack/issues/17) 90 | 91 | **Fixed bugs:** 92 | 93 | - Jumping issue in the documentation [\#23](https://github.com/simplaio/rucksack/issues/23) 94 | - Move to PostCSS 5.0 [\#13](https://github.com/simplaio/rucksack/issues/13) 95 | 96 | **Merged pull requests:** 97 | 98 | - Add Node.js 4.0 stable to Travis config [\#22](https://github.com/simplaio/rucksack/pull/22) ([phillipalexander](https://github.com/phillipalexander)) 99 | 100 | ## [v0.7.0](https://github.com/simplaio/rucksack/tree/v0.7.0) (2015-09-06) 101 | [Full Changelog](https://github.com/simplaio/rucksack/compare/v0.6.8...v0.7.0) 102 | 103 | ## [v0.6.8](https://github.com/simplaio/rucksack/tree/v0.6.8) (2015-09-06) 104 | [Full Changelog](https://github.com/simplaio/rucksack/compare/v0.6.7...v0.6.8) 105 | 106 | **Implemented enhancements:** 107 | 108 | - Add toggle options to all features [\#19](https://github.com/simplaio/rucksack/issues/19) 109 | 110 | **Closed issues:** 111 | 112 | - Auto pesudo content fallback [\#18](https://github.com/simplaio/rucksack/issues/18) 113 | - Responsive font issues in IE browser \(include edge\) [\#15](https://github.com/simplaio/rucksack/issues/15) 114 | 115 | ## [v0.6.7](https://github.com/simplaio/rucksack/tree/v0.6.7) (2015-08-25) 116 | [Full Changelog](https://github.com/simplaio/rucksack/compare/v0.6.6...v0.6.7) 117 | 118 | ## [v0.6.6](https://github.com/simplaio/rucksack/tree/v0.6.6) (2015-08-21) 119 | [Full Changelog](https://github.com/simplaio/rucksack/compare/v0.6.5...v0.6.6) 120 | 121 | ## [v0.6.5](https://github.com/simplaio/rucksack/tree/v0.6.5) (2015-08-20) 122 | [Full Changelog](https://github.com/simplaio/rucksack/compare/v0.6.4...v0.6.5) 123 | 124 | **Closed issues:** 125 | 126 | - gh-pages site should not break with HTTPS [\#11](https://github.com/simplaio/rucksack/issues/11) 127 | - Docs \(gh-pages\) [\#2](https://github.com/simplaio/rucksack/issues/2) 128 | 129 | **Merged pull requests:** 130 | 131 | - Fix spelling of Quantity [\#12](https://github.com/simplaio/rucksack/pull/12) ([davejamesmiller](https://github.com/davejamesmiller)) 132 | 133 | ## [v0.6.4](https://github.com/simplaio/rucksack/tree/v0.6.4) (2015-08-18) 134 | [Full Changelog](https://github.com/simplaio/rucksack/compare/v0.6.3...v0.6.4) 135 | 136 | ## [v0.6.3](https://github.com/simplaio/rucksack/tree/v0.6.3) (2015-08-15) 137 | [Full Changelog](https://github.com/simplaio/rucksack/compare/v0.6.2...v0.6.3) 138 | 139 | ## [v0.6.2](https://github.com/simplaio/rucksack/tree/v0.6.2) (2015-08-15) 140 | [Full Changelog](https://github.com/simplaio/rucksack/compare/v0.6.1...v0.6.2) 141 | 142 | ## [v0.6.1](https://github.com/simplaio/rucksack/tree/v0.6.1) (2015-08-15) 143 | [Full Changelog](https://github.com/simplaio/rucksack/compare/v0.6.0...v0.6.1) 144 | 145 | **Closed issues:** 146 | 147 | - Use postcss-reporter to output plugin warnings/errors [\#10](https://github.com/simplaio/rucksack/issues/10) 148 | 149 | ## [v0.6.0](https://github.com/simplaio/rucksack/tree/v0.6.0) (2015-08-15) 150 | [Full Changelog](https://github.com/simplaio/rucksack/compare/v0.5.3...v0.6.0) 151 | 152 | ## [v0.5.3](https://github.com/simplaio/rucksack/tree/v0.5.3) (2015-08-08) 153 | [Full Changelog](https://github.com/simplaio/rucksack/compare/v0.5.2...v0.5.3) 154 | 155 | ## [v0.5.2](https://github.com/simplaio/rucksack/tree/v0.5.2) (2015-08-02) 156 | [Full Changelog](https://github.com/simplaio/rucksack/compare/v0.5.1...v0.5.2) 157 | 158 | ## [v0.5.1](https://github.com/simplaio/rucksack/tree/v0.5.1) (2015-08-02) 159 | [Full Changelog](https://github.com/simplaio/rucksack/compare/v0.5.0...v0.5.1) 160 | 161 | ## [v0.5.0](https://github.com/simplaio/rucksack/tree/v0.5.0) (2015-08-02) 162 | [Full Changelog](https://github.com/simplaio/rucksack/compare/v0.4.3...v0.5.0) 163 | 164 | **Closed issues:** 165 | 166 | - Gulp wrapper [\#5](https://github.com/simplaio/rucksack/issues/5) 167 | - CLI tool [\#3](https://github.com/simplaio/rucksack/issues/3) 168 | 169 | ## [v0.4.3](https://github.com/simplaio/rucksack/tree/v0.4.3) (2015-08-02) 170 | [Full Changelog](https://github.com/simplaio/rucksack/compare/v0.4.2...v0.4.3) 171 | 172 | **Closed issues:** 173 | 174 | - Grunt wrapper [\#4](https://github.com/simplaio/rucksack/issues/4) 175 | 176 | ## [v0.4.2](https://github.com/simplaio/rucksack/tree/v0.4.2) (2015-08-02) 177 | [Full Changelog](https://github.com/simplaio/rucksack/compare/v0.4.1...v0.4.2) 178 | 179 | ## [v0.4.1](https://github.com/simplaio/rucksack/tree/v0.4.1) (2015-08-02) 180 | [Full Changelog](https://github.com/simplaio/rucksack/compare/v0.4.0...v0.4.1) 181 | 182 | ## [v0.4.0](https://github.com/simplaio/rucksack/tree/v0.4.0) (2015-07-26) 183 | [Full Changelog](https://github.com/simplaio/rucksack/compare/v0.3.1...v0.4.0) 184 | 185 | **Closed issues:** 186 | 187 | - Remove modular scale [\#8](https://github.com/simplaio/rucksack/issues/8) 188 | - Add postcss-responsive-type [\#7](https://github.com/simplaio/rucksack/issues/7) 189 | 190 | ## [v0.3.1](https://github.com/simplaio/rucksack/tree/v0.3.1) (2015-07-10) 191 | [Full Changelog](https://github.com/simplaio/rucksack/compare/v0.1.1...v0.3.1) 192 | 193 | ## [v0.1.1](https://github.com/simplaio/rucksack/tree/v0.1.1) (2015-07-10) 194 | [Full Changelog](https://github.com/simplaio/rucksack/compare/v0.3.0...v0.1.1) 195 | 196 | **Closed issues:** 197 | 198 | - Write README [\#1](https://github.com/simplaio/rucksack/issues/1) 199 | 200 | ## [v0.3.0](https://github.com/simplaio/rucksack/tree/v0.3.0) (2015-07-08) 201 | 202 | 203 | \* *This Change Log was automatically generated by [github_changelog_generator](https://github.com/skywinder/Github-Changelog-Generator)* -------------------------------------------------------------------------------- /CONTRIBUTORS.md: -------------------------------------------------------------------------------- 1 | # CONTRIBUTORS 2 | Rucksack is a collection of PostCSS plugins. Many were made specifically for Rucksack, some already existed in the PostCSS ecosystem and are bundled with the Rucksack framework, and some are included as optional add-ons. 3 | 4 | Rucksack MIT © 2017 [Sean King](https://twitter.com/seaneking) 5 | 6 | ## Built for Rucksack 7 | 8 | - [postcss-responsive-type][postcss-responsive-type] (MIT © 2017 Sean King) 9 | - [postcss-position][postcss-position] (MIT © 2017 Sean King) 10 | - [postcss-clearfix][postcss-clearfix] (MIT © 2017 Sean King) 11 | - [postcss-input-style][postcss-input-style] (MIT © 2017 Sean King) 12 | - [postcss-fontpath][postcss-fontpath] (MIT © 2017 Sean King) 13 | - [postcss-hexrgba][postcss-hexrgba] (MIT © 2017 Sean King) 14 | 15 | ## Bundled with Rucksack 16 | 17 | - [postcss-quantity-queries][postcss-quantity-queries] (public domain) 18 | - [postcss-easings][postcss-easings] (MIT © 2017 Andrey Sitnik) 19 | 20 | ## Optional Addons 21 | 22 | - [autoprefixer][autoprefixer] (MIT © 2017 Andrey Sitnik) 23 | - [laggard][laggard] (MIT © 2017 Sean King)1 24 | 25 | _[1] Laggard includes other 3rd party plugins, see it's CONTRIBUTORS file for more information_ 26 | 27 | [postcss-responsive-type]: https://github.com/seaneking/postcss-responsive-type 28 | [postcss-position]: https://github.com/seaneking/postcss-position 29 | [postcss-clearfix]: https://github.com/seaneking/postcss-clearfix 30 | [postcss-input-style]: https://github.com/seaneking/postcss-input-style 31 | [postcss-fontpath]: https://github.com/seaneking/postcss-fontpath 32 | [postcss-hexrgba]: https://github.com/seaneking/postcss-hexrgba 33 | 34 | [postcss-quantity-queries]: https://github.com/pascalduez/postcss-quantity-queries 35 | [postcss-easings]: https://github.com/postcss/postcss-easings 36 | 37 | [autoprefixer]: https://github.com/postcss/autoprefixer 38 | [laggard]: https://github.com/seaneking/laggard 39 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | # License 2 | 3 | Copyright 2021 Madeleine Ostoja 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: 6 | 7 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 8 | 9 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 10 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 |

2 | rucksack logo 3 |

4 | 5 |

6 | Build satus 7 | Downloads 8 | NPM version 9 |

10 | 11 | | ℹ️ Rucksack has a successor! | 12 | |:---------------------------| 13 | | **[Satchel](https://www.satchel.style)** is thew new Rucksack, built on CSS-in-JS | 14 | 15 | A little bag of CSS superpowers, built on [PostCSS][postcss]. 16 | 17 | Rucksack makes CSS development less painful, with the features and shortcuts it should have come with out of the box. 18 | 19 | **Read the full docs at [rucksackcss.org/docs](https://rucksackcss.org/docs)** 20 | 21 | ### Contents 22 | 23 | - [Install](#install) 24 | - [Features](#features) 25 | - [Responsive typography](#responsive-typography) 26 | - [Shorthand positioning syntax](#shorthand-positioning-syntax) 27 | - [Native clearfix](#native-clearfix) 28 | - [Automatic font src generation](#automatic-font-src-generation) 29 | - [Extra input pseudo-elements](#extra-input-pseudo-elements) 30 | - [Hex shortcuts for RGBA](#hex-shortcuts-for-rgba) 31 | - [More easing functions](#more-easing-functions) 32 | - [Quantity pseudo-selectors](#quantity-pseudo-selectors) 33 | - [Addons](#addons) 34 | - [Autoprefixer](#autoprefixer) 35 | - [Legacy Fallbacks](#legacy-fallbacks) 36 | - [Usage](#usage) 37 | - [Gulp](#gulp) 38 | - [Webpack](#webpack) 39 | - [Grunt](#grunt) 40 | - [CLI](#cli) 41 | - [Javascript API](#javascript-api) 42 | - [Stylus](#stylus) 43 | - [Options](#options) 44 | 45 | 46 | ## Install 47 | 48 | Rucksack is available on NPM under `rucksack-css` 49 | 50 | 51 | ```sh 52 | $ npm i rucksack-css -D 53 | ``` 54 | 55 | ## Features 56 | 57 | #### Responsive typography 58 | 59 | Automagical fluid typography with new `responsive` arguments to `font-size`, `line-height`, and `letter-spacing` properties 60 | 61 | ```css 62 | .foo { 63 | font-size: responsive; 64 | } 65 | ``` 66 | 67 | ![Responsive Type Demo][type-demo] 68 | 69 | #### Shorthand positioning syntax 70 | 71 | Use the shorthand syntax from `margin` and `padding` on `position` properties 72 | 73 | ```css 74 | .foo { 75 | position: absolute 0 20px; 76 | } 77 | ``` 78 | 79 | #### Native clearfix 80 | 81 | Generate bulletproof clearfixes with a new argument on the `clear` property 82 | 83 | ```css 84 | .foo { 85 | clear: fix; 86 | } 87 | ``` 88 | 89 | #### Automatic font src generation 90 | 91 | Automatically generate `src` sets for `@font-face` based on the path to your font files 92 | 93 | ```css 94 | @font-face { 95 | font-family: 'My Font'; 96 | font-path: '/path/to/font/file'; 97 | } 98 | ``` 99 | 100 | #### Extra input pseudo-elements 101 | 102 | Standardize the unweidly `` element across browsers with new `::track` and `::thumb` pseudo elements 103 | 104 | ```css 105 | input[type="range"]::track { 106 | height: 2px; 107 | } 108 | ``` 109 | 110 | #### Hex shortcuts for RGBA 111 | 112 | Generate RGBA colors from a hex color + alpha value 113 | 114 | ```css 115 | .foo { 116 | color: rgba(#fff, 0.8); 117 | } 118 | ``` 119 | 120 | #### More easing functions 121 | 122 | Use a whole library of modern easing functions in transitions and animations 123 | 124 | ```css 125 | .foo { 126 | transition: all 250ms ease-out-cubic; 127 | } 128 | ``` 129 | 130 | #### Quantity pseudo-selectors 131 | 132 | Create truly responsive designs with powerful content quantity selectors 133 | 134 | ```css 135 | li:at-least(4) { 136 | color: blue; 137 | } 138 | 139 | li:between(4,6) { 140 | color: red; 141 | } 142 | ``` 143 | 144 | ## Addons 145 | 146 | #### Autoprefixer 147 | 148 | Automatically apply vendor prefixes to relevant properties based on data from [CanIUse][caniuse], via [autoprefixer][autoprefixer]. 149 | 150 | #### Legacy Fallbacks 151 | 152 | Automatically generate CSS fallbacks for legacy browsers, via [laggard][laggard]. 153 | 154 | ## Usage 155 | 156 | Rucksack is built on [PostCSS][postcss], and can be used in most build tools and stacks easily. 157 | 158 | #### Gulp 159 | 160 | Use [gulp-postcss][gulp-postcss] 161 | 162 | ```js 163 | const gulp = require('gulp'); 164 | const postcss = require('gulp-postcss'); 165 | const rucksack = require('rucksack-css'); 166 | 167 | gulp.task('rucksack', () => { 168 | return gulp.src('src/*.css') 169 | .pipe(postcss([ rucksack() ])) 170 | .pipe(gulp.dest('dist')); 171 | }); 172 | ``` 173 | 174 | #### Webpack 175 | 176 | Use [postcss-loader][postcss-loader] 177 | 178 | `postcss.config.js` 179 | 180 | ```js 181 | module.exports = { 182 | plugins: { 183 | 'rucksack-css': {}, 184 | } 185 | }; 186 | ``` 187 | 188 | `webpack.config.js` 189 | 190 | ```js 191 | module.exports = { 192 | module: { 193 | rules: [ 194 | { 195 | test: /\.css$/, 196 | use: [ 'style-loader', 'postcss-loader' ] 197 | } 198 | ] 199 | } 200 | }; 201 | ``` 202 | 203 | #### Grunt 204 | 205 | Use [grunt-postcss][grunt-postcss] 206 | 207 | ```js 208 | grunt.initConfig({ 209 | postcss: { 210 | options: { 211 | processors: [ 212 | require('rucksack-css')() 213 | ] 214 | }, 215 | dist: { 216 | src: 'css/*.css' 217 | } 218 | } 219 | }); 220 | ``` 221 | 222 | #### CLI 223 | 224 | Use Rucksack on the command line with [postcss-cli][postcss-cli] 225 | 226 | ```sh 227 | $ npm i postcss-cli -g 228 | ``` 229 | 230 | `postcss.config.js` 231 | 232 | ```js 233 | module.exports = { 234 | use: [ 'rucksack-css' ] 235 | }; 236 | ``` 237 | 238 | ```sh 239 | $ postcss "input.css" -o 'output.css' 240 | ``` 241 | 242 | > **Note:** Rucksack currently ships with its own CLI tool, this will be deprecated in favor of using the more powerful PostCSS CLI directly in Rucksack 2 243 | 244 | #### Javascript API 245 | 246 | Since Rucksack is just a PostCSS plugin, you can also use it in JS/Node directly, via the PostCSS API 247 | 248 | ```js 249 | const postcss = require('postcss'); 250 | const rucksack = require('rucksack-css'); 251 | 252 | postcss([ rucksack() ]) 253 | .process(css, { from: 'src/style.css', to: 'style.css' }) 254 | .then(result => { 255 | fs.writeFileSync('style.css', result.css); 256 | if ( result.map ) fs.writeFileSync('style.css.map', result.map); 257 | }); 258 | ``` 259 | 260 | See the [PostCSS Docs][postcss] for examples for your environment. 261 | 262 | #### Stylus 263 | 264 | Rucksack can be used as a Stylus plugin with [PostStylus][poststylus] 265 | 266 | ```js 267 | stylus(css).use(poststylus('rucksack-css')) 268 | ``` 269 | 270 | See the [PostStylus Docs][poststylus] for more examples for your environment. 271 | 272 | ## Options 273 | 274 | All features in Rucksack can be toggled by passing options on initialization. By default core features are set to `true`, and optional 275 | addons are set to `false` 276 | 277 | Option | Type | Default | Description 278 | ------------------- | ------- | ------- | ----------- 279 | `responsiveType` | Boolean | `true` | Whether to enable responsive typography 280 | `shorthandPosition` | Boolean | `true` | Whether to enable shorthand position properties 281 | `quantityQueries` | Boolean | `true` | Whether to enable quantity query pseudo selectors 282 | `inputPseudo` | Boolean | `true` | Whether to enable whether to enable extra input pseudo elements 283 | `clearFix` | Boolean | `true` | Whether to enable native clear fix 284 | `fontPath` | Boolean | `true` | Whether to enable font `src` set generation 285 | `hexRGBA` | Boolean | `true` | Whether to enable hex RGBA shortcuts 286 | `easings` | Boolean | `true` | Whether to enable extra easing functions 287 | `fallbacks` | Boolean | `false` | Whether to enable CSS fallbacks addon 288 | `autoprefixer` | Boolean | `false` | Whether to enable autoprefixer addon 289 | `reporter` | Boolean | `false` | Whether to enable error reporting from plugins used inside Rucksack 290 | 291 | *** 292 | 293 | MIT © [Madeleine Ostoja][madi] 294 | 295 | [postcss]: https://github.com/postcss/postcss 296 | [postcss-loader]: https://github.com/postcss/postcss-loader 297 | [gulp-postcss]: https://github.com/postcss/gulp-postcss 298 | [grunt-postcss]: https://github.com/nDmitry/grunt-postcss 299 | [postcss-cli]: https://github.com/postcss/postcss-cli 300 | [poststylus]: https://github.com/madeleineostoja/poststylus 301 | [type-demo]: https://rucksackcss.org/img/type-demo.gif 302 | [caniuse]: http://caniuse.com 303 | [autoprefixer]: https://github.com/postcss/autoprefixer 304 | [laggard]: https://github.com/madeleineostoja/laggard 305 | [madi]: https://twitter.com/madeleineostoja 306 | -------------------------------------------------------------------------------- /bin/cmd.js: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | /*eslint no-console: 0, no-undef: 0*/ 3 | 4 | 'use strict'; 5 | 6 | const fs = require('fs'); 7 | const read = require('read-file-stdin'); 8 | const write = require('write-file-stdout'); 9 | const minimist = require('minimist'); 10 | const rucksack = require('../'); 11 | 12 | const OPTS = minimist(process.argv.slice(2), { 13 | boolean: [ 's', 'autoprefixer', 'fallbacks' ], 14 | alias: { 15 | h: 'help', 16 | s: 'sourcemap', 17 | v: 'version' 18 | } 19 | }), 20 | FILE = OPTS._[0], 21 | OUT = OPTS._[1]; 22 | 23 | // Fetch verion from package.json 24 | if (OPTS.version) { 25 | return console.log(require('../package.json').version); 26 | } 27 | 28 | // Pipe out help doc from help.txt 29 | if (FILE === 'help' || OPTS.help) { 30 | return fs.createReadStream(path.join(__dirname, '/help.txt')) 31 | .pipe(process.stdout) 32 | .on('close', () => process.exit(1)); 33 | } 34 | 35 | read(FILE, function (err, buf) { 36 | if (err) { 37 | throw err; 38 | } 39 | rucksack.process(String(buf), { from: FILE, to: OUT }).then(function (result) { 40 | write(OUT, result.css); 41 | if (OPTS.map && OPTS.to) { 42 | fs.writeFile(OPTS.to + '.map', result.map.toString()); 43 | } 44 | }).catch((err) => { 45 | console.error(err); 46 | process.exit(1); 47 | }); 48 | }); -------------------------------------------------------------------------------- /bin/help.txt: -------------------------------------------------------------------------------- 1 | Usage: rucksack [input] [output] {OPTIONS} 2 | 3 | Options: 4 | 5 | --autoprefixer Enable automatic vendor prefixing. 6 | 7 | --fallbacks Enable legacy fallbacks. 8 | 9 | --version, -v Show the version number. 10 | 11 | --help, -h Show this help screen. 12 | -------------------------------------------------------------------------------- /index.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | const postcss = require('postcss'); 4 | 5 | const PLUGINS = [ 6 | { 7 | option: 'responsiveType', 8 | module: require('postcss-responsive-type') 9 | }, 10 | { 11 | option: 'shorthandPosition', 12 | module: require('postcss-position') 13 | }, 14 | { 15 | option: 'quantityQueries', 16 | module: require('postcss-quantity-queries') 17 | }, 18 | { 19 | option: 'inputPseudo', 20 | module: require('postcss-input-style') 21 | }, 22 | { 23 | option: 'clearFix', 24 | module: require('postcss-clearfix') 25 | }, 26 | { 27 | option: 'fontPath', 28 | module: require('postcss-fontpath') 29 | }, 30 | { 31 | option: 'hexRGBA', 32 | module: require('postcss-hexrgba') 33 | }, 34 | { 35 | option: 'easings', 36 | module: require('postcss-easings') 37 | }, 38 | { 39 | option: 'fallbacks', 40 | module: require('laggard') 41 | }, 42 | { 43 | option: 'autoprefixer', 44 | module: require('autoprefixer') 45 | }, 46 | { 47 | option: 'reporter', 48 | module: require('postcss-reporter') 49 | } 50 | ], 51 | DEFAULTS = { 52 | responsiveType: true, 53 | shorthandPosition: true, 54 | quantityQueries: true, 55 | inputPseudo: true, 56 | clearFix: true, 57 | fontPath: true, 58 | hexRGBA: true, 59 | easings: true, 60 | autoprefixer: false, 61 | fallbacks: false, 62 | reporter: false 63 | }; 64 | 65 | // Export plugin bundle 66 | module.exports = postcss.plugin('rucksack', opts => { 67 | opts = opts || {}; 68 | 69 | let config = Object.assign({}, DEFAULTS, opts), 70 | bundle = postcss(); 71 | 72 | PLUGINS.forEach(plugin => { 73 | config[plugin.option] && bundle.use(plugin.module); 74 | }); 75 | 76 | return bundle; 77 | }); -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "rucksack-css", 3 | "version": "1.0.2", 4 | "lockfileVersion": 1, 5 | "requires": true, 6 | "dependencies": { 7 | "acorn": { 8 | "version": "5.2.1", 9 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.2.1.tgz", 10 | "integrity": "sha512-jG0u7c4Ly+3QkkW18V+NRDN+4bWHdln30NL1ZL2AvFZZmQe/BfopYCtghCKKVBUSetZ4QKcyA0pY6/4Gw8Pv8w==", 11 | "dev": true 12 | }, 13 | "acorn-jsx": { 14 | "version": "3.0.1", 15 | "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-3.0.1.tgz", 16 | "integrity": "sha1-r9+UiPsezvyDSPb7IvRk4ypYs2s=", 17 | "dev": true, 18 | "requires": { 19 | "acorn": "3.3.0" 20 | }, 21 | "dependencies": { 22 | "acorn": { 23 | "version": "3.3.0", 24 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-3.3.0.tgz", 25 | "integrity": "sha1-ReN/s56No/JbruP/U2niu18iAXo=", 26 | "dev": true 27 | } 28 | } 29 | }, 30 | "ajv": { 31 | "version": "5.3.0", 32 | "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.3.0.tgz", 33 | "integrity": "sha1-RBT/dKUIecII7l/cgm4ywwNUnto=", 34 | "dev": true, 35 | "requires": { 36 | "co": "4.6.0", 37 | "fast-deep-equal": "1.0.0", 38 | "fast-json-stable-stringify": "2.0.0", 39 | "json-schema-traverse": "0.3.1" 40 | } 41 | }, 42 | "ajv-keywords": { 43 | "version": "2.1.1", 44 | "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-2.1.1.tgz", 45 | "integrity": "sha1-YXmX/F9gV2iUxDX5QNgZ4TW4B2I=", 46 | "dev": true 47 | }, 48 | "ansi-escapes": { 49 | "version": "3.0.0", 50 | "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.0.0.tgz", 51 | "integrity": "sha512-O/klc27mWNUigtv0F8NJWbLF00OcegQalkqKURWdosW08YZKi4m6CnSUSvIZG1otNJbTWhN01Hhz389DW7mvDQ==", 52 | "dev": true 53 | }, 54 | "ansi-regex": { 55 | "version": "2.1.1", 56 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", 57 | "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", 58 | "dev": true 59 | }, 60 | "ansi-styles": { 61 | "version": "3.2.0", 62 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", 63 | "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", 64 | "requires": { 65 | "color-convert": "1.9.1" 66 | } 67 | }, 68 | "argparse": { 69 | "version": "1.0.9", 70 | "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.9.tgz", 71 | "integrity": "sha1-c9g7wmP4bpf4zE9rrhsOkKfSLIY=", 72 | "dev": true, 73 | "requires": { 74 | "sprintf-js": "1.0.3" 75 | } 76 | }, 77 | "array-union": { 78 | "version": "1.0.2", 79 | "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", 80 | "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", 81 | "dev": true, 82 | "requires": { 83 | "array-uniq": "1.0.3" 84 | } 85 | }, 86 | "array-uniq": { 87 | "version": "1.0.3", 88 | "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", 89 | "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=", 90 | "dev": true 91 | }, 92 | "arrify": { 93 | "version": "1.0.1", 94 | "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", 95 | "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", 96 | "dev": true 97 | }, 98 | "assertion-error": { 99 | "version": "1.0.2", 100 | "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.0.2.tgz", 101 | "integrity": "sha1-E8pRXYYgbaC6xm6DTdOX2HWBCUw=", 102 | "dev": true 103 | }, 104 | "autoprefixer": { 105 | "version": "7.1.6", 106 | "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-7.1.6.tgz", 107 | "integrity": "sha512-C9yv/UF3X+eJTi/zvfxuyfxmLibYrntpF3qoJYrMeQwgUJOZrZvpJiMG2FMQ3qnhWtF/be4pYONBBw95ZGe3vA==", 108 | "requires": { 109 | "browserslist": "2.8.0", 110 | "caniuse-lite": "1.0.30000760", 111 | "normalize-range": "0.1.2", 112 | "num2fraction": "1.2.2", 113 | "postcss": "6.0.14", 114 | "postcss-value-parser": "3.3.0" 115 | } 116 | }, 117 | "babel-code-frame": { 118 | "version": "6.26.0", 119 | "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", 120 | "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", 121 | "dev": true, 122 | "requires": { 123 | "chalk": "1.1.3", 124 | "esutils": "2.0.2", 125 | "js-tokens": "3.0.2" 126 | }, 127 | "dependencies": { 128 | "ansi-styles": { 129 | "version": "2.2.1", 130 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", 131 | "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", 132 | "dev": true 133 | }, 134 | "chalk": { 135 | "version": "1.1.3", 136 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", 137 | "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", 138 | "dev": true, 139 | "requires": { 140 | "ansi-styles": "2.2.1", 141 | "escape-string-regexp": "1.0.5", 142 | "has-ansi": "2.0.0", 143 | "strip-ansi": "3.0.1", 144 | "supports-color": "2.0.0" 145 | } 146 | }, 147 | "strip-ansi": { 148 | "version": "3.0.1", 149 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", 150 | "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", 151 | "dev": true, 152 | "requires": { 153 | "ansi-regex": "2.1.1" 154 | } 155 | }, 156 | "supports-color": { 157 | "version": "2.0.0", 158 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", 159 | "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", 160 | "dev": true 161 | } 162 | } 163 | }, 164 | "balanced-match": { 165 | "version": "0.4.2", 166 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.4.2.tgz", 167 | "integrity": "sha1-yz8+PHMtwPAe5wtAPzAuYddwmDg=" 168 | }, 169 | "brace-expansion": { 170 | "version": "1.1.8", 171 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz", 172 | "integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=", 173 | "dev": true, 174 | "requires": { 175 | "balanced-match": "1.0.0", 176 | "concat-map": "0.0.1" 177 | }, 178 | "dependencies": { 179 | "balanced-match": { 180 | "version": "1.0.0", 181 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", 182 | "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", 183 | "dev": true 184 | } 185 | } 186 | }, 187 | "browser-stdout": { 188 | "version": "1.3.0", 189 | "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.0.tgz", 190 | "integrity": "sha1-81HTKWnTL6XXpVZxVCY9korjvR8=", 191 | "dev": true 192 | }, 193 | "browserslist": { 194 | "version": "2.8.0", 195 | "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-2.8.0.tgz", 196 | "integrity": "sha512-iiWHM1Et6Q4TQpB7Ar6pxuM3TNMXasVJY4Y/oh3q38EwR3Z+IdZ9MyVf7PI4MJFB4xpwMcZgs9bEUnPG2E3TCA==", 197 | "requires": { 198 | "caniuse-lite": "1.0.30000760", 199 | "electron-to-chromium": "1.3.27" 200 | } 201 | }, 202 | "caller-path": { 203 | "version": "0.1.0", 204 | "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-0.1.0.tgz", 205 | "integrity": "sha1-lAhe9jWB7NPaqSREqP6U6CV3dR8=", 206 | "dev": true, 207 | "requires": { 208 | "callsites": "0.2.0" 209 | } 210 | }, 211 | "callsites": { 212 | "version": "0.2.0", 213 | "resolved": "https://registry.npmjs.org/callsites/-/callsites-0.2.0.tgz", 214 | "integrity": "sha1-r6uWJikQp/M8GaV3WCXGnzTjUMo=", 215 | "dev": true 216 | }, 217 | "caniuse-lite": { 218 | "version": "1.0.30000760", 219 | "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000760.tgz", 220 | "integrity": "sha1-7HIDlXQvHH7IlH/W3SYE53qPmP8=" 221 | }, 222 | "chai": { 223 | "version": "4.1.2", 224 | "resolved": "https://registry.npmjs.org/chai/-/chai-4.1.2.tgz", 225 | "integrity": "sha1-D2RYS6ZC8PKs4oBiefTwbKI61zw=", 226 | "dev": true, 227 | "requires": { 228 | "assertion-error": "1.0.2", 229 | "check-error": "1.0.2", 230 | "deep-eql": "3.0.1", 231 | "get-func-name": "2.0.0", 232 | "pathval": "1.1.0", 233 | "type-detect": "4.0.5" 234 | } 235 | }, 236 | "chalk": { 237 | "version": "2.3.0", 238 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.0.tgz", 239 | "integrity": "sha512-Az5zJR2CBujap2rqXGaJKaPHyJ0IrUimvYNX+ncCy8PJP4ltOGTrHUIo097ZaL2zMeKYpiCdqDvS6zdrTFok3Q==", 240 | "requires": { 241 | "ansi-styles": "3.2.0", 242 | "escape-string-regexp": "1.0.5", 243 | "supports-color": "4.5.0" 244 | } 245 | }, 246 | "check-error": { 247 | "version": "1.0.2", 248 | "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", 249 | "integrity": "sha1-V00xLt2Iu13YkS6Sht1sCu1KrII=", 250 | "dev": true 251 | }, 252 | "circular-json": { 253 | "version": "0.3.3", 254 | "resolved": "https://registry.npmjs.org/circular-json/-/circular-json-0.3.3.tgz", 255 | "integrity": "sha512-UZK3NBx2Mca+b5LsG7bY183pHWt5Y1xts4P3Pz7ENTwGVnJOUWbRb3ocjvX7hx9tq/yTAdclXm9sZ38gNuem4A==", 256 | "dev": true 257 | }, 258 | "cli-cursor": { 259 | "version": "2.1.0", 260 | "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", 261 | "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", 262 | "dev": true, 263 | "requires": { 264 | "restore-cursor": "2.0.0" 265 | } 266 | }, 267 | "cli-width": { 268 | "version": "2.2.0", 269 | "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz", 270 | "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=", 271 | "dev": true 272 | }, 273 | "co": { 274 | "version": "4.6.0", 275 | "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", 276 | "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", 277 | "dev": true 278 | }, 279 | "color-convert": { 280 | "version": "1.9.1", 281 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.1.tgz", 282 | "integrity": "sha512-mjGanIiwQJskCC18rPR6OmrZ6fm2Lc7PeGFYwCmy5J34wC6F1PzdGL6xeMfmgicfYcNLGuVFA3WzXtIDCQSZxQ==", 283 | "requires": { 284 | "color-name": "1.1.3" 285 | } 286 | }, 287 | "color-name": { 288 | "version": "1.1.3", 289 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", 290 | "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" 291 | }, 292 | "commander": { 293 | "version": "2.9.0", 294 | "resolved": "https://registry.npmjs.org/commander/-/commander-2.9.0.tgz", 295 | "integrity": "sha1-nJkJQXbhIkDLItbFFGCYQA/g99Q=", 296 | "dev": true, 297 | "requires": { 298 | "graceful-readlink": "1.0.1" 299 | } 300 | }, 301 | "concat-map": { 302 | "version": "0.0.1", 303 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 304 | "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", 305 | "dev": true 306 | }, 307 | "concat-stream": { 308 | "version": "1.6.0", 309 | "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.0.tgz", 310 | "integrity": "sha1-CqxmL9Ur54lk1VMvaUeE5wEQrPc=", 311 | "dev": true, 312 | "requires": { 313 | "inherits": "2.0.3", 314 | "readable-stream": "2.3.3", 315 | "typedarray": "0.0.6" 316 | } 317 | }, 318 | "core-util-is": { 319 | "version": "1.0.2", 320 | "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", 321 | "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", 322 | "dev": true 323 | }, 324 | "cross-spawn": { 325 | "version": "5.1.0", 326 | "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", 327 | "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", 328 | "dev": true, 329 | "requires": { 330 | "lru-cache": "4.1.1", 331 | "shebang-command": "1.2.0", 332 | "which": "1.3.0" 333 | } 334 | }, 335 | "debug": { 336 | "version": "3.1.0", 337 | "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", 338 | "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", 339 | "dev": true, 340 | "requires": { 341 | "ms": "2.0.0" 342 | } 343 | }, 344 | "deep-eql": { 345 | "version": "3.0.1", 346 | "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz", 347 | "integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==", 348 | "dev": true, 349 | "requires": { 350 | "type-detect": "4.0.5" 351 | } 352 | }, 353 | "deep-is": { 354 | "version": "0.1.3", 355 | "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", 356 | "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", 357 | "dev": true 358 | }, 359 | "del": { 360 | "version": "2.2.2", 361 | "resolved": "https://registry.npmjs.org/del/-/del-2.2.2.tgz", 362 | "integrity": "sha1-wSyYHQZ4RshLyvhiz/kw2Qf/0ag=", 363 | "dev": true, 364 | "requires": { 365 | "globby": "5.0.0", 366 | "is-path-cwd": "1.0.0", 367 | "is-path-in-cwd": "1.0.0", 368 | "object-assign": "4.1.1", 369 | "pify": "2.3.0", 370 | "pinkie-promise": "2.0.1", 371 | "rimraf": "2.6.2" 372 | } 373 | }, 374 | "diff": { 375 | "version": "3.2.0", 376 | "resolved": "https://registry.npmjs.org/diff/-/diff-3.2.0.tgz", 377 | "integrity": "sha1-yc45Okt8vQsFinJck98pkCeGj/k=", 378 | "dev": true 379 | }, 380 | "doctrine": { 381 | "version": "2.0.0", 382 | "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.0.0.tgz", 383 | "integrity": "sha1-xz2NKQnSIpHhoAejlYBNqLZl/mM=", 384 | "dev": true, 385 | "requires": { 386 | "esutils": "2.0.2", 387 | "isarray": "1.0.0" 388 | } 389 | }, 390 | "electron-to-chromium": { 391 | "version": "1.3.27", 392 | "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.27.tgz", 393 | "integrity": "sha1-eOy4o5kGYYe7N07t412ccFZagD0=" 394 | }, 395 | "escape-string-regexp": { 396 | "version": "1.0.5", 397 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", 398 | "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" 399 | }, 400 | "eslint": { 401 | "version": "4.11.0", 402 | "resolved": "https://registry.npmjs.org/eslint/-/eslint-4.11.0.tgz", 403 | "integrity": "sha512-UWbhQpaKlm8h5x/VLwm0S1kheMrDj8jPwhnBMjr/Dlo3qqT7MvcN/UfKAR3E1N4lr4YNtOvS4m3hwsrVc/ky7g==", 404 | "dev": true, 405 | "requires": { 406 | "ajv": "5.3.0", 407 | "babel-code-frame": "6.26.0", 408 | "chalk": "2.3.0", 409 | "concat-stream": "1.6.0", 410 | "cross-spawn": "5.1.0", 411 | "debug": "3.1.0", 412 | "doctrine": "2.0.0", 413 | "eslint-scope": "3.7.1", 414 | "espree": "3.5.2", 415 | "esquery": "1.0.0", 416 | "estraverse": "4.2.0", 417 | "esutils": "2.0.2", 418 | "file-entry-cache": "2.0.0", 419 | "functional-red-black-tree": "1.0.1", 420 | "glob": "7.1.2", 421 | "globals": "9.18.0", 422 | "ignore": "3.3.7", 423 | "imurmurhash": "0.1.4", 424 | "inquirer": "3.3.0", 425 | "is-resolvable": "1.0.0", 426 | "js-yaml": "3.10.0", 427 | "json-stable-stringify-without-jsonify": "1.0.1", 428 | "levn": "0.3.0", 429 | "lodash": "4.17.4", 430 | "minimatch": "3.0.4", 431 | "mkdirp": "0.5.1", 432 | "natural-compare": "1.4.0", 433 | "optionator": "0.8.2", 434 | "path-is-inside": "1.0.2", 435 | "pluralize": "7.0.0", 436 | "progress": "2.0.0", 437 | "require-uncached": "1.0.3", 438 | "semver": "5.4.1", 439 | "strip-ansi": "4.0.0", 440 | "strip-json-comments": "2.0.1", 441 | "table": "4.0.2", 442 | "text-table": "0.2.0" 443 | } 444 | }, 445 | "eslint-scope": { 446 | "version": "3.7.1", 447 | "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-3.7.1.tgz", 448 | "integrity": "sha1-PWPD7f2gLgbgGkUq2IyqzHzctug=", 449 | "dev": true, 450 | "requires": { 451 | "esrecurse": "4.2.0", 452 | "estraverse": "4.2.0" 453 | } 454 | }, 455 | "espree": { 456 | "version": "3.5.2", 457 | "resolved": "https://registry.npmjs.org/espree/-/espree-3.5.2.tgz", 458 | "integrity": "sha512-sadKeYwaR/aJ3stC2CdvgXu1T16TdYN+qwCpcWbMnGJ8s0zNWemzrvb2GbD4OhmJ/fwpJjudThAlLobGbWZbCQ==", 459 | "dev": true, 460 | "requires": { 461 | "acorn": "5.2.1", 462 | "acorn-jsx": "3.0.1" 463 | } 464 | }, 465 | "esprima": { 466 | "version": "4.0.0", 467 | "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.0.tgz", 468 | "integrity": "sha512-oftTcaMu/EGrEIu904mWteKIv8vMuOgGYo7EhVJJN00R/EED9DCua/xxHRdYnKtcECzVg7xOWhflvJMnqcFZjw==", 469 | "dev": true 470 | }, 471 | "esquery": { 472 | "version": "1.0.0", 473 | "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.0.0.tgz", 474 | "integrity": "sha1-z7qLV9f7qT8XKYqKAGoEzaE9gPo=", 475 | "dev": true, 476 | "requires": { 477 | "estraverse": "4.2.0" 478 | } 479 | }, 480 | "esrecurse": { 481 | "version": "4.2.0", 482 | "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.0.tgz", 483 | "integrity": "sha1-+pVo2Y04I/mkHZHpAtyrnqblsWM=", 484 | "dev": true, 485 | "requires": { 486 | "estraverse": "4.2.0", 487 | "object-assign": "4.1.1" 488 | } 489 | }, 490 | "estraverse": { 491 | "version": "4.2.0", 492 | "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz", 493 | "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=", 494 | "dev": true 495 | }, 496 | "esutils": { 497 | "version": "2.0.2", 498 | "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", 499 | "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", 500 | "dev": true 501 | }, 502 | "external-editor": { 503 | "version": "2.0.5", 504 | "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-2.0.5.tgz", 505 | "integrity": "sha512-Msjo64WT5W+NhOpQXh0nOHm+n0RfU1QUwDnKYvJ8dEJ8zlwLrqXNTv5mSUTJpepf41PDJGyhueTw2vNZW+Fr/w==", 506 | "dev": true, 507 | "requires": { 508 | "iconv-lite": "0.4.19", 509 | "jschardet": "1.6.0", 510 | "tmp": "0.0.33" 511 | } 512 | }, 513 | "fast-deep-equal": { 514 | "version": "1.0.0", 515 | "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.0.0.tgz", 516 | "integrity": "sha1-liVqO8l1WV6zbYLpkp0GDYk0Of8=", 517 | "dev": true 518 | }, 519 | "fast-json-stable-stringify": { 520 | "version": "2.0.0", 521 | "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", 522 | "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=", 523 | "dev": true 524 | }, 525 | "fast-levenshtein": { 526 | "version": "2.0.6", 527 | "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", 528 | "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", 529 | "dev": true 530 | }, 531 | "figures": { 532 | "version": "2.0.0", 533 | "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", 534 | "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", 535 | "dev": true, 536 | "requires": { 537 | "escape-string-regexp": "1.0.5" 538 | } 539 | }, 540 | "file-entry-cache": { 541 | "version": "2.0.0", 542 | "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-2.0.0.tgz", 543 | "integrity": "sha1-w5KZDD5oR4PYOLjISkXYoEhFg2E=", 544 | "dev": true, 545 | "requires": { 546 | "flat-cache": "1.3.0", 547 | "object-assign": "4.1.1" 548 | } 549 | }, 550 | "flat-cache": { 551 | "version": "1.3.0", 552 | "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-1.3.0.tgz", 553 | "integrity": "sha1-0wMLMrOBVPTjt+nHCfSQ9++XxIE=", 554 | "dev": true, 555 | "requires": { 556 | "circular-json": "0.3.3", 557 | "del": "2.2.2", 558 | "graceful-fs": "4.1.11", 559 | "write": "0.2.1" 560 | } 561 | }, 562 | "fs.realpath": { 563 | "version": "1.0.0", 564 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", 565 | "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", 566 | "dev": true 567 | }, 568 | "functional-red-black-tree": { 569 | "version": "1.0.1", 570 | "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", 571 | "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", 572 | "dev": true 573 | }, 574 | "gather-stream": { 575 | "version": "1.0.0", 576 | "resolved": "https://registry.npmjs.org/gather-stream/-/gather-stream-1.0.0.tgz", 577 | "integrity": "sha1-szmUr0V6gRVwDUEPMXczy+egkEs=" 578 | }, 579 | "get-func-name": { 580 | "version": "2.0.0", 581 | "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz", 582 | "integrity": "sha1-6td0q+5y4gQJQzoGY2YCPdaIekE=", 583 | "dev": true 584 | }, 585 | "glob": { 586 | "version": "7.1.2", 587 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", 588 | "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", 589 | "dev": true, 590 | "requires": { 591 | "fs.realpath": "1.0.0", 592 | "inflight": "1.0.6", 593 | "inherits": "2.0.3", 594 | "minimatch": "3.0.4", 595 | "once": "1.4.0", 596 | "path-is-absolute": "1.0.1" 597 | } 598 | }, 599 | "globals": { 600 | "version": "9.18.0", 601 | "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz", 602 | "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==", 603 | "dev": true 604 | }, 605 | "globby": { 606 | "version": "5.0.0", 607 | "resolved": "https://registry.npmjs.org/globby/-/globby-5.0.0.tgz", 608 | "integrity": "sha1-69hGZ8oNuzMLmbz8aOrCvFQ3Dg0=", 609 | "dev": true, 610 | "requires": { 611 | "array-union": "1.0.2", 612 | "arrify": "1.0.1", 613 | "glob": "7.1.2", 614 | "object-assign": "4.1.1", 615 | "pify": "2.3.0", 616 | "pinkie-promise": "2.0.1" 617 | } 618 | }, 619 | "graceful-fs": { 620 | "version": "4.1.11", 621 | "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", 622 | "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", 623 | "dev": true 624 | }, 625 | "graceful-readlink": { 626 | "version": "1.0.1", 627 | "resolved": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz", 628 | "integrity": "sha1-TK+tdrxi8C+gObL5Tpo906ORpyU=", 629 | "dev": true 630 | }, 631 | "growl": { 632 | "version": "1.9.2", 633 | "resolved": "https://registry.npmjs.org/growl/-/growl-1.9.2.tgz", 634 | "integrity": "sha1-Dqd0NxXbjY3ixe3hd14bRayFwC8=", 635 | "dev": true 636 | }, 637 | "has-ansi": { 638 | "version": "2.0.0", 639 | "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", 640 | "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", 641 | "dev": true, 642 | "requires": { 643 | "ansi-regex": "2.1.1" 644 | } 645 | }, 646 | "has-flag": { 647 | "version": "2.0.0", 648 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", 649 | "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=" 650 | }, 651 | "he": { 652 | "version": "1.1.1", 653 | "resolved": "https://registry.npmjs.org/he/-/he-1.1.1.tgz", 654 | "integrity": "sha1-k0EP0hsAlzUVH4howvJx80J+I/0=", 655 | "dev": true 656 | }, 657 | "iconv-lite": { 658 | "version": "0.4.19", 659 | "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.19.tgz", 660 | "integrity": "sha512-oTZqweIP51xaGPI4uPa56/Pri/480R+mo7SeU+YETByQNhDG55ycFyNLIgta9vXhILrxXDmF7ZGhqZIcuN0gJQ==", 661 | "dev": true 662 | }, 663 | "ignore": { 664 | "version": "3.3.7", 665 | "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.7.tgz", 666 | "integrity": "sha512-YGG3ejvBNHRqu0559EOxxNFihD0AjpvHlC/pdGKd3X3ofe+CoJkYazwNJYTNebqpPKN+VVQbh4ZFn1DivMNuHA==", 667 | "dev": true 668 | }, 669 | "imurmurhash": { 670 | "version": "0.1.4", 671 | "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", 672 | "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", 673 | "dev": true 674 | }, 675 | "inflight": { 676 | "version": "1.0.6", 677 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", 678 | "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", 679 | "dev": true, 680 | "requires": { 681 | "once": "1.4.0", 682 | "wrappy": "1.0.2" 683 | } 684 | }, 685 | "inherits": { 686 | "version": "2.0.3", 687 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", 688 | "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", 689 | "dev": true 690 | }, 691 | "inquirer": { 692 | "version": "3.3.0", 693 | "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-3.3.0.tgz", 694 | "integrity": "sha512-h+xtnyk4EwKvFWHrUYsWErEVR+igKtLdchu+o0Z1RL7VU/jVMFbYir2bp6bAj8efFNxWqHX0dIss6fJQ+/+qeQ==", 695 | "dev": true, 696 | "requires": { 697 | "ansi-escapes": "3.0.0", 698 | "chalk": "2.3.0", 699 | "cli-cursor": "2.1.0", 700 | "cli-width": "2.2.0", 701 | "external-editor": "2.0.5", 702 | "figures": "2.0.0", 703 | "lodash": "4.17.4", 704 | "mute-stream": "0.0.7", 705 | "run-async": "2.3.0", 706 | "rx-lite": "4.0.8", 707 | "rx-lite-aggregates": "4.0.8", 708 | "string-width": "2.1.1", 709 | "strip-ansi": "4.0.0", 710 | "through": "2.3.8" 711 | } 712 | }, 713 | "is-fullwidth-code-point": { 714 | "version": "2.0.0", 715 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", 716 | "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", 717 | "dev": true 718 | }, 719 | "is-path-cwd": { 720 | "version": "1.0.0", 721 | "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz", 722 | "integrity": "sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0=", 723 | "dev": true 724 | }, 725 | "is-path-in-cwd": { 726 | "version": "1.0.0", 727 | "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.0.tgz", 728 | "integrity": "sha1-ZHdYK4IU1gI0YJRWcAO+ip6sBNw=", 729 | "dev": true, 730 | "requires": { 731 | "is-path-inside": "1.0.0" 732 | } 733 | }, 734 | "is-path-inside": { 735 | "version": "1.0.0", 736 | "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.0.tgz", 737 | "integrity": "sha1-/AbloWg/vaE95mev9xe7wQpI838=", 738 | "dev": true, 739 | "requires": { 740 | "path-is-inside": "1.0.2" 741 | } 742 | }, 743 | "is-promise": { 744 | "version": "2.1.0", 745 | "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz", 746 | "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=", 747 | "dev": true 748 | }, 749 | "is-resolvable": { 750 | "version": "1.0.0", 751 | "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.0.0.tgz", 752 | "integrity": "sha1-jfV8YeouPFAUCNEA+wE8+NbgzGI=", 753 | "dev": true, 754 | "requires": { 755 | "tryit": "1.0.3" 756 | } 757 | }, 758 | "isarray": { 759 | "version": "1.0.0", 760 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", 761 | "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", 762 | "dev": true 763 | }, 764 | "isexe": { 765 | "version": "2.0.0", 766 | "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", 767 | "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", 768 | "dev": true 769 | }, 770 | "js-tokens": { 771 | "version": "3.0.2", 772 | "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", 773 | "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=", 774 | "dev": true 775 | }, 776 | "js-yaml": { 777 | "version": "3.10.0", 778 | "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.10.0.tgz", 779 | "integrity": "sha512-O2v52ffjLa9VeM43J4XocZE//WT9N0IiwDa3KSHH7Tu8CtH+1qM8SIZvnsTh6v+4yFy5KUY3BHUVwjpfAWsjIA==", 780 | "dev": true, 781 | "requires": { 782 | "argparse": "1.0.9", 783 | "esprima": "4.0.0" 784 | } 785 | }, 786 | "jschardet": { 787 | "version": "1.6.0", 788 | "resolved": "https://registry.npmjs.org/jschardet/-/jschardet-1.6.0.tgz", 789 | "integrity": "sha512-xYuhvQ7I9PDJIGBWev9xm0+SMSed3ZDBAmvVjbFR1ZRLAF+vlXcQu6cRI9uAlj81rzikElRVteehwV7DuX2ZmQ==", 790 | "dev": true 791 | }, 792 | "json-schema-traverse": { 793 | "version": "0.3.1", 794 | "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz", 795 | "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=", 796 | "dev": true 797 | }, 798 | "json-stable-stringify-without-jsonify": { 799 | "version": "1.0.1", 800 | "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", 801 | "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", 802 | "dev": true 803 | }, 804 | "json3": { 805 | "version": "3.3.2", 806 | "resolved": "https://registry.npmjs.org/json3/-/json3-3.3.2.tgz", 807 | "integrity": "sha1-PAQ0dD35Pi9cQq7nsZvLSDV19OE=", 808 | "dev": true 809 | }, 810 | "laggard": { 811 | "version": "2.0.1", 812 | "resolved": "https://registry.npmjs.org/laggard/-/laggard-2.0.1.tgz", 813 | "integrity": "sha512-XCUGeE3r3VWxM8CV9aw+GjG3v3vTInyCf3p9YUo1SCTkM4N93/JaRH/4Lpz0hDZnaEQsArtAbp+rYic3PdTpbg==", 814 | "requires": { 815 | "minimist": "1.2.0", 816 | "pixrem": "4.0.1", 817 | "postcss": "6.0.14", 818 | "postcss-color-rgba-fallback": "3.0.0", 819 | "postcss-opacity": "5.0.0", 820 | "postcss-pseudoelements": "5.0.0", 821 | "postcss-reporter": "5.0.0", 822 | "postcss-vmin": "3.0.0", 823 | "postcss-will-change": "2.0.0", 824 | "read-file-stdin": "0.2.1", 825 | "write-file-stdout": "0.0.2" 826 | } 827 | }, 828 | "levn": { 829 | "version": "0.3.0", 830 | "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", 831 | "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", 832 | "dev": true, 833 | "requires": { 834 | "prelude-ls": "1.1.2", 835 | "type-check": "0.3.2" 836 | } 837 | }, 838 | "lodash": { 839 | "version": "4.17.4", 840 | "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz", 841 | "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=" 842 | }, 843 | "lodash._baseassign": { 844 | "version": "3.2.0", 845 | "resolved": "https://registry.npmjs.org/lodash._baseassign/-/lodash._baseassign-3.2.0.tgz", 846 | "integrity": "sha1-jDigmVAPIVrQnlnxci/QxSv+Ck4=", 847 | "dev": true, 848 | "requires": { 849 | "lodash._basecopy": "3.0.1", 850 | "lodash.keys": "3.1.2" 851 | } 852 | }, 853 | "lodash._basecopy": { 854 | "version": "3.0.1", 855 | "resolved": "https://registry.npmjs.org/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz", 856 | "integrity": "sha1-jaDmqHbPNEwK2KVIghEd08XHyjY=", 857 | "dev": true 858 | }, 859 | "lodash._basecreate": { 860 | "version": "3.0.3", 861 | "resolved": "https://registry.npmjs.org/lodash._basecreate/-/lodash._basecreate-3.0.3.tgz", 862 | "integrity": "sha1-G8ZhYU2qf8MRt9A78WgGoCE8+CE=", 863 | "dev": true 864 | }, 865 | "lodash._getnative": { 866 | "version": "3.9.1", 867 | "resolved": "https://registry.npmjs.org/lodash._getnative/-/lodash._getnative-3.9.1.tgz", 868 | "integrity": "sha1-VwvH3t5G1hzc3mh9ZdPuy6o6r/U=", 869 | "dev": true 870 | }, 871 | "lodash._isiterateecall": { 872 | "version": "3.0.9", 873 | "resolved": "https://registry.npmjs.org/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz", 874 | "integrity": "sha1-UgOte6Ql+uhCRg5pbbnPPmqsBXw=", 875 | "dev": true 876 | }, 877 | "lodash.create": { 878 | "version": "3.1.1", 879 | "resolved": "https://registry.npmjs.org/lodash.create/-/lodash.create-3.1.1.tgz", 880 | "integrity": "sha1-1/KEnw29p+BGgruM1yqwIkYd6+c=", 881 | "dev": true, 882 | "requires": { 883 | "lodash._baseassign": "3.2.0", 884 | "lodash._basecreate": "3.0.3", 885 | "lodash._isiterateecall": "3.0.9" 886 | } 887 | }, 888 | "lodash.isarguments": { 889 | "version": "3.1.0", 890 | "resolved": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz", 891 | "integrity": "sha1-L1c9hcaiQon/AGY7SRwdM4/zRYo=", 892 | "dev": true 893 | }, 894 | "lodash.isarray": { 895 | "version": "3.0.4", 896 | "resolved": "https://registry.npmjs.org/lodash.isarray/-/lodash.isarray-3.0.4.tgz", 897 | "integrity": "sha1-eeTriMNqgSKvhvhEqpvNhRtfu1U=", 898 | "dev": true 899 | }, 900 | "lodash.keys": { 901 | "version": "3.1.2", 902 | "resolved": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-3.1.2.tgz", 903 | "integrity": "sha1-TbwEcrFWvlCgsoaFXRvQsMZWCYo=", 904 | "dev": true, 905 | "requires": { 906 | "lodash._getnative": "3.9.1", 907 | "lodash.isarguments": "3.1.0", 908 | "lodash.isarray": "3.0.4" 909 | } 910 | }, 911 | "log-symbols": { 912 | "version": "2.1.0", 913 | "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.1.0.tgz", 914 | "integrity": "sha512-zLeLrzMA1A2vRF1e/0Mo+LNINzi6jzBylHj5WqvQ/WK/5WCZt8si9SyN4p9llr/HRYvVR1AoXHRHl4WTHyQAzQ==", 915 | "requires": { 916 | "chalk": "2.3.0" 917 | } 918 | }, 919 | "lru-cache": { 920 | "version": "4.1.1", 921 | "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.1.tgz", 922 | "integrity": "sha512-q4spe4KTfsAS1SUHLO0wz8Qiyf1+vMIAgpRYioFYDMNqKfHQbg+AVDH3i4fvpl71/P1L0dBl+fQi+P37UYf0ew==", 923 | "dev": true, 924 | "requires": { 925 | "pseudomap": "1.0.2", 926 | "yallist": "2.1.2" 927 | } 928 | }, 929 | "math-expression-evaluator": { 930 | "version": "1.2.17", 931 | "resolved": "https://registry.npmjs.org/math-expression-evaluator/-/math-expression-evaluator-1.2.17.tgz", 932 | "integrity": "sha1-3oGf282E3M2PrlnGrreWFbnSZqw=" 933 | }, 934 | "mimic-fn": { 935 | "version": "1.1.0", 936 | "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.1.0.tgz", 937 | "integrity": "sha1-5md4PZLonb00KBi1IwudYqZyrRg=", 938 | "dev": true 939 | }, 940 | "minimatch": { 941 | "version": "3.0.4", 942 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", 943 | "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", 944 | "dev": true, 945 | "requires": { 946 | "brace-expansion": "1.1.8" 947 | } 948 | }, 949 | "minimist": { 950 | "version": "1.2.0", 951 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", 952 | "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=" 953 | }, 954 | "mkdirp": { 955 | "version": "0.5.1", 956 | "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", 957 | "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", 958 | "dev": true, 959 | "requires": { 960 | "minimist": "0.0.8" 961 | }, 962 | "dependencies": { 963 | "minimist": { 964 | "version": "0.0.8", 965 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", 966 | "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", 967 | "dev": true 968 | } 969 | } 970 | }, 971 | "mocha": { 972 | "version": "3.5.3", 973 | "resolved": "https://registry.npmjs.org/mocha/-/mocha-3.5.3.tgz", 974 | "integrity": "sha512-/6na001MJWEtYxHOV1WLfsmR4YIynkUEhBwzsb+fk2qmQ3iqsi258l/Q2MWHJMImAcNpZ8DEdYAK72NHoIQ9Eg==", 975 | "dev": true, 976 | "requires": { 977 | "browser-stdout": "1.3.0", 978 | "commander": "2.9.0", 979 | "debug": "2.6.8", 980 | "diff": "3.2.0", 981 | "escape-string-regexp": "1.0.5", 982 | "glob": "7.1.1", 983 | "growl": "1.9.2", 984 | "he": "1.1.1", 985 | "json3": "3.3.2", 986 | "lodash.create": "3.1.1", 987 | "mkdirp": "0.5.1", 988 | "supports-color": "3.1.2" 989 | }, 990 | "dependencies": { 991 | "debug": { 992 | "version": "2.6.8", 993 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.8.tgz", 994 | "integrity": "sha1-5zFTHKLt4n0YgiJCfaF4IdaP9Pw=", 995 | "dev": true, 996 | "requires": { 997 | "ms": "2.0.0" 998 | } 999 | }, 1000 | "glob": { 1001 | "version": "7.1.1", 1002 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.1.tgz", 1003 | "integrity": "sha1-gFIR3wT6rxxjo2ADBs31reULLsg=", 1004 | "dev": true, 1005 | "requires": { 1006 | "fs.realpath": "1.0.0", 1007 | "inflight": "1.0.6", 1008 | "inherits": "2.0.3", 1009 | "minimatch": "3.0.4", 1010 | "once": "1.4.0", 1011 | "path-is-absolute": "1.0.1" 1012 | } 1013 | }, 1014 | "has-flag": { 1015 | "version": "1.0.0", 1016 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", 1017 | "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", 1018 | "dev": true 1019 | }, 1020 | "supports-color": { 1021 | "version": "3.1.2", 1022 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.1.2.tgz", 1023 | "integrity": "sha1-cqJiiU2dQIuVbKBf83su2KbiotU=", 1024 | "dev": true, 1025 | "requires": { 1026 | "has-flag": "1.0.0" 1027 | } 1028 | } 1029 | } 1030 | }, 1031 | "ms": { 1032 | "version": "2.0.0", 1033 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", 1034 | "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", 1035 | "dev": true 1036 | }, 1037 | "mute-stream": { 1038 | "version": "0.0.7", 1039 | "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", 1040 | "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=", 1041 | "dev": true 1042 | }, 1043 | "natural-compare": { 1044 | "version": "1.4.0", 1045 | "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", 1046 | "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", 1047 | "dev": true 1048 | }, 1049 | "normalize-range": { 1050 | "version": "0.1.2", 1051 | "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", 1052 | "integrity": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=" 1053 | }, 1054 | "num2fraction": { 1055 | "version": "1.2.2", 1056 | "resolved": "https://registry.npmjs.org/num2fraction/-/num2fraction-1.2.2.tgz", 1057 | "integrity": "sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4=" 1058 | }, 1059 | "object-assign": { 1060 | "version": "4.1.1", 1061 | "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", 1062 | "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", 1063 | "dev": true 1064 | }, 1065 | "once": { 1066 | "version": "1.4.0", 1067 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 1068 | "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", 1069 | "dev": true, 1070 | "requires": { 1071 | "wrappy": "1.0.2" 1072 | } 1073 | }, 1074 | "onetime": { 1075 | "version": "2.0.1", 1076 | "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", 1077 | "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", 1078 | "dev": true, 1079 | "requires": { 1080 | "mimic-fn": "1.1.0" 1081 | } 1082 | }, 1083 | "optionator": { 1084 | "version": "0.8.2", 1085 | "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz", 1086 | "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=", 1087 | "dev": true, 1088 | "requires": { 1089 | "deep-is": "0.1.3", 1090 | "fast-levenshtein": "2.0.6", 1091 | "levn": "0.3.0", 1092 | "prelude-ls": "1.1.2", 1093 | "type-check": "0.3.2", 1094 | "wordwrap": "1.0.0" 1095 | } 1096 | }, 1097 | "os-tmpdir": { 1098 | "version": "1.0.2", 1099 | "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", 1100 | "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", 1101 | "dev": true 1102 | }, 1103 | "path-is-absolute": { 1104 | "version": "1.0.1", 1105 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", 1106 | "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", 1107 | "dev": true 1108 | }, 1109 | "path-is-inside": { 1110 | "version": "1.0.2", 1111 | "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", 1112 | "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=", 1113 | "dev": true 1114 | }, 1115 | "pathval": { 1116 | "version": "1.1.0", 1117 | "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.0.tgz", 1118 | "integrity": "sha1-uULm1L3mUwBe9rcTYd74cn0GReA=", 1119 | "dev": true 1120 | }, 1121 | "pify": { 1122 | "version": "2.3.0", 1123 | "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", 1124 | "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", 1125 | "dev": true 1126 | }, 1127 | "pinkie": { 1128 | "version": "2.0.4", 1129 | "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", 1130 | "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", 1131 | "dev": true 1132 | }, 1133 | "pinkie-promise": { 1134 | "version": "2.0.1", 1135 | "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", 1136 | "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", 1137 | "dev": true, 1138 | "requires": { 1139 | "pinkie": "2.0.4" 1140 | } 1141 | }, 1142 | "pixrem": { 1143 | "version": "4.0.1", 1144 | "resolved": "https://registry.npmjs.org/pixrem/-/pixrem-4.0.1.tgz", 1145 | "integrity": "sha1-LaSh3m7EQjxfw3lOkwuB1EkOxoY=", 1146 | "requires": { 1147 | "browserslist": "2.8.0", 1148 | "postcss": "6.0.14", 1149 | "reduce-css-calc": "1.3.0" 1150 | } 1151 | }, 1152 | "pluralize": { 1153 | "version": "7.0.0", 1154 | "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-7.0.0.tgz", 1155 | "integrity": "sha512-ARhBOdzS3e41FbkW/XWrTEtukqqLoK5+Z/4UeDaLuSW+39JPeFgs4gCGqsrJHVZX0fUrx//4OF0K1CUGwlIFow==", 1156 | "dev": true 1157 | }, 1158 | "postcss": { 1159 | "version": "6.0.14", 1160 | "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.14.tgz", 1161 | "integrity": "sha512-NJ1z0f+1offCgadPhz+DvGm5Mkci+mmV5BqD13S992o0Xk9eElxUfPPF+t2ksH5R/17gz4xVK8KWocUQ5o3Rog==", 1162 | "requires": { 1163 | "chalk": "2.3.0", 1164 | "source-map": "0.6.1", 1165 | "supports-color": "4.5.0" 1166 | } 1167 | }, 1168 | "postcss-alias": { 1169 | "version": "2.0.0", 1170 | "resolved": "https://registry.npmjs.org/postcss-alias/-/postcss-alias-2.0.0.tgz", 1171 | "integrity": "sha1-AY9Gwvv/gY4p+mr2evpL4r7NN20=", 1172 | "requires": { 1173 | "postcss": "6.0.14" 1174 | } 1175 | }, 1176 | "postcss-clearfix": { 1177 | "version": "2.0.1", 1178 | "resolved": "https://registry.npmjs.org/postcss-clearfix/-/postcss-clearfix-2.0.1.tgz", 1179 | "integrity": "sha1-UXChmY8WfTGQoBc0RbY4DIxcB/I=", 1180 | "requires": { 1181 | "postcss": "6.0.14" 1182 | } 1183 | }, 1184 | "postcss-color-rgba-fallback": { 1185 | "version": "3.0.0", 1186 | "resolved": "https://registry.npmjs.org/postcss-color-rgba-fallback/-/postcss-color-rgba-fallback-3.0.0.tgz", 1187 | "integrity": "sha1-N9XJNToHoJJwkSqCYGu0Kg1wLAQ=", 1188 | "requires": { 1189 | "postcss": "6.0.14", 1190 | "postcss-value-parser": "3.3.0", 1191 | "rgb-hex": "2.1.0" 1192 | } 1193 | }, 1194 | "postcss-easings": { 1195 | "version": "1.0.1", 1196 | "resolved": "https://registry.npmjs.org/postcss-easings/-/postcss-easings-1.0.1.tgz", 1197 | "integrity": "sha512-zHRCKHinXtqpyrPPi3oojaf47v3eGcQHmG5zujWs1+9OWukIKi/rVEAm2KSh5y4swn66SNCZceGXcNi9GXo1cQ==", 1198 | "requires": { 1199 | "postcss": "6.0.14", 1200 | "postcss-value-parser": "3.3.0" 1201 | } 1202 | }, 1203 | "postcss-fontpath": { 1204 | "version": "1.0.0", 1205 | "resolved": "https://registry.npmjs.org/postcss-fontpath/-/postcss-fontpath-1.0.0.tgz", 1206 | "integrity": "sha1-rQ7vwhk+Kc96NLjHUf9/6OdGmeU=", 1207 | "requires": { 1208 | "postcss": "6.0.14" 1209 | } 1210 | }, 1211 | "postcss-hexrgba": { 1212 | "version": "1.0.0", 1213 | "resolved": "https://registry.npmjs.org/postcss-hexrgba/-/postcss-hexrgba-1.0.0.tgz", 1214 | "integrity": "sha1-sqtiiSId3Hr0AKrhHYxM6K3/3YU=", 1215 | "requires": { 1216 | "postcss": "6.0.14" 1217 | } 1218 | }, 1219 | "postcss-input-style": { 1220 | "version": "1.0.0", 1221 | "resolved": "https://registry.npmjs.org/postcss-input-style/-/postcss-input-style-1.0.0.tgz", 1222 | "integrity": "sha1-u/3IK595mz54yGOgJHZ1fib73GE=", 1223 | "requires": { 1224 | "postcss": "6.0.14" 1225 | } 1226 | }, 1227 | "postcss-opacity": { 1228 | "version": "5.0.0", 1229 | "resolved": "https://registry.npmjs.org/postcss-opacity/-/postcss-opacity-5.0.0.tgz", 1230 | "integrity": "sha512-n6LgHk5HWIsyEHgPqM2jwXrkh4SuH+cZOIWh4tUp4ug3P7FkzxiJuqrpEaBvNwH/dKs5PHjHL2vPeR+nLbs+Mw==", 1231 | "requires": { 1232 | "postcss": "6.0.14" 1233 | } 1234 | }, 1235 | "postcss-position": { 1236 | "version": "1.0.0", 1237 | "resolved": "https://registry.npmjs.org/postcss-position/-/postcss-position-1.0.0.tgz", 1238 | "integrity": "sha1-MMvu5Ajyam2+u/YSYcohDlSMd/8=", 1239 | "requires": { 1240 | "postcss": "6.0.14" 1241 | } 1242 | }, 1243 | "postcss-pseudoelements": { 1244 | "version": "5.0.0", 1245 | "resolved": "https://registry.npmjs.org/postcss-pseudoelements/-/postcss-pseudoelements-5.0.0.tgz", 1246 | "integrity": "sha1-7vGU6NUkZFylIKlJ6V5RjoEkAss=", 1247 | "requires": { 1248 | "postcss": "6.0.14" 1249 | } 1250 | }, 1251 | "postcss-quantity-queries": { 1252 | "version": "0.5.0", 1253 | "resolved": "https://registry.npmjs.org/postcss-quantity-queries/-/postcss-quantity-queries-0.5.0.tgz", 1254 | "integrity": "sha1-UrZxf8yNmSWuZM/0M0CHD+FVFqs=", 1255 | "requires": { 1256 | "balanced-match": "0.4.2", 1257 | "postcss": "6.0.14" 1258 | } 1259 | }, 1260 | "postcss-reporter": { 1261 | "version": "5.0.0", 1262 | "resolved": "https://registry.npmjs.org/postcss-reporter/-/postcss-reporter-5.0.0.tgz", 1263 | "integrity": "sha512-rBkDbaHAu5uywbCR2XE8a25tats3xSOsGNx6mppK6Q9kSFGKc/FyAzfci+fWM2l+K402p1D0pNcfDGxeje5IKg==", 1264 | "requires": { 1265 | "chalk": "2.3.0", 1266 | "lodash": "4.17.4", 1267 | "log-symbols": "2.1.0", 1268 | "postcss": "6.0.14" 1269 | } 1270 | }, 1271 | "postcss-responsive-type": { 1272 | "version": "1.0.0", 1273 | "resolved": "https://registry.npmjs.org/postcss-responsive-type/-/postcss-responsive-type-1.0.0.tgz", 1274 | "integrity": "sha1-uy1X2DC+uVhuxP2nmU8H43lTqtg=", 1275 | "requires": { 1276 | "postcss": "6.0.14" 1277 | } 1278 | }, 1279 | "postcss-value-parser": { 1280 | "version": "3.3.0", 1281 | "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.0.tgz", 1282 | "integrity": "sha1-h/OPnxj3dKSrTIojL1xc6IcqnRU=" 1283 | }, 1284 | "postcss-vmin": { 1285 | "version": "3.0.0", 1286 | "resolved": "https://registry.npmjs.org/postcss-vmin/-/postcss-vmin-3.0.0.tgz", 1287 | "integrity": "sha1-bWrms+hP4/96TfHrhvOmmgfooUQ=", 1288 | "requires": { 1289 | "postcss": "6.0.14" 1290 | } 1291 | }, 1292 | "postcss-will-change": { 1293 | "version": "2.0.0", 1294 | "resolved": "https://registry.npmjs.org/postcss-will-change/-/postcss-will-change-2.0.0.tgz", 1295 | "integrity": "sha1-z/CRqHoDhrqx8yp8+n951rdz4QA=", 1296 | "requires": { 1297 | "postcss": "6.0.14" 1298 | } 1299 | }, 1300 | "prelude-ls": { 1301 | "version": "1.1.2", 1302 | "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", 1303 | "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", 1304 | "dev": true 1305 | }, 1306 | "process-nextick-args": { 1307 | "version": "1.0.7", 1308 | "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", 1309 | "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=", 1310 | "dev": true 1311 | }, 1312 | "progress": { 1313 | "version": "2.0.0", 1314 | "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.0.tgz", 1315 | "integrity": "sha1-ihvjZr+Pwj2yvSPxDG/pILQ4nR8=", 1316 | "dev": true 1317 | }, 1318 | "pseudomap": { 1319 | "version": "1.0.2", 1320 | "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", 1321 | "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", 1322 | "dev": true 1323 | }, 1324 | "read-file-stdin": { 1325 | "version": "0.2.1", 1326 | "resolved": "https://registry.npmjs.org/read-file-stdin/-/read-file-stdin-0.2.1.tgz", 1327 | "integrity": "sha1-JezP86FTtoCa+ssj7hU4fbng7mE=", 1328 | "requires": { 1329 | "gather-stream": "1.0.0" 1330 | } 1331 | }, 1332 | "readable-stream": { 1333 | "version": "2.3.3", 1334 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz", 1335 | "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==", 1336 | "dev": true, 1337 | "requires": { 1338 | "core-util-is": "1.0.2", 1339 | "inherits": "2.0.3", 1340 | "isarray": "1.0.0", 1341 | "process-nextick-args": "1.0.7", 1342 | "safe-buffer": "5.1.1", 1343 | "string_decoder": "1.0.3", 1344 | "util-deprecate": "1.0.2" 1345 | } 1346 | }, 1347 | "reduce-css-calc": { 1348 | "version": "1.3.0", 1349 | "resolved": "https://registry.npmjs.org/reduce-css-calc/-/reduce-css-calc-1.3.0.tgz", 1350 | "integrity": "sha1-dHyRTgSWFKTJz7umKYca0dKSdxY=", 1351 | "requires": { 1352 | "balanced-match": "0.4.2", 1353 | "math-expression-evaluator": "1.2.17", 1354 | "reduce-function-call": "1.0.2" 1355 | } 1356 | }, 1357 | "reduce-function-call": { 1358 | "version": "1.0.2", 1359 | "resolved": "https://registry.npmjs.org/reduce-function-call/-/reduce-function-call-1.0.2.tgz", 1360 | "integrity": "sha1-WiAL+S4ON3UXUv5FsKszD9S2vpk=", 1361 | "requires": { 1362 | "balanced-match": "0.4.2" 1363 | } 1364 | }, 1365 | "require-uncached": { 1366 | "version": "1.0.3", 1367 | "resolved": "https://registry.npmjs.org/require-uncached/-/require-uncached-1.0.3.tgz", 1368 | "integrity": "sha1-Tg1W1slmL9MeQwEcS5WqSZVUIdM=", 1369 | "dev": true, 1370 | "requires": { 1371 | "caller-path": "0.1.0", 1372 | "resolve-from": "1.0.1" 1373 | } 1374 | }, 1375 | "resolve-from": { 1376 | "version": "1.0.1", 1377 | "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-1.0.1.tgz", 1378 | "integrity": "sha1-Jsv+k10a7uq7Kbw/5a6wHpPUQiY=", 1379 | "dev": true 1380 | }, 1381 | "restore-cursor": { 1382 | "version": "2.0.0", 1383 | "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", 1384 | "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", 1385 | "dev": true, 1386 | "requires": { 1387 | "onetime": "2.0.1", 1388 | "signal-exit": "3.0.2" 1389 | } 1390 | }, 1391 | "rgb-hex": { 1392 | "version": "2.1.0", 1393 | "resolved": "https://registry.npmjs.org/rgb-hex/-/rgb-hex-2.1.0.tgz", 1394 | "integrity": "sha1-x3PF/iJoolV42SU5qCp6XOU77aY=" 1395 | }, 1396 | "rimraf": { 1397 | "version": "2.6.2", 1398 | "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz", 1399 | "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==", 1400 | "dev": true, 1401 | "requires": { 1402 | "glob": "7.1.2" 1403 | } 1404 | }, 1405 | "run-async": { 1406 | "version": "2.3.0", 1407 | "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.3.0.tgz", 1408 | "integrity": "sha1-A3GrSuC91yDUFm19/aZP96RFpsA=", 1409 | "dev": true, 1410 | "requires": { 1411 | "is-promise": "2.1.0" 1412 | } 1413 | }, 1414 | "rx-lite": { 1415 | "version": "4.0.8", 1416 | "resolved": "https://registry.npmjs.org/rx-lite/-/rx-lite-4.0.8.tgz", 1417 | "integrity": "sha1-Cx4Rr4vESDbwSmQH6S2kJGe3lEQ=", 1418 | "dev": true 1419 | }, 1420 | "rx-lite-aggregates": { 1421 | "version": "4.0.8", 1422 | "resolved": "https://registry.npmjs.org/rx-lite-aggregates/-/rx-lite-aggregates-4.0.8.tgz", 1423 | "integrity": "sha1-dTuHqJoRyVRnxKwWJsTvxOBcZ74=", 1424 | "dev": true, 1425 | "requires": { 1426 | "rx-lite": "4.0.8" 1427 | } 1428 | }, 1429 | "safe-buffer": { 1430 | "version": "5.1.1", 1431 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", 1432 | "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==", 1433 | "dev": true 1434 | }, 1435 | "semver": { 1436 | "version": "5.4.1", 1437 | "resolved": "https://registry.npmjs.org/semver/-/semver-5.4.1.tgz", 1438 | "integrity": "sha512-WfG/X9+oATh81XtllIo/I8gOiY9EXRdv1cQdyykeXK17YcUW3EXUAi2To4pcH6nZtJPr7ZOpM5OMyWJZm+8Rsg==", 1439 | "dev": true 1440 | }, 1441 | "shebang-command": { 1442 | "version": "1.2.0", 1443 | "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", 1444 | "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", 1445 | "dev": true, 1446 | "requires": { 1447 | "shebang-regex": "1.0.0" 1448 | } 1449 | }, 1450 | "shebang-regex": { 1451 | "version": "1.0.0", 1452 | "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", 1453 | "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", 1454 | "dev": true 1455 | }, 1456 | "signal-exit": { 1457 | "version": "3.0.2", 1458 | "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", 1459 | "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", 1460 | "dev": true 1461 | }, 1462 | "slice-ansi": { 1463 | "version": "1.0.0", 1464 | "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-1.0.0.tgz", 1465 | "integrity": "sha512-POqxBK6Lb3q6s047D/XsDVNPnF9Dl8JSaqe9h9lURl0OdNqy/ujDrOiIHtsqXMGbWWTIomRzAMaTyawAU//Reg==", 1466 | "dev": true, 1467 | "requires": { 1468 | "is-fullwidth-code-point": "2.0.0" 1469 | } 1470 | }, 1471 | "source-map": { 1472 | "version": "0.6.1", 1473 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", 1474 | "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" 1475 | }, 1476 | "sprintf-js": { 1477 | "version": "1.0.3", 1478 | "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", 1479 | "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", 1480 | "dev": true 1481 | }, 1482 | "string-width": { 1483 | "version": "2.1.1", 1484 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", 1485 | "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", 1486 | "dev": true, 1487 | "requires": { 1488 | "is-fullwidth-code-point": "2.0.0", 1489 | "strip-ansi": "4.0.0" 1490 | } 1491 | }, 1492 | "string_decoder": { 1493 | "version": "1.0.3", 1494 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", 1495 | "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", 1496 | "dev": true, 1497 | "requires": { 1498 | "safe-buffer": "5.1.1" 1499 | } 1500 | }, 1501 | "strip-ansi": { 1502 | "version": "4.0.0", 1503 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", 1504 | "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", 1505 | "dev": true, 1506 | "requires": { 1507 | "ansi-regex": "3.0.0" 1508 | }, 1509 | "dependencies": { 1510 | "ansi-regex": { 1511 | "version": "3.0.0", 1512 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", 1513 | "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", 1514 | "dev": true 1515 | } 1516 | } 1517 | }, 1518 | "strip-json-comments": { 1519 | "version": "2.0.1", 1520 | "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", 1521 | "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", 1522 | "dev": true 1523 | }, 1524 | "supports-color": { 1525 | "version": "4.5.0", 1526 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz", 1527 | "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=", 1528 | "requires": { 1529 | "has-flag": "2.0.0" 1530 | } 1531 | }, 1532 | "table": { 1533 | "version": "4.0.2", 1534 | "resolved": "https://registry.npmjs.org/table/-/table-4.0.2.tgz", 1535 | "integrity": "sha512-UUkEAPdSGxtRpiV9ozJ5cMTtYiqz7Ni1OGqLXRCynrvzdtR1p+cfOWe2RJLwvUG8hNanaSRjecIqwOjqeatDsA==", 1536 | "dev": true, 1537 | "requires": { 1538 | "ajv": "5.3.0", 1539 | "ajv-keywords": "2.1.1", 1540 | "chalk": "2.3.0", 1541 | "lodash": "4.17.4", 1542 | "slice-ansi": "1.0.0", 1543 | "string-width": "2.1.1" 1544 | } 1545 | }, 1546 | "text-table": { 1547 | "version": "0.2.0", 1548 | "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", 1549 | "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", 1550 | "dev": true 1551 | }, 1552 | "through": { 1553 | "version": "2.3.8", 1554 | "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", 1555 | "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", 1556 | "dev": true 1557 | }, 1558 | "tmp": { 1559 | "version": "0.0.33", 1560 | "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", 1561 | "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", 1562 | "dev": true, 1563 | "requires": { 1564 | "os-tmpdir": "1.0.2" 1565 | } 1566 | }, 1567 | "tryit": { 1568 | "version": "1.0.3", 1569 | "resolved": "https://registry.npmjs.org/tryit/-/tryit-1.0.3.tgz", 1570 | "integrity": "sha1-OTvnMKlEb9Hq1tpZoBQwjzbCics=", 1571 | "dev": true 1572 | }, 1573 | "type-check": { 1574 | "version": "0.3.2", 1575 | "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", 1576 | "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", 1577 | "dev": true, 1578 | "requires": { 1579 | "prelude-ls": "1.1.2" 1580 | } 1581 | }, 1582 | "type-detect": { 1583 | "version": "4.0.5", 1584 | "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.5.tgz", 1585 | "integrity": "sha512-N9IvkQslUGYGC24RkJk1ba99foK6TkwC2FHAEBlQFBP0RxQZS8ZpJuAZcwiY/w9ZJHFQb1aOXBI60OdxhTrwEQ==", 1586 | "dev": true 1587 | }, 1588 | "typedarray": { 1589 | "version": "0.0.6", 1590 | "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", 1591 | "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", 1592 | "dev": true 1593 | }, 1594 | "util-deprecate": { 1595 | "version": "1.0.2", 1596 | "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", 1597 | "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", 1598 | "dev": true 1599 | }, 1600 | "which": { 1601 | "version": "1.3.0", 1602 | "resolved": "https://registry.npmjs.org/which/-/which-1.3.0.tgz", 1603 | "integrity": "sha512-xcJpopdamTuY5duC/KnTTNBraPK54YwpenP4lzxU8H91GudWpFv38u0CKjclE1Wi2EH2EDz5LRcHcKbCIzqGyg==", 1604 | "dev": true, 1605 | "requires": { 1606 | "isexe": "2.0.0" 1607 | } 1608 | }, 1609 | "wordwrap": { 1610 | "version": "1.0.0", 1611 | "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", 1612 | "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", 1613 | "dev": true 1614 | }, 1615 | "wrappy": { 1616 | "version": "1.0.2", 1617 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 1618 | "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", 1619 | "dev": true 1620 | }, 1621 | "write": { 1622 | "version": "0.2.1", 1623 | "resolved": "https://registry.npmjs.org/write/-/write-0.2.1.tgz", 1624 | "integrity": "sha1-X8A4KOJkzqP+kUVUdvejxWbLB1c=", 1625 | "dev": true, 1626 | "requires": { 1627 | "mkdirp": "0.5.1" 1628 | } 1629 | }, 1630 | "write-file-stdout": { 1631 | "version": "0.0.2", 1632 | "resolved": "https://registry.npmjs.org/write-file-stdout/-/write-file-stdout-0.0.2.tgz", 1633 | "integrity": "sha1-wlLXx8WxtAKJdjDjRTx7/mkNnKE=" 1634 | }, 1635 | "yallist": { 1636 | "version": "2.1.2", 1637 | "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", 1638 | "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", 1639 | "dev": true 1640 | } 1641 | } 1642 | } 1643 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "rucksack-css", 3 | "version": "1.0.2", 4 | "description": "A little bag of CSS superpowers", 5 | "main": "index.js", 6 | "scripts": { 7 | "test": "mocha test", 8 | "posttest": "eslint ." 9 | }, 10 | "keywords": [ 11 | "rucksack", 12 | "postcss", 13 | "css", 14 | "framework", 15 | "boilerplate" 16 | ], 17 | "license": "MIT", 18 | "repository": { 19 | "type": "git", 20 | "url": "https://github.com/seaneking/rucksack.git" 21 | }, 22 | "author": "Sean King ", 23 | "maintainers": [ 24 | { 25 | "name": "Sean King", 26 | "email": "sean@seanking.org", 27 | "web": "https://twitter.com/seaneking" 28 | } 29 | ], 30 | "bugs": { 31 | "url": "https://github.com/seaneking/rucksack/issues" 32 | }, 33 | "bin": { 34 | "rucksack": "./bin/cmd.js" 35 | }, 36 | "engines": { 37 | "node": ">= 4" 38 | }, 39 | "homepage": "https://www.rucksackcss.org", 40 | "dependencies": { 41 | "autoprefixer": "^7.1.2", 42 | "laggard": "^2.0.0", 43 | "minimist": "^1.1.2", 44 | "postcss": "^6.0.8", 45 | "postcss-alias": "^2.0.0", 46 | "postcss-clearfix": "^2.0.1", 47 | "postcss-color-rgba-fallback": "^3.0.0", 48 | "postcss-easings": "^1.0.0", 49 | "postcss-fontpath": "^1.0.0", 50 | "postcss-hexrgba": "^1.0.0", 51 | "postcss-input-style": "^1.0.0", 52 | "postcss-opacity": "^5.0.0", 53 | "postcss-position": "^1.0.0", 54 | "postcss-pseudoelements": "^5.0.0", 55 | "postcss-quantity-queries": "^0.5.0", 56 | "postcss-reporter": "^5.0.0", 57 | "postcss-responsive-type": "^1.0.0", 58 | "postcss-vmin": "^3.0.0", 59 | "read-file-stdin": "^0.2.0", 60 | "write-file-stdout": "^0.0.2" 61 | }, 62 | "devDependencies": { 63 | "chai": "^4.1.0", 64 | "eslint": "^4.3.0", 65 | "mocha": "^3.5.0" 66 | } 67 | } 68 | -------------------------------------------------------------------------------- /test/fixtures/autoprefixer.css: -------------------------------------------------------------------------------- 1 | .foo { 2 | display: flex 3 | } 4 | -------------------------------------------------------------------------------- /test/fixtures/autoprefixer.expected.css: -------------------------------------------------------------------------------- 1 | .foo { 2 | display: -webkit-box; 3 | display: -ms-flexbox; 4 | display: flex 5 | } 6 | -------------------------------------------------------------------------------- /test/fixtures/clearfix.css: -------------------------------------------------------------------------------- 1 | .foo { 2 | clear: fix; 3 | } 4 | -------------------------------------------------------------------------------- /test/fixtures/clearfix.expected.css: -------------------------------------------------------------------------------- 1 | .foo:after { 2 | content: ''; 3 | display: block; 4 | clear: both; 5 | } 6 | -------------------------------------------------------------------------------- /test/fixtures/easings.css: -------------------------------------------------------------------------------- 1 | .foo { 2 | transition: all 1s easeInSine; 3 | } 4 | 5 | .bar { 6 | transition: all 1s ease-in-sine; 7 | } 8 | 9 | .baz { 10 | transition: ease-in-sine, easeInOutExpo; 11 | } -------------------------------------------------------------------------------- /test/fixtures/easings.expected.css: -------------------------------------------------------------------------------- 1 | .foo { 2 | transition: all 1s cubic-bezier(0.47, 0, 0.745, 0.715); 3 | } 4 | 5 | .bar { 6 | transition: all 1s cubic-bezier(0.47, 0, 0.745, 0.715); 7 | } 8 | 9 | .baz { 10 | transition: cubic-bezier(0.47, 0, 0.745, 0.715), cubic-bezier(1, 0, 0, 1); 11 | } -------------------------------------------------------------------------------- /test/fixtures/fontpath.css: -------------------------------------------------------------------------------- 1 | @font-face { 2 | font-family: 'Test'; 3 | font-path: '/path/to/font'; 4 | font-weight: normal; 5 | font-style: normal; 6 | } -------------------------------------------------------------------------------- /test/fixtures/fontpath.expected.css: -------------------------------------------------------------------------------- 1 | @font-face { 2 | font-family: 'Test'; 3 | src: url("/path/to/font.eot") format('embedded-opentype'), 4 | url("/path/to/font.woff2") format('woff2'), 5 | url("/path/to/font.woff") format('woff'), 6 | url("/path/to/font.ttf") format('truetype'), 7 | url("/path/to/font.svg") format('svg'); 8 | font-weight: normal; 9 | font-style: normal; 10 | } -------------------------------------------------------------------------------- /test/fixtures/hexrgba.css: -------------------------------------------------------------------------------- 1 | .foo { 2 | color: rgba(#ffffff, 0.5); 3 | background: rgba(#00b2ff,.8); 4 | } 5 | -------------------------------------------------------------------------------- /test/fixtures/hexrgba.expected.css: -------------------------------------------------------------------------------- 1 | .foo { 2 | color: rgba(255,255,255, 0.5); 3 | background: rgba(0,178,255,.8); 4 | } 5 | -------------------------------------------------------------------------------- /test/fixtures/input.css: -------------------------------------------------------------------------------- 1 | input[type="range"]::thumb { 2 | background: #4286be; 3 | width: 16px; 4 | height: 8px; 5 | border-radius: 999px; 6 | } 7 | -------------------------------------------------------------------------------- /test/fixtures/input.expected.css: -------------------------------------------------------------------------------- 1 | input[type="range"]::-webkit-slider-thumb { 2 | -webkit-appearance: none; 3 | background: #4286be; 4 | width: 16px; 5 | height: 8px; 6 | border-radius: 999px; 7 | } 8 | input[type="range"]::-moz-range-thumb { 9 | -moz-appearance: none; 10 | background: #4286be; 11 | width: 16px; 12 | height: 8px; 13 | border-radius: 999px; 14 | } 15 | input[type="range"]::-ms-thumb { 16 | background: #4286be; 17 | width: 16px; 18 | height: 8px; 19 | border-radius: 999px; 20 | } 21 | input[type="range"] { 22 | -webkit-appearance: none; 23 | } 24 | input[type="range"]::-moz-focus-outer { 25 | border: 0; 26 | } 27 | -------------------------------------------------------------------------------- /test/fixtures/laggard.css: -------------------------------------------------------------------------------- 1 | .opacity { 2 | opacity: .5; 3 | } 4 | 5 | .pseudo::after { 6 | display: block; 7 | } 8 | 9 | .rgba { 10 | background: rgba(153, 221, 153, 0.8); 11 | color: rgba(0, 0, 0, .4); 12 | } 13 | 14 | .vmin { 15 | width: 50vmin; 16 | } 17 | 18 | .pixrem { 19 | font-size: 2rem; 20 | } 21 | 22 | .willchange { 23 | will-change: transform; 24 | } 25 | -------------------------------------------------------------------------------- /test/fixtures/laggard.expected.css: -------------------------------------------------------------------------------- 1 | .opacity { 2 | -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=50)"; 3 | opacity: .5; 4 | } 5 | 6 | .pseudo:after { 7 | display: block; 8 | } 9 | 10 | .rgba { 11 | background: #99dd99; 12 | background: rgba(153, 221, 153, 0.8); 13 | color: #000000; 14 | color: rgba(0, 0, 0, .4); 15 | } 16 | 17 | .vmin { 18 | width: 50vm; 19 | width: 50vmin; 20 | } 21 | 22 | .pixrem { 23 | font-size: 32px; 24 | font-size: 2rem; 25 | } 26 | 27 | .willchange { 28 | backface-visibility: hidden; 29 | will-change: transform; 30 | } 31 | -------------------------------------------------------------------------------- /test/fixtures/position.css: -------------------------------------------------------------------------------- 1 | .foo { 2 | position: absolute 10px 20px 30px 40px; 3 | } 4 | 5 | .bar { 6 | position: fixed 0; 7 | } 8 | 9 | .baz { 10 | position: absolute 30px auto; 11 | } 12 | 13 | .fab { 14 | position: relative 50% 0 20px; 15 | } 16 | -------------------------------------------------------------------------------- /test/fixtures/position.expected.css: -------------------------------------------------------------------------------- 1 | .foo { 2 | position: absolute; 3 | top: 10px; 4 | right: 20px; 5 | bottom: 30px; 6 | left: 40px; 7 | } 8 | 9 | .bar { 10 | position: fixed; 11 | top: 0; 12 | right: 0; 13 | bottom: 0; 14 | left: 0; 15 | } 16 | 17 | .baz { 18 | position: absolute; 19 | top: 30px; 20 | right: auto; 21 | bottom: 30px; 22 | left: auto; 23 | } 24 | 25 | .fab { 26 | position: relative; 27 | top: 50%; 28 | right: 0; 29 | bottom: 20px; 30 | left: 0; 31 | } 32 | -------------------------------------------------------------------------------- /test/fixtures/quantity.css: -------------------------------------------------------------------------------- 1 | .foo > li:at-least(4) { 2 | content: 'test'; 3 | } 4 | 5 | .bar > li:at-most(4) { 6 | content: 'test'; 7 | } 8 | 9 | .baz > li:between(4, 6) { 10 | content: 'test'; 11 | } 12 | 13 | .fab > li:exactly(4) { 14 | content: 'test'; 15 | } -------------------------------------------------------------------------------- /test/fixtures/quantity.expected.css: -------------------------------------------------------------------------------- 1 | .foo > li:nth-last-child(n+4), .foo > li:nth-last-child(n+4) ~ li { 2 | content: 'test'; 3 | } 4 | 5 | .bar > li:nth-last-child(-n+4):first-child, .bar > li:nth-last-child(-n+4):first-child ~ li { 6 | content: 'test'; 7 | } 8 | 9 | .baz > li:nth-last-child(n+4):nth-last-child(-n+6):first-child, .baz > li:nth-last-child(n+4):nth-last-child(-n+6):first-child ~ li { 10 | content: 'test'; 11 | } 12 | 13 | .fab > li:nth-last-child(4):first-child, .fab > li:nth-last-child(4):first-child ~ li { 14 | content: 'test'; 15 | } -------------------------------------------------------------------------------- /test/fixtures/responsive-type.css: -------------------------------------------------------------------------------- 1 | .foo { 2 | font-size: responsive 10px 30px; 3 | font-range: 300px 900px; 4 | } 5 | -------------------------------------------------------------------------------- /test/fixtures/responsive-type.expected.css: -------------------------------------------------------------------------------- 1 | .foo { 2 | font-size: calc(10px + 20 * ((100vw - 300px) / 600)); 3 | } 4 | @media screen and (min-width: 900px) { 5 | .foo { 6 | font-size: 30px; 7 | } 8 | } 9 | @media screen and (max-width: 300px) { 10 | .foo { 11 | font-size: 10px; 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /test/test.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | const postcss = require('postcss'); 4 | const expect = require('chai').expect; 5 | const fs = require('fs'); 6 | const path = require('path'); 7 | const spawn = require('child_process').spawn; 8 | const rucksack = require('../'); 9 | 10 | function test(fixture, opts, done) { 11 | let input = fixture + '.css', 12 | expected = fixture + '.expected.css'; 13 | 14 | input = fs.readFileSync(path.join(__dirname, 'fixtures', input), 'utf8'); 15 | expected = fs.readFileSync(path.join(__dirname, 'fixtures', expected), 'utf8'); 16 | 17 | postcss([ rucksack(opts) ]) 18 | .process(input) 19 | .then(result => { 20 | expect(result.css).to.eql(expected); 21 | expect(result.warnings()).to.be.empty; 22 | done(); 23 | }).catch(error => { 24 | done(error); 25 | }); 26 | } 27 | 28 | function cli(cmd, callback) { 29 | process.chdir(__dirname); 30 | 31 | let ps, 32 | out = '', 33 | err = ''; 34 | 35 | ps = spawn(process.execPath, [ 36 | path.resolve(__dirname, '../bin/cmd.js') 37 | ].concat(cmd)); 38 | 39 | ps.stdout.on('data', buffer => out += buffer); 40 | ps.stderr.on('data', buffer => err += buffer); 41 | ps.on('exit', function(code) { 42 | callback.call(this, err, out, code); 43 | }); 44 | } 45 | 46 | function cliTest(fixture, args, done) { 47 | let input = fixture + '.css', 48 | expected = fixture + '.expected.css'; 49 | 50 | input = path.join(__dirname, 'fixtures', input); 51 | expected = path.join(__dirname, 'fixtures', expected); 52 | 53 | cli([input, args], (err, out, code) => { 54 | expect(out).to.eql(fs.readFileSync(expected, 'utf8')); 55 | expect(err).to.be.empty; 56 | expect(code).to.eql(0); 57 | done(); 58 | }); 59 | } 60 | 61 | describe('Rucksack', () => { 62 | 63 | describe('core features', () => { 64 | it('applies clear:fix', done => test('clearfix', {}, done)); 65 | it('applies easings', done => test('easings', {}, done)); 66 | it('sets font-path', done => test('fontpath', {}, done)); 67 | it('expands rgba(hex,a)', done => test('hexrgba', {}, done)); 68 | it('expands position shorthands', done => test('position', {}, done)); 69 | it('applies quanity queries', done => test('quantity', {}, done)); 70 | it('does responsive type', done => test('responsive-type', {}, done)); 71 | it('adds new input pseudo-elements', done => test('input', {}, done)); 72 | }); 73 | 74 | describe('addons', () => { 75 | it('applies fallbacks', done => test('laggard', { fallbacks: true }, done)); 76 | it('autoprefixes', done => test('autoprefixer', { autoprefixer: true }, done)); 77 | }); 78 | 79 | describe('cli', () => { 80 | it('processes css on the command line', done => cliTest('position', '', done)); 81 | }); 82 | 83 | }); 84 | --------------------------------------------------------------------------------