graphdoc-ruby 0.1.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.
@@ -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"