diff --git a/.circleci/config.yml b/.circleci/config.yml
new file mode 100644
index 00000000..9b08d3b5
--- /dev/null
+++ b/.circleci/config.yml
@@ -0,0 +1,34 @@
+version: 2
+
+jobs:
+ build:
+ docker:
+ - image: circleci/ruby:2.6.3-node
+
+ steps:
+ - checkout
+
+ - restore_cache:
+ keys:
+ - neat-{{ arch }}-{{ checksum "neat.gemspec" }}
+
+ - run:
+ name: Install Ruby dependencies
+ command: bundle install --path vendor/bundle
+
+ - run:
+ name: Install SassDoc
+ command: sudo npm install -g sassdoc@2.5.0
+
+ - save_cache:
+ key: neat-{{ arch }}-{{ checksum "neat.gemspec" }}
+ paths:
+ - vendor/bundle
+
+ - run:
+ name: Run the tests
+ command: bundle exec rake
+
+ - run:
+ name: Parse SassDoc comments
+ command: sassdoc core/ --parse --verbose --strict
diff --git a/.github/ISSUE_TEMPLATE.md b/.github/ISSUE_TEMPLATE.md
new file mode 100644
index 00000000..05fd49d1
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE.md
@@ -0,0 +1,22 @@
+Welcome to Neat! 👋🎉
+
+Do you need help or have a question? Please check out Neat on [Stack Overflow]. Got an idea for a new feature or found a bug? Please fill out the sections below... thank you 👍
+
+[Stack Overflow]: https://stackoverflow.com/questions/tagged/neat
+
+### Issue Summary
+
+A summary of the issue and the browser/OS environment in which it occurs.
+
+### Steps to Reproduce
+
+1. This is the first step
+2. This is the second step, etc.
+
+Any other info, for example, why you consider this to be a bug? What did you expect to happen instead?
+
+### Technical details:
+
+- Neat Version:
+- Build Tool or Environment:
+- Browser/OS:
diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md
new file mode 100644
index 00000000..1d5549a4
--- /dev/null
+++ b/.github/PULL_REQUEST_TEMPLATE.md
@@ -0,0 +1,8 @@
+Got some code for us? Awesome 🎊!
+
+Please include a description of your change and the problem it solves. Then check your PR against this list. Thanks!
+- [ ] Commit message has a short title & issue references
+- [ ] Commits are squashed
+- [ ] The build will pass (run `bundle exec rake`).
+
+More info can be found by clicking the "guidelines for contributing" link above.
diff --git a/.gitignore b/.gitignore
index 68c1a20b..500787ca 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,15 +1,9 @@
+*gem
+*swp
.DS_store
-.sass-cache/
-*.scssc
-/stylesheets/.sass-cache/
-_site/
-_includes/
-_layouts/
-_sass/
-examples/
-images/
-css/
-_config.yml
-index.html
-pkg
+.sass-cache
+contrib/*.css
Gemfile.lock
+node_modules
+public
+tmp
diff --git a/.hound.yml b/.hound.yml
new file mode 100644
index 00000000..75e96ff9
--- /dev/null
+++ b/.hound.yml
@@ -0,0 +1,5 @@
+ruby:
+ enabled: true
+scss:
+ config_file: .scss-lint.yml
+ enabled: true
diff --git a/.npmignore b/.npmignore
new file mode 100644
index 00000000..f08b5a68
--- /dev/null
+++ b/.npmignore
@@ -0,0 +1,20 @@
+.github/
+.gitignore
+.hound.yml
+.ruby-version
+.sass-cache
+.scss-lint.yml
+bin/
+circle.yml
+CODE_OF_CONDUCT.md
+contrib/
+CONTRIBUTING.md
+Gemfile
+Gemfile.lock
+Gulpfile.js
+lib/
+neat.gemspec
+pkg/
+Rakefile
+RELEASING.md
+spec/
diff --git a/.rspec b/.rspec
deleted file mode 100644
index 16f9cdb0..00000000
--- a/.rspec
+++ /dev/null
@@ -1,2 +0,0 @@
---color
---format documentation
diff --git a/.scss-lint.yml b/.scss-lint.yml
new file mode 100644
index 00000000..e8611955
--- /dev/null
+++ b/.scss-lint.yml
@@ -0,0 +1,239 @@
+scss_files: "**/*.scss"
+
+severity: warning
+
+linters:
+ BangFormat:
+ enabled: true
+ space_before_bang: true
+ space_after_bang: false
+
+ BemDepth:
+ enabled: false
+
+ BorderZero:
+ enabled: true
+ convention: zero
+
+ ChainedClasses:
+ enabled: false
+
+ ColorKeyword:
+ enabled: true
+
+ ColorVariable:
+ enabled: false
+
+ Comment:
+ enabled: true
+ style: silent
+
+ DebugStatement:
+ enabled: true
+
+ DeclarationOrder:
+ enabled: true
+
+ DisableLinterReason:
+ enabled: false
+
+ DuplicateProperty:
+ enabled: true
+
+ ElsePlacement:
+ enabled: true
+ style: same_line
+
+ EmptyLineBetweenBlocks:
+ enabled: true
+ ignore_single_line_blocks: true
+
+ EmptyRule:
+ enabled: true
+
+ ExtendDirective:
+ enabled: false
+
+ FinalNewline:
+ enabled: true
+ present: true
+
+ HexLength:
+ enabled: true
+ style: short
+
+ HexNotation:
+ enabled: true
+ style: lowercase
+
+ HexValidation:
+ enabled: true
+
+ IdSelector:
+ enabled: true
+
+ ImportantRule:
+ enabled: true
+
+ ImportPath:
+ enabled: true
+ leading_underscore: false
+ filename_extension: false
+
+ Indentation:
+ enabled: true
+ allow_non_nested_indentation: false
+ character: space
+ width: 2
+
+ LeadingZero:
+ enabled: true
+ style: include_zero
+
+ MergeableSelector:
+ enabled: true
+ force_nesting: true
+
+ NameFormat:
+ enabled: true
+ allow_leading_underscore: true
+ convention: hyphenated_lowercase
+
+ NestingDepth:
+ enabled: true
+ max_depth: 3
+ ignore_parent_selectors: false
+
+ PlaceholderInExtend:
+ enabled: true
+
+ PropertyCount:
+ enabled: false
+
+ PropertySortOrder:
+ enabled: true
+ ignore_unspecified: false
+ min_properties: 2
+ separate_groups: false
+
+ PropertySpelling:
+ enabled: true
+ extra_properties: []
+ disabled_properties: []
+
+ PropertyUnits:
+ enabled: true
+ global: [
+ 'ch', 'em', 'ex', 'rem',
+ 'cm', 'in', 'mm', 'pc', 'pt', 'px', 'q',
+ 'vh', 'vw', 'vmin', 'vmax',
+ 'deg', 'grad', 'rad', 'turn',
+ 'ms', 's',
+ 'Hz', 'kHz',
+ 'dpi', 'dpcm', 'dppx',
+ '%']
+ properties:
+ line-height: []
+
+ PseudoElement:
+ enabled: true
+
+ QualifyingElement:
+ enabled: true
+ allow_element_with_attribute: false
+ allow_element_with_class: false
+ allow_element_with_id: false
+
+ SelectorDepth:
+ enabled: true
+ max_depth: 2
+
+ SelectorFormat:
+ enabled: true
+ convention: hyphenated_BEM
+
+ Shorthand:
+ enabled: true
+ allowed_shorthands: [1, 2, 3]
+
+ SingleLinePerProperty:
+ enabled: true
+ allow_single_line_rule_sets: true
+
+ SingleLinePerSelector:
+ enabled: true
+
+ SpaceAfterComma:
+ enabled: true
+ style: one_space
+
+ SpaceAfterComment:
+ enabled: false
+ allow_empty_comments: true
+
+ SpaceAfterPropertyColon:
+ enabled: true
+ style: one_space
+
+ SpaceAfterPropertyName:
+ enabled: true
+
+ SpaceAfterVariableName:
+ enabled: true
+
+ SpaceAroundOperator:
+ enabled: true
+ style: one_space
+
+ SpaceBeforeBrace:
+ enabled: true
+ style: space
+ allow_single_line_padding: true
+
+ SpaceBetweenParens:
+ enabled: true
+ spaces: 0
+
+ StringQuotes:
+ enabled: true
+ style: double_quotes
+
+ TrailingSemicolon:
+ enabled: true
+
+ TrailingWhitespace:
+ enabled: true
+
+ TrailingZero:
+ enabled: true
+
+ TransitionAll:
+ enabled: true
+
+ UnnecessaryMantissa:
+ enabled: true
+
+ UnnecessaryParentReference:
+ enabled: true
+
+ UrlFormat:
+ enabled: true
+
+ UrlQuotes:
+ enabled: true
+
+ VariableForProperty:
+ enabled: false
+ properties: []
+
+ VendorPrefix:
+ enabled: true
+ identifier_list: base
+ additional_identifiers: []
+ excluded_identifiers: []
+
+ ZeroUnit:
+ enabled: true
+
+ Compass::*:
+ enabled: false
diff --git a/.tool-versions b/.tool-versions
new file mode 100644
index 00000000..cb79f6ac
--- /dev/null
+++ b/.tool-versions
@@ -0,0 +1,2 @@
+ruby 2.6.3
+nodejs 10.16.0
diff --git a/CHANGELOG.md b/CHANGELOG.md
new file mode 100644
index 00000000..5b7371aa
--- /dev/null
+++ b/CHANGELOG.md
@@ -0,0 +1,388 @@
+# Change Log
+
+All notable changes to this project will be documented in this file. This
+project adheres to [Semantic Versioning](http://semver.org).
+
+## [Unreleased (`master`)][unreleased]
+
+Nothing at the moment.
+
+## [4.0.0] - 2019-07-10
+
+### Removed
+
+- Installation through Bower is no longer supported.
+- The sass gem (the deprecated Ruby Sass) is no longer a runtime dependency.
+
+## [3.0.1] - 2019-01-07
+
+### Fixed
+
+- Fixed an issue that would cause Neat to not be found when using SassC.
+- Fixed `if` function syntax error.
+
+## [3.0.0] - 2018-06-29
+
+- Extend grid-media to accept multiple custom grids
+
+## [2.1.0] - 2017-06-27
+
+### Added
+
+- A `--path` CLI option, which lets you install Neat into specific
+ directory. ([#459])
+- A `style` property has been added to our `package.json`, which makes for easy
+ importing when using npm-sass, sass-module-importer and others. ([#514])
+
+### Fixed
+
+- Fixed an issue that would cause Neat to not be found within Rails
+ apps. ([#612])
+- Simplified the gradient used in the `grid-visual` mixin for more consistent
+ cross-browser behaviour. ([#569])
+
+[#459]: https://github.com/thoughtbot/neat/pull/459
+[#514]: https://github.com/thoughtbot/neat/pull/514
+[#569]: https://github.com/thoughtbot/neat/pull/569
+[#612]: https://github.com/thoughtbot/neat/pull/612
+
+## [2.0.0] - 2017-02-17
+
+### Fixed
+
+- Custom grids inherit undefined properties from global `$neat-grid`
+- Fixed instillation from CLI
+- Remove float property from `grid-collapse`
+
+## [2.0.0.beta.2] - 2016-12-08
+
+### Added
+
+- Added `grid-visual` to show visual grid guides
+- Added ltr/rtl support
+
+### Removed
+
+- Removed `node-sass` dependency from `package.json`
+
+## [2.0.0.beta.1] - 2016-08-20
+
+### Added
+
+- Added `grid-collapse` to allow the creation of nested layouts
+
+## [2.0.0.alpha.1] - 2016-07-23
+
+### Added
+
+- Added `grid-shift` functionality
+- Added `grid-media` to allow the creation of media queries with custom grids
+
+## [2.0.0.alpha.0]
+
+### Added
+
+- Added `$neat-grid` map to store user defined default grid properties
+- Added core grid functionality in `grid-column`
+- Added improved documentation and releasing information
+- Added `grid-container` for floated grid which contains a simple clearfix
+- Added `grid-push` functionality
+
+### Changed
+
+- Use `core/` as the primary Neat source directory
+
+### Removed
+
+- Removed all previous Neat Sass
+ - Mixins
+ - `direction-context` has been removed
+ - `display-context` has been removed
+ - `fill-parent` has been removed
+ - `media` has been removed
+ - `omega` has been removed
+ - `outer-container` has been removed
+ - `pad` has been removed
+ - `row` has been removed
+ - `shift` has been removed
+ - `shift-in-context` has been removed
+ - `span-columns` has been removed
+ - `reset-display` has been removed
+ - `reset-layout-direction` has been removed
+ - `reset-all` has been removed
+ - Functions
+ - `new-breakpoint` has been removed
+ - Variables
+ - `$disable-warnings` has been removed
+ - `$column` has been removed
+ - `$gutter` has been removed
+ - `$grid-columns` has been removed
+ - `$max-width` has been removed
+ - `$border-box-sizing` has been removed
+ - `$default-feature` has been removed
+ - `$default-layout-direction` has been removed
+ - `$visual-grid` has been removed
+ - `$visual-grid-color` has been removed
+ - `$visual-grid-index` has been removed
+ - `$visual-grid-opacity` has been removed
+
+## [1.9.0] - 2017-06-27
+
+### Added
+
+- Add support for complex `nth-child` selectors in `omega()`. ([#340])
+
+### Changed
+
+- The background color for visual grid columns now alternates. ([#373])
+- Update node-sass dependency to 4.1.1. ([#520])
+
+### Fixed
+
+- Removed unnecessary deprecation warning when using the `reset-display` mixin.
+ ([#456])
+- The description of the `remove` CLI command now correctly outputs "remove".
+ ([#451])
+
+[#340]: https://github.com/thoughtbot/neat/pull/340
+[#373]: https://github.com/thoughtbot/neat/pull/373
+[#451]: https://github.com/thoughtbot/neat/pull/451
+[#456]: https://github.com/thoughtbot/neat/pull/456
+[#520]: https://github.com/thoughtbot/neat/pull/520
+
+## 1.8.0 - 2016-06-21
+
+### Added
+
+- Added `--version` and `-v` options to the CLI now has that show the version of
+ Neat you have installed
+
+### Removed
+
+- Neat no longer requires Bourbon
+
+## 1.7.4 - 2016-03-04
+
+### Added
+
+- Added an explicit sass requirement
+
+## 1.7.3 - 2016-02-29
+
+### Added
+
+- Added eyeglass support
+
+### Changed
+
+- Neat's npm package now includes the proper Sass paths
+- The default `$max-width` is now `1200px`
+
+## 1.7.2 - 2015-03-13
+
+### Added
+
+- Added Bourbon's updated `modular-scale` function for grid settings
+
+### Removed
+
+- Removed prefixes for `box-sizing`
+
+## 1.7.1 - 2015-01-02
+
+### Added
+
+- Added custom `not` function for Libsass 3.0 compatibility
+
+### Changed
+
+- Fixed bug related to the `omega`'s query argument
+
+## 1.7.0 - 2014-10-17
+
+### Added
+
+- Full compatibility with Sass 3.4+ and Libsass 3.0+
+
+### Changed
+
+- `direction-context` mixin changes the direction inside an entire block.
+- `display-context` mixin changes the display property inside an entire block.
+- `outer-container` now takes a max-width argument
+
+### Removed
+
+- Removed `reset-direction`
+- Removed `reset-display`
+
+## 1.5.1 - 2014-04-06
+
+### Added
+
+- Restore compatibility with Sass 3.2.x
+
+## 1.6.0 - 2014-03-28
+
+### Added
+- Added multiple media queries support to the `media` mixin, including queries
+ such as orientation
+
+### Changed
+- Updated to Sass 3.3 and silence `!global` variable warnings
+- Use absolute percentage widths for table displays
+
+### Removed
+
+- Passing table no longer adds padding to elements
+- Omega no longer supports table display
+
+## 1.6.0.pre2 - 2014-03-21
+
+### Changed
+
+- Use Sass 3.3 and silence global variable warnings
+
+## 1.6.0.pre - 2014-02-10
+
+### Added
+
+- Added multiple media queries support to the `media` mixin, including queries
+ such as orientation
+
+### Changed
+
+- Use absolute percentage widths for table displays
+
+### Removed
+
+- Passing table no longer adds padding to elements
+- Omega no longer supports table display
+
+## 1.5.0 - 2013-22-15
+
+### Added
+
+- Added the ability for `span-columns` to omit display property from the output
+- Improved browser support
+
+### Changed
+
+- Renamed `span-columns` collapse argument to block-collapse
+- Made `shift` take parent column argument (useful when other `span-columns`
+ calls override the nesting context)
+
+## 1.4.0 - 2013-08-28
+
+### Added
+
+- Added collapse argument to `span-columns` in order to remove gutter
+
+### Changed
+
+- Fixed visual grid overrides by reordering breakpoints
+- Unified padding across table cells
+- Specified comma as separator for gradient-stops append for libsass
+
+### Removed
+
+## 1.3.0 - 2013-05-03
+
+### Added
+
+- Added global RTL layout support
+- Added row-specific RTL layout support
+- Added auto-clearing for elements using `omega(nth-child)` (works only with
+ simple `nth-child` arguments due to limited string operations in Sass)
+
+### Changed
+
+- `reset-display`, `reset-layout-direction`, and `reset-all` for all your reset needs!
+
+### Removed
+
+- The visual grid no longer blocks user interactions
+- `omega` will no longer take `$direction` in favor of `row($direction)` or
+ `$default-layout-direction`
+
+
+## 1.2.1 - 2013-04-04
+
+### Added
+
+- Added stylesheets path to `Sass.load_paths`
+- Official Docset
+
+### Changed
+
+- Force full-width and fixed table-layout on `row(table)`
+
+## 1.2.0 - 2013-02-18
+
+### Added
+
+- Auto-detect table layout when `span-columns` is called inside `row(table)`
+
+### Changed
+
+- Make `shift` reset context after each nested call
+
+## 1.1.0 - 2013-01-09
+
+### Added
+
+- `pad` takes shorthand arguments
+
+### Changed
+
+- Merge `omega` and `nth-omega`
+- Last child in table layouts keeps its right-padding
+
+## 1.0.2 - 2012-11-19
+
+### Added
+
+- Add explicit require to the bourbon gem
+ [#38](https://github.com/thoughtbot/neat/issues/38)
+
+## 1.0.1 - 2012-11-06
+
+### Added
+
+- Relative path imports in Rails
+
+### Changed
+
+- Make `em` always return a number
+
+## 1.0.0 - 2012-10-29
+
+### Added
+
+- Added executable for non-Rails projects
+- Added visual grid
+- Added `media` and `new-breakpoint` mixins
+- Added `_neat-helpers.scss` as a public interface for Neat
+
+### Changed
+
+- Made `shift` work properly in nested contexts
+
+### Removed
+
+- Removed typography mixins and settings
+
+## 0.4.2 - 2012-08-31
+
+- Initial release
+
+[unreleased]: https://github.com/thoughtbot/neat/compare/v4.0.0...HEAD
+[4.0.0]: https://github.com/thoughtbot/neat/compare/v3.0.1...v4.0.0
+[3.0.1]: https://github.com/thoughtbot/neat/compare/v3.0.0...v3.0.1
+[3.0.0]: https://github.com/thoughtbot/neat/compare/v2.1.0...v3.0.0
+[2.1.0]: https://github.com/thoughtbot/neat/compare/v2.0.0...v2.1.0
+[2.0.0]: https://github.com/thoughtbot/neat/compare/v2.0.0.beta.2...v2.0.0
+[2.0.0.beta.2]: https://github.com/thoughtbot/neat/compare/v2.0.0.beta.1...v2.0.0.beta.2
+[2.0.0.beta.1]: https://github.com/thoughtbot/neat/compare/v2.0.0.alpha.1...v2.0.0.beta.1
+[2.0.0.alpha.1]: https://github.com/thoughtbot/neat/compare/v2.0.0.alpha.0...v2.0.0.alpha.1
+[2.0.0.alpha.0]: https://github.com/thoughtbot/neat/compare/v1.8.0...v2.0.0.alpha.0
+[1.9.0]: https://github.com/thoughtbot/neat/compare/v1.8.0...v1.9.0
diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md
new file mode 100644
index 00000000..ca610b15
--- /dev/null
+++ b/CODE_OF_CONDUCT.md
@@ -0,0 +1,6 @@
+# Code of Conduct
+
+By participating in this project, you agree to abide by the
+[thoughtbot code of conduct][tb-coc].
+
+[tb-coc]: https://thoughtbot.com/open-source-code-of-conduct
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index d237d44c..994a9bc8 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -1,4 +1,7 @@
-We love pull requests. Here's a quick guide:
+We love pull requests from everyone. By participating in this project, you
+agree to abide by the thoughtbot [code of conduct]. Here’s a quick guide:
+
+[code of conduct]: https://thoughtbot.com/open-source-code-of-conduct
1. Fork the repository.
2. Make your changes in a topic branch.
@@ -33,3 +36,15 @@ Some things that will increase the chance that your pull request is accepted:
* Declarations within a block should be ordered alphabetically.
* Blank lines between rules.
* No trailing whitespace. Blank lines should not have any space.
+
+**Contrib examples**
+
+For user-facing changes, please provide an example in sample page contained in
+the `./contrib` folder. Also, please put a screenshot of the changes into the
+Pull Request.
+
+To see the `./contrib` example page:
+
+1. Install node
+* Run `npm install`
+* Run `npm run contrib`
diff --git a/Gemfile b/Gemfile
index 755701e0..b4e2a20b 100644
--- a/Gemfile
+++ b/Gemfile
@@ -1,4 +1,3 @@
-source "http://rubygems.org"
+source "https://rubygems.org"
-# Specify your gem's dependencies in neat.gemspec
gemspec
diff --git a/Gulpfile.js b/Gulpfile.js
new file mode 100644
index 00000000..d2a9cfe8
--- /dev/null
+++ b/Gulpfile.js
@@ -0,0 +1,42 @@
+const browserSync = require('browser-sync').create();
+const gulp = require('gulp');
+const sass = require('gulp-sass');
+
+const paths = {
+ markup: {
+ src: './contrib/**/*.html',
+ },
+ styles: {
+ src: [
+ './contrib/**/*.scss',
+ './core/**/*.scss',
+ ],
+ dest: './contrib/',
+ }
+};
+
+function styles() {
+ return gulp.src(paths.styles.src)
+ .pipe(sass())
+ .pipe(gulp.dest(paths.styles.dest));
+};
+
+function serve(done) {
+ browserSync.init({
+ open: false,
+ server: './contrib/',
+ });
+ done();
+}
+
+function reload(done) {
+ browserSync.reload();
+ done();
+}
+
+function watch() {
+ gulp.watch(paths.markup.src, reload);
+ gulp.watch(paths.styles.src, gulp.series(styles, reload));
+}
+
+gulp.task('default', gulp.series(styles, serve, watch));
diff --git a/LICENSE b/LICENSE.md
similarity index 70%
rename from LICENSE
rename to LICENSE.md
index 56f310f1..198a9e32 100644
--- a/LICENSE
+++ b/LICENSE.md
@@ -1,23 +1,21 @@
-LICENSE
+The MIT License (MIT)
-The MIT License
-
-Copyright (c) 2012-2014 thoughtbot, inc.
+Copyright © 2012 [thoughtbot, inc.](http://thoughtbot.com)
Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
+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:
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+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.
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/NEWS.md b/NEWS.md
deleted file mode 100644
index 076a75a4..00000000
--- a/NEWS.md
+++ /dev/null
@@ -1,47 +0,0 @@
-### 1.3.0 (2013-05-03)
-
- * New: Add global RTL layout support
- * New: Add row-specific RTL layout support
- * New: Add auto-clearing for elements using `omega(nth-child)` (works only with simple nth-child arguments due to limited string operations in Sass)
- * New: `reset-display`, `reset-layout-direction`, and `reset-all` for all your reset needs!
- * Fix: The visual grid no longer blocks user interactions
- * Deprecate: `omega()` will no longer take `$direction` in favor of `row($direction)` or `$default-layout-direction`
-
-### 1.2.1 (2013-04-04)
-
- * New: Add stylesheets path to Sass.load_paths
- * Fixed: Force full-width and fixed table-layout on `row(table)`
- * Official Docset
-
-### 1.2.0 (2013-02-18)
-
- * New: Auto-detect table layout when `span-columns()` is called inside `row(table)`
- * Fix: Make `shift()` reset context after each nested call
-
-### 1.1.0 (2013-01-09)
-
- * New: `pad()` takes shorthand arguments
- * Refactor: Merge `omega()` and `nth-omega()`
- * Fix: Last child in table layouts keeps its right-padding
-
-### 1.0.2 (2012-11-19)
-
- * Fix: Add explicit require to the bourbon gem [#38](https://github.com/thoughtbot/neat/issues/38)
-
-### 1.0.1 (2012-11-06)
-
- * Fix: Make `em()` always return a number
- * Fix: Relative path imports in Rails
-
-### 1.0.0 (2012-10-29)
-
- * New: Add executable for non-Rails projects
- * New: Add visual grid
- * New: Add `media` and `new-breakpoint` mixins
- * New: Add `_neat-helpers.scss` as a public interface for Neat
- * Fix: Make `shift()` work properly in nested contexts
- * Refactor: Remove typography mixins and settings
-
-### 0.4.2 (2012-08-31)
-
- * Initial release
diff --git a/README.md b/README.md
index 5cbc4962..95960f54 100644
--- a/README.md
+++ b/README.md
@@ -1,247 +1,210 @@
-[](http://thoughtbot.com/neat)
+[
][Neat]
-[](#)
-[](https://codeclimate.com/github/thoughtbot/neat) [](https://gitter.im/thoughtbot/neat) [](#)
+[](https://houndci.com)
-Neat is an open source fluid grid framework built on top of [Bourbon](http://bourbon.io) with the aim of being easy enough to use out of the box and flexible enough to customize down the road.
+## A lightweight and flexible Sass grid
--
-:warning: Neat **1.6.0** requires Sass **3.3.x**. If you are using **libsass** or **sass-rails** use **1.5.1**.
+**Note:** This project is no longer maintained. We favor and encourage people to use
+native CSS features like Grid and Flexbox. Float-based grid frameworks like Neat
+are no longer necessary.
-Requirements
-===
-- Sass 3.3+
-- Bourbon 3.1+
+[Neat] is a fluid grid framework with the aim of being easy enough to
+use out of the box and flexible enough to customize down the road.
-Install Instructions
-===
-Install/update the dependencies first:
+ [Neat]: https://neat.bourbon.io/
-```bash
-gem install sass #or gem update sass
-gem install bourbon #or gem update bourbon
-```
-Install Neat:
+### Helpful Links
-```bash
-gem install neat
-```
-Then `cd` to your Sass directory and run:
+- [Demos](https://neat.bourbon.io/examples/)
+- [Documentation](https://neat.bourbon.io/docs/latest/)
+- [Change log](CHANGELOG.md)
+- [Twitter](https://twitter.com/bourbonsass)
+- [Stack Overflow](https://stackoverflow.com/questions/tagged/neat)
+- [Neat 2.0 Building the future of floated Sass grids](https://robots.thoughtbot.com/building-the-future-of-floated-css-grids) by [@whmii](http://social.mcmahan.me)
+- [Getting started with Neat 2.0, a lightweight and flexible Sass grid](https://robots.thoughtbot.com/the-release-of-neat-2-0-a-lightweight-and-flexible-sass-grid) by [@whmii](http://social.mcmahan.me)
-```bash
-bourbon install #If not installed
-neat install
-```
+## Table of Contents
-In your main stylesheet:
+- [Requirements](#requirements)
+- [Installation](#installation)
+- [Command Line Interface](#command-line-interface)
+- [The Bourbon Family](#the-bourbon-family)
+- [Contributing](#contributing)
+- [License](#license)
+- [About](#about)
-```sass
-@import "bourbon/bourbon";
-@import "neat/neat";
-```
+## Requirements
-To update Neat files, run:
+- [Sass] 3.4+ or [LibSass] 3.3+
-```bash
-neat update
-```
+ [Sass]: https://github.com/sass/sass
+ [LibSass]: https://github.com/sass/libsass
-and to remove them:
+## Installation
-```bash
-neat remove
-```
+1. Install the Neat gem using the [RubyGems] package manager:
-Ruby on Rails
-===
+ ```bash
+ gem install neat
+ ```
-In your Gemfile:
+1. Install or update Neat’s dependencies:
-```bash
-gem 'neat'
-```
+ ```bash
+ gem install sass # or gem update sass
+ ```
-After running `bundle install` you will be able to use Bourbon and Neat together.
+ **Pro Tip:** You can target installation into a specific directory using the
+ `path` flag:
-If you see this error `Bundler could not find compatible versions for gem "sass"` run:
+ ```bash
+ neat install --path my/custom/path/
+ ```
-```bash
-bundle update sass
-```
+1. Install the Neat library into the current directory:
-Within your `application.css.scss` file place the following:
+ ```bash
+ neat install
+ ```
-```sass
-@import "bourbon";
-@import "neat";
-```
+1. Import Neat in your stylesheet:
-Getting started
-===
+ ```scss
+ @import "neat/neat";
+ ```
-First off, if you are planning to override the default grid settings (12 columns), it is recommended to create a `_grid-settings.scss` file for that purpose. Make sure to import it right *before* importing Neat:
+ It’s not recommended to add or modify the Neat files so that you can update
+ them easily.
-```scss
-@import "bourbon/bourbon"; // or "bourbon" when in Rails
-@import "grid-settings";
-@import "neat/neat"; // or "neat" when in Rails
-```
+[RubyGems]: https://rubygems.org
-In your newly created `_grid-settings.scss`, import `neat-helpers` if you are planning to use `new-breakpoint()`, then define your new variables:
+### Installation for Ruby on Rails 4.2+
-```scss
-@import "neat/neat-helpers"; // or "neat-helpers" when in Rails
+1. Add Neat to your Gemfile:
-// Change the grid settings
-$column: 90px;
-$gutter: 30px;
-$grid-columns: 10;
-$max-width: em(1088);
+ ```ruby
+ gem "neat"
+ ```
-// Define your breakpoints
-$tablet: new-breakpoint(max-width 768px 8);
-$mobile: new-breakpoint(max-width 480px 4);
-```
+1. Then run:
-See the [docs](http://neat.bourbon.io/docs/#variables) for a full list of settings.
+ ```bash
+ bundle install
+ ```
-Next, include the `outer-container` mixin in the topmost container (to which the `max-width` setting will be applied):
+ If you see the error `Bundler could not find compatible versions for gem
+ "sass"`, run:
-```scss
-div.container {
- @include outer-container;
-}
-```
+ ```bash
+ bundle update sass
+ ```
-Then use `span-columns` on any element to specify the number of columns it should span:
+1. Import Neat in your `application.scss`:
-```scss
-div.element {
- @include span-columns(6);
-}
-```
+ ```scss
+ @import "neat";
+ ```
-If the element's parent isn't the top-most container, you need to add the number of columns of the parent element to keep the right proportions:
-
-```scss
-div.container {
- @include outer-container;
- div.parent-element {
- @include span-columns(8);
- div.element {
- @include span-columns(6 of 8);
- }
- }
-}
-```
+ It should be noted that `@import` rules are not compatible with Sprockets
+ directives. You need to use one or the other.
-To make your layout responsive, use the `media()` mixin to modify both the grid and the layout:
-
-```scss
-.my-class {
- @include media($mobile) { // As defined in _grid-settings.scss
- @include span-columns(2);
- }
-}
-
-// Compiled CSS
-@media screen and (max-width: 480px) {
- .my-class {
- display: block;
- float: left;
- margin-right: 7.42297%;
- width: 46.28851%; // 2 columns of the total 4 in this media context
- }
- .my-class:last-child {
- margin-right: 0;
- }
-}
-```
+### Installing with npm and using a Node-based asset pipeline
-By setting `$visual-grid` to `true`, you can display the base grid in the background (default) or as an overlay. You can even change the color and opacity of the grid-lines by overriding the default settings as detailed in the section below. Keep in mind that on Webkit, rounding errors in the fluid grid might result in the overlay being few pixels off.
-
-The visual grid reflects the changes applied to the grid via the `new-breakpoint()` mixin, as long as the media contexts are defined *before* importing Neat.
-
-Browser support
-===
-- Firefox 3.5+
-- Safari 4.0+
-- Chrome 4.0+
-- Opera 9.5+
-- IE 9+ (Visual grid is IE10 only)
-- IE 8 with [selectivizr](http://selectivizr.com) (no `media()` support)
-
-Frequently asked questions
-==========================
-
-##### How do I use `omega()` in a mobile-first workflow?
-
-Using `omega()` with an `nth-child` pseudo selector in a mobile-first workflow
-will cause the style to be applied to wider-viewport media queries as well. That
-is the cascading nature of CSS.
-
-One solution would be to provide an `omega-reset()` mixin that negates the
-effect of `omega()` on that specific `nth-child` pseudo selector. While this is
-often the most suggested solution, it is also a lazy hack that outputs ugly code
-and can quickly get out of hand in complex layouts. As a general rule, having to
-*undo* CSS styles is a sign of poor stylesheet architecture (More about
-[CSS code smells](http://csswizardry.com/2012/11/code-smells-in-css/)).
-
-The other, more elegant, solution is to use mutually exclusive media queries,
-also referred to as [media-query
-splitting](http://simurai.com/blog/2012/08/29/media-query-splitting/). This
-would guarantee that `omega()` styles are only applied where desired.
-
-```scss
-
-$first-breakpoint-value: 400px;
-$second-breakpoint-value: 700px;
-$medium-viewport: new-breakpoint(min-width em($first-breakpoint-value) max-width
-em($second-breakpoint-value));
-$large-viewport: new-breakpoint(min-width em($second-breakpoint-value + 1));
-
-.element {
- @include media($medium-viewport) {
- @include span-columns(6);
- @include omega(2n);
- }
-
- @include media($large-viewport) {
- @include span-columns(4);
- @include omega(3n);
- }
-}
+1. Add Neat as a dependency:
+
+ ```bash
+ npm install --save bourbon-neat
+ ```
+
+1. If you’re using [eyeglass], skip to Step 3. Otherwise, you’ll need to add
+ Neat to your node-sass `includePaths` option.
+ `require("bourbon-neat").includePaths` is an array of directories that you
+ should pass to node-sass. How you do this depends on how node-sass is
+ integrated into your project.
+
+1. Import Neat into your Sass files:
+
+ ```scss
+ @import "neat";
+ ```
+
+[eyeglass]: http://eyeglass.rocks
+
+### Installing older versions of Neat
+
+1. Uninstall any Neat gem versions you already have:
+
+ ```bash
+ gem uninstall neat
+ ```
+
+1. Reinstall the Neat gem, using the `-v` flag to specify the version you need:
+
+ ```bash
+ gem install neat -v 1.8.1
+ ```
+
+1. Follow the [instructions above](#installation) to install Neat into your
+ project.
+
+## Command Line Interface
+
+```bash
+neat [options]
```
-If, for some reason, you still think that `omega-reset` is the only way you want to go,
-check out Josh Fry's
-[omega-reset](http://joshfry.me/notes/omega-reset-for-bourbon-neat/).
+### Options
+
+| Option | Description |
+| :---------------- | :------------------------ |
+| `-h`, `--help` | Show help |
+| `-v`, `--version` | Show the version number |
+| `--path` | Specify a custom path |
+| `--force` | Force install (overwrite) |
+
+### Commands
+
+| Command | Description |
+| :------------- | :------------------------------------------------- |
+| `neat install` | Install Neat into the current directory |
+| `neat update` | Overwrite and update Neat in the current directory |
+| `neat remove` | Removes Neat from the current directory |
+| `neat help` | Show help |
+| `neat version` | Show the version number |
+
+## The Bourbon family
+
+- [Bourbon]: A lightweight Sass tool set
+- [Bitters]: Scaffold styles, variables and structure for Bourbon projects
+
+ [Bourbon]: https://github.com/thoughtbot/bourbon
+ [Bitters]: https://github.com/thoughtbot/bitters
+
+## Contributing
+
+See the [contributing] document. Thank you, [contributors]!
-##### Framework X has this feature that Neat seems to be missing. Can you add it?
+ [contributing]: CONTRIBUTING.md
+ [contributors]: https://github.com/thoughtbot/neat/graphs/contributors
-Unless you [open a pull request](https://github.com/thoughtbot/neat/compare/), the answer is most likely going to be no. Neat is
-lightweight and simple compared to other grid frameworks, and strives to
-remain so. We have plans for adding new features in future versions of the
-framework, but these will be most likely to support new ways of working with
-layouts on the Web, not patches to existing ones.
+## License
-Links
-=====
+Neat is copyright © 2012 [thoughtbot, inc.][thoughtbot] It is free software, and
+may be redistributed under the terms specified in the [license].
-- Read the [online documentation](http://neat.bourbon.io/docs/).
-- Add the docset to [Dash](http://kapeli.com/dash) 1.8+ (Preferences **>** Downloads **>** + *Add Docset Feed* **>** `http://neat.bourbon.io/docset/Neat.xml`)
-- Ask questions on [Stack Overflow](http://stackoverflow.com/questions/tagged/neat+bourbon). Don't forget to tag them`bourbon` and `neat`.
-- Suggest features or file bugs in [Issues](https://github.com/thoughtbot/neat/issues).
-- Read the [contribution guidelines](https://github.com/thoughtbot/neat/blob/master/CONTRIBUTING.md).
-- Say hi to [@kaishin](https://twitter.com/kaishin) and [@kylefiedler](https://twitter.com/kylefiedler).
-- Join `#bourbon-neat` on `irc.freenode.net`.
+ [license]: LICENSE.md
+## About
-Credits & License
-=================
+Neat is maintained by the thoughtbot design team. It is funded by
+[thoughtbot, inc.][thoughtbot] and the names and logos for thoughtbot are
+trademarks of thoughtbot, inc.
-
+[][thoughtbot]
-Bourbon is maintained and funded by [thoughtbot, inc](http://thoughtbot.com/). Follow [@thoughtbot](http://twitter.com/thoughtbot) on Twitter.
+We love open-source software! See [our other projects][community] or
+[hire us][hire] to design, develop, and grow your product.
-Bourbon Neat is Copyright © 2012-2014 thoughtbot. It is free software, and may be redistributed under the terms specified in the LICENSE file.
+ [thoughtbot]: https://thoughtbot.com?utm_source=github
+ [community]: https://thoughtbot.com/community?utm_source=github
+ [hire]: https://thoughtbot.com/hire-us?utm_source=github
diff --git a/RELEASING.md b/RELEASING.md
new file mode 100644
index 00000000..03062e5a
--- /dev/null
+++ b/RELEASING.md
@@ -0,0 +1,28 @@
+# Releasing
+
+1. Update the version number in these places:
+
+ - `lib/neat/version.rb`
+ - `core/_neat.scss`
+ - `package.json`
+
+1. Update `CHANGELOG.md`
+
+1. Commit changes. Use the convention “Neat vX.X.X” in your commit message.
+ There shouldn’t be code changes, and thus CI doesn’t need to run.
+
+1. Run `bundle exec rake release`, which tags the release, pushes the tag to GitHub, and
+ pushes the gem to RubyGems.org.
+
+1. Run `npm publish`, which pushes the new version to npm’s registry (if
+ releasing a pre-release, run `npm publish --tag beta`).
+
+1. Draft a [new GitHub release].
+
+1. Re-generate and publish the [documentation website].
+
+1. Announce the new release, making sure to say “thank you” to the contributors
+ who helped shape this version!
+
+[new GitHub release]: https://github.com/thoughtbot/neat/releases/new
+[documentation website]: https://github.com/thoughtbot/neat.bourbon.io
diff --git a/Rakefile b/Rakefile
index f9bb8881..1f920cad 100644
--- a/Rakefile
+++ b/Rakefile
@@ -1,22 +1,8 @@
-require 'rubygems'
-require 'bundler'
-require 'rspec/core/rake_task'
+require "bundler"
+require "rspec/core/rake_task"
+
Bundler::GemHelper.install_tasks
RSpec::Core::RakeTask.new(:spec)
task :default => :spec
-
-task :test do
- puts "Creating a Bourbon directory..."
- `bourbon install --path test`
- puts "Generating CSS..."
- `sass -I . --watch test:css/ --style expanded`
-end
-
-task :clean do
- puts "Deleting Bourbon directory..."
- `rm -rf test/bourbon`
- puts "Deleting generated CSS..."
- `rm -rf css/`
-end
diff --git a/app/assets/stylesheets/_neat-helpers.scss b/app/assets/stylesheets/_neat-helpers.scss
deleted file mode 100644
index e915c698..00000000
--- a/app/assets/stylesheets/_neat-helpers.scss
+++ /dev/null
@@ -1,7 +0,0 @@
-// Functions
-@import "functions/private";
-@import "functions/new-breakpoint";
-
-// Settings
-@import "settings/grid";
-@import "settings/visual-grid";
diff --git a/app/assets/stylesheets/_neat.scss b/app/assets/stylesheets/_neat.scss
deleted file mode 100644
index 651239a8..00000000
--- a/app/assets/stylesheets/_neat.scss
+++ /dev/null
@@ -1,21 +0,0 @@
-// Bourbon Neat 1.6.0
-// MIT Licensed
-// Copyright (c) 2012-2013 thoughtbot, inc.
-
-// Helpers
-@import "neat-helpers";
-
-// Grid
-@import "grid/private";
-@import "grid/reset";
-@import "grid/grid";
-@import "grid/omega";
-@import "grid/outer-container";
-@import "grid/span-columns";
-@import "grid/row";
-@import "grid/shift";
-@import "grid/pad";
-@import "grid/fill-parent";
-@import "grid/media";
-@import "grid/to-deprecate";
-@import "grid/visual-grid";
diff --git a/app/assets/stylesheets/functions/_new-breakpoint.scss b/app/assets/stylesheets/functions/_new-breakpoint.scss
deleted file mode 100644
index a89c9ce6..00000000
--- a/app/assets/stylesheets/functions/_new-breakpoint.scss
+++ /dev/null
@@ -1,16 +0,0 @@
-@function new-breakpoint($query:$feature $value $columns, $total-columns: $grid-columns) {
-
- @if length($query) == 1 {
- $query: $default-feature nth($query, 1) $total-columns;
- }
-
- @else if length($query) % 2 == 0 {
- $query: append($query, $total-columns);
- }
-
- @if not belongs-to($query, $visual-grid-breakpoints) {
- $visual-grid-breakpoints: append($visual-grid-breakpoints, $query, comma) !global;
- }
-
- @return $query;
-}
diff --git a/app/assets/stylesheets/functions/_private.scss b/app/assets/stylesheets/functions/_private.scss
deleted file mode 100644
index 8ce57e23..00000000
--- a/app/assets/stylesheets/functions/_private.scss
+++ /dev/null
@@ -1,114 +0,0 @@
-// Checks if a number is even
-@function is-even($int) {
- @return $int % 2 == 0
-}
-
-// Checks if an element belongs to a list
-@function belongs-to($tested-item, $list) {
- @return index($list, $tested-item) != false;
-}
-
-// Contains display value
-@function contains-display-value($query) {
- @return belongs-to(table, $query)
- or belongs-to(block, $query)
- or belongs-to(inline-block, $query)
- or belongs-to(inline, $query);
-}
-
-// Parses the first argument of span-columns()
-@function container-span($span: $span) {
- @if length($span) == 3 {
- $container-columns: nth($span, 3);
- @return $container-columns;
- }
-
- @else if length($span) == 2 {
- $container-columns: nth($span, 2);
- @return $container-columns;
- }
-
- @else {
- @return $grid-columns;
- }
-}
-
-@function container-shift($shift: $shift) {
- $parent-columns: $grid-columns !global !default;
-
- @if length($shift) == 3 {
- $container-columns: nth($shift, 3);
- @return $container-columns;
- }
-
- @else if length($shift) == 2 {
- $container-columns: nth($shift, 2);
- @return $container-columns;
- }
-
- @else {
- @return $parent-columns;
- }
-}
-
-// Generates a striped background
-@function gradient-stops($grid-columns, $color: $visual-grid-color) {
- $transparent: rgba(0,0,0,0);
-
- $column-width: flex-grid(1, $grid-columns);
- $gutter-width: flex-gutter($grid-columns);
- $column-offset: $column-width;
-
- $values: ($transparent 0, $color 0);
-
- @for $i from 1 to $grid-columns*2 {
- @if is-even($i) {
- $values: append($values, $transparent $column-offset, comma);
- $values: append($values, $color $column-offset, comma);
- $column-offset: $column-offset + $column-width;
- }
-
- @else {
- $values: append($values, $color $column-offset, comma);
- $values: append($values, $transparent $column-offset, comma);
- $column-offset: $column-offset + $gutter-width;
- }
- }
-
- @return $values;
-}
-
-// Layout direction
-@function get-direction($layout, $default) {
- $direction: nil;
-
- @if $layout == LTR or $layout == RTL {
- $direction: direction-from-layout($layout);
- } @else {
- $direction: direction-from-layout($default);
- }
-
- @return $direction;
-}
-
-@function direction-from-layout($layout) {
- $direction: nil;
-
- @if $layout == LTR {
- $direction: right;
- } @else {
- $direction: left;
- }
-
- @return $direction;
-}
-
-@function get-opposite-direction($direction) {
- $opposite-direction: left;
-
- @if $direction == left {
- $opposite-direction: right;
- }
-
- @return $opposite-direction;
-}
diff --git a/app/assets/stylesheets/grid/_fill-parent.scss b/app/assets/stylesheets/grid/_fill-parent.scss
deleted file mode 100644
index 859c9779..00000000
--- a/app/assets/stylesheets/grid/_fill-parent.scss
+++ /dev/null
@@ -1,7 +0,0 @@
-@mixin fill-parent() {
- width: 100%;
-
- @if $border-box-sizing == false {
- @include box-sizing(border-box);
- }
-}
diff --git a/app/assets/stylesheets/grid/_grid.scss b/app/assets/stylesheets/grid/_grid.scss
deleted file mode 100644
index e074b6c5..00000000
--- a/app/assets/stylesheets/grid/_grid.scss
+++ /dev/null
@@ -1,5 +0,0 @@
-@if $border-box-sizing == true {
- * {
- @include box-sizing(border-box);
- }
-}
diff --git a/app/assets/stylesheets/grid/_media.scss b/app/assets/stylesheets/grid/_media.scss
deleted file mode 100644
index bf27f70e..00000000
--- a/app/assets/stylesheets/grid/_media.scss
+++ /dev/null
@@ -1,38 +0,0 @@
-@mixin media($query:$feature $value $columns, $total-columns: $grid-columns) {
- @if length($query) == 1 {
- @media screen and ($default-feature: nth($query, 1)) {
- $default-grid-columns: $grid-columns;
- $grid-columns: $total-columns !global;
- @content;
- $grid-columns: $default-grid-columns !global;
- }
- }
-
- @else {
- $loopTo: length($query);
- $mediaQuery: 'screen and ';
- $default-grid-columns: $grid-columns;
- $grid-columns: $total-columns !global;
-
- @if length($query) % 2 != 0 {
- $grid-columns: nth($query, $loopTo) !global;
- $loopTo: $loopTo - 1;
- }
-
- $i: 1;
- @while $i <= $loopTo {
- $mediaQuery: $mediaQuery + '(' + nth($query, $i) + ': ' + nth($query, $i + 1) + ') ';
-
- @if ($i + 1) != $loopTo {
- $mediaQuery: $mediaQuery + 'and ';
- }
-
- $i: $i + 2;
- }
-
- @media #{$mediaQuery} {
- @content;
- $grid-columns: $default-grid-columns !global;
- }
- }
-}
diff --git a/app/assets/stylesheets/grid/_omega.scss b/app/assets/stylesheets/grid/_omega.scss
deleted file mode 100644
index c99ed6cf..00000000
--- a/app/assets/stylesheets/grid/_omega.scss
+++ /dev/null
@@ -1,61 +0,0 @@
-// Remove last element gutter
-@mixin omega($query: block, $direction: default) {
- $table: if(belongs-to(table, $query), true, false);
- $auto: if(belongs-to(auto, $query), true, false);
-
- @if $direction != default {
- @warn "The omega mixin will no longer take a $direction argument. To change the layout direction, use row($direction) or set $default-layout-direction instead."
- } @else {
- $direction: get-direction($layout-direction, $default-layout-direction);
- }
-
- @if $table {
- @warn "The omega mixin no longer removes padding in table layouts."
- }
-
- @if length($query) == 1 {
- @if $auto {
- &:last-child {
- margin-#{$direction}: 0;
- }
- }
-
- @else if contains-display-value($query) and $table == false {
- margin-#{$direction}: 0;
- }
-
- @else {
- @include nth-child($query, $direction);
- }
- }
-
- @else if length($query) == 2 {
- @if $auto {
- &:last-child {
- margin-#{$direction}: 0;
- }
- }
-
- @else {
- @include nth-child(nth($query, 1), $direction);
- }
- }
-
- @else {
- @warn "Too many arguments passed to the omega() mixin."
- }
-}
-
-@mixin nth-child($query, $direction) {
- $opposite-direction: get-opposite-direction($direction);
-
- &:nth-child(#{$query}) {
- margin-#{$direction}: 0;
- }
-
- @if type-of($query) == number {
- &:nth-child(#{$query}+1) {
- clear: $opposite-direction;
- }
- }
-}
diff --git a/app/assets/stylesheets/grid/_outer-container.scss b/app/assets/stylesheets/grid/_outer-container.scss
deleted file mode 100644
index 22c541f4..00000000
--- a/app/assets/stylesheets/grid/_outer-container.scss
+++ /dev/null
@@ -1,8 +0,0 @@
-@mixin outer-container {
- @include clearfix;
- max-width: $max-width;
- margin: {
- left: auto;
- right: auto;
- }
-}
diff --git a/app/assets/stylesheets/grid/_pad.scss b/app/assets/stylesheets/grid/_pad.scss
deleted file mode 100644
index 3ef5d80e..00000000
--- a/app/assets/stylesheets/grid/_pad.scss
+++ /dev/null
@@ -1,8 +0,0 @@
-@mixin pad($padding: flex-gutter()) {
- $padding-list: null;
- @each $value in $padding {
- $value: if($value == 'default', flex-gutter(), $value);
- $padding-list: join($padding-list, $value);
- }
- padding: $padding-list;
-}
diff --git a/app/assets/stylesheets/grid/_private.scss b/app/assets/stylesheets/grid/_private.scss
deleted file mode 100644
index b1953368..00000000
--- a/app/assets/stylesheets/grid/_private.scss
+++ /dev/null
@@ -1,43 +0,0 @@
-$parent-columns: $grid-columns !default;
-$fg-column: $column;
-$fg-gutter: $gutter;
-$fg-max-columns: $grid-columns;
-$container-display-table: false !default;
-$layout-direction: nil !default;
-
-@function flex-grid($columns, $container-columns: $fg-max-columns) {
- $width: $columns * $fg-column + ($columns - 1) * $fg-gutter;
- $container-width: $container-columns * $fg-column + ($container-columns - 1) * $fg-gutter;
- @return percentage($width / $container-width);
-}
-
-@function flex-gutter($container-columns: $fg-max-columns, $gutter: $fg-gutter) {
- $container-width: $container-columns * $fg-column + ($container-columns - 1) * $fg-gutter;
- @return percentage($gutter / $container-width);
-}
-
-@function grid-width($n) {
- @return $n * $gw-column + ($n - 1) * $gw-gutter;
-}
-
-@function get-parent-columns($columns) {
- @if $columns != $grid-columns {
- $parent-columns: $columns !global;
- } @else {
- $parent-columns: $grid-columns !global;
- }
-
- @return $parent-columns;
-}
-
-@function is-display-table($container-is-display-table, $display) {
- $display-table: false;
-
- @if $container-is-display-table == true {
- $display-table: true;
- } @else if $display == table {
- $display-table: true;
- }
-
- @return $display-table;
-}
diff --git a/app/assets/stylesheets/grid/_reset.scss b/app/assets/stylesheets/grid/_reset.scss
deleted file mode 100644
index 496c4a77..00000000
--- a/app/assets/stylesheets/grid/_reset.scss
+++ /dev/null
@@ -1,12 +0,0 @@
-@mixin reset-display {
- $container-display-table: false !global;
-}
-
-@mixin reset-layout-direction {
- $layout-direction: $default-layout-direction !global;
-}
-
-@mixin reset-all {
- @include reset-display;
- @include reset-layout-direction;
-}
diff --git a/app/assets/stylesheets/grid/_row.scss b/app/assets/stylesheets/grid/_row.scss
deleted file mode 100644
index f615a9fc..00000000
--- a/app/assets/stylesheets/grid/_row.scss
+++ /dev/null
@@ -1,17 +0,0 @@
-@mixin row($display: block, $direction: $default-layout-direction) {
- $layout-direction: $direction !global;
-
- @if $display == table {
- display: table;
- @include fill-parent;
- table-layout: fixed;
- $container-display-table: true !global;
- }
-
- @else {
- @include clearfix;
- display: block;
- $container-display-table: false !global;
- }
-}
-
diff --git a/app/assets/stylesheets/grid/_shift.scss b/app/assets/stylesheets/grid/_shift.scss
deleted file mode 100644
index 1d27b9b7..00000000
--- a/app/assets/stylesheets/grid/_shift.scss
+++ /dev/null
@@ -1,16 +0,0 @@
-@mixin shift($n-columns: 1) {
- @include shift-in-context($n-columns);
-}
-
-@mixin shift-in-context($shift: $columns of $container-columns) {
- $n-columns: nth($shift, 1);
- $parent-columns: container-shift($shift) !global;
-
- $direction: get-direction($layout-direction, $default-layout-direction);
- $opposite-direction: get-opposite-direction($direction);
-
- margin-#{$opposite-direction}: $n-columns * flex-grid(1, $parent-columns) + $n-columns * flex-gutter($parent-columns);
-
- // Reset nesting context
- $parent-columns: $grid-columns !global;
-}
diff --git a/app/assets/stylesheets/grid/_span-columns.scss b/app/assets/stylesheets/grid/_span-columns.scss
deleted file mode 100644
index c79193d9..00000000
--- a/app/assets/stylesheets/grid/_span-columns.scss
+++ /dev/null
@@ -1,43 +0,0 @@
-@mixin span-columns($span: $columns of $container-columns, $display: block) {
- $columns: nth($span, 1);
- $container-columns: container-span($span);
-
- // Set nesting context (used by shift())
- $parent-columns: get-parent-columns($container-columns) !global;
-
- $direction: get-direction($layout-direction, $default-layout-direction);
- $opposite-direction: get-opposite-direction($direction);
-
- $display-table: is-display-table($container-display-table, $display);
-
- @if $display-table {
- display: table-cell;
- width: percentage($columns / $container-columns);
- } @else {
- float: #{$opposite-direction};
-
- @if $display != no-display {
- display: block;
- }
-
- @if $display == collapse {
- @warn "The 'collapse' argument will be deprecated. Use 'block-collapse' instead."
- }
-
- @if $display == collapse or $display == block-collapse {
- width: flex-grid($columns, $container-columns) + flex-gutter($container-columns);
-
- &:last-child {
- width: flex-grid($columns, $container-columns);
- }
-
- } @else {
- margin-#{$direction}: flex-gutter($container-columns);
- width: flex-grid($columns, $container-columns);
-
- &:last-child {
- margin-#{$direction}: 0;
- }
- }
- }
-}
diff --git a/app/assets/stylesheets/grid/_to-deprecate.scss b/app/assets/stylesheets/grid/_to-deprecate.scss
deleted file mode 100644
index d0a681fd..00000000
--- a/app/assets/stylesheets/grid/_to-deprecate.scss
+++ /dev/null
@@ -1,57 +0,0 @@
-@mixin breakpoint($query:$feature $value $columns, $total-columns: $grid-columns) {
- @warn "The breakpoint() mixin was renamed to media() in Neat 1.0. Please update your project with the new syntax before the next version bump.";
-
- @if length($query) == 1 {
- @media screen and ($default-feature: nth($query, 1)) {
- $default-grid-columns: $grid-columns;
- $grid-columns: $total-columns;
- @content;
- $grid-columns: $default-grid-columns;
- }
- }
-
- @else if length($query) == 2 {
- @media screen and (nth($query, 1): nth($query, 2)) {
- $default-grid-columns: $grid-columns;
- $grid-columns: $total-columns;
- @content;
- $grid-columns: $default-grid-columns;
- }
- }
-
- @else if length($query) == 3 {
- @media screen and (nth($query, 1): nth($query, 2)) {
- $default-grid-columns: $grid-columns;
- $grid-columns: nth($query, 3);
- @content;
- $grid-columns: $default-grid-columns;
- }
- }
-
- @else if length($query) == 4 {
- @media screen and (nth($query, 1): nth($query, 2)) and (nth($query, 3): nth($query, 4)) {
- $default-grid-columns: $grid-columns;
- $grid-columns: $total-columns;
- @content;
- $grid-columns: $default-grid-columns;
- }
- }
-
- @else if length($query) == 5 {
- @media screen and (nth($query, 1): nth($query, 2)) and (nth($query, 3): nth($query, 4)) {
- $default-grid-columns: $grid-columns;
- $grid-columns: nth($query, 5);
- @content;
- $grid-columns: $default-grid-columns;
- }
- }
-
- @else {
- @warn "Wrong number of arguments for breakpoint(). Read the documentation for more details.";
- }
-}
-
-@mixin nth-omega($nth, $display: block, $direction: default) {
- @warn "The nth-omega() mixin is deprecated. Please use omega() instead.";
- @include omega($nth $display, $direction);
-}
diff --git a/app/assets/stylesheets/grid/_visual-grid.scss b/app/assets/stylesheets/grid/_visual-grid.scss
deleted file mode 100644
index f06deb80..00000000
--- a/app/assets/stylesheets/grid/_visual-grid.scss
+++ /dev/null
@@ -1,40 +0,0 @@
-@mixin grid-column-gradient($values...) {
- background-image: -webkit-linear-gradient(left, $values);
- background-image: -moz-linear-gradient(left, $values);
- background-image: -ms-linear-gradient(left, $values);
- background-image: -o-linear-gradient(left, $values);
- background-image: unquote("linear-gradient(to left, #{$values})");
-}
-
-@if $visual-grid == true or $visual-grid == yes {
- body:before {
- content: '';
- display: inline-block;
- @include grid-column-gradient(gradient-stops($grid-columns));
- height: 100%;
- left: 0;
- margin: 0 auto;
- max-width: $max-width;
- opacity: $visual-grid-opacity;
- position: fixed;
- right: 0;
- width: 100%;
- pointer-events: none;
-
- @if $visual-grid-index == back {
- z-index: -1;
- }
-
- @else if $visual-grid-index == front {
- z-index: 9999;
- }
-
- @each $breakpoint in $visual-grid-breakpoints {
- @if $breakpoint != nil {
- @include media($breakpoint) {
- @include grid-column-gradient(gradient-stops($grid-columns));
- }
- }
- }
- }
-}
diff --git a/app/assets/stylesheets/settings/_grid.scss b/app/assets/stylesheets/settings/_grid.scss
deleted file mode 100644
index f1dcda47..00000000
--- a/app/assets/stylesheets/settings/_grid.scss
+++ /dev/null
@@ -1,7 +0,0 @@
-$column: golden-ratio(1em, 3) !default; // Column width
-$gutter: golden-ratio(1em, 1) !default; // Gutter between each two columns
-$grid-columns: 12 !default; // Total number of columns in the grid
-$max-width: em(1088) !default; // Max-width of the outer container
-$border-box-sizing: true !default; // Makes all elements have a border-box layout
-$default-feature: min-width; // Default @media feature for the breakpoint() mixin
-$default-layout-direction: LTR !default;
diff --git a/app/assets/stylesheets/settings/_visual-grid.scss b/app/assets/stylesheets/settings/_visual-grid.scss
deleted file mode 100644
index 611c2b37..00000000
--- a/app/assets/stylesheets/settings/_visual-grid.scss
+++ /dev/null
@@ -1,5 +0,0 @@
-$visual-grid: false !default; // Display the base grid
-$visual-grid-color: #EEE !default;
-$visual-grid-index: back !default; // Show grid behind content (back) or overlay it over the content (front)
-$visual-grid-opacity: 0.4 !default;
-$visual-grid-breakpoints: () !default;
diff --git a/bin/neat b/bin/neat
index a53999df..c6fcdb64 100755
--- a/bin/neat
+++ b/bin/neat
@@ -1,5 +1,5 @@
#!/usr/bin/env ruby
-require "neat"
+require File.dirname(__FILE__) + "/../lib/neat.rb"
-Neat::Generator.new(ARGV).run
+Neat::Generator.start
diff --git a/bower.json b/bower.json
deleted file mode 100644
index cee0025a..00000000
--- a/bower.json
+++ /dev/null
@@ -1,20 +0,0 @@
-{
- "name": "neat",
- "version": "1.6.0",
- "homepage": "http://neat.bourbon.io/",
- "main": "app/assets/stylesheets/_neat.scss",
- "ignore": [
- "bin",
- "lib",
- ".gitignore",
- "Gemfile",
- "Gemfile.lock",
- "Rakefile",
- "neat.gemspec",
- "CONTRIBUTING.md",
- "NEWS.md"
- ],
- "dependencies": {
- "bourbon": ">=3.1"
- }
-}
diff --git a/contrib/base/_variables.scss b/contrib/base/_variables.scss
new file mode 100644
index 00000000..1237a923
--- /dev/null
+++ b/contrib/base/_variables.scss
@@ -0,0 +1,8 @@
+$color-neat-blue: #53aee0;
+$color-neat-orange: #ff7c56;
+$color-white: #fff;
+
+$neat-grid: (
+ columns: 12,
+ gutter: 20px,
+);
diff --git a/contrib/index.html b/contrib/index.html
new file mode 100644
index 00000000..dcdad6c0
--- /dev/null
+++ b/contrib/index.html
@@ -0,0 +1,90 @@
+
+
+
+
+
+
+ Have fun ❤︎
+
+
+
+
+
+
+
+
Basic Floated Grid
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
RTL Grid
+
+
First
+
Second
+
Third
+
+
Nested Grid
+
+
+
+
+
+
Push Grid
+
+
+
+
+
+
Shift Grid
+
+
First
+
Second
+
+
Shorthand Sub-Grid
+
+
+
+
+
+
Grid Media Queries
+
+
+
+
Grid collapse
+
+
+
+
+
+
+
+
diff --git a/contrib/patterns/_box.scss b/contrib/patterns/_box.scss
new file mode 100644
index 00000000..f27419a7
--- /dev/null
+++ b/contrib/patterns/_box.scss
@@ -0,0 +1,11 @@
+.box {
+ background-color: $color-neat-blue;
+ margin-bottom: 10px;
+ min-height: 30px;
+ padding: 0.5rem;
+}
+
+.box--alt {
+ @extend .box;
+ border: 2px solid $color-neat-orange;
+}
diff --git a/contrib/patterns/_global.scss b/contrib/patterns/_global.scss
new file mode 100644
index 00000000..bdd9858c
--- /dev/null
+++ b/contrib/patterns/_global.scss
@@ -0,0 +1,32 @@
+*,
+*::before,
+*::after {
+ box-sizing: border-box;
+ font-family:
+ -apple-system,
+ BlinkMacSystemFont,
+ "Avenir Next",
+ "Avenir",
+ "Segoe UI",
+ "Lucida Grande",
+ "Helvetica Neue",
+ "Helvetica",
+ "Fira Sans",
+ "Roboto",
+ "Noto",
+ "Droid Sans",
+ "Cantarell",
+ "Oxygen",
+ "Ubuntu",
+ "Franklin Gothic Medium",
+ "Century Gothic",
+ "Liberation Sans",
+ sans-serif;
+}
+
+h1,
+h2,
+h3,
+h4 {
+ font-weight: 400;
+}
diff --git a/contrib/patterns/_grid-collapse.scss b/contrib/patterns/_grid-collapse.scss
new file mode 100644
index 00000000..5eaf3389
--- /dev/null
+++ b/contrib/patterns/_grid-collapse.scss
@@ -0,0 +1,3 @@
+.grid-collapse {
+ @include grid-collapse;
+}
diff --git a/contrib/patterns/_grid-media.scss b/contrib/patterns/_grid-media.scss
new file mode 100644
index 00000000..dcf0509f
--- /dev/null
+++ b/contrib/patterns/_grid-media.scss
@@ -0,0 +1,36 @@
+$medium-screen: 1000px;
+
+$custom-neat-grid: (
+ columns: 12,
+ gutter: 50px,
+ media: $medium-screen,
+);
+
+$specific-neat-grid: (
+ columns: 12,
+ gutter: 80px,
+ media: "only screen and (min-width: 1000px) and (max-width: 1100px)",
+);
+
+
+$print-neat-grid: (
+ columns: 10,
+ gutter: 20px,
+ media: print,
+);
+
+.grid-column--media-3-to-6 {
+ @include grid-column(3);
+
+ &::before {
+ content: "#{map-get($neat-grid, media)}";
+ }
+
+ @include grid-media($custom-neat-grid, $specific-neat-grid, $print-neat-grid) {
+ @include grid-column(6);
+
+ &::before {
+ content: "#{map-get($neat-grid, media)}";
+ }
+ }
+}
diff --git a/contrib/patterns/_grid-nested.scss b/contrib/patterns/_grid-nested.scss
new file mode 100644
index 00000000..809b9d00
--- /dev/null
+++ b/contrib/patterns/_grid-nested.scss
@@ -0,0 +1,12 @@
+$grid--nested: (
+ columns: 3,
+ gutter: 0,
+);
+
+.grid--nested {
+ @include grid-container;
+}
+
+.grid--nested__column {
+ @include grid-column(1, $grid--nested);
+}
diff --git a/contrib/patterns/_grid-push.scss b/contrib/patterns/_grid-push.scss
new file mode 100644
index 00000000..8e016f57
--- /dev/null
+++ b/contrib/patterns/_grid-push.scss
@@ -0,0 +1,7 @@
+.grid-push--3 {
+ @include grid-push(3);
+}
+
+.grid-push--2-of-5 {
+ @include grid-push(2 of 5);
+}
diff --git a/contrib/patterns/_grid-shift.scss b/contrib/patterns/_grid-shift.scss
new file mode 100644
index 00000000..4aafd8ee
--- /dev/null
+++ b/contrib/patterns/_grid-shift.scss
@@ -0,0 +1,7 @@
+.grid-shift--4 {
+ @include grid-shift(4);
+}
+
+.grid-shift--neg-8 {
+ @include grid-shift(-8);
+}
diff --git a/contrib/patterns/_grid-visual.scss b/contrib/patterns/_grid-visual.scss
new file mode 100644
index 00000000..15ab422d
--- /dev/null
+++ b/contrib/patterns/_grid-visual.scss
@@ -0,0 +1,3 @@
+.grid-visual {
+ @include grid-visual;
+}
diff --git a/contrib/patterns/_grid.scss b/contrib/patterns/_grid.scss
new file mode 100644
index 00000000..56bdcffb
--- /dev/null
+++ b/contrib/patterns/_grid.scss
@@ -0,0 +1,39 @@
+$grid--rtl: (
+ direction: rtl,
+);
+
+.grid {
+ @include grid-container;
+}
+
+.grid__column {
+ @include grid-column(1);
+}
+
+.grid__column--thirds {
+ @include grid-column(4);
+}
+
+.grid--rtl__column--thirds {
+ @include grid-column(4, $grid--rtl);
+}
+
+.grid__column--4 {
+ @include grid-column(4);
+}
+
+.grid__column--8 {
+ @include grid-column(8);
+}
+
+.grid__column--full {
+ @include grid-column(12);
+}
+
+.grid__column--3-of-5 {
+ @include grid-column(3 of 5);
+}
+
+.grid__column--2-of-5 {
+ @include grid-column(2 of 5);
+}
diff --git a/contrib/styles.scss b/contrib/styles.scss
new file mode 100644
index 00000000..81372b19
--- /dev/null
+++ b/contrib/styles.scss
@@ -0,0 +1,13 @@
+@import "../core/neat";
+
+@import "base/variables";
+
+@import "patterns/box";
+@import "patterns/global";
+@import "patterns/grid";
+@import "patterns/grid-collapse";
+@import "patterns/grid-nested";
+@import "patterns/grid-push";
+@import "patterns/grid-shift";
+@import "patterns/grid-media";
+@import "patterns/grid-visual";
diff --git a/core/_neat.scss b/core/_neat.scss
new file mode 100644
index 00000000..6a6a5ae4
--- /dev/null
+++ b/core/_neat.scss
@@ -0,0 +1,26 @@
+@charset "UTF-8";
+// Neat 4.0.0
+// http://neat.bourbon.io
+// Copyright 2012 thoughtbot, inc.
+// MIT License
+
+@import "neat/settings/settings";
+
+@import "neat/functions/retrieve-neat-settings";
+@import "neat/functions/neat-column-default";
+@import "neat/functions/neat-column-width";
+@import "neat/functions/neat-column-ratio";
+@import "neat/functions/neat-float-direction";
+@import "neat/functions/neat-merge-defaults";
+@import "neat/functions/neat-opposite-direction";
+@import "neat/functions/neat-parse-columns";
+@import "neat/functions/neat-parse-media";
+@import "neat/functions/neat-append-grid-visual";
+
+@import "neat/mixins/grid-collapse";
+@import "neat/mixins/grid-column";
+@import "neat/mixins/grid-container";
+@import "neat/mixins/grid-media";
+@import "neat/mixins/grid-push";
+@import "neat/mixins/grid-shift";
+@import "neat/mixins/grid-visual";
diff --git a/core/neat/functions/_neat-append-grid-visual.scss b/core/neat/functions/_neat-append-grid-visual.scss
new file mode 100644
index 00000000..a34a39b9
--- /dev/null
+++ b/core/neat/functions/_neat-append-grid-visual.scss
@@ -0,0 +1,21 @@
+@charset "UTF-8";
+/// Append attributes to a the `$_grid-visual` variable in `grid-visual` mixin
+///
+/// @argument {map} $grid
+///
+/// @argument {number (unitless) | null} $columns
+///
+/// @return {number}
+///
+/// @example scss
+/// _neat-column-default($neat-grid, 4)
+///
+/// @access private
+
+@function _neat-append-grid-visual($grid-visual-list, $attributes) {
+ @each $attribute in $attributes {
+ $grid-visual-list: append($grid-visual-list, $attribute, comma);
+ }
+
+ @return $grid-visual-list;
+}
diff --git a/core/neat/functions/_neat-column-default.scss b/core/neat/functions/_neat-column-default.scss
new file mode 100644
index 00000000..4d687d3d
--- /dev/null
+++ b/core/neat/functions/_neat-column-default.scss
@@ -0,0 +1,23 @@
+@charset "UTF-8";
+/// Determine if a column count has been given.
+/// If no columns have been given return the grid's total column count.
+///
+/// @argument {map} $grid
+///
+/// @argument {number (unitless) | null} $columns
+///
+/// @return {number}
+///
+/// @example scss
+/// _neat-column-default($neat-grid, 4)
+///
+/// @access private
+
+@function _neat-column-default($grid, $columns) {
+ @if $columns == null {
+ $_grid-columns: _retrieve-neat-setting($grid, columns);
+ @return $_grid-columns;
+ } @else {
+ @return $columns;
+ }
+}
diff --git a/core/neat/functions/_neat-column-ratio.scss b/core/neat/functions/_neat-column-ratio.scss
new file mode 100644
index 00000000..9eab5495
--- /dev/null
+++ b/core/neat/functions/_neat-column-ratio.scss
@@ -0,0 +1,24 @@
+@charset "UTF-8";
+/// Determine the ratio of `$columns` to the total column count.
+/// If `$columns` is more than one value, they are handed to
+/// `_neat-parse-columns()` which will determine the total columns and use this
+/// value instead of `total-columns`.
+///
+/// @argument {map} $grid
+///
+/// @argument {number | list} $columns
+///
+/// @return {number}
+///
+/// @example scss
+/// _neat-column-ratio($grid, 3)
+///
+/// @access private
+
+@function _neat-column-ratio($grid, $columns) {
+ @if length($columns) > 1 {
+ @return nth($columns, 1) / _neat-parse-columns($columns);
+ } @else if $columns {
+ @return $columns / _retrieve-neat-setting($grid, columns);
+ }
+}
diff --git a/core/neat/functions/_neat-column-width.scss b/core/neat/functions/_neat-column-width.scss
new file mode 100644
index 00000000..eb8b8f12
--- /dev/null
+++ b/core/neat/functions/_neat-column-width.scss
@@ -0,0 +1,25 @@
+@charset "UTF-8";
+/// Return a calulated column width that can then be passed in to a `calc()`.
+///
+/// @argument {map} $grid
+///
+/// @argument {number} $columns
+///
+/// @return {string}
+///
+/// @example scss
+/// _neat-column-width($neat-grid, 4)
+///
+/// @access private
+
+@function _neat-column-width($grid, $columns) {
+ $_column-ratio: _neat-column-ratio($grid, $columns);
+ $_gutter: _retrieve-neat-setting($grid, gutter);
+
+ @if $_gutter == 0 {
+ @return unquote("#{percentage($_column-ratio)}");
+ } @else {
+ $_gutter-affordance: $_gutter + ($_gutter * $_column-ratio);
+ @return unquote("#{percentage($_column-ratio)} - #{$_gutter-affordance}");
+ }
+}
diff --git a/core/neat/functions/_neat-float-direction.scss b/core/neat/functions/_neat-float-direction.scss
new file mode 100644
index 00000000..05caec2f
--- /dev/null
+++ b/core/neat/functions/_neat-float-direction.scss
@@ -0,0 +1,22 @@
+@charset "UTF-8";
+/// Return the float direction of the grid.
+///
+/// @argument {map} $grid
+///
+/// @return {string}
+///
+/// @example scss
+/// _neat-float-direction($neat-grid)
+///
+/// @access private
+
+@function _neat-float-direction($grid) {
+ $_direction: _retrieve-neat-setting($grid, direction);
+ $_float-direction: null;
+ @if $_direction == "ltr" {
+ $_float-direction: left;
+ } @else if $_direction == "rtl" {
+ $_float-direction: right;
+ }
+ @return $_float-direction;
+}
diff --git a/core/neat/functions/_neat-merge-defaults.scss b/core/neat/functions/_neat-merge-defaults.scss
new file mode 100644
index 00000000..a4ac2a8e
--- /dev/null
+++ b/core/neat/functions/_neat-merge-defaults.scss
@@ -0,0 +1,23 @@
+@charset "UTF-8";
+/// Apply Neat's default properties to undefined values within a map.
+///
+/// @argument {map} $grid
+///
+/// @return {map}
+///
+/// @example scss
+/// _retrieve-neat-setting($neat-grid)
+///
+/// @access private
+
+@function _neat-merge-defaults($grid) {
+ $_merged-grid: map-merge((
+ columns: 12,
+ gutter: 20px,
+ media: null,
+ color: rgba(#00d4ff, 0.25),
+ direction: ltr,
+ ), $grid);
+
+ @return $_merged-grid;
+}
diff --git a/core/neat/functions/_neat-opposite-direction.scss b/core/neat/functions/_neat-opposite-direction.scss
new file mode 100644
index 00000000..c4828fa3
--- /dev/null
+++ b/core/neat/functions/_neat-opposite-direction.scss
@@ -0,0 +1,22 @@
+@charset "UTF-8";
+/// Return the oppoite of the float direction of the grid.
+///
+/// @argument {map} $grid
+///
+/// @return {string}
+///
+/// @example scss
+/// _neat-opposite-direction($neat-grid)
+///
+/// @access private
+
+@function _neat-opposite-direction($grid) {
+ $_direction: _retrieve-neat-setting($grid, direction);
+ $_float-direction: null;
+ @if $_direction == "ltr" {
+ $_float-direction: right;
+ } @else if $_direction == "rtl" {
+ $_float-direction: left;
+ }
+ @return $_float-direction;
+}
diff --git a/core/neat/functions/_neat-parse-columns.scss b/core/neat/functions/_neat-parse-columns.scss
new file mode 100644
index 00000000..c91517cc
--- /dev/null
+++ b/core/neat/functions/_neat-parse-columns.scss
@@ -0,0 +1,22 @@
+@charset "UTF-8";
+/// Parse a column count like `3 of 5` and retur the total coloumn count.
+/// This is to allow a shorthand for custom grids without using a settings map.
+///
+///
+/// @argument {list} $span
+///
+/// @return {number}
+///
+/// @example scss
+/// _neat-parse-columns(3 of 5)
+///
+/// @access private
+
+@function _neat-parse-columns($span) {
+ @if length($span) == 3 {
+ $_total-columns: nth($span, 3);
+ @return $_total-columns;
+ } @else if (length($span) == 2) or (length($span) >= 3) {
+ @error "`$column` should contain 2 values, seperated by an `of`";
+ }
+}
diff --git a/core/neat/functions/_neat-parse-media.scss b/core/neat/functions/_neat-parse-media.scss
new file mode 100644
index 00000000..5a24699f
--- /dev/null
+++ b/core/neat/functions/_neat-parse-media.scss
@@ -0,0 +1,20 @@
+@charset "UTF-8";
+/// Parse media types. If the property is a string then return it, otherwise
+/// assume screen and min-width.
+///
+/// @argument {string | number (with unit)} $media
+///
+/// @return {number}
+///
+/// @example scss
+/// _neat-parse-media($grid, 1000px)
+///
+/// @access private
+
+@function _neat-parse-media($media) {
+ @if type-of($media) == number {
+ @return "only screen and (min-width: #{$media})";
+ } @else if type-of($media) == string {
+ @return "#{$media}";
+ }
+}
diff --git a/core/neat/functions/_retrieve-neat-settings.scss b/core/neat/functions/_retrieve-neat-settings.scss
new file mode 100644
index 00000000..e1db68d8
--- /dev/null
+++ b/core/neat/functions/_retrieve-neat-settings.scss
@@ -0,0 +1,19 @@
+@charset "UTF-8";
+/// This function recives a grid map and merges it with Neat's defauls.
+/// It then returns the value of the property that has been passed to it.
+///
+/// @argument {map} $grid
+///
+/// @argument {string} $setting
+///
+/// @return {boolean | color | list | number | string}
+///
+/// @example scss
+/// _retrieve-neat-setting($neat-grid, columns)
+///
+/// @access private
+
+@function _retrieve-neat-setting($grid, $setting) {
+ $_grid-settings: map-merge(_neat-merge-defaults($neat-grid), $grid);
+ @return map-get($_grid-settings, $setting);
+}
diff --git a/core/neat/mixins/_grid-collapse.scss b/core/neat/mixins/_grid-collapse.scss
new file mode 100644
index 00000000..e2a6fdce
--- /dev/null
+++ b/core/neat/mixins/_grid-collapse.scss
@@ -0,0 +1,35 @@
+@charset "UTF-8";
+/// Creates collapsed grid object that consumes the gutters of its container,
+/// for use in nested layouts.
+///
+/// @group features
+///
+/// @name Grid collapse
+///
+/// @argument {map} $grid [$neat-grid]
+/// The grid to be used to generate the collapsed container.
+/// By default, the global `$neat-grid` will be used.
+///
+/// @example scss
+/// .element {
+/// @include grid-collapse;
+/// }
+///
+/// @example css
+/// .element {
+/// margin-left: -20px;
+/// margin-right: -20px;
+/// width: calc(100% + 40px);
+/// }
+
+@mixin grid-collapse($grid: $neat-grid) {
+ $_grid-gutter: _retrieve-neat-setting($grid, gutter);
+
+ @if unit($_grid-gutter) == "%" {
+ @warn "`grid-collapse` is not compatible with percentage based gutters.";
+ }
+
+ margin-#{_neat-float-direction($grid)}: -($_grid-gutter);
+ margin-#{_neat-opposite-direction($grid)}: -($_grid-gutter);
+ width: calc(100% + #{($_grid-gutter * 2)});
+}
diff --git a/core/neat/mixins/_grid-column.scss b/core/neat/mixins/_grid-column.scss
new file mode 100644
index 00000000..bfed3b57
--- /dev/null
+++ b/core/neat/mixins/_grid-column.scss
@@ -0,0 +1,39 @@
+@charset "UTF-8";
+/// Creates a grid column of requested size.
+///
+/// @group features
+///
+/// @name Grid column
+///
+/// @argument {number (unitless)} $columns [null]
+/// Specifies the number of columns an element should span based on the total
+/// columns of the grid.
+///
+/// This can also be defined in a shorthand syntax which also contains the
+/// total column count such as `3 of 5`.
+///
+/// @argument {map} $grid [$neat-grid]
+/// The grid to be used to generate the column.
+/// By default, the global `$neat-grid` will be used.
+///
+/// @example scss
+/// .element {
+/// @include grid-column(3);
+/// }
+///
+/// @example css
+/// .element {
+/// width: calc(25% - 25px);
+/// float: left;
+/// margin-left: 20px;
+/// }
+
+@mixin grid-column($columns: null, $grid: $neat-grid) {
+ $columns: _neat-column-default($grid, $columns);
+ $_grid-columns: _retrieve-neat-setting($grid, columns);
+ $_grid-gutter: _retrieve-neat-setting($grid, gutter);
+
+ width: calc(#{_neat-column-width($grid, $columns)});
+ float: _neat-float-direction($grid);
+ margin-#{_neat-float-direction($grid)}: $_grid-gutter;
+}
diff --git a/core/neat/mixins/_grid-container.scss b/core/neat/mixins/_grid-container.scss
new file mode 100644
index 00000000..856f47ac
--- /dev/null
+++ b/core/neat/mixins/_grid-container.scss
@@ -0,0 +1,31 @@
+@charset "UTF-8";
+/// Creates a grid container with clearfix.
+///
+/// @group features
+///
+/// @name Grid container
+///
+/// @example scss
+/// .element {
+/// @include grid-container;
+/// }
+///
+/// @example css
+/// .element::after {
+/// clear: both;
+/// content: "";
+/// display: block;
+/// }
+
+@mixin grid-container($grid: $neat-grid) {
+ @if $grid != $neat-grid {
+ @warn "`grid-container` does not use grid properties. " +
+ "Custom grids do not need to be passed in to this mixin.";
+ }
+
+ &::after {
+ clear: both;
+ content: "";
+ display: block;
+ }
+}
diff --git a/core/neat/mixins/_grid-media.scss b/core/neat/mixins/_grid-media.scss
new file mode 100644
index 00000000..971f06fc
--- /dev/null
+++ b/core/neat/mixins/_grid-media.scss
@@ -0,0 +1,88 @@
+@charset "UTF-8";
+/// `grid-media` allows you to change your layout based on a media query.
+/// For example, an object can span 3 columns on small screens and 6 columns
+/// on large screens.
+///
+/// You can take this a step further and set different grid attributes like
+/// gutter size and total column count for each media query. So, for example,
+/// you can have a `1rem` gutter on small screens, and a `2rem` gutter on large
+/// screens.
+///
+/// @group features
+///
+/// @name Grid media
+///
+/// @argument {map} $grid
+/// The grid or grids to be used within the scope of the block.
+/// These grids should include the `media` property to determine the expression
+/// for the media query.
+///
+/// @content
+/// Grid media will temporarily override the default grid with the attributes
+/// of the custom grids. When `grid-media` is given a custom grid, it will
+/// apply that grid to any of other Neat mixins within the `grid-media` block
+/// (`{…}`). Once the mixin block has ended the default grid will revert to
+/// its original state as defined by `$neat-grid`. This allows for different
+/// gutter width and column count based on screen size or other properties.
+///
+/// If multiple grids are passed in to `grid-media`, it will loop through the
+/// contents of the block, quickly allowing you to apply multiple grids in a
+/// single mixin.
+///
+/// @example scss
+/// $custom-neat-grid: (
+/// columns: 12,
+/// gutter: 50px,
+/// media: "screen and (max-width: 999px)",
+/// );
+///
+/// $custom-neat-grid-2: (
+/// columns: 12,
+/// gutter: 70px,
+/// media: 1000px,
+/// );
+///
+/// .element {
+/// @include grid-column(3);
+///
+/// @include grid-media($custom-neat-grid, $custom-neat-grid-2){
+/// @include grid-column(6);
+/// }
+/// }
+///
+/// @example css
+/// .element {
+/// width: calc(25% - 25px);
+/// float: left;
+/// margin-left: 20px;
+/// }
+///
+/// @media only screen and (max-width: 999px) {
+/// .element {
+/// width: calc(50% - 75px);
+/// float: left;
+/// margin-left: 50px;
+/// }
+/// }
+///
+/// @media only screen and (min-width: 1000px) {
+/// .element {
+/// width: calc(50% - 75px);
+/// float: left;
+/// margin-left: 70px;
+/// }
+/// }
+
+@mixin grid-media($grids...) {
+ @each $_grid in $grids {
+ $_media: _retrieve-neat-setting($_grid, media);
+ $_query: _neat-parse-media($_media);
+
+ @media #{$_query} {
+ $_default-neat-grid: $neat-grid;
+ $neat-grid: map-merge($neat-grid, $_grid) !global;
+ @content;
+ $neat-grid: $_default-neat-grid !global;
+ }
+ }
+}
diff --git a/core/neat/mixins/_grid-push.scss b/core/neat/mixins/_grid-push.scss
new file mode 100644
index 00000000..4d76c0ab
--- /dev/null
+++ b/core/neat/mixins/_grid-push.scss
@@ -0,0 +1,37 @@
+@charset "UTF-8";
+/// Push or pull a grid column by manipulating its left margin.
+///
+/// @group features
+///
+/// @name Grid push
+///
+/// @argument {number (unitless)} $push [false]
+/// The number of columns to push the column.
+///
+/// @argument {map} $grid [$neat-grid]
+/// The grid to be used to determine how far to push the column.
+/// By default, the global `$neat-grid` will be used.
+///
+/// @example scss
+/// .element {
+/// @include grid-push(3);
+/// }
+///
+/// @example css
+/// .element {
+/// margin-left: calc(25% - 25px + 40px);
+/// }
+
+@mixin grid-push($push: false, $grid: $neat-grid) {
+ $_grid-columns: _retrieve-neat-setting($grid, columns);
+ $_grid-gutter: _retrieve-neat-setting($grid, gutter);
+
+ @if $push {
+ $_gutter-affordance: $_grid-gutter * 2;
+ $_margin-value: calc(#{_neat-column-width($grid, $push)} + #{$_gutter-affordance});
+ margin-#{_neat-float-direction($grid)}: $_margin-value;
+ } @else {
+ $_margin-value: _retrieve-neat-setting($grid, gutter);
+ margin-#{_neat-float-direction($grid)}: $_margin-value;
+ }
+}
diff --git a/core/neat/mixins/_grid-shift.scss b/core/neat/mixins/_grid-shift.scss
new file mode 100644
index 00000000..43d8a9bf
--- /dev/null
+++ b/core/neat/mixins/_grid-shift.scss
@@ -0,0 +1,36 @@
+@charset "UTF-8";
+/// Shift columns and reorder them within their container using relative
+/// positioning.
+///
+/// @group features
+///
+/// @name Grid shift
+///
+/// @argument {number (unitless)} $shift [false]
+/// The number of columns to shift the column.
+///
+/// @argument {map} $grid [$neat-grid]
+/// The grid to be used to determine how far to shift the column.
+/// By default, the global `$neat-grid` will be used.
+///
+/// @example scss
+/// .element {
+/// @include grid-shift(3);
+/// }
+///
+/// @example css
+/// .element {
+/// left: calc(25% - 25px + 20px);
+/// position: relative;
+/// }
+
+@mixin grid-shift($shift: false, $grid: $neat-grid) {
+ @if $shift {
+ $_shift-value: calc(#{_neat-column-width($grid, $shift)} + #{_retrieve-neat-setting($grid, gutter)});
+ #{_neat-float-direction($grid)}: $_shift-value;
+ } @else {
+ #{_neat-float-direction($grid)}: auto;
+ }
+
+ position: relative;
+}
diff --git a/core/neat/mixins/_grid-visual.scss b/core/neat/mixins/_grid-visual.scss
new file mode 100644
index 00000000..5409711f
--- /dev/null
+++ b/core/neat/mixins/_grid-visual.scss
@@ -0,0 +1,41 @@
+@charset "UTF-8";
+/// Creates a series of guide lines using the `background-image` property on a
+/// grid container to visualise the columns and gutters of the grid.
+///
+/// @group features
+///
+/// @name Grid visual
+///
+/// @argument {color} $color
+/// The color of the guide lines created.
+///
+/// @argument {map} $grid [$neat-grid]
+/// The grid used to determine the guides
+///
+/// @example scss
+/// .element {
+/// @include grid-visual;
+/// }
+///
+/// @example css
+/// .element {
+/// background-image: repeating-linear-gradient( … ) ;
+/// }
+
+@mixin grid-visual($color: null, $grid: $neat-grid) {
+ @if not $color {
+ $color: _retrieve-neat-setting($grid, color);
+ }
+
+ $_grid-columns: _retrieve-neat-setting($grid, columns);
+ $_grid-gutter: _retrieve-neat-setting($grid, gutter);
+ $_grid-visual-column: "#{_neat-column-width($grid, 1)} + #{$_grid-gutter}";
+ $_grid-visual:
+ transparent,
+ transparent $_grid-gutter,
+ $color $_grid-gutter,
+ $color calc(#{$_grid-visual-column}),
+ ;
+
+ background-image: repeating-linear-gradient(to right, $_grid-visual);
+}
diff --git a/core/neat/settings/_settings.scss b/core/neat/settings/_settings.scss
new file mode 100644
index 00000000..cc0e1a1a
--- /dev/null
+++ b/core/neat/settings/_settings.scss
@@ -0,0 +1,74 @@
+@charset "UTF-8";
+/// This variable is a sass map that overrides Neat's default grid settings.
+/// Use this to define your project's grid properties including gutters and
+/// total column count.
+///
+/// @type map
+///
+/// @group settings
+///
+/// @name Neat grid
+///
+/// @property {number (unitless)} columns [12]
+/// Default number of the total grid columns.
+///
+/// @property {number (with unit)} gutter [20px]
+/// Default grid gutter width between columns.
+///
+/// @example scss
+/// $neat-grid: (
+/// columns: 12,
+/// gutter: 20px,
+/// );
+
+$neat-grid: () !default;
+
+/// If you need multiple grids in a single project, you can do
+/// this by defining a new map stored within a variable of your choosing. This
+/// variable can then be passed directly in to any of Neat's mixins like
+/// [`grid-column(12, $my-custom-grid)`](#grid-column).
+///
+/// Custom grids are especially useful with [`grid-media`](#grid-media). By
+/// defining a `media` attribute within your custom grid, you are able to easily
+/// define gutter width and total column count as well the breakpoint at which
+/// they should activate.
+///
+/// @type map
+///
+/// @group settings
+///
+/// @name Custom grids
+///
+/// @property {number (unitless)} columns [12]
+/// Number of the total grid columns.
+///
+/// @property {number (with unit)} gutter [20px]
+/// Grid gutter width between columns.
+///
+/// @property {number (with unit) | string | null} media [null]
+/// The `@media` definition that is used by the [`grid-media`](#grid-media)
+/// mixin to determine the media properties.
+///
+/// @property {color} color [null]
+/// The color used by [`grid-visual`](#grid-visual) to create the guides.
+///
+/// @property {string} direction [ltr]
+/// The float direction used throughout the grid.
+///
+/// @example scss
+/// $my-custom-grid: (
+/// columns: 12,
+/// gutter: 20px,
+/// media: 1200px,
+/// color: rgba(#00d4ff, 0.25),
+/// direction: ltr,
+/// );
+///
+/// $other-custom-grid-for-print: (
+/// columns: 14,
+/// gutter: 1.5rem,
+/// media: print,
+/// );
+///
+
+$neat-custom-grid: () !default;
diff --git a/eyeglass-exports.js b/eyeglass-exports.js
new file mode 100644
index 00000000..366249aa
--- /dev/null
+++ b/eyeglass-exports.js
@@ -0,0 +1,7 @@
+var neat = require("./index");
+
+module.exports = function(eyeglass, sass) {
+ return {
+ sassDir: neat.includePaths[0]
+ };
+};
diff --git a/index.js b/index.js
new file mode 100644
index 00000000..6443bccc
--- /dev/null
+++ b/index.js
@@ -0,0 +1,7 @@
+var path = require("path");
+
+module.exports = {
+ includePaths: [
+ path.join(__dirname, "core")
+ ]
+};
diff --git a/lib/neat.rb b/lib/neat.rb
index c94b7742..b5cbcd7a 100644
--- a/lib/neat.rb
+++ b/lib/neat.rb
@@ -1,20 +1,15 @@
-require "bourbon"
require "neat/generator"
module Neat
if defined?(Rails) && defined?(Rails::Engine)
class Engine < ::Rails::Engine
- require 'neat/engine'
- end
-
- module Rails
- class Railtie < ::Rails::Railtie
- rake_tasks do
- load "tasks/install.rake"
- end
- end
+ config.assets.paths << File.expand_path("../core", __dir__)
end
else
- Sass.load_paths << File.expand_path("../../app/assets/stylesheets", __FILE__)
+ begin
+ require "sass"
+ Sass.load_paths << File.expand_path("../core", __dir__)
+ rescue LoadError
+ end
end
end
diff --git a/lib/neat/engine.rb b/lib/neat/engine.rb
deleted file mode 100644
index 11650d68..00000000
--- a/lib/neat/engine.rb
+++ /dev/null
@@ -1,5 +0,0 @@
-module Neat
- class Engine < Rails::Engine
- # auto wire
- end
-end
diff --git a/lib/neat/generator.rb b/lib/neat/generator.rb
index be8576e8..20cde793 100644
--- a/lib/neat/generator.rb
+++ b/lib/neat/generator.rb
@@ -1,21 +1,24 @@
+require "neat/version"
require "fileutils"
+require "thor"
module Neat
- class Generator
- def initialize(arguments)
- @subcommand = arguments.first
- end
+ class Generator < Thor
+ map ["-v", "--version"] => :version
- def run
- if @subcommand == "install"
- install
- elsif @subcommand == "update"
- update
- elsif @subcommand == "remove"
- remove
+ desc "install", "Install Neat into your project"
+ method_options path: :string, force: :boolean
+ def install
+ if neat_files_already_exist? && !options[:force]
+ puts "Neat files already installed, doing nothing."
+ else
+ install_files
+ puts "Neat files installed to #{install_path}/"
end
end
+ desc "update", "Update Neat"
+ method_options path: :string
def update
if neat_files_already_exist?
remove_neat_directory
@@ -26,15 +29,8 @@ def update
end
end
- def install
- if neat_files_already_exist?
- puts "Neat files already installed, doing nothing."
- else
- install_files
- puts "Neat files installed to neat/"
- end
- end
-
+ desc "remove", "Remove Neat"
+ method_options path: :string
def remove
if neat_files_already_exist?
remove_neat_directory
@@ -44,19 +40,40 @@ def remove
end
end
+ desc "version", "Show Neat version"
+ def version
+ say "Neat #{Neat::VERSION}"
+ end
+
private
def neat_files_already_exist?
- File.directory?("neat")
+ install_path.exist?
end
- def install_files
- FileUtils.mkdir_p("neat")
- FileUtils.cp_r(all_stylesheets, "neat/")
+ def install_path
+ @install_path ||= if options[:path]
+ Pathname.new(File.join(options[:path], "neat"))
+ else
+ Pathname.new("neat")
+ end
end
def remove_neat_directory
- FileUtils.rm_rf("neat")
+ FileUtils.rm_rf(install_path)
+ end
+
+ def install_files
+ make_install_directory
+ copy_in_scss_files
+ end
+
+ def make_install_directory
+ FileUtils.mkdir_p(install_path)
+ end
+
+ def copy_in_scss_files
+ FileUtils.cp_r(all_stylesheets, install_path)
end
def all_stylesheets
@@ -64,7 +81,7 @@ def all_stylesheets
end
def stylesheets_directory
- File.join(top_level_directory, "app", "assets", "stylesheets")
+ File.join(top_level_directory, "core")
end
def top_level_directory
diff --git a/lib/neat/version.rb b/lib/neat/version.rb
index d9bfaaab..6e4f56b5 100644
--- a/lib/neat/version.rb
+++ b/lib/neat/version.rb
@@ -1,3 +1,3 @@
module Neat
- VERSION = '1.6.0'
+ VERSION = "4.0.0"
end
diff --git a/lib/tasks/install.rake b/lib/tasks/install.rake
deleted file mode 100644
index 43945f2f..00000000
--- a/lib/tasks/install.rake
+++ /dev/null
@@ -1,21 +0,0 @@
-require "fileutils"
-require "find"
-
-namespace :bourbon do
- namespace :neat do
- desc "Copy Neat's files to the Rails assets directory."
- task :install, [:sass_path] do |t, args|
- args.with_defaults(:sass_path => 'public/stylesheets/sass')
- source_root = File.expand_path(File.join(File.dirname(__FILE__), '..', '..'))
- FileUtils.mkdir_p("#{Rails.root}/#{args.sass_path}/neat")
- FileUtils.cp_r("#{source_root}/app/assets/stylesheets/.", "#{Rails.root}/#{args.sass_path}/neat", { :preserve => true })
-
- Find.find("#{Rails.root}/#{args.sass_path}/neat") do |path|
- if path.end_with?(".css.scss")
- path_without_css_extension = path.gsub(/\.css\.scss$/, ".scss")
- FileUtils.mv(path, path_without_css_extension)
- end
- end
- end
- end
-end
diff --git a/neat.gemspec b/neat.gemspec
index 7e67d93b..0dfb0efa 100644
--- a/neat.gemspec
+++ b/neat.gemspec
@@ -1,35 +1,30 @@
-# -*- encoding: utf-8 -*-
-$:.push File.expand_path('../lib', __FILE__)
-require 'neat/version'
+$:.push File.expand_path("../lib", __FILE__)
+require "neat/version"
Gem::Specification.new do |s|
- s.name = 'neat'
- s.version = Neat::VERSION
- s.platform = Gem::Platform::RUBY
- s.authors = ['Kyle Fiedler', 'Reda Lemeden', 'Joel Oliveira']
- s.email = ['support@thoughtbot.com']
- s.homepage = 'https://github.com/thoughtbot/neat'
- s.summary = 'A fluid grid framework on top of Bourbon'
- s.license = 'MIT'
- s.description = <<-DESC
-Neat is an open source grid framework built on top of Bourbon with the aim of being easy enough to use out of the box and flexible enough to customize down the road.
- DESC
-
- s.rubyforge_project = 'neat'
-
- s.files = `git ls-files`.split("\n")
- s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
+ s.add_development_dependency "aruba", "~> 0.5.0"
+ s.add_development_dependency "css_parser"
+ s.add_development_dependency "rake"
+ s.add_development_dependency "rspec"
+ s.add_development_dependency "scss_lint", "~> 0.44"
+ s.add_runtime_dependency "thor", "~> 0.19"
+ s.authors = [
+ "Joel Oliveira",
+ "Joshua Ogle",
+ "Kyle Fiedler",
+ "Reda Lemeden",
+ "Tyson Gach",
+ "Ward Penney",
+ "Will McMahan"
+ ]
+ s.email = "design+neat@thoughtbot.com"
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
- s.require_paths = ['lib']
-
- s.add_dependency('sass', '>= 3.3')
- s.add_dependency('bourbon', '>= 3.1')
-
- s.add_development_dependency('aruba', '~> 0.5.0')
- s.add_development_dependency('rake')
- s.add_development_dependency('css_parser')
- s.add_development_dependency('rspec')
- s.add_development_dependency('rdoc')
- s.add_development_dependency('bundler')
- s.add_development_dependency('rb-fsevent', '~> 0.9.1')
+ s.files = `git ls-files`.split("\n")
+ s.homepage = "http://neat.bourbon.io"
+ s.license = "MIT"
+ s.name = "neat"
+ s.platform = Gem::Platform::RUBY
+ s.require_paths = ["lib"]
+ s.summary = "A lightweight Sass grid framework"
+ s.version = Neat::VERSION
end
diff --git a/package-lock.json b/package-lock.json
new file mode 100644
index 00000000..0cb40172
--- /dev/null
+++ b/package-lock.json
@@ -0,0 +1,5937 @@
+{
+ "name": "bourbon-neat",
+ "version": "4.0.0",
+ "lockfileVersion": 1,
+ "requires": true,
+ "dependencies": {
+ "abbrev": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz",
+ "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==",
+ "dev": true
+ },
+ "accepts": {
+ "version": "1.3.7",
+ "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz",
+ "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==",
+ "dev": true,
+ "requires": {
+ "mime-types": "~2.1.24",
+ "negotiator": "0.6.2"
+ },
+ "dependencies": {
+ "mime-db": {
+ "version": "1.40.0",
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.40.0.tgz",
+ "integrity": "sha512-jYdeOMPy9vnxEqFRRo6ZvTZ8d9oPb+k18PKoYNYUe2stVEBPPwsln/qWzdbmaIvnhZ9v2P+CuecK+fpUfsV2mA==",
+ "dev": true
+ },
+ "mime-types": {
+ "version": "2.1.24",
+ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.24.tgz",
+ "integrity": "sha512-WaFHS3MCl5fapm3oLxU4eYDw77IQM2ACcxQ9RIxfaC3ooc6PFuBMGZZsYpvoXS5D5QTWPieo1jjLdAm3TBP3cQ==",
+ "dev": true,
+ "requires": {
+ "mime-db": "1.40.0"
+ }
+ }
+ }
+ },
+ "after": {
+ "version": "0.8.2",
+ "resolved": "https://registry.npmjs.org/after/-/after-0.8.2.tgz",
+ "integrity": "sha1-/ts5T58OAqqXaOcCvaI7UF+ufh8=",
+ "dev": true
+ },
+ "ajv": {
+ "version": "5.5.2",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz",
+ "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=",
+ "dev": true,
+ "requires": {
+ "co": "^4.6.0",
+ "fast-deep-equal": "^1.0.0",
+ "fast-json-stable-stringify": "^2.0.0",
+ "json-schema-traverse": "^0.3.0"
+ }
+ },
+ "amdefine": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz",
+ "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=",
+ "dev": true
+ },
+ "ansi-colors": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-1.1.0.tgz",
+ "integrity": "sha512-SFKX67auSNoVR38N3L+nvsPjOE0bybKTYbkf5tRvushrAPQ9V75huw0ZxBkKVeRU9kqH3d6HA4xTckbwZ4ixmA==",
+ "dev": true,
+ "requires": {
+ "ansi-wrap": "^0.1.0"
+ }
+ },
+ "ansi-gray": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-gray/-/ansi-gray-0.1.1.tgz",
+ "integrity": "sha1-KWLPVOyXksSFEKPetSRDaGHvclE=",
+ "dev": true,
+ "requires": {
+ "ansi-wrap": "0.1.0"
+ }
+ },
+ "ansi-regex": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
+ "dev": true
+ },
+ "ansi-styles": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
+ "dev": true
+ },
+ "ansi-wrap": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/ansi-wrap/-/ansi-wrap-0.1.0.tgz",
+ "integrity": "sha1-qCJQ3bABXponyoLoLqYDu/pF768=",
+ "dev": true
+ },
+ "anymatch": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz",
+ "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==",
+ "dev": true,
+ "requires": {
+ "micromatch": "^3.1.4",
+ "normalize-path": "^2.1.1"
+ }
+ },
+ "append-buffer": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/append-buffer/-/append-buffer-1.0.2.tgz",
+ "integrity": "sha1-2CIM9GYIFSXv6lBhTz3mUU36WPE=",
+ "dev": true,
+ "requires": {
+ "buffer-equal": "^1.0.0"
+ }
+ },
+ "aproba": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz",
+ "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==",
+ "dev": true
+ },
+ "archy": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz",
+ "integrity": "sha1-+cjBN1fMHde8N5rHeyxipcKGjEA=",
+ "dev": true
+ },
+ "are-we-there-yet": {
+ "version": "1.1.5",
+ "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz",
+ "integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==",
+ "dev": true,
+ "requires": {
+ "delegates": "^1.0.0",
+ "readable-stream": "^2.0.6"
+ }
+ },
+ "arr-diff": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz",
+ "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=",
+ "dev": true
+ },
+ "arr-filter": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/arr-filter/-/arr-filter-1.1.2.tgz",
+ "integrity": "sha1-Q/3d0JHo7xGqTEXZzcGOLf8XEe4=",
+ "dev": true,
+ "requires": {
+ "make-iterator": "^1.0.0"
+ }
+ },
+ "arr-flatten": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz",
+ "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==",
+ "dev": true
+ },
+ "arr-map": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/arr-map/-/arr-map-2.0.2.tgz",
+ "integrity": "sha1-Onc0X/wc814qkYJWAfnljy4kysQ=",
+ "dev": true,
+ "requires": {
+ "make-iterator": "^1.0.0"
+ }
+ },
+ "arr-union": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz",
+ "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=",
+ "dev": true
+ },
+ "array-each": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/array-each/-/array-each-1.0.1.tgz",
+ "integrity": "sha1-p5SvDAWrF1KEbudTofIRoFugxE8=",
+ "dev": true
+ },
+ "array-find-index": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz",
+ "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=",
+ "dev": true
+ },
+ "array-initial": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/array-initial/-/array-initial-1.1.0.tgz",
+ "integrity": "sha1-L6dLJnOTccOUe9enrcc74zSz15U=",
+ "dev": true,
+ "requires": {
+ "array-slice": "^1.0.0",
+ "is-number": "^4.0.0"
+ },
+ "dependencies": {
+ "is-number": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz",
+ "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==",
+ "dev": true
+ }
+ }
+ },
+ "array-last": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/array-last/-/array-last-1.3.0.tgz",
+ "integrity": "sha512-eOCut5rXlI6aCOS7Z7kCplKRKyiFQ6dHFBem4PwlwKeNFk2/XxTrhRh5T9PyaEWGy/NHTZWbY+nsZlNFJu9rYg==",
+ "dev": true,
+ "requires": {
+ "is-number": "^4.0.0"
+ },
+ "dependencies": {
+ "is-number": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz",
+ "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==",
+ "dev": true
+ }
+ }
+ },
+ "array-slice": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-1.1.0.tgz",
+ "integrity": "sha512-B1qMD3RBP7O8o0H2KbrXDyB0IccejMF15+87Lvlor12ONPRHP6gTjXMNkt/d3ZuOGbAe66hFmaCfECI24Ufp6w==",
+ "dev": true
+ },
+ "array-sort": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/array-sort/-/array-sort-1.0.0.tgz",
+ "integrity": "sha512-ihLeJkonmdiAsD7vpgN3CRcx2J2S0TiYW+IS/5zHBI7mKUq3ySvBdzzBfD236ubDBQFiiyG3SWCPc+msQ9KoYg==",
+ "dev": true,
+ "requires": {
+ "default-compare": "^1.0.0",
+ "get-value": "^2.0.6",
+ "kind-of": "^5.0.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
+ "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
+ "dev": true
+ }
+ }
+ },
+ "array-unique": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz",
+ "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=",
+ "dev": true
+ },
+ "arraybuffer.slice": {
+ "version": "0.0.7",
+ "resolved": "https://registry.npmjs.org/arraybuffer.slice/-/arraybuffer.slice-0.0.7.tgz",
+ "integrity": "sha512-wGUIVQXuehL5TCqQun8OW81jGzAWycqzFF8lFp+GOM5BXLYj3bKNsYC4daB7n6XjCqxQA/qgTJ+8ANR3acjrog==",
+ "dev": true
+ },
+ "asn1": {
+ "version": "0.2.4",
+ "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz",
+ "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==",
+ "dev": true,
+ "requires": {
+ "safer-buffer": "~2.1.0"
+ }
+ },
+ "assert-plus": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
+ "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=",
+ "dev": true
+ },
+ "assign-symbols": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz",
+ "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=",
+ "dev": true
+ },
+ "async": {
+ "version": "1.5.2",
+ "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz",
+ "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=",
+ "dev": true
+ },
+ "async-done": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/async-done/-/async-done-1.3.1.tgz",
+ "integrity": "sha512-R1BaUeJ4PMoLNJuk+0tLJgjmEqVsdN118+Z8O+alhnQDQgy0kmD5Mqi0DNEmMx2LM0Ed5yekKu+ZXYvIHceicg==",
+ "dev": true,
+ "requires": {
+ "end-of-stream": "^1.1.0",
+ "once": "^1.3.2",
+ "process-nextick-args": "^1.0.7",
+ "stream-exhaust": "^1.0.1"
+ }
+ },
+ "async-each": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.1.tgz",
+ "integrity": "sha1-GdOGodntxufByF04iu28xW0zYC0=",
+ "dev": true
+ },
+ "async-each-series": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/async-each-series/-/async-each-series-0.1.1.tgz",
+ "integrity": "sha1-dhfBkXQB/Yykooqtzj266Yr+tDI=",
+ "dev": true
+ },
+ "async-foreach": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/async-foreach/-/async-foreach-0.1.3.tgz",
+ "integrity": "sha1-NhIfhFwFeBct5Bmpfb6x0W7DRUI=",
+ "dev": true
+ },
+ "async-limiter": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.0.tgz",
+ "integrity": "sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg==",
+ "dev": true
+ },
+ "async-settle": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/async-settle/-/async-settle-1.0.0.tgz",
+ "integrity": "sha1-HQqRS7Aldb7IqPOnTlCA9yssDGs=",
+ "dev": true,
+ "requires": {
+ "async-done": "^1.2.2"
+ }
+ },
+ "asynckit": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
+ "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=",
+ "dev": true
+ },
+ "atob": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.1.tgz",
+ "integrity": "sha1-ri1acpR38onWDdf5amMUoi3Wwio=",
+ "dev": true
+ },
+ "aws-sign2": {
+ "version": "0.7.0",
+ "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz",
+ "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=",
+ "dev": true
+ },
+ "aws4": {
+ "version": "1.8.0",
+ "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz",
+ "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==",
+ "dev": true
+ },
+ "axios": {
+ "version": "0.19.0",
+ "resolved": "https://registry.npmjs.org/axios/-/axios-0.19.0.tgz",
+ "integrity": "sha512-1uvKqKQta3KBxIz14F2v06AEHZ/dIoeKfbTRkK1E5oqjDnuEerLmYTgJB5AiQZHJcljpg1TuRzdjDR06qNk0DQ==",
+ "dev": true,
+ "requires": {
+ "follow-redirects": "1.5.10",
+ "is-buffer": "^2.0.2"
+ },
+ "dependencies": {
+ "is-buffer": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.3.tgz",
+ "integrity": "sha512-U15Q7MXTuZlrbymiz95PJpZxu8IlipAp4dtS3wOdgPXx3mqBnslrWU14kxfHB+Py/+2PVKSr37dMAgM2A4uArw==",
+ "dev": true
+ }
+ }
+ },
+ "bach": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/bach/-/bach-1.2.0.tgz",
+ "integrity": "sha1-Szzpa/JxNPeaG0FKUcFONMO9mIA=",
+ "dev": true,
+ "requires": {
+ "arr-filter": "^1.1.1",
+ "arr-flatten": "^1.0.1",
+ "arr-map": "^2.0.0",
+ "array-each": "^1.0.0",
+ "array-initial": "^1.0.0",
+ "array-last": "^1.1.1",
+ "async-done": "^1.2.2",
+ "async-settle": "^1.0.0",
+ "now-and-later": "^2.0.0"
+ }
+ },
+ "backo2": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/backo2/-/backo2-1.0.2.tgz",
+ "integrity": "sha1-MasayLEpNjRj41s+u2n038+6eUc=",
+ "dev": true
+ },
+ "balanced-match": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
+ "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=",
+ "dev": true
+ },
+ "base": {
+ "version": "0.11.2",
+ "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz",
+ "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==",
+ "dev": true,
+ "requires": {
+ "cache-base": "^1.0.1",
+ "class-utils": "^0.3.5",
+ "component-emitter": "^1.2.1",
+ "define-property": "^1.0.0",
+ "isobject": "^3.0.1",
+ "mixin-deep": "^1.2.0",
+ "pascalcase": "^0.1.1"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^1.0.0"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-descriptor": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "^1.0.0",
+ "is-data-descriptor": "^1.0.0",
+ "kind-of": "^6.0.2"
+ }
+ }
+ }
+ },
+ "base64-arraybuffer": {
+ "version": "0.1.5",
+ "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.5.tgz",
+ "integrity": "sha1-c5JncZI7Whl0etZmqlzUv5xunOg=",
+ "dev": true
+ },
+ "base64id": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/base64id/-/base64id-1.0.0.tgz",
+ "integrity": "sha1-R2iMuZu2gE8OBtPnY7HDLlfY5rY=",
+ "dev": true
+ },
+ "batch": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz",
+ "integrity": "sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY=",
+ "dev": true
+ },
+ "bcrypt-pbkdf": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz",
+ "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=",
+ "dev": true,
+ "requires": {
+ "tweetnacl": "^0.14.3"
+ }
+ },
+ "better-assert": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/better-assert/-/better-assert-1.0.2.tgz",
+ "integrity": "sha1-QIZrnhueC1W0gYlDEeaPr/rrxSI=",
+ "dev": true,
+ "requires": {
+ "callsite": "1.0.0"
+ }
+ },
+ "binary-extensions": {
+ "version": "1.11.0",
+ "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.11.0.tgz",
+ "integrity": "sha1-RqoXUftqL5PuXmibsQh9SxTGwgU=",
+ "dev": true
+ },
+ "blob": {
+ "version": "0.0.5",
+ "resolved": "https://registry.npmjs.org/blob/-/blob-0.0.5.tgz",
+ "integrity": "sha512-gaqbzQPqOoamawKg0LGVd7SzLgXS+JH61oWprSLH+P+abTczqJbhTR8CmJ2u9/bUYNmHTGJx/UEmn6doAvvuig==",
+ "dev": true
+ },
+ "block-stream": {
+ "version": "0.0.9",
+ "resolved": "https://registry.npmjs.org/block-stream/-/block-stream-0.0.9.tgz",
+ "integrity": "sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo=",
+ "dev": true,
+ "requires": {
+ "inherits": "~2.0.0"
+ }
+ },
+ "brace-expansion": {
+ "version": "1.1.9",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.9.tgz",
+ "integrity": "sha512-/+o3o6OV1cm3WKrO7U4wykU+ZICE6HiMEuravc2d03NIuM/VaRn5iMcoQ7NyxFXjvpmRICP2EER0YOnh4yIapA==",
+ "dev": true,
+ "requires": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "braces": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz",
+ "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==",
+ "dev": true,
+ "requires": {
+ "arr-flatten": "^1.1.0",
+ "array-unique": "^0.3.2",
+ "extend-shallow": "^2.0.1",
+ "fill-range": "^4.0.0",
+ "isobject": "^3.0.1",
+ "repeat-element": "^1.1.2",
+ "snapdragon": "^0.8.1",
+ "snapdragon-node": "^2.0.1",
+ "split-string": "^3.0.2",
+ "to-regex": "^3.0.1"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ }
+ }
+ },
+ "browser-sync": {
+ "version": "2.26.7",
+ "resolved": "https://registry.npmjs.org/browser-sync/-/browser-sync-2.26.7.tgz",
+ "integrity": "sha512-lY3emme0OyvA2ujEMpRmyRy9LY6gHLuTr2/ABxhIm3lADOiRXzP4dgekvnDrQqZ/Ec2Fz19lEjm6kglSG5766w==",
+ "dev": true,
+ "requires": {
+ "browser-sync-client": "^2.26.6",
+ "browser-sync-ui": "^2.26.4",
+ "bs-recipes": "1.3.4",
+ "bs-snippet-injector": "^2.0.1",
+ "chokidar": "^2.0.4",
+ "connect": "3.6.6",
+ "connect-history-api-fallback": "^1",
+ "dev-ip": "^1.0.1",
+ "easy-extender": "^2.3.4",
+ "eazy-logger": "^3",
+ "etag": "^1.8.1",
+ "fresh": "^0.5.2",
+ "fs-extra": "3.0.1",
+ "http-proxy": "1.15.2",
+ "immutable": "^3",
+ "localtunnel": "1.9.2",
+ "micromatch": "^3.1.10",
+ "opn": "5.3.0",
+ "portscanner": "2.1.1",
+ "qs": "6.2.3",
+ "raw-body": "^2.3.2",
+ "resp-modifier": "6.0.2",
+ "rx": "4.1.0",
+ "send": "0.16.2",
+ "serve-index": "1.9.1",
+ "serve-static": "1.13.2",
+ "server-destroy": "1.0.1",
+ "socket.io": "2.1.1",
+ "ua-parser-js": "0.7.17",
+ "yargs": "6.4.0"
+ },
+ "dependencies": {
+ "camelcase": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz",
+ "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=",
+ "dev": true
+ },
+ "qs": {
+ "version": "6.2.3",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.2.3.tgz",
+ "integrity": "sha1-HPyyXBCpsrSDBT/zn138kjOQjP4=",
+ "dev": true
+ },
+ "yargs": {
+ "version": "6.4.0",
+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-6.4.0.tgz",
+ "integrity": "sha1-gW4ahm1VmMzzTlWW3c4i2S2kkNQ=",
+ "dev": true,
+ "requires": {
+ "camelcase": "^3.0.0",
+ "cliui": "^3.2.0",
+ "decamelize": "^1.1.1",
+ "get-caller-file": "^1.0.1",
+ "os-locale": "^1.4.0",
+ "read-pkg-up": "^1.0.1",
+ "require-directory": "^2.1.1",
+ "require-main-filename": "^1.0.1",
+ "set-blocking": "^2.0.0",
+ "string-width": "^1.0.2",
+ "which-module": "^1.0.0",
+ "window-size": "^0.2.0",
+ "y18n": "^3.2.1",
+ "yargs-parser": "^4.1.0"
+ }
+ },
+ "yargs-parser": {
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-4.2.1.tgz",
+ "integrity": "sha1-KczqwNxPA8bIe0qfIX3RjJ90hxw=",
+ "dev": true,
+ "requires": {
+ "camelcase": "^3.0.0"
+ }
+ }
+ }
+ },
+ "browser-sync-client": {
+ "version": "2.26.6",
+ "resolved": "https://registry.npmjs.org/browser-sync-client/-/browser-sync-client-2.26.6.tgz",
+ "integrity": "sha512-mGrkZdNzttKdf/16I+y+2dTQxoMCIpKbVIMJ/uP8ZpnKu9f9qa/2CYVtLtbjZG8nsM14EwiCrjuFTGBEnT3Gjw==",
+ "dev": true,
+ "requires": {
+ "etag": "1.8.1",
+ "fresh": "0.5.2",
+ "mitt": "^1.1.3",
+ "rxjs": "^5.5.6"
+ }
+ },
+ "browser-sync-ui": {
+ "version": "2.26.4",
+ "resolved": "https://registry.npmjs.org/browser-sync-ui/-/browser-sync-ui-2.26.4.tgz",
+ "integrity": "sha512-u20P3EsZoM8Pt+puoi3BU3KlbQAH1lAcV+/O4saF26qokrBqIDotmGonfWwoRbUmdxZkM9MBmA0K39ZTG1h4sA==",
+ "dev": true,
+ "requires": {
+ "async-each-series": "0.1.1",
+ "connect-history-api-fallback": "^1",
+ "immutable": "^3",
+ "server-destroy": "1.0.1",
+ "socket.io-client": "^2.0.4",
+ "stream-throttle": "^0.1.3"
+ }
+ },
+ "bs-recipes": {
+ "version": "1.3.4",
+ "resolved": "https://registry.npmjs.org/bs-recipes/-/bs-recipes-1.3.4.tgz",
+ "integrity": "sha1-DS1NSKcYyMBEdp/cT4lZLci2lYU=",
+ "dev": true
+ },
+ "bs-snippet-injector": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/bs-snippet-injector/-/bs-snippet-injector-2.0.1.tgz",
+ "integrity": "sha1-YbU5PxH1JVntEgaTEANDtu2wTdU=",
+ "dev": true
+ },
+ "buffer-equal": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/buffer-equal/-/buffer-equal-1.0.0.tgz",
+ "integrity": "sha1-WWFrSYME1Var1GaWayLu2j7KX74=",
+ "dev": true
+ },
+ "buffer-from": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz",
+ "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==",
+ "dev": true
+ },
+ "builtin-modules": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz",
+ "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=",
+ "dev": true
+ },
+ "bytes": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz",
+ "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==",
+ "dev": true
+ },
+ "cache-base": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz",
+ "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==",
+ "dev": true,
+ "requires": {
+ "collection-visit": "^1.0.0",
+ "component-emitter": "^1.2.1",
+ "get-value": "^2.0.6",
+ "has-value": "^1.0.0",
+ "isobject": "^3.0.1",
+ "set-value": "^2.0.0",
+ "to-object-path": "^0.3.0",
+ "union-value": "^1.0.0",
+ "unset-value": "^1.0.0"
+ }
+ },
+ "callsite": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/callsite/-/callsite-1.0.0.tgz",
+ "integrity": "sha1-KAOY5dZkvXQDi28JBRU+borxvCA=",
+ "dev": true
+ },
+ "camelcase": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz",
+ "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=",
+ "dev": true
+ },
+ "camelcase-keys": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz",
+ "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=",
+ "dev": true,
+ "requires": {
+ "camelcase": "^2.0.0",
+ "map-obj": "^1.0.0"
+ }
+ },
+ "caseless": {
+ "version": "0.12.0",
+ "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
+ "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=",
+ "dev": true
+ },
+ "chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^2.2.1",
+ "escape-string-regexp": "^1.0.2",
+ "has-ansi": "^2.0.0",
+ "strip-ansi": "^3.0.0",
+ "supports-color": "^2.0.0"
+ }
+ },
+ "chokidar": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.0.4.tgz",
+ "integrity": "sha512-z9n7yt9rOvIJrMhvDtDictKrkFHeihkNl6uWMmZlmL6tJtX9Cs+87oK+teBx+JIgzvbX3yZHT3eF8vpbDxHJXQ==",
+ "dev": true,
+ "requires": {
+ "anymatch": "^2.0.0",
+ "async-each": "^1.0.0",
+ "braces": "^2.3.0",
+ "fsevents": "^1.2.2",
+ "glob-parent": "^3.1.0",
+ "inherits": "^2.0.1",
+ "is-binary-path": "^1.0.0",
+ "is-glob": "^4.0.0",
+ "lodash.debounce": "^4.0.8",
+ "normalize-path": "^2.1.1",
+ "path-is-absolute": "^1.0.0",
+ "readdirp": "^2.0.0",
+ "upath": "^1.0.5"
+ }
+ },
+ "chownr": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.1.tgz",
+ "integrity": "sha512-j38EvO5+LHX84jlo6h4UzmOwi0UgW61WRyPtJz4qaadK5eY3BTS5TY/S1Stc3Uk2lIM6TPevAlULiEJwie860g==",
+ "dev": true,
+ "optional": true
+ },
+ "class-utils": {
+ "version": "0.3.6",
+ "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz",
+ "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==",
+ "dev": true,
+ "requires": {
+ "arr-union": "^3.1.0",
+ "define-property": "^0.2.5",
+ "isobject": "^3.0.0",
+ "static-extend": "^0.1.1"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^0.1.0"
+ }
+ }
+ }
+ },
+ "cliui": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz",
+ "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=",
+ "dev": true,
+ "requires": {
+ "string-width": "^1.0.1",
+ "strip-ansi": "^3.0.1",
+ "wrap-ansi": "^2.0.0"
+ }
+ },
+ "clone": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz",
+ "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=",
+ "dev": true
+ },
+ "clone-buffer": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/clone-buffer/-/clone-buffer-1.0.0.tgz",
+ "integrity": "sha1-4+JbIHrE5wGvch4staFnksrD3Fg=",
+ "dev": true
+ },
+ "clone-stats": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-1.0.0.tgz",
+ "integrity": "sha1-s3gt/4u1R04Yuba/D9/ngvh3doA=",
+ "dev": true
+ },
+ "cloneable-readable": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/cloneable-readable/-/cloneable-readable-1.1.2.tgz",
+ "integrity": "sha512-Bq6+4t+lbM8vhTs/Bef5c5AdEMtapp/iFb6+s4/Hh9MVTt8OLKH7ZOOZSCT+Ys7hsHvqv0GuMPJ1lnQJVHvxpg==",
+ "dev": true,
+ "requires": {
+ "inherits": "^2.0.1",
+ "process-nextick-args": "^2.0.0",
+ "readable-stream": "^2.3.5"
+ },
+ "dependencies": {
+ "process-nextick-args": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz",
+ "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==",
+ "dev": true
+ }
+ }
+ },
+ "co": {
+ "version": "4.6.0",
+ "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz",
+ "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=",
+ "dev": true
+ },
+ "code-point-at": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz",
+ "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=",
+ "dev": true
+ },
+ "collection-map": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/collection-map/-/collection-map-1.0.0.tgz",
+ "integrity": "sha1-rqDwb40mx4DCt1SUOFVEsiVa8Yw=",
+ "dev": true,
+ "requires": {
+ "arr-map": "^2.0.2",
+ "for-own": "^1.0.0",
+ "make-iterator": "^1.0.0"
+ }
+ },
+ "collection-visit": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz",
+ "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=",
+ "dev": true,
+ "requires": {
+ "map-visit": "^1.0.0",
+ "object-visit": "^1.0.0"
+ }
+ },
+ "color-convert": {
+ "version": "1.9.3",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
+ "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
+ "dev": true,
+ "requires": {
+ "color-name": "1.1.3"
+ }
+ },
+ "color-name": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
+ "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=",
+ "dev": true
+ },
+ "color-support": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz",
+ "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==",
+ "dev": true
+ },
+ "combined-stream": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.7.tgz",
+ "integrity": "sha512-brWl9y6vOB1xYPZcpZde3N9zDByXTosAeMDo4p1wzo6UMOX4vumB+TP1RZ76sfE6Md68Q0NJSrE/gbezd4Ul+w==",
+ "dev": true,
+ "requires": {
+ "delayed-stream": "~1.0.0"
+ }
+ },
+ "commander": {
+ "version": "2.20.0",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.0.tgz",
+ "integrity": "sha512-7j2y+40w61zy6YC2iRNpUe/NwhNyoXrYpHMrSunaMG64nRnaf96zO/KMQR4OyN/UnE5KLyEBnKHd4aG3rskjpQ==",
+ "dev": true
+ },
+ "component-bind": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/component-bind/-/component-bind-1.0.0.tgz",
+ "integrity": "sha1-AMYIq33Nk4l8AAllGx06jh5zu9E=",
+ "dev": true
+ },
+ "component-emitter": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz",
+ "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=",
+ "dev": true
+ },
+ "component-inherit": {
+ "version": "0.0.3",
+ "resolved": "https://registry.npmjs.org/component-inherit/-/component-inherit-0.0.3.tgz",
+ "integrity": "sha1-ZF/ErfWLcrZJ1crmUTVhnbJv8UM=",
+ "dev": true
+ },
+ "concat-map": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+ "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
+ "dev": true
+ },
+ "concat-stream": {
+ "version": "1.6.2",
+ "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz",
+ "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==",
+ "dev": true,
+ "requires": {
+ "buffer-from": "^1.0.0",
+ "inherits": "^2.0.3",
+ "readable-stream": "^2.2.2",
+ "typedarray": "^0.0.6"
+ }
+ },
+ "connect": {
+ "version": "3.6.6",
+ "resolved": "https://registry.npmjs.org/connect/-/connect-3.6.6.tgz",
+ "integrity": "sha1-Ce/2xVr3I24TcTWnJXSFi2eG9SQ=",
+ "dev": true,
+ "requires": {
+ "debug": "2.6.9",
+ "finalhandler": "1.1.0",
+ "parseurl": "~1.3.2",
+ "utils-merge": "1.0.1"
+ }
+ },
+ "connect-history-api-fallback": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz",
+ "integrity": "sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==",
+ "dev": true
+ },
+ "console-control-strings": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz",
+ "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=",
+ "dev": true
+ },
+ "convert-source-map": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.6.0.tgz",
+ "integrity": "sha512-eFu7XigvxdZ1ETfbgPBohgyQ/Z++C0eEhTor0qRwBw9unw+L0/6V8wkSuGgzdThkiS5lSpdptOQPD8Ak40a+7A==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "~5.1.1"
+ }
+ },
+ "cookie": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz",
+ "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=",
+ "dev": true
+ },
+ "copy-descriptor": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz",
+ "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=",
+ "dev": true
+ },
+ "copy-props": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/copy-props/-/copy-props-2.0.4.tgz",
+ "integrity": "sha512-7cjuUME+p+S3HZlbllgsn2CDwS+5eCCX16qBgNC4jgSTf49qR1VKy/Zhl400m0IQXl/bPGEVqncgUUMjrr4s8A==",
+ "dev": true,
+ "requires": {
+ "each-props": "^1.3.0",
+ "is-plain-object": "^2.0.1"
+ }
+ },
+ "core-util-is": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
+ "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=",
+ "dev": true
+ },
+ "cross-spawn": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-3.0.1.tgz",
+ "integrity": "sha1-ElYDfsufDF9549bvE14wdwGEuYI=",
+ "dev": true,
+ "requires": {
+ "lru-cache": "^4.0.1",
+ "which": "^1.2.9"
+ }
+ },
+ "currently-unhandled": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz",
+ "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=",
+ "dev": true,
+ "requires": {
+ "array-find-index": "^1.0.1"
+ }
+ },
+ "d": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/d/-/d-1.0.0.tgz",
+ "integrity": "sha1-dUu1v+VUUdpppYuU1F9MWwRi1Y8=",
+ "dev": true,
+ "requires": {
+ "es5-ext": "^0.10.9"
+ }
+ },
+ "dashdash": {
+ "version": "1.14.1",
+ "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz",
+ "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=",
+ "dev": true,
+ "requires": {
+ "assert-plus": "^1.0.0"
+ }
+ },
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "decamelize": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
+ "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=",
+ "dev": true
+ },
+ "decode-uri-component": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz",
+ "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=",
+ "dev": true
+ },
+ "default-compare": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/default-compare/-/default-compare-1.0.0.tgz",
+ "integrity": "sha512-QWfXlM0EkAbqOCbD/6HjdwT19j7WCkMyiRhWilc4H9/5h/RzTF9gv5LYh1+CmDV5d1rki6KAWLtQale0xt20eQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "^5.0.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
+ "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
+ "dev": true
+ }
+ }
+ },
+ "default-resolution": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/default-resolution/-/default-resolution-2.0.0.tgz",
+ "integrity": "sha1-vLgrqnKtebQmp2cy8aga1t8m1oQ=",
+ "dev": true
+ },
+ "define-properties": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz",
+ "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==",
+ "dev": true,
+ "requires": {
+ "object-keys": "^1.0.12"
+ }
+ },
+ "define-property": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz",
+ "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^1.0.2",
+ "isobject": "^3.0.1"
+ },
+ "dependencies": {
+ "is-accessor-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-descriptor": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "^1.0.0",
+ "is-data-descriptor": "^1.0.0",
+ "kind-of": "^6.0.2"
+ }
+ }
+ }
+ },
+ "delayed-stream": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
+ "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=",
+ "dev": true
+ },
+ "delegates": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz",
+ "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=",
+ "dev": true
+ },
+ "depd": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
+ "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=",
+ "dev": true
+ },
+ "destroy": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz",
+ "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=",
+ "dev": true
+ },
+ "detect-file": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz",
+ "integrity": "sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc=",
+ "dev": true
+ },
+ "dev-ip": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/dev-ip/-/dev-ip-1.0.1.tgz",
+ "integrity": "sha1-p2o+0YVb56ASu4rBbLgPPADcKPA=",
+ "dev": true
+ },
+ "duplexify": {
+ "version": "3.7.1",
+ "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz",
+ "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==",
+ "dev": true,
+ "requires": {
+ "end-of-stream": "^1.0.0",
+ "inherits": "^2.0.1",
+ "readable-stream": "^2.0.0",
+ "stream-shift": "^1.0.0"
+ }
+ },
+ "each-props": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/each-props/-/each-props-1.3.2.tgz",
+ "integrity": "sha512-vV0Hem3zAGkJAyU7JSjixeU66rwdynTAa1vofCrSA5fEln+m67Az9CcnkVD776/fsN/UjIWmBDoNRS6t6G9RfA==",
+ "dev": true,
+ "requires": {
+ "is-plain-object": "^2.0.1",
+ "object.defaults": "^1.1.0"
+ }
+ },
+ "easy-extender": {
+ "version": "2.3.4",
+ "resolved": "https://registry.npmjs.org/easy-extender/-/easy-extender-2.3.4.tgz",
+ "integrity": "sha512-8cAwm6md1YTiPpOvDULYJL4ZS6WfM5/cTeVVh4JsvyYZAoqlRVUpHL9Gr5Fy7HA6xcSZicUia3DeAgO3Us8E+Q==",
+ "dev": true,
+ "requires": {
+ "lodash": "^4.17.10"
+ }
+ },
+ "eazy-logger": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/eazy-logger/-/eazy-logger-3.0.2.tgz",
+ "integrity": "sha1-oyWqXlPROiIliJsqxBE7K5Y29Pw=",
+ "dev": true,
+ "requires": {
+ "tfunk": "^3.0.1"
+ }
+ },
+ "ecc-jsbn": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz",
+ "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=",
+ "dev": true,
+ "requires": {
+ "jsbn": "~0.1.0",
+ "safer-buffer": "^2.1.0"
+ }
+ },
+ "ee-first": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
+ "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=",
+ "dev": true
+ },
+ "encodeurl": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
+ "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=",
+ "dev": true
+ },
+ "end-of-stream": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz",
+ "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==",
+ "dev": true,
+ "requires": {
+ "once": "^1.4.0"
+ },
+ "dependencies": {
+ "once": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+ "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
+ "dev": true,
+ "requires": {
+ "wrappy": "1"
+ }
+ }
+ }
+ },
+ "engine.io": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-3.2.1.tgz",
+ "integrity": "sha512-+VlKzHzMhaU+GsCIg4AoXF1UdDFjHHwMmMKqMJNDNLlUlejz58FCy4LBqB2YVJskHGYl06BatYWKP2TVdVXE5w==",
+ "dev": true,
+ "requires": {
+ "accepts": "~1.3.4",
+ "base64id": "1.0.0",
+ "cookie": "0.3.1",
+ "debug": "~3.1.0",
+ "engine.io-parser": "~2.1.0",
+ "ws": "~3.3.1"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
+ "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "ws": {
+ "version": "3.3.3",
+ "resolved": "https://registry.npmjs.org/ws/-/ws-3.3.3.tgz",
+ "integrity": "sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA==",
+ "dev": true,
+ "requires": {
+ "async-limiter": "~1.0.0",
+ "safe-buffer": "~5.1.0",
+ "ultron": "~1.1.0"
+ }
+ }
+ }
+ },
+ "engine.io-client": {
+ "version": "3.3.2",
+ "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-3.3.2.tgz",
+ "integrity": "sha512-y0CPINnhMvPuwtqXfsGuWE8BB66+B6wTtCofQDRecMQPYX3MYUZXFNKDhdrSe3EVjgOu4V3rxdeqN/Tr91IgbQ==",
+ "dev": true,
+ "requires": {
+ "component-emitter": "1.2.1",
+ "component-inherit": "0.0.3",
+ "debug": "~3.1.0",
+ "engine.io-parser": "~2.1.1",
+ "has-cors": "1.1.0",
+ "indexof": "0.0.1",
+ "parseqs": "0.0.5",
+ "parseuri": "0.0.5",
+ "ws": "~6.1.0",
+ "xmlhttprequest-ssl": "~1.5.4",
+ "yeast": "0.1.2"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
+ "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ }
+ }
+ },
+ "engine.io-parser": {
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-2.1.3.tgz",
+ "integrity": "sha512-6HXPre2O4Houl7c4g7Ic/XzPnHBvaEmN90vtRO9uLmwtRqQmTOw0QMevL1TOfL2Cpu1VzsaTmMotQgMdkzGkVA==",
+ "dev": true,
+ "requires": {
+ "after": "0.8.2",
+ "arraybuffer.slice": "~0.0.7",
+ "base64-arraybuffer": "0.1.5",
+ "blob": "0.0.5",
+ "has-binary2": "~1.0.2"
+ }
+ },
+ "error-ex": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz",
+ "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==",
+ "dev": true,
+ "requires": {
+ "is-arrayish": "^0.2.1"
+ }
+ },
+ "es5-ext": {
+ "version": "0.10.50",
+ "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.50.tgz",
+ "integrity": "sha512-KMzZTPBkeQV/JcSQhI5/z6d9VWJ3EnQ194USTUwIYZ2ZbpN8+SGXQKt1h68EX44+qt+Fzr8DO17vnxrw7c3agw==",
+ "dev": true,
+ "requires": {
+ "es6-iterator": "~2.0.3",
+ "es6-symbol": "~3.1.1",
+ "next-tick": "^1.0.0"
+ }
+ },
+ "es6-iterator": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz",
+ "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=",
+ "dev": true,
+ "requires": {
+ "d": "1",
+ "es5-ext": "^0.10.35",
+ "es6-symbol": "^3.1.1"
+ }
+ },
+ "es6-symbol": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.1.tgz",
+ "integrity": "sha1-vwDvT9q2uhtG7Le2KbTH7VcVzHc=",
+ "dev": true,
+ "requires": {
+ "d": "1",
+ "es5-ext": "~0.10.14"
+ }
+ },
+ "es6-weak-map": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.2.tgz",
+ "integrity": "sha1-XjqzIlH/0VOKH45f+hNXdy+S2W8=",
+ "dev": true,
+ "requires": {
+ "d": "1",
+ "es5-ext": "^0.10.14",
+ "es6-iterator": "^2.0.1",
+ "es6-symbol": "^3.1.1"
+ }
+ },
+ "escape-html": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
+ "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=",
+ "dev": true
+ },
+ "escape-string-regexp": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
+ "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
+ "dev": true
+ },
+ "etag": {
+ "version": "1.8.1",
+ "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
+ "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=",
+ "dev": true
+ },
+ "eventemitter3": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-1.2.0.tgz",
+ "integrity": "sha1-HIaZHYFq0eUEdQ5zh0Ik7PO+xQg=",
+ "dev": true
+ },
+ "expand-brackets": {
+ "version": "2.1.4",
+ "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz",
+ "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=",
+ "dev": true,
+ "requires": {
+ "debug": "^2.3.3",
+ "define-property": "^0.2.5",
+ "extend-shallow": "^2.0.1",
+ "posix-character-classes": "^0.1.0",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.1"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^0.1.0"
+ }
+ },
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ }
+ }
+ },
+ "expand-tilde": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz",
+ "integrity": "sha1-l+gBqgUt8CRU3kawK/YhZCzchQI=",
+ "dev": true,
+ "requires": {
+ "homedir-polyfill": "^1.0.1"
+ }
+ },
+ "extend": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
+ "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==",
+ "dev": true
+ },
+ "extend-shallow": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz",
+ "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=",
+ "dev": true,
+ "requires": {
+ "assign-symbols": "^1.0.0",
+ "is-extendable": "^1.0.1"
+ },
+ "dependencies": {
+ "is-extendable": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
+ "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
+ "dev": true,
+ "requires": {
+ "is-plain-object": "^2.0.4"
+ }
+ }
+ }
+ },
+ "extglob": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz",
+ "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==",
+ "dev": true,
+ "requires": {
+ "array-unique": "^0.3.2",
+ "define-property": "^1.0.0",
+ "expand-brackets": "^2.1.4",
+ "extend-shallow": "^2.0.1",
+ "fragment-cache": "^0.2.1",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.1"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^1.0.0"
+ }
+ },
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-descriptor": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "^1.0.0",
+ "is-data-descriptor": "^1.0.0",
+ "kind-of": "^6.0.2"
+ }
+ }
+ }
+ },
+ "extsprintf": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz",
+ "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=",
+ "dev": true
+ },
+ "fancy-log": {
+ "version": "1.3.3",
+ "resolved": "https://registry.npmjs.org/fancy-log/-/fancy-log-1.3.3.tgz",
+ "integrity": "sha512-k9oEhlyc0FrVh25qYuSELjr8oxsCoc4/LEZfg2iJJrfEk/tZL9bCoJE47gqAvI2m/AUjluCS4+3I0eTx8n3AEw==",
+ "dev": true,
+ "requires": {
+ "ansi-gray": "^0.1.1",
+ "color-support": "^1.1.3",
+ "parse-node-version": "^1.0.0",
+ "time-stamp": "^1.0.0"
+ }
+ },
+ "fast-deep-equal": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz",
+ "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=",
+ "dev": true
+ },
+ "fast-json-stable-stringify": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz",
+ "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=",
+ "dev": true
+ },
+ "fill-range": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz",
+ "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=",
+ "dev": true,
+ "requires": {
+ "extend-shallow": "^2.0.1",
+ "is-number": "^3.0.0",
+ "repeat-string": "^1.6.1",
+ "to-regex-range": "^2.1.0"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ }
+ }
+ },
+ "finalhandler": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.0.tgz",
+ "integrity": "sha1-zgtoVbRYU+eRsvzGgARtiCU91/U=",
+ "dev": true,
+ "requires": {
+ "debug": "2.6.9",
+ "encodeurl": "~1.0.1",
+ "escape-html": "~1.0.3",
+ "on-finished": "~2.3.0",
+ "parseurl": "~1.3.2",
+ "statuses": "~1.3.1",
+ "unpipe": "~1.0.0"
+ }
+ },
+ "find-up": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz",
+ "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=",
+ "dev": true,
+ "requires": {
+ "path-exists": "^2.0.0",
+ "pinkie-promise": "^2.0.0"
+ }
+ },
+ "findup-sync": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-3.0.0.tgz",
+ "integrity": "sha512-YbffarhcicEhOrm4CtrwdKBdCuz576RLdhJDsIfvNtxUuhdRet1qZcsMjqbePtAseKdAnDyM/IyXbu7PRPRLYg==",
+ "dev": true,
+ "requires": {
+ "detect-file": "^1.0.0",
+ "is-glob": "^4.0.0",
+ "micromatch": "^3.0.4",
+ "resolve-dir": "^1.0.1"
+ }
+ },
+ "fined": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/fined/-/fined-1.2.0.tgz",
+ "integrity": "sha512-ZYDqPLGxDkDhDZBjZBb+oD1+j0rA4E0pXY50eplAAOPg2N/gUBSSk5IM1/QhPfyVo19lJ+CvXpqfvk+b2p/8Ng==",
+ "dev": true,
+ "requires": {
+ "expand-tilde": "^2.0.2",
+ "is-plain-object": "^2.0.3",
+ "object.defaults": "^1.1.0",
+ "object.pick": "^1.2.0",
+ "parse-filepath": "^1.0.1"
+ }
+ },
+ "flagged-respawn": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/flagged-respawn/-/flagged-respawn-1.0.1.tgz",
+ "integrity": "sha512-lNaHNVymajmk0OJMBn8fVUAU1BtDeKIqKoVhk4xAALB57aALg6b4W0MfJ/cUE0g9YBXy5XhSlPIpYIJ7HaY/3Q==",
+ "dev": true
+ },
+ "flush-write-stream": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.1.1.tgz",
+ "integrity": "sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==",
+ "dev": true,
+ "requires": {
+ "inherits": "^2.0.3",
+ "readable-stream": "^2.3.6"
+ }
+ },
+ "follow-redirects": {
+ "version": "1.5.10",
+ "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.5.10.tgz",
+ "integrity": "sha512-0V5l4Cizzvqt5D44aTXbFZz+FtyXV1vrDN6qrelxtfYQKW0KO0W2T/hkE8xvGa/540LkZlkaUjO4ailYTFtHVQ==",
+ "dev": true,
+ "requires": {
+ "debug": "=3.1.0"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
+ "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ }
+ }
+ },
+ "for-in": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz",
+ "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=",
+ "dev": true
+ },
+ "for-own": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz",
+ "integrity": "sha1-xjMy9BXO3EsE2/5wz4NklMU8tEs=",
+ "dev": true,
+ "requires": {
+ "for-in": "^1.0.1"
+ }
+ },
+ "forever-agent": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz",
+ "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=",
+ "dev": true
+ },
+ "form-data": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.2.tgz",
+ "integrity": "sha1-SXBJi+YEwgwAXU9cI67NIda0kJk=",
+ "dev": true,
+ "requires": {
+ "asynckit": "^0.4.0",
+ "combined-stream": "1.0.6",
+ "mime-types": "^2.1.12"
+ },
+ "dependencies": {
+ "combined-stream": {
+ "version": "1.0.6",
+ "resolved": "http://registry.npmjs.org/combined-stream/-/combined-stream-1.0.6.tgz",
+ "integrity": "sha1-cj599ugBrFYTETp+RFqbactjKBg=",
+ "dev": true,
+ "requires": {
+ "delayed-stream": "~1.0.0"
+ }
+ }
+ }
+ },
+ "fragment-cache": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz",
+ "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=",
+ "dev": true,
+ "requires": {
+ "map-cache": "^0.2.2"
+ }
+ },
+ "fresh": {
+ "version": "0.5.2",
+ "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
+ "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=",
+ "dev": true
+ },
+ "fs-extra": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-3.0.1.tgz",
+ "integrity": "sha1-N5TzeMWLNC6n27sjCVEJxLO2IpE=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "^4.1.2",
+ "jsonfile": "^3.0.0",
+ "universalify": "^0.1.0"
+ }
+ },
+ "fs-minipass": {
+ "version": "1.2.6",
+ "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.6.tgz",
+ "integrity": "sha512-crhvyXcMejjv3Z5d2Fa9sf5xLYVCF5O1c71QxbVnbLsmYMBEvDAftewesN/HhY03YRoA7zOMxjNGrF5svGaaeQ==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "minipass": "^2.2.1"
+ }
+ },
+ "fs-mkdirp-stream": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/fs-mkdirp-stream/-/fs-mkdirp-stream-1.0.0.tgz",
+ "integrity": "sha1-C3gV/DIBxqaeFNuYzgmMFpNSWes=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "^4.1.11",
+ "through2": "^2.0.3"
+ }
+ },
+ "fs.realpath": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
+ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
+ "dev": true
+ },
+ "fsevents": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.4.tgz",
+ "integrity": "sha512-z8H8/diyk76B7q5wg+Ud0+CqzcAF3mBBI/bA5ne5zrRUUIvNkJY//D3BqyH571KuAC4Nr7Rw7CjWX4r0y9DvNg==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "nan": "^2.9.2",
+ "node-pre-gyp": "^0.10.0"
+ },
+ "dependencies": {
+ "abbrev": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz",
+ "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==",
+ "dev": true,
+ "optional": true
+ },
+ "ansi-regex": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
+ "dev": true,
+ "optional": true
+ },
+ "aproba": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz",
+ "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==",
+ "dev": true,
+ "optional": true
+ },
+ "are-we-there-yet": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.4.tgz",
+ "integrity": "sha1-u13KOCu5TwXhUZQ3PRb9O6HKEQ0=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "delegates": "^1.0.0",
+ "readable-stream": "^2.0.6"
+ }
+ },
+ "balanced-match": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
+ "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=",
+ "dev": true,
+ "optional": true
+ },
+ "brace-expansion": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "chownr": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.0.1.tgz",
+ "integrity": "sha1-4qdQQqlVGQi+vSW4Uj1fl2nXkYE="
+ },
+ "code-point-at": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz",
+ "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=",
+ "dev": true,
+ "optional": true
+ },
+ "concat-map": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+ "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
+ "dev": true,
+ "optional": true
+ },
+ "console-control-strings": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz",
+ "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=",
+ "dev": true,
+ "optional": true
+ },
+ "core-util-is": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
+ "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=",
+ "dev": true,
+ "optional": true
+ },
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "deep-extend": {
+ "version": "0.5.1",
+ "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.5.1.tgz",
+ "integrity": "sha512-N8vBdOa+DF7zkRrDCsaOXoCs/E2fJfx9B9MrKnnSiHNh4ws7eSys6YQE4KvT1cecKmOASYQBhbKjeuDD9lT81w==",
+ "dev": true,
+ "optional": true
+ },
+ "delegates": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz",
+ "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=",
+ "dev": true,
+ "optional": true
+ },
+ "detect-libc": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz",
+ "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=",
+ "dev": true,
+ "optional": true
+ },
+ "fs-minipass": {
+ "version": "1.2.5",
+ "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.5.tgz",
+ "integrity": "sha512-JhBl0skXjUPCFH7x6x61gQxrKyXsxB5gcgePLZCwfyCGGsTISMoIeObbrvVeP6Xmyaudw4TT43qV2Gz+iyd2oQ==",
+ "requires": {
+ "minipass": "^2.2.1"
+ }
+ },
+ "fs.realpath": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
+ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
+ "dev": true,
+ "optional": true
+ },
+ "gauge": {
+ "version": "2.7.4",
+ "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz",
+ "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "aproba": "^1.0.3",
+ "console-control-strings": "^1.0.0",
+ "has-unicode": "^2.0.0",
+ "object-assign": "^4.1.0",
+ "signal-exit": "^3.0.0",
+ "string-width": "^1.0.1",
+ "strip-ansi": "^3.0.1",
+ "wide-align": "^1.1.0"
+ }
+ },
+ "glob": {
+ "version": "7.1.2",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz",
+ "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.0.4",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ }
+ },
+ "has-unicode": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz",
+ "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=",
+ "dev": true,
+ "optional": true
+ },
+ "iconv-lite": {
+ "version": "0.4.21",
+ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.21.tgz",
+ "integrity": "sha512-En5V9za5mBt2oUA03WGD3TwDv0MKAruqsuxstbMUZaj9W9k/m1CV/9py3l0L5kw9Bln8fdHQmzHSYtvpvTLpKw==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "safer-buffer": "^2.1.0"
+ }
+ },
+ "ignore-walk": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-3.0.1.tgz",
+ "integrity": "sha512-DTVlMx3IYPe0/JJcYP7Gxg7ttZZu3IInhuEhbchuqneY9wWe5Ojy2mXLBaQFUQmo0AW2r3qG7m1mg86js+gnlQ==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "minimatch": "^3.0.4"
+ }
+ },
+ "inflight": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
+ "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "once": "^1.3.0",
+ "wrappy": "1"
+ }
+ },
+ "inherits": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
+ "dev": true,
+ "optional": true
+ },
+ "ini": {
+ "version": "1.3.5",
+ "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz",
+ "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==",
+ "dev": true,
+ "optional": true
+ },
+ "is-fullwidth-code-point": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz",
+ "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "number-is-nan": "^1.0.0"
+ }
+ },
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "dev": true,
+ "optional": true
+ },
+ "minimatch": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
+ "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "brace-expansion": "^1.1.7"
+ }
+ },
+ "minimist": {
+ "version": "0.0.8",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
+ "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=",
+ "dev": true,
+ "optional": true
+ },
+ "minipass": {
+ "version": "2.2.4",
+ "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.2.4.tgz",
+ "integrity": "sha512-hzXIWWet/BzWhYs2b+u7dRHlruXhwdgvlTMDKC6Cb1U7ps6Ac6yQlR39xsbjWJE377YTCtKwIXIpJ5oP+j5y8g==",
+ "requires": {
+ "safe-buffer": "^5.1.1",
+ "yallist": "^3.0.0"
+ }
+ },
+ "minizlib": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.1.0.tgz",
+ "integrity": "sha512-4T6Ur/GctZ27nHfpt9THOdRZNgyJ9FZchYO1ceg5S8Q3DNLCKYy44nCZzgCJgcvx2UM8czmqak5BCxJMrq37lA==",
+ "requires": {
+ "minipass": "^2.2.1"
+ }
+ },
+ "mkdirp": {
+ "version": "0.5.1",
+ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
+ "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "minimist": "0.0.8"
+ }
+ },
+ "ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+ "dev": true,
+ "optional": true
+ },
+ "needle": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/needle/-/needle-2.2.0.tgz",
+ "integrity": "sha512-eFagy6c+TYayorXw/qtAdSvaUpEbBsDwDyxYFgLZ0lTojfH7K+OdBqAF7TAFwDokJaGpubpSGG0wO3iC0XPi8w==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "debug": "^2.1.2",
+ "iconv-lite": "^0.4.4",
+ "sax": "^1.2.4"
+ }
+ },
+ "node-pre-gyp": {
+ "version": "0.10.0",
+ "resolved": "https://registry.npmjs.org/node-pre-gyp/-/node-pre-gyp-0.10.0.tgz",
+ "integrity": "sha512-G7kEonQLRbcA/mOoFoxvlMrw6Q6dPf92+t/l0DFSMuSlDoWaI9JWIyPwK0jyE1bph//CUEL65/Fz1m2vJbmjQQ==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "detect-libc": "^1.0.2",
+ "mkdirp": "^0.5.1",
+ "needle": "^2.2.0",
+ "nopt": "^4.0.1",
+ "npm-packlist": "^1.1.6",
+ "npmlog": "^4.0.2",
+ "rc": "^1.1.7",
+ "rimraf": "^2.6.1",
+ "semver": "^5.3.0",
+ "tar": "^4"
+ }
+ },
+ "nopt": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.1.tgz",
+ "integrity": "sha1-0NRoWv1UFRk8jHUFYC0NF81kR00=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "abbrev": "1",
+ "osenv": "^0.1.4"
+ }
+ },
+ "npm-bundled": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.0.3.tgz",
+ "integrity": "sha512-ByQ3oJ/5ETLyglU2+8dBObvhfWXX8dtPZDMePCahptliFX2iIuhyEszyFk401PZUNQH20vvdW5MLjJxkwU80Ow==",
+ "dev": true,
+ "optional": true
+ },
+ "npm-packlist": {
+ "version": "1.1.10",
+ "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-1.1.10.tgz",
+ "integrity": "sha512-AQC0Dyhzn4EiYEfIUjCdMl0JJ61I2ER9ukf/sLxJUcZHfo+VyEfz2rMJgLZSS1v30OxPQe1cN0LZA1xbcaVfWA==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "ignore-walk": "^3.0.1",
+ "npm-bundled": "^1.0.1"
+ }
+ },
+ "npmlog": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz",
+ "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "are-we-there-yet": "~1.1.2",
+ "console-control-strings": "~1.1.0",
+ "gauge": "~2.7.3",
+ "set-blocking": "~2.0.0"
+ }
+ },
+ "number-is-nan": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz",
+ "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=",
+ "dev": true,
+ "optional": true
+ },
+ "object-assign": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
+ "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=",
+ "dev": true,
+ "optional": true
+ },
+ "once": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+ "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "wrappy": "1"
+ }
+ },
+ "os-homedir": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz",
+ "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=",
+ "dev": true,
+ "optional": true
+ },
+ "os-tmpdir": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz",
+ "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=",
+ "dev": true,
+ "optional": true
+ },
+ "osenv": {
+ "version": "0.1.5",
+ "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz",
+ "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "os-homedir": "^1.0.0",
+ "os-tmpdir": "^1.0.0"
+ }
+ },
+ "path-is-absolute": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
+ "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
+ "dev": true,
+ "optional": true
+ },
+ "process-nextick-args": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz",
+ "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==",
+ "dev": true,
+ "optional": true
+ },
+ "rc": {
+ "version": "1.2.7",
+ "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.7.tgz",
+ "integrity": "sha512-LdLD8xD4zzLsAT5xyushXDNscEjB7+2ulnl8+r1pnESlYtlJtVSoCMBGr30eDRJ3+2Gq89jK9P9e4tCEH1+ywA==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "deep-extend": "^0.5.1",
+ "ini": "~1.3.0",
+ "minimist": "^1.2.0",
+ "strip-json-comments": "~2.0.1"
+ },
+ "dependencies": {
+ "minimist": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
+ "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
+ "dev": true,
+ "optional": true
+ }
+ }
+ },
+ "readable-stream": {
+ "version": "2.3.6",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
+ "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "rimraf": {
+ "version": "2.6.2",
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz",
+ "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "glob": "^7.0.5"
+ }
+ },
+ "safe-buffer": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz",
+ "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg=="
+ },
+ "safer-buffer": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
+ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
+ "dev": true,
+ "optional": true
+ },
+ "sax": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz",
+ "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==",
+ "dev": true,
+ "optional": true
+ },
+ "semver": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz",
+ "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==",
+ "dev": true,
+ "optional": true
+ },
+ "set-blocking": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz",
+ "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=",
+ "dev": true,
+ "optional": true
+ },
+ "signal-exit": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz",
+ "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=",
+ "dev": true,
+ "optional": true
+ },
+ "string-width": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
+ "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "code-point-at": "^1.0.0",
+ "is-fullwidth-code-point": "^1.0.0",
+ "strip-ansi": "^3.0.0"
+ }
+ },
+ "string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
+ },
+ "strip-ansi": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "ansi-regex": "^2.0.0"
+ }
+ },
+ "strip-json-comments": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz",
+ "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=",
+ "dev": true,
+ "optional": true
+ },
+ "util-deprecate": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+ "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=",
+ "dev": true,
+ "optional": true
+ },
+ "wide-align": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.2.tgz",
+ "integrity": "sha512-ijDLlyQ7s6x1JgCLur53osjm/UXUYD9+0PbYKrBsYisYXzCxN+HC3mYDNy/dWdmf3AwqwU3CXwDCvsNgGK1S0w==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "string-width": "^1.0.2"
+ }
+ },
+ "wrappy": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
+ "dev": true,
+ "optional": true
+ },
+ "yallist": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.2.tgz",
+ "integrity": "sha1-hFK0u36Dx8GI2AQcGoN8dz1ti7k="
+ }
+ }
+ },
+ "fstream": {
+ "version": "1.0.12",
+ "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.12.tgz",
+ "integrity": "sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg==",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "^4.1.2",
+ "inherits": "~2.0.0",
+ "mkdirp": ">=0.5 0",
+ "rimraf": "2"
+ }
+ },
+ "function-bind": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
+ "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==",
+ "dev": true
+ },
+ "gauge": {
+ "version": "2.7.4",
+ "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz",
+ "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=",
+ "dev": true,
+ "requires": {
+ "aproba": "^1.0.3",
+ "console-control-strings": "^1.0.0",
+ "has-unicode": "^2.0.0",
+ "object-assign": "^4.1.0",
+ "signal-exit": "^3.0.0",
+ "string-width": "^1.0.1",
+ "strip-ansi": "^3.0.1",
+ "wide-align": "^1.1.0"
+ }
+ },
+ "gaze": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/gaze/-/gaze-1.1.3.tgz",
+ "integrity": "sha512-BRdNm8hbWzFzWHERTrejLqwHDfS4GibPoq5wjTPIoJHoBtKGPg3xAFfxmM+9ztbXelxcf2hwQcaz1PtmFeue8g==",
+ "dev": true,
+ "requires": {
+ "globule": "^1.0.0"
+ }
+ },
+ "get-caller-file": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz",
+ "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==",
+ "dev": true
+ },
+ "get-stdin": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz",
+ "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=",
+ "dev": true
+ },
+ "get-value": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz",
+ "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=",
+ "dev": true
+ },
+ "getpass": {
+ "version": "0.1.7",
+ "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz",
+ "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=",
+ "dev": true,
+ "requires": {
+ "assert-plus": "^1.0.0"
+ }
+ },
+ "glob": {
+ "version": "7.1.2",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz",
+ "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==",
+ "dev": true,
+ "requires": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.0.4",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ }
+ },
+ "glob-parent": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz",
+ "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=",
+ "dev": true,
+ "requires": {
+ "is-glob": "^3.1.0",
+ "path-dirname": "^1.0.0"
+ },
+ "dependencies": {
+ "is-glob": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz",
+ "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=",
+ "dev": true,
+ "requires": {
+ "is-extglob": "^2.1.0"
+ }
+ }
+ }
+ },
+ "glob-stream": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/glob-stream/-/glob-stream-6.1.0.tgz",
+ "integrity": "sha1-cEXJlBOz65SIjYOrRtC0BMx73eQ=",
+ "dev": true,
+ "requires": {
+ "extend": "^3.0.0",
+ "glob": "^7.1.1",
+ "glob-parent": "^3.1.0",
+ "is-negated-glob": "^1.0.0",
+ "ordered-read-streams": "^1.0.0",
+ "pumpify": "^1.3.5",
+ "readable-stream": "^2.1.5",
+ "remove-trailing-separator": "^1.0.1",
+ "to-absolute-glob": "^2.0.0",
+ "unique-stream": "^2.0.2"
+ }
+ },
+ "glob-watcher": {
+ "version": "5.0.3",
+ "resolved": "https://registry.npmjs.org/glob-watcher/-/glob-watcher-5.0.3.tgz",
+ "integrity": "sha512-8tWsULNEPHKQ2MR4zXuzSmqbdyV5PtwwCaWSGQ1WwHsJ07ilNeN1JB8ntxhckbnpSHaf9dXFUHzIWvm1I13dsg==",
+ "dev": true,
+ "requires": {
+ "anymatch": "^2.0.0",
+ "async-done": "^1.2.0",
+ "chokidar": "^2.0.0",
+ "is-negated-glob": "^1.0.0",
+ "just-debounce": "^1.0.0",
+ "object.defaults": "^1.1.0"
+ }
+ },
+ "global-modules": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz",
+ "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==",
+ "dev": true,
+ "requires": {
+ "global-prefix": "^1.0.1",
+ "is-windows": "^1.0.1",
+ "resolve-dir": "^1.0.0"
+ }
+ },
+ "global-prefix": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz",
+ "integrity": "sha1-2/dDxsFJklk8ZVVoy2btMsASLr4=",
+ "dev": true,
+ "requires": {
+ "expand-tilde": "^2.0.2",
+ "homedir-polyfill": "^1.0.1",
+ "ini": "^1.3.4",
+ "is-windows": "^1.0.1",
+ "which": "^1.2.14"
+ }
+ },
+ "globule": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/globule/-/globule-1.2.1.tgz",
+ "integrity": "sha512-g7QtgWF4uYSL5/dn71WxubOrS7JVGCnFPEnoeChJmBnyR9Mw8nGoEwOgJL/RC2Te0WhbsEUCejfH8SZNJ+adYQ==",
+ "dev": true,
+ "requires": {
+ "glob": "~7.1.1",
+ "lodash": "~4.17.10",
+ "minimatch": "~3.0.2"
+ }
+ },
+ "glogg": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/glogg/-/glogg-1.0.2.tgz",
+ "integrity": "sha512-5mwUoSuBk44Y4EshyiqcH95ZntbDdTQqA3QYSrxmzj28Ai0vXBGMH1ApSANH14j2sIRtqCEyg6PfsuP7ElOEDA==",
+ "dev": true,
+ "requires": {
+ "sparkles": "^1.0.0"
+ }
+ },
+ "graceful-fs": {
+ "version": "4.1.11",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz",
+ "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=",
+ "dev": true
+ },
+ "gulp": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/gulp/-/gulp-4.0.2.tgz",
+ "integrity": "sha512-dvEs27SCZt2ibF29xYgmnwwCYZxdxhQ/+LFWlbAW8y7jt68L/65402Lz3+CKy0Ov4rOs+NERmDq7YlZaDqUIfA==",
+ "dev": true,
+ "requires": {
+ "glob-watcher": "^5.0.3",
+ "gulp-cli": "^2.2.0",
+ "undertaker": "^1.2.1",
+ "vinyl-fs": "^3.0.0"
+ },
+ "dependencies": {
+ "gulp-cli": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/gulp-cli/-/gulp-cli-2.2.0.tgz",
+ "integrity": "sha512-rGs3bVYHdyJpLqR0TUBnlcZ1O5O++Zs4bA0ajm+zr3WFCfiSLjGwoCBqFs18wzN+ZxahT9DkOK5nDf26iDsWjA==",
+ "dev": true,
+ "requires": {
+ "ansi-colors": "^1.0.1",
+ "archy": "^1.0.0",
+ "array-sort": "^1.0.0",
+ "color-support": "^1.1.3",
+ "concat-stream": "^1.6.0",
+ "copy-props": "^2.0.1",
+ "fancy-log": "^1.3.2",
+ "gulplog": "^1.0.0",
+ "interpret": "^1.1.0",
+ "isobject": "^3.0.1",
+ "liftoff": "^3.1.0",
+ "matchdep": "^2.0.0",
+ "mute-stdout": "^1.0.0",
+ "pretty-hrtime": "^1.0.0",
+ "replace-homedir": "^1.0.0",
+ "semver-greatest-satisfied-range": "^1.1.0",
+ "v8flags": "^3.0.1",
+ "yargs": "^7.1.0"
+ }
+ }
+ }
+ },
+ "gulp-sass": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/gulp-sass/-/gulp-sass-4.0.2.tgz",
+ "integrity": "sha512-q8psj4+aDrblJMMtRxihNBdovfzGrXJp1l4JU0Sz4b/Mhsi2DPrKFYCGDwjIWRENs04ELVHxdOJQ7Vs98OFohg==",
+ "dev": true,
+ "requires": {
+ "chalk": "^2.3.0",
+ "lodash.clonedeep": "^4.3.2",
+ "node-sass": "^4.8.3",
+ "plugin-error": "^1.0.1",
+ "replace-ext": "^1.0.0",
+ "strip-ansi": "^4.0.0",
+ "through2": "^2.0.0",
+ "vinyl-sourcemaps-apply": "^0.2.0"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
+ "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
+ "dev": true
+ },
+ "ansi-styles": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+ "dev": true,
+ "requires": {
+ "color-convert": "^1.9.0"
+ }
+ },
+ "chalk": {
+ "version": "2.4.1",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz",
+ "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ },
+ "strip-ansi": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
+ "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^3.0.0"
+ }
+ },
+ "supports-color": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
+ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
+ "dev": true,
+ "requires": {
+ "has-flag": "^3.0.0"
+ }
+ }
+ }
+ },
+ "gulplog": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/gulplog/-/gulplog-1.0.0.tgz",
+ "integrity": "sha1-4oxNRdBey77YGDY86PnFkmIp/+U=",
+ "dev": true,
+ "requires": {
+ "glogg": "^1.0.0"
+ }
+ },
+ "har-schema": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz",
+ "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=",
+ "dev": true
+ },
+ "har-validator": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.0.tgz",
+ "integrity": "sha512-+qnmNjI4OfH2ipQ9VQOw23bBd/ibtfbVdK2fYbY4acTDqKTW/YDp9McimZdDbG8iV9fZizUqQMD5xvriB146TA==",
+ "dev": true,
+ "requires": {
+ "ajv": "^5.3.0",
+ "har-schema": "^2.0.0"
+ }
+ },
+ "has-ansi": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz",
+ "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^2.0.0"
+ }
+ },
+ "has-binary2": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/has-binary2/-/has-binary2-1.0.3.tgz",
+ "integrity": "sha512-G1LWKhDSvhGeAQ8mPVQlqNcOB2sJdwATtZKl2pDKKHfpf/rYj24lkinxf69blJbnsvtqqNU+L3SL50vzZhXOnw==",
+ "dev": true,
+ "requires": {
+ "isarray": "2.0.1"
+ },
+ "dependencies": {
+ "isarray": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz",
+ "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=",
+ "dev": true
+ }
+ }
+ },
+ "has-cors": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/has-cors/-/has-cors-1.1.0.tgz",
+ "integrity": "sha1-XkdHk/fqmEPRu5nCPu9J/xJv/zk=",
+ "dev": true
+ },
+ "has-flag": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+ "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
+ "dev": true
+ },
+ "has-symbols": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.0.tgz",
+ "integrity": "sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=",
+ "dev": true
+ },
+ "has-unicode": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz",
+ "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=",
+ "dev": true
+ },
+ "has-value": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz",
+ "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=",
+ "dev": true,
+ "requires": {
+ "get-value": "^2.0.6",
+ "has-values": "^1.0.0",
+ "isobject": "^3.0.0"
+ }
+ },
+ "has-values": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz",
+ "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=",
+ "dev": true,
+ "requires": {
+ "is-number": "^3.0.0",
+ "kind-of": "^4.0.0"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz",
+ "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "homedir-polyfill": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz",
+ "integrity": "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==",
+ "dev": true,
+ "requires": {
+ "parse-passwd": "^1.0.0"
+ }
+ },
+ "hosted-git-info": {
+ "version": "2.7.1",
+ "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.7.1.tgz",
+ "integrity": "sha512-7T/BxH19zbcCTa8XkMlbK5lTo1WtgkFi3GvdWEyNuc4Vex7/9Dqbnpsf4JMydcfj9HCg4zUWFTL3Za6lapg5/w==",
+ "dev": true
+ },
+ "http-errors": {
+ "version": "1.7.2",
+ "resolved": "http://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz",
+ "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==",
+ "dev": true,
+ "requires": {
+ "depd": "~1.1.2",
+ "inherits": "2.0.3",
+ "setprototypeof": "1.1.1",
+ "statuses": ">= 1.5.0 < 2",
+ "toidentifier": "1.0.0"
+ },
+ "dependencies": {
+ "statuses": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz",
+ "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=",
+ "dev": true
+ }
+ }
+ },
+ "http-proxy": {
+ "version": "1.15.2",
+ "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.15.2.tgz",
+ "integrity": "sha1-ZC/cr/5S00SNK9o7AHnpQJBk2jE=",
+ "dev": true,
+ "requires": {
+ "eventemitter3": "1.x.x",
+ "requires-port": "1.x.x"
+ }
+ },
+ "http-signature": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz",
+ "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=",
+ "dev": true,
+ "requires": {
+ "assert-plus": "^1.0.0",
+ "jsprim": "^1.2.2",
+ "sshpk": "^1.7.0"
+ }
+ },
+ "iconv-lite": {
+ "version": "0.4.24",
+ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
+ "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
+ "dev": true,
+ "requires": {
+ "safer-buffer": ">= 2.1.2 < 3"
+ }
+ },
+ "immutable": {
+ "version": "3.8.2",
+ "resolved": "https://registry.npmjs.org/immutable/-/immutable-3.8.2.tgz",
+ "integrity": "sha1-wkOZUUVbs5kT2vKBN28VMOEErfM=",
+ "dev": true
+ },
+ "in-publish": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/in-publish/-/in-publish-2.0.0.tgz",
+ "integrity": "sha1-4g/146KvwmkDILbcVSaCqcf631E=",
+ "dev": true
+ },
+ "indent-string": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz",
+ "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=",
+ "dev": true,
+ "requires": {
+ "repeating": "^2.0.0"
+ }
+ },
+ "indexof": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz",
+ "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=",
+ "dev": true
+ },
+ "inflight": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
+ "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
+ "dev": true,
+ "requires": {
+ "once": "^1.3.0",
+ "wrappy": "1"
+ }
+ },
+ "inherits": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
+ "dev": true
+ },
+ "ini": {
+ "version": "1.3.5",
+ "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz",
+ "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==",
+ "dev": true
+ },
+ "interpret": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.2.0.tgz",
+ "integrity": "sha512-mT34yGKMNceBQUoVn7iCDKDntA7SC6gycMAWzGx1z/CMCTV7b2AAtXlo3nRyHZ1FelRkQbQjprHSYGwzLtkVbw==",
+ "dev": true
+ },
+ "invert-kv": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz",
+ "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=",
+ "dev": true
+ },
+ "is-absolute": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-absolute/-/is-absolute-1.0.0.tgz",
+ "integrity": "sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA==",
+ "dev": true,
+ "requires": {
+ "is-relative": "^1.0.0",
+ "is-windows": "^1.0.1"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
+ "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
+ "dev": true,
+ "requires": {
+ "kind-of": "^3.0.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "is-arrayish": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
+ "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=",
+ "dev": true
+ },
+ "is-binary-path": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz",
+ "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=",
+ "dev": true,
+ "requires": {
+ "binary-extensions": "^1.0.0"
+ }
+ },
+ "is-buffer": {
+ "version": "1.1.6",
+ "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
+ "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==",
+ "dev": true
+ },
+ "is-builtin-module": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz",
+ "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=",
+ "dev": true,
+ "requires": {
+ "builtin-modules": "^1.0.0"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
+ "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
+ "dev": true,
+ "requires": {
+ "kind-of": "^3.0.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "is-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
+ "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "^0.1.6",
+ "is-data-descriptor": "^0.1.4",
+ "kind-of": "^5.0.0"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
+ "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
+ "dev": true
+ }
+ }
+ },
+ "is-extendable": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
+ "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=",
+ "dev": true
+ },
+ "is-extglob": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
+ "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
+ "dev": true
+ },
+ "is-finite": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz",
+ "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=",
+ "dev": true,
+ "requires": {
+ "number-is-nan": "^1.0.0"
+ }
+ },
+ "is-fullwidth-code-point": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz",
+ "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=",
+ "dev": true,
+ "requires": {
+ "number-is-nan": "^1.0.0"
+ }
+ },
+ "is-glob": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.0.tgz",
+ "integrity": "sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=",
+ "dev": true,
+ "requires": {
+ "is-extglob": "^2.1.1"
+ }
+ },
+ "is-negated-glob": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-negated-glob/-/is-negated-glob-1.0.0.tgz",
+ "integrity": "sha1-aRC8pdqMleeEtXUbl2z1oQ/uNtI=",
+ "dev": true
+ },
+ "is-number": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
+ "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
+ "dev": true,
+ "requires": {
+ "kind-of": "^3.0.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "is-number-like": {
+ "version": "1.0.8",
+ "resolved": "https://registry.npmjs.org/is-number-like/-/is-number-like-1.0.8.tgz",
+ "integrity": "sha512-6rZi3ezCyFcn5L71ywzz2bS5b2Igl1En3eTlZlvKjpz1n3IZLAYMbKYAIQgFmEu0GENg92ziU/faEOA/aixjbA==",
+ "dev": true,
+ "requires": {
+ "lodash.isfinite": "^3.3.2"
+ }
+ },
+ "is-plain-object": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
+ "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==",
+ "dev": true,
+ "requires": {
+ "isobject": "^3.0.1"
+ }
+ },
+ "is-relative": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-relative/-/is-relative-1.0.0.tgz",
+ "integrity": "sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA==",
+ "dev": true,
+ "requires": {
+ "is-unc-path": "^1.0.0"
+ }
+ },
+ "is-typedarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
+ "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=",
+ "dev": true
+ },
+ "is-unc-path": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-unc-path/-/is-unc-path-1.0.0.tgz",
+ "integrity": "sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ==",
+ "dev": true,
+ "requires": {
+ "unc-path-regex": "^0.1.2"
+ }
+ },
+ "is-utf8": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz",
+ "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=",
+ "dev": true
+ },
+ "is-valid-glob": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-valid-glob/-/is-valid-glob-1.0.0.tgz",
+ "integrity": "sha1-Kb8+/3Ab4tTTFdusw5vDn+j2Aao=",
+ "dev": true
+ },
+ "is-windows": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz",
+ "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==",
+ "dev": true
+ },
+ "is-wsl": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz",
+ "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=",
+ "dev": true
+ },
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "dev": true
+ },
+ "isexe": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
+ "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=",
+ "dev": true
+ },
+ "isobject": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
+ "dev": true
+ },
+ "isstream": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
+ "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=",
+ "dev": true
+ },
+ "js-base64": {
+ "version": "2.4.9",
+ "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.4.9.tgz",
+ "integrity": "sha512-xcinL3AuDJk7VSzsHgb9DvvIXayBbadtMZ4HFPx8rUszbW1MuNMlwYVC4zzCZ6e1sqZpnNS5ZFYOhXqA39T7LQ==",
+ "dev": true
+ },
+ "jsbn": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz",
+ "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=",
+ "dev": true
+ },
+ "json-schema": {
+ "version": "0.2.3",
+ "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz",
+ "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=",
+ "dev": true
+ },
+ "json-schema-traverse": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz",
+ "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=",
+ "dev": true
+ },
+ "json-stable-stringify-without-jsonify": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz",
+ "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=",
+ "dev": true
+ },
+ "json-stringify-safe": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
+ "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=",
+ "dev": true
+ },
+ "jsonfile": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-3.0.1.tgz",
+ "integrity": "sha1-pezG9l9T9mLEQVx2daAzHQmS7GY=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "^4.1.6"
+ }
+ },
+ "jsprim": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz",
+ "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=",
+ "dev": true,
+ "requires": {
+ "assert-plus": "1.0.0",
+ "extsprintf": "1.3.0",
+ "json-schema": "0.2.3",
+ "verror": "1.10.0"
+ }
+ },
+ "just-debounce": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/just-debounce/-/just-debounce-1.0.0.tgz",
+ "integrity": "sha1-h/zPrv/AtozRnVX2cilD+SnqNeo=",
+ "dev": true
+ },
+ "kind-of": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
+ "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==",
+ "dev": true
+ },
+ "last-run": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/last-run/-/last-run-1.1.1.tgz",
+ "integrity": "sha1-RblpQsF7HHnHchmCWbqUO+v4yls=",
+ "dev": true,
+ "requires": {
+ "default-resolution": "^2.0.0",
+ "es6-weak-map": "^2.0.1"
+ }
+ },
+ "lazystream": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.0.tgz",
+ "integrity": "sha1-9plf4PggOS9hOWvolGJAe7dxaOQ=",
+ "dev": true,
+ "requires": {
+ "readable-stream": "^2.0.5"
+ }
+ },
+ "lcid": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz",
+ "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=",
+ "dev": true,
+ "requires": {
+ "invert-kv": "^1.0.0"
+ }
+ },
+ "lead": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/lead/-/lead-1.0.0.tgz",
+ "integrity": "sha1-bxT5mje+Op3XhPVJVpDlkDRm7kI=",
+ "dev": true,
+ "requires": {
+ "flush-write-stream": "^1.0.2"
+ }
+ },
+ "liftoff": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/liftoff/-/liftoff-3.1.0.tgz",
+ "integrity": "sha512-DlIPlJUkCV0Ips2zf2pJP0unEoT1kwYhiiPUGF3s/jtxTCjziNLoiVVh+jqWOWeFi6mmwQ5fNxvAUyPad4Dfog==",
+ "dev": true,
+ "requires": {
+ "extend": "^3.0.0",
+ "findup-sync": "^3.0.0",
+ "fined": "^1.0.1",
+ "flagged-respawn": "^1.0.0",
+ "is-plain-object": "^2.0.4",
+ "object.map": "^1.0.0",
+ "rechoir": "^0.6.2",
+ "resolve": "^1.1.7"
+ }
+ },
+ "limiter": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/limiter/-/limiter-1.1.4.tgz",
+ "integrity": "sha512-XCpr5bElgDI65vVgstP8TWjv6/QKWm9GU5UG0Pr5sLQ3QLo8NVKsioe+Jed5/3vFOe3IQuqE7DKwTvKQkjTHvg==",
+ "dev": true
+ },
+ "load-json-file": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz",
+ "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "^4.1.2",
+ "parse-json": "^2.2.0",
+ "pify": "^2.0.0",
+ "pinkie-promise": "^2.0.0",
+ "strip-bom": "^2.0.0"
+ },
+ "dependencies": {
+ "graceful-fs": {
+ "version": "4.1.11",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz",
+ "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=",
+ "dev": true
+ },
+ "strip-bom": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz",
+ "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=",
+ "dev": true,
+ "requires": {
+ "is-utf8": "^0.2.0"
+ }
+ }
+ }
+ },
+ "localtunnel": {
+ "version": "1.9.2",
+ "resolved": "https://registry.npmjs.org/localtunnel/-/localtunnel-1.9.2.tgz",
+ "integrity": "sha512-NEKF7bDJE9U3xzJu3kbayF0WTvng6Pww7tzqNb/XtEARYwqw7CKEX7BvOMg98FtE9es2CRizl61gkV3hS8dqYg==",
+ "dev": true,
+ "requires": {
+ "axios": "0.19.0",
+ "debug": "4.1.1",
+ "openurl": "1.1.1",
+ "yargs": "6.6.0"
+ },
+ "dependencies": {
+ "camelcase": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz",
+ "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=",
+ "dev": true
+ },
+ "debug": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
+ "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
+ "dev": true,
+ "requires": {
+ "ms": "^2.1.1"
+ }
+ },
+ "ms": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
+ "dev": true
+ },
+ "yargs": {
+ "version": "6.6.0",
+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-6.6.0.tgz",
+ "integrity": "sha1-eC7CHvQDNF+DCoCMo9UTr1YGUgg=",
+ "dev": true,
+ "requires": {
+ "camelcase": "^3.0.0",
+ "cliui": "^3.2.0",
+ "decamelize": "^1.1.1",
+ "get-caller-file": "^1.0.1",
+ "os-locale": "^1.4.0",
+ "read-pkg-up": "^1.0.1",
+ "require-directory": "^2.1.1",
+ "require-main-filename": "^1.0.1",
+ "set-blocking": "^2.0.0",
+ "string-width": "^1.0.2",
+ "which-module": "^1.0.0",
+ "y18n": "^3.2.1",
+ "yargs-parser": "^4.2.0"
+ }
+ },
+ "yargs-parser": {
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-4.2.1.tgz",
+ "integrity": "sha1-KczqwNxPA8bIe0qfIX3RjJ90hxw=",
+ "dev": true,
+ "requires": {
+ "camelcase": "^3.0.0"
+ }
+ }
+ }
+ },
+ "lodash": {
+ "version": "4.17.14",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.14.tgz",
+ "integrity": "sha512-mmKYbW3GLuJeX+iGP+Y7Gp1AiGHGbXHCOh/jZmrawMmsE7MS4znI3RL2FsjbqOyMayHInjOeykW7PEajUk1/xw==",
+ "dev": true
+ },
+ "lodash.assign": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/lodash.assign/-/lodash.assign-4.2.0.tgz",
+ "integrity": "sha1-DZnzzNem0mHRm9rrkkUAXShYCOc=",
+ "dev": true
+ },
+ "lodash.clonedeep": {
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz",
+ "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=",
+ "dev": true
+ },
+ "lodash.debounce": {
+ "version": "4.0.8",
+ "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz",
+ "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168=",
+ "dev": true
+ },
+ "lodash.isfinite": {
+ "version": "3.3.2",
+ "resolved": "https://registry.npmjs.org/lodash.isfinite/-/lodash.isfinite-3.3.2.tgz",
+ "integrity": "sha1-+4m2WpqAKBgz8LdHizpRBPiY67M=",
+ "dev": true
+ },
+ "lodash.mergewith": {
+ "version": "4.6.2",
+ "resolved": "https://registry.npmjs.org/lodash.mergewith/-/lodash.mergewith-4.6.2.tgz",
+ "integrity": "sha512-GK3g5RPZWTRSeLSpgP8Xhra+pnjBC56q9FZYe1d5RN3TJ35dbkGy3YqBSMbyCrlbi+CM9Z3Jk5yTL7RCsqboyQ==",
+ "dev": true
+ },
+ "loud-rejection": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz",
+ "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=",
+ "dev": true,
+ "requires": {
+ "currently-unhandled": "^0.4.1",
+ "signal-exit": "^3.0.0"
+ }
+ },
+ "lru-cache": {
+ "version": "4.1.3",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.3.tgz",
+ "integrity": "sha512-fFEhvcgzuIoJVUF8fYr5KR0YqxD238zgObTps31YdADwPPAp82a4M8TrckkWyx7ekNlf9aBcVn81cFwwXngrJA==",
+ "dev": true,
+ "requires": {
+ "pseudomap": "^1.0.2",
+ "yallist": "^2.1.2"
+ }
+ },
+ "make-iterator": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/make-iterator/-/make-iterator-1.0.1.tgz",
+ "integrity": "sha512-pxiuXh0iVEq7VM7KMIhs5gxsfxCux2URptUQaXo4iZZJxBAzTPOLE2BumO5dbfVYq/hBJFBR/a1mFDmOx5AGmw==",
+ "dev": true,
+ "requires": {
+ "kind-of": "^6.0.2"
+ }
+ },
+ "map-cache": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz",
+ "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=",
+ "dev": true
+ },
+ "map-obj": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz",
+ "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=",
+ "dev": true
+ },
+ "map-visit": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz",
+ "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=",
+ "dev": true,
+ "requires": {
+ "object-visit": "^1.0.0"
+ }
+ },
+ "matchdep": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/matchdep/-/matchdep-2.0.0.tgz",
+ "integrity": "sha1-xvNINKDY28OzfCfui7yyfHd1WC4=",
+ "dev": true,
+ "requires": {
+ "findup-sync": "^2.0.0",
+ "micromatch": "^3.0.4",
+ "resolve": "^1.4.0",
+ "stack-trace": "0.0.10"
+ },
+ "dependencies": {
+ "findup-sync": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-2.0.0.tgz",
+ "integrity": "sha1-kyaxSIwi0aYIhlCoaQGy2akKLLw=",
+ "dev": true,
+ "requires": {
+ "detect-file": "^1.0.0",
+ "is-glob": "^3.1.0",
+ "micromatch": "^3.0.4",
+ "resolve-dir": "^1.0.1"
+ }
+ },
+ "is-glob": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz",
+ "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=",
+ "dev": true,
+ "requires": {
+ "is-extglob": "^2.1.0"
+ }
+ }
+ }
+ },
+ "meow": {
+ "version": "3.7.0",
+ "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz",
+ "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=",
+ "dev": true,
+ "requires": {
+ "camelcase-keys": "^2.0.0",
+ "decamelize": "^1.1.2",
+ "loud-rejection": "^1.0.0",
+ "map-obj": "^1.0.1",
+ "minimist": "^1.1.3",
+ "normalize-package-data": "^2.3.4",
+ "object-assign": "^4.0.1",
+ "read-pkg-up": "^1.0.1",
+ "redent": "^1.0.0",
+ "trim-newlines": "^1.0.0"
+ }
+ },
+ "micromatch": {
+ "version": "3.1.10",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
+ "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==",
+ "dev": true,
+ "requires": {
+ "arr-diff": "^4.0.0",
+ "array-unique": "^0.3.2",
+ "braces": "^2.3.1",
+ "define-property": "^2.0.2",
+ "extend-shallow": "^3.0.2",
+ "extglob": "^2.0.4",
+ "fragment-cache": "^0.2.1",
+ "kind-of": "^6.0.2",
+ "nanomatch": "^1.2.9",
+ "object.pick": "^1.3.0",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.2"
+ }
+ },
+ "mime": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz",
+ "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==",
+ "dev": true
+ },
+ "mime-db": {
+ "version": "1.33.0",
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.33.0.tgz",
+ "integrity": "sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ==",
+ "dev": true
+ },
+ "mime-types": {
+ "version": "2.1.18",
+ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.18.tgz",
+ "integrity": "sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==",
+ "dev": true,
+ "requires": {
+ "mime-db": "~1.33.0"
+ }
+ },
+ "minimatch": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
+ "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
+ "dev": true,
+ "requires": {
+ "brace-expansion": "^1.1.7"
+ }
+ },
+ "minimist": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
+ "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
+ "dev": true
+ },
+ "minipass": {
+ "version": "2.3.5",
+ "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.3.5.tgz",
+ "integrity": "sha512-Gi1W4k059gyRbyVUZQ4mEqLm0YIUiGYfvxhF6SIlk3ui1WVxMTGfGdQ2SInh3PDrRTVvPKgULkpJtT4RH10+VA==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "safe-buffer": "^5.1.2",
+ "yallist": "^3.0.0"
+ },
+ "dependencies": {
+ "safe-buffer": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
+ "dev": true,
+ "optional": true
+ },
+ "yallist": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.3.tgz",
+ "integrity": "sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A==",
+ "dev": true,
+ "optional": true
+ }
+ }
+ },
+ "minizlib": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.2.1.tgz",
+ "integrity": "sha512-7+4oTUOWKg7AuL3vloEWekXY2/D20cevzsrNT2kGWm+39J9hGTCBv8VI5Pm5lXZ/o3/mdR4f8rflAPhnQb8mPA==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "minipass": "^2.2.1"
+ }
+ },
+ "mitt": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/mitt/-/mitt-1.1.3.tgz",
+ "integrity": "sha512-mUDCnVNsAi+eD6qA0HkRkwYczbLHJ49z17BGe2PYRhZL4wpZUFZGJHU7/5tmvohoma+Hdn0Vh/oJTiPEmgSruA==",
+ "dev": true
+ },
+ "mixin-deep": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz",
+ "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==",
+ "dev": true,
+ "requires": {
+ "for-in": "^1.0.2",
+ "is-extendable": "^1.0.1"
+ },
+ "dependencies": {
+ "is-extendable": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
+ "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
+ "dev": true,
+ "requires": {
+ "is-plain-object": "^2.0.4"
+ }
+ }
+ }
+ },
+ "mkdirp": {
+ "version": "0.5.1",
+ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
+ "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=",
+ "dev": true,
+ "requires": {
+ "minimist": "0.0.8"
+ },
+ "dependencies": {
+ "minimist": {
+ "version": "0.0.8",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
+ "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=",
+ "dev": true
+ }
+ }
+ },
+ "ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+ "dev": true
+ },
+ "mute-stdout": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/mute-stdout/-/mute-stdout-1.0.1.tgz",
+ "integrity": "sha512-kDcwXR4PS7caBpuRYYBUz9iVixUk3anO3f5OYFiIPwK/20vCzKCHyKoulbiDY1S53zD2bxUpxN/IJ+TnXjfvxg==",
+ "dev": true
+ },
+ "nan": {
+ "version": "2.10.0",
+ "resolved": "https://registry.npmjs.org/nan/-/nan-2.10.0.tgz",
+ "integrity": "sha512-bAdJv7fBLhWC+/Bls0Oza+mvTaNQtP+1RyhhhvD95pgUJz6XM5IzgmxOkItJ9tkoCiplvAnXI1tNmmUD/eScyA==",
+ "dev": true
+ },
+ "nanomatch": {
+ "version": "1.2.13",
+ "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz",
+ "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==",
+ "dev": true,
+ "requires": {
+ "arr-diff": "^4.0.0",
+ "array-unique": "^0.3.2",
+ "define-property": "^2.0.2",
+ "extend-shallow": "^3.0.2",
+ "fragment-cache": "^0.2.1",
+ "is-windows": "^1.0.2",
+ "kind-of": "^6.0.2",
+ "object.pick": "^1.3.0",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.1"
+ }
+ },
+ "negotiator": {
+ "version": "0.6.2",
+ "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz",
+ "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==",
+ "dev": true
+ },
+ "next-tick": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz",
+ "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw=",
+ "dev": true
+ },
+ "node-gyp": {
+ "version": "3.8.0",
+ "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-3.8.0.tgz",
+ "integrity": "sha512-3g8lYefrRRzvGeSowdJKAKyks8oUpLEd/DyPV4eMhVlhJ0aNaZqIrNUIPuEWWTAoPqyFkfGrM67MC69baqn6vA==",
+ "dev": true,
+ "requires": {
+ "fstream": "^1.0.0",
+ "glob": "^7.0.3",
+ "graceful-fs": "^4.1.2",
+ "mkdirp": "^0.5.0",
+ "nopt": "2 || 3",
+ "npmlog": "0 || 1 || 2 || 3 || 4",
+ "osenv": "0",
+ "request": "^2.87.0",
+ "rimraf": "2",
+ "semver": "~5.3.0",
+ "tar": "^2.0.0",
+ "which": "1"
+ },
+ "dependencies": {
+ "semver": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz",
+ "integrity": "sha1-myzl094C0XxgEq0yaqa00M9U+U8=",
+ "dev": true
+ },
+ "tar": {
+ "version": "2.2.2",
+ "resolved": "https://registry.npmjs.org/tar/-/tar-2.2.2.tgz",
+ "integrity": "sha512-FCEhQ/4rE1zYv9rYXJw/msRqsnmlje5jHP6huWeBZ704jUTy02c5AZyWujpMR1ax6mVw9NyJMfuK2CMDWVIfgA==",
+ "dev": true,
+ "requires": {
+ "block-stream": "*",
+ "fstream": "^1.0.12",
+ "inherits": "2"
+ },
+ "dependencies": {
+ "fstream": {
+ "version": "1.0.12",
+ "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.12.tgz",
+ "integrity": "sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg==",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "^4.1.2",
+ "inherits": "~2.0.0",
+ "mkdirp": ">=0.5 0",
+ "rimraf": "2"
+ }
+ }
+ }
+ }
+ }
+ },
+ "node-sass": {
+ "version": "4.9.4",
+ "resolved": "https://registry.npmjs.org/node-sass/-/node-sass-4.9.4.tgz",
+ "integrity": "sha512-MXyurANsUoE4/6KmfMkwGcBzAnJQ5xJBGW7Ei6ea8KnUKuzHr/SguVBIi3uaUAHtZCPUYkvlJ3Ef5T5VAwVpaA==",
+ "dev": true,
+ "requires": {
+ "async-foreach": "^0.1.3",
+ "chalk": "^1.1.1",
+ "cross-spawn": "^3.0.0",
+ "gaze": "^1.0.0",
+ "get-stdin": "^4.0.1",
+ "glob": "^7.0.3",
+ "in-publish": "^2.0.0",
+ "lodash.assign": "^4.2.0",
+ "lodash.clonedeep": "^4.3.2",
+ "lodash.mergewith": "^4.6.0",
+ "meow": "^3.7.0",
+ "mkdirp": "^0.5.1",
+ "nan": "^2.10.0",
+ "node-gyp": "^3.8.0",
+ "npmlog": "^4.0.0",
+ "request": "^2.88.0",
+ "sass-graph": "^2.2.4",
+ "stdout-stream": "^1.4.0",
+ "true-case-path": "^1.0.2"
+ }
+ },
+ "nopt": {
+ "version": "3.0.6",
+ "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz",
+ "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=",
+ "dev": true,
+ "requires": {
+ "abbrev": "1"
+ }
+ },
+ "normalize-package-data": {
+ "version": "2.4.0",
+ "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz",
+ "integrity": "sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw==",
+ "dev": true,
+ "requires": {
+ "hosted-git-info": "^2.1.4",
+ "is-builtin-module": "^1.0.0",
+ "semver": "2 || 3 || 4 || 5",
+ "validate-npm-package-license": "^3.0.1"
+ }
+ },
+ "normalize-path": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz",
+ "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=",
+ "dev": true,
+ "requires": {
+ "remove-trailing-separator": "^1.0.1"
+ }
+ },
+ "now-and-later": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/now-and-later/-/now-and-later-2.0.1.tgz",
+ "integrity": "sha512-KGvQ0cB70AQfg107Xvs/Fbu+dGmZoTRJp2TaPwcwQm3/7PteUyN2BCgk8KBMPGBUXZdVwyWS8fDCGFygBm19UQ==",
+ "dev": true,
+ "requires": {
+ "once": "^1.3.2"
+ }
+ },
+ "npmlog": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz",
+ "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==",
+ "dev": true,
+ "requires": {
+ "are-we-there-yet": "~1.1.2",
+ "console-control-strings": "~1.1.0",
+ "gauge": "~2.7.3",
+ "set-blocking": "~2.0.0"
+ }
+ },
+ "number-is-nan": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz",
+ "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=",
+ "dev": true
+ },
+ "oauth-sign": {
+ "version": "0.9.0",
+ "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz",
+ "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==",
+ "dev": true
+ },
+ "object-assign": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
+ "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=",
+ "dev": true
+ },
+ "object-component": {
+ "version": "0.0.3",
+ "resolved": "https://registry.npmjs.org/object-component/-/object-component-0.0.3.tgz",
+ "integrity": "sha1-8MaapQ78lbhmwYb0AKM3acsvEpE=",
+ "dev": true
+ },
+ "object-copy": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz",
+ "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=",
+ "dev": true,
+ "requires": {
+ "copy-descriptor": "^0.1.0",
+ "define-property": "^0.2.5",
+ "kind-of": "^3.0.3"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^0.1.0"
+ }
+ },
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "object-keys": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
+ "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==",
+ "dev": true
+ },
+ "object-path": {
+ "version": "0.9.2",
+ "resolved": "https://registry.npmjs.org/object-path/-/object-path-0.9.2.tgz",
+ "integrity": "sha1-D9mnT8X60a45aLWGvaXGMr1sBaU=",
+ "dev": true
+ },
+ "object-visit": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz",
+ "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=",
+ "dev": true,
+ "requires": {
+ "isobject": "^3.0.0"
+ }
+ },
+ "object.assign": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz",
+ "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==",
+ "dev": true,
+ "requires": {
+ "define-properties": "^1.1.2",
+ "function-bind": "^1.1.1",
+ "has-symbols": "^1.0.0",
+ "object-keys": "^1.0.11"
+ }
+ },
+ "object.defaults": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/object.defaults/-/object.defaults-1.1.0.tgz",
+ "integrity": "sha1-On+GgzS0B96gbaFtiNXNKeQ1/s8=",
+ "dev": true,
+ "requires": {
+ "array-each": "^1.0.1",
+ "array-slice": "^1.0.0",
+ "for-own": "^1.0.0",
+ "isobject": "^3.0.0"
+ }
+ },
+ "object.map": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/object.map/-/object.map-1.0.1.tgz",
+ "integrity": "sha1-z4Plncj8wK1fQlDh94s7gb2AHTc=",
+ "dev": true,
+ "requires": {
+ "for-own": "^1.0.0",
+ "make-iterator": "^1.0.0"
+ }
+ },
+ "object.pick": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz",
+ "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=",
+ "dev": true,
+ "requires": {
+ "isobject": "^3.0.1"
+ }
+ },
+ "object.reduce": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/object.reduce/-/object.reduce-1.0.1.tgz",
+ "integrity": "sha1-b+NI8qx/oPlcpiEiZZkJaCW7A60=",
+ "dev": true,
+ "requires": {
+ "for-own": "^1.0.0",
+ "make-iterator": "^1.0.0"
+ }
+ },
+ "on-finished": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz",
+ "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=",
+ "dev": true,
+ "requires": {
+ "ee-first": "1.1.1"
+ }
+ },
+ "once": {
+ "version": "1.3.3",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.3.3.tgz",
+ "integrity": "sha1-suJhVXzkwxTsgwTz+oJmPkKXyiA=",
+ "dev": true,
+ "requires": {
+ "wrappy": "1"
+ }
+ },
+ "openurl": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/openurl/-/openurl-1.1.1.tgz",
+ "integrity": "sha1-OHW0sO96UsFW8NtB1GCduw+Us4c=",
+ "dev": true
+ },
+ "opn": {
+ "version": "5.3.0",
+ "resolved": "http://registry.npmjs.org/opn/-/opn-5.3.0.tgz",
+ "integrity": "sha512-bYJHo/LOmoTd+pfiYhfZDnf9zekVJrY+cnS2a5F2x+w5ppvTqObojTP7WiFG+kVZs9Inw+qQ/lw7TroWwhdd2g==",
+ "dev": true,
+ "requires": {
+ "is-wsl": "^1.1.0"
+ }
+ },
+ "ordered-read-streams": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/ordered-read-streams/-/ordered-read-streams-1.0.1.tgz",
+ "integrity": "sha1-d8DLN8QVJdZBZtmQ/61+xqDhNj4=",
+ "dev": true,
+ "requires": {
+ "readable-stream": "^2.0.1"
+ }
+ },
+ "os-homedir": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz",
+ "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=",
+ "dev": true
+ },
+ "os-locale": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz",
+ "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=",
+ "dev": true,
+ "requires": {
+ "lcid": "^1.0.0"
+ }
+ },
+ "os-tmpdir": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz",
+ "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=",
+ "dev": true
+ },
+ "osenv": {
+ "version": "0.1.5",
+ "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz",
+ "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==",
+ "dev": true,
+ "requires": {
+ "os-homedir": "^1.0.0",
+ "os-tmpdir": "^1.0.0"
+ }
+ },
+ "parse-filepath": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/parse-filepath/-/parse-filepath-1.0.2.tgz",
+ "integrity": "sha1-pjISf1Oq89FYdvWHLz/6x2PWyJE=",
+ "dev": true,
+ "requires": {
+ "is-absolute": "^1.0.0",
+ "map-cache": "^0.2.0",
+ "path-root": "^0.1.1"
+ }
+ },
+ "parse-json": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz",
+ "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=",
+ "dev": true,
+ "requires": {
+ "error-ex": "^1.2.0"
+ }
+ },
+ "parse-node-version": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/parse-node-version/-/parse-node-version-1.0.1.tgz",
+ "integrity": "sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA==",
+ "dev": true
+ },
+ "parse-passwd": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz",
+ "integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=",
+ "dev": true
+ },
+ "parseqs": {
+ "version": "0.0.5",
+ "resolved": "https://registry.npmjs.org/parseqs/-/parseqs-0.0.5.tgz",
+ "integrity": "sha1-1SCKNzjkZ2bikbouoXNoSSGouJ0=",
+ "dev": true,
+ "requires": {
+ "better-assert": "~1.0.0"
+ }
+ },
+ "parseuri": {
+ "version": "0.0.5",
+ "resolved": "https://registry.npmjs.org/parseuri/-/parseuri-0.0.5.tgz",
+ "integrity": "sha1-gCBKUNTbt3m/3G6+J3jZDkvOMgo=",
+ "dev": true,
+ "requires": {
+ "better-assert": "~1.0.0"
+ }
+ },
+ "parseurl": {
+ "version": "1.3.3",
+ "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
+ "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==",
+ "dev": true
+ },
+ "pascalcase": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz",
+ "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=",
+ "dev": true
+ },
+ "path-dirname": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz",
+ "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=",
+ "dev": true
+ },
+ "path-exists": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz",
+ "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=",
+ "dev": true,
+ "requires": {
+ "pinkie-promise": "^2.0.0"
+ }
+ },
+ "path-is-absolute": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
+ "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
+ "dev": true
+ },
+ "path-parse": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz",
+ "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==",
+ "dev": true
+ },
+ "path-root": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/path-root/-/path-root-0.1.1.tgz",
+ "integrity": "sha1-mkpoFMrBwM1zNgqV8yCDyOpHRbc=",
+ "dev": true,
+ "requires": {
+ "path-root-regex": "^0.1.0"
+ }
+ },
+ "path-root-regex": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/path-root-regex/-/path-root-regex-0.1.2.tgz",
+ "integrity": "sha1-v8zcjfWxLcUsi0PsONGNcsBLqW0=",
+ "dev": true
+ },
+ "path-type": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz",
+ "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "^4.1.2",
+ "pify": "^2.0.0",
+ "pinkie-promise": "^2.0.0"
+ },
+ "dependencies": {
+ "graceful-fs": {
+ "version": "4.1.11",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz",
+ "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=",
+ "dev": true
+ }
+ }
+ },
+ "performance-now": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz",
+ "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=",
+ "dev": true
+ },
+ "pify": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
+ "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
+ "dev": true
+ },
+ "pinkie": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz",
+ "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=",
+ "dev": true
+ },
+ "pinkie-promise": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz",
+ "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=",
+ "dev": true,
+ "requires": {
+ "pinkie": "^2.0.0"
+ }
+ },
+ "plugin-error": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/plugin-error/-/plugin-error-1.0.1.tgz",
+ "integrity": "sha512-L1zP0dk7vGweZME2i+EeakvUNqSrdiI3F91TwEoYiGrAfUXmVv6fJIq4g82PAXxNsWOp0J7ZqQy/3Szz0ajTxA==",
+ "dev": true,
+ "requires": {
+ "ansi-colors": "^1.0.1",
+ "arr-diff": "^4.0.0",
+ "arr-union": "^3.1.0",
+ "extend-shallow": "^3.0.2"
+ }
+ },
+ "portscanner": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/portscanner/-/portscanner-2.1.1.tgz",
+ "integrity": "sha1-6rtAnk3iSVD1oqUW01rnaTQ/u5Y=",
+ "dev": true,
+ "requires": {
+ "async": "1.5.2",
+ "is-number-like": "^1.0.3"
+ }
+ },
+ "posix-character-classes": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz",
+ "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=",
+ "dev": true
+ },
+ "pretty-hrtime": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz",
+ "integrity": "sha1-t+PqQkNaTJsnWdmeDyAesZWALuE=",
+ "dev": true
+ },
+ "process-nextick-args": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz",
+ "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=",
+ "dev": true
+ },
+ "pseudomap": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz",
+ "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=",
+ "dev": true
+ },
+ "psl": {
+ "version": "1.1.29",
+ "resolved": "https://registry.npmjs.org/psl/-/psl-1.1.29.tgz",
+ "integrity": "sha512-AeUmQ0oLN02flVHXWh9sSJF7mcdFq0ppid/JkErufc3hGIV/AMa8Fo9VgDo/cT2jFdOWoFvHp90qqBH54W+gjQ==",
+ "dev": true
+ },
+ "pump": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz",
+ "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==",
+ "dev": true,
+ "requires": {
+ "end-of-stream": "^1.1.0",
+ "once": "^1.3.1"
+ }
+ },
+ "pumpify": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz",
+ "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==",
+ "dev": true,
+ "requires": {
+ "duplexify": "^3.6.0",
+ "inherits": "^2.0.3",
+ "pump": "^2.0.0"
+ }
+ },
+ "punycode": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz",
+ "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=",
+ "dev": true
+ },
+ "qs": {
+ "version": "6.5.2",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz",
+ "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==",
+ "dev": true
+ },
+ "range-parser": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz",
+ "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==",
+ "dev": true
+ },
+ "raw-body": {
+ "version": "2.4.0",
+ "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz",
+ "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==",
+ "dev": true,
+ "requires": {
+ "bytes": "3.1.0",
+ "http-errors": "1.7.2",
+ "iconv-lite": "0.4.24",
+ "unpipe": "1.0.0"
+ }
+ },
+ "read-pkg": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz",
+ "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=",
+ "dev": true,
+ "requires": {
+ "load-json-file": "^1.0.0",
+ "normalize-package-data": "^2.3.2",
+ "path-type": "^1.0.0"
+ }
+ },
+ "read-pkg-up": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz",
+ "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=",
+ "dev": true,
+ "requires": {
+ "find-up": "^1.0.0",
+ "read-pkg": "^1.0.0"
+ }
+ },
+ "readable-stream": {
+ "version": "2.3.6",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
+ "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
+ "dev": true,
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ },
+ "dependencies": {
+ "process-nextick-args": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz",
+ "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==",
+ "dev": true
+ }
+ }
+ },
+ "readdirp": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.1.0.tgz",
+ "integrity": "sha1-TtCtBg3zBzMAxIRANz9y0cxkLXg=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "^4.1.2",
+ "minimatch": "^3.0.2",
+ "readable-stream": "^2.0.2",
+ "set-immediate-shim": "^1.0.1"
+ },
+ "dependencies": {
+ "graceful-fs": {
+ "version": "4.1.11",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz",
+ "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=",
+ "dev": true
+ },
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "dev": true
+ },
+ "process-nextick-args": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz",
+ "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==",
+ "dev": true
+ },
+ "readable-stream": {
+ "version": "2.3.6",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
+ "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
+ "dev": true,
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
+ }
+ }
+ },
+ "rechoir": {
+ "version": "0.6.2",
+ "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz",
+ "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=",
+ "dev": true,
+ "requires": {
+ "resolve": "^1.1.6"
+ }
+ },
+ "redent": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz",
+ "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=",
+ "dev": true,
+ "requires": {
+ "indent-string": "^2.1.0",
+ "strip-indent": "^1.0.1"
+ }
+ },
+ "regex-not": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz",
+ "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==",
+ "dev": true,
+ "requires": {
+ "extend-shallow": "^3.0.2",
+ "safe-regex": "^1.1.0"
+ }
+ },
+ "remove-bom-buffer": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/remove-bom-buffer/-/remove-bom-buffer-3.0.0.tgz",
+ "integrity": "sha512-8v2rWhaakv18qcvNeli2mZ/TMTL2nEyAKRvzo1WtnZBl15SHyEhrCu2/xKlJyUFKHiHgfXIyuY6g2dObJJycXQ==",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5",
+ "is-utf8": "^0.2.1"
+ }
+ },
+ "remove-bom-stream": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/remove-bom-stream/-/remove-bom-stream-1.2.0.tgz",
+ "integrity": "sha1-BfGlk/FuQuH7kOv1nejlaVJflSM=",
+ "dev": true,
+ "requires": {
+ "remove-bom-buffer": "^3.0.0",
+ "safe-buffer": "^5.1.0",
+ "through2": "^2.0.3"
+ }
+ },
+ "remove-trailing-separator": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz",
+ "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=",
+ "dev": true
+ },
+ "repeat-element": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.2.tgz",
+ "integrity": "sha1-7wiaF40Ug7quTZPrmLT55OEdmQo=",
+ "dev": true
+ },
+ "repeat-string": {
+ "version": "1.6.1",
+ "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz",
+ "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=",
+ "dev": true
+ },
+ "repeating": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz",
+ "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=",
+ "dev": true,
+ "requires": {
+ "is-finite": "^1.0.0"
+ }
+ },
+ "replace-ext": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.0.tgz",
+ "integrity": "sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs=",
+ "dev": true
+ },
+ "replace-homedir": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/replace-homedir/-/replace-homedir-1.0.0.tgz",
+ "integrity": "sha1-6H9tUTuSjd6AgmDBK+f+xv9ueYw=",
+ "dev": true,
+ "requires": {
+ "homedir-polyfill": "^1.0.1",
+ "is-absolute": "^1.0.0",
+ "remove-trailing-separator": "^1.1.0"
+ }
+ },
+ "request": {
+ "version": "2.88.0",
+ "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz",
+ "integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==",
+ "dev": true,
+ "requires": {
+ "aws-sign2": "~0.7.0",
+ "aws4": "^1.8.0",
+ "caseless": "~0.12.0",
+ "combined-stream": "~1.0.6",
+ "extend": "~3.0.2",
+ "forever-agent": "~0.6.1",
+ "form-data": "~2.3.2",
+ "har-validator": "~5.1.0",
+ "http-signature": "~1.2.0",
+ "is-typedarray": "~1.0.0",
+ "isstream": "~0.1.2",
+ "json-stringify-safe": "~5.0.1",
+ "mime-types": "~2.1.19",
+ "oauth-sign": "~0.9.0",
+ "performance-now": "^2.1.0",
+ "qs": "~6.5.2",
+ "safe-buffer": "^5.1.2",
+ "tough-cookie": "~2.4.3",
+ "tunnel-agent": "^0.6.0",
+ "uuid": "^3.3.2"
+ },
+ "dependencies": {
+ "mime-db": {
+ "version": "1.36.0",
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.36.0.tgz",
+ "integrity": "sha512-L+xvyD9MkoYMXb1jAmzI/lWYAxAMCPvIBSWur0PZ5nOf5euahRLVqH//FKW9mWp2lkqUgYiXPgkzfMUFi4zVDw==",
+ "dev": true
+ },
+ "mime-types": {
+ "version": "2.1.20",
+ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.20.tgz",
+ "integrity": "sha512-HrkrPaP9vGuWbLK1B1FfgAkbqNjIuy4eHlIYnFi7kamZyLLrGlo2mpcx0bBmNpKqBtYtAfGbodDddIgddSJC2A==",
+ "dev": true,
+ "requires": {
+ "mime-db": "~1.36.0"
+ }
+ },
+ "safe-buffer": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
+ "dev": true
+ }
+ }
+ },
+ "require-directory": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
+ "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=",
+ "dev": true
+ },
+ "require-main-filename": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz",
+ "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=",
+ "dev": true
+ },
+ "requires-port": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz",
+ "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=",
+ "dev": true
+ },
+ "resolve": {
+ "version": "1.10.1",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.10.1.tgz",
+ "integrity": "sha512-KuIe4mf++td/eFb6wkaPbMDnP6kObCaEtIDuHOUED6MNUo4K670KZUHuuvYPZDxNF0WVLw49n06M2m2dXphEzA==",
+ "dev": true,
+ "requires": {
+ "path-parse": "^1.0.6"
+ }
+ },
+ "resolve-dir": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz",
+ "integrity": "sha1-eaQGRMNivoLybv/nOcm7U4IEb0M=",
+ "dev": true,
+ "requires": {
+ "expand-tilde": "^2.0.0",
+ "global-modules": "^1.0.0"
+ }
+ },
+ "resolve-options": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/resolve-options/-/resolve-options-1.1.0.tgz",
+ "integrity": "sha1-MrueOcBtZzONyTeMDW1gdFZq0TE=",
+ "dev": true,
+ "requires": {
+ "value-or-function": "^3.0.0"
+ }
+ },
+ "resolve-url": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz",
+ "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=",
+ "dev": true
+ },
+ "resp-modifier": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/resp-modifier/-/resp-modifier-6.0.2.tgz",
+ "integrity": "sha1-sSTeXE+6/LpUH0j/pzlw9KpFa08=",
+ "dev": true,
+ "requires": {
+ "debug": "^2.2.0",
+ "minimatch": "^3.0.2"
+ }
+ },
+ "ret": {
+ "version": "0.1.15",
+ "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz",
+ "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==",
+ "dev": true
+ },
+ "rimraf": {
+ "version": "2.6.2",
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz",
+ "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==",
+ "dev": true,
+ "requires": {
+ "glob": "^7.0.5"
+ }
+ },
+ "rx": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/rx/-/rx-4.1.0.tgz",
+ "integrity": "sha1-pfE/957zt0D+MKqAP7CfmIBdR4I=",
+ "dev": true
+ },
+ "rxjs": {
+ "version": "5.5.12",
+ "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-5.5.12.tgz",
+ "integrity": "sha512-xx2itnL5sBbqeeiVgNPVuQQ1nC8Jp2WfNJhXWHmElW9YmrpS9UVnNzhP3EH3HFqexO5Tlp8GhYY+WEcqcVMvGw==",
+ "dev": true,
+ "requires": {
+ "symbol-observable": "1.0.1"
+ }
+ },
+ "safe-buffer": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz",
+ "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==",
+ "dev": true
+ },
+ "safe-regex": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz",
+ "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=",
+ "dev": true,
+ "requires": {
+ "ret": "~0.1.10"
+ }
+ },
+ "safer-buffer": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
+ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
+ "dev": true
+ },
+ "sass-graph": {
+ "version": "2.2.4",
+ "resolved": "https://registry.npmjs.org/sass-graph/-/sass-graph-2.2.4.tgz",
+ "integrity": "sha1-E/vWPNHK8JCLn9k0dq1DpR0eC0k=",
+ "dev": true,
+ "requires": {
+ "glob": "^7.0.0",
+ "lodash": "^4.0.0",
+ "scss-tokenizer": "^0.2.3",
+ "yargs": "^7.0.0"
+ }
+ },
+ "scss-tokenizer": {
+ "version": "0.2.3",
+ "resolved": "https://registry.npmjs.org/scss-tokenizer/-/scss-tokenizer-0.2.3.tgz",
+ "integrity": "sha1-jrBtualyMzOCTT9VMGQRSYR85dE=",
+ "dev": true,
+ "requires": {
+ "js-base64": "^2.1.8",
+ "source-map": "^0.4.2"
+ },
+ "dependencies": {
+ "source-map": {
+ "version": "0.4.4",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz",
+ "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=",
+ "dev": true,
+ "requires": {
+ "amdefine": ">=0.0.4"
+ }
+ }
+ }
+ },
+ "semver": {
+ "version": "4.3.6",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-4.3.6.tgz",
+ "integrity": "sha1-MAvG4OhjdPe6YQaLWx7NV/xlMto=",
+ "dev": true
+ },
+ "semver-greatest-satisfied-range": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/semver-greatest-satisfied-range/-/semver-greatest-satisfied-range-1.1.0.tgz",
+ "integrity": "sha1-E+jCZYq5aRywzXEJMkAoDTb3els=",
+ "dev": true,
+ "requires": {
+ "sver-compat": "^1.5.0"
+ }
+ },
+ "send": {
+ "version": "0.16.2",
+ "resolved": "https://registry.npmjs.org/send/-/send-0.16.2.tgz",
+ "integrity": "sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw==",
+ "dev": true,
+ "requires": {
+ "debug": "2.6.9",
+ "depd": "~1.1.2",
+ "destroy": "~1.0.4",
+ "encodeurl": "~1.0.2",
+ "escape-html": "~1.0.3",
+ "etag": "~1.8.1",
+ "fresh": "0.5.2",
+ "http-errors": "~1.6.2",
+ "mime": "1.4.1",
+ "ms": "2.0.0",
+ "on-finished": "~2.3.0",
+ "range-parser": "~1.2.0",
+ "statuses": "~1.4.0"
+ },
+ "dependencies": {
+ "http-errors": {
+ "version": "1.6.3",
+ "resolved": "http://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz",
+ "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=",
+ "dev": true,
+ "requires": {
+ "depd": "~1.1.2",
+ "inherits": "2.0.3",
+ "setprototypeof": "1.1.0",
+ "statuses": ">= 1.4.0 < 2"
+ }
+ },
+ "setprototypeof": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz",
+ "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==",
+ "dev": true
+ },
+ "statuses": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz",
+ "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==",
+ "dev": true
+ }
+ }
+ },
+ "serve-index": {
+ "version": "1.9.1",
+ "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz",
+ "integrity": "sha1-03aNabHn2C5c4FD/9bRTvqEqkjk=",
+ "dev": true,
+ "requires": {
+ "accepts": "~1.3.4",
+ "batch": "0.6.1",
+ "debug": "2.6.9",
+ "escape-html": "~1.0.3",
+ "http-errors": "~1.6.2",
+ "mime-types": "~2.1.17",
+ "parseurl": "~1.3.2"
+ },
+ "dependencies": {
+ "http-errors": {
+ "version": "1.6.3",
+ "resolved": "http://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz",
+ "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=",
+ "dev": true,
+ "requires": {
+ "depd": "~1.1.2",
+ "inherits": "2.0.3",
+ "setprototypeof": "1.1.0",
+ "statuses": ">= 1.4.0 < 2"
+ }
+ },
+ "setprototypeof": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz",
+ "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==",
+ "dev": true
+ },
+ "statuses": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz",
+ "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=",
+ "dev": true
+ }
+ }
+ },
+ "serve-static": {
+ "version": "1.13.2",
+ "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.2.tgz",
+ "integrity": "sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw==",
+ "dev": true,
+ "requires": {
+ "encodeurl": "~1.0.2",
+ "escape-html": "~1.0.3",
+ "parseurl": "~1.3.2",
+ "send": "0.16.2"
+ }
+ },
+ "server-destroy": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/server-destroy/-/server-destroy-1.0.1.tgz",
+ "integrity": "sha1-8Tv5KOQrnD55OD5hzDmYtdFObN0=",
+ "dev": true
+ },
+ "set-blocking": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz",
+ "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=",
+ "dev": true
+ },
+ "set-immediate-shim": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz",
+ "integrity": "sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E=",
+ "dev": true
+ },
+ "set-value": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz",
+ "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==",
+ "dev": true,
+ "requires": {
+ "extend-shallow": "^2.0.1",
+ "is-extendable": "^0.1.1",
+ "is-plain-object": "^2.0.3",
+ "split-string": "^3.0.1"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ }
+ }
+ },
+ "setprototypeof": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz",
+ "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==",
+ "dev": true
+ },
+ "signal-exit": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz",
+ "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=",
+ "dev": true
+ },
+ "snapdragon": {
+ "version": "0.8.2",
+ "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz",
+ "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==",
+ "dev": true,
+ "requires": {
+ "base": "^0.11.1",
+ "debug": "^2.2.0",
+ "define-property": "^0.2.5",
+ "extend-shallow": "^2.0.1",
+ "map-cache": "^0.2.2",
+ "source-map": "^0.5.6",
+ "source-map-resolve": "^0.5.0",
+ "use": "^3.1.0"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^0.1.0"
+ }
+ },
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ }
+ }
+ },
+ "snapdragon-node": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz",
+ "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==",
+ "dev": true,
+ "requires": {
+ "define-property": "^1.0.0",
+ "isobject": "^3.0.0",
+ "snapdragon-util": "^3.0.1"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^1.0.0"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-descriptor": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "^1.0.0",
+ "is-data-descriptor": "^1.0.0",
+ "kind-of": "^6.0.2"
+ }
+ }
+ }
+ },
+ "snapdragon-util": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz",
+ "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "^3.2.0"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "socket.io": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-2.1.1.tgz",
+ "integrity": "sha512-rORqq9c+7W0DAK3cleWNSyfv/qKXV99hV4tZe+gGLfBECw3XEhBy7x85F3wypA9688LKjtwO9pX9L33/xQI8yA==",
+ "dev": true,
+ "requires": {
+ "debug": "~3.1.0",
+ "engine.io": "~3.2.0",
+ "has-binary2": "~1.0.2",
+ "socket.io-adapter": "~1.1.0",
+ "socket.io-client": "2.1.1",
+ "socket.io-parser": "~3.2.0"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
+ "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "engine.io-client": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-3.2.1.tgz",
+ "integrity": "sha512-y5AbkytWeM4jQr7m/koQLc5AxpRKC1hEVUb/s1FUAWEJq5AzJJ4NLvzuKPuxtDi5Mq755WuDvZ6Iv2rXj4PTzw==",
+ "dev": true,
+ "requires": {
+ "component-emitter": "1.2.1",
+ "component-inherit": "0.0.3",
+ "debug": "~3.1.0",
+ "engine.io-parser": "~2.1.1",
+ "has-cors": "1.1.0",
+ "indexof": "0.0.1",
+ "parseqs": "0.0.5",
+ "parseuri": "0.0.5",
+ "ws": "~3.3.1",
+ "xmlhttprequest-ssl": "~1.5.4",
+ "yeast": "0.1.2"
+ }
+ },
+ "isarray": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz",
+ "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=",
+ "dev": true
+ },
+ "socket.io-client": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-2.1.1.tgz",
+ "integrity": "sha512-jxnFyhAuFxYfjqIgduQlhzqTcOEQSn+OHKVfAxWaNWa7ecP7xSNk2Dx/3UEsDcY7NcFafxvNvKPmmO7HTwTxGQ==",
+ "dev": true,
+ "requires": {
+ "backo2": "1.0.2",
+ "base64-arraybuffer": "0.1.5",
+ "component-bind": "1.0.0",
+ "component-emitter": "1.2.1",
+ "debug": "~3.1.0",
+ "engine.io-client": "~3.2.0",
+ "has-binary2": "~1.0.2",
+ "has-cors": "1.1.0",
+ "indexof": "0.0.1",
+ "object-component": "0.0.3",
+ "parseqs": "0.0.5",
+ "parseuri": "0.0.5",
+ "socket.io-parser": "~3.2.0",
+ "to-array": "0.1.4"
+ }
+ },
+ "socket.io-parser": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.2.0.tgz",
+ "integrity": "sha512-FYiBx7rc/KORMJlgsXysflWx/RIvtqZbyGLlHZvjfmPTPeuD/I8MaW7cfFrj5tRltICJdgwflhfZ3NVVbVLFQA==",
+ "dev": true,
+ "requires": {
+ "component-emitter": "1.2.1",
+ "debug": "~3.1.0",
+ "isarray": "2.0.1"
+ }
+ },
+ "ws": {
+ "version": "3.3.3",
+ "resolved": "https://registry.npmjs.org/ws/-/ws-3.3.3.tgz",
+ "integrity": "sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA==",
+ "dev": true,
+ "requires": {
+ "async-limiter": "~1.0.0",
+ "safe-buffer": "~5.1.0",
+ "ultron": "~1.1.0"
+ }
+ }
+ }
+ },
+ "socket.io-adapter": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-1.1.1.tgz",
+ "integrity": "sha1-KoBeihTWNyEk3ZFZrUUC+MsH8Gs=",
+ "dev": true
+ },
+ "socket.io-client": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-2.2.0.tgz",
+ "integrity": "sha512-56ZrkTDbdTLmBIyfFYesgOxsjcLnwAKoN4CiPyTVkMQj3zTUh0QAx3GbvIvLpFEOvQWu92yyWICxB0u7wkVbYA==",
+ "dev": true,
+ "requires": {
+ "backo2": "1.0.2",
+ "base64-arraybuffer": "0.1.5",
+ "component-bind": "1.0.0",
+ "component-emitter": "1.2.1",
+ "debug": "~3.1.0",
+ "engine.io-client": "~3.3.1",
+ "has-binary2": "~1.0.2",
+ "has-cors": "1.1.0",
+ "indexof": "0.0.1",
+ "object-component": "0.0.3",
+ "parseqs": "0.0.5",
+ "parseuri": "0.0.5",
+ "socket.io-parser": "~3.3.0",
+ "to-array": "0.1.4"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
+ "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ }
+ }
+ },
+ "socket.io-parser": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.3.0.tgz",
+ "integrity": "sha512-hczmV6bDgdaEbVqhAeVMM/jfUfzuEZHsQg6eOmLgJht6G3mPKMxYm75w2+qhAQZ+4X+1+ATZ+QFKeOZD5riHng==",
+ "dev": true,
+ "requires": {
+ "component-emitter": "1.2.1",
+ "debug": "~3.1.0",
+ "isarray": "2.0.1"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
+ "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "isarray": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz",
+ "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=",
+ "dev": true
+ }
+ }
+ },
+ "source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
+ "dev": true
+ },
+ "source-map-resolve": {
+ "version": "0.5.2",
+ "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.2.tgz",
+ "integrity": "sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA==",
+ "dev": true,
+ "requires": {
+ "atob": "^2.1.1",
+ "decode-uri-component": "^0.2.0",
+ "resolve-url": "^0.2.1",
+ "source-map-url": "^0.4.0",
+ "urix": "^0.1.0"
+ }
+ },
+ "source-map-url": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz",
+ "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=",
+ "dev": true
+ },
+ "sparkles": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/sparkles/-/sparkles-1.0.1.tgz",
+ "integrity": "sha512-dSO0DDYUahUt/0/pD/Is3VIm5TGJjludZ0HVymmhYF6eNA53PVLhnUk0znSYbH8IYBuJdCE+1luR22jNLMaQdw==",
+ "dev": true
+ },
+ "spdx-correct": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.0.0.tgz",
+ "integrity": "sha512-N19o9z5cEyc8yQQPukRCZ9EUmb4HUpnrmaL/fxS2pBo2jbfcFRVuFZ/oFC+vZz0MNNk0h80iMn5/S6qGZOL5+g==",
+ "dev": true,
+ "requires": {
+ "spdx-expression-parse": "^3.0.0",
+ "spdx-license-ids": "^3.0.0"
+ }
+ },
+ "spdx-exceptions": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.1.0.tgz",
+ "integrity": "sha512-4K1NsmrlCU1JJgUrtgEeTVyfx8VaYea9J9LvARxhbHtVtohPs/gFGG5yy49beySjlIMhhXZ4QqujIZEfS4l6Cg==",
+ "dev": true
+ },
+ "spdx-expression-parse": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz",
+ "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==",
+ "dev": true,
+ "requires": {
+ "spdx-exceptions": "^2.1.0",
+ "spdx-license-ids": "^3.0.0"
+ }
+ },
+ "spdx-license-ids": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.0.tgz",
+ "integrity": "sha512-2+EPwgbnmOIl8HjGBXXMd9NAu02vLjOO1nWw4kmeRDFyHn+M/ETfHxQUK0oXg8ctgVnl9t3rosNVsZ1jG61nDA==",
+ "dev": true
+ },
+ "split-string": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz",
+ "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==",
+ "dev": true,
+ "requires": {
+ "extend-shallow": "^3.0.0"
+ }
+ },
+ "sshpk": {
+ "version": "1.15.1",
+ "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.15.1.tgz",
+ "integrity": "sha512-mSdgNUaidk+dRU5MhYtN9zebdzF2iG0cNPWy8HG+W8y+fT1JnSkh0fzzpjOa0L7P8i1Rscz38t0h4gPcKz43xA==",
+ "dev": true,
+ "requires": {
+ "asn1": "~0.2.3",
+ "assert-plus": "^1.0.0",
+ "bcrypt-pbkdf": "^1.0.0",
+ "dashdash": "^1.12.0",
+ "ecc-jsbn": "~0.1.1",
+ "getpass": "^0.1.1",
+ "jsbn": "~0.1.0",
+ "safer-buffer": "^2.0.2",
+ "tweetnacl": "~0.14.0"
+ }
+ },
+ "stack-trace": {
+ "version": "0.0.10",
+ "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz",
+ "integrity": "sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA=",
+ "dev": true
+ },
+ "static-extend": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz",
+ "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=",
+ "dev": true,
+ "requires": {
+ "define-property": "^0.2.5",
+ "object-copy": "^0.1.0"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^0.1.0"
+ }
+ }
+ }
+ },
+ "statuses": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz",
+ "integrity": "sha1-+vUbnrdKrvOzrPStX2Gr8ky3uT4=",
+ "dev": true
+ },
+ "stdout-stream": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/stdout-stream/-/stdout-stream-1.4.1.tgz",
+ "integrity": "sha512-j4emi03KXqJWcIeF8eIXkjMFN1Cmb8gUlDYGeBALLPo5qdyTfA9bOtl8m33lRoC+vFMkP3gl0WsDr6+gzxbbTA==",
+ "dev": true,
+ "requires": {
+ "readable-stream": "^2.0.1"
+ }
+ },
+ "stream-exhaust": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/stream-exhaust/-/stream-exhaust-1.0.2.tgz",
+ "integrity": "sha512-b/qaq/GlBK5xaq1yrK9/zFcyRSTNxmcZwFLGSTG0mXgZl/4Z6GgiyYOXOvY7N3eEvFRAG1bkDRz5EPGSvPYQlw==",
+ "dev": true
+ },
+ "stream-shift": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.0.tgz",
+ "integrity": "sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI=",
+ "dev": true
+ },
+ "stream-throttle": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/stream-throttle/-/stream-throttle-0.1.3.tgz",
+ "integrity": "sha1-rdV8jXzHOoFjDTHNVdOWHPr7qcM=",
+ "dev": true,
+ "requires": {
+ "commander": "^2.2.0",
+ "limiter": "^1.0.5"
+ }
+ },
+ "string-width": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
+ "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
+ "dev": true,
+ "requires": {
+ "code-point-at": "^1.0.0",
+ "is-fullwidth-code-point": "^1.0.0",
+ "strip-ansi": "^3.0.0"
+ }
+ },
+ "string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
+ },
+ "strip-ansi": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^2.0.0"
+ }
+ },
+ "strip-indent": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz",
+ "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=",
+ "dev": true,
+ "requires": {
+ "get-stdin": "^4.0.1"
+ }
+ },
+ "supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
+ "dev": true
+ },
+ "sver-compat": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/sver-compat/-/sver-compat-1.5.0.tgz",
+ "integrity": "sha1-PPh9/rTQe0o/FIJ7wYaz/QxkXNg=",
+ "dev": true,
+ "requires": {
+ "es6-iterator": "^2.0.1",
+ "es6-symbol": "^3.1.1"
+ }
+ },
+ "symbol-observable": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.0.1.tgz",
+ "integrity": "sha1-g0D8RwLDEi310iKI+IKD9RPT/dQ=",
+ "dev": true
+ },
+ "tar": {
+ "version": "4.4.8",
+ "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.8.tgz",
+ "integrity": "sha512-LzHF64s5chPQQS0IYBn9IN5h3i98c12bo4NCO7e0sGM2llXQ3p2FGC5sdENN4cTW48O915Sh+x+EXx7XW96xYQ==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "chownr": "^1.1.1",
+ "fs-minipass": "^1.2.5",
+ "minipass": "^2.3.4",
+ "minizlib": "^1.1.1",
+ "mkdirp": "^0.5.0",
+ "safe-buffer": "^5.1.2",
+ "yallist": "^3.0.2"
+ },
+ "dependencies": {
+ "safe-buffer": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
+ "dev": true,
+ "optional": true
+ },
+ "yallist": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.3.tgz",
+ "integrity": "sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A==",
+ "dev": true,
+ "optional": true
+ }
+ }
+ },
+ "tfunk": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/tfunk/-/tfunk-3.1.0.tgz",
+ "integrity": "sha1-OORBT8ZJd9h6/apy+sttKfgve1s=",
+ "dev": true,
+ "requires": {
+ "chalk": "^1.1.1",
+ "object-path": "^0.9.0"
+ }
+ },
+ "through2": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz",
+ "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=",
+ "dev": true,
+ "requires": {
+ "readable-stream": "^2.1.5",
+ "xtend": "~4.0.1"
+ },
+ "dependencies": {
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "dev": true
+ },
+ "readable-stream": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz",
+ "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==",
+ "dev": true,
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~1.0.6",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.0.3",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "string_decoder": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz",
+ "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
+ }
+ }
+ },
+ "through2-filter": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/through2-filter/-/through2-filter-3.0.0.tgz",
+ "integrity": "sha512-jaRjI2WxN3W1V8/FMZ9HKIBXixtiqs3SQSX4/YGIiP3gL6djW48VoZq9tDqeCWs3MT8YY5wb/zli8VW8snY1CA==",
+ "dev": true,
+ "requires": {
+ "through2": "~2.0.0",
+ "xtend": "~4.0.0"
+ }
+ },
+ "time-stamp": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/time-stamp/-/time-stamp-1.1.0.tgz",
+ "integrity": "sha1-dkpaEa9QVhkhsTPztE5hhofg9cM=",
+ "dev": true
+ },
+ "to-absolute-glob": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/to-absolute-glob/-/to-absolute-glob-2.0.2.tgz",
+ "integrity": "sha1-GGX0PZ50sIItufFFt4z/fQ98hJs=",
+ "dev": true,
+ "requires": {
+ "is-absolute": "^1.0.0",
+ "is-negated-glob": "^1.0.0"
+ }
+ },
+ "to-array": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/to-array/-/to-array-0.1.4.tgz",
+ "integrity": "sha1-F+bBH3PdTz10zaek/zI46a2b+JA=",
+ "dev": true
+ },
+ "to-object-path": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz",
+ "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=",
+ "dev": true,
+ "requires": {
+ "kind-of": "^3.0.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "to-regex": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz",
+ "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==",
+ "dev": true,
+ "requires": {
+ "define-property": "^2.0.2",
+ "extend-shallow": "^3.0.2",
+ "regex-not": "^1.0.2",
+ "safe-regex": "^1.1.0"
+ }
+ },
+ "to-regex-range": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz",
+ "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=",
+ "dev": true,
+ "requires": {
+ "is-number": "^3.0.0",
+ "repeat-string": "^1.6.1"
+ }
+ },
+ "to-through": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/to-through/-/to-through-2.0.0.tgz",
+ "integrity": "sha1-/JKtq6ByZHvAtn1rA2ZKoZUJOvY=",
+ "dev": true,
+ "requires": {
+ "through2": "^2.0.3"
+ }
+ },
+ "toidentifier": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz",
+ "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==",
+ "dev": true
+ },
+ "tough-cookie": {
+ "version": "2.4.3",
+ "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz",
+ "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==",
+ "dev": true,
+ "requires": {
+ "psl": "^1.1.24",
+ "punycode": "^1.4.1"
+ }
+ },
+ "trim-newlines": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz",
+ "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM=",
+ "dev": true
+ },
+ "true-case-path": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/true-case-path/-/true-case-path-1.0.3.tgz",
+ "integrity": "sha512-m6s2OdQe5wgpFMC+pAJ+q9djG82O2jcHPOI6RNg1yy9rCYR+WD6Nbpl32fDpfC56nirdRy+opFa/Vk7HYhqaew==",
+ "dev": true,
+ "requires": {
+ "glob": "^7.1.2"
+ }
+ },
+ "tunnel-agent": {
+ "version": "0.6.0",
+ "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
+ "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "^5.0.1"
+ }
+ },
+ "tweetnacl": {
+ "version": "0.14.5",
+ "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz",
+ "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=",
+ "dev": true
+ },
+ "typedarray": {
+ "version": "0.0.6",
+ "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz",
+ "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=",
+ "dev": true
+ },
+ "ua-parser-js": {
+ "version": "0.7.17",
+ "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.17.tgz",
+ "integrity": "sha512-uRdSdu1oA1rncCQL7sCj8vSyZkgtL7faaw9Tc9rZ3mGgraQ7+Pdx7w5mnOSF3gw9ZNG6oc+KXfkon3bKuROm0g==",
+ "dev": true
+ },
+ "ultron": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.1.1.tgz",
+ "integrity": "sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og==",
+ "dev": true
+ },
+ "unc-path-regex": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/unc-path-regex/-/unc-path-regex-0.1.2.tgz",
+ "integrity": "sha1-5z3T17DXxe2G+6xrCufYxqadUPo=",
+ "dev": true
+ },
+ "undertaker": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/undertaker/-/undertaker-1.2.1.tgz",
+ "integrity": "sha512-71WxIzDkgYk9ZS+spIB8iZXchFhAdEo2YU8xYqBYJ39DIUIqziK78ftm26eecoIY49X0J2MLhG4hr18Yp6/CMA==",
+ "dev": true,
+ "requires": {
+ "arr-flatten": "^1.0.1",
+ "arr-map": "^2.0.0",
+ "bach": "^1.0.0",
+ "collection-map": "^1.0.0",
+ "es6-weak-map": "^2.0.1",
+ "last-run": "^1.1.0",
+ "object.defaults": "^1.0.0",
+ "object.reduce": "^1.0.0",
+ "undertaker-registry": "^1.0.0"
+ }
+ },
+ "undertaker-registry": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/undertaker-registry/-/undertaker-registry-1.0.1.tgz",
+ "integrity": "sha1-XkvaMI5KiirlhPm5pDWaSZglzFA=",
+ "dev": true
+ },
+ "union-value": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz",
+ "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==",
+ "dev": true,
+ "requires": {
+ "arr-union": "^3.1.0",
+ "get-value": "^2.0.6",
+ "is-extendable": "^0.1.1",
+ "set-value": "^2.0.1"
+ }
+ },
+ "unique-stream": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/unique-stream/-/unique-stream-2.3.1.tgz",
+ "integrity": "sha512-2nY4TnBE70yoxHkDli7DMazpWiP7xMdCYqU2nBRO0UB+ZpEkGsSija7MvmvnZFUeC+mrgiUfcHSr3LmRFIg4+A==",
+ "dev": true,
+ "requires": {
+ "json-stable-stringify-without-jsonify": "^1.0.1",
+ "through2-filter": "^3.0.0"
+ }
+ },
+ "universalify": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz",
+ "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==",
+ "dev": true
+ },
+ "unpipe": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
+ "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=",
+ "dev": true
+ },
+ "unset-value": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz",
+ "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=",
+ "dev": true,
+ "requires": {
+ "has-value": "^0.3.1",
+ "isobject": "^3.0.0"
+ },
+ "dependencies": {
+ "has-value": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz",
+ "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=",
+ "dev": true,
+ "requires": {
+ "get-value": "^2.0.3",
+ "has-values": "^0.1.4",
+ "isobject": "^2.0.0"
+ },
+ "dependencies": {
+ "isobject": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz",
+ "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=",
+ "dev": true,
+ "requires": {
+ "isarray": "1.0.0"
+ }
+ }
+ }
+ },
+ "has-values": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz",
+ "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=",
+ "dev": true
+ }
+ }
+ },
+ "upath": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/upath/-/upath-1.1.0.tgz",
+ "integrity": "sha512-bzpH/oBhoS/QI/YtbkqCg6VEiPYjSZtrHQM6/QnJS6OL9pKUFLqb3aFh4Scvwm45+7iAgiMkLhSbaZxUqmrprw==",
+ "dev": true
+ },
+ "urix": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz",
+ "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=",
+ "dev": true
+ },
+ "use": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz",
+ "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==",
+ "dev": true
+ },
+ "util-deprecate": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+ "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=",
+ "dev": true
+ },
+ "utils-merge": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz",
+ "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=",
+ "dev": true
+ },
+ "uuid": {
+ "version": "3.3.2",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz",
+ "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==",
+ "dev": true
+ },
+ "v8flags": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/v8flags/-/v8flags-3.1.2.tgz",
+ "integrity": "sha512-MtivA7GF24yMPte9Rp/BWGCYQNaUj86zeYxV/x2RRJMKagImbbv3u8iJC57lNhWLPcGLJmHcHmFWkNsplbbLWw==",
+ "dev": true,
+ "requires": {
+ "homedir-polyfill": "^1.0.1"
+ }
+ },
+ "validate-npm-package-license": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.3.tgz",
+ "integrity": "sha512-63ZOUnL4SIXj4L0NixR3L1lcjO38crAbgrTpl28t8jjrfuiOBL5Iygm+60qPs/KsZGzPNg6Smnc/oY16QTjF0g==",
+ "dev": true,
+ "requires": {
+ "spdx-correct": "^3.0.0",
+ "spdx-expression-parse": "^3.0.0"
+ }
+ },
+ "value-or-function": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/value-or-function/-/value-or-function-3.0.0.tgz",
+ "integrity": "sha1-HCQ6ULWVwb5Up1S/7OhWO5/42BM=",
+ "dev": true
+ },
+ "verror": {
+ "version": "1.10.0",
+ "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz",
+ "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=",
+ "dev": true,
+ "requires": {
+ "assert-plus": "^1.0.0",
+ "core-util-is": "1.0.2",
+ "extsprintf": "^1.2.0"
+ }
+ },
+ "vinyl": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-2.2.0.tgz",
+ "integrity": "sha512-MBH+yP0kC/GQ5GwBqrTPTzEfiiLjta7hTtvQtbxBgTeSXsmKQRQecjibMbxIXzVT3Y9KJK+drOz1/k+vsu8Nkg==",
+ "dev": true,
+ "requires": {
+ "clone": "^2.1.1",
+ "clone-buffer": "^1.0.0",
+ "clone-stats": "^1.0.0",
+ "cloneable-readable": "^1.0.0",
+ "remove-trailing-separator": "^1.0.1",
+ "replace-ext": "^1.0.0"
+ }
+ },
+ "vinyl-fs": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/vinyl-fs/-/vinyl-fs-3.0.3.tgz",
+ "integrity": "sha512-vIu34EkyNyJxmP0jscNzWBSygh7VWhqun6RmqVfXePrOwi9lhvRs//dOaGOTRUQr4tx7/zd26Tk5WeSVZitgng==",
+ "dev": true,
+ "requires": {
+ "fs-mkdirp-stream": "^1.0.0",
+ "glob-stream": "^6.1.0",
+ "graceful-fs": "^4.0.0",
+ "is-valid-glob": "^1.0.0",
+ "lazystream": "^1.0.0",
+ "lead": "^1.0.0",
+ "object.assign": "^4.0.4",
+ "pumpify": "^1.3.5",
+ "readable-stream": "^2.3.3",
+ "remove-bom-buffer": "^3.0.0",
+ "remove-bom-stream": "^1.2.0",
+ "resolve-options": "^1.1.0",
+ "through2": "^2.0.0",
+ "to-through": "^2.0.0",
+ "value-or-function": "^3.0.0",
+ "vinyl": "^2.0.0",
+ "vinyl-sourcemap": "^1.1.0"
+ }
+ },
+ "vinyl-sourcemap": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/vinyl-sourcemap/-/vinyl-sourcemap-1.1.0.tgz",
+ "integrity": "sha1-kqgAWTo4cDqM2xHYswCtS+Y7PhY=",
+ "dev": true,
+ "requires": {
+ "append-buffer": "^1.0.2",
+ "convert-source-map": "^1.5.0",
+ "graceful-fs": "^4.1.6",
+ "normalize-path": "^2.1.1",
+ "now-and-later": "^2.0.0",
+ "remove-bom-buffer": "^3.0.0",
+ "vinyl": "^2.0.0"
+ }
+ },
+ "vinyl-sourcemaps-apply": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/vinyl-sourcemaps-apply/-/vinyl-sourcemaps-apply-0.2.1.tgz",
+ "integrity": "sha1-q2VJ1h0XLCsbh75cUI0jnI74dwU=",
+ "dev": true,
+ "requires": {
+ "source-map": "^0.5.1"
+ }
+ },
+ "which": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/which/-/which-1.3.0.tgz",
+ "integrity": "sha512-xcJpopdamTuY5duC/KnTTNBraPK54YwpenP4lzxU8H91GudWpFv38u0CKjclE1Wi2EH2EDz5LRcHcKbCIzqGyg==",
+ "dev": true,
+ "requires": {
+ "isexe": "^2.0.0"
+ }
+ },
+ "which-module": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz",
+ "integrity": "sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8=",
+ "dev": true
+ },
+ "wide-align": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz",
+ "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==",
+ "dev": true,
+ "requires": {
+ "string-width": "^1.0.2 || 2"
+ }
+ },
+ "window-size": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.2.0.tgz",
+ "integrity": "sha1-tDFbtCFKPXBY6+7okuE/ok2YsHU=",
+ "dev": true
+ },
+ "wrap-ansi": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz",
+ "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=",
+ "dev": true,
+ "requires": {
+ "string-width": "^1.0.1",
+ "strip-ansi": "^3.0.1"
+ }
+ },
+ "wrappy": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
+ "dev": true
+ },
+ "ws": {
+ "version": "6.1.4",
+ "resolved": "https://registry.npmjs.org/ws/-/ws-6.1.4.tgz",
+ "integrity": "sha512-eqZfL+NE/YQc1/ZynhojeV8q+H050oR8AZ2uIev7RU10svA9ZnJUddHcOUZTJLinZ9yEfdA2kSATS2qZK5fhJA==",
+ "dev": true,
+ "requires": {
+ "async-limiter": "~1.0.0"
+ }
+ },
+ "xmlhttprequest-ssl": {
+ "version": "1.5.5",
+ "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.5.tgz",
+ "integrity": "sha1-wodrBhaKrcQOV9l+gRkayPQ5iz4=",
+ "dev": true
+ },
+ "xtend": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz",
+ "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=",
+ "dev": true
+ },
+ "y18n": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz",
+ "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=",
+ "dev": true
+ },
+ "yallist": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz",
+ "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=",
+ "dev": true
+ },
+ "yargs": {
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-7.1.0.tgz",
+ "integrity": "sha1-a6MY6xaWFyf10oT46gA+jWFU0Mg=",
+ "dev": true,
+ "requires": {
+ "camelcase": "^3.0.0",
+ "cliui": "^3.2.0",
+ "decamelize": "^1.1.1",
+ "get-caller-file": "^1.0.1",
+ "os-locale": "^1.4.0",
+ "read-pkg-up": "^1.0.1",
+ "require-directory": "^2.1.1",
+ "require-main-filename": "^1.0.1",
+ "set-blocking": "^2.0.0",
+ "string-width": "^1.0.2",
+ "which-module": "^1.0.0",
+ "y18n": "^3.2.1",
+ "yargs-parser": "^5.0.0"
+ },
+ "dependencies": {
+ "camelcase": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz",
+ "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=",
+ "dev": true
+ }
+ }
+ },
+ "yargs-parser": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-5.0.0.tgz",
+ "integrity": "sha1-J17PDX/+Bcd+ZOfIbkzZS/DhIoo=",
+ "dev": true,
+ "requires": {
+ "camelcase": "^3.0.0"
+ },
+ "dependencies": {
+ "camelcase": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz",
+ "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=",
+ "dev": true
+ }
+ }
+ },
+ "yeast": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/yeast/-/yeast-0.1.2.tgz",
+ "integrity": "sha1-AI4G2AlDIMNy28L47XagymyKxBk=",
+ "dev": true
+ }
+ }
+}
diff --git a/package.json b/package.json
new file mode 100644
index 00000000..4ae2fb59
--- /dev/null
+++ b/package.json
@@ -0,0 +1,47 @@
+{
+ "name": "bourbon-neat",
+ "version": "4.0.0",
+ "description": "A lightweight, semantic grid framework",
+ "keywords": [
+ "columns",
+ "grid",
+ "layout",
+ "media",
+ "media-queries",
+ "neat",
+ "queries",
+ "sass",
+ "scss",
+ "semantic",
+ "eyeglass-module"
+ ],
+ "homepage": "http://neat.bourbon.io",
+ "bugs": {
+ "url": "https://github.com/thoughtbot/neat/issues"
+ },
+ "license": "MIT",
+ "author": {
+ "name": "thoughtbot",
+ "url": "http://thoughtbot.com"
+ },
+ "main": "index.js",
+ "style": "core/_neat.scss",
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/thoughtbot/neat.git"
+ },
+ "scripts": {
+ "contrib": "gulp",
+ "test": "bundle exec rake"
+ },
+ "devDependencies": {
+ "browser-sync": "^2.24.6",
+ "gulp": "^4.0.0",
+ "gulp-sass": "^4.0.1"
+ },
+ "eyeglass": {
+ "name": "neat",
+ "needs": "*",
+ "exports": "eyeglass-exports.js"
+ }
+}
diff --git a/spec/.keep b/spec/.keep
new file mode 100644
index 00000000..e69de29b
diff --git a/spec/fixtures/_setup.scss b/spec/fixtures/_setup.scss
new file mode 100644
index 00000000..2dca0eea
--- /dev/null
+++ b/spec/fixtures/_setup.scss
@@ -0,0 +1 @@
+@import "core/neat";
diff --git a/spec/fixtures/functions/neat-column-default.scss b/spec/fixtures/functions/neat-column-default.scss
new file mode 100644
index 00000000..7439d37c
--- /dev/null
+++ b/spec/fixtures/functions/neat-column-default.scss
@@ -0,0 +1,22 @@
+@import "setup";
+
+$eighteen-grid: (
+ columns: 18,
+ gutter: 33px,
+);
+
+.neat-column-default-grid {
+ content: _neat-column-default($neat-grid, null);
+}
+
+.neat-column-default-grid-custom-col {
+ content: _neat-column-default($neat-grid, 10);
+}
+
+.neat-column-custom-grid {
+ content: _neat-column-default($eighteen-grid, null);
+}
+
+.neat-column-custom-grid-custom-col {
+ content: _neat-column-default($eighteen-grid, 10);
+}
diff --git a/spec/fixtures/functions/neat-column-width.scss b/spec/fixtures/functions/neat-column-width.scss
new file mode 100644
index 00000000..d7f9d46f
--- /dev/null
+++ b/spec/fixtures/functions/neat-column-width.scss
@@ -0,0 +1,30 @@
+@import "setup";
+
+$six-grid: (
+ columns: 6,
+ gutter: 10px
+);
+
+.neat-column-width-1-of-12 {
+ width: calc(#{_neat-column-width($neat-grid, 1)});
+}
+
+.neat-column-width-6-of-12 {
+ width: calc(#{_neat-column-width($neat-grid, 6)});
+}
+
+.neat-column-width-12-of-12 {
+ width: calc(#{_neat-column-width($neat-grid, 12)});
+}
+
+.neat-column-width-1-of-6 {
+ width: calc(#{_neat-column-width($six-grid, 1)});
+}
+
+.neat-column-width-2-of-6 {
+ width: calc(#{_neat-column-width($six-grid, 2)});
+}
+
+.neat-column-width-6-of-6 {
+ width: calc(#{_neat-column-width($six-grid, 6)});
+}
diff --git a/spec/fixtures/functions/neat-float-direction.scss b/spec/fixtures/functions/neat-float-direction.scss
new file mode 100644
index 00000000..758f7e02
--- /dev/null
+++ b/spec/fixtures/functions/neat-float-direction.scss
@@ -0,0 +1,17 @@
+@import "setup";
+
+$ltr-grid: (
+ direction: ltr,
+);
+
+$rtl-grid: (
+ direction: rtl,
+);
+
+.neat-float-direction-ltr {
+ content: _neat-float-direction($ltr-grid);
+}
+
+.neat-float-direction-rtl {
+ content: _neat-float-direction($rtl-grid);
+}
diff --git a/spec/fixtures/functions/neat-opposite-direction.scss b/spec/fixtures/functions/neat-opposite-direction.scss
new file mode 100644
index 00000000..e9cc1b97
--- /dev/null
+++ b/spec/fixtures/functions/neat-opposite-direction.scss
@@ -0,0 +1,17 @@
+@import "setup";
+
+$ltr-grid: (
+ direction: ltr,
+);
+
+$rtl-grid: (
+ direction: rtl,
+);
+
+.neat-opposite-direction-ltr {
+ content: _neat-opposite-direction($ltr-grid);
+}
+
+.neat-opposite-direction-rtl {
+ content: _neat-opposite-direction($rtl-grid);
+}
diff --git a/spec/fixtures/functions/neat-parse-media.scss b/spec/fixtures/functions/neat-parse-media.scss
new file mode 100644
index 00000000..5b084f21
--- /dev/null
+++ b/spec/fixtures/functions/neat-parse-media.scss
@@ -0,0 +1,9 @@
+@import "setup";
+
+.neat-parse-media-number {
+ content: _neat-parse-media(100px);
+}
+
+.neat-parse-media-string {
+ content: _neat-parse-media("only screen and (max-width: 25rem)");
+}
diff --git a/spec/fixtures/functions/retrieve-neat-settings.scss b/spec/fixtures/functions/retrieve-neat-settings.scss
new file mode 100644
index 00000000..eee68fa1
--- /dev/null
+++ b/spec/fixtures/functions/retrieve-neat-settings.scss
@@ -0,0 +1,22 @@
+@import "setup";
+
+$eighteen-grid: (
+ columns: 18,
+ gutter: 33px
+);
+
+.neat-settings-default-columns {
+ content: _retrieve-neat-setting($neat-grid, columns);
+}
+
+.neat-settings-default-gutter {
+ content: _retrieve-neat-setting($neat-grid, gutter);
+}
+
+.neat-settings-eighteen-columns {
+ content: _retrieve-neat-setting($eighteen-grid, columns);
+}
+
+.neat-settings-eighteen-gutter {
+ content: _retrieve-neat-setting($eighteen-grid, gutter);
+}
diff --git a/spec/fixtures/mixins/grid-collapse.scss b/spec/fixtures/mixins/grid-collapse.scss
new file mode 100644
index 00000000..08dae1a0
--- /dev/null
+++ b/spec/fixtures/mixins/grid-collapse.scss
@@ -0,0 +1,14 @@
+@import "setup";
+
+$custom-grid: (
+ columns: 6,
+ gutter: 4rem,
+);
+
+.grid-collapse-default {
+ @include grid-collapse;
+}
+
+.grid-collapse-custom {
+ @include grid-collapse($custom-grid);
+}
diff --git a/spec/fixtures/mixins/grid-column.scss b/spec/fixtures/mixins/grid-column.scss
new file mode 100644
index 00000000..42e52102
--- /dev/null
+++ b/spec/fixtures/mixins/grid-column.scss
@@ -0,0 +1,57 @@
+@import "setup";
+
+$six-grid: (
+ columns: 6,
+ gutter: 1em,
+);
+
+$seventeen-grid: (
+ columns: 17,
+ gutter: 10px,
+);
+
+.grid-column-1-of-default {
+ @include grid-column(1);
+}
+
+.grid-column-6-of-default {
+ @include grid-column(6);
+}
+
+.grid-column-12-of-default {
+ @include grid-column(12);
+}
+
+.grid-column-3-of-5-shorthand {
+ @include grid-column(3 of 5);
+}
+
+.grid-column-1-of-6 {
+ @include grid-column(1, $six-grid);
+}
+
+.grid-column-4-of-6 {
+ @include grid-column(4, $six-grid);
+}
+
+.grid-column-6-of-6 {
+ @include grid-column(6, $six-grid);
+}
+
+.grid-column-3-of-5-shorthand-six-grid {
+ @include grid-column(3 of 5, $six-grid);
+}
+
+.grid-column-5-of-17 {
+ @include grid-column(1, $seventeen-grid);
+}
+
+.grid-column-11-of-17 {
+ @include grid-column(6, $seventeen-grid);
+}
+
+.grid-column-13-of-17 {
+ @include grid-column(12, $seventeen-grid);
+}
+
+
diff --git a/spec/fixtures/mixins/grid-container.scss b/spec/fixtures/mixins/grid-container.scss
new file mode 100644
index 00000000..1557ec35
--- /dev/null
+++ b/spec/fixtures/mixins/grid-container.scss
@@ -0,0 +1,5 @@
+@import "setup";
+
+.grid-container {
+ @include grid-container;
+}
diff --git a/spec/fixtures/mixins/grid-media.scss b/spec/fixtures/mixins/grid-media.scss
new file mode 100644
index 00000000..0fbb9ace
--- /dev/null
+++ b/spec/fixtures/mixins/grid-media.scss
@@ -0,0 +1,45 @@
+@import "setup";
+
+$medium-screen: 1000px;
+
+$custom-neat-grid: (
+ columns: 12,
+ gutter: 50px,
+ media: $medium-screen,
+);
+
+$specific-neat-grid: (
+ columns: 12,
+ gutter: 80px,
+ media: "only screen and (min-width: 1000px) and (max-width: 1100px)",
+);
+
+$print-neat-grid: (
+ columns: 10,
+ gutter: 20px,
+ media: print,
+);
+
+.grid-column-media-custom-neat-grid {
+ @include grid-media($custom-neat-grid) {
+ @include grid-column(3);
+ }
+}
+
+.grid-column-media-specific-neat-grid {
+ @include grid-media($specific-neat-grid) {
+ @include grid-column(6);
+ }
+}
+
+.grid-column-media-print-neat-grid {
+ @include grid-media($print-neat-grid) {
+ @include grid-column(8);
+ }
+}
+
+.grid-column-media-combined-grid {
+ @include grid-media($custom-neat-grid, $specific-neat-grid, $print-neat-grid) {
+ @include grid-column(3);
+ }
+}
diff --git a/spec/fixtures/mixins/grid-push.scss b/spec/fixtures/mixins/grid-push.scss
new file mode 100644
index 00000000..42e17078
--- /dev/null
+++ b/spec/fixtures/mixins/grid-push.scss
@@ -0,0 +1,38 @@
+@import "setup";
+
+$six-grid: (
+ columns: 6,
+ gutter: 2rem,
+);
+
+.grid-push-default {
+ @include grid-push;
+}
+
+.grid-push-1-default {
+ @include grid-push(1);
+}
+
+.grid-push-6-default {
+ @include grid-push(6);
+}
+
+.grid-push-neg-6-default {
+ @include grid-push(-6);
+}
+
+.grid-push-0-six {
+ @include grid-push(false, $six-grid);
+}
+
+.grid-push-1-six {
+ @include grid-push(1, $six-grid);
+}
+
+.grid-push-3-six {
+ @include grid-push(3, $six-grid);
+}
+
+.grid-push-neg-3-six {
+ @include grid-push(-3, $six-grid);
+}
diff --git a/spec/fixtures/mixins/grid-shift.scss b/spec/fixtures/mixins/grid-shift.scss
new file mode 100644
index 00000000..e20cd652
--- /dev/null
+++ b/spec/fixtures/mixins/grid-shift.scss
@@ -0,0 +1,38 @@
+@import "setup";
+
+$six-grid: (
+ columns: 6,
+ gutter: 2rem,
+);
+
+.grid-shift-default {
+ @include grid-shift;
+}
+
+.grid-shift-1-default {
+ @include grid-shift(1);
+}
+
+.grid-shift-6-default {
+ @include grid-shift(6);
+}
+
+.grid-shift-neg-6-default {
+ @include grid-shift(-6);
+}
+
+.grid-shift-0-six {
+ @include grid-shift(false, $six-grid);
+}
+
+.grid-shift-1-six {
+ @include grid-shift(1, $six-grid);
+}
+
+.grid-shift-3-six {
+ @include grid-shift(3, $six-grid);
+}
+
+.grid-shift-neg-3-six {
+ @include grid-shift(-3, $six-grid);
+}
diff --git a/spec/neat/columns_spec.rb b/spec/neat/columns_spec.rb
deleted file mode 100644
index 64e2b3f8..00000000
--- a/spec/neat/columns_spec.rb
+++ /dev/null
@@ -1,73 +0,0 @@
-require 'spec_helper'
-
-describe "@include span-columns()" do
- before(:all) do
- ParserSupport.parse_file("span-columns")
- end
-
- context "with argument (6) in a twelve-column grid" do
- it "sets width in percentage" do
- expect('.span-columns-default').to have_rule('width: 48.82117%')
- end
-
- it "sets gutter in percentage" do
- expect('.span-columns-default').to have_rule('margin-right: 2.35765%')
- end
-
- it "sets display to block" do
- expect('.span-columns-default').to have_rule('display: block')
- end
-
- it "sets float to left" do
- expect('.span-columns-default').to have_rule('float: left')
- end
-
- it "removes gutter from last element" do
- expect('.span-columns-default:last-child').to have_rule('margin-right: 0')
- end
- end
-
- context "when nested" do
- it "sets relative width in percentage" do
- expect('.span-columns-default .span-columns-nested').to have_rule('width: 30.11389%')
- end
-
- it "sets relative gutter in percentage" do
- expect('.span-columns-default .span-columns-nested').to have_rule('margin-right: 4.82916%')
- end
- end
-
- context "with argument (table)" do
- it "sets display to table-cell" do
- expect('.span-columns-table').to have_rule('display: table-cell')
- end
-
- it "sets width evenly between elements" do
- expect('.span-columns-table').to have_rule('width: 50%')
- end
- end
-
- context "with argument (block-collapse)" do
- it "appends gutter width to column width" do
- expect('.span-columns-collapse').to have_rule('width: 51.17883%')
- end
-
- it "removes the next gutter" do
- expect('.span-columns-collapse').to_not have_rule('margin-right: 2.35765%')
- end
-
- it "removes gutter percentage from the width of the last child" do
- expect('.span-columns-collapse:last-child').to have_rule('width: 48.82117%')
- end
- end
-
- context "with argument (no-display)" do
- it "doesn't set display property" do
- expect('.span-columns-no-display').to_not have_rule('display: block')
- end
-
- it "sets width in percentage based on a block layout" do
- expect('.span-columns-no-display').to have_rule('width: 48.82117%')
- end
- end
-end
diff --git a/spec/neat/container_spec.rb b/spec/neat/container_spec.rb
deleted file mode 100644
index fee8c6e4..00000000
--- a/spec/neat/container_spec.rb
+++ /dev/null
@@ -1,15 +0,0 @@
-require 'spec_helper'
-
-describe "@include outer-container()" do
- before(:all) do
- ParserSupport.parse_file("outer-container")
- end
-
- it "adds clearfix" do
- expect('.container-default:after').to have_rule('clear: both')
- end
-
- it "sets max-width" do
- expect('.container-default').to have_rule('max-width: 960px')
- end
-end
diff --git a/spec/neat/functions/neat_column_default_spec.rb b/spec/neat/functions/neat_column_default_spec.rb
new file mode 100644
index 00000000..dffba559
--- /dev/null
+++ b/spec/neat/functions/neat_column_default_spec.rb
@@ -0,0 +1,35 @@
+require "spec_helper"
+
+describe "neat-column-default" do
+ before(:all) do
+ ParserSupport.parse_file("functions/neat-column-default")
+ end
+
+ context "called with default grid" do
+ it "gets default columns" do
+ rule = "content: 12"
+
+ expect(".neat-column-default-grid").to have_rule(rule)
+ end
+
+ it "gets custom columns" do
+ rule = "content: 10"
+
+ expect(".neat-column-default-grid-custom-col").to have_rule(rule)
+ end
+ end
+
+ context "called with custom grid" do
+ it "gets default columns" do
+ rule = "content: 18"
+
+ expect(".neat-column-custom-grid").to have_rule(rule)
+ end
+
+ it "gets custom columns" do
+ rule = "content: 10"
+
+ expect(".neat-column-custom-grid-custom-col").to have_rule(rule)
+ end
+ end
+end
diff --git a/spec/neat/functions/neat_column_width_spec.rb b/spec/neat/functions/neat_column_width_spec.rb
new file mode 100644
index 00000000..a51e657f
--- /dev/null
+++ b/spec/neat/functions/neat_column_width_spec.rb
@@ -0,0 +1,47 @@
+require "spec_helper"
+
+describe "neat-column-width" do
+ before(:all) do
+ ParserSupport.parse_file("functions/neat-column-width")
+ end
+
+ context "called with a default twelve column grid" do
+ it "applies one column" do
+ rule = "width: calc(8.33333% - 21.66667px)"
+
+ expect(".neat-column-width-1-of-12").to have_rule(rule)
+ end
+
+ it "applies six columns" do
+ rule = "width: calc(50% - 30px)"
+
+ expect(".neat-column-width-6-of-12").to have_rule(rule)
+ end
+
+ it "applies twelve columns" do
+ rule = "width: calc(100% - 40px)"
+
+ expect(".neat-column-width-12-of-12").to have_rule(rule)
+ end
+ end
+
+ context "called with a custom 6 column grid" do
+ it "applies one column" do
+ rule = "width: calc(16.66667% - 11.66667px)"
+
+ expect(".neat-column-width-1-of-6").to have_rule(rule)
+ end
+
+ it "applies six columns" do
+ rule = "width: calc(33.33333% - 13.33333px)"
+
+ expect(".neat-column-width-2-of-6").to have_rule(rule)
+ end
+
+ it "applies twelve columns" do
+ rule = "width: calc(100% - 20px)"
+
+ expect(".neat-column-width-6-of-6").to have_rule(rule)
+ end
+ end
+end
diff --git a/spec/neat/functions/neat_float_direction_spec.rb b/spec/neat/functions/neat_float_direction_spec.rb
new file mode 100644
index 00000000..3d1a7a34
--- /dev/null
+++ b/spec/neat/functions/neat_float_direction_spec.rb
@@ -0,0 +1,23 @@
+require "spec_helper"
+
+describe "neat-float-direction" do
+ before(:all) do
+ ParserSupport.parse_file("functions/neat-float-direction")
+ end
+
+ context "called with ltr" do
+ it "returns left" do
+ rule = "content: left"
+
+ expect(".neat-float-direction-ltr").to have_rule(rule)
+ end
+ end
+
+ context "called with rtl" do
+ it "returns right" do
+ rule = "content: right"
+
+ expect(".neat-float-direction-rtl").to have_rule(rule)
+ end
+ end
+end
diff --git a/spec/neat/functions/neat_opposite_direction_spec.rb b/spec/neat/functions/neat_opposite_direction_spec.rb
new file mode 100644
index 00000000..558d251b
--- /dev/null
+++ b/spec/neat/functions/neat_opposite_direction_spec.rb
@@ -0,0 +1,23 @@
+require "spec_helper"
+
+describe "neat-opposite-direction" do
+ before(:all) do
+ ParserSupport.parse_file("functions/neat-opposite-direction")
+ end
+
+ context "called with ltr" do
+ it "returns right" do
+ rule = "content: right"
+
+ expect(".neat-opposite-direction-ltr").to have_rule(rule)
+ end
+ end
+
+ context "called with rtl" do
+ it "returns left" do
+ rule = "content: left"
+
+ expect(".neat-opposite-direction-rtl").to have_rule(rule)
+ end
+ end
+end
diff --git a/spec/neat/functions/neat_parse_media_spec.rb b/spec/neat/functions/neat_parse_media_spec.rb
new file mode 100644
index 00000000..9bc4af4e
--- /dev/null
+++ b/spec/neat/functions/neat_parse_media_spec.rb
@@ -0,0 +1,23 @@
+require "spec_helper"
+
+describe "neat-parse-media" do
+ before(:all) do
+ ParserSupport.parse_file("functions/neat-parse-media")
+ end
+
+ context "called with number" do
+ it "gets min-width wraped number" do
+ rule = 'content: "only screen and (min-width: 100px)"'
+
+ expect(".neat-parse-media-number").to have_rule(rule)
+ end
+ end
+
+ context "called with string" do
+ it "gets the string" do
+ rule = 'content: "only screen and (max-width: 25rem)"'
+
+ expect(".neat-parse-media-string").to have_rule(rule)
+ end
+ end
+end
diff --git a/spec/neat/functions/retrieve_neat_settings_spec.rb b/spec/neat/functions/retrieve_neat_settings_spec.rb
new file mode 100644
index 00000000..207e32b1
--- /dev/null
+++ b/spec/neat/functions/retrieve_neat_settings_spec.rb
@@ -0,0 +1,35 @@
+require "spec_helper"
+
+describe "retrieve-neat-settings" do
+ before(:all) do
+ ParserSupport.parse_file("functions/retrieve-neat-settings")
+ end
+
+ context "called with default settings" do
+ it "gets default columns" do
+ rule = "content: 12"
+
+ expect(".neat-settings-default-columns").to have_rule(rule)
+ end
+
+ it "gets default gutter" do
+ rule = "content: 20px"
+
+ expect(".neat-settings-default-gutter").to have_rule(rule)
+ end
+ end
+
+ context "called with custom settings" do
+ it "gets default columns" do
+ rule = "content: 18"
+
+ expect(".neat-settings-eighteen-columns").to have_rule(rule)
+ end
+
+ it "gets default gutter" do
+ rule = "content: 33px"
+
+ expect(".neat-settings-eighteen-gutter").to have_rule(rule)
+ end
+ end
+end
diff --git a/spec/neat/media_spec.rb b/spec/neat/media_spec.rb
deleted file mode 100644
index 62f74bbd..00000000
--- a/spec/neat/media_spec.rb
+++ /dev/null
@@ -1,55 +0,0 @@
-require 'spec_helper'
-
-describe "@include media()" do
- before(:all) do
- ParserSupport.parse_file("media")
- end
-
- context "with argument (481px)" do
- it "outputs @media screen and (min-width: 481px)" do
- expect('.media-default').to be_contained_in('screen and (min-width: 481px)')
- end
- end
-
- context "with argument (max-width 480px)" do
- it "outputs @media screen and (max-width: 480px)" do
- expect('.media-max-width').to be_contained_in('screen and (max-width: 480px)')
- end
- end
-
- context "with argument (min-width 320px max-width 480px)" do
- it "outputs @media screen and (min-width: 320px) and (max-width: 480px)" do
- expect('.media-min-max-width').to be_contained_in('screen and (min-width: 320px) and (max-width: 480px)')
- end
- end
-
- context "with argument (481px, 6)" do
- it "outputs @media screen and (min-width: 481px)" do
- expect('.change-media-context').to be_contained_in('screen and (min-width: 481px)')
- end
-
- it "uses a 6-column grid" do
- expect('.change-media-context').to have_rule('width: 100%')
- end
- end
-
- context "with shorthand argument (max-width 480px 6)" do
- it "outputs @media screen and (max-width: 480px)" do
- expect('.change-media-context-shorthand').to be_contained_in('screen and (max-width: 480px)')
- end
-
- it "uses a 6-column grid" do
- expect('.change-media-context-shorthand').to have_rule('width: 100%')
- end
- end
-
- context "with composite argument (max-width 768px min-width 110px orientation portait 6)" do
- it "outputs @media screen and (max-width: 768px) and (min-width: 110px) and (orientation: portait)" do
- expect('.composite-media-query').to be_contained_in('screen and (max-width: 768px) and (min-width: 110px) and (orientation: portait)')
- end
-
- it "uses a 6-column grid" do
- expect('.composite-media-query').to have_rule('width: 100%')
- end
- end
-end
diff --git a/spec/neat/mixins/grid_collapse_spec.rb b/spec/neat/mixins/grid_collapse_spec.rb
new file mode 100644
index 00000000..b36a65be
--- /dev/null
+++ b/spec/neat/mixins/grid_collapse_spec.rb
@@ -0,0 +1,26 @@
+require "spec_helper"
+
+describe "grid-collapse" do
+ before(:all) do
+ ParserSupport.parse_file("mixins/grid-collapse")
+ end
+
+ context "called with default settings" do
+ it "adds margin for just the gutter with no specified column" do
+ ruleset = "margin-left: -20px; " +
+ "margin-right: -20px; " +
+ "width: calc(100% + 40px);"
+ expect(".grid-collapse-default").to have_ruleset(ruleset)
+ end
+ end
+
+ context "called with custom settings" do
+ it "adds margin for just the gutter with no specified column" do
+ ruleset = "margin-left: -4rem; " +
+ "margin-right: -4rem; " +
+ "width: calc(100% + 8rem);"
+
+ expect(".grid-collapse-custom").to have_ruleset(ruleset)
+ end
+ end
+end
diff --git a/spec/neat/mixins/grid_column_spec.rb b/spec/neat/mixins/grid_column_spec.rb
new file mode 100644
index 00000000..e35b7657
--- /dev/null
+++ b/spec/neat/mixins/grid_column_spec.rb
@@ -0,0 +1,101 @@
+require "spec_helper"
+
+describe "grid-column" do
+ before(:all) do
+ ParserSupport.parse_file("mixins/grid-column")
+ end
+
+ context "called without a specified grid" do
+ it "applies one column in the default 12-column grid" do
+ ruleset = "width: calc(8.33333% - 21.66667px); " +
+ "float: left; " +
+ "margin-left: 20px;"
+
+ expect(".grid-column-1-of-default").to have_ruleset(ruleset)
+ end
+
+ it "applies six columns in the default 12-column grid" do
+ ruleset = "width: calc(50% - 30px); " +
+ "float: left; " +
+ "margin-left: 20px;"
+
+ expect(".grid-column-6-of-default").to have_ruleset(ruleset)
+ end
+
+ it "applies twelve columns in the default 12-column grid" do
+ ruleset = "width: calc(100% - 40px); " +
+ "float: left; " +
+ "margin-left: 20px;"
+
+ expect(".grid-column-12-of-default").to have_ruleset(ruleset)
+ end
+
+ it "applies a three fifths column in shorthand with the default grid" do
+ ruleset = "width: calc(60% - 32px); " +
+ "float: left; " +
+ "margin-left: 20px;"
+
+ expect(".grid-column-3-of-5-shorthand").to have_ruleset(ruleset)
+ end
+ end
+
+ context "called with a custom grid" do
+ it "applies one column" do
+ ruleset = "width: calc(16.66667% - 1.16667em); " +
+ "float: left; " +
+ "margin-left: 1em;"
+
+ expect(".grid-column-1-of-6").to have_ruleset(ruleset)
+ end
+
+ it "applies four columns" do
+ ruleset = "width: calc(66.66667% - 1.66667em); " +
+ "float: left; " +
+ "margin-left: 1em;"
+
+ expect(".grid-column-4-of-6").to have_ruleset(ruleset)
+ end
+
+ it "applies six columns" do
+ ruleset = "width: calc(100% - 2em); " +
+ "float: left; " +
+ "margin-left: 1em;"
+
+ expect(".grid-column-6-of-6").to have_ruleset(ruleset)
+ end
+
+ it "applies a three fifths column in shorthand" do
+ ruleset = "width: calc(60% - 1.6em); " +
+ "float: left; " +
+ "margin-left: 1em;"
+
+ expect(".grid-column-3-of-5-shorthand-six-grid").to have_ruleset(ruleset)
+ end
+ end
+
+ context "called with a weirder custom grid" do
+ it "applies five columns" do
+ ruleset = "width: calc(5.88235% - 10.58824px); " +
+ "float: left; " +
+ "margin-left: 10px;"
+
+ expect(".grid-column-5-of-17").to have_ruleset(ruleset)
+ end
+
+ it "applies eleven columns" do
+ ruleset = "width: calc(35.29412% - 13.52941px); " +
+ "float: left; " +
+ "margin-left: 10px;"
+
+ expect(".grid-column-11-of-17").to have_ruleset(ruleset)
+ end
+
+ it "applies thirteen columns" do
+ ruleset = "width: calc(70.58824% - 17.05882px); " +
+ "float: left; " +
+ "margin-left: 10px;"
+
+ expect(".grid-column-13-of-17").to have_ruleset(ruleset)
+ end
+ end
+end
diff --git a/spec/neat/mixins/grid_container_spec.rb b/spec/neat/mixins/grid_container_spec.rb
new file mode 100644
index 00000000..1a4516e3
--- /dev/null
+++ b/spec/neat/mixins/grid_container_spec.rb
@@ -0,0 +1,17 @@
+require "spec_helper"
+
+describe "grid-container" do
+ before(:all) do
+ ParserSupport.parse_file("mixins/grid-container")
+ end
+
+ context "called with default settings" do
+ it "adds after element" do
+ ruleset = "clear: both; " +
+ "content: \"\"; " +
+ "display: block;"
+
+ expect(".grid-container::after").to have_ruleset(ruleset)
+ end
+ end
+end
diff --git a/spec/neat/mixins/grid_media_spec.rb b/spec/neat/mixins/grid_media_spec.rb
new file mode 100644
index 00000000..4db86c26
--- /dev/null
+++ b/spec/neat/mixins/grid_media_spec.rb
@@ -0,0 +1,39 @@
+require "spec_helper"
+
+describe "@include grid-media() {...}" do
+ before(:all) do
+ ParserSupport.parse_file("mixins/grid-media")
+ end
+
+ context "with argument ($custom-neat-grid)" do
+ it "outputs @media only screen and (min-width: 1000px)" do
+ expect(".grid-column-media-custom-neat-grid").to be_contained_in("only screen and (min-width: 1000px)")
+ end
+ end
+
+ context "with argument ($specific-neat-grid)" do
+ it "outputs @media only screen and (min-width: 1000px) and (max-width: 1100px)" do
+ expect(".grid-column-media-specific-neat-grid").to be_contained_in("only screen and (min-width: 1000px) and (max-width: 1100px)")
+ end
+ end
+
+ context "with argument ($print-neat-grid)" do
+ it "outputs @media print" do
+ expect(".grid-column-media-print-neat-grid").to be_contained_in("print")
+ end
+ end
+
+ context "with argument ($custom-neat-grid, $specific-neat-grid, $print-neat-grid)" do
+ it "outputs @media only screen and (min-width: 1000px)" do
+ expect(".grid-column-media-combined-grid").to be_contained_in("only screen and (min-width: 1000px)")
+ end
+
+ it "outputs @media only screen and (min-width: 1000px) and (max-width: 1100px)" do
+ expect(".grid-column-media-combined-grid").to be_contained_in("only screen and (min-width: 1000px) and (max-width: 1100px)")
+ end
+
+ it "outputs @media print" do
+ expect(".grid-column-media-combined-grid").to be_contained_in("print")
+ end
+ end
+end
diff --git a/spec/neat/mixins/grid_push_spec.rb b/spec/neat/mixins/grid_push_spec.rb
new file mode 100644
index 00000000..07d492b2
--- /dev/null
+++ b/spec/neat/mixins/grid_push_spec.rb
@@ -0,0 +1,59 @@
+require "spec_helper"
+
+describe "grid-push" do
+ before(:all) do
+ ParserSupport.parse_file("mixins/grid-push")
+ end
+
+ context "called with default settings" do
+ it "adds margin for just the gutter with no specified column" do
+ rule = "margin-left: 20px"
+
+ expect(".grid-push-default").to have_rule(rule)
+ end
+
+ it "adds margin for one column" do
+ rule = "margin-left: calc(8.33333% - 21.66667px + 40px)"
+
+ expect(".grid-push-1-default").to have_rule(rule)
+ end
+
+ it "adds margin for six columns" do
+ rule = "margin-left: calc(50% - 30px + 40px)"
+
+ expect(".grid-push-6-default").to have_rule(rule)
+ end
+
+ it "adds margin for negative six columns" do
+ rule = "margin-left: calc(-50% - 10px + 40px)"
+
+ expect(".grid-push-neg-6-default").to have_rule(rule)
+ end
+ end
+
+ context "called with custom settings" do
+ it "adds margin for just the gutter with no specified column" do
+ rule = "margin-left: 2rem"
+
+ expect(".grid-push-0-six").to have_rule(rule)
+ end
+
+ it "adds margin for one column" do
+ rule = "margin-left: calc(16.66667% - 2.33333rem + 4rem)"
+
+ expect(".grid-push-1-six").to have_rule(rule)
+ end
+
+ it "adds margin for three columns" do
+ rule = "margin-left: calc(50% - 3rem + 4rem)"
+
+ expect(".grid-push-3-six").to have_rule(rule)
+ end
+
+ it "adds margin for negative three columns" do
+ rule = "margin-left: calc(-50% - 1rem + 4rem)"
+
+ expect(".grid-push-neg-3-six").to have_rule(rule)
+ end
+ end
+end
diff --git a/spec/neat/mixins/grid_shift_spec.rb b/spec/neat/mixins/grid_shift_spec.rb
new file mode 100644
index 00000000..7debcf86
--- /dev/null
+++ b/spec/neat/mixins/grid_shift_spec.rb
@@ -0,0 +1,59 @@
+require "spec_helper"
+
+describe "grid-shift" do
+ before(:all) do
+ ParserSupport.parse_file("mixins/grid-shift")
+ end
+
+ context "called with default settings" do
+ it "adds relative positioning without moving the object" do
+ rule = "left: auto; position: relative;"
+
+ expect(".grid-shift-default").to have_ruleset(rule)
+ end
+
+ it "moves the object one column to the right" do
+ rule = "left: calc(8.33333% - 21.66667px + 20px); position: relative;"
+
+ expect(".grid-shift-1-default").to have_ruleset(rule)
+ end
+
+ it "moves the object six columns to the right" do
+ rule = "left: calc(50% - 30px + 20px); position: relative;"
+
+ expect(".grid-shift-6-default").to have_ruleset(rule)
+ end
+
+ it "moves the object six columns to the left" do
+ rule = "left: calc(-50% - 10px + 20px); position: relative;"
+
+ expect(".grid-shift-neg-6-default").to have_ruleset(rule)
+ end
+ end
+
+ context "called with custom settings" do
+ it "adds relative positioning without moving the object" do
+ rule = "left: auto; position: relative;"
+
+ expect(".grid-shift-0-six").to have_ruleset(rule)
+ end
+
+ it "moves the object one column to the right" do
+ rule = "left: calc(16.66667% - 2.33333rem + 2rem); position: relative;"
+
+ expect(".grid-shift-1-six").to have_ruleset(rule)
+ end
+
+ it "moves the object three columns to the right" do
+ rule = "left: calc(50% - 3rem + 2rem); position: relative;"
+
+ expect(".grid-shift-3-six").to have_ruleset(rule)
+ end
+
+ it "moves the object three columns to the left" do
+ rule = "left: calc(-50% - 1rem + 2rem); position: relative;"
+
+ expect(".grid-shift-neg-3-six").to have_ruleset(rule)
+ end
+ end
+end
diff --git a/spec/neat/new_breakpoint_spec.rb b/spec/neat/new_breakpoint_spec.rb
deleted file mode 100644
index c2afd331..00000000
--- a/spec/neat/new_breakpoint_spec.rb
+++ /dev/null
@@ -1,17 +0,0 @@
-require 'spec_helper'
-
-describe "new-breakpoint()" do
- before(:all) do
- ParserSupport.parse_file("new-breakpoint")
- end
-
- context "with argument (max-width 768px 12)" do
- it "outputs (max-width 768px)" do
- expect('.responsive-element').to be_contained_in('screen and (max-width: 768px)')
- end
-
- it "adds (max-width 768px 12) to visual grid breakpoints" do
- expect('$visual-grid-breakpoints').to have_value('max-width 768px 12')
- end
- end
-end
diff --git a/spec/neat/omega_spec.rb b/spec/neat/omega_spec.rb
deleted file mode 100644
index ef7bc38f..00000000
--- a/spec/neat/omega_spec.rb
+++ /dev/null
@@ -1,43 +0,0 @@
-require 'spec_helper'
-
-describe "@include omega()" do
- before(:all) do
- ParserSupport.parse_file("omega")
- end
-
- context "with no argument" do
- it "removes right margin" do
- expect('.omega-default').to have_rule('margin-right: 0')
- end
- end
-
- context "with argument (4n)" do
- it "removes right margin of nth-child(4n)" do
- expect('.omega-nth-default:nth-child(4n)').to have_rule('margin-right: 0')
- end
-
- it "adds clear to nth-child(4n+1)" do
- expect('.omega-nth-default:nth-child(4n+1)').to have_rule('clear: left')
- end
- end
-
- context "with argument ('4n+1')" do
- it "removes right margin of nth-child(4n+1)" do
- expect('.omega-complex-nth:nth-child(4n+1)').to have_rule('margin-right: 0')
- end
- end
-
- context "when called inside an RTL row" do
- context "with no argument" do
- it "removes left margin" do
- expect('section .omega-default-left').to have_rule('margin-left: 0')
- end
- end
-
- context "with argument (4n block)" do
- it "removes left margin of nth-child(4n)" do
- expect('section .omega-nth-default-left:nth-child(4n)').to have_rule('margin-left: 0')
- end
- end
- end
-end
diff --git a/spec/neat/pad_spec.rb b/spec/neat/pad_spec.rb
deleted file mode 100644
index cb8e1491..00000000
--- a/spec/neat/pad_spec.rb
+++ /dev/null
@@ -1,32 +0,0 @@
-require 'spec_helper'
-
-describe "@include pad()" do
- before(:all) do
- ParserSupport.parse_file("pad")
- end
-
- context "with no argument" do
- it "sets padding to gutter percentage" do
- expect('.pad-default').to have_rule('padding: 2.35765%')
- end
- end
-
- context "with argument (20px)" do
- it "sets padding to 20px" do
- expect('.pad-explicit').to have_rule('padding: 20px')
- end
- end
-
- context "with argument (30px 20px 10px 5px)" do
- it "sets padding to 30px 20px 10px 5px" do
- expect('.pad-shorthand').to have_rule('padding: 30px 20px 10px 5px')
- end
- end
-
- context "with argument (default)" do
- it "uses default gutter percentage" do
- expect('.pad-shorthand-default').to have_rule('padding: 30px 2.35765% 10px 2.35765%')
- end
- end
-end
-
diff --git a/spec/neat/row_spec.rb b/spec/neat/row_spec.rb
deleted file mode 100644
index 5e8fe9e3..00000000
--- a/spec/neat/row_spec.rb
+++ /dev/null
@@ -1,39 +0,0 @@
-require 'spec_helper'
-
-describe "@include row()" do
- before(:all) do
- ParserSupport.parse_file("row")
- end
-
- context "with no argument" do
- it "adds clearfix" do
- expect('.row-default:after').to have_rule('clear: both')
- end
-
- it "sets display to block" do
- expect('.row-default').to have_rule('display: block')
- end
- end
-
- context "with argument (table)" do
- it "sets display to table" do
- expect('.row-table').to have_rule('display: table')
- end
-
- it "forces table-cell display on child elements" do
- expect('.row-table-reset .block-child').to have_rule('display: table-cell')
- end
- end
-
- context "with reset-display()" do
- it "resets display to block" do
- expect('.no-row').to have_rule('display: block')
- end
- end
-
- context "with invalid display argument" do
- it "sets display to block" do
- expect('.row-invalid-display').to have_rule('display: block')
- end
- end
-end
diff --git a/spec/neat/shift_spec.rb b/spec/neat/shift_spec.rb
deleted file mode 100644
index 292c3dda..00000000
--- a/spec/neat/shift_spec.rb
+++ /dev/null
@@ -1,41 +0,0 @@
-require 'spec_helper'
-
-describe "@include shift()" do
- before(:all) do
- ParserSupport.parse_file("shift")
- end
-
- context "with no argument" do
- it "shifts element one column in the default direction" do
- expect('.shift-default').to have_rule('margin-left: 8.5298%')
- end
- end
-
- context "with argument (2)" do
- it "shifts element 2 columns in the default direction" do
- expect('.shift-positive').to have_rule('margin-left: 17.05961%')
- end
- end
-
- context "with argument (-3)" do
- it "shifts element 3 columns in the opposite direction" do
- expect('.shift-negative').to have_rule('margin-left: -25.58941%')
- end
- end
-
- context "when nested" do
- it "shifts element relative to its parent" do
- expect('.shifted-parent .shifted-child').to have_rule('margin-left: 34.94305%')
- end
-
- it "resets nesting context" do
- expect('.post-nested-shift').to have_rule('margin-left: 17.05961%')
- end
- end
-
- context "when layout direction changes" do
- it "shifts element in the corresponding direction" do
- expect('section .shift-negative').to have_rule('margin-right: -25.58941%')
- end
- end
-end
diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb
index d6275afc..fbed5955 100644
--- a/spec/spec_helper.rb
+++ b/spec/spec_helper.rb
@@ -1,25 +1,22 @@
-$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
+$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), "..", "lib"))
$LOAD_PATH.unshift(File.dirname(__FILE__))
-require 'rspec'
-require 'neat'
-require 'aruba/api'
-require 'css_parser'
+require "rspec"
+require "neat"
+require "aruba/api"
+require "css_parser"
Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each { |f| require f }
RSpec.configure do |config|
- config.include BourbonSupport
config.include SassSupport
config.include CssParser
config.include ParserSupport
config.include Aruba::Api
config.before(:all) do
- install_bourbon_files
generate_css
end
config.after(:all) do
- remove_bourbon_files
clean_up
end
end
diff --git a/spec/support/bourbon_support.rb b/spec/support/bourbon_support.rb
deleted file mode 100644
index ec980f50..00000000
--- a/spec/support/bourbon_support.rb
+++ /dev/null
@@ -1,9 +0,0 @@
-module BourbonSupport
- def install_bourbon_files
- `bourbon install --path test`
- end
-
- def remove_bourbon_files
- FileUtils.rm_rf('test/bourbon')
- end
-end
diff --git a/spec/support/matchers/be_contained_in.rb b/spec/support/matchers/be_contained_in.rb
index 683b5aae..01a99f96 100644
--- a/spec/support/matchers/be_contained_in.rb
+++ b/spec/support/matchers/be_contained_in.rb
@@ -4,7 +4,7 @@
@query.any?
end
- failure_message_for_should do |actual|
- %{expected selector #{actual} to be contained in #{expected}}
+ failure_message do |actual|
+ %{expected selector #{actual} to be contained in #{expected}}
end
end
diff --git a/spec/support/matchers/have_rule.rb b/spec/support/matchers/have_rule.rb
index e344eb5f..f202f34a 100644
--- a/spec/support/matchers/have_rule.rb
+++ b/spec/support/matchers/have_rule.rb
@@ -1,14 +1,16 @@
RSpec::Matchers.define :have_rule do |expected|
- match do |actual|
- @rules = rules_from_selector(actual)
+ match do |selector|
+ @rules = rules_from_selector(selector)
@rules.include? expected
end
- failure_message_for_should do |actual|
+ failure_message do |selector|
if @rules.empty?
- %{no CSS rules for selector #{actual} were found}
+ %{no CSS for selector #{selector} were found}
else
- %{expected selector #{actual} to have CSS rule "#{expected}"}
+ rules = @rules.join("; ")
+ %{Expected selector #{selector} to have CSS rule "#{expected}".
+ Had "#{rules}".}
end
end
@@ -24,7 +26,7 @@ def rules_from_selector(selector)
def rules(rulesets)
rules = []
rulesets.map do |ruleset|
- ruleset.split(';').each do |rule|
+ ruleset.split(";").each do |rule|
rules << rule.strip
end
end
diff --git a/spec/support/matchers/have_ruleset.rb b/spec/support/matchers/have_ruleset.rb
new file mode 100644
index 00000000..c2218823
--- /dev/null
+++ b/spec/support/matchers/have_ruleset.rb
@@ -0,0 +1,20 @@
+RSpec::Matchers.define :have_ruleset do |expected|
+ match do |selector|
+ @ruleset = rules_from_selector(selector)
+ @ruleset.join("; ") == expected
+ end
+
+ failure_message do |selector|
+ if @ruleset.empty?
+ %{no CSS for selector #{selector} were found}
+ else
+ ruleset = @ruleset.join("; ")
+ %{Expected selector #{selector} to have CSS rule "#{expected}".
+ Had "#{ruleset}".}
+ end
+ end
+
+ def rules_from_selector(selector)
+ ParserSupport.parser.find_by_selector(selector)
+ end
+end
diff --git a/spec/support/matchers/have_value.rb b/spec/support/matchers/have_value.rb
index ee8b56f5..93e14264 100644
--- a/spec/support/matchers/have_value.rb
+++ b/spec/support/matchers/have_value.rb
@@ -1,15 +1,17 @@
RSpec::Matchers.define :have_value do |expected|
- match do |actual|
- selector_id = actual.sub('$','#')
- value_attribute = ParserSupport.parser.find_by_selector(selector_id)[0]
+ match do |variable|
+ selector_class = variable.sub("$", ".")
+ @value_attribute = ParserSupport.parser.find_by_selector(selector_class)[0]
- unless value_attribute.nil?
- actual_value = value_attribute.split(':')[1].strip.sub(';', '')
+ unless @value_attribute.nil?
+ actual_value = @value_attribute.split(":")[1].strip.sub(";", "")
actual_value == expected
end
end
- failure_message_for_should do |actual|
- %{expected variable #{actual} to have value "#{expected}"}
+ failure_message do |variable_name|
+ value_attribute = @value_attribute.to_s
+ %{Expected variable #{variable_name} to have value "#{expected}".
+ Had "#{value_attribute}".}
end
end
diff --git a/spec/support/parser_support.rb b/spec/support/parser_support.rb
index 3f68df42..37b3d063 100644
--- a/spec/support/parser_support.rb
+++ b/spec/support/parser_support.rb
@@ -4,6 +4,13 @@ def self.parser
end
def self.parse_file(identifier)
- self.parser.load_file!("tmp/#{identifier}.css")
+ parser.load_file!("tmp/#{identifier}.css")
+ end
+
+ def self.show_contents(identifier)
+ css_file_contents = File.open("tmp/#{identifier}.css").read
+ css_file_contents.each_line do |line|
+ puts line
+ end
end
end
diff --git a/spec/support/sass_support.rb b/spec/support/sass_support.rb
index afd0f140..c0c6e895 100644
--- a/spec/support/sass_support.rb
+++ b/spec/support/sass_support.rb
@@ -1,10 +1,10 @@
module SassSupport
def generate_css
- _mkdir('tmp')
- `sass -I . --update test:tmp`
+ _mkdir("tmp")
+ `sass -I . --update spec/fixtures:tmp --quiet --precision 5`
end
def clean_up
- FileUtils.rm_rf('tmp')
+ FileUtils.rm_rf("tmp")
end
end
diff --git a/test/_setup.scss b/test/_setup.scss
deleted file mode 100644
index 1da3cbd3..00000000
--- a/test/_setup.scss
+++ /dev/null
@@ -1,4 +0,0 @@
-$border-box-sizing: false;
-
-@import 'bourbon/bourbon';
-@import 'app/assets/stylesheets/neat';
diff --git a/test/media.scss b/test/media.scss
deleted file mode 100644
index 95edab01..00000000
--- a/test/media.scss
+++ /dev/null
@@ -1,39 +0,0 @@
-@import 'setup';
-
-$composite: new-breakpoint(max-width 768px min-width 110px orientation portait 6);
-
-.media-default {
- @include media(481px) {
- color: #000;
- }
-}
-
-.media-max-width {
- @include media(max-width 480px) {
- position: relative;
- }
-}
-
-.media-min-max-width {
- @include media(min-width 320px max-width 480px) {
- position: relative;
- }
-}
-
-.change-media-context {
- @include media(481px, 6) {
- @include span-columns(6);
- }
-}
-
-.change-media-context-shorthand {
- @include media(max-width 480px 6) {
- @include span-columns(6);
- }
-}
-
-.composite-media-query {
- @include media($composite) {
- @include span-columns(6);
- }
-}
diff --git a/test/new-breakpoint.scss b/test/new-breakpoint.scss
deleted file mode 100644
index ed839b4e..00000000
--- a/test/new-breakpoint.scss
+++ /dev/null
@@ -1,13 +0,0 @@
-@import 'setup';
-
-$tablet: new-breakpoint(max-width 768px 12);
-
-.responsive-element {
- @include media($tablet) {
- color: #000;
- }
-}
-
-#visual-grid-breakpoints {
- value: $visual-grid-breakpoints
-}
diff --git a/test/omega.scss b/test/omega.scss
deleted file mode 100644
index 18e79d95..00000000
--- a/test/omega.scss
+++ /dev/null
@@ -1,25 +0,0 @@
-@import 'setup';
-
-.omega-default {
- @include omega;
-}
-
-.omega-nth-default {
- @include omega(4n)
-}
-
-.omega-complex-nth {
- @include omega("4n+1");
-}
-
-section {
- @include row($direction: RTL);
-
- .omega-default-left {
- @include omega;
- }
-
- .omega-nth-default-left {
- @include omega(4n block);
- }
-}
diff --git a/test/outer-container.scss b/test/outer-container.scss
deleted file mode 100644
index 08c83409..00000000
--- a/test/outer-container.scss
+++ /dev/null
@@ -1,7 +0,0 @@
-@import 'setup';
-
-$max-width: 960px;
-
-.container-default {
- @include outer-container;
-}
diff --git a/test/pad.scss b/test/pad.scss
deleted file mode 100644
index d2c90b86..00000000
--- a/test/pad.scss
+++ /dev/null
@@ -1,17 +0,0 @@
-@import 'setup';
-
-.pad-default {
- @include pad;
-}
-
-.pad-explicit {
- @include pad(20px);
-}
-
-.pad-shorthand {
- @include pad(30px 20px 10px 5px);
-}
-
-.pad-shorthand-default {
- @include pad(30px default 10px default);
-}
diff --git a/test/row.scss b/test/row.scss
deleted file mode 100644
index c7675694..00000000
--- a/test/row.scss
+++ /dev/null
@@ -1,26 +0,0 @@
-@import 'setup';
-
-.row-default {
- @include row;
-}
-
-.row-table {
- @include row(table);
-}
-
-.row-invalid-display {
- @include row(invalid-argument);
-}
-
-.row-table-reset {
- @include row(table);
-
- .block-child {
- @include span-columns(4, block);
- @include reset-display;
- }
-}
-
-.no-row {
- @include span-columns(4);
-}
diff --git a/test/shift.scss b/test/shift.scss
deleted file mode 100644
index 64ad5e3e..00000000
--- a/test/shift.scss
+++ /dev/null
@@ -1,36 +0,0 @@
-@import 'setup';
-
-.shift-default {
- @include shift;
-}
-
-.shift-positive {
- @include shift(2);
-}
-
-.shift-negative {
- @include shift(-3);
-}
-
-// Nesting
-.shifted-parent {
- @include span-columns(6);
-
- .shifted-child {
- @include shift(2 of 6);
- }
-}
-
-.post-nested-shift {
- @include shift(2);
-}
-
-// Changing direction
-section {
- @include row($direction: RTL);
-
- .shift-negative {
- @include shift(-3);
- @include reset-layout-direction;
- }
-}
diff --git a/test/span-columns.scss b/test/span-columns.scss
deleted file mode 100644
index 6e82295f..00000000
--- a/test/span-columns.scss
+++ /dev/null
@@ -1,21 +0,0 @@
-@import 'setup';
-
-.span-columns-default {
- @include span-columns(6);
-
- .span-columns-nested {
- @include span-columns(2 of 6);
- }
-}
-
-.span-columns-table {
- @include span-columns(6, table);
-}
-
-.span-columns-collapse {
- @include span-columns(6, block-collapse);
-}
-
-.span-columns-no-display {
- @include span-columns(6, no-display);
-}