Merge ~mpontillo/maas:dns-ui--add-record into maas:master

Proposed by Mike Pontillo
Status: Superseded
Proposed branch: ~mpontillo/maas:dns-ui--add-record
Merge into: maas:master
Diff against target: 765 lines (+219/-86)
19 files modified
Makefile (+7/-1)
debian/rules (+1/-1)
package.json (+3/-2)
setup.py (+1/-1)
src/maasserver/static/js/angular/controllers/domain_details.js (+20/-4)
src/maasserver/static/js/angular/controllers/tests/test_domain_details.js (+4/-4)
src/maasserver/static/js/angular/directives/maas_obj_form.js (+17/-3)
src/maasserver/static/js/angular/directives/tests/test_maas_obj_form.js (+25/-0)
src/maasserver/static/js/angular/factories/domains.js (+12/-0)
src/maasserver/static/js/yui/io.js (+0/-0)
src/maasserver/static/js/yui/os_distro_select.js (+0/-0)
src/maasserver/static/js/yui/prefs.js (+0/-0)
src/maasserver/static/js/yui/reveal.js (+0/-0)
src/maasserver/static/js/yui/shortpoll.js (+0/-0)
src/maasserver/static/partials/domain-details.html (+48/-6)
src/maasserver/templates/maasserver/js-conf.html (+3/-0)
src/maastesting/karma.conf.js (+6/-5)
webpack.config.js (+4/-2)
yarn.lock (+68/-57)
Reviewer Review Type Date Requested Status
MAAS Maintainers Pending
Review via email: mp+341028@code.launchpad.net

Commit message

Add form to create new DNS records.

To post a comment you must log in.
~mpontillo/maas:dns-ui--add-record updated
661a207... by Mike Pontillo

Fix button alignment.

22b9d21... by Mike Pontillo

Support A and AAAA records indirectly.

055af07... by Mike Pontillo

Add options drop-down for record type.

eead99a... by Mike Pontillo

Reorganize legacy YUI code. Use built JavaScript and sourcemaps during testing.

9e45ddc... by Mike Pontillo

Remove YUI JavaScript file mistakenly added to karma config.

0bc51c7... by Mike Pontillo

Fix JavaScript tests.

Unmerged commits

0bc51c7... by Mike Pontillo

Fix JavaScript tests.

055af07... by Mike Pontillo

Add options drop-down for record type.

22b9d21... by Mike Pontillo

Support A and AAAA records indirectly.

661a207... by Mike Pontillo

Fix button alignment.

4113f5d... by Mike Pontillo

Add initial form for adding DNS records.

45aa878... by Mike Pontillo

Add 'Add record' button to domain details page.

9e45ddc... by Mike Pontillo

Remove YUI JavaScript file mistakenly added to karma config.

eead99a... by Mike Pontillo

