critical-path-css-rails 0.4.0 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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
+ }