critical-path-css-rails 0.4.0 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: f12a2c3085e97f5d3692a659ed83cd592260f373
4
- data.tar.gz: aa7a212ba6508a30d99caf689df0703e54735443
3
+ metadata.gz: 9f2e5c98beedd1a60cb696c2c09772221ec4f558
4
+ data.tar.gz: 2a367071382fcb6ed73cd309ebf08781597230ec
5
5
  SHA512:
6
- metadata.gz: f40cdba39ff43d8ef47648f636edaf6aebbe424cbb07cea0290e3990caff0bcf641afd0aa06cd75afe9d2f6abb1407366a05ef829c2a673c28e6b0b0ce9aaa41
7
- data.tar.gz: b70058d8bd403384a1dde2107b6721f01d8489e1acbaf68e5af5d41cc7aea4a8746f7b22558d7dc81d38d058176f06f880a96894277c19f2e0ff669f9e5e4aec
6
+ metadata.gz: f02b55901188fddcfa7b789ff398e4d8352e7fcf3390457f07d9a7154401a0771ef21b4490c9e810c4cf1c1ff8ed2a144724222165e69648bafa21716a77767a
7
+ data.tar.gz: ae91d133be2903f17d0a78f3b5c9ee02630df6483931f7720fa088e98d73dfeead4628aa9ce39c906e1cb68c216c704bd3cb832ada0856f6f00f062654a14c2a
@@ -1,4 +1,2 @@
1
1
  languages:
2
2
  Ruby: true
3
- exclude_paths:
4
- - lib/penthouse/penthouse.js
data/.gitignore CHANGED
@@ -17,3 +17,6 @@ test/version_tmp
17
17
  tmp
18
18
 
19
19
  .DS_Store
20
+ /node_modules/
21
+ .rspec_status
22
+ /npm-debug.log
data/Gemfile CHANGED
@@ -1,4 +1,17 @@
1
- # A sample Gemfile
2
- source "https://rubygems.org"
1
+ source 'https://rubygems.org'
3
2
 
4
- gem 'rubocop', require: false
3
+ gemspec
4
+
5
+ group :development, :test do
6
+ gem 'byebug', platform: [:ruby], require: false
7
+ gem 'rubocop', require: false
8
+ end
9
+
10
+ # HACK: npm install on bundle
11
+ unless $npm_commands_hook_installed # rubocop:disable Style/GlobalVars
12
+ Gem.pre_install do |installer|
13
+ next true unless installer.spec.name == 'critical-path-css-rails'
14
+ require_relative './ext/npm/install'
15
+ end
16
+ $npm_commands_hook_installed = true # rubocop:disable Style/GlobalVars
17
+ end
data/README.md CHANGED
@@ -6,7 +6,7 @@ This gem give you the ability to load only the CSS you *need* on an initial page
6
6
 
7
7
  This gem assumes that you'll load the rest of the CSS asyncronously. At the moment, the suggested way is to use the [loadcss-rails](https://github.com/michael-misshore/loadcss-rails) gem.
8
8
 
