graphdoc-ruby 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,104 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'bundler'
4
+
5
+ module GraphdocRuby
6
+ class Config
7
+ class InvalidConfiguration < StandardError; end
8
+
9
+ # Required: <String>
10
+ # GraphQL endpoint url or dumped schema.json path.
11
+ attr_reader :endpoint
12
+
13
+ # Optional: <String>
14
+ # Executable path of `graphdoc`.
15
+ # (default: `Bundler.which('graphdoc')`)
16
+ attr_accessor :executable_path
17
+
18
+ # Optional: <String>
19
+ # Output path for `graphdoc`. If you disabled run_time_generation, this value must be customized.
20
+ # (default: `File.join(Dir.mktmpdir, 'graphdoc')`)
21
+ attr_reader :output_directory
22
+
23
+ # Optional: <Boolean>
24
+ # Overwrite files if generated html already exist.
25
+ # (default: true)
26
+ attr_accessor :overwrite
27
+
28
+ # Optional: <Boolean>
29
+ # Generate html with graphdoc on the first access.
30
+ # (default: true)
31
+ attr_accessor :run_time_generation
32
+
33
+ # Optional: <Proc>
34
+ # Context of your graphql.
35
+ # (default: -> {})
36
+ attr_accessor :graphql_context
37
+
38
+ # Optional: <Proc>
39
+ # Query of your graphql.
40
+ # (default: -> {})
41
+ attr_accessor :graphql_query
42
+
43
+ # Optional: <String>
44
+ # Schema name of your graphql-ruby. It is necessary when generating schema.json.
45
+ # (default: nil)
46
+ attr_accessor :schema_name
47
+
48
+ # no doc
49
+ attr_reader :mtime
50
+
51
+ def initialize
52
+ self.endpoint = nil
53
+ self.executable_path = Bundler.which('graphdoc')
54
+ self.output_directory = default_output_directory
55
+ self.overwrite = true
56
+ self.run_time_generation = true
57
+ self.schema_name = nil
58
+ self.graphql_context = -> {}
59
+ self.graphql_query = -> {}
60
+
61
+ @use_temporary_output_directory = true
62
+ @mtime = Time.now
63
+ end
64
+
65
+ def endpoint=(value)
66
+ @endpoint = value.to_s
67
+ end
68
+
69
+ def output_directory=(value)
70
+ @output_directory = value.to_s
71
+ @use_temporary_output_directory = false
72
+ end
73
+
74
+ def evaluate_graphql_context
75
+ hash = self.graphql_context.call
76
+ hash if hash.is_a?(Hash)
77
+ end
78
+
79
+ def evaluate_graphql_query
80
+ hash = self.graphql_query.call
81
+ hash if hash.is_a?(Hash)
82
+ end
83
+
84
+ def assert_configuration!
85
+ unless endpoint
86
+ raise InvalidConfiguration, "(endpoint: '#{endpoint}') must be GraphQL endpoint url or dumped schema.json path."
87
+ end
88
+
89
+ if @use_temporary_output_directory && !run_time_generation
90
+ raise InvalidConfiguration, 'If you disabled run_time_generation, static `output_directory` must be set.'
91
+ end
92
+
93
+ unless File.executable?(executable_path)
94
+ raise InvalidConfiguration, '`graphdoc` not found. Please install graphdoc (npm install -g @2fd/graphdoc)'
95
+ end
96
+ end
97
+
98
+ private
99
+
100
+ def default_output_directory
101
+ File.join(Dir.mktmpdir, 'graphdoc')
102
+ end
103
+ end
104
+ end
@@ -0,0 +1,58 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'open3'
4
+ module GraphdocRuby
5
+ class Graphdoc
6
+ def initialize(output:, endpoint:, overwrite:, executable:, mtime:, query: {}, context: {})
7
+ @endpoint = endpoint
8
+ @executable = executable
9
+ @overwrite = overwrite
10
+ @mtime = mtime
11
+
12
+ @output_html = File.join(output, 'index.html')
13
+ @options = ['--output', output]
14
+ @options += ['--force'] if overwrite
15
+
16
+ if query && !query.empty?
17
+ query.each do |key_value|
18
+ @options += ['--query', key_value.join('=')]
19
+ end
20
+ end
21
+
22
+ if context && !context.empty?
23
+ context.each do |key_value|
24
+ @options += ['--header', key_value.join(': ')]
25
+ end
26
+ end
27
+ end
28
+
29
+ def generate_document!
30
+ return if generated?
31
+
32
+ message, status = Open3.capture2e(*command)
33
+ raise "Command failed. (#{command}) '#{message}'" unless status.success?
34
+ end
35
+
36
+ private
37
+
38
+ def generated?
39
+ GraphdocRuby::Utils.file_exist?(@output_html) && (!@overwrite || (@overwrite && regenerated?))
40
+ end
41
+
42
+ def regenerated?
43
+ File::Stat.new(@output_html).mtime >= @mtime
44
+ rescue Errno::ENOENT
45
+ false
46
+ end
47
+
48
+ def command
49
+ if GraphdocRuby::Utils.valid_url?(@endpoint)
50
+ [@executable, '--endpoint', @endpoint, *@options]
51
+ elsif GraphdocRuby::Utils.file_exist?(@endpoint)
52
+ [@executable, '--schema-file', @endpoint, *@options]
53
+ else
54
+ raise "Invalid endpoint given. endpoint(#{@endpoint}) must be valid URL or existing schema file"
55
+ end
56
+ end
57
+ end
58
+ end
@@ -0,0 +1,38 @@
1
+ require 'fileutils'
2
+
3
+ module GraphdocRuby
4
+ class GraphqlJson
5
+ def self.write_schema_json
6
+ context = GraphdocRuby.config.evaluate_graphql_context || {}
7
+
8
+ new(
9
+ GraphdocRuby.config.schema_name,
10
+ GraphdocRuby.config.endpoint,
11
+ context
12
+ ).write_json
13
+ end
14
+
15
+ def initialize(schema_name, output_file, context = {})
16
+ @schema_name = schema_name
17
+ @output_file = output_file
18
+ @context = context
19
+ end
20
+
21
+ def write_json
22
+ json = schema.to_json(context: @context)
23
+
24
+ directory = File.dirname(@output_file)
25
+ FileUtils.mkdir_p(directory)
26
+
27
+ File.write(@output_file, json)
28
+ end
29
+
30
+ private
31
+
32
+ def schema
33
+ @schema ||= Object.const_get(@schema_name.to_s)
34
+ rescue
35
+ raise GraphdocRuby::Config::InvalidConfiguration, "(schema_name: #{@schema_name}) must be GraphQL Schema"
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,11 @@
1
+ # frozen_string_literal: true
2
+
3
+ module GraphdocRuby
4
+ class Railtie < Rails::Railtie
5
+ rake_tasks do
6
+ require 'graphdoc-ruby/rake_task'
7
+
8
+ GraphdocRuby::RakeTask.new
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,41 @@
1
+ require 'graphdoc-ruby'
2
+
3
+ module GraphdocRuby
4
+ class RakeTask
5
+ include Rake::DSL
6
+
7
+ # Set the parameters of this task by passing keyword arguments
8
+ # or assigning attributes inside the block
9
+ def initialize
10
+ dependencies = if defined?(::Rails)
11
+ [:environment]
12
+ else
13
+ []
14
+ end
15
+
16
+ define_tasks(dependencies)
17
+ end
18
+
19
+ private
20
+
21
+ def define_tasks(dependencies)
22
+ namespace :graphdoc do
23
+ desc 'Dump GraphQL schema to endpoint'
24
+ task dump_schema: dependencies do
25
+ require 'graphdoc-ruby/graphql_json'
26
+ raise(ArgumentError, 'GraphdocRuby.config.schema_name is required.') unless GraphdocRuby.config.schema_name
27
+
28
+ puts "-- Write schema.json to #{GraphdocRuby.config.endpoint}"
29
+ GraphdocRuby::GraphqlJson.write_schema_json
30
+ end
31
+
32
+ desc 'Generate html with graphdoc'
33
+ task generate: dependencies do
34
+ puts "-- Generate html with graphdoc from #{GraphdocRuby.config.endpoint}"
35
+ GraphdocRuby::Application.graphdoc.generate_document!
36
+ puts "-- Generated html to #{GraphdocRuby.config.output_directory}"
37
+ end
38
+ end
39
+ end
40
+ end
41
+ end
@@ -0,0 +1,37 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'rack/utils'
4
+ require 'active_support/core_ext/uri'
5
+
6
+ module GraphdocRuby
7
+ class Static
8
+ def initialize(root, headers: {})
9
+ @root = root.chomp('/')
10
+ @file_server = ::Rack::File.new(@root, headers)
11
+ end
12
+
13
+ def match?(path)
14
+ path = ::Rack::Utils.unescape_path(path)
15
+ return false unless ::Rack::Utils.valid_path? path
16
+ path = ::Rack::Utils.clean_path_info(path)
17
+
18
+ candidate_paths = [path, "#{path}.html", "#{path}/index.html"]
19
+
20
+ match = candidate_paths.detect do |candidate_path|
21
+ absolute_path = File.join(@root, candidate_path.dup.force_encoding(Encoding::UTF_8))
22
+
23
+ begin
24
+ File.file?(absolute_path) && File.readable?(absolute_path)
25
+ rescue SystemCallError
26
+ false
27
+ end
28
+ end
29
+
30
+ ::Rack::Utils.escape_path(match) if match
31
+ end
32
+
33
+ def serve(request)
34
+ @file_server.call(request.env)
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,16 @@
1
+ module GraphdocRuby
2
+ module Utils
3
+ extend self
4
+
5
+ def valid_url?(url)
6
+ uri = URI.parse(url)
7
+ uri.host
8
+ rescue StandardError
9
+ false
10
+ end
11
+
12
+ def file_exist?(path)
13
+ File.exist?(path)
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ module GraphdocRuby
4
+ VERSION = '0.1.0'
5
+ end
@@ -0,0 +1,22 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'rack'
4
+ require 'graphdoc-ruby/utils'
5
+ require 'graphdoc-ruby/graphdoc'
6
+ require 'graphdoc-ruby/static'
7
+ require 'graphdoc-ruby/application'
8
+ require 'graphdoc-ruby/config'
9
+ require 'graphdoc-ruby/graphql_json'
10
+ require 'graphdoc-ruby/version'
11
+
12
+ module GraphdocRuby
13
+ def self.config
14
+ @config ||= GraphdocRuby::Config.new
15
+ end
16
+
17
+ def self.configure
18
+ yield(config)
19
+ end
20
+ end
21
+
22
+ require 'graphdoc-ruby/railtie' if defined?(Rails)
@@ -0,0 +1,7 @@
1
+ {
2
+ "name": "graphdoc-ruby",
3
+ "private": true,
4
+ "dependencies": {
5
+ "@2fd/graphdoc": "^2.4.0"
6
+ }
7
+ }
@@ -0,0 +1,455 @@
1
+ # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
2
+ # yarn lockfile v1
3
+
4
+
5
+ "@2fd/command@^1.1.2":
6
+ version "1.1.2"
7
+ resolved "https://registry.yarnpkg.com/@2fd/command/-/command-1.1.2.tgz#b831d511bdd3b4e2d88139aaddb06d3d6aa0b08a"
8
+
9
+ "@2fd/graphdoc@^2.4.0":
10
+ version "2.4.0"
11
+ resolved "https://registry.yarnpkg.com/@2fd/graphdoc/-/graphdoc-2.4.0.tgz#ebfabd0b09487ce9db8db901a66f1917a025a808"
12
+ dependencies:
13
+ "@2fd/command" "^1.1.2"
14
+ bluebird "^3.5.0"
15
+ fs-extra "^0.30.0"
16
+ glob "^7.1.0"
17
+ graphql "^0.7.0"
18
+ marked "^0.3.6"
19
+ mustache "^2.2.1"
20
+ request "^2.79.0"
21
+ slug "^0.9.1"
22
+ striptags "^3.0.1"
23
+ word-wrap "^1.2.1"
24
+
25
+ ajv@^5.1.0:
26
+ version "5.5.2"
27
+ resolved "https://registry.yarnpkg.com/ajv/-/ajv-5.5.2.tgz#73b5eeca3fab653e3d3f9422b341ad42205dc965"
28
+ dependencies:
29
+ co "^4.6.0"
30
+ fast-deep-equal "^1.0.0"
31
+ fast-json-stable-stringify "^2.0.0"
32
+ json-schema-traverse "^0.3.0"
33
+
34
+ asn1@~0.2.3:
35
+ version "0.2.3"
36
+ resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.3.tgz#dac8787713c9966849fc8180777ebe9c1ddf3b86"
37
+
38
+ assert-plus@1.0.0, assert-plus@^1.0.0:
39
+ version "1.0.0"
40
+ resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525"
41
+
42
+ asynckit@^0.4.0:
43
+ version "0.4.0"
44
+ resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79"
45
+
46
+ aws-sign2@~0.7.0:
47
+ version "0.7.0"
48
+ resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8"
49
+
50
+ aws4@^1.6.0:
51
+ version "1.6.0"
52
+ resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.6.0.tgz#83ef5ca860b2b32e4a0deedee8c771b9db57471e"
53
+
54
+ balanced-match@^1.0.0:
55
+ version "1.0.0"
56
+ resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767"
57
+
58
+ bcrypt-pbkdf@^1.0.0:
59
+ version "1.0.1"
60
+ resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz#63bc5dcb61331b92bc05fd528953c33462a06f8d"
61
+ dependencies:
62
+ tweetnacl "^0.14.3"
63
+
64
+ bluebird@^3.5.0:
65
+ version "3.5.1"
66
+ resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.1.tgz#d9551f9de98f1fcda1e683d17ee91a0602ee2eb9"
67
+
68
+ boom@4.x.x:
69
+ version "4.3.1"
70
+ resolved "https://registry.yarnpkg.com/boom/-/boom-4.3.1.tgz#4f8a3005cb4a7e3889f749030fd25b96e01d2e31"
71
+ dependencies:
72
+ hoek "4.x.x"
73
+
74
+ boom@5.x.x:
75
+ version "5.2.0"
76
+ resolved "https://registry.yarnpkg.com/boom/-/boom-5.2.0.tgz#5dd9da6ee3a5f302077436290cb717d3f4a54e02"
77
+ dependencies:
78
+ hoek "4.x.x"
79
+
80
+ brace-expansion@^1.1.7:
81
+ version "1.1.8"
82
+ resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.8.tgz#c07b211c7c952ec1f8efd51a77ef0d1d3990a292"
83
+ dependencies:
84
+ balanced-match "^1.0.0"
85
+ concat-map "0.0.1"
86
+
87
+ caseless@~0.12.0:
88
+ version "0.12.0"
89
+ resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc"
90
+
91
+ co@^4.6.0:
92
+ version "4.6.0"
93
+ resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184"
94
+
95
+ combined-stream@^1.0.5, combined-stream@~1.0.5:
96
+ version "1.0.5"
97
+ resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.5.tgz#938370a57b4a51dea2c77c15d5c5fdf895164009"
98
+ dependencies:
99
+ delayed-stream "~1.0.0"
100
+
101
+ concat-map@0.0.1:
102
+ version "0.0.1"
103
+ resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
104
+
105
+ core-util-is@1.0.2:
106
+ version "1.0.2"
107
+ resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7"
108
+
109
+ cryptiles@3.x.x:
110
+ version "3.1.2"
111
+ resolved "https://registry.yarnpkg.com/cryptiles/-/cryptiles-3.1.2.tgz#a89fbb220f5ce25ec56e8c4aa8a4fd7b5b0d29fe"
112
+ dependencies:
113
+ boom "5.x.x"
114
+
115
+ dashdash@^1.12.0:
116
+ version "1.14.1"
117
+ resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0"
118
+ dependencies:
119
+ assert-plus "^1.0.0"
120
+
121
+ delayed-stream@~1.0.0:
122
+ version "1.0.0"
123
+ resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619"
124
+
125
+ ecc-jsbn@~0.1.1:
126
+ version "0.1.1"
127
+ resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz#0fc73a9ed5f0d53c38193398523ef7e543777505"
128
+ dependencies:
129
+ jsbn "~0.1.0"
130
+
131
+ extend@~3.0.1:
132
+ version "3.0.1"
133
+ resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.1.tgz#a755ea7bc1adfcc5a31ce7e762dbaadc5e636444"
134
+
135
+ extsprintf@1.3.0:
136
+ version "1.3.0"
137
+ resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05"
138
+
139
+ extsprintf@^1.2.0:
140
+ version "1.4.0"
141
+ resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f"
142
+
143
+ fast-deep-equal@^1.0.0:
144
+ version "1.0.0"
145
+ resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-1.0.0.tgz#96256a3bc975595eb36d82e9929d060d893439ff"
146
+
147
+ fast-json-stable-stringify@^2.0.0:
148
+ version "2.0.0"
149
+ resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz#d5142c0caee6b1189f87d3a76111064f86c8bbf2"
150
+
151
+ forever-agent@~0.6.1:
152
+ version "0.6.1"
153
+ resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91"
154
+
155
+ form-data@~2.3.1:
156
+ version "2.3.1"
157
+ resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.1.tgz#6fb94fbd71885306d73d15cc497fe4cc4ecd44bf"
158
+ dependencies:
159
+ asynckit "^0.4.0"
160
+ combined-stream "^1.0.5"
161
+ mime-types "^2.1.12"
162
+
163
+ fs-extra@^0.30.0:
164
+ version "0.30.0"
165
+ resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-0.30.0.tgz#f233ffcc08d4da7d432daa449776989db1df93f0"
166
+ dependencies:
167
+ graceful-fs "^4.1.2"
168
+ jsonfile "^2.1.0"
169
+ klaw "^1.0.0"
170
+ path-is-absolute "^1.0.0"
171
+ rimraf "^2.2.8"
172
+
173
+ fs.realpath@^1.0.0:
174
+ version "1.0.0"
175
+ resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"
176
+
177
+ getpass@^0.1.1:
178
+ version "0.1.7"
179
+ resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa"
180
+ dependencies:
181
+ assert-plus "^1.0.0"
182
+
183
+ glob@^7.0.5, glob@^7.1.0:
184
+ version "7.1.2"
185
+ resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.2.tgz#c19c9df9a028702d678612384a6552404c636d15"
186
+ dependencies:
187
+ fs.realpath "^1.0.0"
188
+ inflight "^1.0.4"
189
+ inherits "2"
190
+ minimatch "^3.0.4"
191
+ once "^1.3.0"
192
+ path-is-absolute "^1.0.0"
193
+
194
+ graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.1.9:
195
+ version "4.1.11"
196
+ resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658"
197
+
198
+ graphql@^0.7.0:
199
+ version "0.7.2"
200
+ resolved "https://registry.yarnpkg.com/graphql/-/graphql-0.7.2.tgz#cc894a32823399b8a0cb012b9e9ecad35cd00f72"
201
+ dependencies:
202
+ iterall "1.0.2"
203
+
204
+ har-schema@^2.0.0:
205
+ version "2.0.0"
206
+ resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92"
207
+
208
+ har-validator@~5.0.3:
209
+ version "5.0.3"
210
+ resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.0.3.tgz#ba402c266194f15956ef15e0fcf242993f6a7dfd"
211
+ dependencies:
212
+ ajv "^5.1.0"
213
+ har-schema "^2.0.0"
214
+
215
+ hawk@~6.0.2:
216
+ version "6.0.2"
217
+ resolved "https://registry.yarnpkg.com/hawk/-/hawk-6.0.2.tgz#af4d914eb065f9b5ce4d9d11c1cb2126eecc3038"
218
+ dependencies:
219
+ boom "4.x.x"
220
+ cryptiles "3.x.x"
221
+ hoek "4.x.x"
222
+ sntp "2.x.x"
223
+
224
+ hoek@4.x.x:
225
+ version "4.2.0"
226
+ resolved "https://registry.yarnpkg.com/hoek/-/hoek-4.2.0.tgz#72d9d0754f7fe25ca2d01ad8f8f9a9449a89526d"
227
+
228
+ http-signature@~1.2.0:
229
+ version "1.2.0"
230
+ resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1"
231
+ dependencies:
232
+ assert-plus "^1.0.0"
233
+ jsprim "^1.2.2"
234
+ sshpk "^1.7.0"
235
+
236
+ inflight@^1.0.4:
237
+ version "1.0.6"
238
+ resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9"
239
+ dependencies:
240
+ once "^1.3.0"
241
+ wrappy "1"
242
+
243
+ inherits@2:
244
+ version "2.0.3"
245
+ resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de"
246
+
247
+ is-typedarray@~1.0.0:
248
+ version "1.0.0"
249
+ resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a"
250
+
251
+ isstream@~0.1.2:
252
+ version "0.1.2"
253
+ resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a"
254
+
255
+ iterall@1.0.2:
256
+ version "1.0.2"
257
+ resolved "https://registry.yarnpkg.com/iterall/-/iterall-1.0.2.tgz#41a2e96ce9eda5e61c767ee5dc312373bb046e91"
258
+
259
+ jsbn@~0.1.0:
260
+ version "0.1.1"
261
+ resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513"
262
+
263
+ json-schema-traverse@^0.3.0:
264
+ version "0.3.1"
265
+ resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz#349a6d44c53a51de89b40805c5d5e59b417d3340"
266
+
267
+ json-schema@0.2.3:
268
+ version "0.2.3"
269
+ resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13"
270
+
271
+ json-stringify-safe@~5.0.1:
272
+ version "5.0.1"
273
+ resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb"
274
+
275
+ jsonfile@^2.1.0:
276
+ version "2.4.0"
277
+ resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-2.4.0.tgz#3736a2b428b87bbda0cc83b53fa3d633a35c2ae8"
278
+ optionalDependencies:
279
+ graceful-fs "^4.1.6"
280
+
281
+ jsprim@^1.2.2:
282
+ version "1.4.1"
283
+ resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2"
284
+ dependencies:
285
+ assert-plus "1.0.0"
286
+ extsprintf "1.3.0"
287
+ json-schema "0.2.3"
288
+ verror "1.10.0"
289
+
290
+ klaw@^1.0.0:
291
+ version "1.3.1"
292
+ resolved "https://registry.yarnpkg.com/klaw/-/klaw-1.3.1.tgz#4088433b46b3b1ba259d78785d8e96f73ba02439"
293
+ optionalDependencies:
294
+ graceful-fs "^4.1.9"
295
+
296
+ marked@^0.3.6:
297
+ version "0.3.9"
298
+ resolved "https://registry.yarnpkg.com/marked/-/marked-0.3.9.tgz#54ce6a57e720c3ac6098374ec625fcbcc97ff290"
299
+
300
+ mime-db@~1.30.0:
301
+ version "1.30.0"
302
+ resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.30.0.tgz#74c643da2dd9d6a45399963465b26d5ca7d71f01"
303
+
304
+ mime-types@^2.1.12, mime-types@~2.1.17:
305
+ version "2.1.17"
306
+ resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.17.tgz#09d7a393f03e995a79f8af857b70a9e0ab16557a"
307
+ dependencies:
308
+ mime-db "~1.30.0"
309
+
310
+ minimatch@^3.0.4:
311
+ version "3.0.4"
312
+ resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083"
313
+ dependencies:
314
+ brace-expansion "^1.1.7"
315
+
316
+ mustache@^2.2.1:
317
+ version "2.3.0"
318
+ resolved "https://registry.yarnpkg.com/mustache/-/mustache-2.3.0.tgz#4028f7778b17708a489930a6e52ac3bca0da41d0"
319
+
320
+ oauth-sign@~0.8.2:
321
+ version "0.8.2"
322
+ resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.8.2.tgz#46a6ab7f0aead8deae9ec0565780b7d4efeb9d43"
323
+
324
+ once@^1.3.0:
325
+ version "1.4.0"
326
+ resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1"
327
+ dependencies:
328
+ wrappy "1"
329
+
330
+ path-is-absolute@^1.0.0:
331
+ version "1.0.1"
332
+ resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"
333
+
334
+ performance-now@^2.1.0:
335
+ version "2.1.0"
336
+ resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b"
337
+
338
+ punycode@^1.4.1:
339
+ version "1.4.1"
340
+ resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e"
341
+
342
+ qs@~6.5.1:
343
+ version "6.5.1"
344
+ resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.1.tgz#349cdf6eef89ec45c12d7d5eb3fc0c870343a6d8"
345
+
346
+ request@^2.79.0:
347
+ version "2.83.0"
348
+ resolved "https://registry.yarnpkg.com/request/-/request-2.83.0.tgz#ca0b65da02ed62935887808e6f510381034e3356"
349
+ dependencies:
350
+ aws-sign2 "~0.7.0"
351
+ aws4 "^1.6.0"
352
+ caseless "~0.12.0"
353
+ combined-stream "~1.0.5"
354
+ extend "~3.0.1"
355
+ forever-agent "~0.6.1"
356
+ form-data "~2.3.1"
357
+ har-validator "~5.0.3"
358
+ hawk "~6.0.2"
359
+ http-signature "~1.2.0"
360
+ is-typedarray "~1.0.0"
361
+ isstream "~0.1.2"
362
+ json-stringify-safe "~5.0.1"
363
+ mime-types "~2.1.17"
364
+ oauth-sign "~0.8.2"
365
+ performance-now "^2.1.0"
366
+ qs "~6.5.1"
367
+ safe-buffer "^5.1.1"
368
+ stringstream "~0.0.5"
369
+ tough-cookie "~2.3.3"
370
+ tunnel-agent "^0.6.0"
371
+ uuid "^3.1.0"
372
+
373
+ rimraf@^2.2.8:
374
+ version "2.6.2"
375
+ resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.2.tgz#2ed8150d24a16ea8651e6d6ef0f47c4158ce7a36"
376
+ dependencies:
377
+ glob "^7.0.5"
378
+
379
+ safe-buffer@^5.0.1, safe-buffer@^5.1.1:
380
+ version "5.1.1"
381
+ resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.1.tgz#893312af69b2123def71f57889001671eeb2c853"
382
+
383
+ slug@^0.9.1:
384
+ version "0.9.1"
385
+ resolved "https://registry.yarnpkg.com/slug/-/slug-0.9.1.tgz#af08f608a7c11516b61778aa800dce84c518cfda"
386
+ dependencies:
387
+ unicode ">= 0.3.1"
388
+
389
+ sntp@2.x.x:
390
+ version "2.1.0"
391
+ resolved "https://registry.yarnpkg.com/sntp/-/sntp-2.1.0.tgz#2c6cec14fedc2222739caf9b5c3d85d1cc5a2cc8"
392
+ dependencies:
393
+ hoek "4.x.x"
394
+
395
+ sshpk@^1.7.0:
396
+ version "1.13.1"
397
+ resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.13.1.tgz#512df6da6287144316dc4c18fe1cf1d940739be3"
398
+ dependencies:
399
+ asn1 "~0.2.3"
400
+ assert-plus "^1.0.0"
401
+ dashdash "^1.12.0"
402
+ getpass "^0.1.1"
403
+ optionalDependencies:
404
+ bcrypt-pbkdf "^1.0.0"
405
+ ecc-jsbn "~0.1.1"
406
+ jsbn "~0.1.0"
407
+ tweetnacl "~0.14.0"
408
+
409
+ stringstream@~0.0.5:
410
+ version "0.0.5"
411
+ resolved "https://registry.yarnpkg.com/stringstream/-/stringstream-0.0.5.tgz#4e484cd4de5a0bbbee18e46307710a8a81621878"
412
+
413
+ striptags@^3.0.1:
414
+ version "3.1.1"
415
+ resolved "https://registry.yarnpkg.com/striptags/-/striptags-3.1.1.tgz#c8c3e7fdd6fb4bb3a32a3b752e5b5e3e38093ebd"
416
+
417
+ tough-cookie@~2.3.3:
418
+ version "2.3.3"
419
+ resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.3.3.tgz#0b618a5565b6dea90bf3425d04d55edc475a7561"
420
+ dependencies:
421
+ punycode "^1.4.1"
422
+
423
+ tunnel-agent@^0.6.0:
424
+ version "0.6.0"
425
+ resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd"
426
+ dependencies:
427
+ safe-buffer "^5.0.1"
428
+
429
+ tweetnacl@^0.14.3, tweetnacl@~0.14.0:
430
+ version "0.14.5"
431
+ resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64"
432
+
433
+ "unicode@>= 0.3.1":
434
+ version "10.0.0"
435
+ resolved "https://registry.yarnpkg.com/unicode/-/unicode-10.0.0.tgz#e5d51c1db93b6c71a0b879e0b0c4af7e6fdf688e"
436
+
437
+ uuid@^3.1.0:
438
+ version "3.1.0"
439
+ resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.1.0.tgz#3dd3d3e790abc24d7b0d3a034ffababe28ebbc04"
440
+
441
+ verror@1.10.0:
442
+ version "1.10.0"
443
+ resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400"
444
+ dependencies:
445
+ assert-plus "^1.0.0"
446
+ core-util-is "1.0.2"
447
+ extsprintf "^1.2.0"
448
+
449
+ word-wrap@^1.2.1:
450
+ version "1.2.3"
451
+ resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c"
452
+
453
+ wrappy@1:
454
+ version "1.0.2"
455
+ resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"