fitting 2.16.1 → 2.18.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (60) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +34 -3
  3. data/CHANGELOG.md +20 -0
  4. data/README.md +28 -4
  5. data/fitting.gemspec +9 -9
  6. data/images/example.png +0 -0
  7. data/images/example2.png +0 -0
  8. data/images/logo.png +0 -0
  9. data/lib/fitting/configuration/yaml.rb +13 -13
  10. data/lib/fitting/configuration.rb +3 -39
  11. data/lib/fitting/cover/json_schema.rb +3 -2
  12. data/lib/fitting/cover/json_schema_enum.rb +1 -1
  13. data/lib/fitting/cover/json_schema_one_of.rb +1 -1
  14. data/lib/fitting/cover/response.rb +1 -5
  15. data/lib/fitting/documentation.rb +0 -2
  16. data/lib/fitting/matchers/response_matcher.rb +2 -9
  17. data/lib/fitting/records/documented/request.rb +1 -0
  18. data/lib/fitting/records/realized_unit.rb +13 -15
  19. data/lib/fitting/records/spherical/request.rb +1 -1
  20. data/lib/fitting/records/spherical/requests.rb +2 -1
  21. data/lib/fitting/records/spherical/response.rb +2 -2
  22. data/lib/fitting/records/test_unit/request.rb +4 -0
  23. data/lib/fitting/records/tested/request.rb +4 -4
  24. data/lib/fitting/records/unit/combination.rb +5 -6
  25. data/lib/fitting/records/unit/json_schema.rb +38 -33
  26. data/lib/fitting/records/unit/request.rb +1 -0
  27. data/lib/fitting/records/unit/response.rb +1 -0
  28. data/lib/fitting/report/action.rb +6 -9
  29. data/lib/fitting/report/actions.rb +7 -5
  30. data/lib/fitting/report/combination.rb +1 -15
  31. data/lib/fitting/report/combinations.rb +4 -5
  32. data/lib/fitting/report/console.rb +1 -0
  33. data/lib/fitting/report/prefix.rb +42 -51
  34. data/lib/fitting/report/prefixes.rb +3 -3
  35. data/lib/fitting/report/response.rb +17 -18
  36. data/lib/fitting/report/responses.rb +9 -8
  37. data/lib/fitting/report/test.rb +9 -11
  38. data/lib/fitting/report/tests.rb +10 -13
  39. data/lib/fitting/request.rb +0 -1
  40. data/lib/fitting/response.rb +4 -3
  41. data/lib/fitting/statistics/cover_error.rb +2 -0
  42. data/lib/fitting/statistics/cover_error_enum.rb +2 -0
  43. data/lib/fitting/statistics/cover_error_one_of.rb +2 -0
  44. data/lib/fitting/statistics/list.rb +5 -4
  45. data/lib/fitting/statistics/not_covered_responses.rb +1 -1
  46. data/lib/fitting/statistics/percent.rb +2 -1
  47. data/lib/fitting/statistics/template.rb +10 -8
  48. data/lib/fitting/storage/responses.rb +2 -2
  49. data/lib/fitting/storage/white_list.rb +7 -0
  50. data/lib/fitting/templates/realized_template.rb +2 -0
  51. data/lib/fitting/tests.rb +1 -1
  52. data/lib/fitting/version.rb +1 -1
  53. data/lib/fitting.rb +9 -6
  54. data/lib/tasks/fitting.rake +62 -54
  55. data/lib/templates/bomboniere/package-lock.json +82 -67
  56. data/lib/templates/bomboniere/src/components/HelloWorld.vue +3 -0
  57. metadata +27 -53
  58. data/example.png +0 -0
  59. data/example2.png +0 -0
  60. data/lib/fitting/configuration/legacy.rb +0 -60
@@ -48,26 +48,28 @@ module Fitting
48
48
 
49
49
  def white_measurement
50
50
  @white_measurement ||=
51
- if @depth == 'valid'
51
+ case @depth
52
+ when 'valid'
52
53
  Fitting::Statistics::Measurement.new(white_unit)
53
- elsif @depth == 'cover'
54
+ when 'cover'
54
55
  Fitting::Statistics::MeasurementCover.new(white_unit)
55
- elsif @depth == 'cover_enum'
56
+ when 'cover_enum'
56
57
  Fitting::Statistics::MeasurementCoverEnum.new(white_unit)
