From ed4c4a51cd10ea6303e8a2bbc8a6584920897f68 Mon Sep 17 00:00:00 2001 From: Brian Vaughn Date: Fri, 23 Nov 2018 12:53:39 -0800 Subject: [PATCH] Add basic release script snapshot test (#14280) Added regression test for release scripts --- .../check-out-packages.js | 12 +- .../prepare-stable-commands/parse-params.js | 7 + .../update-stable-version-numbers.js | 3 +- scripts/release/test.js | 97 ++ scripts/release/test.snapshot | 840 ++++++++++++++++++ 5 files changed, 957 insertions(+), 2 deletions(-) create mode 100755 scripts/release/test.js create mode 100644 scripts/release/test.snapshot diff --git a/scripts/release/prepare-stable-commands/check-out-packages.js b/scripts/release/prepare-stable-commands/check-out-packages.js index d29dec97196e..6c33d9fccf27 100644 --- a/scripts/release/prepare-stable-commands/check-out-packages.js +++ b/scripts/release/prepare-stable-commands/check-out-packages.js @@ -3,11 +3,21 @@ 'use strict'; const {exec} = require('child-process-promise'); +const {existsSync} = require('fs'); const {join} = require('path'); const {logPromise} = require('../utils'); const theme = require('../theme'); -const run = async ({cwd, packages, version}) => { +const run = async ({cwd, local, packages, version}) => { + if (local) { + // Sanity test + if (!existsSync(join(cwd, 'build', 'node_modules', 'react'))) { + console.error(theme.error`No local build exists.`); + process.exit(1); + } + return; + } + // Cleanup from previous builds await exec(`rm -rf ./build/node_modules*`, {cwd}); await exec(`mkdir ./build/node_modules`, {cwd}); diff --git a/scripts/release/prepare-stable-commands/parse-params.js b/scripts/release/prepare-stable-commands/parse-params.js index 2d553a9047e4..ef8c941105ac 100644 --- a/scripts/release/prepare-stable-commands/parse-params.js +++ b/scripts/release/prepare-stable-commands/parse-params.js @@ -6,6 +6,13 @@ const commandLineArgs = require('command-line-args'); const commandLineUsage = require('command-line-usage'); const paramDefinitions = [ + { + name: 'local', + type: Boolean, + description: + 'Skip NPM and use the build already present in "build/node_modules".', + defaultValue: false, + }, { name: 'version', type: String, diff --git a/scripts/release/prepare-stable-commands/update-stable-version-numbers.js b/scripts/release/prepare-stable-commands/update-stable-version-numbers.js index 397ff07e77e7..cdd7ee03ead5 100644 --- a/scripts/release/prepare-stable-commands/update-stable-version-numbers.js +++ b/scripts/release/prepare-stable-commands/update-stable-version-numbers.js @@ -158,7 +158,8 @@ const run = async ({cwd, packages, version}, versionsMap) => { } if (beforeContents !== afterContents) { numFilesModified++; - diff += printDiff(path, beforeContents, afterContents); + // Using a relative path for diff helps with the snapshot test + diff += printDiff(relative(cwd, path), beforeContents, afterContents); writeFileSync(path, afterContents, {cwd}); } }); diff --git a/scripts/release/test.js b/scripts/release/test.js new file mode 100755 index 000000000000..86b6bbe36801 --- /dev/null +++ b/scripts/release/test.js @@ -0,0 +1,97 @@ +#!/usr/bin/env node + +'use strict'; + +const {exec, spawn} = require('child-process-promise'); +const {join} = require('path'); +const {readFileSync} = require('fs'); +const theme = require('./theme'); +const {logPromise, printDiff} = require('./utils'); + +const cwd = join(__dirname, '..', '..'); + +const CIRCLE_CI_BUILD = 12707; +const COMMIT = 'b3d1a81a9'; +const VERSION = '1.2.3'; + +const run = async () => { + const defaultOptions = { + cwd, + env: process.env, + }; + + try { + // Start with a known build/revision: + // https://circleci.com/gh/facebook/react/12707 + let promise = spawn( + 'node', + ['./scripts/release/prepare-canary.js', `--build=${CIRCLE_CI_BUILD}`], + defaultOptions + ); + logPromise( + promise, + theme`Checking out canary build {version ${CIRCLE_CI_BUILD}}` + ); + await promise; + + // Upgrade the above build top a known React version. + // Note that using the --local flag skips NPM checkout. + // This isn't totally necessary but is useful if we want to test an unpublished canary. + promise = spawn( + 'node', + [ + './scripts/release/prepare-stable.js', + `--version=0.0.0-${COMMIT}`, + '--local', + ], + defaultOptions + ); + promise.childProcess.stdin.setEncoding('utf-8'); + promise.childProcess.stdout.setEncoding('utf-8'); + promise.childProcess.stdout.on('data', data => { + if (data.includes('✓ Version for')) { + // Update all packages to a stable version + promise.childProcess.stdin.write(VERSION); + } else if (data.includes('(y/N)')) { + // Accept all of the confirmation prompts + promise.childProcess.stdin.write('y'); + } + }); + logPromise(promise, theme`Preparing stable release {version ${VERSION}}`); + await promise; + + const beforeContents = readFileSync( + join(cwd, 'scripts/release/test.snapshot'), + 'utf-8' + ); + await exec('cp build/temp.diff scripts/release/test.snapshot', {cwd}); + const afterContents = readFileSync( + join(cwd, 'scripts/release/test.snapshot'), + 'utf-8' + ); + + if (beforeContents === afterContents) { + console.log(theme.header`Snapshot test passed.`); + } else { + printDiff('scripts/release/test.snapshot', beforeContents, afterContents); + console.log(); + console.error(theme.error('Snapshot test failed!')); + console.log(); + console.log( + 'If this failure was expected, please update the contents of the snapshot file:' + ); + console.log( + theme` {command git add} {path scripts/release/test.snapshot}` + ); + console.log( + theme` {command git commit -m "Updating release script snapshot file."}` + ); + process.exit(1); + } + } catch (error) { + console.error(theme.error(error)); + process.exit(1); + } +}; + +run(); diff --git a/scripts/release/test.snapshot b/scripts/release/test.snapshot new file mode 100644 index 000000000000..5d2d880f7c85 --- /dev/null +++ b/scripts/release/test.snapshot @@ -0,0 +1,840 @@ +Index: build/node_modules/create-subscription/cjs/create-subscription.development.js +=================================================================== +--- build/node_modules/create-subscription/cjs/create-subscription.development.js ++++ build/node_modules/create-subscription/cjs/create-subscription.development.js +@@ -1,5 +1,5 @@ +-/** @license React v0.0.0-b3d1a81a9 ++/** @license React v1.2.3 + * create-subscription.development.js + * + * Copyright (c) Facebook, Inc. and its affiliates. + * +Index: build/node_modules/create-subscription/cjs/create-subscription.production.min.js +=================================================================== +--- build/node_modules/create-subscription/cjs/create-subscription.production.min.js ++++ build/node_modules/create-subscription/cjs/create-subscription.production.min.js +@@ -1,5 +1,5 @@ +-/** @license React v0.0.0-b3d1a81a9 ++/** @license React v1.2.3 + * create-subscription.production.min.js + * + * Copyright (c) Facebook, Inc. and its affiliates. + * +Index: build/node_modules/jest-react/cjs/jest-react.production.min.js +=================================================================== +--- build/node_modules/jest-react/cjs/jest-react.production.min.js ++++ build/node_modules/jest-react/cjs/jest-react.production.min.js +@@ -1,5 +1,5 @@ +-/** @license React v0.0.0-b3d1a81a9 ++/** @license React v1.2.3 + * jest-react.production.min.js + * + * Copyright (c) Facebook, Inc. and its affiliates. + * +Index: build/node_modules/jest-react/cjs/jest-react.development.js +=================================================================== +--- build/node_modules/jest-react/cjs/jest-react.development.js ++++ build/node_modules/jest-react/cjs/jest-react.development.js +@@ -1,5 +1,5 @@ +-/** @license React v0.0.0-b3d1a81a9 ++/** @license React v1.2.3 + * jest-react.development.js + * + * Copyright (c) Facebook, Inc. and its affiliates. + * +Index: build/node_modules/react/umd/react.production.min.js +=================================================================== +--- build/node_modules/react/umd/react.production.min.js ++++ build/node_modules/react/umd/react.production.min.js +@@ -1,5 +1,5 @@ +-/** @license React v0.0.0-b3d1a81a9 ++/** @license React v1.2.3 + * react.production.min.js + * + * Copyright (c) Facebook, Inc. and its affiliates. + * +@@ -27,5 +27,5 @@ + k;return function(){var d=k,c=m;k=b;m=l();try{return a.apply(this,arguments)}finally{k=d,m=c,R()}}},unstable_getCurrentPriorityLevel:function(){return k}},SchedulerTracing:{__interactionsRef:null,__subscriberRef:null,unstable_clear:function(a){return a()},unstable_getCurrent:function(){return null},unstable_getThreadID:function(){return++Oa},unstable_subscribe:function(a){},unstable_trace:function(a,b,d){return d()},unstable_unsubscribe:function(a){},unstable_wrap:function(a){return a}}});var fa= + Object.prototype.hasOwnProperty,ha={key:!0,ref:!0,__self:!0,__source:!0},la=/\/+/g,I=[];r={Children:{map:function(a,b,d){if(null==a)return a;var c=[];X(a,c,null,b,d);return c},forEach:function(a,b,d){if(null==a)return a;b=ia(null,null,b,d);W(a,ya,b);ja(b)},count:function(a){return W(a,function(){return null},null)},toArray:function(a){var b=[];X(a,b,null,function(a){return a});return b},only:function(a){T(a)?void 0:p("143");return a}},createRef:function(){return{current:null}},Component:q,PureComponent:O, + createContext:function(a,b){void 0===b&&(b=null);a={$$typeof:Ca,_calculateChangedBits:b,_currentValue:a,_currentValue2:a,_threadCount:0,Provider:null,Consumer:null};a.Provider={$$typeof:Ba,_context:a};return a.Consumer=a},forwardRef:function(a){return{$$typeof:Ea,render:a}},lazy:function(a){return{$$typeof:Ha,_ctor:a,_status:-1,_result:null}},memo:function(a,b){return{$$typeof:Ga,type:a,compare:void 0===b?null:b}},Fragment:r,StrictMode:Aa,Suspense:Fa,createElement:ea,cloneElement:function(a,b,d){null=== + a||void 0===a?p("267",a):void 0;var c=void 0,e=J({},a.props),g=a.key,k=a.ref,h=a._owner;if(null!=b){void 0!==b.ref&&(k=b.ref,h=S.current);void 0!==b.key&&(g=""+b.key);var l=void 0;a.type&&a.type.defaultProps&&(l=a.type.defaultProps);for(c in b)fa.call(b,c)&&!ha.hasOwnProperty(c)&&(e[c]=void 0===b[c]&&void 0!==l?l[c]:b[c])}c=arguments.length-2;if(1===c)e.children=d;else if(1=b;)c=d,d=d._next;a._next=d;null!==c&&(c._next=a)}return a};(function(a,b,c){te=a;Ue=b;ue=c})(mg,og,function(){M||0===fa||(ha(fa,!1),fa=0)});var Cg={createPortal:qg,findDOMNode:function(a){if(null==a)return null;if(1===a.nodeType)return a;var b=a._reactInternalFiber;void 0=== + b&&("function"===typeof a.render?p("188"):p("268",Object.keys(a)));a=Pe(b);a=null===a?null:a.stateNode;return a},hydrate:function(a,b,c){return Cc(null,a,b,!0,c)},render:function(a,b,c){return Cc(null,a,b,!1,c)},unstable_renderSubtreeIntoContainer:function(a,b,c,d){null==a||void 0===a._reactInternalFiber?p("38"):void 0;return Cc(a,b,c,!1,d)},unmountComponentAtNode:function(a){Bc(a)?void 0:p("40");return a._reactRootContainer?(ng(function(){Cc(null,null,a,!1,function(){a._reactRootContainer=null})}), + !0):!1},unstable_createPortal:function(){return qg.apply(void 0,arguments)},unstable_batchedUpdates:mg,unstable_interactiveUpdates:og,flushSync:function(a,b){M?p("187"):void 0;var c=B;B=!0;try{return ig(a,b)}finally{B=c,ha(1073741823,!1)}},unstable_flushControlled:function(a){var b=B;B=!0;try{ig(a)}finally{(B=b)||M||ha(1073741823,!1)}},__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED:{Events:[ee,va,Lc,Vd.injectEventPluginsByName,Gc,Ha,function(a){Ic(a,Lg)},qe,re,Yb,Kc]},unstable_createRoot:function(a, +-b){Bc(a)?void 0:p("299","unstable_createRoot");return new cb(a,!0,null!=b&&!0===b.hydrate)}};(function(a){var b=a.findFiberByHostInstance;return lh(G({},a,{findHostInstanceByFiber:function(a){a=Pe(a);return null===a?null:a.stateNode},findFiberByHostInstance:function(a){return b?b(a):null}}))})({findFiberByHostInstance:Nb,bundleType:0,version:"16.6.1-canary-b3d1a81a9",rendererPackageName:"react-dom"});var Dg={default:Cg},Eg=Dg&&Cg||Dg;return Eg.default||Eg}); ++b){Bc(a)?void 0:p("299","unstable_createRoot");return new cb(a,!0,null!=b&&!0===b.hydrate)}};(function(a){var b=a.findFiberByHostInstance;return lh(G({},a,{findHostInstanceByFiber:function(a){a=Pe(a);return null===a?null:a.stateNode},findFiberByHostInstance:function(a){return b?b(a):null}}))})({findFiberByHostInstance:Nb,bundleType:0,version:"1.2.3",rendererPackageName:"react-dom"});var Dg={default:Cg},Eg=Dg&&Cg||Dg;return Eg.default||Eg}); +Index: build/node_modules/react-dom/umd/react-dom.profiling.min.js +=================================================================== +--- build/node_modules/react-dom/umd/react-dom.profiling.min.js ++++ build/node_modules/react-dom/umd/react-dom.profiling.min.js +@@ -1,5 +1,5 @@ +-/** @license React v0.0.0-b3d1a81a9 ++/** @license React v1.2.3 + * react-dom.profiling.min.js + * + * Copyright (c) Facebook, Inc. and its affiliates. + * +@@ -205,6 +205,6 @@ + (b=this._callbacks=[]);b.push(a)}};Za.prototype._onCommit=function(){if(!this._didCommit){this._didCommit=!0;var a=this._callbacks;if(null!==a)for(var b=0;b=b;)c=d,d=d._next;a._next=d;null!==c&&(c._next=a)}return a};(function(a,b,c){qe=a;Re=b;re=c})(lg,ng,function(){L||0===da||(ea(da, + !1),da=0)});var Bg={createPortal:pg,findDOMNode:function(a){if(null==a)return null;if(1===a.nodeType)return a;var b=a._reactInternalFiber;void 0===b&&("function"===typeof a.render?n("188"):n("268",Object.keys(a)));a=Me(b);a=null===a?null:a.stateNode;return a},hydrate:function(a,b,c){return yc(null,a,b,!0,c)},render:function(a,b,c){return yc(null,a,b,!1,c)},unstable_renderSubtreeIntoContainer:function(a,b,c,d){null==a||void 0===a._reactInternalFiber?n("38"):void 0;return yc(a,b,c,!1,d)},unmountComponentAtNode:function(a){xc(a)? + void 0:n("40");return a._reactRootContainer?(mg(function(){yc(null,null,a,!1,function(){a._reactRootContainer=null})}),!0):!1},unstable_createPortal:function(){return pg.apply(void 0,arguments)},unstable_batchedUpdates:lg,unstable_interactiveUpdates:ng,flushSync:function(a,b){L?n("187"):void 0;var c=z;z=!0;try{return hg(a,b)}finally{z=c,ea(1073741823,!1)}},unstable_flushControlled:function(a){var b=z;z=!0;try{hg(a)}finally{(z=b)||L||ea(1073741823,!1)}},__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED:{Events:[be, +-ta,Ic,Sd.injectEventPluginsByName,Dc,Ha,function(a){Fc(a,Kg)},ne,oe,Ub,Hc]},unstable_createRoot:function(a,b){xc(a)?void 0:n("299","unstable_createRoot");return new $a(a,!0,null!=b&&!0===b.hydrate)}};(function(a){var b=a.findFiberByHostInstance;return mh(A({},a,{findHostInstanceByFiber:function(a){a=Me(a);return null===a?null:a.stateNode},findFiberByHostInstance:function(a){return b?b(a):null}}))})({findFiberByHostInstance:Jb,bundleType:0,version:"16.6.1-canary-b3d1a81a9",rendererPackageName:"react-dom"}); ++ta,Ic,Sd.injectEventPluginsByName,Dc,Ha,function(a){Fc(a,Kg)},ne,oe,Ub,Hc]},unstable_createRoot:function(a,b){xc(a)?void 0:n("299","unstable_createRoot");return new $a(a,!0,null!=b&&!0===b.hydrate)}};(function(a){var b=a.findFiberByHostInstance;return mh(A({},a,{findHostInstanceByFiber:function(a){a=Me(a);return null===a?null:a.stateNode},findFiberByHostInstance:function(a){return b?b(a):null}}))})({findFiberByHostInstance:Jb,bundleType:0,version:"1.2.3",rendererPackageName:"react-dom"}); + var Cg={default:Bg},Dg=Cg&&Bg||Cg;return Dg.default||Dg}); +Index: build/node_modules/react-dom/umd/react-dom-unstable-native-dependencies.development.js +=================================================================== +--- build/node_modules/react-dom/umd/react-dom-unstable-native-dependencies.development.js ++++ build/node_modules/react-dom/umd/react-dom-unstable-native-dependencies.development.js +@@ -1,5 +1,5 @@ +-/** @license React v0.0.0-b3d1a81a9 ++/** @license React v1.2.3 + * react-dom-unstable-native-dependencies.development.js + * + * Copyright (c) Facebook, Inc. and its affiliates. + * +Index: build/node_modules/react-dom/umd/react-dom-test-utils.production.min.js +=================================================================== +--- build/node_modules/react-dom/umd/react-dom-test-utils.production.min.js ++++ build/node_modules/react-dom/umd/react-dom-test-utils.production.min.js +@@ -1,5 +1,5 @@ +-/** @license React v0.0.0-b3d1a81a9 ++/** @license React v1.2.3 + * react-dom-test-utils.production.min.js + * + * Copyright (c) Facebook, Inc. and its affiliates. + * +Index: build/node_modules/react-dom/umd/react-dom.development.js +=================================================================== +--- build/node_modules/react-dom/umd/react-dom.development.js ++++ build/node_modules/react-dom/umd/react-dom.development.js +@@ -1,5 +1,5 @@ +-/** @license React v0.0.0-b3d1a81a9 ++/** @license React v1.2.3 + * react-dom.development.js + * + * Copyright (c) Facebook, Inc. and its affiliates. + * +@@ -19471,9 +19471,9 @@ + } + + // TODO: this is special because it gets imported during build. + +-var ReactVersion = '16.6.1-canary-b3d1a81a9'; ++var ReactVersion = '1.2.3'; + + // TODO: This type is shared between the reconciler and ReactDOM, but will + // eventually be lifted out to the renderer. + var ReactCurrentOwner = ReactSharedInternals.ReactCurrentOwner; +Index: build/node_modules/react-dom/umd/react-dom-server.browser.production.min.js +=================================================================== +--- build/node_modules/react-dom/umd/react-dom-server.browser.production.min.js ++++ build/node_modules/react-dom/umd/react-dom-server.browser.production.min.js +@@ -1,5 +1,5 @@ +-/** @license React v0.0.0-b3d1a81a9 ++/** @license React v1.2.3 + * react-dom-server.browser.production.min.js + * + * Copyright (c) Facebook, Inc. and its affiliates. + * +@@ -36,5 +36,5 @@ + "__html"in h.dangerouslySetInnerHTML?void 0:v("61")),null!=h.style&&"object"!==typeof h.style?v("62",""):void 0;h=d;e=this.makeStaticMarkup;k=1===this.stack.length;q="<"+a.type;for(x in h)if(za.call(h,x)){var m=h[x];if(null!=m){if("style"===x){p=void 0;var l="",t="";for(p in m)if(m.hasOwnProperty(p)){var n=0===p.indexOf("--"),w=m[p];if(null!=w){var u=p;if(N.hasOwnProperty(u))u=N[u];else{var z=u.replace(va,"-$1").toLowerCase().replace(wa,"-ms-");u=N[u]=z}l+=t+u+":";t=p;n=null==w||"boolean"===typeof w|| + ""===w?"":n||"number"!==typeof w||0===w||D.hasOwnProperty(t)&&D[t]?(""+w).trim():w+"px";l+=n;t=";"}}m=l||null}p=null;b:if(n=b,w=h,-1===n.indexOf("-"))n="string"===typeof w.is;else switch(n){case "annotation-xml":case "color-profile":case "font-face":case "font-face-src":case "font-face-uri":case "font-face-format":case "font-face-name":case "missing-glyph":n=!1;break b;default:n=!0}if(n)Aa.hasOwnProperty(x)||(p=x,p=X(p)&&null!=m?p+"="+('"'+B(m)+'"'):"");else{n=x;p=m;m=r.hasOwnProperty(n)?r[n]:null; + if(w="style"!==n)w=null!==m?0===m.type:!(2":(x+=">",h="");a:{e=d.dangerouslySetInnerHTML;if(null!=e){if(null!=e.__html){e=e.__html;break a}}else if(e=d.children,"string"===typeof e||"number"===typeof e){e= + B(e);break a}e=null}null!=e?(d=[],xa[b]&&"\n"===e.charAt(0)&&(x+="\n"),x+=e):d=A(d.children);a=a.type;c=null==c||"http://www.w3.org/1999/xhtml"===c?da(a):"http://www.w3.org/2000/svg"===c&&"foreignObject"===a?"http://www.w3.org/1999/xhtml":c;this.stack.push({domNamespace:c,type:b,children:d,childIndex:0,context:f,footer:h});this.previousWasTextNode=!1;return x};return a}();k={renderToString:function(a){a=new ia(a,!1);try{return a.read(Infinity)}finally{a.destroy()}},renderToStaticMarkup:function(a){a= +-new ia(a,!0);try{return a.read(Infinity)}finally{a.destroy()}},renderToNodeStream:function(){v("207")},renderToStaticNodeStream:function(){v("208")},version:"16.6.1-canary-b3d1a81a9"};k=(z={default:k},k)||z;return k.default||k}); ++new ia(a,!0);try{return a.read(Infinity)}finally{a.destroy()}},renderToNodeStream:function(){v("207")},renderToStaticNodeStream:function(){v("208")},version:"1.2.3"};k=(z={default:k},k)||z;return k.default||k}); +Index: build/node_modules/react-dom/umd/react-dom-test-utils.development.js +=================================================================== +--- build/node_modules/react-dom/umd/react-dom-test-utils.development.js ++++ build/node_modules/react-dom/umd/react-dom-test-utils.development.js +@@ -1,5 +1,5 @@ +-/** @license React v0.0.0-b3d1a81a9 ++/** @license React v1.2.3 + * react-dom-test-utils.development.js + * + * Copyright (c) Facebook, Inc. and its affiliates. + * +Index: build/node_modules/react-dom/cjs/react-dom-unstable-native-dependencies.production.min.js +=================================================================== +--- build/node_modules/react-dom/cjs/react-dom-unstable-native-dependencies.production.min.js ++++ build/node_modules/react-dom/cjs/react-dom-unstable-native-dependencies.production.min.js +@@ -1,5 +1,5 @@ +-/** @license React v0.0.0-b3d1a81a9 ++/** @license React v1.2.3 + * react-dom-unstable-native-dependencies.production.min.js + * + * Copyright (c) Facebook, Inc. and its affiliates. + * +Index: build/node_modules/react-dom/cjs/react-dom-server.node.production.min.js +=================================================================== +--- build/node_modules/react-dom/cjs/react-dom-server.node.production.min.js ++++ build/node_modules/react-dom/cjs/react-dom-server.node.production.min.js +@@ -1,5 +1,5 @@ +-/** @license React v0.0.0-b3d1a81a9 ++/** @license React v1.2.3 + * react-dom-server.node.production.min.js + * + * Copyright (c) Facebook, Inc. and its affiliates. + * +@@ -43,5 +43,5 @@ + !1;break b;default:m=!0}if(m)Ea.hasOwnProperty(x)||(n=x,n=la(n)&&null!=l?n+"="+('"'+T(l)+'"'):"");else{m=x;n=l;l=Q.hasOwnProperty(m)?Q[m]:null;if(t="style"!==m)t=null!==l?0===l.type:!(2":(x+=">",h="");a:{g=d.dangerouslySetInnerHTML;if(null!=g){if(null!=g.__html){g=g.__html;break a}}else if(g=d.children,"string"===typeof g||"number"===typeof g){g=T(g);break a}g=null}null!=g?(d=[],za[b]&&"\n"===g.charAt(0)&&(x+="\n"),x+=g):d=W(d.children);a=a.type;c=null==c||"http://www.w3.org/1999/xhtml"===c?ta(a):"http://www.w3.org/2000/svg"===c&&"foreignObject"===a?"http://www.w3.org/1999/xhtml":c;this.stack.push({domNamespace:c,type:b,children:d,childIndex:0,context:f,footer:h});this.previousWasTextNode= + !1;return x};return a}();function Ha(a,b){if("function"!==typeof b&&null!==b)throw new TypeError("Super expression must either be null or a function, not "+typeof b);a.prototype=Object.create(b&&b.prototype,{constructor:{value:a,enumerable:!1,writable:!0,configurable:!0}});b&&(Object.setPrototypeOf?Object.setPrototypeOf(a,b):a.__proto__=b)} + var Ia=function(a){function b(f,c){if(!(this instanceof b))throw new TypeError("Cannot call a class as a function");var e=a.call(this,{});if(!this)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");e=!e||"object"!==typeof e&&"function"!==typeof e?this:e;e.partialRenderer=new Z(f,c);return e}Ha(b,a);b.prototype._destroy=function(){this.partialRenderer.destroy()};b.prototype._read=function(a){try{this.push(this.partialRenderer.read(a))}catch(c){this.destroy(c)}};return b}(aa.Readable), +-Ja={renderToString:function(a){a=new Z(a,!1);try{return a.read(Infinity)}finally{a.destroy()}},renderToStaticMarkup:function(a){a=new Z(a,!0);try{return a.read(Infinity)}finally{a.destroy()}},renderToNodeStream:function(a){return new Ia(a,!1)},renderToStaticNodeStream:function(a){return new Ia(a,!0)},version:"16.6.1-canary-b3d1a81a9"},Ka={default:Ja},La=Ka&&Ja||Ka;module.exports=La.default||La; ++Ja={renderToString:function(a){a=new Z(a,!1);try{return a.read(Infinity)}finally{a.destroy()}},renderToStaticMarkup:function(a){a=new Z(a,!0);try{return a.read(Infinity)}finally{a.destroy()}},renderToNodeStream:function(a){return new Ia(a,!1)},renderToStaticNodeStream:function(a){return new Ia(a,!0)},version:"1.2.3"},Ka={default:Ja},La=Ka&&Ja||Ka;module.exports=La.default||La; +Index: build/node_modules/react-dom/cjs/react-dom-server.browser.development.js +=================================================================== +--- build/node_modules/react-dom/cjs/react-dom-server.browser.development.js ++++ build/node_modules/react-dom/cjs/react-dom-server.browser.development.js +@@ -1,5 +1,5 @@ +-/** @license React v0.0.0-b3d1a81a9 ++/** @license React v1.2.3 + * react-dom-server.browser.development.js + * + * Copyright (c) Facebook, Inc. and its affiliates. + * +@@ -65,9 +65,9 @@ + // preserve the format and params in the www builds. + + // TODO: this is special because it gets imported during build. + +-var ReactVersion = '16.6.1-canary-b3d1a81a9'; ++var ReactVersion = '1.2.3'; + + /** + * Similar to invariant but only logs a warning if the condition is not met. + * This can be used to log issues in development environments in critical +Index: build/node_modules/react-dom/cjs/react-dom.production.min.js +=================================================================== +--- build/node_modules/react-dom/cjs/react-dom.production.min.js ++++ build/node_modules/react-dom/cjs/react-dom.production.min.js +@@ -1,5 +1,5 @@ +-/** @license React v0.0.0-b3d1a81a9 ++/** @license React v1.2.3 + * react-dom.production.min.js + * + * Copyright (c) Facebook, Inc. and its affiliates. + * +@@ -244,6 +244,6 @@ + function ai(a,b,c,d,e){Zh(c)?void 0:t("200");var f=c._reactRootContainer;if(f){if("function"===typeof e){var g=e;e=function(){var a=Th(f._internalRoot);g.call(a)}}null!=a?f.legacy_renderSubtreeIntoContainer(a,b,e):f.render(b,e)}else{f=c._reactRootContainer=$h(c,d);if("function"===typeof e){var h=e;e=function(){var a=Th(f._internalRoot);h.call(a)}}Ph(function(){null!=a?f.legacy_renderSubtreeIntoContainer(a,b,e):f.render(b,e)})}return Th(f._internalRoot)} + function bi(a,b){var c=2":(x+=">",h="");a:{f=d.dangerouslySetInnerHTML;if(null!=f){if(null!=f.__html){f=f.__html;break a}}else if(f=d.children,"string"===typeof f||"number"===typeof f){f=U(f);break a}f=null}null!=f?(d=[],xa[b]&&"\n"===f.charAt(0)&&(x+="\n"),x+=f):d=X(d.children);a=a.type;c=null==c||"http://www.w3.org/1999/xhtml"===c?ra(a):"http://www.w3.org/2000/svg"===c&&"foreignObject"===a?"http://www.w3.org/1999/xhtml":c;this.stack.push({domNamespace:c,type:b,children:d,childIndex:0,context:e,footer:h});this.previousWasTextNode= +-!1;return x};return a}(),Ga={renderToString:function(a){a=new Fa(a,!1);try{return a.read(Infinity)}finally{a.destroy()}},renderToStaticMarkup:function(a){a=new Fa(a,!0);try{return a.read(Infinity)}finally{a.destroy()}},renderToNodeStream:function(){u("207")},renderToStaticNodeStream:function(){u("208")},version:"16.6.1-canary-b3d1a81a9"},Ha={default:Ga},Ia=Ha&&Ga||Ha;module.exports=Ia.default||Ia; ++!1;return x};return a}(),Ga={renderToString:function(a){a=new Fa(a,!1);try{return a.read(Infinity)}finally{a.destroy()}},renderToStaticMarkup:function(a){a=new Fa(a,!0);try{return a.read(Infinity)}finally{a.destroy()}},renderToNodeStream:function(){u("207")},renderToStaticNodeStream:function(){u("208")},version:"1.2.3"},Ha={default:Ga},Ia=Ha&&Ga||Ha;module.exports=Ia.default||Ia; +Index: build/node_modules/react-dom/cjs/react-dom-test-utils.development.js +=================================================================== +--- build/node_modules/react-dom/cjs/react-dom-test-utils.development.js ++++ build/node_modules/react-dom/cjs/react-dom-test-utils.development.js +@@ -1,5 +1,5 @@ +-/** @license React v0.0.0-b3d1a81a9 ++/** @license React v1.2.3 + * react-dom-test-utils.development.js + * + * Copyright (c) Facebook, Inc. and its affiliates. + * +Index: build/node_modules/react-is/umd/react-is.development.js +=================================================================== +--- build/node_modules/react-is/umd/react-is.development.js ++++ build/node_modules/react-is/umd/react-is.development.js +@@ -1,5 +1,5 @@ +-/** @license React v0.0.0-b3d1a81a9 ++/** @license React v1.2.3 + * react-is.development.js + * + * Copyright (c) Facebook, Inc. and its affiliates. + * +Index: build/node_modules/react-is/umd/react-is.production.min.js +=================================================================== +--- build/node_modules/react-is/umd/react-is.production.min.js ++++ build/node_modules/react-is/umd/react-is.production.min.js +@@ -1,5 +1,5 @@ +-/** @license React v0.0.0-b3d1a81a9 ++/** @license React v1.2.3 + * react-is.production.min.js + * + * Copyright (c) Facebook, Inc. and its affiliates. + * +Index: build/node_modules/react-is/cjs/react-is.development.js +=================================================================== +--- build/node_modules/react-is/cjs/react-is.development.js ++++ build/node_modules/react-is/cjs/react-is.development.js +@@ -1,5 +1,5 @@ +-/** @license React v0.0.0-b3d1a81a9 ++/** @license React v1.2.3 + * react-is.development.js + * + * Copyright (c) Facebook, Inc. and its affiliates. + * +Index: build/node_modules/react-is/cjs/react-is.production.min.js +=================================================================== +--- build/node_modules/react-is/cjs/react-is.production.min.js ++++ build/node_modules/react-is/cjs/react-is.production.min.js +@@ -1,5 +1,5 @@ +-/** @license React v0.0.0-b3d1a81a9 ++/** @license React v1.2.3 + * react-is.production.min.js + * + * Copyright (c) Facebook, Inc. and its affiliates. + * +Index: build/node_modules/react-reconciler/cjs/react-reconciler.development.js +=================================================================== +--- build/node_modules/react-reconciler/cjs/react-reconciler.development.js ++++ build/node_modules/react-reconciler/cjs/react-reconciler.development.js +@@ -1,5 +1,5 @@ +-/** @license React v0.0.0-b3d1a81a9 ++/** @license React v1.2.3 + * react-reconciler.development.js + * + * Copyright (c) Facebook, Inc. and its affiliates. + * +Index: build/node_modules/react-reconciler/cjs/react-reconciler.production.min.js +=================================================================== +--- build/node_modules/react-reconciler/cjs/react-reconciler.production.min.js ++++ build/node_modules/react-reconciler/cjs/react-reconciler.production.min.js +@@ -1,5 +1,5 @@ +-/** @license React v0.0.0-b3d1a81a9 ++/** @license React v1.2.3 + * react-reconciler.production.min.js + * + * Copyright (c) Facebook, Inc. and its affiliates. + * +Index: build/node_modules/react-reconciler/cjs/react-reconciler-persistent.development.js +=================================================================== +--- build/node_modules/react-reconciler/cjs/react-reconciler-persistent.development.js ++++ build/node_modules/react-reconciler/cjs/react-reconciler-persistent.development.js +@@ -1,5 +1,5 @@ +-/** @license React v0.0.0-b3d1a81a9 ++/** @license React v1.2.3 + * react-reconciler-persistent.development.js + * + * Copyright (c) Facebook, Inc. and its affiliates. + * +Index: build/node_modules/react-reconciler/cjs/react-reconciler-persistent.production.min.js +=================================================================== +--- build/node_modules/react-reconciler/cjs/react-reconciler-persistent.production.min.js ++++ build/node_modules/react-reconciler/cjs/react-reconciler-persistent.production.min.js +@@ -1,5 +1,5 @@ +-/** @license React v0.0.0-b3d1a81a9 ++/** @license React v1.2.3 + * react-reconciler-persistent.production.min.js + * + * Copyright (c) Facebook, Inc. and its affiliates. + * +Index: build/node_modules/react-reconciler/cjs/react-reconciler-reflection.production.min.js +=================================================================== +--- build/node_modules/react-reconciler/cjs/react-reconciler-reflection.production.min.js ++++ build/node_modules/react-reconciler/cjs/react-reconciler-reflection.production.min.js +@@ -1,5 +1,5 @@ +-/** @license React v0.0.0-b3d1a81a9 ++/** @license React v1.2.3 + * react-reconciler-reflection.production.min.js + * + * Copyright (c) Facebook, Inc. and its affiliates. + * +Index: build/node_modules/react-reconciler/cjs/react-reconciler-reflection.development.js +=================================================================== +--- build/node_modules/react-reconciler/cjs/react-reconciler-reflection.development.js ++++ build/node_modules/react-reconciler/cjs/react-reconciler-reflection.development.js +@@ -1,5 +1,5 @@ +-/** @license React v0.0.0-b3d1a81a9 ++/** @license React v1.2.3 + * react-reconciler-reflection.development.js + * + * Copyright (c) Facebook, Inc. and its affiliates. + * +Index: build/node_modules/react-test-renderer/umd/react-test-renderer-shallow.development.js +=================================================================== +--- build/node_modules/react-test-renderer/umd/react-test-renderer-shallow.development.js ++++ build/node_modules/react-test-renderer/umd/react-test-renderer-shallow.development.js +@@ -1,5 +1,5 @@ +-/** @license React v0.0.0-b3d1a81a9 ++/** @license React v1.2.3 + * react-test-renderer-shallow.development.js + * + * Copyright (c) Facebook, Inc. and its affiliates. + * +Index: build/node_modules/react-test-renderer/umd/react-test-renderer-shallow.production.min.js +=================================================================== +--- build/node_modules/react-test-renderer/umd/react-test-renderer-shallow.production.min.js ++++ build/node_modules/react-test-renderer/umd/react-test-renderer-shallow.production.min.js +@@ -1,5 +1,5 @@ +-/** @license React v0.0.0-b3d1a81a9 ++/** @license React v1.2.3 + * react-test-renderer-shallow.production.min.js + * + * Copyright (c) Facebook, Inc. and its affiliates. + * +Index: build/node_modules/react-test-renderer/umd/react-test-renderer.development.js +=================================================================== +--- build/node_modules/react-test-renderer/umd/react-test-renderer.development.js ++++ build/node_modules/react-test-renderer/umd/react-test-renderer.development.js +@@ -1,5 +1,5 @@ +-/** @license React v0.0.0-b3d1a81a9 ++/** @license React v1.2.3 + * react-test-renderer.development.js + * + * Copyright (c) Facebook, Inc. and its affiliates. + * +@@ -11622,9 +11622,9 @@ + } + + // TODO: this is special because it gets imported during build. + +-var ReactVersion = '16.6.1-canary-b3d1a81a9'; ++var ReactVersion = '1.2.3'; + + var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); + + function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } +Index: build/node_modules/react-test-renderer/umd/react-test-renderer.production.min.js +=================================================================== +--- build/node_modules/react-test-renderer/umd/react-test-renderer.production.min.js ++++ build/node_modules/react-test-renderer/umd/react-test-renderer.production.min.js +@@ -1,5 +1,5 @@ +-/** @license React v0.0.0-b3d1a81a9 ++/** @license React v1.2.3 + * react-test-renderer.production.min.js + * + * Copyright (c) Facebook, Inc. and its affiliates. + * +@@ -117,5 +117,5 @@ + !0===b.unstable_isConcurrent&&(d=!0));var e={children:[],createNodeMock:c,tag:"CONTAINER"},g=Gd(e,d,!1);null==g?n("215"):void 0;ac(a,g,null,null);a={root:void 0,toJSON:function(){if(null==g||null==g.current||null==e||0===e.children.length)return null;if(1===e.children.length)return bc(e.children[0]);var a=null;if(e.children&&e.children.length)for(var b=0;b