react_on_rails 2.3.0 → 3.0.0.beta.1

Sign up to get free protection for your applications and to get access to all the features.
data/lib/generators/USAGE CHANGED
@@ -106,10 +106,10 @@ Then you may run
106
106
 
107
107
  And you will see several useful commands:
108
108
 
109
- node-server-hot
110
- echo 'visit http://localhost:4000' && cd client && npm start
111
- rails-server
112
- echo 'visit http://localhost:3000/hello_world' && foreman start -f Procfile.dev
109
+ express-server
110
+ echo 'visit http://localhost:4000' && cd client && npm start
111
+ rails-server
112
+ echo 'visit http://localhost:3000/hello_world' && foreman start -f Procfile.dev
113
113
 
114
114
  More Details:
115
115
 
@@ -72,7 +72,7 @@ module ReactOnRails
72
72
  GeneratorMessages.messages.each { |message| puts message }
73
73
  end
74
74
 
75
- def invoke_generators # rubocop:disable Metrics/CyclomaticComplexity
75
+ def invoke_generators
76
76
  invoke "react_on_rails:base"
77
77
  invoke "react_on_rails:react_no_redux" unless options.redux?
78
78
  invoke "react_on_rails:react_with_redux" if options.redux?
@@ -6,12 +6,11 @@ require "react_on_rails/configuration"
6
6
  require "react_on_rails/server_rendering_pool"
7
7
  require "react_on_rails/engine"
8
8
  require "react_on_rails/version_syntax_converter"
9
- require "react_on_rails/ensure_assets_compiled"
9
+ require "react_on_rails/test_helper"
10
10
  require "react_on_rails/git_utils"
11
11
  require "react_on_rails/utils"
12
-
13
- module ReactOnRails
14
- def self.configure_rspec_to_compile_assets(config, metatag = :js)
15
- config.before(:example, metatag) { ReactOnRails::EnsureAssetsCompiled.check_built_assets }
16
- end
17
- end
12
+ require "react_on_rails/test_helper"
13
+ require "react_on_rails/test_helper/webpack_assets_compiler"
14
+ require "react_on_rails/test_helper/webpack_assets_status_checker"
15
+ require "react_on_rails/test_helper/webpack_process_checker"
16
+ require "react_on_rails/test_helper/ensure_assets_compiled"
@@ -1,12 +1,17 @@
1
-
2
1
  module ReactOnRails
3
2
  def self.configure
4
3
  yield(configuration)
5
4
  end
6
5
 
6
+ DEFAULT_GENERATED_ASSETS_DIRS = [
7
+ %w(app assets javascripts generated),
8
+ %w(app assets javascripts stylesheets generated)
9
+ ].map { |dirs| File.join(*dirs) }.freeze
10
+
7
11
  def self.configuration
8
12
  @configuration ||= Configuration.new(
9
- server_bundle_js_file: "app/assets/javascripts/generated/server.js",
13
+ generated_assets_dirs: DEFAULT_GENERATED_ASSETS_DIRS,
14
+ server_bundle_js_file: File.join(*%w(app assets javascripts generated server.js)),
10
15
  prerender: false,
11
16
  replay_console: true,
12
17
  logging_on_server: true,
@@ -23,17 +28,18 @@ module ReactOnRails
23
28
  :trace, :development_mode,
24
29
  :logging_on_server, :server_renderer_pool_size,
25
30
  :server_renderer_timeout, :raise_on_prerender_error,
26
- :skip_display_none
31
+ :skip_display_none, :generated_assets_dirs
27
32
 
28
33
  def initialize(server_bundle_js_file: nil, prerender: nil, replay_console: nil,
29
34
  trace: nil, development_mode: nil,
30
35
  logging_on_server: nil, server_renderer_pool_size: nil,
31
36
  server_renderer_timeout: nil, raise_on_prerender_error: nil,
32
- skip_display_none: nil)
37
+ skip_display_none: nil, generated_assets_dirs: DEFAULT_GENERATED_ASSETS_DIRS)
33
38
  self.server_bundle_js_file = if File.exist?(server_bundle_js_file)
34
39
  server_bundle_js_file
35
40
  end
36
41
 
42
+ self.generated_assets_dirs = generated_assets_dirs
37
43
  self.prerender = prerender
38
44
  self.replay_console = replay_console
39
45
  self.logging_on_server = logging_on_server