57
- elsif @depth == 'cover_one_of'
58
+ when 'cover_one_of'
58
59
  Fitting::Statistics::MeasurementCoverOneOf.new(white_unit)
59
60
  end
60
61
  end
61
62
 
62
63
  def black_measurement
63
64
  @black_measurement ||=
64
- if @depth == 'valid'
65
+ case @depth
66
+ when 'valid'
65
67
  Fitting::Statistics::Measurement.new(black_unit)
66
- elsif @depth == 'cover'
68
+ when 'cover'
67
69
  Fitting::Statistics::MeasurementCover.new(black_unit)
68
- elsif @depth == 'cover_enum'
70
+ when 'cover_enum'
69
71
  Fitting::Statistics::MeasurementCoverEnum.new(black_unit)
70
- elsif @depth == 'cover_one_of'
72
+ when 'cover_one_of'
71
73
  Fitting::Statistics::MeasurementCoverOneOf.new(black_unit)
72
74
  end
73
75
  end
@@ -9,8 +9,8 @@ module Fitting
9
9
  @tested_requests = []
10
10
  end
11
11
 
12
- def add(env_response, test_title = '')
13
- @tested_requests.push(Fitting::Records::Tested::Request.new(env_response, test_title))
12
+ def add(env_response, metadata = {})
13
+ @tested_requests.push(Fitting::Records::Tested::Request.new(env_response, metadata))
14
14
  end
15
15
 
16
16
  def statistics
@@ -17,6 +17,7 @@ module Fitting
17
17
  return nil if @white_list == nil && @resource_white_list == nil && @include_resources == nil && @include_actions == nil
18
18
  return @white_list if @white_list
19
19
  return @white_list = transformation if @resource_white_list
20
+
20
21
  @white_list = {}
21
22
  @white_list.merge!(new_transformation) if @include_resources
22
23
  @white_list.merge!(postnew_transformation) if @include_actions
@@ -25,6 +26,7 @@ module Fitting
25
26
 
26
27
  def without_group
27
28
  return @without_group_list if @without_group_list
29
+
28
30
  @without_group_list = @resource_white_list.inject([]) do |all_requests, resource|
29
31
  resource_selection(resource, all_requests)
30
32
  end.flatten.uniq
@@ -43,6 +45,7 @@ module Fitting
43
45
 
44
46
  def find_warnings(resource)
45
47
  return nil if @resources[resource]
48
+
46
49
  @warnings.push(
47
50
  "FITTING WARNING: In the documentation there isn't resource from the resource_white_list #{resource}"
48
51
  )
@@ -50,6 +53,7 @@ module Fitting
50
53
 
51
54
  def puts_warnings
52
55
  return nil if @warnings == []
56
+
53
57
  warnings_string = @warnings.join("\n")
54
58
  puts "\n#{warnings_string}"
55
59
  end
@@ -93,6 +97,7 @@ module Fitting
93
97
 
94
98
  def new_without_group
95
99
  return @newwithout_group_list if @newwithout_group_list
100
+
96
101
  @newwithout_group_list = @include_resources.inject([]) do |all_requests, resource|
97
102
  if resource[0] == '/'
98
103
  new_resource_selection(resource, all_requests)
@@ -120,6 +125,7 @@ module Fitting
120
125
 
121
126
  def new_find_warnings(resource)
122
127
  return nil if @new_resources[resource]
128
+
123
129
  @warnings.push(
124
130
  "FITTING WARNING: In the documentation there isn't resource from the resource_white_list #{resource}"
125
131
  )
@@ -135,6 +141,7 @@ module Fitting
135
141
 
136
142
  def postnew_without_group
137
143
  return @postnewwithout_group_list if @postnewwithout_group_list
144
+
138
145
  @postnewwithout_group_list = @include_actions.inject([]) do |all_requests, resource|
139
146
  method, path = resource.split(' ')
140
147
  if path[0] == '/'
@@ -27,8 +27,10 @@ module Fitting
27
27
  all_good = requests.all?(&:valid_json_schemas?)
28
28
  res += "path: #{key} #{all_good ? '✔' : '✖'}\n"
29
29
  next if all_good
30
+
30
31
  requests.map do |request|
31
32
  next if request.valid_json_schemas?
33
+
32
34
  res += " full path: #{request.test_path} ✖\n"
33
35
  res += " request.method #{request.method}\n"
34
36
  res += " request.path #{request.path}\n"
data/lib/fitting/tests.rb CHANGED
@@ -13,7 +13,7 @@ module Fitting
13
13
  end