Reorganize legacy YUI code. Use built JavaScript and sourcemaps during testing.

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1diff --git a/Makefile b/Makefile
2index 533934d..b5ba5ea 100644
3--- a/Makefile
4+++ b/Makefile
5@@ -23,7 +23,7 @@ endif
6 # Python enum modules.
7 py_enums := $(wildcard src/*/enum.py)
8 # JavaScript enum module (not modules).
9-js_enums := src/maasserver/static/js/enums.js
10+js_enums := src/maasserver/static/js/yui/enums.js
11
12 # MAAS SASS stylesheets. The first input file (maas-styles.css) imports
13 # the others, so is treated specially in the target definitions.
14@@ -40,6 +40,8 @@ javascript_deps := \
15 javascript_output := \
16 src/maasserver/static/js/bundle/maas-min.js \
17 src/maasserver/static/js/bundle/maas-min.js.map \
18+ src/maasserver/static/js/bundle/maas-yui-min.js \
19+ src/maasserver/static/js/bundle/maas-yui-min.js.map \
20 src/maasserver/static/js/bundle/vendor-min.js \
21 src/maasserver/static/js/bundle/vendor-min.js.map
22
23@@ -249,6 +251,7 @@ define node_packages
24 karma-ng-html2js-preprocessor
25 karma-opera-launcher
26 karma-phantomjs-launcher
27+ karma-sourcemap-loader
28 node-sass
29 phantomjs-prebuilt
30 prop-types
31@@ -286,6 +289,9 @@ test: bin/test.parallel bin/coverage
32 @bin/test.parallel --with-coverage --subprocess-per-core
33 @bin/coverage combine
34
35+test-js: bin/test.js javascript
36+ @bin/test.js
37+
38 test-serial: $(strip $(test-scripts))
39 @bin/maas-region makemigrations --dry-run --exit && exit 1 ||:
40 @$(RM) .coverage .coverage.* .failed
41diff --git a/debian/rules b/debian/rules
42index 36c7be7..2f83647 100755
43--- a/debian/rules
44+++ b/debian/rules
45@@ -53,7 +53,7 @@ override_dh_auto_install:
46 rm -rf $(CURDIR)/debian/tmp/usr/share/maas/web/scss
47
48 # Install built enums.js file.
49- cp $(BUILDHOME)/enums.js $(CURDIR)/debian/tmp/usr/share/maas/web/static/js/
50+ cp $(BUILDHOME)/enums.js $(CURDIR)/debian/tmp/usr/share/maas/web/static/js/yui
51
52 # install the apparmor profile
53 install -d -m 755 $(CURDIR)/debian/tmp/etc/apparmor.d/dhcpd.d
54diff --git a/package.json b/package.json
55index dd52b6d..2398e05 100644
56--- a/package.json
57+++ b/package.json
58@@ -5,7 +5,7 @@
59 "@babel/preset-react": "^7.0.0-beta.40",
60 "@types/prop-types": "^15.5.2",
61 "@types/react": "^16.0.40",
62- "@types/react-dom": "^16.0.4",
63+ "@types/react-dom": "^15.5.7",
64 "babel-loader": "^8.0.0-beta.0",
65 "glob": "^7.1.2",
66 "jasmine-core": "=2.99.1",
67@@ -17,6 +17,7 @@
68 "karma-ng-html2js-preprocessor": "^1.0.0",
69 "karma-opera-launcher": "^1.0.0",
70 "karma-phantomjs-launcher": "^1.0.4",
71+ "karma-sourcemap-loader": "^0.3.7",
72 "node-sass": "^4.7.2",
73 "phantomjs-prebuilt": "^2.1.16",
74 "prop-types": "^15.6.1",
75@@ -27,7 +28,7 @@
76 "uglifyjs-webpack-plugin": "^1.2.2",
77 "vanilla-framework": "^1.6.6",
78 "vanilla-framework-react": "^0.1.2",
79- "webpack": "^4.0.1",
80+ "webpack": "^4.1.1",
81 "webpack-cli": "^2.0.10",
82 "webpack-merge": "^4.1.2"
83 }
84diff --git a/setup.py b/setup.py
85index cd6ad7a..8e35adb 100644
86--- a/setup.py
87+++ b/setup.py
88@@ -56,7 +56,7 @@ class EnumJSCommand(Command):
89 py_files = glob('src/*/enum.py')
90 jsenums = import_jsenums()
91 js_content = jsenums.dump(py_files)
92- with open('src/maasserver/static/js/enums.js', 'w') as fp:
93+ with open('src/maasserver/static/js/yui/enums.js', 'w') as fp:
94 fp.write(js_content)
95
96
97diff --git a/src/maasserver/static/js/angular/controllers/domain_details.js b/src/maasserver/static/js/angular/controllers/domain_details.js
98index d8e50e5..fb0c4a2 100644
99--- a/src/maasserver/static/js/angular/controllers/domain_details.js
100+++ b/src/maasserver/static/js/angular/controllers/domain_details.js
101@@ -23,6 +23,14 @@ angular.module('MAAS').controller('DomainDetailsController', [
102 $scope.domain = null;
103 $scope.predicate = "name";
104 $scope.reverse = false;
105+ $scope.action = null;
106+
107+ $scope.domainsManager = DomainsManager;
108+ $scope.newObject = {};
109+
110+ $scope.supportedRecordTypes = [
111+ 'A', 'AAAA', 'CNAME', 'MX', 'NS', 'SRV', 'SSHFP', 'TXT'
112+ ];
113
114 // Updates the page title.
115 function updateTitle() {
116@@ -61,18 +69,26 @@ angular.module('MAAS').controller('DomainDetailsController', [
117 // Called when the delete domain button is pressed.
118 $scope.deleteButton = function() {
119 $scope.error = null;
120- $scope.confirmingDelete = true;
121+ $scope.actionInProgress = true;
122+ $scope.action = 'delete';
123+ };
124+
125+ // Called when the add record button is pressed.
126+ $scope.addRecordButton = function() {
127+ $scope.error = null;
128+ $scope.actionInProgress = true;
129+ $scope.action = 'add_record';
130 };
131
132 // Called when the cancel delete domain button is pressed.
133- $scope.cancelDeleteButton = function() {
134- $scope.confirmingDelete = false;
135+ $scope.cancelAction = function() {
136+ $scope.actionInProgress = false;
137 };
138
139 // Called when the confirm delete domain button is pressed.
140 $scope.deleteConfirmButton = function() {
141 DomainsManager.deleteDomain($scope.domain).then(function() {
142- $scope.confirmingDelete = false;
143+ $scope.actionInProgress = false;
144 $location.path("/domains");
145 }, function(error) {
146 $scope.error =
147diff --git a/src/maasserver/static/js/angular/controllers/tests/test_domain_details.js b/src/maasserver/static/js/angular/controllers/tests/test_domain_details.js
148index d1cfcb1..391efea 100644
149--- a/src/maasserver/static/js/angular/controllers/tests/test_domain_details.js
150+++ b/src/maasserver/static/js/angular/controllers/tests/test_domain_details.js
151@@ -186,7 +186,7 @@ describe("DomainDetailsController", function() {
152 it("confirms delete", function() {
153 var controller = makeControllerResolveSetActiveItem();
154 $scope.deleteButton();
155- expect($scope.confirmingDelete).toBe(true);
156+ expect($scope.actionInProgress).toBe(true);
157 });
158
159 it("clears error", function() {
160@@ -197,13 +197,13 @@ describe("DomainDetailsController", function() {
161 });
162 });
163
164- describe("cancelDeleteButton", function() {
165+ describe("cancelAction", function() {
166
167 it("cancels delete", function() {
168 var controller = makeControllerResolveSetActiveItem();
169 $scope.deleteButton();
170- $scope.cancelDeleteButton();
171- expect($scope.confirmingDelete).toBe(false);
172+ $scope.cancelAction();
173+ expect($scope.actionInProgress).toBe(false);
174 });
175 });
176
177diff --git a/src/maasserver/static/js/angular/directives/maas_obj_form.js b/src/maasserver/static/js/angular/directives/maas_obj_form.js
178index da907f9..7de2337 100644
179--- a/src/maasserver/static/js/angular/directives/maas_obj_form.js
180+++ b/src/maasserver/static/js/angular/directives/maas_obj_form.js
181@@ -543,10 +543,10 @@ angular.module('MAAS').directive('maasObjField', ['$compile',
182
183 // type and key required.
184 var missingAttrs = [];
185- if(!angular.isString(attrs.type) && attrs.type.length === 0) {
186+ if(!angular.isString(attrs.type) || attrs.type.length === 0) {
187 missingAttrs.push("type");
188 }
189- if(!angular.isString(attrs.key) && attrs.key.length === 0) {
190+ if(!angular.isString(attrs.key) || attrs.key.length === 0) {
191 missingAttrs.push("key");
192 }
193 if(missingAttrs.length > 0) {
194@@ -561,7 +561,8 @@ angular.module('MAAS').directive('maasObjField', ['$compile',
195 // Render the label.
196 var label = attrs.label || attrs.key;
197
198- if(attrs.disableLabel !== "true") {
199+ if(attrs.disableLabel !== "true" &&
200+ !(attrs.type === "hidden")) {
201 var labelElement = angular.element('<label/>');
202 labelElement.attr('for', attrs.key);
203 labelElement.text(label);
204@@ -830,6 +831,19 @@ angular.module('MAAS').directive('maasObjField', ['$compile',
205 return val.text;
206 });
207 };
208+ } else if(attrs.type === "hidden") {
209+ var hiddenScope = scope.$new();
210+ hiddenScope._toggle = controller.registerField(
211+ attrs.key, scope);
212+ inputElement = angular.element([
213+ '<input type="hidden" name="' + attrs.key + '" ',
214+ 'id="' + attrs.key + '" ',
215+ 'value="' + attrs.value + '">',
216+ '</input>'
217+ ].join(''));
218+ inputElement = $compile(inputElement)(hiddenScope);
219+ scope.getValue = () => attrs.value;
220+ scope.updateValue = () => null;
221 } else if(attrs.type === "onoffswitch") {
222 var switchScope = scope.$new();
223 switchScope._toggle = controller.registerField(
224diff --git a/src/maasserver/static/js/angular/directives/tests/test_maas_obj_form.js b/src/maasserver/static/js/angular/directives/tests/test_maas_obj_form.js
225index d37b891..c366c25 100644
226--- a/src/maasserver/static/js/angular/directives/tests/test_maas_obj_form.js
227+++ b/src/maasserver/static/js/angular/directives/tests/test_maas_obj_form.js
228@@ -442,6 +442,31 @@ describe("maasObjForm", function() {
229 });
230 });
231
232+ describe("hidden", function() {
233+
234+ var directive, options;
235+ beforeEach(function() {
236+ $scope.obj = {
237+ key: false
238+ };
239+ $scope.manager = {};
240+ var html = [
241+ '<maas-obj-form obj="obj" manager="manager">',
242+ '<maas-obj-field type="hidden" key="key" label="Key" ',
243+ 'value="value">',
244+ '</maas-obj-field>',
245+ '</maas-obj-form>'
246+ ].join('');
247+ directive = compileDirective(html);
248+ });
249+
250+ it("creates onoffswitch", function() {
251+ var onoff = angular.element(directive.find("input"));
252+ expect(onoff.length).toBe(1);
253+ });
254+ });
255+
256+
257 describe("single field", function() {
258
259 var directive, updateItemMethod, saveDefer;
260diff --git a/src/maasserver/static/js/angular/factories/domains.js b/src/maasserver/static/js/angular/factories/domains.js
261index 0d3fdf2..b01d9c1 100644
262--- a/src/maasserver/static/js/angular/factories/domains.js
263+++ b/src/maasserver/static/js/angular/factories/domains.js
264@@ -42,6 +42,18 @@ angular.module('MAAS').factory(
265 return RegionConnection.callMethod("domain.delete", domain);
266 };
267
268+ // Create a DNS record.
269+ DomainsManager.prototype.create_dns_record = function(record) {
270+ if(record.rrtype === 'A' || record.rrtype === 'AAAA') {
271+ record.ip_addresses = record.rrdata.split(/[ ,]+/);
272+ return RegionConnection.callMethod(
273+ "domain.create_dnsresource", record);
274+ } else {
275+ return RegionConnection.callMethod(
276+ "domain.create_dnsdata", record);
277+ }
278+ };
279+
280 DomainsManager.prototype.getDefaultDomain = function() {
281 if(this._items.length === 0) {
282 return null;
283diff --git a/src/maasserver/static/js/io.js b/src/maasserver/static/js/yui/io.js
284index 86b15ef..86b15ef 100644
285--- a/src/maasserver/static/js/io.js
286+++ b/src/maasserver/static/js/yui/io.js
287diff --git a/src/maasserver/static/js/os_distro_select.js b/src/maasserver/static/js/yui/os_distro_select.js
288index 2fe0958..2fe0958 100644
289--- a/src/maasserver/static/js/os_distro_select.js
290+++ b/src/maasserver/static/js/yui/os_distro_select.js
291diff --git a/src/maasserver/static/js/prefs.js b/src/maasserver/static/js/yui/prefs.js
292index cff5636..cff5636 100644
293--- a/src/maasserver/static/js/prefs.js
294+++ b/src/maasserver/static/js/yui/prefs.js
295diff --git a/src/maasserver/static/js/reveal.js b/src/maasserver/static/js/yui/reveal.js
296index 7ab922a..7ab922a 100644
297--- a/src/maasserver/static/js/reveal.js
298+++ b/src/maasserver/static/js/yui/reveal.js
299diff --git a/src/maasserver/static/js/shortpoll.js b/src/maasserver/static/js/yui/shortpoll.js
300index 886ba93..886ba93 100644
301--- a/src/maasserver/static/js/shortpoll.js
302+++ b/src/maasserver/static/js/yui/shortpoll.js
303diff --git a/src/maasserver/static/partials/domain-details.html b/src/maasserver/static/partials/domain-details.html
304index 451a203..4733e1e 100644
305--- a/src/maasserver/static/partials/domain-details.html
306+++ b/src/maasserver/static/partials/domain-details.html
307@@ -13,14 +13,17 @@
308 </p>
309 </div>
310 <div class="col-4">
311- <div class="page-header__controls ng-hide" data-ng-show="isSuperUser() && !isDefaultDomain() && !loading">
312+ <div class="page-header__controls ng-hide" data-ng-show="isSuperUser() && !loading">
313 <button class="p-button--negative"
314 data-ng-click="deleteButton()"
315- data-ng-hide="confirmingDelete">Delete domain</button>
316+ data-ng-hide="actionInProgress || isDefaultDomain()">Delete domain</button>
317+ <button class="p-button"
318+ data-ng-click="addRecordButton()"
319+ data-ng-hide="actionInProgress">Add record</button>
320 </div>
321 </div>
322 </div>
323- <div data-ng-if="confirmingDelete">
324+ <div data-ng-if="actionInProgress && action === 'delete'">
325 <div class="row u-no-margin--top ng-hide" data-ng-hide="canBeDeleted()">
326 <hr />
327 <div class="row">
328@@ -30,7 +33,7 @@
329 </p>
330 </div>
331 <div class="col-4 u-align--right">
332- <button class="p-button--base" type="button" data-ng-click="cancelDeleteButton()">Cancel</button>
333+ <button class="p-button--base" type="button" data-ng-click="cancelAction()">Cancel</button>
334 </div>
335 </div>
336 </div>
337@@ -43,7 +46,7 @@
338 </p>
339 </div>
340 <div class="col-4 u-align--right">
341- <button class="p-button--base" type="button" data-ng-click="cancelDeleteButton()">Cancel</button>
342+ <button class="p-button--base" type="button" data-ng-click="cancelAction()">Cancel</button>
343 <button class="p-button--negative" data-ng-click="deleteConfirmButton()">Delete domain</button>
344 </div>
345 </div>
346@@ -57,12 +60,51 @@
347 </p>
348 </div>
349 <div class="col-4 u-align--right">
350- <button class="p-button--base" type="button" data-ng-click="cancelDeleteButton()">Cancel</button>
351+ <button class="p-button--base" type="button" data-ng-click="cancelAction()">Cancel</button>
352 <button class="p-button--neutral" data-ng-click="deleteConfirmButton()">Retry</button>
353 </div>
354 </div>
355 </div>
356 </div>
357+ <div data-ng-if="actionInProgress && action === 'add_record'">
358+ <maas-obj-form obj="newObject" manager="domainsManager" manager-method="create_dns_record" class="p-form--stacked"
359+ table-form="true" save-on-blur="false" after-save="cancelAction">
360+ <!-- pre-process="actionDNSRecordPreSave" -->
361+ <section class="row">
362+ <div class="col-6">
363+ <maas-obj-field
364+ subtle="false" type="text" key="name" label="Name" placeholder="Name"
365+ label-width="two" input-width="three"></maas-obj-field>
366+ <maas-obj-field
367+ subtle="false" type="options" key="rrtype" label="Type"
368+ options="type as type for type in supportedRecordTypes"
369+ label-width="two" input-width="three"></maas-obj-field>
370+ </div>
371+ <div class="col-6">
372+ <maas-obj-field
373+ subtle="false" type="text" key="rrdata" label="Data"
374+ placeholder="Data"
375+ label-width="two" input-width="three"></maas-obj-field>
376+ <maas-obj-field
377+ subtle="false" type="text" key="ttl" label="TTL"
378+ placeholder="TTL in seconds (optional)"
379+ label-width="two" input-width="three"></maas-obj-field>
380+ <maas-obj-field type="hidden" key="domain" value="{$ domain.id $}" />
381+ </div>
382+ </section>
383+ <section class="row">
384+ <div class="col-8">
385+ <maas-obj-errors class="page-header__message page-header__message--error"></maas-obj-errors>
386+ </div>
387+ <div class="col-4">
388+ <div class="u-align--right">
389+ <button class="p-button" data-ng-click="cancelAction()">Cancel</button>
390+ <button class="p-button--positive" maas-obj-save>Add record</button>
391+ </div>
392+ </div>
393+ </div>
394+ </maas-obj-form>
395+ </div>
396 </header>
397 <div class="p-strip" data-ng-show="!loading">
398 <section class="row">
399diff --git a/src/maasserver/templates/maasserver/js-conf.html b/src/maasserver/templates/maasserver/js-conf.html
400index 9999281..cae0420 100644
401--- a/src/maasserver/templates/maasserver/js-conf.html
402+++ b/src/maasserver/templates/maasserver/js-conf.html
403@@ -47,6 +47,9 @@ var MAAS_config = {
404 <script type="text/javascript"
405 src="{{STATIC_URL}}/js/bundle/maas-min.js?v={{files_version}}">
406 </script>
407+<script type="text/javascript"
408+ src="{{STATIC_URL}}/js/bundle/maas-yui-min.js?v={{files_version}}">
409+</script>
410
411 {% if global_options.enable_analytics %}
412 <script async src='https://www.google-analytics.com/analytics.js'></script>
413diff --git a/src/maastesting/karma.conf.js b/src/maastesting/karma.conf.js
414index 79a25a0..abc1026 100644
415--- a/src/maastesting/karma.conf.js
416+++ b/src/maastesting/karma.conf.js
417@@ -21,10 +21,9 @@ module.exports = function(config) {
418 '/usr/share/javascript/angular.js/angular-mocks.js',
419 '/usr/share/javascript/angular.js/angular-cookies.js',
420 '/usr/share/javascript/angular.js/angular-sanitize.js',
421- '../../src/maasserver/static/js/ui/maas-ui.js',
422- '../../src/maasserver/static/js/angular/maas.js',
423+ '../../src/maasserver/static/js/bundle/vendor-min.js',
424+ '../../src/maasserver/static/js/bundle/maas-min.js',
425 '../../src/maasserver/static/js/angular/testing/*.js',
426- '../../src/maasserver/static/js/angular/*/*.js',
427 '../../src/maasserver/static/js/angular/*/tests/test_*.js',
428 '../../src/maasserver/static/partials/*.html'
429 ],
430@@ -38,7 +37,8 @@ module.exports = function(config) {
431 // preprocess matching files before serving them to the browser
432 // available preprocessors: https://npmjs.org/browse/keyword/karma-preprocessor
433 preprocessors: {
434- '../../src/maasserver/static/partials/*.html': ['ng-html2js']
435+ '../../src/maasserver/static/partials/*.html': ['ng-html2js'],
436+ '**/*.js': ['sourcemap']
437 },
438
439 ngHtml2JsPreprocessor: {
440@@ -91,7 +91,8 @@ module.exports = function(config) {
441 'karma-opera-launcher',
442 'karma-phantomjs-launcher',
443 'karma-failed-reporter',
444- 'karma-ng-html2js-preprocessor'
445+ 'karma-ng-html2js-preprocessor',
446+ 'karma-sourcemap-loader'
447 ]
448 });
449 };
450diff --git a/webpack.config.js b/webpack.config.js
451index e8613b5..549f1f9 100644
452--- a/webpack.config.js
453+++ b/webpack.config.js
454@@ -5,8 +5,10 @@ const UglifyJSPlugin = require('uglifyjs-webpack-plugin');
455 module.exports = {
456 entry: {
457 vendor: [].concat(
458- glob.sync('./src/maasserver/static/js/angular/3rdparty/*.js'),
459- ['react', 'react-dom']
460+ glob.sync('./src/maasserver/static/js/angular/3rdparty/*.js')
461+ ),
462+ 'maas-yui': [].concat(
463+ glob.sync('./src/maasserver/static/js/yui/*.js')
464 ),
465 maas: [].concat(
466 glob.sync('./src/maasserver/static/js/*.js'),
467diff --git a/yarn.lock b/yarn.lock
468index 90c4cea..3804cfb 100644
469--- a/yarn.lock
470+++ b/yarn.lock
471@@ -393,10 +393,6 @@
472 version "4.14.104"
473 resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.104.tgz#53ee2357fa2e6e68379341d92eb2ecea4b11bb80"
474
475-"@types/node@*":
476- version "9.4.6"
477- resolved "https://registry.yarnpkg.com/@types/node/-/node-9.4.6.tgz#d8176d864ee48753d053783e4e463aec86b8d82e"
478-
479 "@types/node@^6.0.46":
480 version "6.0.101"
481 resolved "https://registry.yarnpkg.com/@types/node/-/node-6.0.101.tgz#0c5911cfb434af4a51c0a499931fe6423207d921"
482@@ -409,14 +405,17 @@
483 version "0.0.32"
484 resolved "https://registry.yarnpkg.com/@types/q/-/q-0.0.32.tgz#bd284e57c84f1325da702babfc82a5328190c0c5"
485
486-"@types/react-dom@^16.0.4":
487- version "16.0.4"
488- resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-16.0.4.tgz#2e8fd45f5443780ed49bf2cdd9809e6091177a7d"
489+"@types/react-dom@^15.5.7":
490+ version "15.5.7"
491+ resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-15.5.7.tgz#a5c1c8b315e925d84d59db5ee88ca7e31c5030f9"
492 dependencies:
493- "@types/node" "*"
494- "@types/react" "*"
495+ "@types/react" "^15"
496+
497+"@types/react@^15":
498+ version "15.6.14"
499+ resolved "https://registry.yarnpkg.com/@types/react/-/react-15.6.14.tgz#fe176209b9de3514f9782fa41a239bffd26a3b56"
500
501-"@types/react@*", "@types/react@^16.0.40":
502+"@types/react@^16.0.40":
503 version "16.0.40"
504 resolved "https://registry.yarnpkg.com/@types/react/-/react-16.0.40.tgz#caabc2296886f40b67f6fc80f0f3464476461df9"
505
506@@ -460,8 +459,8 @@ acorn@^4.0.3:
507 resolved "https://registry.yarnpkg.com/acorn/-/acorn-4.0.13.tgz#105495ae5361d697bd195c825192e1ad7f253787"
508
509 acorn@^5.0.0, acorn@^5.2.1, acorn@^5.4.1:
510- version "5.5.0"
511- resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.5.0.tgz#1abb587fbf051f94e3de20e6b26ef910b1828298"
512+ version "5.5.1"
513+ resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.5.1.tgz#84e05a9ea0acbe131227da50301e62464dc9c1d8"
514
515 addressparser@1.0.1:
516 version "1.0.1"
517@@ -507,8 +506,8 @@ ajv@^5.1.0:
518 json-schema-traverse "^0.3.0"
519
520 ajv@^6.1.0:
521- version "6.2.0"
522- resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.2.0.tgz#afac295bbaa0152449e522742e4547c1ae9328d2"
523+ version "6.2.1"
524+ resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.2.1.tgz#28a6abc493a2abe0fb4c8507acaedb43fa550671"
525 dependencies:
526 fast-deep-equal "^1.0.0"
527 fast-json-stable-stringify "^2.0.0"
528@@ -552,9 +551,9 @@ ansi-styles@^2.2.1:
529 version "2.2.1"
530 resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe"
531
532-ansi-styles@^3.2.0:
533- version "3.2.0"
534- resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.0.tgz#c159b8d5be0f9e5a6f346dab94f16ce022161b88"
535+ansi-styles@^3.2.1:
536+ version "3.2.1"
537+ resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d"
538 dependencies:
539 color-convert "^1.9.0"
540
541@@ -1786,12 +1785,12 @@ chalk@^1.0.0, chalk@^1.1.1, chalk@^1.1.3:
542 supports-color "^2.0.0"
543
544 chalk@^2.0.0, chalk@^2.0.1, chalk@^2.1.0, chalk@^2.3.1:
545- version "2.3.1"
546- resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.3.1.tgz#523fe2678aec7b04e8041909292fe8b17059b796"
547+ version "2.3.2"
548+ resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.3.2.tgz#250dc96b07491bfd601e648d66ddf5f60c7a5c65"
549 dependencies:
550- ansi-styles "^3.2.0"
551+ ansi-styles "^3.2.1"
552 escape-string-regexp "^1.0.5"
553- supports-color "^5.2.0"
554+ supports-color "^5.3.0"
555
556 chalk@~0.4.0:
557 version "0.4.0"
558@@ -1934,12 +1933,12 @@ clone@^2.1.1:
559 resolved "https://registry.yarnpkg.com/clone/-/clone-2.1.1.tgz#d217d1e961118e3ac9a4b8bba3285553bf647cdb"
560
561 cloneable-readable@^1.0.0:
562- version "1.0.0"
563- resolved "https://registry.yarnpkg.com/cloneable-readable/-/cloneable-readable-1.0.0.tgz#a6290d413f217a61232f95e458ff38418cfb0117"
564+ version "1.1.1"
565+ resolved "https://registry.yarnpkg.com/cloneable-readable/-/cloneable-readable-1.1.1.tgz#c27a4f3a943ca37bed9b01c7d572ee61b1302b15"
566 dependencies:
567 inherits "^2.0.1"
568- process-nextick-args "^1.0.6"
569- through2 "^2.0.1"
570+ process-nextick-args "^2.0.0"
571+ readable-stream "^2.3.5"
572
573 co@^4.6.0:
574 version "4.6.0"
575@@ -2021,8 +2020,8 @@ combined-stream@1.0.6, combined-stream@^1.0.5, combined-stream@~1.0.5:
576 delayed-stream "~1.0.0"
577
578 commander@^2.9.0:
579- version "2.14.1"
580- resolved "https://registry.yarnpkg.com/commander/-/commander-2.14.1.tgz#2235123e37af8ca3c65df45b026dbd357b01b9aa"
581+ version "2.15.0"
582+ resolved "https://registry.yarnpkg.com/commander/-/commander-2.15.0.tgz#ad2a23a1c3b036e392469b8012cec6b33b4c1322"
583
584 commander@~2.13.0:
585 version "2.13.0"
586@@ -2200,8 +2199,8 @@ cross-spawn@^5.0.1:
587 which "^1.2.9"
588
589 cross-spawn@^6.0.4:
590- version "6.0.4"
591- resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.4.tgz#bbf44ccb30fb8314a08f178b62290c669c36d808"
592+ version "6.0.5"
593+ resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4"
594 dependencies:
595 nice-try "^1.0.4"
596 path-key "^2.0.1"
597@@ -2430,8 +2429,8 @@ diff@^2.1.2:
598 resolved "https://registry.yarnpkg.com/diff/-/diff-2.2.3.tgz#60eafd0d28ee906e4e8ff0a52c1229521033bf99"
599
600 diff@^3.3.0, diff@^3.3.1:
601- version "3.4.0"
602- resolved "https://registry.yarnpkg.com/diff/-/diff-3.4.0.tgz#b1d85507daf3964828de54b37d0d73ba67dda56c"
603+ version "3.5.0"
604+ resolved "https://registry.yarnpkg.com/diff/-/diff-3.5.0.tgz#800c0dd1e0a8bfbc95835c202ad220fe317e5a12"
605
606 diffie-hellman@^5.0.0:
607 version "5.0.2"
608@@ -2477,8 +2476,8 @@ duplexer3@^0.1.4:
609 resolved "https://registry.yarnpkg.com/duplexer3/-/duplexer3-0.1.4.tgz#ee01dd1cac0ed3cbc7fdbea37dc0a8f1ce002ce2"
610
611 duplexify@^3.4.2, duplexify@^3.5.3:
612- version "3.5.3"
613- resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-3.5.3.tgz#8b5818800df92fd0125b27ab896491912858243e"
614+ version "3.5.4"
615+ resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-3.5.4.tgz#4bb46c1796eabebeec4ca9a2e66b808cb7a3d8b4"
616 dependencies:
617 end-of-stream "^1.0.0"
618 inherits "^2.0.1"
619@@ -2934,8 +2933,8 @@ first-chunk-stream@^2.0.0:
620 readable-stream "^2.0.2"
621
622 flow-parser@^0.*:
623- version "0.66.0"
624- resolved "https://registry.yarnpkg.com/flow-parser/-/flow-parser-0.66.0.tgz#be583fefb01192aa5164415d31a6241b35718983"
625+ version "0.67.1"
626+ resolved "https://registry.yarnpkg.com/flow-parser/-/flow-parser-0.67.1.tgz#191fed56ccfd8d097dc9d487f2da3b0dae745849"
627
628 flush-write-stream@^1.0.0:
629 version "1.0.2"
630@@ -3494,8 +3493,8 @@ homedir-polyfill@^1.0.1:
631 parse-passwd "^1.0.0"
632
633 hosted-git-info@^2.1.4:
634- version "2.5.0"
635- resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.5.0.tgz#6d60e34b3abbc8313062c3b798ef8d901a07af3c"
636+ version "2.6.0"
637+ resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.6.0.tgz#23235b29ab230c576aab0d4f13fc046b0b038222"
638
639 htmlescape@^1.1.0:
640 version "1.1.1"
641@@ -4219,6 +4218,12 @@ karma-phantomjs-launcher@^1.0.4:
642 lodash "^4.0.1"
643 phantomjs-prebuilt "^2.1.7"
644
645+karma-sourcemap-loader@^0.3.7:
646+ version "0.3.7"
647+ resolved "https://registry.yarnpkg.com/karma-sourcemap-loader/-/karma-sourcemap-loader-0.3.7.tgz#91322c77f8f13d46fed062b042e1009d4c4505d8"
648+ dependencies:
649+ graceful-fs "^4.1.2"
650+
651 karma@^2.0.0:
652 version "2.0.0"
653 resolved "https://registry.yarnpkg.com/karma/-/karma-2.0.0.tgz#a02698dd7f0f05ff5eb66ab8f65582490b512e58"
654@@ -5529,14 +5534,14 @@ private@^0.1.6, private@^0.1.7, private@~0.1.5:
655 version "0.1.8"
656 resolved "https://registry.yarnpkg.com/private/-/private-0.1.8.tgz#2381edb3689f7a53d653190060fcf822d2f368ff"
657
658-process-nextick-args@^1.0.6, process-nextick-args@~1.0.6:
659- version "1.0.7"
660- resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-1.0.7.tgz#150e20b756590ad3f91093f25a4f2ad8bff30ba3"
661-
662-process-nextick-args@~2.0.0:
663+process-nextick-args@^2.0.0, process-nextick-args@~2.0.0:
664 version "2.0.0"
665 resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.0.tgz#a37d732f4271b4ab1ad070d35508e8290788ffaa"
666
667+process-nextick-args@~1.0.6:
668+ version "1.0.7"
669+ resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-1.0.7.tgz#150e20b756590ad3f91093f25a4f2ad8bff30ba3"
670+
671 process@^0.11.10, process@~0.11.0:
672 version "0.11.10"
673 resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182"
674@@ -5802,9 +5807,9 @@ read-pkg@^2.0.0:
675 normalize-package-data "^2.3.2"
676 path-type "^2.0.0"
677
678-"readable-stream@1 || 2", readable-stream@2, readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.4, readable-stream@^2.0.6, readable-stream@^2.1.4, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.0, readable-stream@^2.3.3:
679- version "2.3.4"
680- resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.4.tgz#c946c3f47fa7d8eabc0b6150f4a12f69a4574071"
681+"readable-stream@1 || 2", readable-stream@2, readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.4, readable-stream@^2.0.6, readable-stream@^2.1.4, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.0, readable-stream@^2.3.3, readable-stream@^2.3.5:
682+ version "2.3.5"
683+ resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.5.tgz#b4f85003a938cbb6ecbce2a124fb1012bd1a838d"
684 dependencies:
685 core-util-is "~1.0.0"
686 inherits "~2.0.3"
687@@ -6743,9 +6748,9 @@ string-width@^2.0.0, string-width@^2.1.0:
688 is-fullwidth-code-point "^2.0.0"
689 strip-ansi "^4.0.0"
690
691-string_decoder@^1.0.0, string_decoder@~1.0.0, string_decoder@~1.0.3:
692- version "1.0.3"
693- resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.0.3.tgz#0fc67d7c141825de94282dd536bec6b9bce860ab"
694+string_decoder@^1.0.0:
695+ version "1.1.0"
696+ resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.0.tgz#384f322ee8a848e500effde99901bba849c5d403"
697 dependencies:
698 safe-buffer "~5.1.0"
699
700@@ -6753,6 +6758,12 @@ string_decoder@~0.10.x:
701 version "0.10.31"
702 resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94"
703
704+string_decoder@~1.0.0, string_decoder@~1.0.3:
705+ version "1.0.3"
706+ resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.0.3.tgz#0fc67d7c141825de94282dd536bec6b9bce860ab"
707+ dependencies:
708+ safe-buffer "~5.1.0"
709+
710 stringstream@~0.0.4, stringstream@~0.0.5:
711 version "0.0.5"
712 resolved "https://registry.yarnpkg.com/stringstream/-/stringstream-0.0.5.tgz#4e484cd4de5a0bbbee18e46307710a8a81621878"
713@@ -6814,9 +6825,9 @@ supports-color@^2.0.0:
714 version "2.0.0"
715 resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7"
716
717-supports-color@^5.2.0:
718- version "5.2.0"
719- resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.2.0.tgz#b0d5333b1184dd3666cbe5aa0b45c5ac7ac17a4a"
720+supports-color@^5.2.0, supports-color@^5.3.0:
721+ version "5.3.0"
722+ resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.3.0.tgz#5b24ac15db80fa927cf5227a4a33fd3c4c7676c0"
723 dependencies:
724 has-flag "^3.0.0"
725
726@@ -6878,7 +6889,7 @@ throttleit@^1.0.0:
727 version "1.0.0"
728 resolved "https://registry.yarnpkg.com/throttleit/-/throttleit-1.0.0.tgz#9e785836daf46743145a5984b6268d828528ac6c"
729
730-through2@^2.0.0, through2@^2.0.1:
731+through2@^2.0.0:
732 version "2.0.3"
733 resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.3.tgz#0004569b37c7c74ba39c43f3ced78d1ad94140be"
734 dependencies:
735@@ -7292,7 +7303,7 @@ void-elements@^2.0.0:
736 version "2.0.1"
737 resolved "https://registry.yarnpkg.com/void-elements/-/void-elements-2.0.1.tgz#c066afb582bb1cb4128d60ea92392e94d5e9dbec"
738
739-watchpack@^1.4.0:
740+watchpack@^1.5.0:
741 version "1.5.0"
742 resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-1.5.0.tgz#231e783af830a22f8966f65c4c4bacc814072eed"
743 dependencies:
744@@ -7376,9 +7387,9 @@ webpack-sources@^1.0.1, webpack-sources@^1.1.0:
745 source-list-map "^2.0.0"
746 source-map "~0.6.1"
747
748-webpack@^4.0.1:
749- version "4.0.1"
750- resolved "https://registry.yarnpkg.com/webpack/-/webpack-4.0.1.tgz#768d708beeca4c5f77f6c2d38a240fb6ff50ba5d"
751+webpack@^4.1.1:
752+ version "4.1.1"
753+ resolved "https://registry.yarnpkg.com/webpack/-/webpack-4.1.1.tgz#44e4d6a869dd36fdfc0b227f9bd865a4bccfd81c"
754 dependencies:
755 acorn "^5.0.0"
756 acorn-dynamic-import "^3.0.0"
757@@ -7397,7 +7408,7 @@ webpack@^4.0.1:
758 schema-utils "^0.4.2"
759 tapable "^1.0.0"
760 uglifyjs-webpack-plugin "^1.1.1"
761- watchpack "^1.4.0"
762+ watchpack "^1.5.0"
763 webpack-sources "^1.0.1"
764
765 whatwg-fetch@>=0.10.0:

Subscribers

People subscribed via source and target branches