@@ -0,0 +1,67 @@
1
+ module ReactOnRails
2
+ module TestHelper
3
+ # Because you will probably want to run RSpec tests that rely on compiled webpack assets
4
+ # (typically, your integration/feature specs where `js: true`), you will want to ensure you
5
+ # don't accidentally run tests on missing or stale webpack assets. If you did use stale
6
+ # Webpack assets, you will get invalid test results as your tests do not use the very latest
7
+ # JavaScript code.
8
+ #
9
+ # Call this method from inside of the `RSpec.configure` block in your `spec/rails_helper.rb`
10
+ # file, passing the config as an argument. You can customize this to your particular needs by
11
+ # replacing any of the default components.
12
+ #
13
+ # RSpec.configure do |config|
14
+ # ReactOnRails::TestHelper.configure_rspec_to_compile_assets(config)
15
+ #
16
+ # You can pass an RSpec metatag as an optional second parameter to this helper method
17
+ # if you want this helper to run on examples other than where `js: true` (default). The helper
18
+ # will compile webpack files at most once per test run.
19
+ #
20
+ # If you do not want to be slowed down by re-compiling webpack assets from scratch every test
21
+ # run, you can call `npm run build:client` (and `npm run build:server` if doing server
22
+ # rendering) to have webpack recompile these files in the background, which will be *much*
23
+ # faster. The helper looks for these processes and will abort recompiling if it finds them
24
+ # to be running.
25
+ #
26
+ # See docs/additional_reading/rspec_configuration.md for more info
27
+ def self.configure_rspec_to_compile_assets(config, metatag = :js)
28
+ config.before(:example, metatag) { ReactOnRails::TestHelper.ensure_assets_compiled }
29
+ end
30
+
31
+ # Main entry point to ensuring assets are compiled. See `configure_rspec_to_compile_assets` for
32
+ # an example of usage.
33
+ #
34
+ # Typical usage passes all params as nil defaults.
35
+ # webpack_assets_status_checker: provide: `up_to_date?`, `whats_not_up_to_date`, `client_dir`
36
+ # defaults to ReactOnRails::TestHelper::WebpackAssetsStatusChecker
37
+ # webpack_process_checker: provide one method: `def running?`
38
+ # defaults to ReactOnRails::TestHelper::WebpackProcessChecker
39
+ # webpack_assets_compiler: provide one method: `def compile`
40
+ # defaults to ReactOnRails::TestHelper::WebpackAssetsCompiler
41
+ # client_dir and compiled_dirs are passed into the default webpack_assets_status_checker if you
42
+ # don't provide one.
43
+ def self.ensure_assets_compiled(webpack_assets_status_checker: nil,
44
+ webpack_assets_compiler: nil,
45
+ webpack_process_checker: nil,
46
+ client_dir: nil,
47
+ compiled_dirs: nil)
48
+
49
+ if webpack_assets_status_checker.nil?
50
+ client_dir ||= Rails.root.join("client")
51
+ compiled_dirs ||= ReactOnRails.configuration.generated_assets_dirs
52
+ webpack_assets_status_checker ||=
53
+ WebpackAssetsStatusChecker.new(client_dir: client_dir,
54
+ compiled_dirs: compiled_dirs)
55
+ end
56
+
57
+ webpack_assets_compiler ||= WebpackAssetsCompiler.new
58
+ webpack_process_checker ||= WebpackProcessChecker.new
59
+
60
+ ReactOnRails::TestHelper::EnsureAssetsCompiled.new(
61
+ webpack_assets_status_checker: webpack_assets_status_checker,
62
+ webpack_assets_compiler: webpack_assets_compiler,
63
+ webpack_process_checker: webpack_process_checker
64
+ ).call
65
+ end
66
+ end
67
+ end
@@ -0,0 +1,73 @@
1
+ module ReactOnRails
2
+ module TestHelper
3
+ class EnsureAssetsCompiled
4
+ class << self
5
+ attr_accessor :has_been_run
6
+ @has_been_run = false
7
+ end
8
+
9
+ attr_reader :webpack_assets_status_checker,
10
+ :webpack_assets_compiler,
11
+ :webpack_process_checker
12
+
13
+ MAX_TIME_TO_WAIT = 5
14
+
15
+ def initialize(webpack_assets_status_checker: nil,
16
+ webpack_assets_compiler: nil,
17
+ webpack_process_checker: nil)
18
+ @webpack_assets_status_checker = webpack_assets_status_checker
19
+ @webpack_assets_compiler = webpack_assets_compiler
20
+ @webpack_process_checker = webpack_process_checker
21
+ end
22
+
23
+ def call
24
+ return if self.class.has_been_run
25
+
26
+ loop_count = 0
27
+ loop do
28
+ break if webpack_assets_status_checker.up_to_date?
29
+
30
+ puts_first_iteration_message(loop_count)
31
+
32
+ if webpack_process_checker.running? && loop_count < MAX_TIME_TO_WAIT
33
+ loop_count += 1
34
+ sleep 1
35
+ else
36
+ puts_max_iterations_message(loop_count)
37
+
38
+ webpack_assets_compiler.compile
39
+ puts
40
+ break
41
+ end
42
+ end
43
+
44
+ self.class.has_been_run = true
45
+ end
46
+
47
+ def puts_first_iteration_message(loop_count)
48
+ return unless loop_count == 0
49
+
50
+ puts "\n\nReact on Rails is ensuring your JavaScript generated files are up to date!"
51
+ end
52
+
53
+ def puts_max_iterations_message(loop_count)
54
+ if loop_count == MAX_TIME_TO_WAIT
55
+ stale_files = webpack_assets_status_checker.whats_not_up_to_date.join("\n")
56
+
57
+ puts <<-MSG
58
+
59
+ Even though we detected the webpack watch processes are running, we found files modified that are
60
+ not causing a rebuild of your generated files:
61
+
62
+ #{stale_files}
63
+
64
+ One possibility is that you modified a file in your directory that is not a dependency of
65
+ your webpack files: #{webpack_assets_status_checker.client_dir}
66
+
67
+ To be sure, we will now rebuild your generated files.
68
+ MSG
69
+ end
70
+ end
71
+ end
72
+ end
73
+ end
@@ -0,0 +1,33 @@
1
+ # You can replace this implementation with your own for use by the
2
+ # ReactOnRails::TestHelper.ensure_assets_compiled helper
3
+ module ReactOnRails
4
+ module TestHelper
5
+ class WebpackAssetsCompiler
6
+ def compile
7
+ compile_type(:client)
8
+ compile_type(:server) if Utils.server_rendering_is_enabled?
9
+ end
10
+
11
+ private
12
+
13
+ def compile_type(type)
14
+ unless @printed_msg
15
+ puts <<-MSG
16
+ If you are frequently running tests, you can run webpack in watch mode to speed up this process.
17
+ See the official documentation:
18
+ https://github.com/shakacode/react_on_rails/blob/master/docs/additional_reading/rspec_configuration.md
19
+ MSG
20
+ @printed_msg = true
21
+ end
22
+
23
+ puts "\nBuilding Webpack #{type}-rendering assets..."
24
+
25
+ build_output = `cd client && npm run build:#{type}`
26
+
27
+ fail "Error in building assets!\n#{build_output}" unless Utils.last_process_completed_successfully?
28
+
29
+ puts "Completed building Webpack #{type}-rendering assets."
30
+ end
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,76 @@
1
+ require "rake"
2
+ require "fileutils"
3
+
4
+ # You can replace this implementation with your own for use by the
5
+ # ReactOnRails::TestHelper.ensure_assets_compiled helper
6
+ module ReactOnRails
7
+ module TestHelper
8
+ class WebpackAssetsStatusChecker
9
+ attr_reader :client_dir, :compiled_dirs
10
+
11
+ def initialize(args = {})
12
+ @compiled_dirs = args.fetch(:compiled_dirs)
13
+ @client_dir = args.fetch(:client_dir)
14
+ @last_stale_files = ""
15
+ end
16
+
17
+ def up_to_date?
18
+ # binding.pry
19
+ return false unless assets_exist?
20
+ all_compiled_assets.all? do |asset|
21
+ FileUtils.uptodate?(asset, client_files)
22
+ end
23
+ end
24
+
25
+ def whats_not_up_to_date
26
+ return [] unless assets_exist?
27
+ result = []
28
+ all_compiled_assets.all? do |asset|
29
+ result += whats_not_up_to_date_worker(asset, client_files)
30
+ end
31
+ result.uniq
32
+ end
33
+
34
+ private
35
+
36
+ def whats_not_up_to_date_worker(new, old_list)
37
+ # derived from lib/ruby/2.2.0/fileutils.rb:147
38
+ not_up_to_date = []
39
+ new_time = File.mtime(new)
40
+ old_list.each do |old|
41
+ if File.exist?(old)
42
+ not_up_to_date << old unless new_time > File.mtime(old)
43
+ end
44
+ end
45
+ not_up_to_date
46
+ end
47
+
48
+ def all_compiled_assets
49
+ make_file_list(make_globs(compiled_dirs)).to_ary
50
+ end
51
+
52
+ def client_files
53
+ @client_files ||= make_file_list(make_globs(client_dir)).to_ary
54
+ end
55
+
56
+ def make_globs(dirs)
57
+ Array(dirs).map { |dir| File.join(dir, "**", "*") }
58
+ end
59
+
60
+ def assets_exist?
61
+ all_compiled_assets.to_ary.size > 0
62
+ end
63
+
64
+ def make_file_list(glob)
65
+ FileList.new(glob) do |fl|
66
+ fl.exclude(%r{/node_modules/})
67
+ fl.exclude(".DS_Store")
68
+ fl.exclude(".keep")
69
+ fl.exclude("thumbs.db")
70
+ fl.exclude(".")
71
+ fl.exclude("..")
72
+ end
73
+ end
74
+ end
75
+ end
76
+ end
@@ -0,0 +1,50 @@
1
+ # You can replace this implementation with your own for use by the
2
+ # ReactOnRails::TestHelper.ensure_assets_compiled helper
3
+ module ReactOnRails
4
+ module TestHelper
5
+ class WebpackProcessChecker
6
+ def initialize
7
+ @printed_once = {}
8
+ end
9
+
10
+ def running?
11
+ client_running = check_running_for_type("client")
12
+ return client_running unless Utils.server_rendering_is_enabled?
13
+
14
+ server_running = check_running_for_type("server")
15
+ fail_if_only_running_for_one_type(client_running, server_running)
16
+
17
+ client_running && server_running
18
+ end
19
+
20
+ private
21
+
22
+ # We only want to do this if server rendering is enabled.
23
+ def fail_if_only_running_for_one_type(client_running, server_running)
24
+ return unless client_running ^ server_running
25
+ fail "\n\nError: detected webpack is not running for both types of assets:\n"\
26
+ "***Webpack Client Process Running?: #{client_running}\n"\
27
+ "***Webpack Server Process Running?: #{server_running}"
28
+ end
29
+
30
+ def check_running_for_type(type)
31
+ type = type.to_sym
32
+
33
+ response = `pgrep -fl 'bin/webpack\s(\\-w|\\-\\-watch)\s\\-\\-config\s.*#{type}.*\\.js'`
34
+ is_running = Utils.last_process_completed_successfully?
35
+
36
+ if is_running
37
+ if @printed_once.empty?
38
+ puts "\nDetected Webpack processes running to rebuild your generated files:"
39
+ end
40
+ unless @printed_once[type]
41
+ puts "#{type}: #{response}"
42
+ @printed_once[type] = true
43
+ end
44
+ end
45
+
46
+ is_running
47
+ end
48
+ end
49
+ end
50
+ end
@@ -1,7 +1,17 @@
1
+ require "English"
2
+
1
3
  module ReactOnRails