14
14
  json = JSON.dump(array)
15
15
 
16
- File.open("fitting_tests/test#{ENV["TEST_ENV_NUMBER"]}.json", 'w') { |file| file.write(json) }
16
+ File.open("fitting_tests/test#{ENV['TEST_ENV_NUMBER']}.json", 'w') { |file| file.write(json) }
17
17
  end
18
18
 
19
19
  def make_dir(dir_name)
@@ -1,3 +1,3 @@
1
1
  module Fitting
2
- VERSION = '2.16.1'.freeze
2
+ VERSION = '2.18.2'.freeze
3
3
  end
data/lib/fitting.rb CHANGED
@@ -16,7 +16,6 @@ module Fitting
16
16
  end
17
17
 
18
18
  def statistics
19
- puts 'DEPRECATED: deprecated method statistics, use new method save_test_data'
20
19
  responses = Fitting::Storage::Responses.new
21
20
 
22
21
  RSpec.configure do |config|
@@ -30,18 +29,21 @@ module Fitting
30
29
  end
31
30
  end
32
31
 
32
+ extend Gem::Deprecate
33
+ deprecate :statistics, :save_test_data, 2022, 1
34
+
33
35
  def save_test_data
34
36
  responses = Fitting::Storage::Responses.new
35
37
 
36
- FileUtils.rm_r Dir.glob("fitting_tests/*"), :force => true
38
+ FileUtils.rm_r Dir.glob('fitting_tests/*'), force: true
37
39
 
38
40
  RSpec.configure do |config|
39
- config.after(:each, type: :request) do
40
- responses.add(response, inspect)
41
+ config.after(:each, type: :request) do |example|
42
+ responses.add(response, example.metadata)
41
43
  end
42
44
 
43
- config.after(:each, type: :controller) do
44
- responses.add(response, inspect)
45
+ config.after(:each, type: :controller) do |example|
46
+ responses.add(response, example.metadata)
45
47
  end
46
48
 
47
49
  config.after(:suite) do
@@ -61,6 +63,7 @@ module Fitting
61
63
 
62
64
  def self.load_tasks
63
65
  return if loaded_tasks
66
+
64
67
  self.loaded_tasks = true
65
68
 
66
69
  Dir[File.join(File.dirname(__FILE__), 'tasks', '**/*.rake')].each do |rake|
@@ -22,29 +22,33 @@ namespace :fitting do
22
22
  end
23
23
 
24
24
  prefixes.to_a.map do |prefix|
25
+ next if prefix.skip?
26
+
25
27
  prefix.actions.to_a.map do |action|
26
28
  action.responses.join(action.tests)
27
- end unless prefix.skip?
29
+ end
28
30
  end
29
31
 
30
32
  prefixes.to_a.map do |prefix|
33
+ next if prefix.skip?
34
+
31
35
  prefix.actions.to_a.map do |action|
32
36
  action.responses.to_a.map do |response|
33
37
  response.combinations.join(response.tests)
34
38
  end
35
- end unless prefix.skip?
39
+ end
36
40
  end
37
41
 
38
42
  report = JSON.pretty_generate(
39
- {
40
- tests_without_prefixes: tests.without_prefixes,
41
- prefixes_details: prefixes.to_a.map { |p| p.details }
42
- }
43
+ {
44
+ tests_without_prefixes: tests.without_prefixes,
45
+ prefixes_details: prefixes.to_a.map(&:details)
46
+ }
43
47
  )
44
48
 
45
49
  destination = 'fitting'
46
50
  FileUtils.mkdir_p(destination)
47
- FileUtils.rm_r Dir.glob("#{destination}/*"), :force => true
51
+ FileUtils.rm_r Dir.glob("#{destination}/*"), force: true
48
52
  File.open('fitting/report.json', 'w') { |file| file.write(report) }
49
53
 
50
54
  gem_path = $LOAD_PATH.find { |i| i.include?('fitting') }
@@ -54,6 +58,8 @@ namespace :fitting do
54
58
  json_schemas = {}
55
59
  combinations = {}
56
60
  prefixes.to_a.map do |prefix|
61
+ next if prefix.skip?
62
+
57
63
  prefix.actions.to_a.map do |action|
58
64
  action.responses.to_a.map do |response|
59
65
  json_schemas.merge!(response.id => response.body)
@@ -61,24 +67,24 @@ namespace :fitting do
61
67
  combinations.merge!(combination.id => combination.json_schema)