9
- This gem uses [PhantomJS](https://github.com/colszowka/phantomjs-gem) and [Penthouse](https://github.com/pocketjoso/penthouse) to generate the critical CSS.
9
+ This gem uses [Penthouse](https://github.com/pocketjoso/penthouse) to generate the critical CSS.
10
10
 
11
11
  ## Update
12
12
 
@@ -17,7 +17,7 @@ Versions below 0.3.0 are not compatible with this version. Please read the Upgr
17
17
  Add `critical-path-css-rails` to your Gemfile:
18
18
 
19
19
  ```
20
- gem 'critical-path-css-rails', '~> 0.4.0'
20
+ gem 'critical-path-css-rails', '~> 1.0.0'
21
21
  ```
22
22
 
23
23
  Download and install by running:
@@ -128,9 +128,9 @@ Answer 'Y' when prompted to overwrite `critical_path_css.rake`. However, overwr
128
128
  The critical-path-css-rails gem follows these version guidelines:
129
129
 
130
130
  ```
131
- patch version bump = updates to critical-path-css-rails and patch-level updates to Penthouse and PhantomJS
132
- minor version bump = minor-level updates to critical-path-css-rails, Penthouse, and PhantomJS
133
- major version bump = major-level updates to critical-path-css-rails, Penthouse, PhantomJS, and updates to Rails which may be backwards-incompatible
131
+ patch version bump = updates to critical-path-css-rails and patch-level updates to Penthouse
132
+ minor version bump = minor-level updates to critical-path-css-rails and Penthouse
133
+ major version bump = major-level updates to critical-path-css-rails, Penthouse, and updates to Rails which may be backwards-incompatible
134
134
  ```
135
135
 
136
136
  ## Contributing
@@ -10,9 +10,11 @@ Gem::Specification.new do |s|
10
10
  s.description = 'Only load the CSS you need for the initial viewport in Rails!'
11
11
  s.license = 'MIT'
12
12
 
13
- s.add_runtime_dependency 'phantomjs', ['~> 2.1.1']
14
-
15
13
  s.files = `git ls-files`.split("\n")
16
14
  s.executables = `git ls-files -- bin/*`.split("\n").map { |f| File.basename(f) }
17
15
  s.require_path = 'lib'
16
+
17
+ s.add_development_dependency 'rspec', '~> 3.6'
18
+
19
+ s.extensions = ['ext/npm/extconf.rb']
18
20
  end
@@ -0,0 +1,3 @@
1
+ File.write 'Makefile',
2
+ "make:\n\t\ninstall:\n\truby install.rb\nclean:\n\t\n"
3
+
@@ -0,0 +1,4 @@
1
+ require_relative '../../lib/npm_commands'
2
+
3
+ NpmCommands.new.install('--production', '.') ||
4
+ raise('Error while installing npm dependencies')
@@ -1,32 +1,38 @@
1
- module CriticalPathCss
2
- require 'critical_path_css/css_fetcher'
1
+ require 'critical_path_css/configuration'
2
+ require 'critical_path_css/css_fetcher'
3
+ require 'critical_path_css/rails/config_loader'
3
4
 
5
+ module CriticalPathCss
4
6
  CACHE_NAMESPACE = 'critical-path-css'
5
7
 
6
8
  def self.generate(route)
7
- Rails.cache.write(
9
+ ::Rails.cache.write(
8
10
  route,
9
- CssFetcher.new.fetch_route(route),
11
+ CssFetcher.new(config).fetch_route(route),
10
12
  namespace: CACHE_NAMESPACE,
11
13
  expires_in: nil
12
14
  )
13
15
  end
14
16
 
15
17
  def self.generate_all
16
- CssFetcher.new.fetch.each do |route, css|
17
- Rails.cache.write(route, css, namespace: CACHE_NAMESPACE, expires_in: nil)
18
+ CssFetcher.new(config).fetch.each do |route, css|
19
+ ::Rails.cache.write(route, css, namespace: CACHE_NAMESPACE, expires_in: nil)
18
20
  end
19
21
  end
20
22
 
21
23
  def self.clear(route)
22
- Rails.cache.delete(route, namespace: CACHE_NAMESPACE)
24
+ ::Rails.cache.delete(route, namespace: CACHE_NAMESPACE)
23
25
  end
24
26
 
25
27
  def self.clear_matched(routes)
26
- Rails.cache.delete_matched(routes, namespace: CACHE_NAMESPACE)
28
+ ::Rails.cache.delete_matched(routes, namespace: CACHE_NAMESPACE)
27
29
  end
28
30
 
29
31
  def self.fetch(route)
30
- Rails.cache.read(route, namespace: CACHE_NAMESPACE) || ''
32
+ ::Rails.cache.read(route, namespace: CACHE_NAMESPACE) || ''
33
+ end
34
+
35
+ def self.config
36
+ @config ||= Configuration.new(CriticalPathCss::Rails::ConfigLoader.new.load)
31
37
  end
32
38
  end
@@ -1,39 +1,29 @@
1
1
  require 'erb'
2
2
  module CriticalPathCss
3
3
  class Configuration
4
- CONFIGURATION_FILENAME = 'critical_path_css.yml'
5
4
 
6
- def initialize
7
- @configurations = YAML.load(ERB.new(File.read(configuration_file_path)).result)[Rails.env]
5
+ def initialize(config)
6
+ @config = config
8
7
  end
9
8
 
10
9
  def base_url
11
- @configurations['base_url']
10
+ @config['base_url']
12
11
  end
13
12
 
14
13
  def css_path
15
- @css_path ||= begin
16
- relative_path = @configurations['css_path'] || manifest_path
17
- "#{Rails.root}/public#{relative_path}"
18
- end
14
+ @config['css_path']
19
15
  end
20
16
 
21
17
  def manifest_name
22
- @configurations['manifest_name']
18
+ @config['manifest_name']
23
19
  end
24
20
 
25
21
  def routes
26
- @configurations['routes']
22
+ @config['routes']
27
23
  end
28
24
 
29
- private
30
-
31
- def configuration_file_path
32
- @configuration_file_path ||= Rails.root.join('config', CONFIGURATION_FILENAME)
33
- end
34
-
35
- def manifest_path
36
- @manifest_path ||= ActionController::Base.helpers.stylesheet_path(manifest_name, host: '')
25
+ def penthouse_options
26
+ @config['penthouse_options'] || {}
37
27
  end
38
28
  end
39
29
  end
@@ -1,12 +1,12 @@
1
+ require 'json'
2
+ require 'open3'
3
+
1
4
  module CriticalPathCss
2
5
  class CssFetcher
3
- require 'phantomjs'
4
- require 'critical_path_css/configuration'
5
-
6
- PENTHOUSE_PATH = "#{File.dirname(__FILE__)}/../penthouse/penthouse.js"
6
+ GEM_ROOT = File.expand_path(File.join('..', '..'), File.dirname(__FILE__))
7
7
 
8
- def initialize
9
- @config = Configuration.new
8
+ def initialize(config)
9
+ @config = config
10
10
  end
11
11
 
12
12
  def fetch
@@ -20,15 +20,50 @@ module CriticalPathCss
20
20
  protected
21
21
 
22
22
  def css_for_route(route)
23
- url = @config.base_url + route
24
-
25
- Phantomjs.run(
26
- '--ignore-ssl-errors=true',
27
- '--ssl-protocol=tlsv1',
28
- PENTHOUSE_PATH,
29
- url,
30
- @config.css_path
31
- )
23
+ options = {
24
+ 'url' => @config.base_url + route,
25
+ 'css' => @config.css_path,
26
+ ## optional params
27
+ # viewport dimensions
28
+ 'width' => 1300,
29
+ 'height' => 900,
30
+ # CSS selectors to always include, e.g.:
31
+ 'forceInclude' => [
32
+ # '.keepMeEvenIfNotSeenInDom',
33
+ # '^\.regexWorksToo'
34
+ ],
35
+ # ms; abort critical CSS generation after this timeout
36
+ 'timeout' => 30000,
37
+ # set to true to throw on CSS errors (will run faster if no errors)
38
+ 'strict' => false,
39
+ # characters; strip out inline base64 encoded resources larger than this
40
+ 'maxEmbeddedBase64Length' => 1000,
41
+ # specify which user agent string when loading the page
42
+ 'userAgent' => 'Penthouse Critical Path CSS Generator',
43
+ # ms; render wait timeout before CSS processing starts (default: 100)
44
+ 'renderWaitTime' => 100,
45
+ # set to false to load (external) JS (default: true)
46
+ 'blockJSRequests' => true,
47
+ # see `phantomjs --help` for the list of all available options
48
+ 'phantomJsOptions' => {
49
+ 'ignore-ssl-errors' => true,
50
+ 'ssl-protocol' => 'tlsv1'
51
+ },
52
+ 'customPageHeaders' => {
53
+ # use if getting compression errors like 'Data corrupted':
54
+ 'Accept-Encoding' => 'identity'
55
+ }
56
+ }.merge(@config.penthouse_options)
57
+ out, err, st = Dir.chdir(GEM_ROOT) do
58
+ Open3.capture3('node', 'lib/fetch-css.js', JSON.dump(options))
59
+ end
60
+ if !st.exitstatus.zero? || out.empty? && !err.empty?
61
+ STDOUT.puts out
62
+ STDERR.puts err
63
+ raise "Failed to get CSS for route #{route}\n" \
64
+ " with options=#{options.inspect}"
65
+ end
66
+ out
32
67
  end
33
68
  end
34
69
  end
@@ -0,0 +1,24 @@
1
+ module CriticalPathCss
2
+ module Rails
3
+ class ConfigLoader
4
+ CONFIGURATION_FILENAME = 'critical_path_css.yml'
5
+
6
+ def load
7
+ config = YAML.load(ERB.new(File.read(configuration_file_path)).result)[::Rails.env]
8
+ config['css_path'] = "#{::Rails.root}/public" + (
9
+ config['css_path'] ||
10
+ ActionController::Base.helpers.stylesheet_path(
11
+ config['manifest_name'], host: ''
12
+ )
13
+ )
14
+ config
15
+ end
16
+
17
+ private
18
+
19
+ def configuration_file_path
20
+ @configuration_file_path ||= ::Rails.root.join('config', CONFIGURATION_FILENAME)
21
+ end
22
+ end
23
+ end
24
+ end
@@ -1,6 +1,5 @@
1
1
  module CriticalPathCSS
2
2
  module Rails
3
- VERSION = '0.4.0'
4
- PENTHOUSE_VERSION = '0.3.4'
3
+ VERSION = '1.0.0'
5
4
  end
6
5
  end
@@ -0,0 +1,14 @@
1
+ const penthouse = require('penthouse');
2
+ const fs = require('fs');
3
+
4
+ const penthouseOptions = JSON.parse(process.argv[2]);
5
+
6
+ const STDOUT_FD = 1;
7
+ const STDERR_FD = 2;
8
+
9
+ penthouse(penthouseOptions).then(function(criticalCss) {
10
+ fs.writeSync(STDOUT_FD, criticalCss);
11
+ }).catch(function(err) {
12
+ fs.writeSync(STDERR_FD, err);
13
+ process.exit(1);
14
+ });
@@ -0,0 +1,56 @@
1
+ # frozen_string_literal: true
2
+
3
+ # NPM wrapper with helpful error messages
4
+ class NpmCommands
5
+
6
+ # @return [Boolean] whether the installation succeeded
7
+ def install(*args) # rubocop:disable Metrics/MethodLength
8
+ return false unless check_nodejs_installed
9
+ STDERR.puts 'Installing npm dependencies...'
10
+ install_status = Dir.chdir File.expand_path('..', File.dirname(__FILE__)) do
11
+ system('npm', 'install', *args)
12
+ end
13
+ STDERR.puts(
14
+ *if install_status
15
+ ['npm dependencies installed']
16
+ else
17
+ ['-' * 60,
18
+ 'Error: npm dependencies installation failed',
19
+ '-' * 60]
20
+ end
21
+ )
22
+ install_status
23
+ end
24
+
25
+ private
26
+
27
+ def check_nodejs_installed # rubocop:disable Metrics/MethodLength
28
+ return true if executable?('node')
29
+ STDERR.puts(
30
+ '-' * 60,
31
+ 'Error: critical-path-css-rails requires NodeJS and NPM.',
32
+ *if executable?('brew')
33
+ [' To install NodeJS and NPM, run:',
34
+ ' brew install node']
35
+ elsif Gem.win_platform?
36
+ [' To install NodeJS and NPM, we recommend:',
37
+ ' https://github.com/coreybutler/nvm-windows/releases']
38
+ else
39
+ [' To install NodeJS and NPM, we recommend:',
40
+ ' https://github.com/creationix/nvm']
41
+ end,
42
+ '-' * 60
43
+ )
44
+ end
45
+
46
+ def executable?(cmd)
47
+ exts = ENV['PATHEXT'] ? ENV['PATHEXT'].split(';') : ['']
48
+ ENV['PATH'].split(File::PATH_SEPARATOR).each do |path|
49
+ exts.each do |ext|
50
+ exe = File.join(path, "#{cmd}#{ext}")
51
+ return exe if File.executable?(exe) && !File.directory?(exe)
52
+ end
53
+ end
54
+ nil
55
+ end
56
+ end
@@ -0,0 +1,782 @@
1
+ {
2
+ "name": "critical-path-css-rails",
3
+ "version": "1.0.0",
4
+ "lockfileVersion": 1,
5
+ "requires": true,
6
+ "dependencies": {
7
+ "amdefine": {
8
+ "version": "1.0.1",
9
+ "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz",
10
+ "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU="
11
+ },
12
+ "ansi-regex": {
13
+ "version": "2.1.1",
14
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
15
+ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8="
16
+ },
17
+ "ansi-styles": {
18
+ "version": "2.2.1",
19
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
20
+ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4="
21
+ },
22
+ "apartment": {
23
+ "version": "1.1.1",
24
+ "resolved": "https://registry.npmjs.org/apartment/-/apartment-1.1.1.tgz",
25
+ "integrity": "sha1-/ZQGzcyodTWULxWzYKGrWkqpfiY=",
26
+ "requires": {
27
+ "css": "git+https://github.com/pocketjoso/css.git#8ddea7e3cbc0a183ecf694a7a5fbc84326893893",
28
+ "get-stdin": "5.0.1",
29
+ "lodash": "3.10.1",
30
+ "minimist": "1.2.0"
31
+ }
32
+ },
33
+ "asn1": {
34
+ "version": "0.2.3",
35
+ "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz",
36
+ "integrity": "sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y="
37
+ },
38
+ "assert-plus": {
39
+ "version": "0.2.0",
40
+ "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.2.0.tgz",
41
+ "integrity": "sha1-104bh+ev/A24qttwIfP+SBAasjQ="
42
+ },
43
+ "asynckit": {
44
+ "version": "0.4.0",
45
+ "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
46
+ "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k="
47
+ },
48
+ "atob": {
49
+ "version": "1.1.3",
50
+ "resolved": "https://registry.npmjs.org/atob/-/atob-1.1.3.tgz",
51
+ "integrity": "sha1-lfE2KbEsOlGl0hWr3OKqnzL4B3M="
52
+ },
53
+ "aws-sign2": {
54
+ "version": "0.6.0",
55
+ "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.6.0.tgz",
56
+ "integrity": "sha1-FDQt0428yU0OW4fXY81jYSwOeU8="
57
+ },
58
+ "aws4": {
59
+ "version": "1.6.0",
60
+ "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.6.0.tgz",
61
+ "integrity": "sha1-g+9cqGCysy5KDe7e6MdxudtXRx4="
62
+ },
63
+ "bcrypt-pbkdf": {
64
+ "version": "1.0.1",
65
+ "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz",
66
+ "integrity": "sha1-Y7xdy2EzG5K8Bf1SiVPDNGKgb40=",
67
+ "optional": true,
68
+ "requires": {
69
+ "tweetnacl": "0.14.5"
70
+ }
71
+ },
72
+ "boom": {
73
+ "version": "2.10.1",
74
+ "resolved": "https://registry.npmjs.org/boom/-/boom-2.10.1.tgz",
75
+ "integrity": "sha1-OciRjO/1eZ+D+UkqhI9iWt0Mdm8=",
76
+ "requires": {
77
+ "hoek": "2.16.3"
78
+ }
79
+ },
80
+ "caseless": {
81
+ "version": "0.11.0",
82
+ "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.11.0.tgz",
83
+ "integrity": "sha1-cVuW6phBWTzDMGeSP17GDr2k99c="
84
+ },
85
+ "chalk": {
86
+ "version": "1.1.3",
87
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
88
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
89
+ "requires": {
90
+ "ansi-styles": "2.2.1",
91
+ "escape-string-regexp": "1.0.5",
92
+ "has-ansi": "2.0.0",
93
+ "strip-ansi": "3.0.1",
94
+ "supports-color": "2.0.0"
95
+ }
96
+ },
97
+ "combined-stream": {
98
+ "version": "1.0.5",
99
+ "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.5.tgz",
100
+ "integrity": "sha1-k4NwpXtKUd6ix3wV1cX9+JUWQAk=",
101
+ "requires": {
102
+ "delayed-stream": "1.0.0"
103
+ }
104
+ },
105
+ "commander": {
106
+ "version": "2.11.0",
107
+ "resolved": "https://registry.npmjs.org/commander/-/commander-2.11.0.tgz",
108
+ "integrity": "sha512-b0553uYA5YAEGgyYIGYROzKQ7X5RAqedkfjiZxwi0kL1g3bOaBNNZfYkzt/CL0umgD5wc9Jec2FbB98CjkMRvQ=="
109
+ },
110
+ "concat-stream": {
111
+ "version": "1.5.0",
112
+ "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.5.0.tgz",
113
+ "integrity": "sha1-U/fUPFHF5D+ByP3QMyHGMb5o1hE=",
114
+ "requires": {
115
+ "inherits": "2.0.3",
116
+ "readable-stream": "2.0.6",
117
+ "typedarray": "0.0.6"
118
+ }
119
+ },
120
+ "core-util-is": {
121
+ "version": "1.0.2",
122
+ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
123
+ "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac="
124
+ },
125
+ "cryptiles": {
126
+ "version": "2.0.5",
127
+ "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-2.0.5.tgz",
128
+ "integrity": "sha1-O9/s3GCBR8HGcgL6KR59ylnqo7g=",
129
+ "requires": {
130
+ "boom": "2.10.1"
131
+ }
132
+ },
133
+ "css": {
134
+ "version": "git+https://github.com/pocketjoso/css.git#8ddea7e3cbc0a183ecf694a7a5fbc84326893893",
135
+ "requires": {
136
+ "inherits": "2.0.3",
137
+ "source-map": "0.1.43",
138
+ "source-map-resolve": "0.3.1",
139
+ "urix": "0.1.0"
140
+ }
141
+ },
142
+ "css-mediaquery": {
143
+ "version": "0.1.2",
144
+ "resolved": "https://registry.npmjs.org/css-mediaquery/-/css-mediaquery-0.1.2.tgz",
145
+ "integrity": "sha1-aiw3NEkoYYYxxUvTPO3TAdoYvqA="
146
+ },
147
+ "dashdash": {
148
+ "version": "1.14.1",
149
+ "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz",
150
+ "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=",
151
+ "requires": {
152
+ "assert-plus": "1.0.0"
153
+ },
154
+ "dependencies": {
155
+ "assert-plus": {
156
+ "version": "1.0.0",
157
+ "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
158
+ "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU="
159
+ }
160
+ }
161
+ },
162
+ "debug": {
163
+ "version": "0.7.4",
164
+ "resolved": "https://registry.npmjs.org/debug/-/debug-0.7.4.tgz",
165
+ "integrity": "sha1-BuHqgILCyxTjmAbiLi9vdX+Srzk="
166
+ },
167
+ "delayed-stream": {
168
+ "version": "1.0.0",
169
+ "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
170
+ "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk="
171
+ },
172
+ "ecc-jsbn": {
173
+ "version": "0.1.1",
174
+ "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz",
175
+ "integrity": "sha1-D8c6ntXw1Tw4GTOYUj735UN3dQU=",
176
+ "optional": true,
177
+ "requires": {
178
+ "jsbn": "0.1.1"
179
+ }
180
+ },
181
+ "es6-promise": {
182
+ "version": "4.0.5",
183
+ "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.0.5.tgz",
184
+ "integrity": "sha1-eILzCt3lskDM+n99eMVIMwlRrkI="
185
+ },
186
+ "escape-string-regexp": {
187
+ "version": "1.0.5",
188
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
189
+ "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ="
190
+ },
191
+ "extend": {
192
+ "version": "3.0.1",
193
+ "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz",
194
+ "integrity": "sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ="
195
+ },
196
+ "extract-zip": {
197
+ "version": "1.5.0",
198
+ "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-1.5.0.tgz",
199
+ "integrity": "sha1-ksz22B73Cp+kwXRxFMzvbYaIpsQ=",
200
+ "requires": {
201
+ "concat-stream": "1.5.0",
202
+ "debug": "0.7.4",
203
+ "mkdirp": "0.5.0",
204
+ "yauzl": "2.4.1"
205
+ }
206
+ },
207
+ "extsprintf": {
208
+ "version": "1.0.2",
209
+ "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.0.2.tgz",
210
+ "integrity": "sha1-4QgOBljjALBilJkMxw4VAiNf1VA="
211
+ },
212
+ "fd-slicer": {
213
+ "version": "1.0.1",
214
+ "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.0.1.tgz",
215
+ "integrity": "sha1-i1vL2ewyfFBBv5qwI/1nUPEXfmU=",
216
+ "requires": {
217
+ "pend": "1.2.0"
218
+ }
219
+ },
220
+ "forever-agent": {
221
+ "version": "0.6.1",
222
+ "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz",
223
+ "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE="
224
+ },
225
+ "form-data": {
226
+ "version": "2.1.4",
227
+ "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.1.4.tgz",
228
+ "integrity": "sha1-M8GDrPGTJ27KqYFDpp6Uv+4XUNE=",
229
+ "requires": {
230
+ "asynckit": "0.4.0",
231
+ "combined-stream": "1.0.5",
232
+ "mime-types": "2.1.16"
233
+ }
234
+ },
235
+ "fs-extra": {
236
+ "version": "1.0.0",
237
+ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-1.0.0.tgz",
238
+ "integrity": "sha1-zTzl9+fLYUWIP8rjGR6Yd/hYeVA=",
239
+ "requires": {
240
+ "graceful-fs": "4.1.11",
241
+ "jsonfile": "2.4.0",
242
+ "klaw": "1.3.1"
243
+ }
244
+ },
245
+ "generate-function": {
246
+ "version": "2.0.0",
247
+ "resolved": "https://registry.npmjs.org/generate-function/-/generate-function-2.0.0.tgz",
248
+ "integrity": "sha1-aFj+fAlpt9TpCTM3ZHrHn2DfvnQ="
249
+ },
250
+ "generate-object-property": {
251
+ "version": "1.2.0",
252
+ "resolved": "https://registry.npmjs.org/generate-object-property/-/generate-object-property-1.2.0.tgz",
253
+ "integrity": "sha1-nA4cQDCM6AT0eDYYuTf6iPmdUNA=",
254
+ "requires": {
255
+ "is-property": "1.0.2"
256
+ }
257
+ },
258
+ "get-stdin": {
259
+ "version": "5.0.1",
260
+ "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-5.0.1.tgz",
261
+ "integrity": "sha1-Ei4WFZHiH/TFJTAwVpPyDmOTo5g="
262
+ },
263
+ "getpass": {
264
+ "version": "0.1.7",
265
+ "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz",
266
+ "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=",
267
+ "requires": {
268
+ "assert-plus": "1.0.0"
269
+ },
270
+ "dependencies": {
271
+ "assert-plus": {
272
+ "version": "1.0.0",
273
+ "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
274
+ "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU="
275
+ }
276
+ }
277
+ },
278
+ "graceful-fs": {
279
+ "version": "4.1.11",
280
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz",
281
+ "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg="
282
+ },
283
+ "har-validator": {
284
+ "version": "2.0.6",
285
+ "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-2.0.6.tgz",
286
+ "integrity": "sha1-zcvAgYgmWtEZtqWnyKtw7s+10n0=",
287
+ "requires": {
288
+ "chalk": "1.1.3",
289
+ "commander": "2.11.0",
290
+ "is-my-json-valid": "2.16.0",
291
+ "pinkie-promise": "2.0.1"
292
+ }
293
+ },
294
+ "has-ansi": {
295
+ "version": "2.0.0",
296
+ "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz",
297
+ "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=",
298
+ "requires": {
299
+ "ansi-regex": "2.1.1"
300
+ }
301
+ },
302
+ "hasha": {
303
+ "version": "2.2.0",
304
+ "resolved": "https://registry.npmjs.org/hasha/-/hasha-2.2.0.tgz",
305
+ "integrity": "sha1-eNfL/B5tZjA/55g3NlmEUXsvbuE=",
306
+ "requires": {
307
+ "is-stream": "1.1.0",
308
+ "pinkie-promise": "2.0.1"
309
+ }
310
+ },
311
+ "hawk": {
312
+ "version": "3.1.3",
313
+ "resolved": "https://registry.npmjs.org/hawk/-/hawk-3.1.3.tgz",
314
+ "integrity": "sha1-B4REvXwWQLD+VA0sm3PVlnjo4cQ=",
315
+ "requires": {
316
+ "boom": "2.10.1",
317
+ "cryptiles": "2.0.5",
318
+ "hoek": "2.16.3",
319
+ "sntp": "1.0.9"
320
+ }
321
+ },
322
+ "hoek": {
323
+ "version": "2.16.3",
324
+ "resolved": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz",
325
+ "integrity": "sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0="
326
+ },
327
+ "http-signature": {
328
+ "version": "1.1.1",
329
+ "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.1.1.tgz",
330
+ "integrity": "sha1-33LiZwZs0Kxn+3at+OE0qPvPkb8=",
331
+ "requires": {
332
+ "assert-plus": "0.2.0",
333
+ "jsprim": "1.4.0",
334
+ "sshpk": "1.13.1"
335
+ }
336
+ },
337
+ "inherits": {
338
+ "version": "2.0.3",
339
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
340
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4="
341
+ },
342
+ "is-my-json-valid": {
343
+ "version": "2.16.0",
344
+ "resolved": "https://registry.npmjs.org/is-my-json-valid/-/is-my-json-valid-2.16.0.tgz",
345
+ "integrity": "sha1-8Hndm/2uZe4gOKrorLyGqxCeNpM=",
346
+ "requires": {
347
+ "generate-function": "2.0.0",
348
+ "generate-object-property": "1.2.0",
349
+ "jsonpointer": "4.0.1",
350
+ "xtend": "4.0.1"
351
+ }
352
+ },
353
+ "is-property": {
354
+ "version": "1.0.2",
355
+ "resolved": "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz",
356
+ "integrity": "sha1-V/4cTkhHTt1lsJkR8msc1Ald2oQ="
357
+ },
358
+ "is-stream": {
359
+ "version": "1.1.0",
360
+ "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz",
361
+ "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ="
362
+ },
363
+ "is-typedarray": {
364
+ "version": "1.0.0",
365
+ "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
366
+ "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo="
367
+ },
368
+ "isarray": {
369
+ "version": "1.0.0",
370
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
371
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="
372
+ },
373
+ "isexe": {
374
+ "version": "2.0.0",
375
+ "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
376
+ "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA="
377
+ },
378
+ "isstream": {
379
+ "version": "0.1.2",
380
+ "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
381
+ "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo="
382
+ },
383
+ "jsbn": {
384
+ "version": "0.1.1",
385
+ "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz",
386
+ "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=",
387
+ "optional": true
388
+ },
389
+ "jsesc": {
390
+ "version": "1.3.0",
391
+ "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz",
392
+ "integrity": "sha1-RsP+yMGJKxKwgz25vHYiF226s0s="
393
+ },
394
+ "json-schema": {
395
+ "version": "0.2.3",
396
+ "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz",
397
+ "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM="
398
+ },
399
+ "json-stringify-safe": {
400
+ "version": "5.0.1",
401
+ "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
402
+ "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus="
403
+ },
404
+ "jsonfile": {
405
+ "version": "2.4.0",
406
+ "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz",
407
+ "integrity": "sha1-NzaitCi4e72gzIO1P6PWM6NcKug=",
408
+ "requires": {
409
+ "graceful-fs": "4.1.11"
410
+ }
411
+ },
412
+ "jsonpointer": {
413
+ "version": "4.0.1",
414
+ "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-4.0.1.tgz",
415
+ "integrity": "sha1-T9kss04OnbPInIYi7PUfm5eMbLk="
416
+ },
417
+ "jsprim": {
418
+ "version": "1.4.0",
419
+ "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.0.tgz",
420
+ "integrity": "sha1-o7h+QCmNjDgFUtjMdiigu5WiKRg=",
421
+ "requires": {
422
+ "assert-plus": "1.0.0",
423
+ "extsprintf": "1.0.2",
424
+ "json-schema": "0.2.3",
425
+ "verror": "1.3.6"
426
+ },
427
+ "dependencies": {
428
+ "assert-plus": {
429
+ "version": "1.0.0",
430
+ "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
431
+ "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU="
432
+ }
433
+ }
434
+ },
435
+ "kew": {
436
+ "version": "0.7.0",
437
+ "resolved": "https://registry.npmjs.org/kew/-/kew-0.7.0.tgz",
438
+ "integrity": "sha1-edk9LTM2PW/dKXCzNdkUGtWR15s="
439
+ },
440
+ "klaw": {
441
+ "version": "1.3.1",
442
+ "resolved": "https://registry.npmjs.org/klaw/-/klaw-1.3.1.tgz",
443
+ "integrity": "sha1-QIhDO0azsbolnXh4XY6W9zugJDk=",
444
+ "requires": {
445
+ "graceful-fs": "4.1.11"
446
+ }
447
+ },
448
+ "lodash": {
449
+ "version": "3.10.1",
450
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz",
451
+ "integrity": "sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y="
452
+ },
453
+ "mime-db": {
454
+ "version": "1.29.0",
455
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.29.0.tgz",
456
+ "integrity": "sha1-SNJtI1WJZRcErFkWygYAGRQmaHg="
457
+ },
458
+ "mime-types": {
459
+ "version": "2.1.16",
460
+ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.16.tgz",
461
+ "integrity": "sha1-K4WKUuXs1RbbiXrCvodIeDBpjiM=",
462
+ "requires": {
463
+ "mime-db": "1.29.0"
464
+ }
465
+ },
466
+ "minimist": {
467
+ "version": "1.2.0",
468
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
469
+ "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ="
470
+ },
471
+ "mkdirp": {
472
+ "version": "0.5.0",
473
+ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.0.tgz",
474
+ "integrity": "sha1-HXMHam35hs2TROFecfzAWkyavxI=",
475
+ "requires": {
476
+ "minimist": "0.0.8"
477
+ },
478
+ "dependencies": {
479
+ "minimist": {
480
+ "version": "0.0.8",
481
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
482
+ "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0="
483
+ }
484
+ }
485
+ },
486
+ "oauth-sign": {
487
+ "version": "0.8.2",
488
+ "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz",
489
+ "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM="
490
+ },
491
+ "os-tmpdir": {
492
+ "version": "1.0.2",
493
+ "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz",
494
+ "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ="
495
+ },
496
+ "pend": {
497
+ "version": "1.2.0",
498
+ "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz",
499
+ "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA="
500
+ },
501
+ "penthouse": {
502
+ "version": "0.11.5",
503
+ "resolved": "https://registry.npmjs.org/penthouse/-/penthouse-0.11.5.tgz",
504
+ "integrity": "sha1-/+y0LwrsYkhYWC8nLqLcIYGHyVI=",
505
+ "requires": {
506
+ "apartment": "1.1.1",
507
+ "css": "git+https://github.com/pocketjoso/css.git#8ddea7e3cbc0a183ecf694a7a5fbc84326893893",
508
+ "css-mediaquery": "0.1.2",
509
+ "jsesc": "1.3.0",
510
+ "os-tmpdir": "1.0.2",
511
+ "phantomjs-prebuilt": "2.1.14",
512
+ "regenerator-runtime": "0.10.5",
513
+ "tmp": "0.0.31"
514
+ }
515
+ },
516
+ "phantomjs-prebuilt": {
517
+ "version": "2.1.14",
518
+ "resolved": "https://registry.npmjs.org/phantomjs-prebuilt/-/phantomjs-prebuilt-2.1.14.tgz",
519
+ "integrity": "sha1-1T0xH8+30dCN2yQBRVjxGIxRbaA=",
520
+ "requires": {
521
+ "es6-promise": "4.0.5",
522
+ "extract-zip": "1.5.0",
523
+ "fs-extra": "1.0.0",
524
+ "hasha": "2.2.0",
525
+ "kew": "0.7.0",
526
+ "progress": "1.1.8",
527
+ "request": "2.79.0",
528
+ "request-progress": "2.0.1",
529
+ "which": "1.2.14"
530
+ }
531
+ },
532
+ "pinkie": {
533
+ "version": "2.0.4",
534
+ "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz",
535
+ "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA="
536
+ },
537
+ "pinkie-promise": {
538
+ "version": "2.0.1",
539
+ "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz",
540
+ "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=",
541
+ "requires": {
542
+ "pinkie": "2.0.4"
543
+ }
544
+ },
545
+ "process-nextick-args": {
546
+ "version": "1.0.7",
547
+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz",
548
+ "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M="
549
+ },
550
+ "progress": {
551
+ "version": "1.1.8",
552
+ "resolved": "https://registry.npmjs.org/progress/-/progress-1.1.8.tgz",
553
+ "integrity": "sha1-4mDHj2Fhzdmw5WzD4Khd4Xx6V74="
554
+ },
555
+ "punycode": {
556
+ "version": "1.4.1",
557
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz",
558
+ "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4="
559
+ },
560
+ "qs": {
561
+ "version": "6.3.2",
562
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.3.2.tgz",
563
+ "integrity": "sha1-51vV9uJoEioqDgvaYwslUMFmUCw="
564
+ },
565
+ "readable-stream": {
566
+ "version": "2.0.6",
567
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.0.6.tgz",
568
+ "integrity": "sha1-j5A0HmilPMySh4jaz80Rs265t44=",
569
+ "requires": {
570
+ "core-util-is": "1.0.2",
571
+ "inherits": "2.0.3",
572
+ "isarray": "1.0.0",
573
+ "process-nextick-args": "1.0.7",
574
+ "string_decoder": "0.10.31",
575
+ "util-deprecate": "1.0.2"
576
+ }
577
+ },
578
+ "regenerator-runtime": {
579
+ "version": "0.10.5",
580
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.10.5.tgz",
581
+ "integrity": "sha1-M2w+/BIgrc7dosn6tntaeVWjNlg="
582
+ },
583
+ "request": {
584
+ "version": "2.79.0",
585
+ "resolved": "https://registry.npmjs.org/request/-/request-2.79.0.tgz",
586
+ "integrity": "sha1-Tf5b9r6LjNw3/Pk+BLZVd3InEN4=",
587
+ "requires": {
588
+ "aws-sign2": "0.6.0",
589
+ "aws4": "1.6.0",
590
+ "caseless": "0.11.0",
591
+ "combined-stream": "1.0.5",
592
+ "extend": "3.0.1",
593
+ "forever-agent": "0.6.1",
594
+ "form-data": "2.1.4",
595
+ "har-validator": "2.0.6",
596
+ "hawk": "3.1.3",
597
+ "http-signature": "1.1.1",
598
+ "is-typedarray": "1.0.0",
599
+ "isstream": "0.1.2",
600
+ "json-stringify-safe": "5.0.1",
601
+ "mime-types": "2.1.16",
602
+ "oauth-sign": "0.8.2",
603
+ "qs": "6.3.2",
604
+ "stringstream": "0.0.5",
605
+ "tough-cookie": "2.3.2",
606
+ "tunnel-agent": "0.4.3",
607
+ "uuid": "3.1.0"
608
+ }
609
+ },
610
+ "request-progress": {
611
+ "version": "2.0.1",
612
+ "resolved": "https://registry.npmjs.org/request-progress/-/request-progress-2.0.1.tgz",
613
+ "integrity": "sha1-XTa7V5YcZzqlt4jbyBQf3yO0Tgg=",
614
+ "requires": {
615
+ "throttleit": "1.0.0"
616
+ }
617
+ },
618
+ "resolve-url": {
619
+ "version": "0.2.1",
620
+ "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz",
621
+ "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo="
622
+ },
623
+ "sntp": {
624
+ "version": "1.0.9",
625
+ "resolved": "https://registry.npmjs.org/sntp/-/sntp-1.0.9.tgz",
626
+ "integrity": "sha1-ZUEYTMkK7qbG57NeJlkIJEPGYZg=",
627
+ "requires": {
628
+ "hoek": "2.16.3"
629
+ }
630
+ },
631
+ "source-map": {
632
+ "version": "0.1.43",
633
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.43.tgz",
634
+ "integrity": "sha1-wkvBRspRfBRx9drL4lcbK3+eM0Y=",
635
+ "requires": {
636
+ "amdefine": "1.0.1"
637
+ }
638
+ },
639
+ "source-map-resolve": {
640
+ "version": "0.3.1",
641
+ "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.3.1.tgz",
642
+ "integrity": "sha1-YQ9hIqRFuN1RU1oqcbeD38Ekh2E=",
643
+ "requires": {
644
+ "atob": "1.1.3",
645
+ "resolve-url": "0.2.1",
646
+ "source-map-url": "0.3.0",
647
+ "urix": "0.1.0"
648
+ }
649
+ },
650
+ "source-map-url": {
651
+ "version": "0.3.0",
652
+ "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.3.0.tgz",
653
+ "integrity": "sha1-fsrxO1e80J2opAxdJp2zN5nUqvk="
654
+ },
655
+ "sshpk": {
656
+ "version": "1.13.1",
657
+ "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.13.1.tgz",
658
+ "integrity": "sha1-US322mKHFEMW3EwY/hzx2UBzm+M=",
659
+ "requires": {
660
+ "asn1": "0.2.3",
661
+ "assert-plus": "1.0.0",
662
+ "bcrypt-pbkdf": "1.0.1",
663
+ "dashdash": "1.14.1",
664
+ "ecc-jsbn": "0.1.1",
665
+ "getpass": "0.1.7",
666
+ "jsbn": "0.1.1",
667
+ "tweetnacl": "0.14.5"
668
+ },
669
+ "dependencies": {
670
+ "assert-plus": {
671
+ "version": "1.0.0",
672
+ "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
673
+ "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU="
674
+ }
675
+ }
676
+ },
677
+ "string_decoder": {
678
+ "version": "0.10.31",
679
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
680
+ "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ="
681
+ },
682
+ "stringstream": {
683
+ "version": "0.0.5",
684
+ "resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.5.tgz",
685
+ "integrity": "sha1-TkhM1N5aC7vuGORjB3EKioFiGHg="
686
+ },
687
+ "strip-ansi": {
688
+ "version": "3.0.1",
689
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
690
+ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
691
+ "requires": {
692
+ "ansi-regex": "2.1.1"
693
+ }
694
+ },
695
+ "supports-color": {
696
+ "version": "2.0.0",
697
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
698
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc="
699
+ },
700
+ "throttleit": {
701
+ "version": "1.0.0",
702
+ "resolved": "https://registry.npmjs.org/throttleit/-/throttleit-1.0.0.tgz",
703
+ "integrity": "sha1-nnhYNtr0Z0MUWlmEtiaNgoUorGw="
704
+ },
705
+ "tmp": {
706
+ "version": "0.0.31",
707
+ "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.31.tgz",
708
+ "integrity": "sha1-jzirlDjhcxXl29izZX6L+yd65Kc=",
709
+ "requires": {
710
+ "os-tmpdir": "1.0.2"
711
+ }
712
+ },
713
+ "tough-cookie": {
714
+ "version": "2.3.2",
715
+ "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.2.tgz",
716
+ "integrity": "sha1-8IH3bkyFcg5sN6X6ztc3FQ2EByo=",
717
+ "requires": {
718
+ "punycode": "1.4.1"
719
+ }
720
+ },
721
+ "tunnel-agent": {
722
+ "version": "0.4.3",
723
+ "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.4.3.tgz",
724
+ "integrity": "sha1-Y3PbdpCf5XDgjXNYM2Xtgop07us="
725
+ },
726
+ "tweetnacl": {
727
+ "version": "0.14.5",
728
+ "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz",
729
+ "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=",
730
+ "optional": true
731
+ },
732
+ "typedarray": {
733
+ "version": "0.0.6",
734
+ "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz",
735
+ "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c="
736
+ },
737
+ "urix": {
738
+ "version": "0.1.0",
739
+ "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz",
740
+ "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI="
741
+ },
742
+ "util-deprecate": {
743
+ "version": "1.0.2",
744
+ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
745
+ "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8="
746
+ },
747
+ "uuid": {
748
+ "version": "3.1.0",
749
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.1.0.tgz",
750
+ "integrity": "sha512-DIWtzUkw04M4k3bf1IcpS2tngXEL26YUD2M0tMDUpnUrz2hgzUBlD55a4FjdLGPvfHxS6uluGWvaVEqgBcVa+g=="
751
+ },
752
+ "verror": {
753
+ "version": "1.3.6",
754
+ "resolved": "https://registry.npmjs.org/verror/-/verror-1.3.6.tgz",
755
+ "integrity": "sha1-z/XfEpRtKX0rqu+qJoniW+AcAFw=",
756
+ "requires": {
757
+ "extsprintf": "1.0.2"
758
+ }
759
+ },
760
+ "which": {
761
+ "version": "1.2.14",
762
+ "resolved": "https://registry.npmjs.org/which/-/which-1.2.14.tgz",
763
+ "integrity": "sha1-mofEN48D6CfOyvGs31bHNsAcFOU=",
764
+ "requires": {
765
+ "isexe": "2.0.0"
766
+ }
767
+ },
768
+ "xtend": {
769
+ "version": "4.0.1",
770
+ "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz",
771
+ "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68="
772
+ },
773
+ "yauzl": {
774
+ "version": "2.4.1",
775
+ "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.4.1.tgz",
776
+ "integrity": "sha1-lSj0QtqxsihOWLQ3m7GU4i4MQAU=",
777
+ "requires": {
778
+ "fd-slicer": "1.0.1"
779
+ }
780
+ }
781
+ }
782
+ }