2
4
  module Utils
3
5
  def self.object_to_boolean(value)
4
6
  [true, "true", "yes", 1, "1", "t"].include?(value.class == String ? value.downcase : value)
5
7
  end
8
+
9
+ def self.server_rendering_is_enabled?
10
+ ReactOnRails.configuration.server_bundle_js_file.present?
11
+ end
12
+
13
+ def self.last_process_completed_successfully?
14
+ $CHILD_STATUS.exitstatus == 0
15
+ end
6
16
  end
7
17
  end
@@ -1,4 +1,4 @@
1
1
  # frozen_string_literal: true
2
2
  module ReactOnRails
3
- VERSION = "2.3.0".freeze
3
+ VERSION = "3.0.0.beta.1".freeze
4
4
  end
data/npm-shrinkwrap.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "react-on-rails",
3
- "version": "2.2.0",
3
+ "version": "2.3.0",
4
4
  "dependencies": {
5
5
  "abab": {
6
6
  "version": "1.0.3",
@@ -1960,6 +1960,678 @@
1960
1960
  "from": "fs-readdir-recursive@>=0.1.0 <0.2.0",
1961
1961
  "resolved": "https://registry.npmjs.org/fs-readdir-recursive/-/fs-readdir-recursive-0.1.2.tgz"
1962
1962
  },
1963
+ "fsevents": {
1964
+ "version": "1.0.7",
1965
+ "from": "fsevents@>=1.0.0 <2.0.0",
1966
+ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.0.7.tgz",
1967
+ "dependencies": {
1968
+ "ansi": {
1969
+ "version": "0.3.0",
1970
+ "from": "ansi@~0.3.0",
1971
+ "resolved": "https://registry.npmjs.org/ansi/-/ansi-0.3.0.tgz"
1972
+ },
1973
+ "ansi-regex": {
1974
+ "version": "2.0.0",
1975
+ "from": "ansi-regex@^2.0.0",
1976
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.0.0.tgz"
1977
+ },
1978
+ "ansi-styles": {
1979
+ "version": "2.1.0",
1980
+ "from": "ansi-styles@^2.1.0",
1981
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.1.0.tgz"
1982
+ },
1983
+ "are-we-there-yet": {
1984
+ "version": "1.0.5",
1985
+ "from": "are-we-there-yet@~1.0.0",
1986
+ "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.0.5.tgz"
1987
+ },
1988
+ "asn1": {
1989
+ "version": "0.2.3",
1990
+ "from": "asn1@>=0.2.3 <0.3.0",
1991
+ "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz"
1992
+ },
1993
+ "assert-plus": {
1994
+ "version": "0.1.5",
1995
+ "from": "assert-plus@^0.1.5",
1996
+ "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.1.5.tgz"
1997
+ },
1998
+ "async": {
1999
+ "version": "1.5.1",
2000
+ "from": "async@^1.4.0",
2001
+ "resolved": "https://registry.npmjs.org/async/-/async-1.5.1.tgz"
2002
+ },
2003
+ "aws-sign2": {
2004
+ "version": "0.6.0",
2005
+ "from": "aws-sign2@~0.6.0",
2006
+ "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.6.0.tgz"
2007
+ },
2008
+ "bl": {
2009
+ "version": "1.0.0",
2010
+ "from": "bl@~1.0.0",
2011
+ "resolved": "https://registry.npmjs.org/bl/-/bl-1.0.0.tgz"
2012
+ },
2013
+ "block-stream": {
2014
+ "version": "0.0.8",
2015
+ "from": "block-stream@*",
2016
+ "resolved": "https://registry.npmjs.org/block-stream/-/block-stream-0.0.8.tgz"
2017
+ },
2018
+ "boom": {
2019
+ "version": "2.10.1",
2020
+ "from": "boom@2.x.x",
2021
+ "resolved": "https://registry.npmjs.org/boom/-/boom-2.10.1.tgz"
2022
+ },
2023
+ "caseless": {
2024
+ "version": "0.11.0",
2025
+ "from": "caseless@~0.11.0",
2026
+ "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.11.0.tgz"
2027
+ },
2028
+ "chalk": {
2029
+ "version": "1.1.1",
2030
+ "from": "chalk@^1.1.1",
2031
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.1.tgz"
2032
+ },
2033
+ "combined-stream": {
2034
+ "version": "1.0.5",
2035
+ "from": "combined-stream@~1.0.5",
2036
+ "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.5.tgz"
2037
+ },
2038
+ "commander": {
2039
+ "version": "2.9.0",
2040
+ "from": "commander@^2.9.0",
2041
+ "resolved": "https://registry.npmjs.org/commander/-/commander-2.9.0.tgz"
2042
+ },
2043
+ "core-util-is": {
2044
+ "version": "1.0.2",
2045
+ "from": "core-util-is@~1.0.0",
2046
+ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz"
2047
+ },
2048
+ "cryptiles": {
2049
+ "version": "2.0.5",
2050
+ "from": "cryptiles@2.x.x",
2051
+ "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-2.0.5.tgz"
2052
+ },
2053
+ "dashdash": {
2054
+ "version": "1.11.0",
2055
+ "from": "dashdash@>=1.10.1 <2.0.0",
2056
+ "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.11.0.tgz"
2057
+ },
2058
+ "debug": {
2059
+ "version": "0.7.4",
2060
+ "from": "debug@~0.7.2",
2061
+ "resolved": "https://registry.npmjs.org/debug/-/debug-0.7.4.tgz"
2062
+ },
2063
+ "deep-extend": {
2064
+ "version": "0.4.0",
2065
+ "from": "deep-extend@~0.4.0",
2066
+ "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.4.0.tgz"
2067
+ },
2068
+ "delayed-stream": {
2069
+ "version": "1.0.0",
2070
+ "from": "delayed-stream@~1.0.0",
2071
+ "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz"
2072
+ },
2073
+ "delegates": {
2074
+ "version": "0.1.0",
2075
+ "from": "delegates@^0.1.0",
2076
+ "resolved": "https://registry.npmjs.org/delegates/-/delegates-0.1.0.tgz"
2077
+ },
2078
+ "ecc-jsbn": {
2079
+ "version": "0.1.1",
2080
+ "from": "ecc-jsbn@>=0.0.1 <1.0.0",
2081
+ "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz"
2082
+ },
2083
+ "escape-string-regexp": {
2084
+ "version": "1.0.4",
2085
+ "from": "escape-string-regexp@^1.0.2",
2086
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.4.tgz"
2087
+ },
2088
+ "extend": {
2089
+ "version": "3.0.0",
2090
+ "from": "extend@~3.0.0",
2091
+ "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.0.tgz"
2092
+ },
2093
+ "extsprintf": {
2094
+ "version": "1.0.2",
2095
+ "from": "extsprintf@1.0.2",
2096
+ "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.0.2.tgz"
2097
+ },
2098
+ "forever-agent": {
2099
+ "version": "0.6.1",
2100
+ "from": "forever-agent@~0.6.1",
2101
+ "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz"
2102
+ },
2103
+ "form-data": {
2104
+ "version": "1.0.0-rc3",
2105
+ "from": "form-data@~1.0.0-rc3",
2106
+ "resolved": "https://registry.npmjs.org/form-data/-/form-data-1.0.0-rc3.tgz"
2107
+ },
2108
+ "fstream": {
2109
+ "version": "1.0.8",
2110
+ "from": "fstream@^1.0.2",
2111
+ "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.8.tgz"
2112
+ },
2113
+ "fstream-ignore": {
2114
+ "version": "1.0.3",
2115
+ "from": "fstream-ignore@~1.0.3",
2116
+ "resolved": "https://registry.npmjs.org/fstream-ignore/-/fstream-ignore-1.0.3.tgz",
2117
+ "dependencies": {
2118
+ "minimatch": {
2119
+ "version": "3.0.0",
2120
+ "from": "minimatch@^3.0.0",
2121
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.0.tgz",
2122
+ "dependencies": {
2123
+ "brace-expansion": {
2124
+ "version": "1.1.2",
2125
+ "from": "brace-expansion@^1.0.0",
2126
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.2.tgz",
2127
+ "dependencies": {
2128
+ "balanced-match": {
2129
+ "version": "0.3.0",
2130
+ "from": "balanced-match@^0.3.0",
2131
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.3.0.tgz"
2132
+ },
2133
+ "concat-map": {
2134
+ "version": "0.0.1",
2135
+ "from": "concat-map@0.0.1",
2136
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz"
2137
+ }
2138
+ }
2139
+ }
2140
+ }
2141
+ }
2142
+ }
2143
+ },
2144
+ "gauge": {
2145
+ "version": "1.2.2",
2146
+ "from": "gauge@~1.2.0",
2147
+ "resolved": "https://registry.npmjs.org/gauge/-/gauge-1.2.2.tgz"
2148
+ },
2149
+ "generate-function": {
2150
+ "version": "2.0.0",
2151
+ "from": "generate-function@^2.0.0",
2152
+ "resolved": "https://registry.npmjs.org/generate-function/-/generate-function-2.0.0.tgz"
2153
+ },
2154
+ "generate-object-property": {
2155
+ "version": "1.2.0",
2156
+ "from": "generate-object-property@^1.1.0",
2157
+ "resolved": "https://registry.npmjs.org/generate-object-property/-/generate-object-property-1.2.0.tgz"
2158
+ },
2159
+ "graceful-fs": {
2160
+ "version": "4.1.2",
2161
+ "from": "graceful-fs@^4.1.2",
2162
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.2.tgz"
2163
+ },
2164
+ "graceful-readlink": {
2165
+ "version": "1.0.1",
2166
+ "from": "graceful-readlink@>= 1.0.0",
2167
+ "resolved": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz"
2168
+ },
2169
+ "har-validator": {
2170
+ "version": "2.0.3",
2171
+ "from": "har-validator@~2.0.2",
2172
+ "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-2.0.3.tgz"
2173
+ },
2174
+ "has-ansi": {
2175
+ "version": "2.0.0",
2176
+ "from": "has-ansi@^2.0.0",
2177
+ "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz"
2178
+ },
2179
+ "has-unicode": {
2180
+ "version": "1.0.1",
2181
+ "from": "has-unicode@^1.0.0",
2182
+ "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-1.0.1.tgz"
2183
+ },
2184
+ "hawk": {
2185
+ "version": "3.1.2",
2186
+ "from": "hawk@~3.1.0",
2187
+ "resolved": "https://registry.npmjs.org/hawk/-/hawk-3.1.2.tgz"
2188
+ },
2189
+ "hoek": {
2190
+ "version": "2.16.3",
2191
+ "from": "hoek@2.x.x",
2192
+ "resolved": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz"
2193
+ },
2194
+ "http-signature": {
2195
+ "version": "1.1.0",
2196
+ "from": "http-signature@~1.1.0",
2197
+ "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.1.0.tgz"
2198
+ },
2199
+ "inherits": {
2200
+ "version": "2.0.1",
2201
+ "from": "inherits@*",
2202
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz"
2203
+ },
2204
+ "ini": {
2205
+ "version": "1.3.4",
2206
+ "from": "ini@~1.3.0",
2207
+ "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.4.tgz"
2208
+ },
2209
+ "is-my-json-valid": {
2210
+ "version": "2.12.3",
2211
+ "from": "is-my-json-valid@^2.12.3",
2212
+ "resolved": "https://registry.npmjs.org/is-my-json-valid/-/is-my-json-valid-2.12.3.tgz"
2213
+ },
2214
+ "is-property": {
2215
+ "version": "1.0.2",
2216
+ "from": "is-property@^1.0.0",
2217
+ "resolved": "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz"
2218
+ },
2219
+ "is-typedarray": {
2220
+ "version": "1.0.0",
2221
+ "from": "is-typedarray@~1.0.0",
2222
+ "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz"
2223
+ },
2224
+ "isarray": {
2225
+ "version": "0.0.1",
2226
+ "from": "isarray@0.0.1",
2227
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz"
2228
+ },
2229
+ "isstream": {
2230
+ "version": "0.1.2",
2231
+ "from": "isstream@~0.1.2",
2232
+ "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz"
2233
+ },
2234
+ "jodid25519": {
2235
+ "version": "1.0.2",
2236
+ "from": "jodid25519@>=1.0.0 <2.0.0",
2237
+ "resolved": "https://registry.npmjs.org/jodid25519/-/jodid25519-1.0.2.tgz"
2238
+ },
2239
+ "jsbn": {
2240
+ "version": "0.1.0",
2241
+ "from": "jsbn@>=0.1.0 <0.2.0",
2242
+ "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.0.tgz"
2243
+ },
2244
+ "json-schema": {
2245
+ "version": "0.2.2",
2246
+ "from": "json-schema@0.2.2",
2247
+ "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.2.tgz"
2248
+ },
2249
+ "json-stringify-safe": {
2250
+ "version": "5.0.1",
2251
+ "from": "json-stringify-safe@~5.0.1",
2252
+ "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz"
2253
+ },
2254
+ "jsonpointer": {
2255
+ "version": "2.0.0",
2256
+ "from": "jsonpointer@2.0.0",
2257
+ "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-2.0.0.tgz"
2258
+ },
2259
+ "jsprim": {
2260
+ "version": "1.2.2",
2261
+ "from": "jsprim@^1.2.2",
2262
+ "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.2.2.tgz"
2263
+ },
2264
+ "lodash._basetostring": {
2265
+ "version": "3.0.1",
2266
+ "from": "lodash._basetostring@^3.0.0",
2267
+ "resolved": "https://registry.npmjs.org/lodash._basetostring/-/lodash._basetostring-3.0.1.tgz"
2268
+ },
2269
+ "lodash._createpadding": {
2270
+ "version": "3.6.1",
2271
+ "from": "lodash._createpadding@^3.0.0",
2272
+ "resolved": "https://registry.npmjs.org/lodash._createpadding/-/lodash._createpadding-3.6.1.tgz"
2273
+ },
2274
+ "lodash.pad": {
2275
+ "version": "3.1.1",
2276
+ "from": "lodash.pad@^3.0.0",
2277
+ "resolved": "https://registry.npmjs.org/lodash.pad/-/lodash.pad-3.1.1.tgz"
2278
+ },
2279
+ "lodash.padleft": {
2280
+ "version": "3.1.1",
2281
+ "from": "lodash.padleft@^3.0.0",
2282
+ "resolved": "https://registry.npmjs.org/lodash.padleft/-/lodash.padleft-3.1.1.tgz"
2283
+ },
2284
+ "lodash.padright": {
2285
+ "version": "3.1.1",
2286
+ "from": "lodash.padright@^3.0.0",
2287
+ "resolved": "https://registry.npmjs.org/lodash.padright/-/lodash.padright-3.1.1.tgz"
2288
+ },
2289
+ "lodash.repeat": {
2290
+ "version": "3.0.1",
2291
+ "from": "lodash.repeat@^3.0.0",
2292
+ "resolved": "https://registry.npmjs.org/lodash.repeat/-/lodash.repeat-3.0.1.tgz"
2293
+ },
2294
+ "mime-db": {
2295
+ "version": "1.21.0",
2296
+ "from": "mime-db@~1.21.0",
2297
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.21.0.tgz"
2298
+ },
2299
+ "mime-types": {
2300
+ "version": "2.1.9",
2301
+ "from": "mime-types@~2.1.7",
2302
+ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.9.tgz"
2303
+ },
2304
+ "minimist": {
2305
+ "version": "0.0.8",
2306
+ "from": "minimist@0.0.8",
2307
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz"
2308
+ },
2309
+ "mkdirp": {
2310
+ "version": "0.5.1",
2311
+ "from": "mkdirp@>=0.3.0 <0.4.0||>=0.4.0 <0.5.0||>=0.5.0 <0.6.0",
2312
+ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz"
2313
+ },
2314
+ "node-pre-gyp": {
2315
+ "version": "0.6.19",
2316
+ "from": "node-pre-gyp@>=0.6.17 <0.7.0",
2317
+ "resolved": "https://registry.npmjs.org/node-pre-gyp/-/node-pre-gyp-0.6.19.tgz",
2318
+ "dependencies": {
2319
+ "nopt": {
2320
+ "version": "3.0.6",
2321
+ "from": "nopt@~3.0.1",
2322
+ "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz",
2323
+ "dependencies": {
2324
+ "abbrev": {
2325
+ "version": "1.0.7",
2326
+ "from": "abbrev@1",
2327
+ "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.0.7.tgz"
2328
+ }
2329
+ }
2330
+ }
2331
+ }
2332
+ },
2333
+ "node-uuid": {
2334
+ "version": "1.4.7",
2335
+ "from": "node-uuid@~1.4.7",
2336
+ "resolved": "https://registry.npmjs.org/node-uuid/-/node-uuid-1.4.7.tgz"
2337
+ },
2338
+ "npmlog": {
2339
+ "version": "2.0.0",
2340
+ "from": "npmlog@~2.0.0",
2341
+ "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-2.0.0.tgz"
2342
+ },
2343
+ "oauth-sign": {
2344
+ "version": "0.8.0",
2345
+ "from": "oauth-sign@~0.8.0",
2346
+ "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.0.tgz"
2347
+ },
2348
+ "once": {
2349
+ "version": "1.1.1",
2350
+ "from": "once@~1.1.1",
2351
+ "resolved": "https://registry.npmjs.org/once/-/once-1.1.1.tgz"
2352
+ },
2353
+ "pinkie": {
2354
+ "version": "2.0.1",
2355
+ "from": "pinkie@^2.0.0",
2356
+ "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.1.tgz"
2357
+ },
2358
+ "pinkie-promise": {
2359
+ "version": "2.0.0",
2360
+ "from": "pinkie-promise@^2.0.0",
2361
+ "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.0.tgz"
2362
+ },
2363
+ "process-nextick-args": {
2364
+ "version": "1.0.6",
2365
+ "from": "process-nextick-args@~1.0.6",
2366
+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.6.tgz"
2367
+ },
2368
+ "qs": {
2369
+ "version": "5.2.0",
2370
+ "from": "qs@~5.2.0",
2371
+ "resolved": "https://registry.npmjs.org/qs/-/qs-5.2.0.tgz"
2372
+ },
2373
+ "rc": {
2374
+ "version": "1.1.6",
2375
+ "from": "rc@~1.1.0",
2376
+ "resolved": "https://registry.npmjs.org/rc/-/rc-1.1.6.tgz",
2377
+ "dependencies": {
2378
+ "minimist": {
2379
+ "version": "1.2.0",
2380
+ "from": "minimist@^1.2.0",
2381
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz"
2382
+ }
2383
+ }
2384
+ },
2385
+ "readable-stream": {
2386
+ "version": "2.0.5",
2387
+ "from": "readable-stream@^2.0.0 || ^1.1.13",
2388
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.0.5.tgz"
2389
+ },
2390
+ "request": {
2391
+ "version": "2.67.0",
2392
+ "from": "request@2.x",
2393
+ "resolved": "https://registry.npmjs.org/request/-/request-2.67.0.tgz"
2394
+ },
2395
+ "rimraf": {
2396
+ "version": "2.5.0",
2397
+ "from": "rimraf@~2.5.0",
2398
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.5.0.tgz",
2399
+ "dependencies": {
2400
+ "glob": {
2401
+ "version": "6.0.3",
2402
+ "from": "glob@^6.0.1",
2403
+ "resolved": "https://registry.npmjs.org/glob/-/glob-6.0.3.tgz",
2404
+ "dependencies": {
2405
+ "inflight": {
2406
+ "version": "1.0.4",
2407
+ "from": "inflight@^1.0.4",
2408
+ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.4.tgz",
2409
+ "dependencies": {
2410
+ "wrappy": {
2411
+ "version": "1.0.1",
2412
+ "from": "wrappy@1",
2413
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.1.tgz"
2414
+ }
2415
+ }
2416
+ },
2417
+ "inherits": {
2418
+ "version": "2.0.1",
2419
+ "from": "inherits@~2.0.0",
2420
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz"
2421
+ },
2422
+ "minimatch": {
2423
+ "version": "3.0.0",
2424
+ "from": "minimatch@2 || 3",
2425
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.0.tgz",
2426
+ "dependencies": {
2427
+ "brace-expansion": {
2428
+ "version": "1.1.2",
2429
+ "from": "brace-expansion@^1.0.0",
2430
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.2.tgz",
2431
+ "dependencies": {
2432
+ "balanced-match": {
2433
+ "version": "0.3.0",
2434
+ "from": "balanced-match@^0.3.0",
2435
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.3.0.tgz"
2436
+ },
2437
+ "concat-map": {
2438
+ "version": "0.0.1",
2439
+ "from": "concat-map@0.0.1",
2440
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz"
2441
+ }
2442
+ }
2443
+ }
2444
+ }
2445
+ },
2446
+ "once": {
2447
+ "version": "1.3.3",
2448
+ "from": "once@^1.3.0",
2449
+ "resolved": "https://registry.npmjs.org/once/-/once-1.3.3.tgz",
2450
+ "dependencies": {
2451
+ "wrappy": {
2452
+ "version": "1.0.1",
2453
+ "from": "wrappy@1",
2454
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.1.tgz"
2455
+ }
2456
+ }
2457
+ },
2458
+ "path-is-absolute": {
2459
+ "version": "1.0.0",
2460
+ "from": "path-is-absolute@^1.0.0",
2461
+ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.0.tgz"
2462
+ }
2463
+ }
2464
+ }
2465
+ }
2466
+ },
2467
+ "semver": {
2468
+ "version": "5.1.0",
2469
+ "from": "semver@~5.1.0",
2470
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.1.0.tgz"
2471
+ },
2472
+ "sntp": {
2473
+ "version": "1.0.9",
2474
+ "from": "sntp@1.x.x",
2475
+ "resolved": "https://registry.npmjs.org/sntp/-/sntp-1.0.9.tgz"
2476
+ },
2477
+ "sshpk": {
2478
+ "version": "1.7.2",
2479
+ "from": "sshpk@^1.7.0",
2480
+ "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.7.2.tgz",
2481
+ "dependencies": {
2482
+ "assert-plus": {
2483
+ "version": "0.2.0",
2484
+ "from": "assert-plus@>=0.2.0 <0.3.0",
2485
+ "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.2.0.tgz"
2486
+ }
2487
+ }
2488
+ },
2489
+ "string_decoder": {
2490
+ "version": "0.10.31",
2491
+ "from": "string_decoder@~0.10.x",
2492
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz"
2493
+ },
2494
+ "stringstream": {
2495
+ "version": "0.0.5",
2496
+ "from": "stringstream@~0.0.4",
2497
+ "resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.5.tgz"
2498
+ },
2499
+ "strip-ansi": {
2500
+ "version": "3.0.0",
2501
+ "from": "strip-ansi@^3.0.0",
2502
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.0.tgz"
2503
+ },
2504
+ "strip-json-comments": {
2505
+ "version": "1.0.4",
2506
+ "from": "strip-json-comments@~1.0.4",
2507
+ "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-1.0.4.tgz"
2508
+ },
2509
+ "supports-color": {
2510
+ "version": "2.0.0",
2511
+ "from": "supports-color@^2.0.0",
2512
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz"
2513
+ },
2514
+ "tar": {
2515
+ "version": "2.2.1",
2516
+ "from": "tar@~2.2.0",
2517
+ "resolved": "https://registry.npmjs.org/tar/-/tar-2.2.1.tgz"
2518
+ },
2519
+ "tar-pack": {
2520
+ "version": "3.1.2",
2521
+ "from": "tar-pack@~3.1.0",
2522
+ "resolved": "https://registry.npmjs.org/tar-pack/-/tar-pack-3.1.2.tgz",
2523
+ "dependencies": {
2524
+ "rimraf": {
2525
+ "version": "2.4.5",
2526
+ "from": "rimraf@~2.4.4",
2527
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.4.5.tgz",
2528
+ "dependencies": {
2529
+ "glob": {
2530
+ "version": "6.0.3",
2531
+ "from": "glob@^6.0.1",
2532
+ "resolved": "https://registry.npmjs.org/glob/-/glob-6.0.3.tgz",
2533
+ "dependencies": {
2534
+ "inflight": {
2535
+ "version": "1.0.4",
2536
+ "from": "inflight@^1.0.4",
2537
+ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.4.tgz",
2538
+ "dependencies": {
2539
+ "wrappy": {
2540
+ "version": "1.0.1",
2541
+ "from": "wrappy@1",
2542
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.1.tgz"
2543
+ }
2544
+ }
2545
+ },
2546
+ "inherits": {
2547
+ "version": "2.0.1",
2548
+ "from": "inherits@2",
2549
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz"
2550
+ },
2551
+ "minimatch": {
2552
+ "version": "3.0.0",
2553
+ "from": "minimatch@2 || 3",
2554
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.0.tgz",
2555
+ "dependencies": {
2556
+ "brace-expansion": {
2557
+ "version": "1.1.2",
2558
+ "from": "brace-expansion@^1.0.0",
2559
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.2.tgz",
2560
+ "dependencies": {
2561
+ "balanced-match": {
2562
+ "version": "0.3.0",
2563
+ "from": "balanced-match@^0.3.0",
2564
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.3.0.tgz"
2565
+ },
2566
+ "concat-map": {
2567
+ "version": "0.0.1",
2568
+ "from": "concat-map@0.0.1",
2569
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz"
2570
+ }
2571
+ }
2572
+ }
2573
+ }
2574
+ },
2575
+ "once": {
2576
+ "version": "1.3.3",
2577
+ "from": "once@^1.3.0",
2578
+ "resolved": "https://registry.npmjs.org/once/-/once-1.3.3.tgz",
2579
+ "dependencies": {
2580
+ "wrappy": {
2581
+ "version": "1.0.1",
2582
+ "from": "wrappy@1",
2583
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.1.tgz"
2584
+ }
2585
+ }
2586
+ },
2587
+ "path-is-absolute": {
2588
+ "version": "1.0.0",
2589
+ "from": "path-is-absolute@^1.0.0",
2590
+ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.0.tgz"
2591
+ }
2592
+ }
2593
+ }
2594
+ }
2595
+ }
2596
+ }
2597
+ },
2598
+ "tough-cookie": {
2599
+ "version": "2.2.1",
2600
+ "from": "tough-cookie@~2.2.0",
2601
+ "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.2.1.tgz"
2602
+ },
2603
+ "tunnel-agent": {
2604
+ "version": "0.4.2",
2605
+ "from": "tunnel-agent@~0.4.1",
2606
+ "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.4.2.tgz"
2607
+ },
2608
+ "tweetnacl": {
2609
+ "version": "0.13.2",
2610
+ "from": "tweetnacl@>=0.13.0 <1.0.0",
2611
+ "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.13.2.tgz"
2612
+ },
2613
+ "uid-number": {
2614
+ "version": "0.0.3",
2615
+ "from": "uid-number@0.0.3",
2616
+ "resolved": "https://registry.npmjs.org/uid-number/-/uid-number-0.0.3.tgz"
2617
+ },
2618
+ "util-deprecate": {
2619
+ "version": "1.0.2",
2620
+ "from": "util-deprecate@~1.0.1",
2621
+ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz"
2622
+ },
2623
+ "verror": {
2624
+ "version": "1.3.6",
2625
+ "from": "verror@1.3.6",
2626
+ "resolved": "https://registry.npmjs.org/verror/-/verror-1.3.6.tgz"
2627
+ },
2628
+ "xtend": {
2629
+ "version": "4.0.1",
2630
+ "from": "xtend@^4.0.0",
2631
+ "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz"
2632
+ }
2633
+ }
2634
+ },
1963
2635
  "function-bind": {
1964
2636
  "version": "1.0.2",
1965
2637
  "from": "function-bind@>=1.0.2 <1.1.0",
@@ -2477,6 +3149,11 @@
2477
3149
  "from": "lodash@>=3.2.0 <4.0.0",
2478
3150
  "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz"
2479
3151
  },
3152
+ "lodash-es": {
3153
+ "version": "4.2.1",
3154
+ "from": "lodash-es@>=4.2.1 <5.0.0",
3155
+ "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.2.1.tgz"
3156
+ },
2480
3157
  "lodash._arraycopy": {
2481
3158
  "version": "3.0.0",
2482
3159
  "from": "lodash._arraycopy@>=3.0.0 <4.0.0",
@@ -2719,6 +3396,11 @@
2719
3396
  "from": "mute-stream@0.0.5",
2720
3397
  "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.5.tgz"
2721
3398
  },
3399
+ "nan": {
3400
+ "version": "2.2.0",
3401
+ "from": "nan@>=2.1.0 <3.0.0",
3402
+ "resolved": "https://registry.npmjs.org/nan/-/nan-2.2.0.tgz"
3403
+ },
2722
3404
  "natural-compare": {
2723
3405
  "version": "1.2.2",
2724
3406
  "from": "natural-compare@>=1.2.2 <1.3.0",
@@ -3097,6 +3779,18 @@
3097
3779
  "from": "redent@>=1.0.0 <2.0.0",
3098
3780
  "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz"
3099
3781
  },
3782
+ "redux": {
3783
+ "version": "3.3.1",
3784
+ "from": "redux@*",
3785
+ "resolved": "https://registry.npmjs.org/redux/-/redux-3.3.1.tgz",
3786
+ "dependencies": {
3787
+ "lodash": {
3788
+ "version": "4.2.1",
3789
+ "from": "lodash@>=4.2.1 <5.0.0",
3790
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.2.1.tgz"
3791
+ }
3792
+ }
3793
+ },
3100
3794
  "regenerate": {
3101
3795
  "version": "1.2.1",
3102
3796
  "from": "regenerate@>=1.2.1 <2.0.0",