62
68
  end
63
69
  end
64
- end unless prefix.skip?
70
+ end
65
71
  end
66
72
  File.open('fitting/json_schemas.json', 'w') { |file| file.write(JSON.pretty_generate(json_schemas)) }
67
73
  File.open('fitting/combinations.json', 'w') { |file| file.write(JSON.pretty_generate(combinations)) }
68
74
  File.open('fitting/tests.json', 'w') { |file| file.write(JSON.pretty_generate(tests.to_h)) }
69
75
 
70
- js_path = Dir["#{destination}/js/*"].find { |f| f[0..14] == 'fitting/js/app.' and f[-3..-1] == '.js' }
76
+ js_path = Dir["#{destination}/js/*"].find { |f| f[0..14] == 'fitting/js/app.' and f[-3..] == '.js' }
71
77
  js_file = File.read(js_path)
72
- new_js_file = js_file.gsub("{stub:\"prefixes report\"}", report)
73
- new_js_file = new_js_file.gsub("{stub:\"for action page\"}", report)
74
- new_js_file = new_js_file.gsub("{stub:\"json-schemas\"}", JSON.pretty_generate(json_schemas))
75
- new_js_file = new_js_file.gsub("{stub:\"combinations\"}", JSON.pretty_generate(combinations))
76
- new_js_file = new_js_file.gsub("{stub:\"tests\"}", JSON.pretty_generate(tests.to_h))
78
+ new_js_file = js_file.gsub('{stub:"prefixes report"}', report)
79
+ new_js_file = new_js_file.gsub('{stub:"for action page"}', report)
80
+ new_js_file = new_js_file.gsub('{stub:"json-schemas"}', JSON.pretty_generate(json_schemas))
81
+ new_js_file = new_js_file.gsub('{stub:"combinations"}', JSON.pretty_generate(combinations))
82
+ new_js_file = new_js_file.gsub('{stub:"tests"}', JSON.pretty_generate(tests.to_h))
77
83
  File.open(js_path, 'w') { |file| file.write(new_js_file) }
78
84
 
79
85
  console = Fitting::Report::Console.new(
80
- tests.without_prefixes,
81
- prefixes.to_a.map { |p| p.details }
86
+ tests.without_prefixes,
87
+ prefixes.to_a.map(&:details)
82
88
  )
83
89
 
84
90
  puts console.output
@@ -88,53 +94,53 @@ namespace :fitting do
88
94
  exit 0
89
95
 
90
96
  actions.map do |action|
91
- action.to_hash["responses"].map do |response|
97
+ action.to_hash['responses'].map do |response|
92
98
  response['combination'] ||= []
93
- combinations = Fitting::Cover::JSONSchema.new(response['body']).combi + Fitting::Cover::JSONSchemaEnum.new(response['body']).combi + Fitting::Cover::JSONSchemaOneOf.new(response['body']).combi
94
- if combinations != []
95
- combinations.map do |combination|
96
- response['combination'].push(
97
- {
98
- 'json_schema' => combination[0],
99
- 'type' => combination[1][0],
100
- 'combination' => combination[1][1],
101
- 'tests' => [],
102
- 'error' => []
103
- }
104
- )
105
- end
99
+ combinations = Fitting::Cover::JSONSchema.new(response['body']).combi +
100
+ Fitting::Cover::JSONSchemaEnum.new(response['body']).combi +
101
+ Fitting::Cover::JSONSchemaOneOf.new(response['body']).combi
102
+ next unless combinations != []
103
+
104
+ combinations.map do |combination|
105
+ response['combination'].push(
106
+ {
107
+ 'json_schema' => combination[0],
108
+ 'type' => combination[1][0],
109
+ 'combination' => combination[1][1],
110
+ 'tests' => [],
111
+ 'error' => []
112
+ }
113
+ )
106
114
  end
107
115
  end
108
116
  end
109
117
 
110
118
  actions.map do |action|
111
- action.to_hash["responses"].map do |response|
119
+ action.to_hash['responses'].map do |response|
112
120
  response['tests'] ||= []
113
121
  response['tests'].map do |test|
114
- if response['combination'][0]
115
- response['combination'].map do |combination|
116
- begin
117
- res = JSON::Validator.fully_validate(combination['json_schema'], test['response']['body'])
118
- if res == []
119
- combination['tests'].push(test)
120
- response['tests'] = response['tests'] - [test]
121
- next
122
- else
123
- combination['error'].push({test: test, error: res})
124
- end
125
- rescue JSON::Schema::SchemaError => error
126
- combination['error'].push({test: test, error: error})
127
- end
122
+ next unless response['combination'][0]
123
+
124
+ response['combination'].map do |combination|
125
+ res = JSON::Validator.fully_validate(combination['json_schema'], test['response']['body'])
126
+ if res == []
127
+ combination['tests'].push(test)
128
+ response['tests'] = response['tests'] - [test]
129
+ next
130
+ else
131
+ combination['error'].push({ test: test, error: res })
128
132
  end
133
+ rescue JSON::Schema::SchemaError => e
134
+ combination['error'].push({ test: test, error: e })
129
135
  end
130
136
  end
131
137
  end
132
138
  end
133
139
 
134
- actions_test = {actions: actions, tests: tests}
140
+ actions_test = { actions: actions, tests: tests }
135
141
 
136
142
  makedirs('fitting')
137
- File.open('fitting/old_report.json', 'w') { |file| file.write(MultiJson.dump(actions_test)) }
143
+ File.open('fitting/old_report.json', 'w') { |file| file.write(JSON.dump(actions_test)) }
138
144
  end
139
145
 
140
146
  # deprecated
@@ -154,7 +160,8 @@ namespace :fitting do
154
160
 
155
161
  desc 'Fitting documentation responses cover'
156
162
  task :documentation_responses, [:size] => :environment do |_, args|
157
- if args.size == 'xs'
163
+ case args.size
164
+ when 'xs'
158
165
  documented_unit = Fitting::Statistics::Template.new(
159
166
  Fitting::Records::Spherical::Requests.new,
160
167
  Fitting.configuration
@@ -165,7 +172,7 @@ namespace :fitting do
165
172
  puts 'Not all responses from the whitelist are covered!'
166
173
  exit 1
167
174
  end
168
- elsif args.size == 's'
175
+ when 's'
169
176
  documented_unit = Fitting::Statistics::Template.new(
170
177
  Fitting::Records::Spherical::Requests.new,
171
178
  Fitting.configuration,
@@ -177,7 +184,7 @@ namespace :fitting do
177
184
  puts 'Not all responses from the whitelist are covered!'
178
185
  exit 1
179
186
  end
180
- elsif args.size == 'm'
187
+ when 'm'
181
188
  documented_unit = Fitting::Statistics::Template.new(
182
189
  Fitting::Records::Spherical::Requests.new,
183
190
  Fitting.configuration,
@@ -189,7 +196,7 @@ namespace :fitting do
189
196
  puts 'Not all responses from the whitelist are covered!'
190
197
  exit 1
191
198
  end
192
- elsif args.size == 'l'
199
+ when 'l'
193
200
  documented_unit = Fitting::Statistics::Template.new(
194
201
  Fitting::Records::Spherical::Requests.new,
195
202
  Fitting.configuration,
@@ -208,19 +215,20 @@ namespace :fitting do
208
215
 
209
216
  desc 'Fitting documentation responses cover error'
210
217
  task :documentation_responses_error, [:size] => :environment do |_, args|
211
- if args.size == 's'
218
+ case args.size
219
+ when 's'
212
220
  documented_unit = Fitting::Statistics::TemplateCoverError.new(
213
221
  Fitting::Records::Spherical::Requests.new,
214
222
  Fitting.configuration
215
223
  )
216
224
  puts documented_unit.stats
217
- elsif args.size == 'm'
225
+ when 'm'
218
226
  documented_unit = Fitting::Statistics::TemplateCoverErrorEnum.new(
219
227
  Fitting::Records::Spherical::Requests.new,
220
228
  Fitting.configuration
221
229
  )
222
230
  puts documented_unit.stats
223
- elsif args.size == 'l'
231
+ when 'l'
224
232
  documented_unit = Fitting::Statistics::TemplateCoverErrorOneOf.new(
225
233
  Fitting::Records::Spherical::Requests.new,
226
234
  Fitting.configuration
@@ -1185,15 +1185,48 @@
1185
1185
  }
1186
1186
  },
1187
1187
  "browserslist": {
1188
- "version": "4.12.2",
1189
- "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.12.2.tgz",
1190
- "integrity": "sha512-MfZaeYqR8StRZdstAK9hCKDd2StvePCYp5rHzQCPicUjfFliDgmuaBNPHYUTpAywBN8+Wc/d7NYVFkO0aqaBUw==",
1188
+ "version": "4.16.6",
1189
+ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.6.tgz",
1190
+ "integrity": "sha512-Wspk/PqO+4W9qp5iUTJsa1B/QrYn1keNCcEP5OvP7WBwT4KaDly0uONYmC6Xa3Z5IqnUgS0KcgLYu1l74x0ZXQ==",
1191
1191
  "dev": true,
1192
1192
  "requires": {
1193
- "caniuse-lite": "^1.0.30001088",
1194
- "electron-to-chromium": "^1.3.483",
1195
- "escalade": "^3.0.1",
1196
- "node-releases": "^1.1.58"
1193
+ "caniuse-lite": "^1.0.30001219",
1194
+ "colorette": "^1.2.2",
1195
+ "electron-to-chromium": "^1.3.723",
1196
+ "escalade": "^3.1.1",
1197
+ "node-releases": "^1.1.71"
1198
+ },
1199
+ "dependencies": {
1200
+ "caniuse-lite": {
1201
+ "version": "1.0.30001230",
1202
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001230.tgz",
1203
+ "integrity": "sha512-5yBd5nWCBS+jWKTcHOzXwo5xzcj4ePE/yjtkZyUV1BTUmrBaA9MRGC+e7mxnqXSA90CmCA8L3eKLaSUkt099IQ==",
1204
+ "dev": true
1205
+ },
1206
+ "colorette": {
1207
+ "version": "1.2.2",
1208
+ "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.2.tgz",
1209
+ "integrity": "sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w==",
1210
+ "dev": true
1211
+ },
1212
+ "electron-to-chromium": {
1213
+ "version": "1.3.739",
1214
+ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.739.tgz",
1215
+ "integrity": "sha512-+LPJVRsN7hGZ9EIUUiWCpO7l4E3qBYHNadazlucBfsXBbccDFNKUBAgzE68FnkWGJPwD/AfKhSzL+G+Iqb8A4A==",
1216
+ "dev": true
1217
+ },
1218
+ "escalade": {
1219
+ "version": "3.1.1",
1220
+ "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz",
1221
+ "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==",
1222
+ "dev": true
1223
+ },
1224
+ "node-releases": {
1225
+ "version": "1.1.72",
1226
+ "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.72.tgz",
1227
+ "integrity": "sha512-LLUo+PpH3dU6XizX3iVoubUNheF/owjXCZZ5yACDxNnPtgFuludV1ZL3ayK1kVep42Rmm0+R9/Y60NQbZ2bifw==",
1228
+ "dev": true
1229
+ }
1197
1230
  }
1198
1231
  },
1199
1232
  "buffer": {
@@ -1267,9 +1300,9 @@
1267
1300
  },
1268
1301
  "dependencies": {
1269
1302
  "ssri": {
1270
- "version": "6.0.1",
1271
- "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.1.tgz",
1272
- "integrity": "sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA==",
1303
+ "version": "6.0.2",
1304
+ "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.2.tgz",
1305
+ "integrity": "sha512-cepbSq/neFK7xB6A50KHN0xHDotYzq58wWCa5LeWqnPrHG8GzfEjO/4O8kpmcGW+oaxkvhEJCWgbgNk4/ZV93Q==",
1273
1306
  "dev": true,
1274
1307
  "requires": {
1275
1308
  "figgy-pudding": "^3.5.1"
@@ -1722,9 +1755,9 @@
1722
1755
  "dev": true
1723
1756
  },
1724
1757
  "color-string": {
1725
- "version": "1.5.3",
1726
- "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.5.3.tgz",
1727
- "integrity": "sha512-dC2C5qeWoYkxki5UAXapdjqO672AM4vZuPGRQfO8b5HKuKGBbKWpITyDYN7TOFKvRW7kOgAn3746clDBMDJyQw==",
1758
+ "version": "1.6.0",
1759
+ "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.6.0.tgz",
1760
+ "integrity": "sha512-c/hGS+kRWJutUBEngKKmk4iH3sD59MBkoxVapS/0wgpCz2u7XsNloxknyvBhzwEs1IbV36D9PwqLPJ2DTu3vMA==",
1728
1761
  "dev": true,
1729
1762
  "requires": {
1730
1763
  "color-name": "^1.0.0",
@@ -2693,9 +2726,9 @@
2693
2726
  "dev": true
2694
2727
  },
2695
2728
  "dns-packet": {
2696
- "version": "1.3.1",
2697
- "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-1.3.1.tgz",
2698
- "integrity": "sha512-0UxfQkMhYAUaZI+xrNZOz/as5KgDU0M/fQ9b6SpkyLbk3GEswDi6PADJVaYJradtRVsRIlF1zLyOodbcTCDzUg==",
2729
+ "version": "1.3.4",
2730
+ "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-1.3.4.tgz",
2731
+ "integrity": "sha512-BQ6F4vycLXBvdrJZ6S3gZewt6rcrks9KBgM9vrhW+knGRqc8uEdT7fuCwloc7nny5xNoMJ17HGH0R/6fpo8ECA==",
2699
2732
  "dev": true,
2700
2733
  "requires": {
2701
2734
  "ip": "^1.1.0",
@@ -2836,31 +2869,25 @@
2836
2869
  "integrity": "sha512-7vmuyh5+kuUyJKePhQfRQBhXV5Ce+RnaeeQArKu1EAMpL3WbgMt5WG6uQZpEVvYSSsxMXRKOewtDk9RaTKXRlA==",
2837
2870
  "dev": true
2838
2871
  },
2839
- "electron-to-chromium": {
2840
- "version": "1.3.483",
2841
- "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.483.tgz",
2842
- "integrity": "sha512-+05RF8S9rk8S0G8eBCqBRBaRq7+UN3lDs2DAvnG8SBSgQO3hjy0+qt4CmRk5eiuGbTcaicgXfPmBi31a+BD3lg==",
2843
- "dev": true
2844
- },
2845
2872
  "elliptic": {
2846
- "version": "6.5.3",
2847
- "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.3.tgz",
2848
- "integrity": "sha512-IMqzv5wNQf+E6aHeIqATs0tOLeOTwj1QKbRcS3jBbYkl5oLAserA8yJTT7/VyHUYG91PRmPyeQDObKLPpeS4dw==",
2873
+ "version": "6.5.4",
2874
+ "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz",
2875
+ "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==",
2849
2876
  "dev": true,
2850
2877
  "requires": {
2851
- "bn.js": "^4.4.0",
2852
- "brorand": "^1.0.1",
2878
+ "bn.js": "^4.11.9",
2879
+ "brorand": "^1.1.0",
2853
2880
  "hash.js": "^1.0.0",
2854
- "hmac-drbg": "^1.0.0",
2855
- "inherits": "^2.0.1",
2856
- "minimalistic-assert": "^1.0.0",
2857
- "minimalistic-crypto-utils": "^1.0.0"
2881
+ "hmac-drbg": "^1.0.1",
2882
+ "inherits": "^2.0.4",
2883
+ "minimalistic-assert": "^1.0.1",
2884
+ "minimalistic-crypto-utils": "^1.0.1"
2858
2885
  },
2859
2886
  "dependencies": {
2860
2887
  "bn.js": {
2861
- "version": "4.11.9",
2862
- "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz",
2863
- "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==",
2888
+ "version": "4.12.0",
2889
+ "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz",
2890
+ "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==",
2864
2891
  "dev": true
2865
2892
  }
2866
2893
  }
@@ -2978,12 +3005,6 @@
2978
3005
  "is-symbol": "^1.0.2"
2979
3006
  }
2980
3007
  },
2981
- "escalade": {
2982
- "version": "3.0.1",
2983
- "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.0.1.tgz",
2984
- "integrity": "sha512-DR6NO3h9niOT+MZs7bjxlj2a1k+POu5RN8CLTPX2+i78bRi9eLe7+0zXgUHMnGXWybYcL61E9hGhPKqedy8tQA==",
2985
- "dev": true
2986
- },
2987
3008
  "escape-html": {
2988
3009
  "version": "1.0.3",
2989
3010
  "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
@@ -3846,9 +3867,9 @@
3846
3867
  "dev": true
3847
3868
  },
3848
3869
  "hosted-git-info": {
3849
- "version": "2.8.8",
3850
- "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.8.tgz",
3851
- "integrity": "sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg==",
3870
+ "version": "2.8.9",
3871
+ "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz",
3872
+ "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==",
3852
3873
  "dev": true
3853
3874
  },
3854
3875
  "hpack.js": {
@@ -4762,9 +4783,9 @@
4762
4783
  }
4763
4784
  },
4764
4785
  "lodash": {
4765
- "version": "4.17.19",
4766
- "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.19.tgz",
4767
- "integrity": "sha512-JNvd8XER9GQX0v2qJgsaN/mzFCNA5BRe/j8JN9d+tWyGLSodKQHKFicdwNYzWwI3wjRnaKPsGj1XkBjx/F96DQ==",
4786
+ "version": "4.17.21",
4787
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
4788
+ "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==",
4768
4789
  "dev": true
4769
4790
  },
4770
4791
  "lodash.defaultsdeep": {
@@ -5295,12 +5316,6 @@
5295
5316
  }
5296
5317
  }
5297
5318
  },
5298
- "node-releases": {
5299
- "version": "1.1.58",
5300
- "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.58.tgz",
5301
- "integrity": "sha512-NxBudgVKiRh/2aPWMgPR7bPTX0VPmGx5QBwCtdHitnqFE5/O8DeBXuIMH1nwNnw/aMo6AjOrpsHzfY3UbUJ7yg==",
5302
- "dev": true
5303
- },
5304
5319
  "normalize-package-data": {
5305
5320
  "version": "2.5.0",
5306
5321
  "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz",
@@ -5747,9 +5762,9 @@
5747
5762
  "dev": true
5748
5763
  },
5749
5764
  "path-parse": {
5750
- "version": "1.0.6",
5751
- "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz",
5752
- "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==",
5765
+ "version": "1.0.7",
5766
+ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
5767
+ "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==",
5753
5768
  "dev": true
5754
5769
  },
5755
5770
  "path-to-regexp": {
@@ -5869,9 +5884,9 @@
5869
5884
  "dev": true
5870
5885
  },
5871
5886
  "postcss": {
5872
- "version": "7.0.32",
5873
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.32.tgz",
5874
- "integrity": "sha512-03eXong5NLnNCD05xscnGKGDZ98CyzoqPSMjOe6SuoQY7Z2hIj0Ld1g/O/UQRuOle2aRtiIRDg9tDcTGAkLfKw==",
5887
+ "version": "7.0.36",
5888
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz",
5889
+ "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==",
5875
5890
  "dev": true,
5876
5891
  "requires": {
5877
5892
  "chalk": "^2.4.2",
@@ -8248,9 +8263,9 @@
8248
8263
  }
8249
8264
  },
8250
8265
  "url-parse": {
8251
- "version": "1.4.7",
8252
- "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.4.7.tgz",
8253
- "integrity": "sha512-d3uaVyzDB9tQoSXFvuSUNFibTd9zxd2bkVrDRvF5TmvWWQwqE4lgYJ5m+x1DbecWkw+LK4RNl2CU1hHuOKPVlg==",
8266
+ "version": "1.5.3",
8267
+ "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.3.tgz",
8268
+ "integrity": "sha512-IIORyIQD9rvj0A4CLWsHkBBJuNqWpFQe224b6j9t/ABmquIS0qDU2pY6kl6AuOrL5OkCXHMCFNe1jBcuAggjvQ==",
8254
8269
  "dev": true,
8255
8270
  "requires": {
8256
8271
  "querystringify": "^2.1.1",
@@ -9199,9 +9214,9 @@
9199
9214
  "dev": true
9200
9215
  },
9201
9216
  "ws": {
9202
- "version": "6.2.1",
9203
- "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.1.tgz",
9204
- "integrity": "sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA==",
9217
+ "version": "6.2.2",
9218
+ "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.2.tgz",
9219
+ "integrity": "sha512-zmhltoSR8u1cnDsD43TX59mzoMZsLKqUweyYBAIvTngR3shc0W6aOZylZmq/7hqyVxPdi+5Ud2QInblgyE72fw==",
9205
9220
  "dev": true,
9206
9221
  "requires": {
9207
9222
  "async-limiter": "~1.0.0"
@@ -9214,9 +9229,9 @@
9214
9229
  "dev": true
9215
9230
  },
9216
9231
  "y18n": {
9217
- "version": "4.0.0",
9218
- "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz",
9219
- "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==",
9232
+ "version": "4.0.1",
9233
+ "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.1.tgz",
9234
+ "integrity": "sha512-wNcy4NvjMYL8gogWWYAO7ZFWFfHcbdbE57tZO8e4cbpj8tfUcwrwqSl3ad8HxpYWCdXcJUCeKKZS62Av1affwQ==",
9220
9235
  "dev": true
9221
9236
  },
9222
9237
  "yallist": {