From f78c976f7ba4680346a70aef354637dd46787c53 Mon Sep 17 00:00:00 2001
From: Birk Johansson
Date: Mon, 28 Aug 2017 15:11:22 +0200
Subject: [PATCH 01/21] Add test environment.
---
.babelrc | 5 +-
app/src/api/api.js | 17 +-
app/test/mocha.opts | 3 +
app/test/setup.js | 39 +++
app/test/utils/api.spec.js | 112 +++++++
package.json | 123 +++----
yarn.lock | 659 +++++++++++++++++++++++++++++++++++--
7 files changed, 874 insertions(+), 84 deletions(-)
create mode 100644 app/test/mocha.opts
create mode 100644 app/test/setup.js
create mode 100644 app/test/utils/api.spec.js
diff --git a/.babelrc b/.babelrc
index 47a2ec22f..7ae3b7cb4 100644
--- a/.babelrc
+++ b/.babelrc
@@ -1,8 +1,11 @@
{
- "presets": [["es2015", { "modules": false }], "react", "stage-2"],
+ "presets": [["es2015"], "react", "stage-2"],
"env": {
"production": {
"presets": ["react-optimize"]
+ },
+ "test": {
+ "plugins": ["rewire"]
}
},
"plugins": [
diff --git a/app/src/api/api.js b/app/src/api/api.js
index 9117ffbe9..e5a40ca25 100644
--- a/app/src/api/api.js
+++ b/app/src/api/api.js
@@ -104,7 +104,20 @@ export function updateImage(appId, imageId, payload) {
});
}
-function fromApi(url, auth = false, extraOpts) {
+export function createReview(appId, payload) {
+ return fromApi(`apps/${appId}/reviews`, true, {
+ ...baseOptions,
+ ...postOpts,
+ body: JSON.stringify(payload)
+ })
+}
+
+export function deleteReview(appId, reviewId) {
+ return fromApi(`apps/${appId}/reviews/${reviewId}`, true, deleteOpts);
+}
+
+
+export function fromApi(url, auth = false, extraOpts) {
const headers = getAuthHeaders();
const opts = auth
? { headers, ...baseOptions, ...extraOpts }
@@ -114,7 +127,7 @@ function fromApi(url, auth = false, extraOpts) {
.then(response => response.json());
}
-function getAuthHeaders() {
+export function getAuthHeaders() {
const headers = {};
headers["Authorization"] = "Bearer " + getAuth().getToken();
return headers;
diff --git a/app/test/mocha.opts b/app/test/mocha.opts
new file mode 100644
index 000000000..fda3398fc
--- /dev/null
+++ b/app/test/mocha.opts
@@ -0,0 +1,3 @@
+--require app/test/setup.js
+--compilers js:babel-core/register
+--recursive app/test/**/*.spec.js
\ No newline at end of file
diff --git a/app/test/setup.js b/app/test/setup.js
new file mode 100644
index 000000000..15b6860dc
--- /dev/null
+++ b/app/test/setup.js
@@ -0,0 +1,39 @@
+require('isomorphic-fetch');
+import { JSDOM } from 'jsdom'
+
+global.window = new JSDOM('').window
+global.document = global.window.document;
+global.navigator = global.window.navigator;
+global.HTMLElement = global.window.HTMLElement;
+if (!global.window.localStorage) {
+ const localStorage = {
+ getItem() { return '{}'; },
+ setItem() {}
+ };
+
+ global.window.localStorage = localStorage;
+ global.localStorage = localStorage;
+}
+
+
+//Dont load image files etc, as it results in errors
+const noop = () => 1;
+require.extensions['.css'] = noop;
+require.extensions['.scss'] = noop;
+require.extensions['.png'] = noop;
+require.extensions['.jpg'] = noop;
+require.extensions['.jpeg'] = noop;
+require.extensions['.gif'] = noop;
+require.extensions['.svg'] = noop;
+
+
+//Inject chai and sinon to global, so we don't need to require these.
+const chaiAsPromised = require('chai-as-promised');
+const sinonChai = require('sinon-chai');
+global.chai = require('chai');
+global.chai.use(chaiAsPromised);
+global.chai.use(sinonChai);
+global.sinon = require('sinon');
+
+
+global.expect = global.chai.expect;
diff --git a/app/test/utils/api.spec.js b/app/test/utils/api.spec.js
new file mode 100644
index 000000000..ca47d654d
--- /dev/null
+++ b/app/test/utils/api.spec.js
@@ -0,0 +1,112 @@
+import __RewireAPI__, * as api from "../../src/api/api.js";
+
+let fetchStub;
+const randomToken = "aRandomBearerToken";
+const authHeader = {
+ Authorization: `Bearer ${randomToken}`
+};
+let fromApiSpy;
+let baseOptions;
+let successResponse;
+let errorResponse;
+
+describe("API", () => {
+ beforeEach(() => {
+ successResponse = new Response(JSON.stringify({}), {
+ status: 200
+ });
+
+ errorResponse = new Response(JSON.stringify({}), {
+ status: 401
+ });
+ __RewireAPI__.__Rewire__("getAuthHeaders", () => authHeader);
+ //get non exported values
+ baseOptions = __RewireAPI__.__GetDependency__('baseOptions');
+ fetchStub = sinon.stub(global, "fetch");
+ fetchStub.resolves(successResponse);
+ fromApiSpy = sinon.spy(api, "fromApi");
+ });
+
+ afterEach(() => {
+ fetchStub.restore();
+ fromApiSpy.restore();
+ __RewireAPI__.__ResetDependency__('getAuthHeaders');
+ });
+
+ describe("getAllApps()", () => {
+ it("should call fromApi with correct url and auth=true", () => {
+ const url = "apps/all";
+ return api.getAllApps().then(() => {
+ expect(fromApiSpy.calledWith(url, true));
+ });
+ });
+ });
+
+ describe("fromApi()", () => {
+ it("should return the response from fetch jsonified", () => {
+ return expect(api.fromApi("apps")).to.eventually.be.eql({});
+ });
+
+ it("should call fetch with method as GET by default", () => {
+ return api.fromApi("apps").then(() => {
+ const args = fetchStub.args[0][1];
+ expect(args.method).to.be.equal("GET")
+ })
+ });
+
+ it("should reject the promise with the response if status is not ok", () => {
+ fetchStub.rejects(errorResponse);
+ return expect(
+ api.fromApi("apps")
+ ).to.be.rejected
+ .and.to.eventually.be.eql(errorResponse)
+ .and.to.have.property("ok", false);
+ });
+
+ it("should call fetch with given URL concatenated to baseURL", (done) => {
+ const url = "apps/all";
+ api.fromApi(url).then(() => {
+ const args = fetchStub.args[0];
+ expect(args[0]).to.include(url);
+ done()
+ });
+ });
+
+ it("should use authorization header if auth=true", () => {
+ return api.fromApi("apps", true).then(() => {
+ const args = fetchStub.args[0][1];
+ expect(args.headers).to.have.property('Authorization')
+ expect(args.headers).to.be.eql(authHeader);
+ });
+ });
+
+ it("should not send headers if auth is omitted", () => {
+ return api.fromApi("apps").then(() => {
+ const args = fetchStub.args[0][1];
+ expect(args.headers).to.not.exist;
+ });
+ });
+
+ it("should merge extraOpts with defaultOpts and call fetch with merged opts", () => {
+ const extraOpts = {credentials: 'include'}
+ return api.fromApi("apps", false, extraOpts).then(() => {
+ const args = fetchStub.args[0][1];
+ expect(args.headers).to.not.exist;
+ expect(args).to.be.an("object").that.includes(extraOpts).and.has.property('method')
+ .that.is.eql(baseOptions.method);
+ });
+ });
+
+ it("should merge extraOpts with Headers and defaultOpts and call fetch with merged opts", () => {
+ const extraOpts = {credentials: 'include'}
+ return api.fromApi("apps", true, extraOpts).then(() => {
+ const args = fetchStub.args[0][1];
+ expect(args.headers).to.exist.with.property('Authorization');
+ expect(args.headers).to.be.eql({
+ Authorization: `Bearer ${randomToken}`
+ })
+ expect(args).to.be.an("object").that.includes(extraOpts);
+ });
+ });
+ });
+});
diff --git a/package.json b/package.json
index e4df8f21f..9376aa27e 100644
--- a/package.json
+++ b/package.json
@@ -1,59 +1,68 @@
{
- "name": "appstore-app",
- "version": "1.1.0",
- "main": "index.js",
- "license": "BSD-3-Clause",
- "scripts": {
- "start": "NODE_ENV='development' webpack-dev-server --config app/webpack.config.js",
- "build": "webpack -p --config app/webpack.config.js"
- },
- "devDependencies": {
- "babel-core": "6",
- "babel-loader": "^7.1.0",
- "babel-plugin-transform-imports": "^1.4.1",
- "babel-polyfill": "^6.23.0",
- "babel-preset-es2015": "6",
- "babel-preset-react": "6",
- "babel-preset-react-optimize": "^1.0.1",
- "babel-preset-stage-2": "6",
- "copy-webpack-plugin": "^4.0.1",
- "html-webpack-plugin": "^2.29.0",
- "redux-logger": "2.8.1",
- "webpack": "^3.0.0",
- "webpack-dev-middleware": "^1.11.0",
- "webpack-dev-server": "^2.5.1"
- },
- "dependencies": {
- "auth0-lock": "^10.18.0",
- "classnames": "^2.2.5",
- "css-loader": "^0.26.1",
- "file-loader": "^0.11.2",
- "history": "^4.5.1",
- "jwt-decode": "^2.1.0",
- "lodash": "^4.17.4",
- "material-components-web": "^0.16.0",
- "material-design-icons": "^3.0.1",
- "material-ui": "^0.18.7",
- "node-sass": "^4.5.3",
- "react": "~15.4",
- "react-animate-height": "^0.9.9",
- "react-dom": "~15.4",
- "react-redux": "5",
- "react-router": "4",
- "react-router-dom": "4",
- "react-slick": "^0.14.11",
- "react-tap-event-plugin": "^2.0.1",
- "react-transition-group": "^2.2.0",
- "recompose": "0.21",
- "redux": "3",
- "redux-form": "^7.0.3",
- "redux-observable": "0.12",
- "redux-optimistic-ui": "^3.0.0",
- "rxjs": "5",
- "sass-loader": "^6.0.6",
- "style-loader": "^0.13.1",
- "svg-loader": "^0.0.2",
- "whatwg-fetch": "^2.0.3"
- }
+ "name": "appstore-app",
+ "version": "1.1.0",
+ "main": "index.js",
+ "license": "BSD-3-Clause",
+ "scripts": {
+ "start": "NODE_ENV='development' webpack-dev-server --config app/webpack.config.js",
+ "build": "webpack -p --config app/webpack.config.js",
+ "test": "NODE_ENV=test mocha --opts app/test/mocha.opts"
+ },
+ "devDependencies": {
+ "babel-core": "6",
+ "babel-loader": "^7.1.0",
+ "babel-plugin-rewire": "^1.1.0",
+ "babel-plugin-transform-imports": "^1.4.1",
+ "babel-polyfill": "^6.23.0",
+ "babel-preset-es2015": "6",
+ "babel-preset-react": "6",
+ "babel-preset-react-optimize": "^1.0.1",
+ "babel-preset-stage-2": "6",
+ "chai": "^4.1.1",
+ "chai-as-promised": "^7.1.1",
+ "copy-webpack-plugin": "^4.0.1",
+ "enzyme": "^2.9.1",
+ "html-webpack-plugin": "^2.29.0",
+ "isomorphic-fetch": "^2.2.1",
+ "jsdom": "^11.2.0",
+ "mocha": "^3.5.0",
+ "redux-logger": "2.8.1",
+ "sinon": "^3.2.1",
+ "sinon-chai": "^2.13.0",
+ "webpack": "^3.0.0",
+ "webpack-dev-middleware": "^1.11.0",
+ "webpack-dev-server": "^2.5.1"
+ },
+ "dependencies": {
+ "auth0-lock": "^10.18.0",
+ "classnames": "^2.2.5",
+ "css-loader": "^0.26.1",
+ "file-loader": "^0.11.2",
+ "history": "^4.5.1",
+ "jwt-decode": "^2.1.0",
+ "lodash": "^4.17.4",
+ "material-components-web": "^0.16.0",
+ "material-design-icons": "^3.0.1",
+ "material-ui": "^0.18.7",
+ "node-sass": "^4.5.3",
+ "react": "~15.4",
+ "react-animate-height": "^0.9.9",
+ "react-dom": "~15.4",
+ "react-redux": "5",
+ "react-router": "4",
+ "react-router-dom": "4",
+ "react-slick": "^0.14.11",
+ "react-tap-event-plugin": "^2.0.1",
+ "react-transition-group": "^2.2.0",
+ "recompose": "0.21",
+ "redux": "3",
+ "redux-form": "^7.0.3",
+ "redux-observable": "0.12",
+ "redux-optimistic-ui": "^3.0.0",
+ "rxjs": "5",
+ "sass-loader": "^6.0.6",
+ "style-loader": "^0.13.1",
+ "svg-loader": "^0.0.2",
+ "whatwg-fetch": "^2.0.3"
+ }
}
-
diff --git a/yarn.lock b/yarn.lock
index 55a7ae31e..5c254de14 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -244,6 +244,14 @@
version "0.2.3"
resolved "https://registry.yarnpkg.com/@material/typography/-/typography-0.2.3.tgz#cddf4178098c9c7b4c2e78a33049376b4d6aeb53"
+"@types/node@^6.0.46":
+ version "6.0.88"
+ resolved "https://registry.yarnpkg.com/@types/node/-/node-6.0.88.tgz#f618f11a944f6a18d92b5c472028728a3e3d4b66"
+
+abab@^1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/abab/-/abab-1.0.3.tgz#b81de5f7274ec4e756d797cd834f303642724e5d"
+
abbrev@1:
version "1.0.9"
resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.0.9.tgz#91b4792588a7738c25f35dd6f63752a2f8776135"
@@ -261,10 +269,20 @@ acorn-dynamic-import@^2.0.0:
dependencies:
acorn "^4.0.3"
+acorn-globals@^3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-3.1.0.tgz#fd8270f71fbb4996b004fa880ee5d46573a731bf"
+ dependencies:
+ acorn "^4.0.4"
+
acorn@^4.0.3:
version "4.0.11"
resolved "https://registry.yarnpkg.com/acorn/-/acorn-4.0.11.tgz#edcda3bd937e7556410d42ed5860f67399c794c0"
+acorn@^4.0.4:
+ version "4.0.13"
+ resolved "https://registry.yarnpkg.com/acorn/-/acorn-4.0.13.tgz#105495ae5361d697bd195c825192e1ad7f253787"
+
acorn@^5.0.0:
version "5.0.3"
resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.0.3.tgz#c460df08491463f028ccb82eab3730bf01087b3d"
@@ -294,6 +312,10 @@ alphanum-sort@^1.0.1, alphanum-sort@^1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/alphanum-sort/-/alphanum-sort-1.0.2.tgz#97a1119649b211ad33691d9f9f486a8ec9fbe0a3"
+amdefine@>=0.0.4:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5"
+
ansi-html@0.0.7:
version "0.0.7"
resolved "https://registry.yarnpkg.com/ansi-html/-/ansi-html-0.0.7.tgz#813584021962a9e9e6fd039f940d12f56ca7859e"
@@ -340,6 +362,10 @@ arr-flatten@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.0.1.tgz#e5ffe54d45e19f32f216e91eb99c8ce892bb604b"
+array-equal@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/array-equal/-/array-equal-1.0.0.tgz#8c2a5ef2472fd9ea742b04c77a75093ba2757c93"
+
array-find-index@^1.0.1:
version "1.0.2"
resolved "https://registry.yarnpkg.com/array-find-index/-/array-find-index-1.0.2.tgz#df010aa1287e164bbda6f9723b0a96a1ec4187a1"
@@ -400,6 +426,10 @@ assert@^1.1.1:
dependencies:
util "0.10.3"
+assertion-error@^1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/assertion-error/-/assertion-error-1.0.2.tgz#13ca515d86206da0bac66e834dd397d87581094c"
+
async-each@^1.0.0:
version "1.0.1"
resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.1.tgz#19d386a1d9edc6e7c1c85d388aedbcc56d33602d"
@@ -682,6 +712,10 @@ babel-plugin-check-es2015-constants@^6.22.0:
dependencies:
babel-runtime "^6.22.0"
+babel-plugin-rewire@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/babel-plugin-rewire/-/babel-plugin-rewire-1.1.0.tgz#a6b966d9d8c06c03d95dcda2eec4e2521519549b"
+
babel-plugin-syntax-async-functions@^6.8.0:
version "6.13.0"
resolved "https://registry.yarnpkg.com/babel-plugin-syntax-async-functions/-/babel-plugin-syntax-async-functions-6.13.0.tgz#cad9cad1191b5ad634bf30ae0872391e0647be95"
@@ -1286,6 +1320,10 @@ brorand@^1.0.1:
version "1.0.7"
resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.0.7.tgz#6677fa5e4901bdbf9c9ec2a748e28dca407a9bfc"
+browser-stdout@1.3.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.0.tgz#f351d32969d32fa5d7a5567154263d928ae3bd1f"
+
browserify-aes@^1.0.0, browserify-aes@^1.0.4:
version "1.0.6"
resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.0.6.tgz#5e7725dbdef1fd5930d4ebab48567ce451c48a0a"
@@ -1430,6 +1468,23 @@ center-align@^0.1.1:
align-text "^0.1.3"
lazy-cache "^1.0.3"
+chai-as-promised@^7.1.1:
+ version "7.1.1"
+ resolved "https://registry.yarnpkg.com/chai-as-promised/-/chai-as-promised-7.1.1.tgz#08645d825deb8696ee61725dbf590c012eb00ca0"
+ dependencies:
+ check-error "^1.0.2"
+
+chai@^4.1.1:
+ version "4.1.1"
+ resolved "https://registry.yarnpkg.com/chai/-/chai-4.1.1.tgz#66e21279e6f3c6415ff8231878227900e2171b39"
+ dependencies:
+ assertion-error "^1.0.1"
+ check-error "^1.0.1"
+ deep-eql "^2.0.1"
+ get-func-name "^2.0.0"
+ pathval "^1.0.0"
+ type-detect "^4.0.0"
+
chain-function@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/chain-function/-/chain-function-1.0.0.tgz#0d4ab37e7e18ead0bdc47b920764118ce58733dc"
@@ -1448,6 +1503,31 @@ change-emitter@^0.1.2:
version "0.1.2"
resolved "https://registry.yarnpkg.com/change-emitter/-/change-emitter-0.1.2.tgz#6b88ca4d5d864e516f913421b11899a860aee8db"
+check-error@^1.0.1, check-error@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/check-error/-/check-error-1.0.2.tgz#574d312edd88bb5dd8912e9286dd6c0aed4aac82"
+
+cheerio@^0.22.0:
+ version "0.22.0"
+ resolved "https://registry.yarnpkg.com/cheerio/-/cheerio-0.22.0.tgz#a9baa860a3f9b595a6b81b1a86873121ed3a269e"
+ dependencies:
+ css-select "~1.2.0"
+ dom-serializer "~0.1.0"
+ entities "~1.1.1"
+ htmlparser2 "^3.9.1"
+ lodash.assignin "^4.0.9"
+ lodash.bind "^4.1.4"
+ lodash.defaults "^4.0.1"
+ lodash.filter "^4.4.0"
+ lodash.flatten "^4.2.0"
+ lodash.foreach "^4.3.0"
+ lodash.map "^4.4.0"
+ lodash.merge "^4.4.0"
+ lodash.pick "^4.2.1"
+ lodash.reduce "^4.4.0"
+ lodash.reject "^4.4.0"
+ lodash.some "^4.4.0"
+
chokidar@^1.4.3, chokidar@^1.6.0:
version "1.6.1"
resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-1.6.1.tgz#2f4447ab5e96e50fb3d789fd90d4c72e0e4c70c2"
@@ -1570,7 +1650,7 @@ combined-stream@^1.0.5, combined-stream@~1.0.5:
dependencies:
delayed-stream "~1.0.0"
-commander@2.9.x, commander@^2.9.0:
+commander@2.9.0, commander@2.9.x, commander@^2.9.0:
version "2.9.0"
resolved "https://registry.yarnpkg.com/commander/-/commander-2.9.0.tgz#9c99094176e12240cb22d6c5146098400fe0f7d4"
dependencies:
@@ -1627,6 +1707,10 @@ content-disposition@0.5.2:
version "0.5.2"
resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.2.tgz#0cf68bb9ddf5f2be7961c3a85178cb85dba78cb4"
+content-type-parser@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/content-type-parser/-/content-type-parser-1.0.1.tgz#c3e56988c53c65127fb46d4032a3a900246fdc94"
+
content-type@~1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.2.tgz#b7d113aee7a8dd27bd21133c4dc2529df1721eed"
@@ -1770,7 +1854,7 @@ css-loader@^0.26.1:
postcss-modules-values "^1.1.0"
source-list-map "^0.1.4"
-css-select@^1.1.0:
+css-select@^1.1.0, css-select@~1.2.0:
version "1.2.0"
resolved "https://registry.yarnpkg.com/css-select/-/css-select-1.2.0.tgz#2b3a110539c5355f1cd8d314623e870b121ec858"
dependencies:
@@ -1847,6 +1931,16 @@ csso@~2.3.1:
clap "^1.0.9"
source-map "^0.5.3"
+cssom@0.3.x, "cssom@>= 0.3.2 < 0.4.0":
+ version "0.3.2"
+ resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.2.tgz#b8036170c79f07a90ff2f16e22284027a243848b"
+
+"cssstyle@>= 0.2.37 < 0.3.0":
+ version "0.2.37"
+ resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-0.2.37.tgz#541097234cb2513c83ceed3acddc27ff27987d54"
+ dependencies:
+ cssom "0.3.x"
+
currently-unhandled@^0.4.1:
version "0.4.1"
resolved "https://registry.yarnpkg.com/currently-unhandled/-/currently-unhandled-0.4.1.tgz#988df33feab191ef799a61369dd76c17adf957ea"
@@ -1869,6 +1963,12 @@ date-now@^0.1.4:
version "0.1.4"
resolved "https://registry.yarnpkg.com/date-now/-/date-now-0.1.4.tgz#eaf439fd4d4848ad74e5cc7dbef200672b9e345b"
+debug@2.6.8:
+ version "2.6.8"
+ resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.8.tgz#e731531ca2ede27d188222427da17821d68ff4fc"
+ dependencies:
+ ms "2.0.0"
+
debug@^2.1.1, debug@^2.1.3, debug@^2.2.0:
version "2.6.0"
resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.0.tgz#bc596bcabe7617f11d9fa15361eded5608b8499b"
@@ -1889,6 +1989,12 @@ deep-diff@0.3.4:
version "0.3.4"
resolved "https://registry.yarnpkg.com/deep-diff/-/deep-diff-0.3.4.tgz#aac5c39952236abe5f037a2349060ba01b00ae48"
+deep-eql@^2.0.1:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/deep-eql/-/deep-eql-2.0.2.tgz#b1bac06e56f0a76777686d50c9feb75c2ed7679a"
+ dependencies:
+ type-detect "^3.0.0"
+
deep-equal@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.0.1.tgz#f5d260292b660e084eff4cdbc9f08ad3247448b5"
@@ -1897,6 +2003,17 @@ deep-extend@~0.4.0:
version "0.4.1"
resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.4.1.tgz#efe4113d08085f4e6f9687759810f807469e2253"
+deep-is@~0.1.3:
+ version "0.1.3"
+ resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34"
+
+define-properties@^1.1.2:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.2.tgz#83a73f2fea569898fb737193c8f873caf6d45c94"
+ dependencies:
+ foreach "^2.0.5"
+ object-keys "^1.0.8"
+
defined@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/defined/-/defined-1.0.0.tgz#c98d9bcef75674188e110969151199e39b1fa693"
@@ -1941,6 +2058,14 @@ detect-indent@^4.0.0:
dependencies:
repeating "^2.0.0"
+diff@3.2.0:
+ version "3.2.0"
+ resolved "https://registry.yarnpkg.com/diff/-/diff-3.2.0.tgz#c9ce393a4b7cbd0b058a725c93df299027868ff9"
+
+diff@^3.1.0:
+ version "3.3.0"
+ resolved "https://registry.yarnpkg.com/diff/-/diff-3.3.0.tgz#056695150d7aa93237ca7e378ac3b1682b7963b9"
+
diffie-hellman@^5.0.0:
version "5.0.2"
resolved "https://registry.yarnpkg.com/diffie-hellman/-/diffie-hellman-5.0.2.tgz#b5835739270cfe26acf632099fded2a07f209e5e"
@@ -1976,7 +2101,7 @@ dom-helpers@^3.2.0:
version "3.2.1"
resolved "https://registry.yarnpkg.com/dom-helpers/-/dom-helpers-3.2.1.tgz#3203e07fed217bd1f424b019735582fc37b2825a"
-dom-serializer@0:
+dom-serializer@0, dom-serializer@~0.1.0:
version "0.1.0"
resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.1.0.tgz#073c697546ce0780ce23be4a28e293e40bc30c82"
dependencies:
@@ -1987,7 +2112,7 @@ domain-browser@^1.1.1:
version "1.1.7"
resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.1.7.tgz#867aa4b093faa05f1de08c06f4d7b21fdf8698bc"
-domelementtype@1:
+domelementtype@1, domelementtype@^1.3.0:
version "1.3.0"
resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.3.0.tgz#b17aed82e8ab59e52dd9c19b1756e0fc187204c2"
@@ -2001,6 +2126,12 @@ domhandler@2.1:
dependencies:
domelementtype "1"
+domhandler@^2.3.0:
+ version "2.4.1"
+ resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-2.4.1.tgz#892e47000a99be55bbf3774ffea0561d8879c259"
+ dependencies:
+ domelementtype "1"
+
domutils@1.1:
version "1.1.6"
resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.1.6.tgz#bddc3de099b9a2efacc51c623f28f416ecc57485"
@@ -2014,6 +2145,13 @@ domutils@1.5.1:
dom-serializer "0"
domelementtype "1"
+domutils@^1.5.1:
+ version "1.6.2"
+ resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.6.2.tgz#1958cc0b4c9426e9ed367fb1c8e854891b0fa3ff"
+ dependencies:
+ dom-serializer "0"
+ domelementtype "1"
+
ecc-jsbn@~0.1.1:
version "0.1.1"
resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz#0fc73a9ed5f0d53c38193398523ef7e543777505"
@@ -2064,10 +2202,25 @@ enquire.js@^2.1.6:
version "2.1.6"
resolved "https://registry.yarnpkg.com/enquire.js/-/enquire.js-2.1.6.tgz#3e8780c9b8b835084c3f60e166dbc3c2a3c89814"
-entities@~1.1.1:
+entities@^1.1.1, entities@~1.1.1:
version "1.1.1"
resolved "https://registry.yarnpkg.com/entities/-/entities-1.1.1.tgz#6e5c2d0a5621b5dadaecef80b90edfb5cd7772f0"
+enzyme@^2.9.1:
+ version "2.9.1"
+ resolved "https://registry.yarnpkg.com/enzyme/-/enzyme-2.9.1.tgz#07d5ce691241240fb817bf2c4b18d6e530240df6"
+ dependencies:
+ cheerio "^0.22.0"
+ function.prototype.name "^1.0.0"
+ is-subset "^0.1.1"
+ lodash "^4.17.4"
+ object-is "^1.0.1"
+ object.assign "^4.0.4"
+ object.entries "^1.0.4"
+ object.values "^1.0.4"
+ prop-types "^15.5.10"
+ uuid "^3.0.1"
+
errno@^0.1.3:
version "0.1.4"
resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.4.tgz#b896e23a9e5e8ba33871fc996abd3635fc9a1c7d"
@@ -2080,6 +2233,24 @@ error-ex@^1.2.0:
dependencies:
is-arrayish "^0.2.1"
+es-abstract@^1.6.1:
+ version "1.8.0"
+ resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.8.0.tgz#3b00385e85729932beffa9163bbea1234e932914"
+ dependencies:
+ es-to-primitive "^1.1.1"
+ function-bind "^1.1.0"
+ has "^1.0.1"
+ is-callable "^1.1.3"
+ is-regex "^1.0.4"
+
+es-to-primitive@^1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.1.1.tgz#45355248a88979034b6792e19bb81f2b7975dd0d"
+ dependencies:
+ is-callable "^1.1.1"
+ is-date-object "^1.0.1"
+ is-symbol "^1.0.1"
+
es5-ext@^0.10.14, es5-ext@^0.10.9, es5-ext@~0.10.14:
version "0.10.23"
resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.23.tgz#7578b51be974207a5487821b56538c224e4e7b38"
@@ -2140,10 +2311,21 @@ escape-html@~1.0.3:
version "1.0.3"
resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988"
-escape-string-regexp@^1.0.2:
+escape-string-regexp@1.0.5, escape-string-regexp@^1.0.2:
version "1.0.5"
resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
+escodegen@^1.6.1:
+ version "1.8.1"
+ resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.8.1.tgz#5a5b53af4693110bebb0867aa3430dd3b70a1018"
+ dependencies:
+ esprima "^2.7.1"
+ estraverse "^1.9.1"
+ esutils "^2.0.2"
+ optionator "^0.8.1"
+ optionalDependencies:
+ source-map "~0.2.0"
+
escope@^3.6.0:
version "3.6.0"
resolved "https://registry.yarnpkg.com/escope/-/escope-3.6.0.tgz#e01975e812781a163a6dadfdd80398dc64c889c3"
@@ -2153,7 +2335,7 @@ escope@^3.6.0:
esrecurse "^4.1.0"
estraverse "^4.1.1"
-esprima@^2.6.0:
+esprima@^2.6.0, esprima@^2.7.1:
version "2.7.3"
resolved "https://registry.yarnpkg.com/esprima/-/esprima-2.7.3.tgz#96e3b70d5779f6ad49cd032673d1c312767ba581"
@@ -2164,6 +2346,10 @@ esrecurse@^4.1.0:
estraverse "^4.1.0"
object-assign "^4.0.1"
+estraverse@^1.9.1:
+ version "1.9.3"
+ resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-1.9.3.tgz#af67f2dc922582415950926091a4005d29c9bb44"
+
estraverse@^4.1.0, estraverse@^4.1.1:
version "4.2.0"
resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.2.0.tgz#0dee3fed31fcd469618ce7342099fc1afa0bdb13"
@@ -2264,6 +2450,10 @@ fast-deep-equal@^0.1.0:
version "0.1.0"
resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-0.1.0.tgz#5c6f4599aba6b333ee3342e2ed978672f1001f8d"
+fast-levenshtein@~2.0.4:
+ version "2.0.6"
+ resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917"
+
fastparse@^1.1.1:
version "1.1.1"
resolved "https://registry.yarnpkg.com/fastparse/-/fastparse-1.1.1.tgz#d1e2643b38a94d7583b479060e6c4affc94071f8"
@@ -2383,6 +2573,10 @@ for-own@^1.0.0:
dependencies:
for-in "^1.0.1"
+foreach@^2.0.5:
+ version "2.0.5"
+ resolved "https://registry.yarnpkg.com/foreach/-/foreach-2.0.5.tgz#0bee005018aeb260d0a3af3ae658dd0136ec1b99"
+
forever-agent@~0.6.1:
version "0.6.1"
resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91"
@@ -2395,6 +2589,12 @@ form-data@^2.1.1, form-data@~2.1.1:
combined-stream "^1.0.5"
mime-types "^2.1.12"
+formatio@1.2.0, formatio@^1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/formatio/-/formatio-1.2.0.tgz#f3b2167d9068c4698a8d51f4f760a39a54d818eb"
+ dependencies:
+ samsam "1.x"
+
formidable@^1.1.1:
version "1.1.1"
resolved "https://registry.yarnpkg.com/formidable/-/formidable-1.1.1.tgz#96b8886f7c3c3508b932d6bd70c4d3a88f35f1a9"
@@ -2445,10 +2645,18 @@ fstream@^1.0.0, fstream@^1.0.2, fstream@~1.0.10:
mkdirp ">=0.5 0"
rimraf "2"
-function-bind@^1.0.2:
+function-bind@^1.0.2, function-bind@^1.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.0.tgz#16176714c801798e4e8f2cf7f7529467bb4a5771"
+function.prototype.name@^1.0.0:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.0.3.tgz#0099ae5572e9dd6f03c97d023fd92bcc5e639eac"
+ dependencies:
+ define-properties "^1.1.2"
+ function-bind "^1.1.0"
+ is-callable "^1.1.3"
+
gauge@~2.7.1:
version "2.7.3"
resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.3.tgz#1c23855f962f17b3ad3d0dc7443f304542edfe09"
@@ -2482,6 +2690,10 @@ get-caller-file@^1.0.1:
version "1.0.2"
resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.2.tgz#f702e63127e7e231c160a80c1554acb70d5047e5"
+get-func-name@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/get-func-name/-/get-func-name-2.0.0.tgz#ead774abee72e20409433a066366023dd6887a41"
+
get-stdin@^4.0.1:
version "4.0.1"
resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-4.0.1.tgz#b968c6b0a04384324902e8bf1a5df32579a450fe"
@@ -2505,24 +2717,24 @@ glob-parent@^2.0.0:
dependencies:
is-glob "^2.0.0"
-glob@^6.0.4:
- version "6.0.4"
- resolved "https://registry.yarnpkg.com/glob/-/glob-6.0.4.tgz#0f08860f6a155127b2fadd4f9ce24b1aab6e4d22"
+glob@7.1.1, glob@^7.0.0, glob@^7.0.3, glob@^7.0.5, glob@~7.1.1:
+ version "7.1.1"
+ resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.1.tgz#805211df04faaf1c63a3600306cdf5ade50b2ec8"
dependencies:
+ fs.realpath "^1.0.0"
inflight "^1.0.4"
inherits "2"
- minimatch "2 || 3"
+ minimatch "^3.0.2"
once "^1.3.0"
path-is-absolute "^1.0.0"
-glob@^7.0.0, glob@^7.0.3, glob@^7.0.5, glob@~7.1.1:
- version "7.1.1"
- resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.1.tgz#805211df04faaf1c63a3600306cdf5ade50b2ec8"
+glob@^6.0.4:
+ version "6.0.4"
+ resolved "https://registry.yarnpkg.com/glob/-/glob-6.0.4.tgz#0f08860f6a155127b2fadd4f9ce24b1aab6e4d22"
dependencies:
- fs.realpath "^1.0.0"
inflight "^1.0.4"
inherits "2"
- minimatch "^3.0.2"
+ minimatch "2 || 3"
once "^1.3.0"
path-is-absolute "^1.0.0"
@@ -2556,6 +2768,10 @@ graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.1.9:
version "1.0.1"
resolved "https://registry.yarnpkg.com/graceful-readlink/-/graceful-readlink-1.0.1.tgz#4cafad76bc62f02fa039b2f94e9a3dd3a391a725"
+growl@1.9.2:
+ version "1.9.2"
+ resolved "https://registry.yarnpkg.com/growl/-/growl-1.9.2.tgz#0ea7743715db8d8de2c5ede1775e1b45ac85c02f"
+
handle-thing@^1.2.4:
version "1.2.5"
resolved "https://registry.yarnpkg.com/handle-thing/-/handle-thing-1.2.5.tgz#fd7aad726bf1a5fd16dfc29b2f7a6601d27139c4"
@@ -2664,6 +2880,12 @@ html-comment-regex@^1.1.0:
version "1.1.1"
resolved "https://registry.yarnpkg.com/html-comment-regex/-/html-comment-regex-1.1.1.tgz#668b93776eaae55ebde8f3ad464b307a4963625e"
+html-encoding-sniffer@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-1.0.1.tgz#79bf7a785ea495fe66165e734153f363ff5437da"
+ dependencies:
+ whatwg-encoding "^1.0.1"
+
html-entities@^1.2.0:
version "1.2.0"
resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-1.2.0.tgz#41948caf85ce82fed36e4e6a0ed371a6664379e2"
@@ -2692,6 +2914,17 @@ html-webpack-plugin@^2.29.0:
pretty-error "^2.0.2"
toposort "^1.0.0"
+htmlparser2@^3.9.1:
+ version "3.9.2"
+ resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-3.9.2.tgz#1bdf87acca0f3f9e53fa4fcceb0f4b4cbb00b338"
+ dependencies:
+ domelementtype "^1.3.0"
+ domhandler "^2.3.0"
+ domutils "^1.5.1"
+ entities "^1.1.1"
+ inherits "^2.0.1"
+ readable-stream "^2.0.2"
+
htmlparser2@~3.3.0:
version "3.3.0"
resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-3.3.0.tgz#cc70d05a59f6542e43f0e685c982e14c924a9efe"
@@ -2745,6 +2978,10 @@ hyphenate-style-name@^1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/hyphenate-style-name/-/hyphenate-style-name-1.0.2.tgz#31160a36930adaf1fc04c6074f7eb41465d4ec4b"
+iconv-lite@0.4.13:
+ version "0.4.13"
+ resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.13.tgz#1f88aba4ab0b1508e8312acc39345f36e992e2f2"
+
iconv-lite@~0.4.13:
version "0.4.15"
resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.15.tgz#fe265a218ac6a57cfe854927e9d04c19825eddeb"
@@ -2877,6 +3114,14 @@ is-builtin-module@^1.0.0:
dependencies:
builtin-modules "^1.0.0"
+is-callable@^1.1.1, is-callable@^1.1.3:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.3.tgz#86eb75392805ddc33af71c92a0eedf74ee7604b2"
+
+is-date-object@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.1.tgz#9aa20eb6aeebbff77fbd33e74ca01b33581d3a16"
+
is-dotfile@^1.0.0:
version "1.0.2"
resolved "https://registry.yarnpkg.com/is-dotfile/-/is-dotfile-1.0.2.tgz#2c132383f39199f8edc268ca01b9b007d205cc4d"
@@ -2980,16 +3225,30 @@ is-property@^1.0.0:
version "1.0.2"
resolved "https://registry.yarnpkg.com/is-property/-/is-property-1.0.2.tgz#57fe1c4e48474edd65b09911f26b1cd4095dda84"
+is-regex@^1.0.4:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.4.tgz#5517489b547091b0930e095654ced25ee97e9491"
+ dependencies:
+ has "^1.0.1"
+
is-stream@^1.0.1:
version "1.1.0"
resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44"
+is-subset@^0.1.1:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/is-subset/-/is-subset-0.1.1.tgz#8a59117d932de1de00f245fcdd39ce43f1e939a6"
+
is-svg@^2.0.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/is-svg/-/is-svg-2.1.0.tgz#cf61090da0d9efbcab8722deba6f032208dbb0e9"
dependencies:
html-comment-regex "^1.1.0"
+is-symbol@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.1.tgz#3cc59f00025194b6ab2e38dbae6689256b660572"
+
is-typedarray@~1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a"
@@ -3020,7 +3279,7 @@ isobject@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.0.tgz#39565217f3661789e8a0a0c080d5f7e6bc46e1a0"
-isomorphic-fetch@^2.1.1:
+isomorphic-fetch@^2.1.1, isomorphic-fetch@^2.2.1:
version "2.2.1"
resolved "https://registry.yarnpkg.com/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz#611ae1acf14f5e81f729507472819fe9733558a9"
dependencies:
@@ -3060,6 +3319,32 @@ jsbn@^0.1.0, jsbn@~0.1.0:
version "0.1.0"
resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.0.tgz#650987da0dd74f4ebf5a11377a2aa2d273e97dfd"
+jsdom@^11.2.0:
+ version "11.2.0"
+ resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-11.2.0.tgz#4f6b8736af3357c3af7227a3b54a5bda1c513fd6"
+ dependencies:
+ abab "^1.0.3"
+ acorn "^4.0.4"
+ acorn-globals "^3.1.0"
+ array-equal "^1.0.0"
+ content-type-parser "^1.0.1"
+ cssom ">= 0.3.2 < 0.4.0"
+ cssstyle ">= 0.2.37 < 0.3.0"
+ escodegen "^1.6.1"
+ html-encoding-sniffer "^1.0.1"
+ nwmatcher "^1.4.1"
+ parse5 "^3.0.2"
+ pn "^1.0.0"
+ request "^2.79.0"
+ request-promise-native "^1.0.3"
+ sax "^1.2.1"
+ symbol-tree "^3.2.1"
+ tough-cookie "^2.3.2"
+ webidl-conversions "^4.0.0"
+ whatwg-encoding "^1.0.1"
+ whatwg-url "^6.1.0"
+ xml-name-validator "^2.0.1"
+
jsesc@^1.3.0:
version "1.3.0"
resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-1.3.0.tgz#46c3fec8c1892b12b0833db9bc7622176dbab34b"
@@ -3096,7 +3381,7 @@ json2mq@^0.2.0:
dependencies:
string-convert "^0.2.0"
-json3@^3.3.2:
+json3@3.3.2, json3@^3.3.2:
version "3.3.2"
resolved "https://registry.yarnpkg.com/json3/-/json3-3.3.2.tgz#3c0434743df93e2f5c42aee7b19bcb483575f4e1"
@@ -3132,6 +3417,10 @@ jsprim@^1.2.2:
json-schema "0.2.3"
verror "1.3.6"
+just-extend@^1.1.22:
+ version "1.1.22"
+ resolved "https://registry.yarnpkg.com/just-extend/-/just-extend-1.1.22.tgz#3330af756cab6a542700c64b2e4e4aa062d52fff"
+
jwt-decode@^2.1.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/jwt-decode/-/jwt-decode-2.1.0.tgz#d3079cef1689d82d56bbb7aedcfea28b12f0e36a"
@@ -3172,6 +3461,13 @@ lcid@^1.0.0:
dependencies:
invert-kv "^1.0.0"
+levn@~0.3.0:
+ version "0.3.0"
+ resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee"
+ dependencies:
+ prelude-ls "~1.1.2"
+ type-check "~0.3.2"
+
load-json-file@^1.0.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-1.1.0.tgz#956905708d58b4bab4c2261b04f59f31c99374c0"
@@ -3214,10 +3510,41 @@ lodash-es@^4.17.3, lodash-es@^4.2.0, lodash-es@^4.2.1:
version "4.17.4"
resolved "https://registry.yarnpkg.com/lodash-es/-/lodash-es-4.17.4.tgz#dcc1d7552e150a0640073ba9cb31d70f032950e7"
+lodash._baseassign@^3.0.0:
+ version "3.2.0"
+ resolved "https://registry.yarnpkg.com/lodash._baseassign/-/lodash._baseassign-3.2.0.tgz#8c38a099500f215ad09e59f1722fd0c52bfe0a4e"
+ dependencies:
+ lodash._basecopy "^3.0.0"
+ lodash.keys "^3.0.0"
+
+lodash._basecopy@^3.0.0:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz#8da0e6a876cf344c0ad8a54882111dd3c5c7ca36"
+
+lodash._basecreate@^3.0.0:
+ version "3.0.3"
+ resolved "https://registry.yarnpkg.com/lodash._basecreate/-/lodash._basecreate-3.0.3.tgz#1bc661614daa7fc311b7d03bf16806a0213cf821"
+
+lodash._getnative@^3.0.0:
+ version "3.9.1"
+ resolved "https://registry.yarnpkg.com/lodash._getnative/-/lodash._getnative-3.9.1.tgz#570bc7dede46d61cdcde687d65d3eecbaa3aaff5"
+
+lodash._isiterateecall@^3.0.0:
+ version "3.0.9"
+ resolved "https://registry.yarnpkg.com/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz#5203ad7ba425fae842460e696db9cf3e6aac057c"
+
lodash.assign@^4.0.3, lodash.assign@^4.0.6, lodash.assign@^4.2.0:
version "4.2.0"
resolved "https://registry.yarnpkg.com/lodash.assign/-/lodash.assign-4.2.0.tgz#0d99f3ccd7a6d261d19bdaeb9245005d285808e7"
+lodash.assignin@^4.0.9:
+ version "4.2.0"
+ resolved "https://registry.yarnpkg.com/lodash.assignin/-/lodash.assignin-4.2.0.tgz#ba8df5fb841eb0a3e8044232b0e263a8dc6a28a2"
+
+lodash.bind@^4.1.4:
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/lodash.bind/-/lodash.bind-4.2.1.tgz#7ae3017e939622ac31b7d7d7dcb1b34db1690d35"
+
lodash.camelcase@^4.3.0:
version "4.3.0"
resolved "https://registry.yarnpkg.com/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz#b28aa6288a2b9fc651035c7711f65ab6190331a6"
@@ -3226,15 +3553,59 @@ lodash.clonedeep@^4.3.2:
version "4.5.0"
resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef"
+lodash.create@3.1.1:
+ version "3.1.1"
+ resolved "https://registry.yarnpkg.com/lodash.create/-/lodash.create-3.1.1.tgz#d7f2849f0dbda7e04682bb8cd72ab022461debe7"
+ dependencies:
+ lodash._baseassign "^3.0.0"
+ lodash._basecreate "^3.0.0"
+ lodash._isiterateecall "^3.0.0"
+
+lodash.defaults@^4.0.1:
+ version "4.2.0"
+ resolved "https://registry.yarnpkg.com/lodash.defaults/-/lodash.defaults-4.2.0.tgz#d09178716ffea4dde9e5fb7b37f6f0802274580c"
+
+lodash.filter@^4.4.0:
+ version "4.6.0"
+ resolved "https://registry.yarnpkg.com/lodash.filter/-/lodash.filter-4.6.0.tgz#668b1d4981603ae1cc5a6fa760143e480b4c4ace"
+
+lodash.flatten@^4.2.0:
+ version "4.4.0"
+ resolved "https://registry.yarnpkg.com/lodash.flatten/-/lodash.flatten-4.4.0.tgz#f31c22225a9632d2bbf8e4addbef240aa765a61f"
+
+lodash.foreach@^4.3.0:
+ version "4.5.0"
+ resolved "https://registry.yarnpkg.com/lodash.foreach/-/lodash.foreach-4.5.0.tgz#1a6a35eace401280c7f06dddec35165ab27e3e53"
+
+lodash.isarguments@^3.0.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz#2f573d85c6a24289ff00663b491c1d338ff3458a"
+
+lodash.isarray@^3.0.0:
+ version "3.0.4"
+ resolved "https://registry.yarnpkg.com/lodash.isarray/-/lodash.isarray-3.0.4.tgz#79e4eb88c36a8122af86f844aa9bcd851b5fbb55"
+
lodash.kebabcase@^4.1.1:
version "4.1.1"
resolved "https://registry.yarnpkg.com/lodash.kebabcase/-/lodash.kebabcase-4.1.1.tgz#8489b1cb0d29ff88195cceca448ff6d6cc295c36"
+lodash.keys@^3.0.0:
+ version "3.1.2"
+ resolved "https://registry.yarnpkg.com/lodash.keys/-/lodash.keys-3.1.2.tgz#4dbc0472b156be50a0b286855d1bd0b0c656098a"
+ dependencies:
+ lodash._getnative "^3.0.0"
+ lodash.isarguments "^3.0.0"
+ lodash.isarray "^3.0.0"
+
+lodash.map@^4.4.0:
+ version "4.6.0"
+ resolved "https://registry.yarnpkg.com/lodash.map/-/lodash.map-4.6.0.tgz#771ec7839e3473d9c4cde28b19394c3562f4f6d3"
+
lodash.memoize@^4.1.0:
version "4.1.2"
resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe"
-lodash.merge@^4.6.0:
+lodash.merge@^4.4.0, lodash.merge@^4.6.0:
version "4.6.0"
resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.0.tgz#69884ba144ac33fe699737a6086deffadd0f89c5"
@@ -3242,10 +3613,30 @@ lodash.mergewith@^4.6.0:
version "4.6.0"
resolved "https://registry.yarnpkg.com/lodash.mergewith/-/lodash.mergewith-4.6.0.tgz#150cf0a16791f5903b8891eab154609274bdea55"
+lodash.pick@^4.2.1:
+ version "4.4.0"
+ resolved "https://registry.yarnpkg.com/lodash.pick/-/lodash.pick-4.4.0.tgz#52f05610fff9ded422611441ed1fc123a03001b3"
+
+lodash.reduce@^4.4.0:
+ version "4.6.0"
+ resolved "https://registry.yarnpkg.com/lodash.reduce/-/lodash.reduce-4.6.0.tgz#f1ab6b839299ad48f784abbf476596f03b914d3b"
+
+lodash.reject@^4.4.0:
+ version "4.6.0"
+ resolved "https://registry.yarnpkg.com/lodash.reject/-/lodash.reject-4.6.0.tgz#80d6492dc1470864bbf583533b651f42a9f52415"
+
lodash.snakecase@^4.1.1:
version "4.1.1"
resolved "https://registry.yarnpkg.com/lodash.snakecase/-/lodash.snakecase-4.1.1.tgz#39d714a35357147837aefd64b5dcbb16becd8f8d"
+lodash.some@^4.4.0:
+ version "4.6.0"
+ resolved "https://registry.yarnpkg.com/lodash.some/-/lodash.some-4.6.0.tgz#1bb9f314ef6b8baded13b549169b2a945eb68e4d"
+
+lodash.sortby@^4.7.0:
+ version "4.7.0"
+ resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438"
+
lodash.tail@^4.1.1:
version "4.1.1"
resolved "https://registry.yarnpkg.com/lodash.tail/-/lodash.tail-4.1.1.tgz#d2333a36d9e7717c8ad2f7cacafec7c32b444664"
@@ -3258,7 +3649,7 @@ lodash.uniq@^4.3.0:
version "4.5.0"
resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773"
-lodash@^4.0.0, lodash@^4.14.0, lodash@^4.17.2, lodash@^4.17.3, lodash@^4.17.4, lodash@^4.2.0, lodash@^4.2.1, lodash@^4.3.0:
+lodash@^4.0.0, lodash@^4.13.1, lodash@^4.14.0, lodash@^4.17.2, lodash@^4.17.3, lodash@^4.17.4, lodash@^4.2.0, lodash@^4.2.1, lodash@^4.3.0:
version "4.17.4"
resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.4.tgz#78203a4d1c328ae1d86dca6460e369b57f4055ae"
@@ -3266,6 +3657,14 @@ lodash@~4.16.4:
version "4.16.6"
resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.16.6.tgz#d22c9ac660288f3843e16ba7d2b5d06cca27d777"
+lolex@^1.6.0:
+ version "1.6.0"
+ resolved "https://registry.yarnpkg.com/lolex/-/lolex-1.6.0.tgz#3a9a0283452a47d7439e72731b9e07d7386e49f6"
+
+lolex@^2.1.2:
+ version "2.1.2"
+ resolved "https://registry.yarnpkg.com/lolex/-/lolex-2.1.2.tgz#2694b953c9ea4d013e5b8bfba891c991025b2629"
+
longest@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/longest/-/longest-1.0.1.tgz#30a0b2da38f73770e8294a0d22e6625ed77d0097"
@@ -3464,12 +3863,28 @@ mixin-object@^2.0.1:
for-in "^0.1.3"
is-extendable "^0.1.1"
-mkdirp@0.5.x, "mkdirp@>=0.5 0", mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@~0.5.0, mkdirp@~0.5.1:
+mkdirp@0.5.1, mkdirp@0.5.x, "mkdirp@>=0.5 0", mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@~0.5.0, mkdirp@~0.5.1:
version "0.5.1"
resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903"
dependencies:
minimist "0.0.8"
+mocha@^3.5.0:
+ version "3.5.0"
+ resolved "https://registry.yarnpkg.com/mocha/-/mocha-3.5.0.tgz#1328567d2717f997030f8006234bce9b8cd72465"
+ dependencies:
+ browser-stdout "1.3.0"
+ commander "2.9.0"
+ debug "2.6.8"
+ diff "3.2.0"
+ escape-string-regexp "1.0.5"
+ glob "7.1.1"
+ growl "1.9.2"
+ json3 "3.3.2"
+ lodash.create "3.1.1"
+ mkdirp "0.5.1"
+ supports-color "3.1.2"
+
ms@0.7.1:
version "0.7.1"
resolved "https://registry.yarnpkg.com/ms/-/ms-0.7.1.tgz#9cd13c03adbff25b65effde7ce864ee952017098"
@@ -3478,6 +3893,10 @@ ms@0.7.2:
version "0.7.2"
resolved "https://registry.yarnpkg.com/ms/-/ms-0.7.2.tgz#ae25cf2512b3885a1d95d7f037868d8431124765"
+ms@2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8"
+
multicast-dns-service-types@^1.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz#899f11d9686e5e05cb91b35d5f0e63b773cfc901"
@@ -3493,6 +3912,10 @@ nan@^2.3.0, nan@^2.3.2:
version "2.5.1"
resolved "https://registry.yarnpkg.com/nan/-/nan-2.5.1.tgz#d5b01691253326a97a2bbee9e61c55d8d60351e2"
+native-promise-only@^0.8.1:
+ version "0.8.1"
+ resolved "https://registry.yarnpkg.com/native-promise-only/-/native-promise-only-0.8.1.tgz#20a318c30cb45f71fe7adfbf7b21c99c1472ef11"
+
ncname@1.0.x:
version "1.0.0"
resolved "https://registry.yarnpkg.com/ncname/-/ncname-1.0.0.tgz#5b57ad18b1ca092864ef62b0b1ed8194f383b71c"
@@ -3503,6 +3926,15 @@ negotiator@0.6.1:
version "0.6.1"
resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.1.tgz#2b327184e8992101177b28563fb5e7102acd0ca9"
+nise@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/nise/-/nise-1.0.1.tgz#0da92b10a854e97c0f496f6c2845a301280b3eef"
+ dependencies:
+ formatio "^1.2.0"
+ just-extend "^1.1.22"
+ lolex "^1.6.0"
+ path-to-regexp "^1.7.0"
+
no-case@^2.2.0:
version "2.3.1"
resolved "https://registry.yarnpkg.com/no-case/-/no-case-2.3.1.tgz#7aeba1c73a52184265554b7dc03baf720df80081"
@@ -3664,6 +4096,10 @@ number-is-nan@^1.0.0:
version "1.0.1"
resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d"
+nwmatcher@^1.4.1:
+ version "1.4.1"
+ resolved "https://registry.yarnpkg.com/nwmatcher/-/nwmatcher-1.4.1.tgz#7ae9b07b0ea804db7e25f05cb5fe4097d4e4949f"
+
oauth-sign@~0.8.1:
version "0.8.2"
resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.8.2.tgz#46a6ab7f0aead8deae9ec0565780b7d4efeb9d43"
@@ -3672,6 +4108,31 @@ object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1:
version "4.1.1"
resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863"
+object-is@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.0.1.tgz#0aa60ec9989a0b3ed795cf4d06f62cf1ad6539b6"
+
+object-keys@^1.0.10, object-keys@^1.0.8:
+ version "1.0.11"
+ resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.0.11.tgz#c54601778ad560f1142ce0e01bcca8b56d13426d"
+
+object.assign@^4.0.4:
+ version "4.0.4"
+ resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.0.4.tgz#b1c9cc044ef1b9fe63606fc141abbb32e14730cc"
+ dependencies:
+ define-properties "^1.1.2"
+ function-bind "^1.1.0"
+ object-keys "^1.0.10"
+
+object.entries@^1.0.4:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.0.4.tgz#1bf9a4dd2288f5b33f3a993d257661f05d161a5f"
+ dependencies:
+ define-properties "^1.1.2"
+ es-abstract "^1.6.1"
+ function-bind "^1.1.0"
+ has "^1.0.1"
+
object.omit@^2.0.0:
version "2.0.1"
resolved "https://registry.yarnpkg.com/object.omit/-/object.omit-2.0.1.tgz#1a9c744829f39dbb858c76ca3579ae2a54ebd1fa"
@@ -3679,6 +4140,15 @@ object.omit@^2.0.0:
for-own "^0.1.4"
is-extendable "^0.1.1"
+object.values@^1.0.4:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.0.4.tgz#e524da09b4f66ff05df457546ec72ac99f13069a"
+ dependencies:
+ define-properties "^1.1.2"
+ es-abstract "^1.6.1"
+ function-bind "^1.1.0"
+ has "^1.0.1"
+
obuf@^1.0.0, obuf@^1.1.0:
version "1.1.1"
resolved "https://registry.yarnpkg.com/obuf/-/obuf-1.1.1.tgz#104124b6c602c6796881a042541d36db43a5264e"
@@ -3706,6 +4176,17 @@ opn@4.0.2:
object-assign "^4.0.1"
pinkie-promise "^2.0.0"
+optionator@^0.8.1:
+ version "0.8.2"
+ resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.2.tgz#364c5e409d3f4d6301d6c0b4c05bba50180aeb64"
+ dependencies:
+ deep-is "~0.1.3"
+ fast-levenshtein "~2.0.4"
+ levn "~0.3.0"
+ prelude-ls "~1.1.2"
+ type-check "~0.3.2"
+ wordwrap "~1.0.0"
+
original@>=0.0.5:
version "1.0.0"
resolved "https://registry.yarnpkg.com/original/-/original-1.0.0.tgz#9147f93fa1696d04be61e01bd50baeaca656bd3b"
@@ -3786,6 +4267,12 @@ parse-json@^2.2.0:
dependencies:
error-ex "^1.2.0"
+parse5@^3.0.2:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/parse5/-/parse5-3.0.2.tgz#05eff57f0ef4577fb144a79f8b9a967a6cc44510"
+ dependencies:
+ "@types/node" "^6.0.46"
+
parseurl@~1.3.1:
version "1.3.1"
resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.1.tgz#c8ab8c9223ba34888aa64a297b28853bec18da56"
@@ -3820,7 +4307,7 @@ path-to-regexp@0.1.7:
version "0.1.7"
resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c"
-path-to-regexp@^1.5.3:
+path-to-regexp@^1.5.3, path-to-regexp@^1.7.0:
version "1.7.0"
resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-1.7.0.tgz#59fde0f435badacba103a84e9d3bc64e96b9937d"
dependencies:
@@ -3834,6 +4321,10 @@ path-type@^1.0.0:
pify "^2.0.0"
pinkie-promise "^2.0.0"
+pathval@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/pathval/-/pathval-1.1.0.tgz#b942e6d4bde653005ef6b71361def8727d0645e0"
+
pbkdf2@^3.0.3:
version "3.0.9"
resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.0.9.tgz#f2c4b25a600058b3c3773c086c37dbbee1ffe693"
@@ -3864,6 +4355,10 @@ pkg-dir@^2.0.0:
dependencies:
find-up "^2.1.0"
+pn@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/pn/-/pn-1.0.0.tgz#1cf5a30b0d806cd18f88fc41a6b5d4ad615b3ba9"
+
portfinder@^1.0.9:
version "1.0.13"
resolved "https://registry.yarnpkg.com/portfinder/-/portfinder-1.0.13.tgz#bb32ecd87c27104ae6ee44b5a3ccbf0ebb1aede9"
@@ -4110,6 +4605,10 @@ postcss@^5.0.10, postcss@^5.0.11, postcss@^5.0.12, postcss@^5.0.13, postcss@^5.0
source-map "^0.5.6"
supports-color "^3.2.3"
+prelude-ls@~1.1.2:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54"
+
prepend-http@^1.0.0:
version "1.0.4"
resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-1.0.4.tgz#d4f4562b0ce3696e41ac52d0e002e57a635dc6dc"
@@ -4568,6 +5067,20 @@ repeating@^2.0.0:
dependencies:
is-finite "^1.0.0"
+request-promise-core@1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/request-promise-core/-/request-promise-core-1.1.1.tgz#3eee00b2c5aa83239cfb04c5700da36f81cd08b6"
+ dependencies:
+ lodash "^4.13.1"
+
+request-promise-native@^1.0.3:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/request-promise-native/-/request-promise-native-1.0.4.tgz#86988ec8eee408e45579fce83bfd05b3adf9a155"
+ dependencies:
+ request-promise-core "1.1.1"
+ stealthy-require "^1.1.0"
+ tough-cookie ">=2.3.0"
+
request@2, request@^2.79.0:
version "2.79.0"
resolved "https://registry.yarnpkg.com/request/-/request-2.79.0.tgz#4dfe5bf6be8b8cdc37fcf93e04b65577722710de"
@@ -4635,6 +5148,10 @@ safe-buffer@^5.0.1:
version "5.1.0"
resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.0.tgz#fe4c8460397f9eaaaa58e73be46273408a45e223"
+samsam@1.x, samsam@^1.1.3:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/samsam/-/samsam-1.2.1.tgz#edd39093a3184370cb859243b2bdf255e7d8ea67"
+
sass-graph@^2.1.1:
version "2.1.2"
resolved "https://registry.yarnpkg.com/sass-graph/-/sass-graph-2.1.2.tgz#965104be23e8103cb7e5f710df65935b317da57b"
@@ -4653,6 +5170,10 @@ sass-loader@^6.0.6:
lodash.tail "^4.1.1"
pify "^3.0.0"
+sax@^1.2.1:
+ version "1.2.4"
+ resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9"
+
sax@~1.2.1:
version "1.2.2"
resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.2.tgz#fd8631a23bc7826bef5d871bdb87378c95647828"
@@ -4749,6 +5270,24 @@ simple-assign@^0.1.0:
version "0.1.0"
resolved "https://registry.yarnpkg.com/simple-assign/-/simple-assign-0.1.0.tgz#17fd3066a5f3d7738f50321bb0f14ca281cc4baa"
+sinon-chai@^2.13.0:
+ version "2.13.0"
+ resolved "https://registry.yarnpkg.com/sinon-chai/-/sinon-chai-2.13.0.tgz#b9a42e801c20234bfc2f43b29e6f4f61b60990c4"
+
+sinon@^3.2.1:
+ version "3.2.1"
+ resolved "https://registry.yarnpkg.com/sinon/-/sinon-3.2.1.tgz#d8adabd900730fd497788a027049c64b08be91c2"
+ dependencies:
+ diff "^3.1.0"
+ formatio "1.2.0"
+ lolex "^2.1.2"
+ native-promise-only "^0.8.1"
+ nise "^1.0.1"
+ path-to-regexp "^1.7.0"
+ samsam "^1.1.3"
+ text-encoding "0.6.4"
+ type-detect "^4.0.0"
+
slash@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/slash/-/slash-1.0.0.tgz#c41f2f6c39fc16d1cd17ad4b5d896114ae470d55"
@@ -4807,6 +5346,12 @@ source-map@0.5.x, source-map@^0.5.0, source-map@^0.5.3, source-map@^0.5.6, sourc
version "0.5.6"
resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.6.tgz#75ce38f52bf0733c5a7f0c118d81334a2bb5f412"
+source-map@~0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.2.0.tgz#dab73fbcfc2ba819b4de03bd6f6eaa48164b3f9d"
+ dependencies:
+ amdefine ">=0.0.4"
+
spdx-correct@~1.0.0:
version "1.0.2"
resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-1.0.2.tgz#4b3073d933ff51f3912f03ac5519498a4150db40"
@@ -4870,6 +5415,10 @@ stdout-stream@^1.4.0:
dependencies:
readable-stream "^2.0.1"
+stealthy-require@^1.1.0:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/stealthy-require/-/stealthy-require-1.1.1.tgz#35b09875b4ff49f26a777e509b3090a3226bf24b"
+
stream-browserify@^2.0.1:
version "2.0.1"
resolved "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-2.0.1.tgz#66266ee5f9bdb9940a4e4514cafb43bb71e5c9db"
@@ -4954,6 +5503,12 @@ superagent@^3.3.1:
qs "^6.1.0"
readable-stream "^2.0.5"
+supports-color@3.1.2:
+ version "3.1.2"
+ resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-3.1.2.tgz#72a262894d9d408b956ca05ff37b2ed8a6e2a2d5"
+ dependencies:
+ has-flag "^1.0.0"
+
supports-color@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7"
@@ -4984,6 +5539,10 @@ symbol-observable@^1.0.1, symbol-observable@^1.0.2, symbol-observable@^1.0.4:
version "1.0.4"
resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.0.4.tgz#29bf615d4aa7121bdd898b22d4b3f9bc4e2aa03d"
+symbol-tree@^3.2.1:
+ version "3.2.2"
+ resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.2.tgz#ae27db38f660a7ae2e1c3b7d1bc290819b8519e6"
+
tabbable@^1.0.3:
version "1.0.6"
resolved "https://registry.yarnpkg.com/tabbable/-/tabbable-1.0.6.tgz#7c26a87ea6f4a25edf5edb619745a0ae740724fc"
@@ -5013,6 +5572,10 @@ tar@^2.0.0, tar@~2.2.1:
fstream "^1.0.2"
inherits "2"
+text-encoding@0.6.4:
+ version "0.6.4"
+ resolved "https://registry.yarnpkg.com/text-encoding/-/text-encoding-0.6.4.tgz#e399a982257a276dae428bb92845cb71bdc26d19"
+
thunky@^0.1.0:
version "0.1.0"
resolved "https://registry.yarnpkg.com/thunky/-/thunky-0.1.0.tgz#bf30146824e2b6e67b0f2d7a4ac8beb26908684e"
@@ -5035,12 +5598,16 @@ toposort@^1.0.0:
version "1.0.3"
resolved "https://registry.yarnpkg.com/toposort/-/toposort-1.0.3.tgz#f02cd8a74bd8be2fc0e98611c3bacb95a171869c"
-tough-cookie@~2.3.0:
+tough-cookie@>=2.3.0, tough-cookie@^2.3.2, tough-cookie@~2.3.0:
version "2.3.2"
resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.3.2.tgz#f081f76e4c85720e6c37a5faced737150d84072a"
dependencies:
punycode "^1.4.1"
+tr46@~0.0.3:
+ version "0.0.3"
+ resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a"
+
trim-newlines@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-1.0.0.tgz#5887966bb582a4503a41eb524f7d35011815a613"
@@ -5061,6 +5628,20 @@ tweetnacl@^0.14.3, tweetnacl@~0.14.0:
version "0.14.5"
resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64"
+type-check@~0.3.2:
+ version "0.3.2"
+ resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72"
+ dependencies:
+ prelude-ls "~1.1.2"
+
+type-detect@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-3.0.0.tgz#46d0cc8553abb7b13a352b0d6dea2fd58f2d9b55"
+
+type-detect@^4.0.0:
+ version "4.0.3"
+ resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.3.tgz#0e3f2670b44099b0b46c284d136a7ef49c74c2ea"
+
type-is@~1.6.14:
version "1.6.14"
resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.14.tgz#e219639c17ded1ca0789092dd54a03826b817cb2"
@@ -5174,6 +5755,10 @@ uuid@^3.0.0:
version "3.0.1"
resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.0.1.tgz#6544bba2dfda8c1cf17e629a3a305e2bb1fee6c1"
+uuid@^3.0.1:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.1.0.tgz#3dd3d3e790abc24d7b0d3a034ffababe28ebbc04"
+
validate-npm-package-license@^3.0.1:
version "3.0.1"
resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz#2804babe712ad3379459acfbe24746ab2c303fbc"
@@ -5225,6 +5810,10 @@ wbuf@^1.1.0, wbuf@^1.4.0:
dependencies:
minimalistic-assert "^1.0.0"
+webidl-conversions@^4.0.0, webidl-conversions@^4.0.1:
+ version "4.0.2"
+ resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.2.tgz#a855980b1f0b6b359ba1d5d9fb39ae941faa63ad"
+
webpack-dev-middleware@^1.11.0:
version "1.11.0"
resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-1.11.0.tgz#09691d0973a30ad1f82ac73a12e2087f0a4754f9"
@@ -5304,6 +5893,12 @@ websocket-extensions@>=0.1.1:
version "0.1.1"
resolved "https://registry.yarnpkg.com/websocket-extensions/-/websocket-extensions-0.1.1.tgz#76899499c184b6ef754377c2dbb0cd6cb55d29e7"
+whatwg-encoding@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-1.0.1.tgz#3c6c451a198ee7aec55b1ec61d0920c67801a5f4"
+ dependencies:
+ iconv-lite "0.4.13"
+
whatwg-fetch@>=0.10.0, whatwg-fetch@^2.0.3:
version "2.0.3"
resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-2.0.3.tgz#9c84ec2dcf68187ff00bc64e1274b442176e1c84"
@@ -5312,6 +5907,14 @@ whatwg-fetch@^0.9.0:
version "0.9.0"
resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-0.9.0.tgz#0e3684c6cb9995b43efc9df03e4c365d95fd9cc0"
+whatwg-url@^6.1.0:
+ version "6.1.0"
+ resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-6.1.0.tgz#5fc8279b93d75483b9ced8b26239854847a18578"
+ dependencies:
+ lodash.sortby "^4.7.0"
+ tr46 "~0.0.3"
+ webidl-conversions "^4.0.1"
+
whet.extend@~0.9.9:
version "0.9.9"
resolved "https://registry.yarnpkg.com/whet.extend/-/whet.extend-0.9.9.tgz#f877d5bf648c97e5aa542fadc16d6a259b9c11a1"
@@ -5348,6 +5951,10 @@ wordwrap@0.0.2:
version "0.0.2"
resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.2.tgz#b79669bb42ecb409f83d583cad52ca17eaa1643f"
+wordwrap@~1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb"
+
wrap-ansi@^2.0.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85"
@@ -5363,6 +5970,10 @@ xml-char-classes@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/xml-char-classes/-/xml-char-classes-1.0.0.tgz#64657848a20ffc5df583a42ad8a277b4512bbc4d"
+xml-name-validator@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-2.0.1.tgz#4d8b8f1eccd3419aa362061becef515e1e559635"
+
xtend@^4.0.0:
version "4.0.1"
resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af"
From bf2bb3d98c9a55a840a3c4377ce2a00841790c11 Mon Sep 17 00:00:00 2001
From: Birk Johansson
Date: Mon, 11 Sep 2017 01:58:30 +0200
Subject: [PATCH 02/21] Config rework
---
.gitignore | 2 +
README.md | 34 ++--
app/config.js | 56 -------
app/src/api/api.js | 7 +-
app/src/components/appCards/AppCardItem.jsx | 10 +-
app/src/components/appView/AppView.jsx | 24 +--
app/src/components/form/NewAppVersionForm.jsx | 5 +-
.../components/form/UploadAppFormStepper.jsx | 26 +--
.../components/user/appList/AppListItem.jsx | 14 +-
.../user/userAppView/UserAppView.jsx | 18 ++-
app/src/components/utils/ActiveLink.jsx | 24 +--
app/src/constants/apiConstants.js | 7 -
app/src/utils/AuthService.js | 6 +-
app/src/utils/history.js | 5 +-
app/test/utils/api.spec.js | 5 +-
app/webpack.config.js | 148 ++++++++++--------
package.json | 1 +
yarn.lock | 4 +
18 files changed, 187 insertions(+), 209 deletions(-)
delete mode 100644 app/config.js
diff --git a/.gitignore b/.gitignore
index b650418f6..9e287e30b 100644
--- a/.gitignore
+++ b/.gitignore
@@ -10,3 +10,5 @@ target
.project
.settings
node_modules
+app/build
+build
\ No newline at end of file
diff --git a/README.md b/README.md
index acaf7aba9..18ca25f1a 100644
--- a/README.md
+++ b/README.md
@@ -9,7 +9,7 @@ DHIS 2 app store
git clone https://github.com/dhis2/dhis2-appstore.git
```
-### Create config file
+### Create back-end config file
Create config file called `appstore.conf` in `/opt/hisp/appstore` with the following config
> Note to change the credentials and secrets etc.
@@ -43,26 +43,38 @@ auth0.signingAlgorithm=HS256
### Frontend config
The frontend needs to know some basic information about the server to configure routes and API endpoints.
-This is located in `app/config.js`.
+This is located in `app/default.config.js`.
-For production (using tomcat) use the prod object, else the dev object.
+You can rename or copy this file to override the settings.
+Tries to load config files in the following order:
-##### BASE_APP_NAME
+ 1. default.config.js
+ 2. config.js
+
+Environment specific configs are also supported, and are merged if environment is set to either `development` or `production`.
+
+ 1. development.config.js
+ 2. production.config.js
+
+Note that the exported objects from each config file are (shallowly) merged with the previous, so any options not changed are kept from the previous config. This also means that if you include any nested settings, like `api`, you will need to include the nested settings in this object if you want to keep them.
+
+##### Base app name
This is the basename of where the app is located, used by routes. If it's hosted at `http://localhost:8080/appstore` this should be `/appstore`.
```
-BASE_APP_NAME: '/appstore'
+routes.baseAppName: '/appstore'
```
-##### API_BASE_URL
+##### API BaseURL
The endpoint of the backend API to be used.
```
-API_BASE_URL: 'http://localhost:8080/appstore/api/',
+api.baseURL: 'http://localhost:8080/appstore/api/',
```
-##### API_REDIRECT_URL
+##### API Redirect URL
The URL to be used when auth0 has successfully logged in a user, and is redirected back to the page. Note that this URL needs to be whitelisted on the auth0 side aswell.
```
- API_REDIRECT_URL: 'http://localhost:8080/appstore/user/'
+ api.redirectURL: 'http://localhost:8080/appstore/user/'
```
+
### Create postgres database (if you do not have one yet)
```sql
CREATE DATABASE appstore_db OWNER dhis;
@@ -94,5 +106,7 @@ Will be available at `localhost:3098/api/apps`.
yarn install
yarn start
```
-Will be available at `localhost:9000`. Using webpack-dev-server.
+Will be available at `localhost:9000`. Using webpack-dev-server.
+
+Note that to use all the features of the app, you will need to run a back-end server. This can be done in frontend-development by running the back-end server as shown in the previous section, and changing the appropiate config settings (most likely just api.baseURL and api.redirectURL).
diff --git a/app/config.js b/app/config.js
deleted file mode 100644
index 4d2e3645e..000000000
--- a/app/config.js
+++ /dev/null
@@ -1,56 +0,0 @@
-
-const isProd = (process.argv && process.argv.indexOf('-p') > -1) || process.env.NODE_ENV === 'production'
-
-//used when NODE_ENV is 'development'
-const dev = {
- BASE_APP_NAME: process.env.DHIS2_APPSTORE_BASE_APP_NAME || '',
- API_BASE_URL: process.env.DHIS2_APPSTORE_API_BASE_URL || 'http://localhost:3098/api/',
- API_REDIRECT_URL: process.env.DHIS2_APPSTORE_API_REDIRECT_URL || 'http://localhost:9000/user',
-}
-
-//used when NODE_ENV is not 'development'
-const prod = {
-
- /* Basename for routes.
- If this app is hosted at http://hostname/appstore this should be '/appstore' */
- BASE_APP_NAME: '/appstore',
-
- /* Base URL for the API.
- Should be absolute path to the api endpoint.
- Note the trailing '/' */
- API_BASE_URL: 'https://play.dhis2.org/appstore/api/',
-
- /* Redirect URL to use by auth0, note that you need to allow this url
- on the auth0 side as well. */
- API_REDIRECT_URL: 'https://play.dhis2.org/appstore/user',
-}
-
-//Map to Translate API names to display-names
-const appTypesToUI = {
- APP_STANDARD: 'Standard',
- APP_DASHBOARD: 'Dashboard',
- APP_TRACKER_DASHBOARD: 'Tracker Dashboard'
-}
-
-//Map to translate API status of apps to display-names
-const appStatusToUI = {
- NOT_APPROVED: 'Rejected',
- PENDING: 'Pending',
- APPROVED: 'Approved',
-}
-
-const DHISVersions = ['2.27', '2.26', '2.25', '2.24', '2.23', '2.22', '2.21'];
-
-const AUTH0ClientId = 'BTJ3iwPLO6hDC5w7JYWPlGd6461VNu81';
-const AUTH0Domain = 'dhis2.eu.auth0.com';
-
-
-
-
-module.exports = Object.assign({}, (isProd ? prod : dev), {
- DHISVersions,
- AUTH0ClientId,
- AUTH0Domain,
- appTypesToUI,
- appStatusToUI,
-})
diff --git a/app/src/api/api.js b/app/src/api/api.js
index e5a40ca25..7a9b59035 100644
--- a/app/src/api/api.js
+++ b/app/src/api/api.js
@@ -1,7 +1,7 @@
-import constants from "../../config";
+import config from "../config";
import { getAuth } from "../utils/AuthService";
-const baseURL = constants.API_BASE_URL;
+const baseURL = config.api.baseURL;
const baseOptions = {
method: "GET"
@@ -109,14 +109,13 @@ export function createReview(appId, payload) {
...baseOptions,
...postOpts,
body: JSON.stringify(payload)
- })
+ });
}
export function deleteReview(appId, reviewId) {
return fromApi(`apps/${appId}/reviews/${reviewId}`, true, deleteOpts);
}
-
export function fromApi(url, auth = false, extraOpts) {
const headers = getAuthHeaders();
const opts = auth
diff --git a/app/src/components/appCards/AppCardItem.jsx b/app/src/components/appCards/AppCardItem.jsx
index 918171702..8c9667f67 100644
--- a/app/src/components/appCards/AppCardItem.jsx
+++ b/app/src/components/appCards/AppCardItem.jsx
@@ -1,6 +1,6 @@
import React from "react";
import { Link } from "react-router-dom";
-import { appTypesToUI } from "../../../config";
+import config from "../../config";
import {
Card,
CardMedia,
@@ -46,15 +46,11 @@ const AppItem = props => {
- {name}
-
- }
+ title={{name}}
subtitle={
{developer.name ? developer.name : "Unspecified"}
{" "}
- {appTypesToUI[appType]}{" "}
+ {config.ui.appTypeToDisplayName[appType]}{" "}
}
/>
diff --git a/app/src/components/appView/AppView.jsx b/app/src/components/appView/AppView.jsx
index 21504f0f0..63e2c4a1f 100644
--- a/app/src/components/appView/AppView.jsx
+++ b/app/src/components/appView/AppView.jsx
@@ -15,7 +15,7 @@ import { Link } from "react-router-dom";
import { Redirect, Route } from "react-router-dom";
import VersionList from "../appVersion/VersionList";
import { loadApp } from "../../actions/actionCreators";
-import { appTypesToUI } from "../../../config";
+import config from "../../config";
import AppLogo from "./AppLogo";
import Theme from "../../styles/theme";
import { FadeAnimation } from "../utils/Animate";
@@ -57,7 +57,7 @@ class AppView extends Component {
);
const subtitle = (
- Type: {appTypesToUI[app.appType]}
+ Type: {config.ui.appTypeToDisplayName[app.appType]}
Author: {app.developer.name}
Organisation: {app.developer.organisation}{" "}
@@ -76,16 +76,16 @@ class AppView extends Component {
subtitle={subtitle}
titleStyle={{ fontSize: "2em" }}
/>
- {app.images.length > 0
- ?
-
-
- : null}
+ {app.images.length > 0 ? (
+
+
+
+ ) : null}
{
const errors = {};
const requiredFields = ["version", "file"];
diff --git a/app/src/components/form/UploadAppFormStepper.jsx b/app/src/components/form/UploadAppFormStepper.jsx
index c1bc6fa2d..78ecdf8fd 100644
--- a/app/src/components/form/UploadAppFormStepper.jsx
+++ b/app/src/components/form/UploadAppFormStepper.jsx
@@ -1,6 +1,6 @@
import React, { Component, PropTypes } from "react";
import { Card, CardText } from "material-ui/Card";
-import { DHISVersions } from "../../../config";
+import config from "../../config";
import MenuItem from "material-ui/MenuItem";
import { Field, FormSection } from "redux-form";
import * as formUtils from "./ReduxFormUtils";
@@ -12,14 +12,14 @@ import {
} from "../form/ReduxFormUtils";
import { red500 } from "material-ui/styles/colors";
import FormStepper from "./FormStepper";
-import PersonIcon from 'material-ui/svg-icons/social/person';
-import ImageIcon from 'material-ui/svg-icons/editor/insert-photo';
-import VersionIcon from 'material-ui/svg-icons/'
-const appTypes = [
- { value: "APP_STANDARD", label: "Standard" },
- { value: "APP_DASHBOARD", label: "Dashboard" },
- { value: "APP_TRACKER_DASHBOARD", label: "Tracker Dashboard" }
-];
+import PersonIcon from "material-ui/svg-icons/social/person";
+import ImageIcon from "material-ui/svg-icons/editor/insert-photo";
+import VersionIcon from "material-ui/svg-icons/";
+
+const appTypes = Object.keys(config.ui.appTypeToDisplayName).map(key => ({
+ value: key,
+ label: config.ui.appTypeToDisplayName[key]
+}));
const requiredFields = {
general: ["appName", "appType"],
@@ -80,12 +80,12 @@ const validate = values => {
return errors;
};
-const appTypesItems = appTypes.map((type, i) =>
+const appTypesItems = appTypes.map((type, i) => (
-);
-const DHISVersionItems = DHISVersions.map((version, i) =>
+));
+const DHISVersionItems = config.ui.dhisVersions.map((version, i) => (
-);
+));
const AppGeneralSection = props => {
return (
diff --git a/app/src/components/user/appList/AppListItem.jsx b/app/src/components/user/appList/AppListItem.jsx
index 447d8e013..4c317154d 100644
--- a/app/src/components/user/appList/AppListItem.jsx
+++ b/app/src/components/user/appList/AppListItem.jsx
@@ -8,7 +8,7 @@ import IconMenu from "material-ui/IconMenu";
import MenuItem from "material-ui/MenuItem";
import IconButton from "material-ui/IconButton";
import { withRouter } from "react-router";
-import { appTypesToUI } from "../../../../config";
+import config from "../../../config";
const appStatusStyle = {
fontSize: "16px",
@@ -117,12 +117,12 @@ const AppListItem = (props, state) => {
const secondaryText = (
{developer.name}
- {appTypesToUI[appType]}
- {!props.manager
- ?
-
Status: {appStatus[status].alt}
-
- : null}
+ {config.ui.appTypeToDisplayName[appType]}
+ {!props.manager ? (
+
+
Status: {appStatus[status].alt}
+
+ ) : null}
);
const listItemProps = {
diff --git a/app/src/components/user/userAppView/UserAppView.jsx b/app/src/components/user/userAppView/UserAppView.jsx
index 1304f7623..7e4db4572 100644
--- a/app/src/components/user/userAppView/UserAppView.jsx
+++ b/app/src/components/user/userAppView/UserAppView.jsx
@@ -23,7 +23,7 @@ import Subheader from "../../header/SubHeader";
import MenuItem from "material-ui/MenuItem";
import IconMenu from "material-ui/IconMenu";
import Theme from "../../../styles/theme";
-import { appTypesToUI } from "../../../../config";
+import config from "../../../config";
import * as selectors from "../../../selectors/userSelectors";
import MultipleUploadFileFields from "../../form/MultipleUploadFileFields";
import ImageViewer from "../../appView/ImageViewer";
@@ -267,21 +267,23 @@ const UserAppCardHeader = ({
>
priority_high
- {app.status == APP_STATUS_PENDING
- ? statusAlertPending
- : statusAlertRejected}
+ {app.status == APP_STATUS_PENDING ? (
+ statusAlertPending
+ ) : (
+ statusAlertRejected
+ )}
);
const subtitle = (
- Type: {appTypesToUI[app.appType]}
+ Type: {config.ui.appTypeToDisplayName[app.appType]}
Author: {app.developer.name}
Organisation: {app.developer.organisation}
{app.status == APP_STATUS_PENDING ||
- app.status == APP_STATUS_REJECTED
- ? statusAlertText
- : null}
+ app.status == APP_STATUS_REJECTED ? (
+ statusAlertText
+ ) : null}
);
diff --git a/app/src/components/utils/ActiveLink.jsx b/app/src/components/utils/ActiveLink.jsx
index 90b9759f8..b1e7c0f6d 100644
--- a/app/src/components/utils/ActiveLink.jsx
+++ b/app/src/components/utils/ActiveLink.jsx
@@ -2,22 +2,26 @@ import React, { Component } from "react";
import { BrowserRouter as Router, Route, Link } from "react-router-dom";
import Theme from "../../styles/theme";
-export const ActiveLink = ({ children, to, activeOnlyWhenExact }) =>
+/**
+ *
+ * @param {} param0
+ */
+export const ActiveLink = ({ children, to, activeOnlyWhenExact }) => (
+ children={({ match }) => (
-
- {children}
-
-
}
- />;
+ {children}
+
+ )}
+ />
+);
export default ActiveLink;
diff --git a/app/src/constants/apiConstants.js b/app/src/constants/apiConstants.js
index 32e578025..a86434f95 100644
--- a/app/src/constants/apiConstants.js
+++ b/app/src/constants/apiConstants.js
@@ -1,7 +1,3 @@
-export const API_BASE_URL = "http://localhost:8080/dhis-appstore/api/";
-export const AUTH_REDIRECT_URL = "http://localhost:8080/user";
-export const BASE_APP_NAME = "dhis-appstore";
-
export const appTypesToUI = {
APP_STANDARD: "Standard",
APP_DASHBOARD: "Dashboard",
@@ -35,6 +31,3 @@ export const appSchema = {
};
export const DHISVersions = ["2.26", "2.25", "2.24", "2.23", "2.22", "2.21"];
-
-export const AUTH0ClientId = "BTJ3iwPLO6hDC5w7JYWPlGd6461VNu81";
-export const AUTH0Domain = "dhis2.eu.auth0.com";
diff --git a/app/src/utils/AuthService.js b/app/src/utils/AuthService.js
index 78e3a482e..6aad155a2 100644
--- a/app/src/utils/AuthService.js
+++ b/app/src/utils/AuthService.js
@@ -2,7 +2,7 @@ import Auth0Lock from "auth0-lock";
import { isTokenExpired } from "./jwtHelper";
import { BrowserRouter } from "react-router-dom";
import History from "./history";
-import constants from "../../config";
+import config from "../config";
import store from "../store";
import Theme from "../styles/theme";
import logo from "../assets/img/dhis2.svg";
@@ -12,7 +12,7 @@ export default class AuthService {
// Configure Auth0
this.lock = new Auth0Lock(clientId, domain, {
auth: {
- redirectUrl: constants.API_REDIRECT_URL,
+ redirectUrl: config.API_REDIRECT_URL,
responseType: "token",
params: {
scope: "openid roles user_id"
@@ -95,6 +95,6 @@ let auth;
export function getAuth() {
if (auth) return auth;
- auth = new AuthService(constants.AUTH0ClientId, constants.AUTH0Domain);
+ auth = new AuthService(config.auth0.clientID, config.auth0.domain);
return auth;
}
diff --git a/app/src/utils/history.js b/app/src/utils/history.js
index d515ded18..fdeb8ad9c 100644
--- a/app/src/utils/history.js
+++ b/app/src/utils/history.js
@@ -1,6 +1,7 @@
import createBrowserHistory from "history/createBrowserHistory";
-import { BASE_APP_NAME } from "../../config";
+import config from "../config";
+
export const history = (() =>
- createBrowserHistory({ basename: BASE_APP_NAME }))();
+ createBrowserHistory({ basename: config.routes.baseAppName }))();
export default history;
diff --git a/app/test/utils/api.spec.js b/app/test/utils/api.spec.js
index ca47d654d..2593247ce 100644
--- a/app/test/utils/api.spec.js
+++ b/app/test/utils/api.spec.js
@@ -63,12 +63,11 @@ describe("API", () => {
.and.to.have.property("ok", false);
});
- it("should call fetch with given URL concatenated to baseURL", (done) => {
+ it("should call fetch with given URL concatenated to baseURL", () => {
const url = "apps/all";
- api.fromApi(url).then(() => {
+ return api.fromApi(url).then(() => {
const args = fetchStub.args[0];
expect(args[0]).to.include(url);
- done()
});
});
diff --git a/app/webpack.config.js b/app/webpack.config.js
index 12d8951c5..533ddaaf5 100644
--- a/app/webpack.config.js
+++ b/app/webpack.config.js
@@ -1,127 +1,143 @@
-const webpack = require('webpack');
-const path = require('path');
-const packageJSON = require('../package.json');
-const HtmlWebpackPlugin = require('html-webpack-plugin');
-const CopyWebpackPlugin = require('copy-webpack-plugin');
-const nodeEnv = process.env.NODE_ENV || 'development';
+const webpack = require("webpack");
+const path = require("path");
+const packageJSON = require("../package.json");
+const HtmlWebpackPlugin = require("html-webpack-plugin");
+const CopyWebpackPlugin = require("copy-webpack-plugin");
+const nodeEnv = process.env.NODE_ENV || "development";
-const appstoreEnv = process.env.DHIS2_APPSTORE_ENV;
-const isDevBuild = process.argv.indexOf('-p') === -1;
-const config = require('./config');
+const isDevBuild = process.argv.indexOf("-p") === -1;
+const config = require("./src/config/configResolver.js").default;
const prod = {
entry: {
- app: ['babel-polyfill','whatwg-fetch', './app/src/app-store.js'],
+ app: ["babel-polyfill", "whatwg-fetch", "./app/src/app-store.js"]
},
output: {
- path: path.join(__dirname, '..', 'target', 'classes', 'static'),
- filename: path.join('js', `[name]_${packageJSON.version}.js`),
+ path: path.join(__dirname, "..", "target", "classes", "static"),
+ filename: path.join("js", `[name]_${packageJSON.version}.js`),
//this is where the files are served from
- publicPath: config.BASE_APP_NAME + '/',
+ publicPath: config.routes.baseAppName + "/"
},
module: {
loaders: [
{
test: /\.jsx?$/,
- loader: 'babel-loader',
- exclude: /node_modules/,
+ loader: "babel-loader",
+ exclude: /node_modules/
},
{
test: /\.scss$/,
- loaders: ['style-loader', 'css-loader', 'sass-loader'],
+ loaders: ["style-loader", "css-loader", "sass-loader"]
},
{
test: /\.css$/,
- loaders: ['style-loader', 'css-loader'],
+ loaders: ["style-loader", "css-loader"]
},
{
test: /\.(jpe?g|png|gif|svg)$/i,
- loaders: [`file-loader?name=[name]_${packageJSON.version}.[ext]&publicPath=${config.BASE_APP_NAME}/&outputPath=assets/`]
+ loaders: [
+ `file-loader?name=[name]_${packageJSON.version}.[ext]&publicPath=${config
+ .routes.baseAppName}/&outputPath=assets/`
+ ]
}
- ],
+ ]
},
resolve: {
- extensions: ['.js', '.jsx']
+ extensions: [".js", ".jsx"]
},
plugins: [
new webpack.DefinePlugin({
- 'process.env': {
- NODE_ENV: JSON.stringify('production'),
+ "process.env": {
+ NODE_ENV: JSON.stringify("production")
},
+ __APP_CONFIG__: JSON.stringify(config)
}),
- new CopyWebpackPlugin(
- [
- {
- from: 'app/src/assets', to: 'assets'
- }
- ]),
+ new CopyWebpackPlugin([
+ {
+ from: "app/src/assets",
+ to: "assets"
+ }
+ ]),
new HtmlWebpackPlugin({
- title: 'DHIS2 Appstore',
- filename: 'index.html',
- template: 'app/indexbuild.html',
+ title: "DHIS2 Appstore",
+ filename: "index.html",
+ template: "app/indexbuild.html"
}),
- new webpack.optimize.UglifyJsPlugin({minimize: true, comments: false}),
+ new webpack.optimize.UglifyJsPlugin({ minimize: true, comments: false })
]
-}
+};
const dev = Object.assign({}, prod, {
entry: {
- app: ['babel-polyfill','whatwg-fetch', './app/src/app-store.js'],
+ app: ["babel-polyfill", "whatwg-fetch", "./app/src/app-store.js"]
},
output: {
- path: path.join(__dirname, 'build'),
- filename: '[name].js',
- publicPath: '/',
+ path: path.join(__dirname, "build"),
+ filename: "[name].js",
+ publicPath: "/"
+ },
+ module: {
+ loaders: [
+ {
+ test: /\.jsx?$/,
+ loader: "babel-loader",
+ exclude: /node_modules/
+ },
+ {
+ test: /\.scss$/,
+ loaders: ["style-loader", "css-loader", "sass-loader"]
+ },
+ {
+ test: /\.css$/,
+ loaders: ["style-loader", "css-loader"]
+ },
+ {
+ test: /\.(jpe?g|png|gif|svg)$/i,
+ loaders: [
+ `file-loader?name=[name].[ext]&publicPath=${config.routes
+ .baseAppName}/&outputPath=assets/`
+ ]
+ }
+ ]
},
devServer: {
port: 9000,
inline: true,
- contentBase: './app',
- historyApiFallback: true,
- host: '0.0.0.0',
- disableHostCheck: true
+ contentBase: "./app",
+ historyApiFallback: true
},
- devtool: 'eval-source-map',
+ devtool: "eval-source-map",
plugins: [
new CopyWebpackPlugin([
{
- from: 'app/src/assets', to: 'assets'
+ from: "app/src/assets",
+ to: "assets"
}
]),
new HtmlWebpackPlugin({
- title: 'DHIS2 Appstore',
- filename: 'index.html',
- template: 'app/indexbuild.html',
+ title: "DHIS2 Appstore",
+ filename: "index.html",
+ template: "app/indexbuild.html"
}),
new webpack.DefinePlugin({
- 'process.env': {
- NODE_ENV: JSON.stringify('development'),
+ "process.env": {
+ NODE_ENV: JSON.stringify("development")
},
- }),
- /* new webpack.EnvironmentPlugin({
- 'DHIS2_APPSTORE_BASE_APP_NAME': null,
- 'DHIS2_APPSTORE_API_BASE_URL': null,
- 'DHIS2_APPSTORE_API_REDIRECT_URL': null
- }), */
+ __APP_CONFIG__: JSON.stringify(config)
+ })
]
-})
+});
const tomcatDev = Object.assign({}, prod, {
- plugins: [
- ...prod.plugins,
- ...dev.plugins,
- ],
-})
-
-
-console.log("Using config: " + (isDevBuild ? (appstoreEnv === 'tomcatDev' ?
- 'tomcatDevelopment' : 'development') : 'production'));
+ plugins: [...prod.plugins, ...dev.plugins]
+});
-const devProfile = appstoreEnv === 'tomcatDev' ? tomcatDev : dev;
+console.log("Using config: " + (isDevBuild ? "development" : "production"));
-module.exports = isDevBuild ? devProfile : prod;
+console.log("asf");
+module.exports = env => dev;
diff --git a/package.json b/package.json
index 9376aa27e..80550860d 100644
--- a/package.json
+++ b/package.json
@@ -26,6 +26,7 @@
"isomorphic-fetch": "^2.2.1",
"jsdom": "^11.2.0",
"mocha": "^3.5.0",
+ "prettier": "^1.6.1",
"redux-logger": "2.8.1",
"sinon": "^3.2.1",
"sinon-chai": "^2.13.0",
diff --git a/yarn.lock b/yarn.lock
index 5c254de14..2f8f46088 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -4617,6 +4617,10 @@ preserve@^0.2.0:
version "0.2.0"
resolved "https://registry.yarnpkg.com/preserve/-/preserve-0.2.0.tgz#815ed1f6ebc65926f865b310c0713bcb3315ce4b"
+prettier@^1.6.1:
+ version "1.6.1"
+ resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.6.1.tgz#850f411a3116226193e32ea5acfc21c0f9a76d7d"
+
pretty-error@^2.0.2:
version "2.1.0"
resolved "https://registry.yarnpkg.com/pretty-error/-/pretty-error-2.1.0.tgz#87f4e9d706a24c87d6cbee9fabec001fcf8c75d8"
From 51d119a74c7cb135f377b81cab95d5c75865d629 Mon Sep 17 00:00:00 2001
From: Birk Johansson
Date: Mon, 11 Sep 2017 02:08:02 +0200
Subject: [PATCH 03/21] Clean webpack.connfig
---
app/webpack.config.js | 25 -------------------------
1 file changed, 25 deletions(-)
diff --git a/app/webpack.config.js b/app/webpack.config.js
index 533ddaaf5..ad936136a 100644
--- a/app/webpack.config.js
+++ b/app/webpack.config.js
@@ -80,30 +80,6 @@ const dev = Object.assign({}, prod, {
filename: "[name].js",
publicPath: "/"
},
- module: {
- loaders: [
- {
- test: /\.jsx?$/,
- loader: "babel-loader",
- exclude: /node_modules/
- },
- {
- test: /\.scss$/,
- loaders: ["style-loader", "css-loader", "sass-loader"]
- },
- {
- test: /\.css$/,
- loaders: ["style-loader", "css-loader"]
- },
- {
- test: /\.(jpe?g|png|gif|svg)$/i,
- loaders: [
- `file-loader?name=[name].[ext]&publicPath=${config.routes
- .baseAppName}/&outputPath=assets/`
- ]
- }
- ]
- },
devServer: {
port: 9000,
@@ -139,5 +115,4 @@ const tomcatDev = Object.assign({}, prod, {
console.log("Using config: " + (isDevBuild ? "development" : "production"));
-console.log("asf");
module.exports = env => dev;
From d3295bab9608bffbeacb9d908a2e457e1a152083 Mon Sep 17 00:00:00 2001
From: Birk Johansson
Date: Mon, 11 Sep 2017 02:48:02 +0200
Subject: [PATCH 04/21] Update README.MD
---
README.md | 55 +++++++++++++++++++++-----------
app/default.config.js | 35 ++++++++++++++++++++
app/src/config/configResolver.js | 47 +++++++++++++++++++++++++++
app/src/config/index.js | 12 +++++++
4 files changed, 130 insertions(+), 19 deletions(-)
create mode 100644 app/default.config.js
create mode 100644 app/src/config/configResolver.js
create mode 100644 app/src/config/index.js
diff --git a/README.md b/README.md
index 18ca25f1a..04e2be195 100644
--- a/README.md
+++ b/README.md
@@ -4,12 +4,12 @@ DHIS 2 app store
# Setup
-### Clone the repo
+## Clone the repo
```bash
git clone https://github.com/dhis2/dhis2-appstore.git
```
-### Create back-end config file
+## Create back-end config file
Create config file called `appstore.conf` in `/opt/hisp/appstore` with the following config
> Note to change the credentials and secrets etc.
@@ -40,47 +40,63 @@ auth0.authorityStrategy=ROLES
auth0.defaultAuth0ApiSecurityEnabled=false
auth0.signingAlgorithm=HS256
```
+## Create postgres database (if you do not have one yet)
+```sql
+CREATE DATABASE appstore_db OWNER dhis;
+```
-### Frontend config
+## Frontend config
The frontend needs to know some basic information about the server to configure routes and API endpoints.
This is located in `app/default.config.js`.
You can rename or copy this file to override the settings.
Tries to load config files in the following order:
- 1. default.config.js
- 2. config.js
+1. default.config.js
+2. config.js
-Environment specific configs are also supported, and are merged if environment is set to either `development` or `production`.
+Environment specific configurations are also supported, and are loaded if environment is set to either `development` or `production`.
- 1. development.config.js
- 2. production.config.js
+* development.config.js
+* production.config.js
Note that the exported objects from each config file are (shallowly) merged with the previous, so any options not changed are kept from the previous config. This also means that if you include any nested settings, like `api`, you will need to include the nested settings in this object if you want to keep them.
+*Note: If you make any changes, you will need to rebuild or restart webpack-dev-server for the changes to take effect.*
+
+### Example Development Config
+`development.config.js`
+```javascript
+module.exports = {
+ api: {
+ baseURL: "http://localhost:3098/api/",
+ redirectURL: "http://localhost:9000/user"
+ },
+ routes: {
+ baseAppName: ""
+ }
+};
+```
+
+
##### Base app name
This is the basename of where the app is located, used by routes. If it's hosted at `http://localhost:8080/appstore` this should be `/appstore`.
-```
+```javascript
routes.baseAppName: '/appstore'
```
##### API BaseURL
The endpoint of the backend API to be used.
-```
+```javascript
api.baseURL: 'http://localhost:8080/appstore/api/',
```
##### API Redirect URL
The URL to be used when auth0 has successfully logged in a user, and is redirected back to the page. Note that this URL needs to be whitelisted on the auth0 side aswell.
-```
+```javascript
api.redirectURL: 'http://localhost:8080/appstore/user/'
```
-### Create postgres database (if you do not have one yet)
-```sql
-CREATE DATABASE appstore_db OWNER dhis;
-```
-
-### Run the project
+# Run the project
### Start the backend and frontend
```bash
@@ -99,8 +115,9 @@ Frontend at `localhost:8080/appstore/`.
mvn clean install && mvn spring-boot:run -Dskip.webpack
```
Will be available at `localhost:3098/api/apps`.
+This will skip the webpack-bundling, and the frontend will not be available.
-### Start the front-end UI app independently (dev)
+### Start the front-end app independently (dev)
```bash
yarn install
@@ -108,5 +125,5 @@ yarn start
```
Will be available at `localhost:9000`. Using webpack-dev-server.
-Note that to use all the features of the app, you will need to run a back-end server. This can be done in frontend-development by running the back-end server as shown in the previous section, and changing the appropiate config settings (most likely just api.baseURL and api.redirectURL).
+Note that to use all the features of the app, you will need to run a back-end server. This can be done in frontend-development by running the back-end server as shown in the previous section, and changing the appropriate config settings (most likely just api.baseURL, api.redirectURL and routes.baseAppName).
diff --git a/app/default.config.js b/app/default.config.js
new file mode 100644
index 000000000..e91e63954
--- /dev/null
+++ b/app/default.config.js
@@ -0,0 +1,35 @@
+module.exports = {
+ api: {
+ baseURL: "https://play.dhis2.org/appstore/api/",
+ redirectURL: "https://play.dhis2.org/appstore/user"
+ },
+ auth0: {
+ clientID: "BTJ3iwPLO6hDC5w7JYWPlGd6461VNu81",
+ domain: "dhis2.eu.auth0.com"
+ },
+ routes: {
+ baseAppName: "/appstore"
+ },
+ ui: {
+ dhisVersions: [
+ "2.28",
+ "2.27",
+ "2.26",
+ "2.25",
+ "2.24",
+ "2.23",
+ "2.22",
+ "2.21"
+ ],
+ appStatusToDisplayName: {
+ NOT_APPROVED: "Rejected",
+ PENDING: "Pending",
+ APPROVED: "Approved"
+ },
+ appTypeToDisplayName: {
+ APP_STANDARD: "Standard",
+ APP_DASHBOARD: "Dashboard",
+ APP_TRACKER_DASHBOARD: "Tracker Dashboard"
+ }
+ }
+};
diff --git a/app/src/config/configResolver.js b/app/src/config/configResolver.js
new file mode 100644
index 000000000..c9074ab1a
--- /dev/null
+++ b/app/src/config/configResolver.js
@@ -0,0 +1,47 @@
+const relPath = "../..";
+
+const defaultConfigs = ["default.config.js", "config.js"];
+
+const envConfigNames = {
+ development: ["development.config.js"],
+ production: ["production.config.js"]
+};
+
+function loadFile(filename) {
+ try {
+ const path = [relPath, filename].join("/");
+ return require(path);
+ } catch (e) {
+ return null;
+ }
+}
+
+function getConfig() {
+ if (getConfig.config) {
+ return getConfig.config;
+ }
+ const nodeEnv = process.env.NODE_ENV || "development";
+ const config = {};
+
+ //Get default config
+ let configs = defaultConfigs.map(filename => loadFile(filename));
+ configs = configs
+ .filter(config => !!config)
+ .map(cfg => Object.assign(config, cfg));
+ //Get environment specific config
+ if (envConfigNames[nodeEnv]) {
+ const configs = envConfigNames[nodeEnv].map(filename =>
+ loadFile(filename)
+ );
+ configs
+ .filter(config => !!config)
+ .map(cfg => Object.assign(config, cfg));
+ }
+ getConfig.config = config;
+ return config;
+}
+
+module.exports = {
+ default: getConfig(),
+ getConfig
+};
diff --git a/app/src/config/index.js b/app/src/config/index.js
new file mode 100644
index 000000000..e8f55f4d9
--- /dev/null
+++ b/app/src/config/index.js
@@ -0,0 +1,12 @@
+//const sub =
+//let conf; //= __APP_CONFIG__ !== undefined ? __APP_CONFIG__ : getConfig();
+let conf;
+if (typeof __APP_CONFIG__ !== "undefined") {
+ //running in webpack, use predefined config
+ conf = __APP_CONFIG__;
+} else {
+ //Not in webpack, ie in tests and webpack.config - provide default
+ conf = require("../../default.config");
+}
+
+export default conf;
From 06103afe4bf4619dd8c0ce1e051d3c7e7da53bfc Mon Sep 17 00:00:00 2001
From: Birk Johansson
Date: Mon, 11 Sep 2017 17:25:30 +0200
Subject: [PATCH 05/21] Config rework, deep merge properties instead of shallow
---
README.md | 2 +-
app/src/config/configResolver.js | 10 +-
app/test/config/configResolver.spec.js | 172 +++++++++++++++++++++++++
app/webpack.config.js | 24 +++-
pom.xml | 6 +-
5 files changed, 201 insertions(+), 13 deletions(-)
create mode 100644 app/test/config/configResolver.spec.js
diff --git a/README.md b/README.md
index 04e2be195..5bcea4b07 100644
--- a/README.md
+++ b/README.md
@@ -60,7 +60,7 @@ Environment specific configurations are also supported, and are loaded if enviro
* development.config.js
* production.config.js
-Note that the exported objects from each config file are (shallowly) merged with the previous, so any options not changed are kept from the previous config. This also means that if you include any nested settings, like `api`, you will need to include the nested settings in this object if you want to keep them.
+Note that the exported objects from each config file are merged with the previous, so any options not changed are kept from the previous config.
*Note: If you make any changes, you will need to rebuild or restart webpack-dev-server for the changes to take effect.*
diff --git a/app/src/config/configResolver.js b/app/src/config/configResolver.js
index c9074ab1a..2aa50d7cf 100644
--- a/app/src/config/configResolver.js
+++ b/app/src/config/configResolver.js
@@ -1,3 +1,5 @@
+const merge = require("lodash/merge");
+
const relPath = "../..";
const defaultConfigs = ["default.config.js", "config.js"];
@@ -25,17 +27,13 @@ function getConfig() {
//Get default config
let configs = defaultConfigs.map(filename => loadFile(filename));
- configs = configs
- .filter(config => !!config)
- .map(cfg => Object.assign(config, cfg));
+ configs = configs.filter(config => !!config).map(cfg => merge(config, cfg));
//Get environment specific config
if (envConfigNames[nodeEnv]) {
const configs = envConfigNames[nodeEnv].map(filename =>
loadFile(filename)
);
- configs
- .filter(config => !!config)
- .map(cfg => Object.assign(config, cfg));
+ configs.filter(config => !!config).map(cfg => merge(config, cfg));
}
getConfig.config = config;
return config;
diff --git a/app/test/config/configResolver.spec.js b/app/test/config/configResolver.spec.js
new file mode 100644
index 000000000..015611105
--- /dev/null
+++ b/app/test/config/configResolver.spec.js
@@ -0,0 +1,172 @@
+import ConfigImport, { getConfig } from "../../src/config/configResolver.js";
+import DirectDefaultConfig from "../../default.config.js";
+import fs from "fs";
+import merge from "lodash/merge";
+const defaultConfigPath = "../../src/config/";
+const Config = ConfigImport.default;
+
+describe("ConfigResolver", () => {
+ describe("exports", () => {
+ before(() => {});
+
+ after(() => {});
+
+ it("should export the default config object as if it was imported directly", () => {
+ expect(Config).to.deep.equal(DirectDefaultConfig);
+ });
+
+ it("should return the same object-reference if imported multiple times", () => {
+ let newConfig = require(defaultConfigPath.concat(
+ "configResolver.js"
+ )).default;
+ expect(newConfig).to.equal(Config);
+ expect(newConfig).to.deep.equal(DirectDefaultConfig);
+ });
+ });
+
+ describe("getConfig()", () => {
+ const override = {
+ routes: { baseAppName: "baseAppName" },
+ ui: { dhisVersions: ["2.28"] }
+ };
+ const addition = {
+ another: "setting"
+ };
+ let configOverride;
+
+ let loadOverrideFileStub, loadProdFileStub, loadDevFileStub;
+
+ let prodConfig;
+ let devConfig;
+ let prevConfig;
+ before(() => {
+ configOverride = merge({}, DirectDefaultConfig, override, addition);
+ prodConfig = {
+ api: {
+ baseURL: "https://dhis2.org/appstore/api/"
+ }
+ };
+ devConfig = {
+ api: {
+ baseURL: "https://localhost:8080/appstore/api/",
+ redirectURL: "https://localhost:8080/appstore/user/"
+ }
+ };
+ //sanity check
+ expect(configOverride).to.not.deep.equal(DirectDefaultConfig);
+ loadOverrideFileStub = sinon.stub().returns(configOverride);
+
+ loadProdFileStub = sinon
+ .stub()
+ .onFirstCall()
+ .returns(DirectDefaultConfig)
+ .onSecondCall()
+ .returns(prodConfig);
+ loadDevFileStub = sinon
+ .stub()
+ .onFirstCall()
+ .returns(DirectDefaultConfig)
+ .onSecondCall()
+ .returns(devConfig);
+ });
+
+ after(() => {});
+
+ beforeEach(() => {
+ prevConfig = Config;
+ getConfig.config = Config;
+ });
+
+ afterEach(() => {
+ getConfig.config = prevConfig;
+ });
+
+ it("should return the default config object as if it was imported directly", () => {
+ expect(getConfig()).to.deep.equal(DirectDefaultConfig);
+ });
+
+ it("should should return the same as default export", () => {
+ expect(getConfig()).to.deep.equal(Config);
+ });
+
+ it("should return the same object-reference as default export", () => {
+ expect(getConfig()).to.equal(Config);
+ });
+
+ it("should return the same object and object-reference if called multiple times", () => {
+ expect(getConfig()).to.equal(Config);
+ expect(getConfig()).to.equal(getConfig());
+ expect(getConfig()).to.equal(Config);
+ });
+
+ it("should store last config on the function if its not already", () => {
+ getConfig.config = null;
+ const conf = getConfig();
+ expect(conf).to.deep.equal(DirectDefaultConfig);
+ expect(getConfig.config).to.be.equal(conf);
+ });
+
+ it("should merge the default.config.js with config.js, and override if exists", () => {
+ ConfigImport.__Rewire__("loadFile", loadOverrideFileStub);
+ getConfig.config = null;
+
+ const conf = getConfig();
+
+ expect(conf).to.not.deep.equal(DirectDefaultConfig);
+ expect(DirectDefaultConfig.routes.baseAppName).to.be.equal(
+ "/appstore"
+ );
+ expect(conf.routes.baseAppName).to.equal("baseAppName");
+ //should deep merge
+ expect(conf.ui).to.deep.equal(DirectDefaultConfig.ui);
+ expect(conf.api)
+ .to.have.property("redirectURL")
+ .that.equals(DirectDefaultConfig.api.redirectURL);
+ expect(DirectDefaultConfig).to.not.have.property("another");
+ expect(conf)
+ .to.be.an("object")
+ .that.includes(addition);
+
+ ConfigImport.__ResetDependency__("loadFile");
+ });
+
+ it("should override with production.config.js if NODE_ENV = 'production", () => {
+ ConfigImport.__Rewire__("loadFile", loadProdFileStub);
+ getConfig.config = null;
+ const prevEnv = process.env.NODE_ENV;
+ process.env.NODE_ENV = "production";
+
+ const conf = getConfig();
+ expect(conf.api.baseURL).to.equal(prodConfig.api.baseURL);
+
+ expect(conf).to.not.deep.equal(DirectDefaultConfig);
+
+ expect(conf)
+ .to.have.property("auth0")
+ .that.is.deep.equal(DirectDefaultConfig.auth0);
+ expect(conf)
+ .to.have.property("ui")
+ .that.is.deep.equal(DirectDefaultConfig.ui);
+ ConfigImport.__ResetDependency__("loadFile");
+ process.env.NODE_ENV = prevEnv;
+ });
+
+ it("should override with development.config.js if NODE_ENV = 'development", () => {
+ ConfigImport.__Rewire__("loadFile", loadDevFileStub);
+ const prevEnv = process.env.NODE_ENV;
+
+ getConfig.config = null;
+ process.env.NODE_ENV = "development";
+ const conf = getConfig();
+ //should override api object
+ expect(conf.api).to.deep.equal(devConfig.api);
+
+ expect(conf).to.not.deep.equal(DirectDefaultConfig);
+ //should keep the same properties that are not overriden
+ expect(conf.ui).to.deep.equal(DirectDefaultConfig.ui);
+ expect(conf.auth0).to.deep.equal(DirectDefaultConfig.auth0);
+ ConfigImport.__ResetDependency__("loadFile");
+ process.env.NODE_ENV = prevEnv;
+ });
+ });
+});
diff --git a/app/webpack.config.js b/app/webpack.config.js
index ad936136a..2bd25214d 100644
--- a/app/webpack.config.js
+++ b/app/webpack.config.js
@@ -110,9 +110,27 @@ const dev = Object.assign({}, prod, {
});
const tomcatDev = Object.assign({}, prod, {
- plugins: [...prod.plugins, ...dev.plugins]
+ plugins: [
+ ...prod.plugins,
+ new webpack.DefinePlugin({
+ "process.env": {
+ NODE_ENV: JSON.stringify("development")
+ },
+ __APP_CONFIG__: JSON.stringify(config)
+ })
+ ]
});
-console.log("Using config: " + (isDevBuild ? "development" : "production"));
+module.exports = env => {
+ const isTomcatDev = (env.tomcat || env.tomcat === "true") && isDevBuild;
+ const buildName = isTomcatDev
+ ? "tomcatDev"
+ : isDevBuild ? "development" : "production";
-module.exports = env => dev;
+ console.log(`Using config ${buildName}`);
+
+ if (isTomcatDev) {
+ return tomcatDev;
+ }
+ return isDevBuild ? dev : prod;
+};
diff --git a/pom.xml b/pom.xml
index 0803e0729..4bd6407bb 100644
--- a/pom.xml
+++ b/pom.xml
@@ -253,7 +253,7 @@
yarn
- install --cache-folder ${build.directory}/node/cache/
+ install --cache-folder ${project.build.directory}/node/cache/
@@ -332,7 +332,7 @@
yarn
- install --cache-folder ${build.directory}/node/cache/
+ install --cache-folder ${project.build.directory}/node/cache/
@@ -346,7 +346,7 @@
generate-resources
- --config ./app/webpack.config.js
+ --config ./app/webpack.config.js --env.tomcat
From c0b720a2357118953dba12a23b86d93ae87f639a Mon Sep 17 00:00:00 2001
From: Birk Johansson
Date: Mon, 11 Sep 2017 18:21:04 +0200
Subject: [PATCH 06/21] Fix auth0 redirectURL. Code style
---
app/src/components/appVersion/VersionList.jsx | 31 +++++++------------
app/src/components/user/appList/AppList.jsx | 10 +++---
app/src/utils/AuthService.js | 2 +-
app/webpack.config.js | 3 +-
4 files changed, 19 insertions(+), 27 deletions(-)
diff --git a/app/src/components/appVersion/VersionList.jsx b/app/src/components/appVersion/VersionList.jsx
index 05b34a88a..5f2691c40 100644
--- a/app/src/components/appVersion/VersionList.jsx
+++ b/app/src/components/appVersion/VersionList.jsx
@@ -11,6 +11,7 @@ import FontIcon from "material-ui/FontIcon";
import IconMenu from "material-ui/IconMenu";
import IconButton from "material-ui/IconButton";
import MenuItem from "material-ui/MenuItem";
+
const VersionList = props => {
//Max 3 versions before "more button"
const versions = props.versionList
@@ -42,25 +43,17 @@ const VersionList = props => {
-
- {version.version}
-
-
- {version.minDhisVersion}
-
-
- {version.maxDhisVersion}
-
+ {version.version}
+ {version.minDhisVersion}
+ {version.maxDhisVersion}
{new Date(version.created).toLocaleDateString()}
- {props.editable
- ?
- {editMenu}
-
- : null}
+ {props.editable ? (
+ {editMenu}
+ ) : null}
);
});
@@ -76,14 +69,12 @@ const VersionList = props => {
Min DHIS version
Max DHIS version
Uploaded
- {props.editable
- ? Edit
- : null}
+ {props.editable ? (
+ Edit
+ ) : null}
-
- {versions}
-
+ {versions}
);
};
diff --git a/app/src/components/user/appList/AppList.jsx b/app/src/components/user/appList/AppList.jsx
index 536d83097..74088e4cc 100644
--- a/app/src/components/user/appList/AppList.jsx
+++ b/app/src/components/user/appList/AppList.jsx
@@ -125,7 +125,7 @@ class AppList extends Component {
? filterAppStatus(app, this.props.appStatusFilter)
: true)
)
- .map((app, i) =>
+ .map((app, i) => (
- );
+ ));
const emptyAppsText = manager
? "We couldn't find any apps"
: "You have not uploaded any apps";
@@ -189,9 +189,9 @@ class AppList extends Component {
- {loadOrErr
- ?
- : null}
+ {loadOrErr ? (
+
+ ) : null}
{loaded && apps.length > 0 ? apps : null}
{loaded && apps.length < 1 ? emptyAppsText : null}
diff --git a/app/src/utils/AuthService.js b/app/src/utils/AuthService.js
index 6aad155a2..01aca7133 100644
--- a/app/src/utils/AuthService.js
+++ b/app/src/utils/AuthService.js
@@ -12,7 +12,7 @@ export default class AuthService {
// Configure Auth0
this.lock = new Auth0Lock(clientId, domain, {
auth: {
- redirectUrl: config.API_REDIRECT_URL,
+ redirectUrl: config.api.redirectURL,
responseType: "token",
params: {
scope: "openid roles user_id"
diff --git a/app/webpack.config.js b/app/webpack.config.js
index 2bd25214d..d00728413 100644
--- a/app/webpack.config.js
+++ b/app/webpack.config.js
@@ -122,7 +122,8 @@ const tomcatDev = Object.assign({}, prod, {
});
module.exports = env => {
- const isTomcatDev = (env.tomcat || env.tomcat === "true") && isDevBuild;
+ const isTomcatDev =
+ env && (env.tomcat || env.tomcat === "true") && isDevBuild;
const buildName = isTomcatDev
? "tomcatDev"
: isDevBuild ? "development" : "production";
From fc26ea6f044c74333cdbdc9de9edb13c0d94d542 Mon Sep 17 00:00:00 2001
From: zubaira
Date: Thu, 7 Sep 2017 14:32:09 +0200
Subject: [PATCH 07/21] response set to application/json
---
.../org/hisp/appstore/web/api/AppController.java | 12 ++++++++++++
1 file changed, 12 insertions(+)
diff --git a/src/main/java/org/hisp/appstore/web/api/AppController.java b/src/main/java/org/hisp/appstore/web/api/AppController.java
index 33ae675bd..3d6f2d2cf 100644
--- a/src/main/java/org/hisp/appstore/web/api/AppController.java
+++ b/src/main/java/org/hisp/appstore/web/api/AppController.java
@@ -62,6 +62,8 @@ public void getApprovedApps( @RequestParam( value = "type", required = false ) A
List apps = appStoreService.get( queryParameters );
+ response.setContentType( "application/json" );
+
renderService.toJson( response.getOutputStream(), apps );
}
@@ -71,6 +73,8 @@ public void getAllAppsByUser( HttpServletRequest request, HttpServletResponse re
{
List apps = appStoreService.getAllAppsByOwner( currentUserService.getCurrentUserId() );
+ response.setContentType( "application/json" );
+
renderService.toJson( response.getOutputStream(), apps );
}
@@ -80,6 +84,8 @@ public void getAllApps( HttpServletRequest request, HttpServletResponse response
{
List apps = appStoreService.getAllApps();
+ response.setContentType( "application/json" );
+
renderService.toJson( response.getOutputStream(), apps );
}
@@ -100,6 +106,8 @@ public void getApp( @PathVariable( value = "uid" ) String appUid,
decideAccess( app );
}
+ response.setContentType( "application/json" );
+
renderService.toJson( response.getOutputStream(), app );
}
@@ -118,6 +126,8 @@ public void listReviews( @PathVariable( "uid" ) String appUid,
Set reviews = app.getReviews();
+ response.setContentType( "application/json" );
+
renderService.toJson( response.getOutputStream(), reviews );
}
@@ -136,6 +146,8 @@ public void listVersions( @PathVariable( "uid" ) String appUid,
Set versions = app.getVersions();
+ response.setContentType( "application/json" );
+
renderService.toJson( response.getOutputStream(), versions );
}
From 40f11d5eb8aa64988da6b2ae3608c3ec54a6d5a3 Mon Sep 17 00:00:00 2001
From: Birk Johansson
Date: Mon, 11 Sep 2017 18:27:57 +0200
Subject: [PATCH 08/21] Minor
---
app/src/config/index.js | 2 --
1 file changed, 2 deletions(-)
diff --git a/app/src/config/index.js b/app/src/config/index.js
index e8f55f4d9..c47fe2d12 100644
--- a/app/src/config/index.js
+++ b/app/src/config/index.js
@@ -1,5 +1,3 @@
-//const sub =
-//let conf; //= __APP_CONFIG__ !== undefined ? __APP_CONFIG__ : getConfig();
let conf;
if (typeof __APP_CONFIG__ !== "undefined") {
//running in webpack, use predefined config
From 848231311c8ffa37729076d7571985d4b4d682a4 Mon Sep 17 00:00:00 2001
From: Birk Johansson
Date: Tue, 12 Sep 2017 15:37:33 +0200
Subject: [PATCH 09/21] Change appType
---
app/default.config.js | 6 +--
app/src/components/appCards/AppCards.jsx | 49 +++++++++++----------
app/src/components/user/appList/AppList.jsx | 8 ++--
3 files changed, 32 insertions(+), 31 deletions(-)
diff --git a/app/default.config.js b/app/default.config.js
index e91e63954..b0b4d6915 100644
--- a/app/default.config.js
+++ b/app/default.config.js
@@ -27,9 +27,9 @@ module.exports = {
APPROVED: "Approved"
},
appTypeToDisplayName: {
- APP_STANDARD: "Standard",
- APP_DASHBOARD: "Dashboard",
- APP_TRACKER_DASHBOARD: "Tracker Dashboard"
+ APP: "Standard",
+ DASHBOARD_WIDGET: "Dashboard",
+ TRACKER_DASHBOARD_WIDGET: "Tracker Dashboard"
}
}
};
diff --git a/app/src/components/appCards/AppCards.jsx b/app/src/components/appCards/AppCards.jsx
index b3c092cc7..5e135eaec 100644
--- a/app/src/components/appCards/AppCards.jsx
+++ b/app/src/components/appCards/AppCards.jsx
@@ -41,8 +41,7 @@ class AppCards extends Component {
margin: "10px",
width: "auto"
},
- appItem: {
- },
+ appItem: {},
emptyApps: {
textAlign: "center"
@@ -61,17 +60,17 @@ class AppCards extends Component {
filterApp(app, searchFilter) &&
filterAppType(app, this.props.filters)
)
- .map((app, i) =>
+ .map((app, i) => (
- );
+ ));
const emptyApps = (
-
- We couldn't find any apps.
-
+
+ We couldn't find any apps.
+
);
return (
@@ -91,17 +90,17 @@ class AppCards extends Component {
{
label: "Standard app",
toggled: true,
- value: "APP_STANDARD"
+ value: "APP"
},
{
label: "Dashboard app",
toggled: true,
- value: "APP_DASHBOARD"
+ value: "DASHBOARD_WIDGET"
},
{
label: "Tracker widget",
toggled: true,
- value: "APP_TRACKER_DASHBOARD"
+ value: "TRACKER_DASHBOARD_WIDGET"
}
]}
/>
@@ -109,20 +108,22 @@ class AppCards extends Component {
- {loadOrErr || !apps
- ?
- :
- {apps}
- }
+ {loadOrErr || !apps ? (
+
+ ) : (
+
+ {apps}
+
+ )}
{loaded && apps.length < 1 && emptyApps}
diff --git a/app/src/components/user/appList/AppList.jsx b/app/src/components/user/appList/AppList.jsx
index 74088e4cc..067a9a585 100644
--- a/app/src/components/user/appList/AppList.jsx
+++ b/app/src/components/user/appList/AppList.jsx
@@ -161,7 +161,7 @@ class AppList extends Component {
onRequestClose={r => this.setState({ open: false })}
>
-
App type
+
App type
From ae7eb6a91660dd4e2d290eec15703ffa1340f167 Mon Sep 17 00:00:00 2001
From: Birk Johansson
Date: Tue, 12 Sep 2017 16:17:08 +0200
Subject: [PATCH 10/21] Update gitignore
---
.gitignore | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/.gitignore b/.gitignore
index b650418f6..517114633 100644
--- a/.gitignore
+++ b/.gitignore
@@ -9,4 +9,8 @@ target
.classpath
.project
.settings
+.vscode
node_modules
+build
+app/build
+app/*config.js
\ No newline at end of file
From 33108082a162b39c3c0c626c3e713bbf200371cd Mon Sep 17 00:00:00 2001
From: Birk Johansson
Date: Wed, 20 Sep 2017 10:32:42 +0200
Subject: [PATCH 11/21] minor
---
app/src/components/appCards/AppCards.jsx | 2 +-
app/src/components/user/appList/AppList.jsx | 2 +-
app/src/components/utils/Animate.jsx | 17 +++++----
app/src/components/utils/Filters.jsx | 39 ++++++++++++---------
app/webpack.config.js | 4 +--
package.json | 3 +-
6 files changed, 36 insertions(+), 31 deletions(-)
diff --git a/app/src/components/appCards/AppCards.jsx b/app/src/components/appCards/AppCards.jsx
index 5e135eaec..e333cdcc2 100644
--- a/app/src/components/appCards/AppCards.jsx
+++ b/app/src/components/appCards/AppCards.jsx
@@ -88,7 +88,7 @@ class AppCards extends Component {
labelStyle={{ width: "auto" }}
filters={[
{
- label: "Standard app",
+ label: "Standard sapp",
toggled: true,
value: "APP"
},
diff --git a/app/src/components/user/appList/AppList.jsx b/app/src/components/user/appList/AppList.jsx
index 067a9a585..b297563f1 100644
--- a/app/src/components/user/appList/AppList.jsx
+++ b/app/src/components/user/appList/AppList.jsx
@@ -99,7 +99,7 @@ class AppList extends Component {
value: APP_STATUS_PENDING
},
{
- label: "Not Approved",
+ label: "Rejected",
toggled: true,
value: APP_STATUS_REJECTED
}
diff --git a/app/src/components/utils/Animate.jsx b/app/src/components/utils/Animate.jsx
index 8ccd782dd..131bacc4d 100644
--- a/app/src/components/utils/Animate.jsx
+++ b/app/src/components/utils/Animate.jsx
@@ -44,14 +44,12 @@ const onEntered = (html, isAppearing) => {
console.log("ENTERED " + isAppearing);
};
-export const FadeAnimationBasic = ({ component, children: child, ...props }) =>
-
+export const FadeAnimationBasic = ({
+ component,
+ children: child,
+ ...props
+}) => (
+
{state =>
React.cloneElement(child, {
style: {
@@ -59,7 +57,8 @@ export const FadeAnimationBasic = ({ component, children: child, ...props }) =>
...getStylesForTransitionState(state)
}
})}
- ;
+
+);
export const FadeAnimationList = ({ component, children, ...rest }) => {
return (
diff --git a/app/src/components/utils/Filters.jsx b/app/src/components/utils/Filters.jsx
index ea6e1057f..4056ebb93 100644
--- a/app/src/components/utils/Filters.jsx
+++ b/app/src/components/utils/Filters.jsx
@@ -84,9 +84,11 @@ class Textfilter extends Component {
style={style}
hintText={hintText}
component={
- clearButton
- ? renderTextFieldWithClearButton
- : renderTextField
+ clearButton ? (
+ renderTextFieldWithClearButton
+ ) : (
+ renderTextField
+ )
}
/>
);
@@ -112,6 +114,8 @@ export const TextFilter = reduxForm({
})(Textfilter);
/**
+ * Renders a list of toggle buttons, with props.filters as base.
+ *
* A redux-form connected component. Connected to the store at state..
* Where mountedReduxForm is the value where redux-form is connected at app-start.
* And props.form is a prop to this component (default: filters).
@@ -142,7 +146,7 @@ class Selectfilter extends Component {
onFilterChange,
...props
} = this.props;
- const toggles = filters.map(filter =>
+ const toggles = filters.map(filter => (
- );
+ ));
return (
{toggles}
- {this.props.renderAllToggle
- ?
- : null}
+ {this.props.renderAllToggle ? (
+
+ ) : null}
);
}
@@ -195,7 +199,7 @@ Selectfilter.propTypes = {
};
Selectfilter.defaultProps = {
form: "filters",
- destroyOnUnmount: false
+ destroyOnUnmount: true
};
//handle default with connect
export const SelectedFilterForm = reduxForm({
@@ -217,4 +221,5 @@ const mapStateToProps = (state, ownProps) => {
filterState: state.form
};
};
+
export const SelectFilter = connect(mapStateToProps, null)(SelectedFilterForm);
diff --git a/app/webpack.config.js b/app/webpack.config.js
index d00728413..46f0d9449 100644
--- a/app/webpack.config.js
+++ b/app/webpack.config.js
@@ -78,7 +78,7 @@ const dev = Object.assign({}, prod, {
output: {
path: path.join(__dirname, "build"),
filename: "[name].js",
- publicPath: "/"
+ publicPath: ""
},
devServer: {
@@ -87,7 +87,7 @@ const dev = Object.assign({}, prod, {
contentBase: "./app",
historyApiFallback: true
},
- devtool: "eval-source-map",
+ devtool: "eval",
plugins: [
new CopyWebpackPlugin([
{
diff --git a/package.json b/package.json
index 80550860d..94e64806a 100644
--- a/package.json
+++ b/package.json
@@ -4,7 +4,8 @@
"main": "index.js",
"license": "BSD-3-Clause",
"scripts": {
- "start": "NODE_ENV='development' webpack-dev-server --config app/webpack.config.js",
+ "start":
+ "NODE_ENV='development' webpack-dev-server --hot --inline --config app/webpack.config.js",
"build": "webpack -p --config app/webpack.config.js",
"test": "NODE_ENV=test mocha --opts app/test/mocha.opts"
},
From 2b1e631edfd46e193baf78539fe0aed5f2c0a2aa Mon Sep 17 00:00:00 2001
From: Birk Johansson
Date: Wed, 20 Sep 2017 10:39:34 +0200
Subject: [PATCH 12/21] Fix publicpath
---
app/src/actions/actionCreators.js | 1 +
app/src/components/utils/Animate.jsx | 1 -
app/webpack.config.js | 2 +-
3 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/app/src/actions/actionCreators.js b/app/src/actions/actionCreators.js
index c8ae3cf17..765f4af5a 100644
--- a/app/src/actions/actionCreators.js
+++ b/app/src/actions/actionCreators.js
@@ -272,6 +272,7 @@ export const appError = actionCreator(actions.APP_ERROR);
export const actionErrorCreator = (type, error, meta) =>
actionCreator(type)(error, meta, true);
+
/**
* Generic action-creator
* @param type of action
diff --git a/app/src/components/utils/Animate.jsx b/app/src/components/utils/Animate.jsx
index 131bacc4d..97a0c0ef5 100644
--- a/app/src/components/utils/Animate.jsx
+++ b/app/src/components/utils/Animate.jsx
@@ -25,7 +25,6 @@ const transitionStyles = {
};
const getStylesForTransitionState = state => {
- console.log("State", state);
return {
...defaultStyle,
...transitionStyles[state]
diff --git a/app/webpack.config.js b/app/webpack.config.js
index 46f0d9449..71ce48c03 100644
--- a/app/webpack.config.js
+++ b/app/webpack.config.js
@@ -78,7 +78,7 @@ const dev = Object.assign({}, prod, {
output: {
path: path.join(__dirname, "build"),
filename: "[name].js",
- publicPath: ""
+ publicPath: "/"
},
devServer: {
From 8cb4030ade85dd5cb99237f5dcf7f390dd9f8346 Mon Sep 17 00:00:00 2001
From: Birk Johansson
Date: Fri, 13 Oct 2017 18:36:10 +0200
Subject: [PATCH 13/21] Clean up actionCreators. IE11 header bar fix
---
app/src/actions/actionCreators.js | 47 +++++----
app/src/actions/epics.js | 37 +++----
.../components/form/UploadAppFormStepper.jsx | 2 +-
app/src/components/header/Header.jsx | 4 +-
app/src/reducers/userReducer.js | 4 +-
app/src/store.js | 5 +-
app/src/styles/override.css | 2 +
app/src/utils/optimisticActions.js | 96 +++++++++++++++++++
8 files changed, 150 insertions(+), 47 deletions(-)
create mode 100644 app/src/utils/optimisticActions.js
diff --git a/app/src/actions/actionCreators.js b/app/src/actions/actionCreators.js
index 765f4af5a..a4c826121 100644
--- a/app/src/actions/actionCreators.js
+++ b/app/src/actions/actionCreators.js
@@ -1,33 +1,30 @@
import * as actions from "../constants/actionTypes";
import { REVERT, COMMIT } from "redux-optimistic-ui";
-
-//OPTIMISTIC-ACTION HANDLERS
+import { optimisticAction } from '../utils/optimisticActions';
/**
- * Action-enhancer that produces an optimistic action
- * by adding optimistic meta properties
- * @param action
- */
-const optimisticActionCreator = action => ({
- ...action,
- meta: { ...action.meta, isOptimistic: true }
-});
-
-/**
- * Commit or revert an optimistic action that has been handled by the server
- * @param action to handle
- * @param transactionID of the optimistic-action
- * @param error: override error in action.error, will revert the action
+ * Commit or revert an optimistic action that has been handled by the server by checking if the action is
+ * an error.
+ * This will return a new action of 'action' with added optimistic-meta-properties
+ * which can be dispatched to commit or revert a transaction.
+ * @param action - Resulting action of the closed transaction (committed or reverted).
+ * @param {integer|action} transaction of the optimistic-action. Either the transactionID (action.meta.optimistic.id)
+ * of the initiating optimistic-action, or the action-object itself.
+ * @param error - override error in action.error, results in a reverted action.
* @returns action with enhanced properties so that redux-optimistic-ui can handle the reverted or committed action
*/
export const commitOrRevertOptimisticAction = (
action,
- transactionID,
+ transaction,
error = false
) => {
if (action.error) {
error = true;
}
+ let transactionID = transaction;
+ if (transaction && transaction.meta && transaction.meta.optimistic) {
+ transactionID = transaction.meta.optimistic.id;
+ }
return {
...action,
meta: {
@@ -70,7 +67,7 @@ export const loadApprovedApps = actionCreator(actions.APPS_APPROVED_LOAD);
export const loadedApprovedApps = actionCreator(actions.APPS_APPROVED_LOADED);
export const setAppApproval = (app, status) =>
- optimisticActionCreator(
+ optimisticAction(
actionCreator(actions.SET_APPROVAL_APP)({
app,
status
@@ -99,7 +96,7 @@ export const addApp = (app, file, image) =>
});
export const editApp = (app, data) =>
- optimisticActionCreator(
+ optimisticAction(
actionCreator(actions.APP_EDIT)({
app,
data
@@ -107,7 +104,7 @@ export const editApp = (app, data) =>
);
export const editImage = (appId, imageId, data) =>
- optimisticActionCreator(
+ optimisticAction(
actionCreator(actions.APP_IMAGE_EDIT)({
appId,
imageId,
@@ -132,7 +129,7 @@ export const editImageLogo = (appId, imageId, logo) =>
});
export const editAppVersion = (appId, version) =>
- optimisticActionCreator(
+ optimisticAction(
actionCreator(actions.APP_VERSION_EDIT)({
appId,
version
@@ -188,7 +185,7 @@ export const addImageToAppSuccess = (appId, image) =>
});
export const deleteImageFromApp = (appId, imageId) =>
- optimisticActionCreator(
+ optimisticAction(
actionCreator(actions.APP_IMAGE_DELETE)({
appId,
imageId
@@ -202,7 +199,7 @@ export const deleteImageFromAppSuccess = (appId, imageId) =>
});
export const deleteAppVersion = (version, appId) =>
- optimisticActionCreator(
+ optimisticAction(
actionCreator(actions.APP_VERSION_DELETE)({
version,
appId
@@ -228,7 +225,7 @@ export const editAppSuccess = (app, data) =>
});
export const deleteApp = app =>
- optimisticActionCreator(
+ optimisticAction(
actionCreator(actions.APP_DELETE)({
app
})
@@ -278,7 +275,7 @@ export const actionErrorCreator = (type, error, meta) =>
* @param type of action
* @returns {object} FSA-compliant action
*/
-function actionCreator(type) {
+export function actionCreator(type) {
return (payload, meta, error) => {
if (payload == null) {
payload = {};
diff --git a/app/src/actions/epics.js b/app/src/actions/epics.js
index 9ff15bd8a..4d6e1045c 100644
--- a/app/src/actions/epics.js
+++ b/app/src/actions/epics.js
@@ -12,6 +12,10 @@ import "rxjs/add/observable/from";
import "rxjs/add/operator/do";
import { Observable } from "rxjs/Observable";
import { REVERT, COMMIT } from "redux-optimistic-ui";
+import {
+ commitOptimisticAction,
+ revertOptimisticAction
+} from "../utils/optimisticActions";
const loadAppsAll = action$ =>
action$.ofType(actions.APPS_ALL_LOAD).concatMap(action => {
@@ -59,13 +63,13 @@ const setAppApproval = action$ =>
return api
.setAppApproval(id, status)
.then(resp =>
- actionCreators.commitOrRevertOptimisticAction(
+ commitOptimisticAction(
actionCreators.setAppApprovalSuccess(action.payload),
transactionID
)
)
.catch(error =>
- actionCreators.commitOrRevertOptimisticAction(
+ revertOptimisticAction(
actionCreators.actionErrorCreator(
actions.SET_APPROVAL_APP_ERROR,
error
@@ -81,13 +85,13 @@ const deleteApp = action$ =>
return api
.deleteApp(action.payload.app.id)
.then(resp =>
- actionCreators.commitOrRevertOptimisticAction(
+ commitOptimisticAction(
actionCreators.deleteAppSuccess(action.payload.app),
id
)
)
.catch(error =>
- actionCreators.commitOrRevertOptimisticAction(
+ revertOptimisticAction(
actionCreators.actionErrorCreator(
actions.APP_DELETE_ERROR,
error
@@ -161,22 +165,21 @@ const newApp = action$ =>
const editApp = action$ =>
action$.ofType(actions.APP_EDIT).concatMap(action => {
const { app, data } = action.payload;
- const { id } = action.meta.optimistic;
return api
.updateApp(app.id, data)
.then(resp =>
- actionCreators.commitOrRevertOptimisticAction(
+ commitOptimisticAction(
actionCreators.editAppSuccess(app, data),
- id
+ action
)
)
.catch(error =>
- actionCreators.commitOrRevertOptimisticAction(
+ revertOptimisticAction(
actionCreators.actionErrorCreator(
actions.APP_EDIT_ERROR,
error
),
- id
+ action
)
);
});
@@ -192,7 +195,7 @@ const deleteVersion = action$ =>
return api
.deleteVersion(appId, version.id)
.then(response =>
- actionCreators.commitOrRevertOptimisticAction(
+ commitOptimisticAction(
actionCreators.deleteAppVersionSuccess(
version,
action.payload.appId
@@ -201,7 +204,7 @@ const deleteVersion = action$ =>
)
)
.catch(error =>
- actionCreators.commitOrRevertOptimisticAction(
+ revertOptimisticAction(
actionCreators.actionErrorCreator(
actions.APP_VERSION_DELETE_ERROR,
error
@@ -272,13 +275,13 @@ const deleteImage = action$ =>
return api
.deleteImage(appId, imageId)
.then(response =>
- actionCreators.commitOrRevertOptimisticAction(
+ commitOptimisticAction(
actionCreators.deleteImageFromAppSuccess(appId, imageId),
id
)
)
.catch(error =>
- actionCreators.commitOrRevertOptimisticAction(
+ revertOptimisticAction(
actionCreators.actionErrorCreator(
actions.APP_IMAGE_DELETE_ERROR,
error
@@ -299,13 +302,13 @@ const editImage = action$ =>
return api
.updateImage(appId, imageId, data)
.then(response =>
- actionCreators.commitOrRevertOptimisticAction(
+ commitOptimisticAction(
actionCreators.editImageSuccess(appId, imageId, data),
id
)
)
.catch(error =>
- actionCreators.commitOrRevertOptimisticAction(
+ revertOptimisticAction(
actionCreators.actionErrorCreator(
actions.APP_IMAGE_EDIT_ERROR,
error
@@ -327,13 +330,13 @@ const editVersion = action$ =>
return api
.updateVersion(appId, versionId, version)
.then(response =>
- actionCreators.commitOrRevertOptimisticAction(
+ commitOptimisticAction(
actionCreators.editAppVersionSuccess(appId, version),
id
)
)
.catch(error =>
- actionCreators.commitOrRevertOptimisticAction(
+ revertOptimisticAction(
actionCreators.actionErrorCreator(
actions.APP_VERSION_EDIT_ERROR,
error,
diff --git a/app/src/components/form/UploadAppFormStepper.jsx b/app/src/components/form/UploadAppFormStepper.jsx
index 78ecdf8fd..8982f4049 100644
--- a/app/src/components/form/UploadAppFormStepper.jsx
+++ b/app/src/components/form/UploadAppFormStepper.jsx
@@ -138,7 +138,7 @@ const AppVersionSection = props => {
name="version"
component={formUtils.renderTextField}
autoFocus
- label="Version *"
+ label="App Version *"
/>
align="center"
style={{
maxWidth: Theme.container.maxWidth - 48,
- margin: "0 auto"
+ margin: "0 auto",
+ width: '100%',
+ flex: '1 0 auto'
}}
>
diff --git a/app/src/reducers/userReducer.js b/app/src/reducers/userReducer.js
index 660673043..866ff6716 100644
--- a/app/src/reducers/userReducer.js
+++ b/app/src/reducers/userReducer.js
@@ -56,7 +56,9 @@ function appListReducer(state = { ...initialState, byId: {} }, action) {
...loadedState,
byId: {
...state.byId,
- [appId]: action.payload
+ [appId]: {
+ ...action.payload,
+ }
}
};
}
diff --git a/app/src/store.js b/app/src/store.js
index e3c3ef7b0..af5e3b0a3 100644
--- a/app/src/store.js
+++ b/app/src/store.js
@@ -1,5 +1,5 @@
import Epics from "./actions/epics";
-import { createStore, applyMiddleware, combineReducers } from "redux";
+import { createStore, applyMiddleware, combineReducers, compose } from "redux";
import { createEpicMiddleware } from "redux-observable";
import createLogger from "redux-logger";
import userReducer from "./reducers/userReducer";
@@ -27,5 +27,6 @@ const reducer = combineReducers({
snackbar: snackbarReducer,
form: formReducer
});
+const composeEnhancers = window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ || compose;
-export default createStore(reducer, applyMiddleware(...middlewares));
+export default createStore(reducer, composeEnhancers(applyMiddleware(...middlewares)));
diff --git a/app/src/styles/override.css b/app/src/styles/override.css
index 0a668304b..6e6ec7f19 100644
--- a/app/src/styles/override.css
+++ b/app/src/styles/override.css
@@ -175,6 +175,8 @@ h1, h2, h3, h4 {
.mdc-toolbar {
padding: 0 8px;
}
+
+
}
@media (min-width: 840px) {
diff --git a/app/src/utils/optimisticActions.js b/app/src/utils/optimisticActions.js
new file mode 100644
index 000000000..57b4270de
--- /dev/null
+++ b/app/src/utils/optimisticActions.js
@@ -0,0 +1,96 @@
+import { COMMIT, REVERT } from "redux-optimistic-ui";
+import { actionCreator } from "../actions/actionCreators";
+const isTransactionAction = transaction => {
+ return (
+ transaction &&
+ transaction.meta &&
+ transaction.meta.optimistic &&
+ transaction.meta.optimistic.id
+ );
+};
+
+/**
+ * Tries to parse and get the transaction identifier for an optimistic-action.
+ * @param {action} action to get optimistic-iD from
+ */
+const getTransactionID = transaction => {
+ if (isTransactionAction(transaction)) {
+ return transaction.meta.optimistic.id;
+ }
+ if (typeof transaction === "number") {
+ return transaction;
+ }
+ throw new Error("Could not parse transactionID.");
+};
+
+/**
+ * Action-enhancer that produces an optimistic action
+ * by adding optimistic meta properties
+ * @param action - Action to extend with optimistic action properties.
+ * @returns action - Optimistic action which can be dispatched.
+ */
+export const optimisticAction = action => ({
+ ...action,
+ meta: { ...action.meta, isOptimistic: true }
+});
+
+/**
+ *
+ * @param type
+ * @returns {function(*=, *=, *=)}
+ */
+export const optimisticActionCreator = type => (payload, meta, error) => {
+ meta = { ...meta, isOptimistic: true };
+ return actionCreator(type)(payload, meta, error);
+};
+
+/**
+ * Commit or revert an optimistic action that has been handled by the server by checking if the action is
+ * an error.
+ * This will return a new action of 'action' with added optimistic-meta-properties
+ * which can be dispatched to commit or revert a transaction.
+ * @param action - Resulting action of the closed transaction (committed or reverted).
+ * @param {integer|action} transaction of the optimistic-action. Either the transactionID (action.meta.optimistic.id)
+ * of the initiating optimistic-action, or the action-object itself.
+ * @param error - override error in action.error, results in a reverted action.
+ * @returns action - action with enhanced properties so that redux-optimistic-ui can handle the reverted or committed action
+ */
+export const commitOrRevertOptimisticAction = (
+ action,
+ transaction,
+ error = false
+) => {
+ if (action.error) {
+ error = true;
+ }
+ let transactionID = getTransactionID(transaction);
+ return {
+ ...action,
+ meta: {
+ ...action.meta,
+ optimistic: error
+ ? { type: REVERT, id: transactionID }
+ : { type: COMMIT, id: transactionID }
+ }
+ };
+};
+
+export const commitOptimisticAction = (action, transaction) => {
+ return {
+ ...action,
+ meta: {
+ ...action.meta,
+ optimistic: { type: COMMIT, id: getTransactionID(transaction) }
+ }
+ };
+};
+
+export const revertOptimisticAction = (action, transaction) => {
+ return {
+ ...action,
+ meta: {
+ ...action.meta,
+ optimistic: { type: REVERT, id: getTransactionID(transaction) }
+ }
+ };
+};
From 52ea7c48caa0d4d47cea471c631807d6df2bcb78 Mon Sep 17 00:00:00 2001
From: Birk Johansson
Date: Sun, 15 Oct 2017 21:39:46 +0200
Subject: [PATCH 14/21] Migrate to react v16
---
.../dialog/ConfirmDeleteAppDialog.js | 3 +-
app/src/components/dialog/ConfirmGeneric.js | 3 +-
app/src/components/dialog/DialogBase.js | 3 +-
app/src/components/dialog/DialogRoot.js | 3 +-
app/src/components/dialog/EditAppDialog.js | 3 +-
app/src/components/dialog/EditImageDialog.js | 3 +-
app/src/components/dialog/ErrorDialog.js | 3 +-
.../components/dialog/NewAppVersionDialog.js | 3 +-
package.json | 8 +-
yarn.lock | 1195 ++++++++++++++++-
10 files changed, 1196 insertions(+), 31 deletions(-)
diff --git a/app/src/components/dialog/ConfirmDeleteAppDialog.js b/app/src/components/dialog/ConfirmDeleteAppDialog.js
index 3a731f67d..33e331449 100644
--- a/app/src/components/dialog/ConfirmDeleteAppDialog.js
+++ b/app/src/components/dialog/ConfirmDeleteAppDialog.js
@@ -1,4 +1,5 @@
-import React, { PropTypes, Component } from "react";
+import PropTypes from 'prop-types';
+import React, { Component } from "react";
import { connect } from "react-redux";
import DialogBase from "./DialogBase";
import { deleteApp } from "../../actions/actionCreators";
diff --git a/app/src/components/dialog/ConfirmGeneric.js b/app/src/components/dialog/ConfirmGeneric.js
index 13c953036..def3a38f1 100644
--- a/app/src/components/dialog/ConfirmGeneric.js
+++ b/app/src/components/dialog/ConfirmGeneric.js
@@ -1,4 +1,5 @@
-import React, { PropTypes, Component } from "react";
+import PropTypes from 'prop-types';
+import React, { Component } from "react";
import DialogBase from "./DialogBase";
const ConfirmGenericDialog = props => {
diff --git a/app/src/components/dialog/DialogBase.js b/app/src/components/dialog/DialogBase.js
index 2292650c9..10cd1d720 100644
--- a/app/src/components/dialog/DialogBase.js
+++ b/app/src/components/dialog/DialogBase.js
@@ -1,4 +1,5 @@
-import React, { PropTypes, Component } from "react";
+import PropTypes from 'prop-types';
+import React, { Component } from "react";
import { connect } from "react-redux";
import FlatButton from "material-ui/FlatButton";
import Dialog from "material-ui/Dialog";
diff --git a/app/src/components/dialog/DialogRoot.js b/app/src/components/dialog/DialogRoot.js
index f5a484776..e03a5d84c 100644
--- a/app/src/components/dialog/DialogRoot.js
+++ b/app/src/components/dialog/DialogRoot.js
@@ -1,4 +1,5 @@
-import React, { PropTypes, Component } from "react";
+import PropTypes from 'prop-types';
+import React, { Component } from "react";
import { connect } from "react-redux";
import * as dialogTypes from "../../constants/dialogTypes";
import NewAppVersionDialog from "./NewAppVersionDialog";
diff --git a/app/src/components/dialog/EditAppDialog.js b/app/src/components/dialog/EditAppDialog.js
index 0d4f139ae..c8d62d6a8 100644
--- a/app/src/components/dialog/EditAppDialog.js
+++ b/app/src/components/dialog/EditAppDialog.js
@@ -1,4 +1,5 @@
-import React, { PropTypes, Component } from "react";
+import PropTypes from 'prop-types';
+import React, { Component } from "react";
import TextField from "material-ui/TextField";
import { connect } from "react-redux";
import DialogBase from "./DialogBase";
diff --git a/app/src/components/dialog/EditImageDialog.js b/app/src/components/dialog/EditImageDialog.js
index 28287cdd5..c115763cc 100644
--- a/app/src/components/dialog/EditImageDialog.js
+++ b/app/src/components/dialog/EditImageDialog.js
@@ -1,4 +1,5 @@
-import React, { PropTypes, Component } from "react";
+import PropTypes from 'prop-types';
+import React, { Component } from "react";
import TextField from "material-ui/TextField";
import { connect } from "react-redux";
import DialogBase from "./DialogBase";
diff --git a/app/src/components/dialog/ErrorDialog.js b/app/src/components/dialog/ErrorDialog.js
index 4d27e2f6c..7b1d70877 100644
--- a/app/src/components/dialog/ErrorDialog.js
+++ b/app/src/components/dialog/ErrorDialog.js
@@ -1,4 +1,5 @@
-import React, { Component, PropTypes } from "react";
+import PropTypes from 'prop-types';
+import React, { Component } from "react";
import { connect } from "react-redux";
import DialogRoot from "./DialogBase";
diff --git a/app/src/components/dialog/NewAppVersionDialog.js b/app/src/components/dialog/NewAppVersionDialog.js
index 2698a4ded..c841fd112 100644
--- a/app/src/components/dialog/NewAppVersionDialog.js
+++ b/app/src/components/dialog/NewAppVersionDialog.js
@@ -1,4 +1,5 @@
-import React, { PropTypes, Component } from "react";
+import PropTypes from 'prop-types';
+import React, { Component } from "react";
import TextField from "material-ui/TextField";
import { connect } from "react-redux";
import DialogBase from "./DialogBase";
diff --git a/package.json b/package.json
index d8dd4a4c8..9c0c75b30 100644
--- a/package.json
+++ b/package.json
@@ -4,8 +4,7 @@
"main": "index.js",
"license": "BSD-3-Clause",
"scripts": {
- "start":
- "NODE_ENV='development' webpack-dev-server --hot --inline --config app/webpack.config.js",
+ "start": "NODE_ENV='development' webpack-dev-server --hot --inline --config app/webpack.config.js",
"build": "webpack -p --config app/webpack.config.js",
"test": "NODE_ENV=test mocha --opts app/test/mocha.opts"
},
@@ -40,13 +39,16 @@
"classnames": "^2.2.5",
"css-loader": "^0.26.1",
"file-loader": "^0.11.2",
+ "global": "^4.3.2",
"history": "^4.5.1",
+ "jscodeshift": "^0.3.32",
"jwt-decode": "^2.1.0",
"lodash": "^4.17.4",
"material-components-web": "^0.16.0",
"material-design-icons": "^3.0.1",
"material-ui": "^0.18.7",
"node-sass": "^4.5.3",
+ "prop-types": "^15.6.0",
"react": "~15.4",
"react-animate-height": "^0.9.9",
"react-dom": "~15.4",
@@ -58,7 +60,7 @@
"react-transition-group": "^2.2.0",
"recompose": "0.21",
"redux": "3",
- "redux-form": "^7.0.3",
+ "redux-form": "^7.1.1",
"redux-observable": "0.12",
"redux-optimistic-ui": "^3.0.0",
"rxjs": "5",
diff --git a/yarn.lock b/yarn.lock
index 2f8f46088..60d868e43 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -312,6 +312,12 @@ alphanum-sort@^1.0.1, alphanum-sort@^1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/alphanum-sort/-/alphanum-sort-1.0.2.tgz#97a1119649b211ad33691d9f9f486a8ec9fbe0a3"
+alter@~0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/alter/-/alter-0.2.0.tgz#c7588808617572034aae62480af26b1d4d1cb3cd"
+ dependencies:
+ stable "~0.1.3"
+
amdefine@>=0.0.4:
version "1.0.1"
resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5"
@@ -328,6 +334,10 @@ ansi-styles@^2.2.1:
version "2.2.1"
resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe"
+ansi-styles@~1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-1.0.0.tgz#cb102df1c56f5123eab8b67cd7b98027a0279178"
+
anymatch@^1.3.0:
version "1.3.0"
resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-1.3.0.tgz#a3e52fa39168c825ff57b0248126ce5a8ff95507"
@@ -392,7 +402,7 @@ array-unique@^0.2.1:
version "0.2.1"
resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.2.1.tgz#a1d97ccafcbc2625cc70fadceb36a50c58b01a53"
-arrify@^1.0.0:
+arrify@^1.0.0, arrify@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d"
@@ -430,6 +440,26 @@ assertion-error@^1.0.1:
version "1.0.2"
resolved "https://registry.yarnpkg.com/assertion-error/-/assertion-error-1.0.2.tgz#13ca515d86206da0bac66e834dd397d87581094c"
+ast-traverse@~0.1.1:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/ast-traverse/-/ast-traverse-0.1.1.tgz#69cf2b8386f19dcda1bb1e05d68fe359d8897de6"
+
+ast-types@0.8.12:
+ version "0.8.12"
+ resolved "https://registry.yarnpkg.com/ast-types/-/ast-types-0.8.12.tgz#a0d90e4351bb887716c83fd637ebf818af4adfcc"
+
+ast-types@0.8.15:
+ version "0.8.15"
+ resolved "https://registry.yarnpkg.com/ast-types/-/ast-types-0.8.15.tgz#8eef0827f04dff0ec8857ba925abe3fea6194e52"
+
+ast-types@0.9.12:
+ version "0.9.12"
+ resolved "https://registry.yarnpkg.com/ast-types/-/ast-types-0.9.12.tgz#b136300d67026625ae15326982ca9918e5db73c9"
+
+ast-types@0.9.6:
+ version "0.9.6"
+ resolved "https://registry.yarnpkg.com/ast-types/-/ast-types-0.9.6.tgz#102c9e9e9005d3e7e3829bf0c4fa24ee862ee9b9"
+
async-each@^1.0.0:
version "1.0.1"
resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.1.tgz#19d386a1d9edc6e7c1c85d388aedbcc56d33602d"
@@ -438,7 +468,7 @@ async-foreach@^0.1.3:
version "0.1.3"
resolved "https://registry.yarnpkg.com/async-foreach/-/async-foreach-0.1.3.tgz#36121f845c0578172de419a97dbeb1d16ec34542"
-async@^1.5.2:
+async@^1.5.0, async@^1.5.2:
version "1.5.2"
resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a"
@@ -509,6 +539,14 @@ babel-code-frame@^6.11.0, babel-code-frame@^6.22.0:
esutils "^2.0.2"
js-tokens "^3.0.0"
+babel-code-frame@^6.26.0:
+ version "6.26.0"
+ resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.26.0.tgz#63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b"
+ dependencies:
+ chalk "^1.1.3"
+ esutils "^2.0.2"
+ js-tokens "^3.0.2"
+
babel-core@6, babel-core@^6.22.0:
version "6.22.1"
resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-6.22.1.tgz#9c5fd658ba1772d28d721f6d25d968fc7ae21648"
@@ -533,6 +571,94 @@ babel-core@6, babel-core@^6.22.0:
slash "^1.0.0"
source-map "^0.5.0"
+babel-core@^5:
+ version "5.8.38"
+ resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-5.8.38.tgz#1fcaee79d7e61b750b00b8e54f6dfc9d0af86558"
+ dependencies:
+ babel-plugin-constant-folding "^1.0.1"
+ babel-plugin-dead-code-elimination "^1.0.2"
+ babel-plugin-eval "^1.0.1"
+ babel-plugin-inline-environment-variables "^1.0.1"
+ babel-plugin-jscript "^1.0.4"
+ babel-plugin-member-expression-literals "^1.0.1"
+ babel-plugin-property-literals "^1.0.1"
+ babel-plugin-proto-to-assign "^1.0.3"
+ babel-plugin-react-constant-elements "^1.0.3"
+ babel-plugin-react-display-name "^1.0.3"
+ babel-plugin-remove-console "^1.0.1"
+ babel-plugin-remove-debugger "^1.0.1"
+ babel-plugin-runtime "^1.0.7"
+ babel-plugin-undeclared-variables-check "^1.0.2"
+ babel-plugin-undefined-to-void "^1.1.6"
+ babylon "^5.8.38"
+ bluebird "^2.9.33"
+ chalk "^1.0.0"
+ convert-source-map "^1.1.0"
+ core-js "^1.0.0"
+ debug "^2.1.1"
+ detect-indent "^3.0.0"
+ esutils "^2.0.0"
+ fs-readdir-recursive "^0.1.0"
+ globals "^6.4.0"
+ home-or-tmp "^1.0.0"
+ is-integer "^1.0.4"
+ js-tokens "1.0.1"
+ json5 "^0.4.0"
+ lodash "^3.10.0"
+ minimatch "^2.0.3"
+ output-file-sync "^1.1.0"
+ path-exists "^1.0.0"
+ path-is-absolute "^1.0.0"
+ private "^0.1.6"
+ regenerator "0.8.40"
+ regexpu "^1.3.0"
+ repeating "^1.1.2"
+ resolve "^1.1.6"
+ shebang-regex "^1.0.0"
+ slash "^1.0.0"
+ source-map "^0.5.0"
+ source-map-support "^0.2.10"
+ to-fast-properties "^1.0.0"
+ trim-right "^1.0.0"
+ try-resolve "^1.0.0"
+
+babel-core@^6.26.0:
+ version "6.26.0"
+ resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-6.26.0.tgz#af32f78b31a6fcef119c87b0fd8d9753f03a0bb8"
+ dependencies:
+ babel-code-frame "^6.26.0"
+ babel-generator "^6.26.0"
+ babel-helpers "^6.24.1"
+ babel-messages "^6.23.0"
+ babel-register "^6.26.0"
+ babel-runtime "^6.26.0"
+ babel-template "^6.26.0"
+ babel-traverse "^6.26.0"
+ babel-types "^6.26.0"
+ babylon "^6.18.0"
+ convert-source-map "^1.5.0"
+ debug "^2.6.8"
+ json5 "^0.5.1"
+ lodash "^4.17.4"
+ minimatch "^3.0.4"
+ path-is-absolute "^1.0.1"
+ private "^0.1.7"
+ slash "^1.0.0"
+ source-map "^0.5.6"
+
+babel-generator@^6.18.0, babel-generator@^6.26.0:
+ version "6.26.0"
+ resolved "https://registry.yarnpkg.com/babel-generator/-/babel-generator-6.26.0.tgz#ac1ae20070b79f6e3ca1d3269613053774f20dc5"
+ dependencies:
+ babel-messages "^6.23.0"
+ babel-runtime "^6.26.0"
+ babel-types "^6.26.0"
+ detect-indent "^4.0.0"
+ jsesc "^1.3.0"
+ lodash "^4.17.4"
+ source-map "^0.5.6"
+ trim-right "^1.0.1"
+
babel-generator@^6.22.0:
version "6.22.0"
resolved "https://registry.yarnpkg.com/babel-generator/-/babel-generator-6.22.0.tgz#d642bf4961911a8adc7c692b0c9297f325cda805"
@@ -553,6 +679,14 @@ babel-helper-bindify-decorators@^6.22.0:
babel-traverse "^6.22.0"
babel-types "^6.22.0"
+babel-helper-bindify-decorators@^6.24.1:
+ version "6.24.1"
+ resolved "https://registry.yarnpkg.com/babel-helper-bindify-decorators/-/babel-helper-bindify-decorators-6.24.1.tgz#14c19e5f142d7b47f19a52431e52b1ccbc40a330"
+ dependencies:
+ babel-runtime "^6.22.0"
+ babel-traverse "^6.24.1"
+ babel-types "^6.24.1"
+
babel-helper-builder-binary-assignment-operator-visitor@^6.22.0:
version "6.22.0"
resolved "https://registry.yarnpkg.com/babel-helper-builder-binary-assignment-operator-visitor/-/babel-helper-builder-binary-assignment-operator-visitor-6.22.0.tgz#29df56be144d81bdeac08262bfa41d2c5e91cdcd"
@@ -561,6 +695,14 @@ babel-helper-builder-binary-assignment-operator-visitor@^6.22.0:
babel-runtime "^6.22.0"
babel-types "^6.22.0"
+babel-helper-builder-binary-assignment-operator-visitor@^6.24.1:
+ version "6.24.1"
+ resolved "https://registry.yarnpkg.com/babel-helper-builder-binary-assignment-operator-visitor/-/babel-helper-builder-binary-assignment-operator-visitor-6.24.1.tgz#cce4517ada356f4220bcae8a02c2b346f9a56664"
+ dependencies:
+ babel-helper-explode-assignable-expression "^6.24.1"
+ babel-runtime "^6.22.0"
+ babel-types "^6.24.1"
+
babel-helper-builder-react-jsx@^6.22.0:
version "6.22.0"
resolved "https://registry.yarnpkg.com/babel-helper-builder-react-jsx/-/babel-helper-builder-react-jsx-6.22.0.tgz#aafb31913e47761fd4d0b6987756a144a65fca0d"
@@ -579,6 +721,15 @@ babel-helper-call-delegate@^6.22.0:
babel-traverse "^6.22.0"
babel-types "^6.22.0"
+babel-helper-call-delegate@^6.24.1:
+ version "6.24.1"
+ resolved "https://registry.yarnpkg.com/babel-helper-call-delegate/-/babel-helper-call-delegate-6.24.1.tgz#ece6aacddc76e41c3461f88bfc575bd0daa2df8d"
+ dependencies:
+ babel-helper-hoist-variables "^6.24.1"
+ babel-runtime "^6.22.0"
+ babel-traverse "^6.24.1"
+ babel-types "^6.24.1"
+
babel-helper-define-map@^6.22.0:
version "6.22.0"
resolved "https://registry.yarnpkg.com/babel-helper-define-map/-/babel-helper-define-map-6.22.0.tgz#9544e9502b2d6dfe7d00ff60e82bd5a7a89e95b7"
@@ -588,6 +739,15 @@ babel-helper-define-map@^6.22.0:
babel-types "^6.22.0"
lodash "^4.2.0"
+babel-helper-define-map@^6.24.1:
+ version "6.26.0"
+ resolved "https://registry.yarnpkg.com/babel-helper-define-map/-/babel-helper-define-map-6.26.0.tgz#a5f56dab41a25f97ecb498c7ebaca9819f95be5f"
+ dependencies:
+ babel-helper-function-name "^6.24.1"
+ babel-runtime "^6.26.0"
+ babel-types "^6.26.0"
+ lodash "^4.17.4"
+
babel-helper-explode-assignable-expression@^6.22.0:
version "6.22.0"
resolved "https://registry.yarnpkg.com/babel-helper-explode-assignable-expression/-/babel-helper-explode-assignable-expression-6.22.0.tgz#c97bf76eed3e0bae4048121f2b9dae1a4e7d0478"
@@ -596,6 +756,14 @@ babel-helper-explode-assignable-expression@^6.22.0:
babel-traverse "^6.22.0"
babel-types "^6.22.0"
+babel-helper-explode-assignable-expression@^6.24.1:
+ version "6.24.1"
+ resolved "https://registry.yarnpkg.com/babel-helper-explode-assignable-expression/-/babel-helper-explode-assignable-expression-6.24.1.tgz#f25b82cf7dc10433c55f70592d5746400ac22caa"
+ dependencies:
+ babel-runtime "^6.22.0"
+ babel-traverse "^6.24.1"
+ babel-types "^6.24.1"
+
babel-helper-explode-class@^6.22.0:
version "6.22.0"
resolved "https://registry.yarnpkg.com/babel-helper-explode-class/-/babel-helper-explode-class-6.22.0.tgz#646304924aa6388a516843ba7f1855ef8dfeb69b"
@@ -605,6 +773,15 @@ babel-helper-explode-class@^6.22.0:
babel-traverse "^6.22.0"
babel-types "^6.22.0"
+babel-helper-explode-class@^6.24.1:
+ version "6.24.1"
+ resolved "https://registry.yarnpkg.com/babel-helper-explode-class/-/babel-helper-explode-class-6.24.1.tgz#7dc2a3910dee007056e1e31d640ced3d54eaa9eb"
+ dependencies:
+ babel-helper-bindify-decorators "^6.24.1"
+ babel-runtime "^6.22.0"
+ babel-traverse "^6.24.1"
+ babel-types "^6.24.1"
+
babel-helper-function-name@^6.22.0:
version "6.22.0"
resolved "https://registry.yarnpkg.com/babel-helper-function-name/-/babel-helper-function-name-6.22.0.tgz#51f1bdc4bb89b15f57a9b249f33d742816dcbefc"
@@ -625,6 +802,16 @@ babel-helper-function-name@^6.23.0:
babel-traverse "^6.23.0"
babel-types "^6.23.0"
+babel-helper-function-name@^6.24.1:
+ version "6.24.1"
+ resolved "https://registry.yarnpkg.com/babel-helper-function-name/-/babel-helper-function-name-6.24.1.tgz#d3475b8c03ed98242a25b48351ab18399d3580a9"
+ dependencies:
+ babel-helper-get-function-arity "^6.24.1"
+ babel-runtime "^6.22.0"
+ babel-template "^6.24.1"
+ babel-traverse "^6.24.1"
+ babel-types "^6.24.1"
+
babel-helper-get-function-arity@^6.22.0:
version "6.22.0"
resolved "https://registry.yarnpkg.com/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.22.0.tgz#0beb464ad69dc7347410ac6ade9f03a50634f5ce"
@@ -632,6 +819,13 @@ babel-helper-get-function-arity@^6.22.0:
babel-runtime "^6.22.0"
babel-types "^6.22.0"
+babel-helper-get-function-arity@^6.24.1:
+ version "6.24.1"
+ resolved "https://registry.yarnpkg.com/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.24.1.tgz#8f7782aa93407c41d3aa50908f89b031b1b6853d"
+ dependencies:
+ babel-runtime "^6.22.0"
+ babel-types "^6.24.1"
+
babel-helper-hoist-variables@^6.22.0:
version "6.22.0"
resolved "https://registry.yarnpkg.com/babel-helper-hoist-variables/-/babel-helper-hoist-variables-6.22.0.tgz#3eacbf731d80705845dd2e9718f600cfb9b4ba72"
@@ -639,6 +833,13 @@ babel-helper-hoist-variables@^6.22.0:
babel-runtime "^6.22.0"
babel-types "^6.22.0"
+babel-helper-hoist-variables@^6.24.1:
+ version "6.24.1"
+ resolved "https://registry.yarnpkg.com/babel-helper-hoist-variables/-/babel-helper-hoist-variables-6.24.1.tgz#1ecb27689c9d25513eadbc9914a73f5408be7a76"
+ dependencies:
+ babel-runtime "^6.22.0"
+ babel-types "^6.24.1"
+
babel-helper-is-react-class@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/babel-helper-is-react-class/-/babel-helper-is-react-class-1.0.0.tgz#ef6f3678b05c76dbdeedadead7af98c2724d8431"
@@ -650,6 +851,13 @@ babel-helper-optimise-call-expression@^6.22.0:
babel-runtime "^6.22.0"
babel-types "^6.22.0"
+babel-helper-optimise-call-expression@^6.24.1:
+ version "6.24.1"
+ resolved "https://registry.yarnpkg.com/babel-helper-optimise-call-expression/-/babel-helper-optimise-call-expression-6.24.1.tgz#f7a13427ba9f73f8f4fa993c54a97882d1244257"
+ dependencies:
+ babel-runtime "^6.22.0"
+ babel-types "^6.24.1"
+
babel-helper-regex@^6.22.0:
version "6.22.0"
resolved "https://registry.yarnpkg.com/babel-helper-regex/-/babel-helper-regex-6.22.0.tgz#79f532be1647b1f0ee3474b5f5c3da58001d247d"
@@ -658,6 +866,14 @@ babel-helper-regex@^6.22.0:
babel-types "^6.22.0"
lodash "^4.2.0"
+babel-helper-regex@^6.24.1:
+ version "6.26.0"
+ resolved "https://registry.yarnpkg.com/babel-helper-regex/-/babel-helper-regex-6.26.0.tgz#325c59f902f82f24b74faceed0363954f6495e72"
+ dependencies:
+ babel-runtime "^6.26.0"
+ babel-types "^6.26.0"
+ lodash "^4.17.4"
+
babel-helper-remap-async-to-generator@^6.22.0:
version "6.22.0"
resolved "https://registry.yarnpkg.com/babel-helper-remap-async-to-generator/-/babel-helper-remap-async-to-generator-6.22.0.tgz#2186ae73278ed03b8b15ced089609da981053383"
@@ -668,6 +884,16 @@ babel-helper-remap-async-to-generator@^6.22.0:
babel-traverse "^6.22.0"
babel-types "^6.22.0"
+babel-helper-remap-async-to-generator@^6.24.1:
+ version "6.24.1"
+ resolved "https://registry.yarnpkg.com/babel-helper-remap-async-to-generator/-/babel-helper-remap-async-to-generator-6.24.1.tgz#5ec581827ad723fecdd381f1c928390676e4551b"
+ dependencies:
+ babel-helper-function-name "^6.24.1"
+ babel-runtime "^6.22.0"
+ babel-template "^6.24.1"
+ babel-traverse "^6.24.1"
+ babel-types "^6.24.1"
+
babel-helper-replace-supers@^6.22.0:
version "6.22.0"
resolved "https://registry.yarnpkg.com/babel-helper-replace-supers/-/babel-helper-replace-supers-6.22.0.tgz#1fcee2270657548908c34db16bcc345f9850cf42"
@@ -679,6 +905,17 @@ babel-helper-replace-supers@^6.22.0:
babel-traverse "^6.22.0"
babel-types "^6.22.0"
+babel-helper-replace-supers@^6.24.1:
+ version "6.24.1"
+ resolved "https://registry.yarnpkg.com/babel-helper-replace-supers/-/babel-helper-replace-supers-6.24.1.tgz#bf6dbfe43938d17369a213ca8a8bf74b6a90ab1a"
+ dependencies:
+ babel-helper-optimise-call-expression "^6.24.1"
+ babel-messages "^6.23.0"
+ babel-runtime "^6.22.0"
+ babel-template "^6.24.1"
+ babel-traverse "^6.24.1"
+ babel-types "^6.24.1"
+
babel-helpers@^6.22.0:
version "6.22.0"
resolved "https://registry.yarnpkg.com/babel-helpers/-/babel-helpers-6.22.0.tgz#d275f55f2252b8101bff07bc0c556deda657392c"
@@ -686,6 +923,20 @@ babel-helpers@^6.22.0:
babel-runtime "^6.22.0"
babel-template "^6.22.0"
+babel-helpers@^6.24.1:
+ version "6.24.1"
+ resolved "https://registry.yarnpkg.com/babel-helpers/-/babel-helpers-6.24.1.tgz#3471de9caec388e5c850e597e58a26ddf37602b2"
+ dependencies:
+ babel-runtime "^6.22.0"
+ babel-template "^6.24.1"
+
+babel-jest@^21.2.0:
+ version "21.2.0"
+ resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-21.2.0.tgz#2ce059519a9374a2c46f2455b6fbef5ad75d863e"
+ dependencies:
+ babel-plugin-istanbul "^4.0.0"
+ babel-preset-jest "^21.2.0"
+
babel-loader@^7.1.0:
version "7.1.0"
resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-7.1.0.tgz#3fbf2581f085774bd9642dca9990e6d6c1491144"
@@ -712,10 +963,76 @@ babel-plugin-check-es2015-constants@^6.22.0:
dependencies:
babel-runtime "^6.22.0"
+babel-plugin-constant-folding@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/babel-plugin-constant-folding/-/babel-plugin-constant-folding-1.0.1.tgz#8361d364c98e449c3692bdba51eff0844290aa8e"
+
+babel-plugin-dead-code-elimination@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/babel-plugin-dead-code-elimination/-/babel-plugin-dead-code-elimination-1.0.2.tgz#5f7c451274dcd7cccdbfbb3e0b85dd28121f0f65"
+
+babel-plugin-eval@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/babel-plugin-eval/-/babel-plugin-eval-1.0.1.tgz#a2faed25ce6be69ade4bfec263f70169195950da"
+
+babel-plugin-inline-environment-variables@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/babel-plugin-inline-environment-variables/-/babel-plugin-inline-environment-variables-1.0.1.tgz#1f58ce91207ad6a826a8bf645fafe68ff5fe3ffe"
+
+babel-plugin-istanbul@^4.0.0:
+ version "4.1.5"
+ resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-4.1.5.tgz#6760cdd977f411d3e175bb064f2bc327d99b2b6e"
+ dependencies:
+ find-up "^2.1.0"
+ istanbul-lib-instrument "^1.7.5"
+ test-exclude "^4.1.1"
+
+babel-plugin-jest-hoist@^21.2.0:
+ version "21.2.0"
+ resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-21.2.0.tgz#2cef637259bd4b628a6cace039de5fcd14dbb006"
+
+babel-plugin-jscript@^1.0.4:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/babel-plugin-jscript/-/babel-plugin-jscript-1.0.4.tgz#8f342c38276e87a47d5fa0a8bd3d5eb6ccad8fcc"
+
+babel-plugin-member-expression-literals@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/babel-plugin-member-expression-literals/-/babel-plugin-member-expression-literals-1.0.1.tgz#cc5edb0faa8dc927170e74d6d1c02440021624d3"
+
+babel-plugin-property-literals@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/babel-plugin-property-literals/-/babel-plugin-property-literals-1.0.1.tgz#0252301900192980b1c118efea48ce93aab83336"
+
+babel-plugin-proto-to-assign@^1.0.3:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/babel-plugin-proto-to-assign/-/babel-plugin-proto-to-assign-1.0.4.tgz#c49e7afd02f577bc4da05ea2df002250cf7cd123"
+ dependencies:
+ lodash "^3.9.3"
+
+babel-plugin-react-constant-elements@^1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/babel-plugin-react-constant-elements/-/babel-plugin-react-constant-elements-1.0.3.tgz#946736e8378429cbc349dcff62f51c143b34e35a"
+
+babel-plugin-react-display-name@^1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/babel-plugin-react-display-name/-/babel-plugin-react-display-name-1.0.3.tgz#754fe38926e8424a4e7b15ab6ea6139dee0514fc"
+
+babel-plugin-remove-console@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/babel-plugin-remove-console/-/babel-plugin-remove-console-1.0.1.tgz#d8f24556c3a05005d42aaaafd27787f53ff013a7"
+
+babel-plugin-remove-debugger@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/babel-plugin-remove-debugger/-/babel-plugin-remove-debugger-1.0.1.tgz#fd2ea3cd61a428ad1f3b9c89882ff4293e8c14c7"
+
babel-plugin-rewire@^1.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/babel-plugin-rewire/-/babel-plugin-rewire-1.1.0.tgz#a6b966d9d8c06c03d95dcda2eec4e2521519549b"
+babel-plugin-runtime@^1.0.7:
+ version "1.0.7"
+ resolved "https://registry.yarnpkg.com/babel-plugin-runtime/-/babel-plugin-runtime-1.0.7.tgz#bf7c7d966dd56ecd5c17fa1cb253c9acb7e54aaf"
+
babel-plugin-syntax-async-functions@^6.8.0:
version "6.13.0"
resolved "https://registry.yarnpkg.com/babel-plugin-syntax-async-functions/-/babel-plugin-syntax-async-functions-6.13.0.tgz#cad9cad1191b5ad634bf30ae0872391e0647be95"
@@ -724,6 +1041,10 @@ babel-plugin-syntax-async-generators@^6.5.0:
version "6.13.0"
resolved "https://registry.yarnpkg.com/babel-plugin-syntax-async-generators/-/babel-plugin-syntax-async-generators-6.13.0.tgz#6bc963ebb16eccbae6b92b596eb7f35c342a8b9a"
+babel-plugin-syntax-class-constructor-call@^6.18.0:
+ version "6.18.0"
+ resolved "https://registry.yarnpkg.com/babel-plugin-syntax-class-constructor-call/-/babel-plugin-syntax-class-constructor-call-6.18.0.tgz#9cb9d39fe43c8600bec8146456ddcbd4e1a76416"
+
babel-plugin-syntax-class-properties@^6.8.0:
version "6.13.0"
resolved "https://registry.yarnpkg.com/babel-plugin-syntax-class-properties/-/babel-plugin-syntax-class-properties-6.13.0.tgz#d7eb23b79a317f8543962c505b827c7d6cac27de"
@@ -740,6 +1061,10 @@ babel-plugin-syntax-exponentiation-operator@^6.8.0:
version "6.13.0"
resolved "https://registry.yarnpkg.com/babel-plugin-syntax-exponentiation-operator/-/babel-plugin-syntax-exponentiation-operator-6.13.0.tgz#9ee7e8337290da95288201a6a57f4170317830de"
+babel-plugin-syntax-export-extensions@^6.8.0:
+ version "6.13.0"
+ resolved "https://registry.yarnpkg.com/babel-plugin-syntax-export-extensions/-/babel-plugin-syntax-export-extensions-6.13.0.tgz#70a1484f0f9089a4e84ad44bac353c95b9b12721"
+
babel-plugin-syntax-flow@^6.18.0, babel-plugin-syntax-flow@^6.3.13:
version "6.18.0"
resolved "https://registry.yarnpkg.com/babel-plugin-syntax-flow/-/babel-plugin-syntax-flow-6.18.0.tgz#4c3ab20a2af26aa20cd25995c398c4eb70310c8d"
@@ -748,7 +1073,7 @@ babel-plugin-syntax-jsx@^6.3.13, babel-plugin-syntax-jsx@^6.8.0:
version "6.18.0"
resolved "https://registry.yarnpkg.com/babel-plugin-syntax-jsx/-/babel-plugin-syntax-jsx-6.18.0.tgz#0af32a9a6e13ca7a3fd5069e62d7b0f58d0d8946"
-babel-plugin-syntax-object-rest-spread@^6.8.0:
+babel-plugin-syntax-object-rest-spread@^6.13.0, babel-plugin-syntax-object-rest-spread@^6.8.0:
version "6.13.0"
resolved "https://registry.yarnpkg.com/babel-plugin-syntax-object-rest-spread/-/babel-plugin-syntax-object-rest-spread-6.13.0.tgz#fd6536f2bce13836ffa3a5458c4903a597bb3bf5"
@@ -764,6 +1089,14 @@ babel-plugin-transform-async-generator-functions@^6.22.0:
babel-plugin-syntax-async-generators "^6.5.0"
babel-runtime "^6.22.0"
+babel-plugin-transform-async-generator-functions@^6.24.1:
+ version "6.24.1"
+ resolved "https://registry.yarnpkg.com/babel-plugin-transform-async-generator-functions/-/babel-plugin-transform-async-generator-functions-6.24.1.tgz#f058900145fd3e9907a6ddf28da59f215258a5db"
+ dependencies:
+ babel-helper-remap-async-to-generator "^6.24.1"
+ babel-plugin-syntax-async-generators "^6.5.0"
+ babel-runtime "^6.22.0"
+
babel-plugin-transform-async-to-generator@^6.22.0:
version "6.22.0"
resolved "https://registry.yarnpkg.com/babel-plugin-transform-async-to-generator/-/babel-plugin-transform-async-to-generator-6.22.0.tgz#194b6938ec195ad36efc4c33a971acf00d8cd35e"
@@ -772,6 +1105,22 @@ babel-plugin-transform-async-to-generator@^6.22.0:
babel-plugin-syntax-async-functions "^6.8.0"
babel-runtime "^6.22.0"
+babel-plugin-transform-async-to-generator@^6.24.1:
+ version "6.24.1"
+ resolved "https://registry.yarnpkg.com/babel-plugin-transform-async-to-generator/-/babel-plugin-transform-async-to-generator-6.24.1.tgz#6536e378aff6cb1d5517ac0e40eb3e9fc8d08761"
+ dependencies:
+ babel-helper-remap-async-to-generator "^6.24.1"
+ babel-plugin-syntax-async-functions "^6.8.0"
+ babel-runtime "^6.22.0"
+
+babel-plugin-transform-class-constructor-call@^6.24.1:
+ version "6.24.1"
+ resolved "https://registry.yarnpkg.com/babel-plugin-transform-class-constructor-call/-/babel-plugin-transform-class-constructor-call-6.24.1.tgz#80dc285505ac067dcb8d6c65e2f6f11ab7765ef9"
+ dependencies:
+ babel-plugin-syntax-class-constructor-call "^6.18.0"
+ babel-runtime "^6.22.0"
+ babel-template "^6.24.1"
+
babel-plugin-transform-class-properties@^6.22.0:
version "6.23.0"
resolved "https://registry.yarnpkg.com/babel-plugin-transform-class-properties/-/babel-plugin-transform-class-properties-6.23.0.tgz#187b747ee404399013563c993db038f34754ac3b"
@@ -781,6 +1130,15 @@ babel-plugin-transform-class-properties@^6.22.0:
babel-runtime "^6.22.0"
babel-template "^6.23.0"
+babel-plugin-transform-class-properties@^6.24.1:
+ version "6.24.1"
+ resolved "https://registry.yarnpkg.com/babel-plugin-transform-class-properties/-/babel-plugin-transform-class-properties-6.24.1.tgz#6a79763ea61d33d36f37b611aa9def81a81b46ac"
+ dependencies:
+ babel-helper-function-name "^6.24.1"
+ babel-plugin-syntax-class-properties "^6.8.0"
+ babel-runtime "^6.22.0"
+ babel-template "^6.24.1"
+
babel-plugin-transform-decorators@^6.22.0:
version "6.22.0"
resolved "https://registry.yarnpkg.com/babel-plugin-transform-decorators/-/babel-plugin-transform-decorators-6.22.0.tgz#c03635b27a23b23b7224f49232c237a73988d27c"
@@ -791,6 +1149,16 @@ babel-plugin-transform-decorators@^6.22.0:
babel-template "^6.22.0"
babel-types "^6.22.0"
+babel-plugin-transform-decorators@^6.24.1:
+ version "6.24.1"
+ resolved "https://registry.yarnpkg.com/babel-plugin-transform-decorators/-/babel-plugin-transform-decorators-6.24.1.tgz#788013d8f8c6b5222bdf7b344390dfd77569e24d"
+ dependencies:
+ babel-helper-explode-class "^6.24.1"
+ babel-plugin-syntax-decorators "^6.13.0"
+ babel-runtime "^6.22.0"
+ babel-template "^6.24.1"
+ babel-types "^6.24.1"
+
babel-plugin-transform-es2015-arrow-functions@^6.22.0:
version "6.22.0"
resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-arrow-functions/-/babel-plugin-transform-es2015-arrow-functions-6.22.0.tgz#452692cb711d5f79dc7f85e440ce41b9f244d221"
@@ -813,6 +1181,16 @@ babel-plugin-transform-es2015-block-scoping@^6.22.0:
babel-types "^6.22.0"
lodash "^4.2.0"
+babel-plugin-transform-es2015-block-scoping@^6.24.1:
+ version "6.26.0"
+ resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.26.0.tgz#d70f5299c1308d05c12f463813b0a09e73b1895f"
+ dependencies:
+ babel-runtime "^6.26.0"
+ babel-template "^6.26.0"
+ babel-traverse "^6.26.0"
+ babel-types "^6.26.0"
+ lodash "^4.17.4"
+
babel-plugin-transform-es2015-classes@^6.22.0:
version "6.22.0"
resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-classes/-/babel-plugin-transform-es2015-classes-6.22.0.tgz#54d44998fd823d9dca15292324161c331c1b6f14"
@@ -827,6 +1205,20 @@ babel-plugin-transform-es2015-classes@^6.22.0:
babel-traverse "^6.22.0"
babel-types "^6.22.0"
+babel-plugin-transform-es2015-classes@^6.24.1:
+ version "6.24.1"
+ resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-classes/-/babel-plugin-transform-es2015-classes-6.24.1.tgz#5a4c58a50c9c9461e564b4b2a3bfabc97a2584db"
+ dependencies:
+ babel-helper-define-map "^6.24.1"
+ babel-helper-function-name "^6.24.1"
+ babel-helper-optimise-call-expression "^6.24.1"
+ babel-helper-replace-supers "^6.24.1"
+ babel-messages "^6.23.0"
+ babel-runtime "^6.22.0"
+ babel-template "^6.24.1"
+ babel-traverse "^6.24.1"
+ babel-types "^6.24.1"
+
babel-plugin-transform-es2015-computed-properties@^6.22.0:
version "6.22.0"
resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-computed-properties/-/babel-plugin-transform-es2015-computed-properties-6.22.0.tgz#7c383e9629bba4820c11b0425bdd6290f7f057e7"
@@ -834,6 +1226,13 @@ babel-plugin-transform-es2015-computed-properties@^6.22.0:
babel-runtime "^6.22.0"
babel-template "^6.22.0"
+babel-plugin-transform-es2015-computed-properties@^6.24.1:
+ version "6.24.1"
+ resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-computed-properties/-/babel-plugin-transform-es2015-computed-properties-6.24.1.tgz#6fe2a8d16895d5634f4cd999b6d3480a308159b3"
+ dependencies:
+ babel-runtime "^6.22.0"
+ babel-template "^6.24.1"
+
babel-plugin-transform-es2015-destructuring@^6.22.0:
version "6.22.0"
resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-destructuring/-/babel-plugin-transform-es2015-destructuring-6.22.0.tgz#8e0af2f885a0b2cf999d47c4c1dd23ce88cfa4c6"
@@ -847,6 +1246,13 @@ babel-plugin-transform-es2015-duplicate-keys@^6.22.0:
babel-runtime "^6.22.0"
babel-types "^6.22.0"
+babel-plugin-transform-es2015-duplicate-keys@^6.24.1:
+ version "6.24.1"
+ resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-duplicate-keys/-/babel-plugin-transform-es2015-duplicate-keys-6.24.1.tgz#73eb3d310ca969e3ef9ec91c53741a6f1576423e"
+ dependencies:
+ babel-runtime "^6.22.0"
+ babel-types "^6.24.1"
+
babel-plugin-transform-es2015-for-of@^6.22.0:
version "6.22.0"
resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-for-of/-/babel-plugin-transform-es2015-for-of-6.22.0.tgz#180467ad63aeea592a1caeee4bf1c8b3e2616265"
@@ -861,6 +1267,14 @@ babel-plugin-transform-es2015-function-name@^6.22.0:
babel-runtime "^6.22.0"
babel-types "^6.22.0"
+babel-plugin-transform-es2015-function-name@^6.24.1:
+ version "6.24.1"
+ resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-function-name/-/babel-plugin-transform-es2015-function-name-6.24.1.tgz#834c89853bc36b1af0f3a4c5dbaa94fd8eacaa8b"
+ dependencies:
+ babel-helper-function-name "^6.24.1"
+ babel-runtime "^6.22.0"
+ babel-types "^6.24.1"
+
babel-plugin-transform-es2015-literals@^6.22.0:
version "6.22.0"
resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-literals/-/babel-plugin-transform-es2015-literals-6.22.0.tgz#4f54a02d6cd66cf915280019a31d31925377ca2e"
@@ -875,6 +1289,14 @@ babel-plugin-transform-es2015-modules-amd@^6.22.0:
babel-runtime "^6.22.0"
babel-template "^6.22.0"
+babel-plugin-transform-es2015-modules-amd@^6.24.1:
+ version "6.24.1"
+ resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-amd/-/babel-plugin-transform-es2015-modules-amd-6.24.1.tgz#3b3e54017239842d6d19c3011c4bd2f00a00d154"
+ dependencies:
+ babel-plugin-transform-es2015-modules-commonjs "^6.24.1"
+ babel-runtime "^6.22.0"
+ babel-template "^6.24.1"
+
babel-plugin-transform-es2015-modules-commonjs@^6.22.0:
version "6.22.0"
resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.22.0.tgz#6ca04e22b8e214fb50169730657e7a07dc941145"
@@ -884,6 +1306,15 @@ babel-plugin-transform-es2015-modules-commonjs@^6.22.0:
babel-template "^6.22.0"
babel-types "^6.22.0"
+babel-plugin-transform-es2015-modules-commonjs@^6.24.1:
+ version "6.26.0"
+ resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.26.0.tgz#0d8394029b7dc6abe1a97ef181e00758dd2e5d8a"
+ dependencies:
+ babel-plugin-transform-strict-mode "^6.24.1"
+ babel-runtime "^6.26.0"
+ babel-template "^6.26.0"
+ babel-types "^6.26.0"
+
babel-plugin-transform-es2015-modules-systemjs@^6.22.0:
version "6.22.0"
resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-systemjs/-/babel-plugin-transform-es2015-modules-systemjs-6.22.0.tgz#810cd0cd025a08383b84236b92c6e31f88e644ad"
@@ -892,6 +1323,14 @@ babel-plugin-transform-es2015-modules-systemjs@^6.22.0:
babel-runtime "^6.22.0"
babel-template "^6.22.0"
+babel-plugin-transform-es2015-modules-systemjs@^6.24.1:
+ version "6.24.1"
+ resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-systemjs/-/babel-plugin-transform-es2015-modules-systemjs-6.24.1.tgz#ff89a142b9119a906195f5f106ecf305d9407d23"
+ dependencies:
+ babel-helper-hoist-variables "^6.24.1"
+ babel-runtime "^6.22.0"
+ babel-template "^6.24.1"
+
babel-plugin-transform-es2015-modules-umd@^6.22.0:
version "6.22.0"
resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-umd/-/babel-plugin-transform-es2015-modules-umd-6.22.0.tgz#60d0ba3bd23258719c64391d9bf492d648dc0fae"
@@ -900,6 +1339,14 @@ babel-plugin-transform-es2015-modules-umd@^6.22.0:
babel-runtime "^6.22.0"
babel-template "^6.22.0"
+babel-plugin-transform-es2015-modules-umd@^6.24.1:
+ version "6.24.1"
+ resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-umd/-/babel-plugin-transform-es2015-modules-umd-6.24.1.tgz#ac997e6285cd18ed6176adb607d602344ad38468"
+ dependencies:
+ babel-plugin-transform-es2015-modules-amd "^6.24.1"
+ babel-runtime "^6.22.0"
+ babel-template "^6.24.1"
+
babel-plugin-transform-es2015-object-super@^6.22.0:
version "6.22.0"
resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-object-super/-/babel-plugin-transform-es2015-object-super-6.22.0.tgz#daa60e114a042ea769dd53fe528fc82311eb98fc"
@@ -907,6 +1354,13 @@ babel-plugin-transform-es2015-object-super@^6.22.0:
babel-helper-replace-supers "^6.22.0"
babel-runtime "^6.22.0"
+babel-plugin-transform-es2015-object-super@^6.24.1:
+ version "6.24.1"
+ resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-object-super/-/babel-plugin-transform-es2015-object-super-6.24.1.tgz#24cef69ae21cb83a7f8603dad021f572eb278f8d"
+ dependencies:
+ babel-helper-replace-supers "^6.24.1"
+ babel-runtime "^6.22.0"
+
babel-plugin-transform-es2015-parameters@^6.22.0:
version "6.22.0"
resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-parameters/-/babel-plugin-transform-es2015-parameters-6.22.0.tgz#57076069232019094f27da8c68bb7162fe208dbb"
@@ -918,6 +1372,17 @@ babel-plugin-transform-es2015-parameters@^6.22.0:
babel-traverse "^6.22.0"
babel-types "^6.22.0"
+babel-plugin-transform-es2015-parameters@^6.24.1:
+ version "6.24.1"
+ resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-parameters/-/babel-plugin-transform-es2015-parameters-6.24.1.tgz#57ac351ab49caf14a97cd13b09f66fdf0a625f2b"
+ dependencies:
+ babel-helper-call-delegate "^6.24.1"
+ babel-helper-get-function-arity "^6.24.1"
+ babel-runtime "^6.22.0"
+ babel-template "^6.24.1"
+ babel-traverse "^6.24.1"
+ babel-types "^6.24.1"
+
babel-plugin-transform-es2015-shorthand-properties@^6.22.0:
version "6.22.0"
resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-shorthand-properties/-/babel-plugin-transform-es2015-shorthand-properties-6.22.0.tgz#8ba776e0affaa60bff21e921403b8a652a2ff723"
@@ -925,6 +1390,13 @@ babel-plugin-transform-es2015-shorthand-properties@^6.22.0:
babel-runtime "^6.22.0"
babel-types "^6.22.0"
+babel-plugin-transform-es2015-shorthand-properties@^6.24.1:
+ version "6.24.1"
+ resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-shorthand-properties/-/babel-plugin-transform-es2015-shorthand-properties-6.24.1.tgz#24f875d6721c87661bbd99a4622e51f14de38aa0"
+ dependencies:
+ babel-runtime "^6.22.0"
+ babel-types "^6.24.1"
+
babel-plugin-transform-es2015-spread@^6.22.0:
version "6.22.0"
resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-spread/-/babel-plugin-transform-es2015-spread-6.22.0.tgz#d6d68a99f89aedc4536c81a542e8dd9f1746f8d1"
@@ -939,6 +1411,14 @@ babel-plugin-transform-es2015-sticky-regex@^6.22.0:
babel-runtime "^6.22.0"
babel-types "^6.22.0"
+babel-plugin-transform-es2015-sticky-regex@^6.24.1:
+ version "6.24.1"
+ resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-sticky-regex/-/babel-plugin-transform-es2015-sticky-regex-6.24.1.tgz#00c1cdb1aca71112cdf0cf6126c2ed6b457ccdbc"
+ dependencies:
+ babel-helper-regex "^6.24.1"
+ babel-runtime "^6.22.0"
+ babel-types "^6.24.1"
+
babel-plugin-transform-es2015-template-literals@^6.22.0:
version "6.22.0"
resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-template-literals/-/babel-plugin-transform-es2015-template-literals-6.22.0.tgz#a84b3450f7e9f8f1f6839d6d687da84bb1236d8d"
@@ -959,6 +1439,14 @@ babel-plugin-transform-es2015-unicode-regex@^6.22.0:
babel-runtime "^6.22.0"
regexpu-core "^2.0.0"
+babel-plugin-transform-es2015-unicode-regex@^6.24.1:
+ version "6.24.1"
+ resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-unicode-regex/-/babel-plugin-transform-es2015-unicode-regex-6.24.1.tgz#d38b12f42ea7323f729387f18a7c5ae1faeb35e9"
+ dependencies:
+ babel-helper-regex "^6.24.1"
+ babel-runtime "^6.22.0"
+ regexpu-core "^2.0.0"
+
babel-plugin-transform-exponentiation-operator@^6.22.0:
version "6.22.0"
resolved "https://registry.yarnpkg.com/babel-plugin-transform-exponentiation-operator/-/babel-plugin-transform-exponentiation-operator-6.22.0.tgz#d57c8335281918e54ef053118ce6eb108468084d"
@@ -967,7 +1455,22 @@ babel-plugin-transform-exponentiation-operator@^6.22.0:
babel-plugin-syntax-exponentiation-operator "^6.8.0"
babel-runtime "^6.22.0"
-babel-plugin-transform-flow-strip-types@^6.22.0:
+babel-plugin-transform-exponentiation-operator@^6.24.1:
+ version "6.24.1"
+ resolved "https://registry.yarnpkg.com/babel-plugin-transform-exponentiation-operator/-/babel-plugin-transform-exponentiation-operator-6.24.1.tgz#2ab0c9c7f3098fa48907772bb813fe41e8de3a0e"
+ dependencies:
+ babel-helper-builder-binary-assignment-operator-visitor "^6.24.1"
+ babel-plugin-syntax-exponentiation-operator "^6.8.0"
+ babel-runtime "^6.22.0"
+
+babel-plugin-transform-export-extensions@^6.22.0:
+ version "6.22.0"
+ resolved "https://registry.yarnpkg.com/babel-plugin-transform-export-extensions/-/babel-plugin-transform-export-extensions-6.22.0.tgz#53738b47e75e8218589eea946cbbd39109bbe653"
+ dependencies:
+ babel-plugin-syntax-export-extensions "^6.8.0"
+ babel-runtime "^6.22.0"
+
+babel-plugin-transform-flow-strip-types@^6.22.0, babel-plugin-transform-flow-strip-types@^6.8.0:
version "6.22.0"
resolved "https://registry.yarnpkg.com/babel-plugin-transform-flow-strip-types/-/babel-plugin-transform-flow-strip-types-6.22.0.tgz#84cb672935d43714fdc32bce84568d87441cf7cf"
dependencies:
@@ -1046,6 +1549,12 @@ babel-plugin-transform-regenerator@^6.22.0:
dependencies:
regenerator-transform "0.9.8"
+babel-plugin-transform-regenerator@^6.24.1:
+ version "6.26.0"
+ resolved "https://registry.yarnpkg.com/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.26.0.tgz#e0703696fbde27f0a3efcacf8b4dca2f7b3a8f2f"
+ dependencies:
+ regenerator-transform "^0.10.0"
+
babel-plugin-transform-strict-mode@^6.22.0:
version "6.22.0"
resolved "https://registry.yarnpkg.com/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.22.0.tgz#e008df01340fdc87e959da65991b7e05970c8c7c"
@@ -1053,6 +1562,23 @@ babel-plugin-transform-strict-mode@^6.22.0:
babel-runtime "^6.22.0"
babel-types "^6.22.0"
+babel-plugin-transform-strict-mode@^6.24.1:
+ version "6.24.1"
+ resolved "https://registry.yarnpkg.com/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.24.1.tgz#d5faf7aa578a65bbe591cf5edae04a0c67020758"
+ dependencies:
+ babel-runtime "^6.22.0"
+ babel-types "^6.24.1"
+
+babel-plugin-undeclared-variables-check@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/babel-plugin-undeclared-variables-check/-/babel-plugin-undeclared-variables-check-1.0.2.tgz#5cf1aa539d813ff64e99641290af620965f65dee"
+ dependencies:
+ leven "^1.0.2"
+
+babel-plugin-undefined-to-void@^1.1.6:
+ version "1.1.6"
+ resolved "https://registry.yarnpkg.com/babel-plugin-undefined-to-void/-/babel-plugin-undefined-to-void-1.1.6.tgz#7f578ef8b78dfae6003385d8417a61eda06e2f81"
+
babel-polyfill@^6.23.0:
version "6.23.0"
resolved "https://registry.yarnpkg.com/babel-polyfill/-/babel-polyfill-6.23.0.tgz#8364ca62df8eafb830499f699177466c3b03499d"
@@ -1090,6 +1616,42 @@ babel-preset-es2015@6:
babel-plugin-transform-es2015-unicode-regex "^6.22.0"
babel-plugin-transform-regenerator "^6.22.0"
+babel-preset-es2015@^6.9.0:
+ version "6.24.1"
+ resolved "https://registry.yarnpkg.com/babel-preset-es2015/-/babel-preset-es2015-6.24.1.tgz#d44050d6bc2c9feea702aaf38d727a0210538939"
+ dependencies:
+ babel-plugin-check-es2015-constants "^6.22.0"
+ babel-plugin-transform-es2015-arrow-functions "^6.22.0"
+ babel-plugin-transform-es2015-block-scoped-functions "^6.22.0"
+ babel-plugin-transform-es2015-block-scoping "^6.24.1"
+ babel-plugin-transform-es2015-classes "^6.24.1"
+ babel-plugin-transform-es2015-computed-properties "^6.24.1"
+ babel-plugin-transform-es2015-destructuring "^6.22.0"
+ babel-plugin-transform-es2015-duplicate-keys "^6.24.1"
+ babel-plugin-transform-es2015-for-of "^6.22.0"
+ babel-plugin-transform-es2015-function-name "^6.24.1"
+ babel-plugin-transform-es2015-literals "^6.22.0"
+ babel-plugin-transform-es2015-modules-amd "^6.24.1"
+ babel-plugin-transform-es2015-modules-commonjs "^6.24.1"
+ babel-plugin-transform-es2015-modules-systemjs "^6.24.1"
+ babel-plugin-transform-es2015-modules-umd "^6.24.1"
+ babel-plugin-transform-es2015-object-super "^6.24.1"
+ babel-plugin-transform-es2015-parameters "^6.24.1"
+ babel-plugin-transform-es2015-shorthand-properties "^6.24.1"
+ babel-plugin-transform-es2015-spread "^6.22.0"
+ babel-plugin-transform-es2015-sticky-regex "^6.24.1"
+ babel-plugin-transform-es2015-template-literals "^6.22.0"
+ babel-plugin-transform-es2015-typeof-symbol "^6.22.0"
+ babel-plugin-transform-es2015-unicode-regex "^6.24.1"
+ babel-plugin-transform-regenerator "^6.24.1"
+
+babel-preset-jest@^21.2.0:
+ version "21.2.0"
+ resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-21.2.0.tgz#ff9d2bce08abd98e8a36d9a8a5189b9173b85638"
+ dependencies:
+ babel-plugin-jest-hoist "^21.2.0"
+ babel-plugin-syntax-object-rest-spread "^6.13.0"
+
babel-preset-react-optimize@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/babel-preset-react-optimize/-/babel-preset-react-optimize-1.0.1.tgz#c23509fba7cbc76d7de7050e7d26bcd22bc304e8"
@@ -1111,6 +1673,14 @@ babel-preset-react@6:
babel-plugin-transform-react-jsx-self "^6.22.0"
babel-plugin-transform-react-jsx-source "^6.22.0"
+babel-preset-stage-1@^6.5.0:
+ version "6.24.1"
+ resolved "https://registry.yarnpkg.com/babel-preset-stage-1/-/babel-preset-stage-1-6.24.1.tgz#7692cd7dcd6849907e6ae4a0a85589cfb9e2bfb0"
+ dependencies:
+ babel-plugin-transform-class-constructor-call "^6.24.1"
+ babel-plugin-transform-export-extensions "^6.22.0"
+ babel-preset-stage-2 "^6.24.1"
+
babel-preset-stage-2@6:
version "6.22.0"
resolved "https://registry.yarnpkg.com/babel-preset-stage-2/-/babel-preset-stage-2-6.22.0.tgz#ccd565f19c245cade394b21216df704a73b27c07"
@@ -1120,6 +1690,15 @@ babel-preset-stage-2@6:
babel-plugin-transform-decorators "^6.22.0"
babel-preset-stage-3 "^6.22.0"
+babel-preset-stage-2@^6.24.1:
+ version "6.24.1"
+ resolved "https://registry.yarnpkg.com/babel-preset-stage-2/-/babel-preset-stage-2-6.24.1.tgz#d9e2960fb3d71187f0e64eec62bc07767219bdc1"
+ dependencies:
+ babel-plugin-syntax-dynamic-import "^6.18.0"
+ babel-plugin-transform-class-properties "^6.24.1"
+ babel-plugin-transform-decorators "^6.24.1"
+ babel-preset-stage-3 "^6.24.1"
+
babel-preset-stage-3@^6.22.0:
version "6.22.0"
resolved "https://registry.yarnpkg.com/babel-preset-stage-3/-/babel-preset-stage-3-6.22.0.tgz#a4e92bbace7456fafdf651d7a7657ee0bbca9c2e"
@@ -1130,6 +1709,16 @@ babel-preset-stage-3@^6.22.0:
babel-plugin-transform-exponentiation-operator "^6.22.0"
babel-plugin-transform-object-rest-spread "^6.22.0"
+babel-preset-stage-3@^6.24.1:
+ version "6.24.1"
+ resolved "https://registry.yarnpkg.com/babel-preset-stage-3/-/babel-preset-stage-3-6.24.1.tgz#836ada0a9e7a7fa37cb138fb9326f87934a48395"
+ dependencies:
+ babel-plugin-syntax-trailing-function-commas "^6.22.0"
+ babel-plugin-transform-async-generator-functions "^6.24.1"
+ babel-plugin-transform-async-to-generator "^6.24.1"
+ babel-plugin-transform-exponentiation-operator "^6.24.1"
+ babel-plugin-transform-object-rest-spread "^6.22.0"
+
babel-register@^6.22.0:
version "6.22.0"
resolved "https://registry.yarnpkg.com/babel-register/-/babel-register-6.22.0.tgz#a61dd83975f9ca4a9e7d6eff3059494cd5ea4c63"
@@ -1142,6 +1731,18 @@ babel-register@^6.22.0:
mkdirp "^0.5.1"
source-map-support "^0.4.2"
+babel-register@^6.26.0, babel-register@^6.9.0:
+ version "6.26.0"
+ resolved "https://registry.yarnpkg.com/babel-register/-/babel-register-6.26.0.tgz#6ed021173e2fcb486d7acb45c6009a856f647071"
+ dependencies:
+ babel-core "^6.26.0"
+ babel-runtime "^6.26.0"
+ core-js "^2.5.0"
+ home-or-tmp "^2.0.0"
+ lodash "^4.17.4"
+ mkdirp "^0.5.1"
+ source-map-support "^0.4.15"
+
babel-runtime@^6.18.0, babel-runtime@^6.20.0, babel-runtime@^6.22.0, babel-runtime@^6.23.0:
version "6.23.0"
resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.23.0.tgz#0a9489f144de70efb3ce4300accdb329e2fc543b"
@@ -1149,6 +1750,23 @@ babel-runtime@^6.18.0, babel-runtime@^6.20.0, babel-runtime@^6.22.0, babel-runti
core-js "^2.4.0"
regenerator-runtime "^0.10.0"
+babel-runtime@^6.26.0:
+ version "6.26.0"
+ resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe"
+ dependencies:
+ core-js "^2.4.0"
+ regenerator-runtime "^0.11.0"
+
+babel-template@^6.16.0, babel-template@^6.24.1, babel-template@^6.26.0:
+ version "6.26.0"
+ resolved "https://registry.yarnpkg.com/babel-template/-/babel-template-6.26.0.tgz#de03e2d16396b069f46dd9fff8521fb1a0e35e02"
+ dependencies:
+ babel-runtime "^6.26.0"
+ babel-traverse "^6.26.0"
+ babel-types "^6.26.0"
+ babylon "^6.18.0"
+ lodash "^4.17.4"
+
babel-template@^6.22.0:
version "6.22.0"
resolved "https://registry.yarnpkg.com/babel-template/-/babel-template-6.22.0.tgz#403d110905a4626b317a2a1fcb8f3b73204b2edb"
@@ -1169,6 +1787,20 @@ babel-template@^6.23.0:
babylon "^6.11.0"
lodash "^4.2.0"
+babel-traverse@^6.18.0, babel-traverse@^6.24.1, babel-traverse@^6.26.0:
+ version "6.26.0"
+ resolved "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-6.26.0.tgz#46a9cbd7edcc62c8e5c064e2d2d8d0f4035766ee"
+ dependencies:
+ babel-code-frame "^6.26.0"
+ babel-messages "^6.23.0"
+ babel-runtime "^6.26.0"
+ babel-types "^6.26.0"
+ babylon "^6.18.0"
+ debug "^2.6.8"
+ globals "^9.18.0"
+ invariant "^2.2.2"
+ lodash "^4.17.4"
+
babel-traverse@^6.22.0, babel-traverse@^6.22.1:
version "6.22.1"
resolved "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-6.22.1.tgz#3b95cd6b7427d6f1f757704908f2fc9748a5f59f"
@@ -1197,6 +1829,15 @@ babel-traverse@^6.23.0:
invariant "^2.2.0"
lodash "^4.2.0"
+babel-types@^6.18.0, babel-types@^6.24.1, babel-types@^6.26.0:
+ version "6.26.0"
+ resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.26.0.tgz#a3b073f94ab49eb6fa55cd65227a334380632497"
+ dependencies:
+ babel-runtime "^6.26.0"
+ esutils "^2.0.2"
+ lodash "^4.17.4"
+ to-fast-properties "^1.0.3"
+
babel-types@^6.19.0, babel-types@^6.22.0:
version "6.22.0"
resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.22.0.tgz#2a447e8d0ea25d2512409e4175479fd78cc8b1db"
@@ -1224,14 +1865,26 @@ babel-types@^6.6.0:
lodash "^4.2.0"
to-fast-properties "^1.0.1"
+babylon@^5.8.38:
+ version "5.8.38"
+ resolved "https://registry.yarnpkg.com/babylon/-/babylon-5.8.38.tgz#ec9b120b11bf6ccd4173a18bf217e60b79859ffd"
+
babylon@^6.11.0, babylon@^6.15.0:
version "6.15.0"
resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.15.0.tgz#ba65cfa1a80e1759b0e89fb562e27dccae70348e"
+babylon@^6.17.3, babylon@^6.18.0:
+ version "6.18.0"
+ resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.18.0.tgz#af2f3b88fa6f5c1e4c634d1a0f8eac4f55b395e3"
+
balanced-match@^0.4.1, balanced-match@^0.4.2:
version "0.4.2"
resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-0.4.2.tgz#cb3f3e3c732dc0f01ee70b403f302e61d7709838"
+balanced-match@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767"
+
base64-js@^1.0.2, base64-js@^1.2.0:
version "1.2.0"
resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.2.0.tgz#a39992d723584811982be5e290bb6a53d86700f1"
@@ -1260,7 +1913,7 @@ block-stream@*:
dependencies:
inherits "~2.0.0"
-bluebird@^2.10.2:
+bluebird@^2.10.2, bluebird@^2.9.33:
version "2.11.0"
resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-2.11.0.tgz#534b9033c022c9579c56ba3b3e5a5caafbb650e1"
@@ -1308,6 +1961,13 @@ brace-expansion@^1.0.0:
balanced-match "^0.4.1"
concat-map "0.0.1"
+brace-expansion@^1.1.7:
+ version "1.1.8"
+ resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.8.tgz#c07b211c7c952ec1f8efd51a77ef0d1d3990a292"
+ dependencies:
+ balanced-match "^1.0.0"
+ concat-map "0.0.1"
+
braces@^1.8.2:
version "1.8.5"
resolved "https://registry.yarnpkg.com/braces/-/braces-1.8.5.tgz#ba77962e12dff969d6b76711e914b737857bf6a7"
@@ -1316,6 +1976,10 @@ braces@^1.8.2:
preserve "^0.2.0"
repeat-element "^1.1.2"
+breakable@~1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/breakable/-/breakable-1.0.0.tgz#784a797915a38ead27bad456b5572cb4bbaa78c1"
+
brorand@^1.0.1:
version "1.0.7"
resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.0.7.tgz#6677fa5e4901bdbf9c9ec2a748e28dca407a9bfc"
@@ -1428,7 +2092,7 @@ camelcase-keys@^2.0.0:
camelcase "^2.0.0"
map-obj "^1.0.0"
-camelcase@^1.0.2:
+camelcase@^1.0.2, camelcase@^1.2.1:
version "1.2.1"
resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-1.2.1.tgz#9bb5304d2e0b56698b2c758b08a3eaa9daa58a39"
@@ -1489,7 +2153,7 @@ chain-function@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/chain-function/-/chain-function-1.0.0.tgz#0d4ab37e7e18ead0bdc47b920764118ce58733dc"
-chalk@^1.1.0, chalk@^1.1.1, chalk@^1.1.3:
+chalk@^1.0.0, chalk@^1.1.0, chalk@^1.1.1, chalk@^1.1.3:
version "1.1.3"
resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98"
dependencies:
@@ -1499,6 +2163,14 @@ chalk@^1.1.0, chalk@^1.1.1, chalk@^1.1.3:
strip-ansi "^3.0.0"
supports-color "^2.0.0"
+chalk@~0.4.0:
+ version "0.4.0"
+ resolved "https://registry.yarnpkg.com/chalk/-/chalk-0.4.0.tgz#5199a3ddcd0c1efe23bc08c1b027b06176e0c64f"
+ dependencies:
+ ansi-styles "~1.0.0"
+ has-color "~0.1.0"
+ strip-ansi "~0.1.0"
+
change-emitter@^0.1.2:
version "0.1.2"
resolved "https://registry.yarnpkg.com/change-emitter/-/change-emitter-0.1.2.tgz#6b88ca4d5d864e516f913421b11899a860aee8db"
@@ -1640,7 +2312,7 @@ colormin@^1.0.5:
css-color-names "0.0.4"
has "^1.0.1"
-colors@~1.1.2:
+colors@^1.1.2, colors@~1.1.2:
version "1.1.2"
resolved "https://registry.yarnpkg.com/colors/-/colors-1.1.2.tgz#168a4701756b6a7f51a12ce0c97bfa28c084ed63"
@@ -1656,10 +2328,28 @@ commander@2.9.0, commander@2.9.x, commander@^2.9.0:
dependencies:
graceful-readlink ">= 1.0.0"
+commander@^2.5.0:
+ version "2.11.0"
+ resolved "https://registry.yarnpkg.com/commander/-/commander-2.11.0.tgz#157152fd1e7a6c8d98a5b715cf376df928004563"
+
commondir@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b"
+commoner@~0.10.3:
+ version "0.10.8"
+ resolved "https://registry.yarnpkg.com/commoner/-/commoner-0.10.8.tgz#34fc3672cd24393e8bb47e70caa0293811f4f2c5"
+ dependencies:
+ commander "^2.5.0"
+ detective "^4.3.1"
+ glob "^5.0.15"
+ graceful-fs "^4.1.2"
+ iconv-lite "^0.4.5"
+ mkdirp "^0.5.0"
+ private "^0.1.6"
+ q "^1.1.2"
+ recast "^0.11.17"
+
component-emitter@^1.2.0:
version "1.2.1"
resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.2.1.tgz#137918d6d78283f7df7a6b7c5a63e140e69425e6"
@@ -1719,6 +2409,10 @@ convert-source-map@^1.1.0:
version "1.3.0"
resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.3.0.tgz#e9f3e9c6e2728efc2676696a70eb382f73106a67"
+convert-source-map@^1.5.0:
+ version "1.5.0"
+ resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.5.0.tgz#9acd70851c6d5dfdd93d9282e5edf94a03ff46b5"
+
cookie-signature@1.0.6:
version "1.0.6"
resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c"
@@ -1752,6 +2446,10 @@ core-js@^2.4.0:
version "2.4.1"
resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.4.1.tgz#4de911e667b0eae9124e34254b53aea6fc618d3e"
+core-js@^2.4.1, core-js@^2.5.0:
+ version "2.5.1"
+ resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.5.1.tgz#ae6874dc66937789b80754ff5428df66819ca50b"
+
core-util-is@~1.0.0:
version "1.0.2"
resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7"
@@ -1975,6 +2673,12 @@ debug@^2.1.1, debug@^2.1.3, debug@^2.2.0:
dependencies:
ms "0.7.2"
+debug@^2.6.8:
+ version "2.6.9"
+ resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f"
+ dependencies:
+ ms "2.0.0"
+
debug@~2.2.0:
version "2.2.0"
resolved "https://registry.yarnpkg.com/debug/-/debug-2.2.0.tgz#f87057e995b1a1f6ae6a4960664137bc56f039da"
@@ -2018,6 +2722,21 @@ defined@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/defined/-/defined-1.0.0.tgz#c98d9bcef75674188e110969151199e39b1fa693"
+defs@~1.1.0:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/defs/-/defs-1.1.1.tgz#b22609f2c7a11ba7a3db116805c139b1caffa9d2"
+ dependencies:
+ alter "~0.2.0"
+ ast-traverse "~0.1.1"
+ breakable "~1.0.0"
+ esprima-fb "~15001.1001.0-dev-harmony-fb"
+ simple-fmt "~0.1.0"
+ simple-is "~0.2.0"
+ stringmap "~0.2.2"
+ stringset "~0.2.1"
+ tryor "~0.1.2"
+ yargs "~3.27.0"
+
del@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/del/-/del-3.0.0.tgz#53ecf699ffcbcb39637691ab13baf160819766e5"
@@ -2052,12 +2771,27 @@ destroy@~1.0.4:
version "1.0.4"
resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80"
+detect-indent@^3.0.0:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-3.0.1.tgz#9dc5e5ddbceef8325764b9451b02bc6d54084f75"
+ dependencies:
+ get-stdin "^4.0.1"
+ minimist "^1.1.0"
+ repeating "^1.1.0"
+
detect-indent@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-4.0.0.tgz#f76d064352cdf43a1cb6ce619c4ee3a9475de208"
dependencies:
repeating "^2.0.0"
+detective@^4.3.1:
+ version "4.5.0"
+ resolved "https://registry.yarnpkg.com/detective/-/detective-4.5.0.tgz#6e5a8c6b26e6c7a254b1c6b6d7490d98ec91edd1"
+ dependencies:
+ acorn "^4.0.3"
+ defined "^1.0.0"
+
diff@3.2.0:
version "3.2.0"
resolved "https://registry.yarnpkg.com/diff/-/diff-3.2.0.tgz#c9ce393a4b7cbd0b058a725c93df299027868ff9"
@@ -2108,6 +2842,10 @@ dom-serializer@0, dom-serializer@~0.1.0:
domelementtype "~1.1.1"
entities "~1.1.1"
+dom-walk@^0.1.0:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/dom-walk/-/dom-walk-0.1.1.tgz#672226dc74c8f799ad35307df936aba11acd6018"
+
domain-browser@^1.1.1:
version "1.1.7"
resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.1.7.tgz#867aa4b093faa05f1de08c06f4d7b21fdf8698bc"
@@ -2335,10 +3073,22 @@ escope@^3.6.0:
esrecurse "^4.1.0"
estraverse "^4.1.1"
+esprima-fb@~15001.1001.0-dev-harmony-fb:
+ version "15001.1001.0-dev-harmony-fb"
+ resolved "https://registry.yarnpkg.com/esprima-fb/-/esprima-fb-15001.1001.0-dev-harmony-fb.tgz#43beb57ec26e8cf237d3dd8b33e42533577f2659"
+
esprima@^2.6.0, esprima@^2.7.1:
version "2.7.3"
resolved "https://registry.yarnpkg.com/esprima/-/esprima-2.7.3.tgz#96e3b70d5779f6ad49cd032673d1c312767ba581"
+esprima@~3.1.0:
+ version "3.1.3"
+ resolved "https://registry.yarnpkg.com/esprima/-/esprima-3.1.3.tgz#fdca51cee6133895e3c88d535ce49dbff62a4633"
+
+esprima@~4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.0.tgz#4499eddcd1110e0b218bacf2fa7f7f59f55ca804"
+
esrecurse@^4.1.0:
version "4.2.0"
resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.2.0.tgz#fa9568d98d3823f9a41d91e902dcab9ea6e5b163"
@@ -2492,6 +3242,18 @@ fbjs@^0.8.1, fbjs@^0.8.4, fbjs@^0.8.6, fbjs@^0.8.9:
setimmediate "^1.0.5"
ua-parser-js "^0.7.9"
+fbjs@^0.8.16:
+ version "0.8.16"
+ resolved "https://registry.yarnpkg.com/fbjs/-/fbjs-0.8.16.tgz#5e67432f550dc41b572bf55847b8aca64e5337db"
+ dependencies:
+ core-js "^1.0.0"
+ isomorphic-fetch "^2.1.1"
+ loose-envify "^1.0.0"
+ object-assign "^4.1.0"
+ promise "^7.1.1"
+ setimmediate "^1.0.5"
+ ua-parser-js "^0.7.9"
+
file-loader@^0.11.2:
version "0.11.2"
resolved "https://registry.yarnpkg.com/file-loader/-/file-loader-0.11.2.tgz#4ff1df28af38719a6098093b88c82c71d1794a34"
@@ -2547,6 +3309,10 @@ flatten@^1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/flatten/-/flatten-1.0.2.tgz#dae46a9d78fbe25292258cc1e780a41d95c03782"
+flow-parser@^0.*:
+ version "0.57.2"
+ resolved "https://registry.yarnpkg.com/flow-parser/-/flow-parser-0.57.2.tgz#5e6ccf80a6802c1a56b4c18c5544a64fbf621d13"
+
focus-trap@^2.3.0:
version "2.3.0"
resolved "https://registry.yarnpkg.com/focus-trap/-/focus-trap-2.3.0.tgz#07c91964867d346315f4f5f8df88bf96455316e2"
@@ -2617,6 +3383,10 @@ fs-extra@^0.26.4:
path-is-absolute "^1.0.0"
rimraf "^2.2.8"
+fs-readdir-recursive@^0.1.0:
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/fs-readdir-recursive/-/fs-readdir-recursive-0.1.2.tgz#315b4fb8c1ca5b8c47defef319d073dad3568059"
+
fs.realpath@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"
@@ -2728,6 +3498,16 @@ glob@7.1.1, glob@^7.0.0, glob@^7.0.3, glob@^7.0.5, glob@~7.1.1:
once "^1.3.0"
path-is-absolute "^1.0.0"
+glob@^5.0.15:
+ version "5.0.15"
+ resolved "https://registry.yarnpkg.com/glob/-/glob-5.0.15.tgz#1bc936b9e02f4a603fcc222ecf7633d30b8b93b1"
+ dependencies:
+ inflight "^1.0.4"
+ inherits "2"
+ minimatch "2 || 3"
+ once "^1.3.0"
+ path-is-absolute "^1.0.0"
+
glob@^6.0.4:
version "6.0.4"
resolved "https://registry.yarnpkg.com/glob/-/glob-6.0.4.tgz#0f08860f6a155127b2fadd4f9ce24b1aab6e4d22"
@@ -2738,10 +3518,25 @@ glob@^6.0.4:
once "^1.3.0"
path-is-absolute "^1.0.0"
+global@^4.3.2:
+ version "4.3.2"
+ resolved "https://registry.yarnpkg.com/global/-/global-4.3.2.tgz#e76989268a6c74c38908b1305b10fc0e394e9d0f"
+ dependencies:
+ min-document "^2.19.0"
+ process "~0.5.1"
+
+globals@^6.4.0:
+ version "6.4.1"
+ resolved "https://registry.yarnpkg.com/globals/-/globals-6.4.1.tgz#8498032b3b6d1cc81eebc5f79690d8fe29fabf4f"
+
globals@^9.0.0:
version "9.14.0"
resolved "https://registry.yarnpkg.com/globals/-/globals-9.14.0.tgz#8859936af0038741263053b39d0e76ca241e4034"
+globals@^9.18.0:
+ version "9.18.0"
+ resolved "https://registry.yarnpkg.com/globals/-/globals-9.18.0.tgz#aa3896b3e69b487f17e31ed2143d69a8e30c2d8a"
+
globby@^6.1.0:
version "6.1.0"
resolved "https://registry.yarnpkg.com/globby/-/globby-6.1.0.tgz#f5a6d70e8395e21c858fb0489d64df02424d506c"
@@ -2760,7 +3555,7 @@ globule@^1.0.0:
lodash "~4.16.4"
minimatch "~3.0.2"
-graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.1.9:
+graceful-fs@^4.1.11, graceful-fs@^4.1.2, graceful-fs@^4.1.4, graceful-fs@^4.1.6, graceful-fs@^4.1.9:
version "4.1.11"
resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658"
@@ -2791,6 +3586,10 @@ has-ansi@^2.0.0:
dependencies:
ansi-regex "^2.0.0"
+has-color@~0.1.0:
+ version "0.1.7"
+ resolved "https://registry.yarnpkg.com/has-color/-/has-color-0.1.7.tgz#67144a5260c34fc3cca677d041daf52fe7b78b2f"
+
has-flag@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-1.0.0.tgz#9d9e793165ce017a00f00418c43f942a7b1d11fa"
@@ -2852,9 +3651,16 @@ hoist-non-react-statics@^1.0.0, hoist-non-react-statics@^1.0.3:
version "1.2.0"
resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-1.2.0.tgz#aa448cf0986d55cc40773b17174b7dd066cb7cfb"
-hoist-non-react-statics@^2.2.1:
- version "2.3.0"
- resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-2.3.0.tgz#ede16318c2ff1f9fe3a025396ba06fd4c44608bb"
+hoist-non-react-statics@^2.3.1:
+ version "2.3.1"
+ resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-2.3.1.tgz#343db84c6018c650778898240135a1420ee22ce0"
+
+home-or-tmp@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/home-or-tmp/-/home-or-tmp-1.0.0.tgz#4b9f1e40800c3e50c6c27f781676afcce71f3985"
+ dependencies:
+ os-tmpdir "^1.0.1"
+ user-home "^1.1.1"
home-or-tmp@^2.0.0:
version "2.0.0"
@@ -2982,6 +3788,10 @@ iconv-lite@0.4.13:
version "0.4.13"
resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.13.tgz#1f88aba4ab0b1508e8312acc39345f36e992e2f2"
+iconv-lite@^0.4.5:
+ version "0.4.19"
+ resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.19.tgz#f7468f60135f5e5dad3399c0a81be9a1603a082b"
+
iconv-lite@~0.4.13:
version "0.4.15"
resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.15.tgz#fe265a218ac6a57cfe854927e9d04c19825eddeb"
@@ -3018,6 +3828,10 @@ immutable@^3.7.3:
version "3.8.1"
resolved "https://registry.yarnpkg.com/immutable/-/immutable-3.8.1.tgz#200807f11ab0f72710ea485542de088075f68cd2"
+imurmurhash@^0.1.4:
+ version "0.1.4"
+ resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea"
+
in-publish@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/in-publish/-/in-publish-2.0.0.tgz#e20ff5e3a2afc2690320b6dc552682a9c7fadf51"
@@ -3168,6 +3982,12 @@ is-glob@^3.1.0:
dependencies:
is-extglob "^2.1.0"
+is-integer@^1.0.4:
+ version "1.0.7"
+ resolved "https://registry.yarnpkg.com/is-integer/-/is-integer-1.0.7.tgz#6bde81aacddf78b659b6629d629cadc51a886d5c"
+ dependencies:
+ is-finite "^1.0.0"
+
is-my-json-valid@^2.12.4:
version "2.15.0"
resolved "https://registry.yarnpkg.com/is-my-json-valid/-/is-my-json-valid-2.15.0.tgz#936edda3ca3c211fd98f3b2d3e08da43f7b2915b"
@@ -3290,6 +4110,22 @@ isstream@~0.1.2:
version "0.1.2"
resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a"
+istanbul-lib-coverage@^1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-1.1.1.tgz#73bfb998885299415c93d38a3e9adf784a77a9da"
+
+istanbul-lib-instrument@^1.7.5:
+ version "1.8.0"
+ resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-1.8.0.tgz#66f6c9421cc9ec4704f76f2db084ba9078a2b532"
+ dependencies:
+ babel-generator "^6.18.0"
+ babel-template "^6.16.0"
+ babel-traverse "^6.18.0"
+ babel-types "^6.18.0"
+ babylon "^6.18.0"
+ istanbul-lib-coverage "^1.1.1"
+ semver "^5.3.0"
+
jodid25519@^1.0.0:
version "1.0.2"
resolved "https://registry.yarnpkg.com/jodid25519/-/jodid25519-1.0.2.tgz#06d4912255093419477d425633606e0e90782967"
@@ -3304,10 +4140,18 @@ js-base64@^2.1.9:
version "2.1.9"
resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-2.1.9.tgz#f0e80ae039a4bd654b5f281fc93f04a914a7fcce"
+js-tokens@1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-1.0.1.tgz#cc435a5c8b94ad15acb7983140fc80182c89aeae"
+
js-tokens@^3.0.0:
version "3.0.1"
resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.1.tgz#08e9f132484a2c45a30907e9dc4d5567b7f114d7"
+js-tokens@^3.0.2:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b"
+
js-yaml@~3.7.0:
version "3.7.0"
resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.7.0.tgz#5c967ddd837a9bfdca5f2de84253abe8a1c03b80"
@@ -3319,6 +4163,27 @@ jsbn@^0.1.0, jsbn@~0.1.0:
version "0.1.0"
resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.0.tgz#650987da0dd74f4ebf5a11377a2aa2d273e97dfd"
+jscodeshift@^0.3.32:
+ version "0.3.32"
+ resolved "https://registry.yarnpkg.com/jscodeshift/-/jscodeshift-0.3.32.tgz#dece5eb602f16340d8d954c7f96ac907c502eabb"
+ dependencies:
+ async "^1.5.0"
+ babel-core "^5"
+ babel-plugin-transform-flow-strip-types "^6.8.0"
+ babel-preset-es2015 "^6.9.0"
+ babel-preset-stage-1 "^6.5.0"
+ babel-register "^6.9.0"
+ babylon "^6.17.3"
+ colors "^1.1.2"
+ flow-parser "^0.*"
+ lodash "^4.13.1"
+ micromatch "^2.3.7"
+ node-dir "0.1.8"
+ nomnom "^1.8.1"
+ recast "^0.12.5"
+ temp "^0.8.1"
+ write-file-atomic "^1.2.0"
+
jsdom@^11.2.0:
version "11.2.0"
resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-11.2.0.tgz#4f6b8736af3357c3af7227a3b54a5bda1c513fd6"
@@ -3385,6 +4250,10 @@ json3@3.3.2, json3@^3.3.2:
version "3.3.2"
resolved "https://registry.yarnpkg.com/json3/-/json3-3.3.2.tgz#3c0434743df93e2f5c42aee7b19bcb483575f4e1"
+json5@^0.4.0:
+ version "0.4.0"
+ resolved "https://registry.yarnpkg.com/json5/-/json5-0.4.0.tgz#054352e4c4c80c86c0923877d449de176a732c8d"
+
json5@^0.5.0, json5@^0.5.1:
version "0.5.1"
resolved "https://registry.yarnpkg.com/json5/-/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821"
@@ -3461,6 +4330,10 @@ lcid@^1.0.0:
dependencies:
invert-kv "^1.0.0"
+leven@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/leven/-/leven-1.0.2.tgz#9144b6eebca5f1d0680169f1a6770dcea60b75c3"
+
levn@~0.3.0:
version "0.3.0"
resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee"
@@ -3649,6 +4522,10 @@ lodash.uniq@^4.3.0:
version "4.5.0"
resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773"
+lodash@^3.10.0, lodash@^3.9.3:
+ version "3.10.1"
+ resolved "https://registry.yarnpkg.com/lodash/-/lodash-3.10.1.tgz#5bf45e8e49ba4189e17d482789dfd15bd140b7b6"
+
lodash@^4.0.0, lodash@^4.13.1, lodash@^4.14.0, lodash@^4.17.2, lodash@^4.17.3, lodash@^4.17.4, lodash@^4.2.0, lodash@^4.2.1, lodash@^4.3.0:
version "4.17.4"
resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.4.tgz#78203a4d1c328ae1d86dca6460e369b57f4055ae"
@@ -3799,7 +4676,7 @@ methods@^1.1.1, methods@~1.1.2:
version "1.1.2"
resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee"
-micromatch@^2.1.5, micromatch@^2.3.11:
+micromatch@^2.1.5, micromatch@^2.3.11, micromatch@^2.3.7:
version "2.3.11"
resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-2.3.11.tgz#86677c97d1720b363431d04d0d15293bd38c1565"
dependencies:
@@ -3838,6 +4715,12 @@ mime@1.3.4, mime@^1.3.4:
version "1.3.4"
resolved "https://registry.yarnpkg.com/mime/-/mime-1.3.4.tgz#115f9e3b6b3daf2959983cb38f149a2d40eb5d53"
+min-document@^2.19.0:
+ version "2.19.0"
+ resolved "https://registry.yarnpkg.com/min-document/-/min-document-2.19.0.tgz#7bd282e3f5842ed295bb748cdd9f1ffa2c824685"
+ dependencies:
+ dom-walk "^0.1.0"
+
minimalistic-assert@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.0.tgz#702be2dda6b37f4836bcb3f5db56641b64a1d3d3"
@@ -3848,11 +4731,23 @@ minimalistic-assert@^1.0.0:
dependencies:
brace-expansion "^1.0.0"
+minimatch@^2.0.3:
+ version "2.0.10"
+ resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-2.0.10.tgz#8d087c39c6b38c001b97fca7ce6d0e1e80afbac7"
+ dependencies:
+ brace-expansion "^1.0.0"
+
+minimatch@^3.0.4:
+ version "3.0.4"
+ resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083"
+ dependencies:
+ brace-expansion "^1.1.7"
+
minimist@0.0.8:
version "0.0.8"
resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d"
-minimist@^1.1.3, minimist@^1.2.0:
+minimist@^1.1.0, minimist@^1.1.3, minimist@^1.2.0:
version "1.2.0"
resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284"
@@ -3941,6 +4836,10 @@ no-case@^2.2.0:
dependencies:
lower-case "^1.1.1"
+node-dir@0.1.8:
+ version "0.1.8"
+ resolved "https://registry.yarnpkg.com/node-dir/-/node-dir-0.1.8.tgz#55fb8deb699070707fb67f91a460f0448294c77d"
+
node-dir@^0.1.10:
version "0.1.17"
resolved "https://registry.yarnpkg.com/node-dir/-/node-dir-0.1.17.tgz#5f5665d93351335caabef8f1c554516cf5f1e4e5"
@@ -4041,6 +4940,13 @@ node-sass@^4.5.3:
sass-graph "^2.1.1"
stdout-stream "^1.4.0"
+nomnom@^1.8.1:
+ version "1.8.1"
+ resolved "https://registry.yarnpkg.com/nomnom/-/nomnom-1.8.1.tgz#2151f722472ba79e50a76fc125bb8c8f2e4dc2a7"
+ dependencies:
+ chalk "~0.4.0"
+ underscore "~1.6.0"
+
"nopt@2 || 3", nopt@~3.0.6:
version "3.0.6"
resolved "https://registry.yarnpkg.com/nopt/-/nopt-3.0.6.tgz#c6465dbf08abcd4db359317f79ac68a646b28ff9"
@@ -4218,6 +5124,14 @@ osenv@0:
os-homedir "^1.0.0"
os-tmpdir "^1.0.0"
+output-file-sync@^1.1.0:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/output-file-sync/-/output-file-sync-1.1.2.tgz#d0a33eefe61a205facb90092e826598d5245ce76"
+ dependencies:
+ graceful-fs "^4.1.4"
+ mkdirp "^0.5.1"
+ object-assign "^4.1.0"
+
p-limit@^1.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.1.0.tgz#b07ff2d9a5d88bec806035895a2bab66a27988bc"
@@ -4285,6 +5199,10 @@ path-browserify@0.0.0:
version "0.0.0"
resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-0.0.0.tgz#a0b870729aae214005b7d5032ec2cbbb0fb4451a"
+path-exists@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-1.0.0.tgz#d5a8998eb71ef37a74c34eb0d9eba6e878eea081"
+
path-exists@^2.0.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b"
@@ -4295,7 +5213,7 @@ path-exists@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515"
-path-is-absolute@^1.0.0:
+path-is-absolute@^1.0.0, path-is-absolute@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"
@@ -4303,6 +5221,10 @@ path-is-inside@^1.0.1:
version "1.0.2"
resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53"
+path-parse@^1.0.5:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.5.tgz#3c1adf871ea9cd6c9431b6ea2bd74a0ff055c4c1"
+
path-to-regexp@0.1.7:
version "0.1.7"
resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c"
@@ -4632,6 +5554,10 @@ private@^0.1.6:
version "0.1.7"
resolved "https://registry.yarnpkg.com/private/-/private-0.1.7.tgz#68ce5e8a1ef0a23bb570cc28537b5332aba63ef1"
+private@^0.1.7, private@~0.1.5:
+ version "0.1.8"
+ resolved "https://registry.yarnpkg.com/private/-/private-0.1.8.tgz#2381edb3689f7a53d653190060fcf822d2f368ff"
+
process-nextick-args@~1.0.6:
version "1.0.7"
resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-1.0.7.tgz#150e20b756590ad3f91093f25a4f2ad8bff30ba3"
@@ -4640,6 +5566,10 @@ process@^0.11.0:
version "0.11.9"
resolved "https://registry.yarnpkg.com/process/-/process-0.11.9.tgz#7bd5ad21aa6253e7da8682264f1e11d11c0318c1"
+process@~0.5.1:
+ version "0.5.2"
+ resolved "https://registry.yarnpkg.com/process/-/process-0.5.2.tgz#1638d8a8e34c2f440a91db95ab9aeb677fc185cf"
+
promise@^7.0.3, promise@^7.1.1:
version "7.1.1"
resolved "https://registry.yarnpkg.com/promise/-/promise-7.1.1.tgz#489654c692616b8aa55b0724fa809bb7db49c5bf"
@@ -4653,6 +5583,14 @@ prop-types@^15.5.10, prop-types@^15.5.4, prop-types@^15.5.6, prop-types@^15.5.7,
fbjs "^0.8.9"
loose-envify "^1.3.1"
+prop-types@^15.6.0:
+ version "15.6.0"
+ resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.6.0.tgz#ceaf083022fc46b4a35f69e13ef75aed0d639856"
+ dependencies:
+ fbjs "^0.8.16"
+ loose-envify "^1.3.1"
+ object-assign "^4.1.1"
+
proxy-addr@~1.1.3:
version "1.1.3"
resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-1.1.3.tgz#dc97502f5722e888467b3fa2297a7b1ff47df074"
@@ -4919,6 +5857,43 @@ readdirp@^2.0.0:
readable-stream "^2.0.2"
set-immediate-shim "^1.0.1"
+recast@0.10.33:
+ version "0.10.33"
+ resolved "https://registry.yarnpkg.com/recast/-/recast-0.10.33.tgz#942808f7aa016f1fa7142c461d7e5704aaa8d697"
+ dependencies:
+ ast-types "0.8.12"
+ esprima-fb "~15001.1001.0-dev-harmony-fb"
+ private "~0.1.5"
+ source-map "~0.5.0"
+
+recast@^0.10.10:
+ version "0.10.43"
+ resolved "https://registry.yarnpkg.com/recast/-/recast-0.10.43.tgz#b95d50f6d60761a5f6252e15d80678168491ce7f"
+ dependencies:
+ ast-types "0.8.15"
+ esprima-fb "~15001.1001.0-dev-harmony-fb"
+ private "~0.1.5"
+ source-map "~0.5.0"
+
+recast@^0.11.17:
+ version "0.11.23"
+ resolved "https://registry.yarnpkg.com/recast/-/recast-0.11.23.tgz#451fd3004ab1e4df9b4e4b66376b2a21912462d3"
+ dependencies:
+ ast-types "0.9.6"
+ esprima "~3.1.0"
+ private "~0.1.5"
+ source-map "~0.5.0"
+
+recast@^0.12.5:
+ version "0.12.7"
+ resolved "https://registry.yarnpkg.com/recast/-/recast-0.12.7.tgz#6ec2ba1ae1d163cd12b5c17c3823458b299f3a0b"
+ dependencies:
+ ast-types "0.9.12"
+ core-js "^2.4.1"
+ esprima "~4.0.0"
+ private "~0.1.5"
+ source-map "~0.6.1"
+
recompose@0.21:
version "0.21.2"
resolved "https://registry.yarnpkg.com/recompose/-/recompose-0.21.2.tgz#ff3fbdb2397b1c77c47d451be2a63b9295d44681"
@@ -4958,13 +5933,14 @@ reduce-function-call@^1.0.1:
dependencies:
balanced-match "^0.4.2"
-redux-form@^7.0.3:
- version "7.0.3"
- resolved "https://registry.yarnpkg.com/redux-form/-/redux-form-7.0.3.tgz#80157d01df7de6c8eb2297ad1fbbb092bafa34f5"
+redux-form@^7.1.1:
+ version "7.1.1"
+ resolved "https://registry.yarnpkg.com/redux-form/-/redux-form-7.1.1.tgz#4d9ab1d9c03beb3a8b5f8e5d0f398cff4209081f"
dependencies:
+ babel-jest "^21.2.0"
deep-equal "^1.0.1"
es6-error "^4.0.0"
- hoist-non-react-statics "^2.2.1"
+ hoist-non-react-statics "^2.3.1"
invariant "^2.2.2"
is-promise "^2.1.0"
lodash "^4.17.3"
@@ -5002,6 +5978,10 @@ regenerator-runtime@^0.10.0:
version "0.10.1"
resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.10.1.tgz#257f41961ce44558b18f7814af48c17559f9faeb"
+regenerator-runtime@^0.11.0:
+ version "0.11.0"
+ resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.0.tgz#7e54fe5b5ccd5d6624ea6255c3473be090b802e1"
+
regenerator-transform@0.9.8:
version "0.9.8"
resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.9.8.tgz#0f88bb2bc03932ddb7b6b7312e68078f01026d6c"
@@ -5010,6 +5990,25 @@ regenerator-transform@0.9.8:
babel-types "^6.19.0"
private "^0.1.6"
+regenerator-transform@^0.10.0:
+ version "0.10.1"
+ resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.10.1.tgz#1e4996837231da8b7f3cf4114d71b5691a0680dd"
+ dependencies:
+ babel-runtime "^6.18.0"
+ babel-types "^6.19.0"
+ private "^0.1.6"
+
+regenerator@0.8.40:
+ version "0.8.40"
+ resolved "https://registry.yarnpkg.com/regenerator/-/regenerator-0.8.40.tgz#a0e457c58ebdbae575c9f8cd75127e93756435d8"
+ dependencies:
+ commoner "~0.10.3"
+ defs "~1.1.0"
+ esprima-fb "~15001.1001.0-dev-harmony-fb"
+ private "~0.1.5"
+ recast "0.10.33"
+ through "~2.3.8"
+
regex-cache@^0.4.2:
version "0.4.3"
resolved "https://registry.yarnpkg.com/regex-cache/-/regex-cache-0.4.3.tgz#9b1a6c35d4d0dfcef5711ae651e8e9d3d7114145"
@@ -5033,6 +6032,16 @@ regexpu-core@^2.0.0:
regjsgen "^0.2.0"
regjsparser "^0.1.4"
+regexpu@^1.3.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/regexpu/-/regexpu-1.3.0.tgz#e534dc991a9e5846050c98de6d7dd4a55c9ea16d"
+ dependencies:
+ esprima "^2.6.0"
+ recast "^0.10.10"
+ regenerate "^1.2.1"
+ regjsgen "^0.2.0"
+ regjsparser "^0.1.4"
+
regjsgen@^0.2.0:
version "0.2.0"
resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.2.0.tgz#6c016adeac554f75823fe37ac05b92d5a4edb1f7"
@@ -5065,6 +6074,12 @@ repeat-string@^1.5.2:
version "1.6.1"
resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637"
+repeating@^1.1.0, repeating@^1.1.2:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/repeating/-/repeating-1.1.3.tgz#3d4114218877537494f97f77f9785fab810fa4ac"
+ dependencies:
+ is-finite "^1.0.0"
+
repeating@^2.0.0:
version "2.0.1"
resolved "https://registry.yarnpkg.com/repeating/-/repeating-2.0.1.tgz#5214c53a926d3552707527fbab415dbc08d06dda"
@@ -5126,6 +6141,12 @@ resolve-pathname@^2.0.0:
version "2.0.2"
resolved "https://registry.yarnpkg.com/resolve-pathname/-/resolve-pathname-2.0.2.tgz#e55c016eb2e9df1de98e85002282bfb38c630436"
+resolve@^1.1.6:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.4.0.tgz#a75be01c53da25d934a98ebd0e4c4a7312f92a86"
+ dependencies:
+ path-parse "^1.0.5"
+
right-align@^0.1.1:
version "0.1.3"
resolved "https://registry.yarnpkg.com/right-align/-/right-align-0.1.3.tgz#61339b722fe6a3515689210d24e14c96148613ef"
@@ -5138,6 +6159,10 @@ rimraf@2, rimraf@^2.2.8, rimraf@~2.5.1, rimraf@~2.5.4:
dependencies:
glob "^7.0.5"
+rimraf@~2.2.6:
+ version "2.2.8"
+ resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.2.8.tgz#e439be2aaee327321952730f99a8929e4fc50582"
+
ripemd160@^1.0.0:
version "1.0.1"
resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-1.0.1.tgz#93a4bbd4942bc574b69a8fa57c71de10ecca7d6e"
@@ -5196,6 +6221,10 @@ selfsigned@^1.9.1:
version "5.3.0"
resolved "https://registry.yarnpkg.com/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f"
+semver@^5.3.0:
+ version "5.4.1"
+ resolved "https://registry.yarnpkg.com/semver/-/semver-5.4.1.tgz#e059c09d8571f0540823733433505d3a2f00b18e"
+
send@0.14.2:
version "0.14.2"
resolved "https://registry.yarnpkg.com/send/-/send-0.14.2.tgz#39b0438b3f510be5dc6f667a11f71689368cdeef"
@@ -5266,6 +6295,10 @@ shallow-clone@^0.1.2:
lazy-cache "^0.2.3"
mixin-object "^2.0.1"
+shebang-regex@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3"
+
signal-exit@^3.0.0:
version "3.0.2"
resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d"
@@ -5274,6 +6307,14 @@ simple-assign@^0.1.0:
version "0.1.0"
resolved "https://registry.yarnpkg.com/simple-assign/-/simple-assign-0.1.0.tgz#17fd3066a5f3d7738f50321bb0f14ca281cc4baa"
+simple-fmt@~0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/simple-fmt/-/simple-fmt-0.1.0.tgz#191bf566a59e6530482cb25ab53b4a8dc85c3a6b"
+
+simple-is@~0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/simple-is/-/simple-is-0.2.0.tgz#2abb75aade39deb5cc815ce10e6191164850baf0"
+
sinon-chai@^2.13.0:
version "2.13.0"
resolved "https://registry.yarnpkg.com/sinon-chai/-/sinon-chai-2.13.0.tgz#b9a42e801c20234bfc2f43b29e6f4f61b60990c4"
@@ -5302,6 +6343,10 @@ slick-carousel@^1.6.0:
dependencies:
jquery ">=1.7.2"
+slide@^1.1.5:
+ version "1.1.6"
+ resolved "https://registry.yarnpkg.com/slide/-/slide-1.1.6.tgz#56eb027d65b4d2dce6cb2e2d32c4d4afc9e1d707"
+
sntp@1.x.x:
version "1.0.9"
resolved "https://registry.yarnpkg.com/sntp/-/sntp-1.0.9.tgz#6541184cc90aeea6c6e7b35e2659082443c66198"
@@ -5340,12 +6385,30 @@ source-list-map@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-2.0.0.tgz#aaa47403f7b245a92fbc97ea08f250d6087ed085"
+source-map-support@^0.2.10:
+ version "0.2.10"
+ resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.2.10.tgz#ea5a3900a1c1cb25096a0ae8cc5c2b4b10ded3dc"
+ dependencies:
+ source-map "0.1.32"
+
+source-map-support@^0.4.15:
+ version "0.4.18"
+ resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.4.18.tgz#0286a6de8be42641338594e97ccea75f0a2c585f"
+ dependencies:
+ source-map "^0.5.6"
+
source-map-support@^0.4.2:
version "0.4.11"
resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.4.11.tgz#647f939978b38535909530885303daf23279f322"
dependencies:
source-map "^0.5.3"
+source-map@0.1.32:
+ version "0.1.32"
+ resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.1.32.tgz#c8b6c167797ba4740a8ea33252162ff08591b266"
+ dependencies:
+ amdefine ">=0.0.4"
+
source-map@0.5.x, source-map@^0.5.0, source-map@^0.5.3, source-map@^0.5.6, source-map@~0.5.1, source-map@~0.5.3:
version "0.5.6"
resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.6.tgz#75ce38f52bf0733c5a7f0c118d81334a2bb5f412"
@@ -5356,6 +6419,14 @@ source-map@~0.2.0:
dependencies:
amdefine ">=0.0.4"
+source-map@~0.5.0:
+ version "0.5.7"
+ resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc"
+
+source-map@~0.6.1:
+ version "0.6.1"
+ resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263"
+
spdx-correct@~1.0.0:
version "1.0.2"
resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-1.0.2.tgz#4b3073d933ff51f3912f03ac5519498a4150db40"
@@ -5409,6 +6480,10 @@ sshpk@^1.7.0:
jsbn "~0.1.0"
tweetnacl "~0.14.0"
+stable@~0.1.3:
+ version "0.1.6"
+ resolved "https://registry.yarnpkg.com/stable/-/stable-0.1.6.tgz#910f5d2aed7b520c6e777499c1f32e139fdecb10"
+
"statuses@>= 1.3.1 < 2", statuses@~1.3.1:
version "1.3.1"
resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.3.1.tgz#faf51b9eb74aaef3b3acf4ad5f61abf24cb7b93e"
@@ -5460,6 +6535,14 @@ string_decoder@^0.10.25, string_decoder@~0.10.x:
version "0.10.31"
resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94"
+stringmap@~0.2.2:
+ version "0.2.2"
+ resolved "https://registry.yarnpkg.com/stringmap/-/stringmap-0.2.2.tgz#556c137b258f942b8776f5b2ef582aa069d7d1b1"
+
+stringset@~0.2.1:
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/stringset/-/stringset-0.2.1.tgz#ef259c4e349344377fcd1c913dd2e848c9c042b5"
+
stringstream@~0.0.4:
version "0.0.5"
resolved "https://registry.yarnpkg.com/stringstream/-/stringstream-0.0.5.tgz#4e484cd4de5a0bbbee18e46307710a8a81621878"
@@ -5470,6 +6553,10 @@ strip-ansi@^3.0.0, strip-ansi@^3.0.1:
dependencies:
ansi-regex "^2.0.0"
+strip-ansi@~0.1.0:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-0.1.1.tgz#39e8a98d044d150660abe4a6808acf70bb7bc991"
+
strip-bom@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e"
@@ -5576,10 +6663,31 @@ tar@^2.0.0, tar@~2.2.1:
fstream "^1.0.2"
inherits "2"
+temp@^0.8.1:
+ version "0.8.3"
+ resolved "https://registry.yarnpkg.com/temp/-/temp-0.8.3.tgz#e0c6bc4d26b903124410e4fed81103014dfc1f59"
+ dependencies:
+ os-tmpdir "^1.0.0"
+ rimraf "~2.2.6"
+
+test-exclude@^4.1.1:
+ version "4.1.1"
+ resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-4.1.1.tgz#4d84964b0966b0087ecc334a2ce002d3d9341e26"
+ dependencies:
+ arrify "^1.0.1"
+ micromatch "^2.3.11"
+ object-assign "^4.1.0"
+ read-pkg-up "^1.0.1"
+ require-main-filename "^1.0.1"
+
text-encoding@0.6.4:
version "0.6.4"
resolved "https://registry.yarnpkg.com/text-encoding/-/text-encoding-0.6.4.tgz#e399a982257a276dae428bb92845cb71bdc26d19"
+through@~2.3.8:
+ version "2.3.8"
+ resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5"
+
thunky@^0.1.0:
version "0.1.0"
resolved "https://registry.yarnpkg.com/thunky/-/thunky-0.1.0.tgz#bf30146824e2b6e67b0f2d7a4ac8beb26908684e"
@@ -5594,6 +6702,10 @@ to-arraybuffer@^1.0.0:
version "1.0.1"
resolved "https://registry.yarnpkg.com/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz#7d229b1fcc637e466ca081180836a7aabff83f43"
+to-fast-properties@^1.0.0, to-fast-properties@^1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-1.0.3.tgz#b83571fa4d8c25b82e231b06e3a3055de4ca1a47"
+
to-fast-properties@^1.0.1:
version "1.0.2"
resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-1.0.2.tgz#f3f5c0c3ba7299a7ef99427e44633257ade43320"
@@ -5616,10 +6728,22 @@ trim-newlines@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-1.0.0.tgz#5887966bb582a4503a41eb524f7d35011815a613"
+trim-right@^1.0.0, trim-right@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/trim-right/-/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003"
+
trim@0.0.1:
version "0.0.1"
resolved "https://registry.yarnpkg.com/trim/-/trim-0.0.1.tgz#5858547f6b290757ee95cccc666fb50084c460dd"
+try-resolve@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/try-resolve/-/try-resolve-1.0.1.tgz#cfde6fabd72d63e5797cfaab873abbe8e700e912"
+
+tryor@~0.1.2:
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/tryor/-/tryor-0.1.2.tgz#8145e4ca7caff40acde3ccf946e8b8bb75b4172b"
+
tty-browserify@0.0.0:
version "0.0.0"
resolved "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.0.tgz#a157ba402da24e9bf957f9aa69d524eed42901a6"
@@ -5682,6 +6806,10 @@ uid-number@~0.0.6:
version "0.0.6"
resolved "https://registry.yarnpkg.com/uid-number/-/uid-number-0.0.6.tgz#0ea10e8035e8eb5b8e4449f06da1c730663baa81"
+underscore@~1.6.0:
+ version "1.6.0"
+ resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.6.0.tgz#8b38b10cacdef63337b8b24e4ff86d45aea529a8"
+
uniq@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/uniq/-/uniq-1.0.1.tgz#b31c5ae8254844a3a8281541ce2b04b865a734ff"
@@ -5729,6 +6857,10 @@ url@^0.11.0:
punycode "1.3.2"
querystring "0.2.0"
+user-home@^1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/user-home/-/user-home-1.1.1.tgz#2b5be23a32b63a7c9deb8d0f28d485724a3df190"
+
util-deprecate@~1.0.1:
version "1.0.2"
resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
@@ -5947,6 +7079,10 @@ window-size@0.1.0:
version "0.1.0"
resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.1.0.tgz#5438cd2ea93b202efa3a19fe8887aee7c94f9c9d"
+window-size@^0.1.2:
+ version "0.1.4"
+ resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.1.4.tgz#f8e1aa1ee5a53ec5bf151ffa09742a6ad7697876"
+
window-size@^0.2.0:
version "0.2.0"
resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.2.0.tgz#b4315bb4214a3d7058ebeee892e13fa24d98b075"
@@ -5970,6 +7106,14 @@ wrappy@1:
version "1.0.2"
resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
+write-file-atomic@^1.2.0:
+ version "1.3.4"
+ resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-1.3.4.tgz#f807a4f0b1d9e913ae7a48112e6cc3af1991b45f"
+ dependencies:
+ graceful-fs "^4.1.11"
+ imurmurhash "^0.1.4"
+ slide "^1.1.5"
+
xml-char-classes@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/xml-char-classes/-/xml-char-classes-1.0.0.tgz#64657848a20ffc5df583a42ad8a277b4512bbc4d"
@@ -5982,7 +7126,7 @@ xtend@^4.0.0:
version "4.0.1"
resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af"
-y18n@^3.2.1:
+y18n@^3.2.0, y18n@^3.2.1:
version "3.2.1"
resolved "https://registry.yarnpkg.com/y18n/-/y18n-3.2.1.tgz#6d15fba884c08679c0d77e88e7759e811e07fa41"
@@ -6048,3 +7192,14 @@ yargs@~3.10.0:
cliui "^2.1.0"
decamelize "^1.0.0"
window-size "0.1.0"
+
+yargs@~3.27.0:
+ version "3.27.0"
+ resolved "https://registry.yarnpkg.com/yargs/-/yargs-3.27.0.tgz#21205469316e939131d59f2da0c6d7f98221ea40"
+ dependencies:
+ camelcase "^1.2.1"
+ cliui "^2.1.0"
+ decamelize "^1.0.0"
+ os-locale "^1.4.0"
+ window-size "^0.1.2"
+ y18n "^3.2.0"
From 92f3b1952edde4ad6e659002bb80cab6237870a3 Mon Sep 17 00:00:00 2001
From: Birk Johansson
Date: Mon, 16 Oct 2017 19:51:34 +0200
Subject: [PATCH 15/21] Vertical Stepper and response stepper for FormStepper
---
app/src/components/form/FormStepper.jsx | 263 ++++++++++++------
.../components/form/UploadAppFormStepper.jsx | 10 +-
package.json | 2 +-
yarn.lock | 48 ++--
4 files changed, 209 insertions(+), 114 deletions(-)
diff --git a/app/src/components/form/FormStepper.jsx b/app/src/components/form/FormStepper.jsx
index 601a22bbc..226621735 100644
--- a/app/src/components/form/FormStepper.jsx
+++ b/app/src/components/form/FormStepper.jsx
@@ -2,11 +2,14 @@ import React, { Component, PropTypes } from "react";
import { connect } from "react-redux";
import { Card, CardText } from "material-ui/Card";
import Button from "material-ui/RaisedButton";
+import FlatButton from "material-ui/FlatButton";
import { reduxForm, getFormSyncErrors } from "redux-form";
import Spinner from "../utils/Spinner";
import Stepper from "material-ui/Stepper/Stepper";
import Step from "material-ui/Stepper/Step";
import StepButton from "material-ui/Stepper/StepButton";
+import StepContent from "material-ui/Stepper/StepContent";
+import StepLabel from "material-ui/Stepper/StepLabel";
import WarningIcon from "material-ui/svg-icons/alert/warning";
import { red500 } from "material-ui/styles/colors";
import _max from "lodash/max";
@@ -23,6 +26,17 @@ const sectionErrorIcon = ;
* All validation is done through redux-form.
*/
+const styles = {
+ nextButton: {
+ position: "absolute",
+ right: 0
+ },
+ backButton: {
+ position: "absolute",
+ left: 0
+ }
+};
+
class FormStepper extends Component {
constructor(props) {
super(props);
@@ -39,6 +53,7 @@ class FormStepper extends Component {
this.nextStep = this.nextStep.bind(this);
this.prevStep = this.prevStep.bind(this);
this.goToStep = this.goToStep.bind(this);
+ this.renderStepActions = this.renderStepActions.bind(this);
}
getSectionName(id) {
@@ -91,11 +106,7 @@ class FormStepper extends Component {
}
prevStep() {
- let currStep = this.state.stepIndex;
- this.setState({
- ...this.state,
- stepIndex: currStep > 0 ? --currStep : 0
- });
+ return this.goToStep(this.state.stepIndex -1);
}
goToStep(index) {
@@ -109,6 +120,127 @@ class FormStepper extends Component {
this.updateStateForStep(index);
}
+ renderVerticalStepActions = stepIndex => {
+ const { submitting } = this.props;
+ return (
+
+ {stepIndex < this.props.sections.length - 1 &&
+ }
+ {this.state.stepIndex === this.props.sections.length - 1 &&
+ : null}
+ type="submit"
+ primary
+ disabled={submitting}
+ label={!submitting ? "Finish" : null}
+ />}
+ {stepIndex > 0 &&
+ }
+
+ );
+ };
+
+ renderStepActions(stepIndex) {
+ const { submitting } = this.props;
+ return (
+
+ {stepIndex > 0 &&
+ }
+ {stepIndex < this.props.sections.length - 1 &&
+ }
+ {this.state.stepIndex === this.props.sections.length - 1 &&
+ : null}
+ type="submit"
+ primary
+ disabled={submitting}
+ label={!submitting ? "Finish" : null}
+ />}
+
+ );
+ }
+
+ renderSteps = currStepErrors => {
+ const vertical = this.shouldRenderVertical();
+ const { stepIndex } = this.state;
+
+ return this.props.sections.map((section, i) => {
+ const sectionName = this.getSectionName(i);
+ const showError =
+ (i < this.state.stepIndex ||
+ this.state.visited.indexOf(i) > -1 ||
+ _max(this.state.visited) > i) &&
+ this.props.errorState &&
+ hasError(this.props.errorState[sectionName]);
+ const sectionDisplayName =
+ sectionName.charAt(0).toUpperCase() +
+ this.getSectionName(i).slice(1);
+ return vertical
+ ? -1}
+ >
+ this.goToStep(i)}
+ {...section.props.icon && {
+ icon: section.props.icon
+ }}
+ {...showError && { icon: sectionErrorIcon }}
+ >
+ {sectionDisplayName}
+
+
+ {React.cloneElement(this.props.sections[stepIndex], {
+ errors: currStepErrors
+ })}
+ {this.renderVerticalStepActions(stepIndex)}
+
+
+ : -1}
+ >
+ this.goToStep(i)}
+ {...section.props.icon && {
+ icon: section.props.icon
+ }}
+ {...showError && { icon: sectionErrorIcon }}
+ >
+ {sectionDisplayName}
+
+ ;
+ });
+ };
+
+ shouldRenderVertical = () => {
+ return (
+ this.props.orientation === "vertical" ||
+ (this.props.responsive &&
+ window.matchMedia("(max-width: 550px)").matches)
+ );
+ };
+
render() {
const {
handleSubmit,
@@ -123,65 +255,33 @@ class FormStepper extends Component {
submitting
} = this.props;
const { stepIndex } = this.state;
- const styles = {
- nextButton: {
- position: "absolute",
- right: 0
- },
- backButton: {
- position: "absolute",
- left: 0
- }
- };
-
+ const vertical = this.shouldRenderVertical();
const currStepErrors = this.props.errorState
? this.props.errorState[this.getSectionName(stepIndex)]
: {};
const steps = this.props.stepsRender
- ? this.props.stepsRender({ ...this.props, ...this.state })
- : this.props.sections.map((section, i) => {
- const sectionName = this.getSectionName(i);
- const showError =
- (i < this.state.stepIndex ||
- this.state.visited.indexOf(i) > -1 ||
- _max(this.state.visited) > i) &&
- this.props.errorState &&
- hasError(this.props.errorState[sectionName]);
- const sectionDisplayName =
- sectionName.charAt(0).toUpperCase() +
- this.getSectionName(i).slice(1);
- return (
- -1}
- >
- this.goToStep(i)}
- {... (section.props.icon && { icon: sections.props.icon})}
- {...showError && { icon: sectionErrorIcon }}
- >
- {sectionDisplayName}
-
-
- );
- });
+ ? this.props.stepsRender(this.props, this.state)
+ : this.renderSteps(currStepErrors);
return (
);
}
}
FormStepper.propTypes = {
+ /**
+ * The name of the form in the redux-store.
+ */
form: PropTypes.string.isRequired,
stepperLinear: PropTypes.bool,
@@ -247,18 +321,26 @@ FormStepper.propTypes = {
*/
onSubmit: PropTypes.func.isRequired,
/**
- * Override the content, next-buttons etc, this gets the entire state and props of the Stepper
- * props: stepperState, stepperProps
+ * Override the content, next-buttons etc, called with the entire state and props of the FormStepper
+ * Mostly useful for horizontal-orientation to override the default next-buttons, where you have
+ * access to the state of the stepper.
+ * renderContent(stepperProps, stepperState)
*/
- content: PropTypes.node,
+ renderContent: PropTypes.func,
/**
- * Override the steps, a function which should return an array of Steps (react-nodes)
- * The function is called with the props of the stepper with the state shallowly merged in.
- * stepsRender(props)
+ * Override the steps, a function which should return an array of Steps (material-ui react-nodes)
+ * The function is called with the props and state of the FormStepper.
+ * stepsRender(props, state)
*/
- stepsRender: PropTypes.func
+ stepsRender: PropTypes.func,
+
+ orientation: PropTypes.oneOf(["vertical", "horizontal"]),
+ /**
+ * Renders a vertical-stepper if the viewport is narrow (<550px).
+ */
+ responsive: PropTypes.bool
/**
* See http://redux-form.com/7.0.3/docs/api/ReduxForm.md/
* for other props that may be passed to the form
@@ -266,7 +348,8 @@ FormStepper.propTypes = {
};
FormStepper.defaultProps = {
- stepperLinear: false
+ stepperLinear: false,
+ orientation: "horizontal"
};
const mapStateToProps = (state, ownProps) => ({
diff --git a/app/src/components/form/UploadAppFormStepper.jsx b/app/src/components/form/UploadAppFormStepper.jsx
index 8982f4049..02ddb62e3 100644
--- a/app/src/components/form/UploadAppFormStepper.jsx
+++ b/app/src/components/form/UploadAppFormStepper.jsx
@@ -80,12 +80,12 @@ const validate = values => {
return errors;
};
-const appTypesItems = appTypes.map((type, i) => (
+const appTypesItems = appTypes.map((type, i) =>
-));
-const DHISVersionItems = config.ui.dhisVersions.map((version, i) => (
+);
+const DHISVersionItems = config.ui.dhisVersions.map((version, i) =>
-));
+);
const AppGeneralSection = props => {
return (
@@ -95,6 +95,7 @@ const AppGeneralSection = props => {
component={formUtils.renderTextField}
fullWidth
label="App Name *"
+ autoFocus
/>
,
]}
+ responsive
initialValues={{ general: { appType: appTypes[0].value } }}
/>
);
diff --git a/package.json b/package.json
index 9c0c75b30..52f862cc1 100644
--- a/package.json
+++ b/package.json
@@ -46,7 +46,7 @@
"lodash": "^4.17.4",
"material-components-web": "^0.16.0",
"material-design-icons": "^3.0.1",
- "material-ui": "^0.18.7",
+ "material-ui": "^0.19.4",
"node-sass": "^4.5.3",
"prop-types": "^15.6.0",
"react": "~15.4",
diff --git a/yarn.lock b/yarn.lock
index 60d868e43..82ca55f69 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -1743,7 +1743,7 @@ babel-register@^6.26.0, babel-register@^6.9.0:
mkdirp "^0.5.1"
source-map-support "^0.4.15"
-babel-runtime@^6.18.0, babel-runtime@^6.20.0, babel-runtime@^6.22.0, babel-runtime@^6.23.0:
+babel-runtime@^6.18.0, babel-runtime@^6.22.0, babel-runtime@^6.23.0:
version "6.23.0"
resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.23.0.tgz#0a9489f144de70efb3ce4300accdb329e2fc543b"
dependencies:
@@ -4622,9 +4622,9 @@ material-design-icons@^3.0.1:
version "3.0.1"
resolved "https://registry.yarnpkg.com/material-design-icons/-/material-design-icons-3.0.1.tgz#9a71c48747218ebca51e51a66da682038cdcb7bf"
-material-ui@^0.18.7:
- version "0.18.7"
- resolved "https://registry.yarnpkg.com/material-ui/-/material-ui-0.18.7.tgz#b87af16357e6966b36c23d489eb2ed70746d25f8"
+material-ui@^0.19.4:
+ version "0.19.4"
+ resolved "https://registry.yarnpkg.com/material-ui/-/material-ui-0.19.4.tgz#ca9cdca8aa8bb594dfac5db38ec9ff045a323587"
dependencies:
babel-runtime "^6.23.0"
inline-style-prefixer "^3.0.2"
@@ -4632,9 +4632,9 @@ material-ui@^0.18.7:
lodash.merge "^4.6.0"
lodash.throttle "^4.1.1"
prop-types "^15.5.7"
- react-event-listener "^0.4.5"
- react-transition-group "^1.1.2"
- recompose "0.24.0"
+ react-event-listener "^0.5.1"
+ react-transition-group "^1.2.1"
+ recompose "^0.26.0"
simple-assign "^0.1.0"
warning "^3.0.0"
@@ -5576,7 +5576,7 @@ promise@^7.0.3, promise@^7.1.1:
dependencies:
asap "~2.0.3"
-prop-types@^15.5.10, prop-types@^15.5.4, prop-types@^15.5.6, prop-types@^15.5.7, prop-types@^15.5.8, prop-types@^15.5.9:
+prop-types@^15.5.10, prop-types@^15.5.6, prop-types@^15.5.7, prop-types@^15.5.8, prop-types@^15.5.9:
version "15.5.10"
resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.5.10.tgz#2797dfc3126182e3a95e3dfbb2e893ddd7456154"
dependencies:
@@ -5707,13 +5707,13 @@ react-dom@~15.4:
loose-envify "^1.1.0"
object-assign "^4.1.0"
-react-event-listener@^0.4.5:
- version "0.4.5"
- resolved "https://registry.yarnpkg.com/react-event-listener/-/react-event-listener-0.4.5.tgz#e3e895a0970cf14ee8f890113af68197abf3d0b1"
+react-event-listener@^0.5.1:
+ version "0.5.1"
+ resolved "https://registry.yarnpkg.com/react-event-listener/-/react-event-listener-0.5.1.tgz#ba36076e47bc37c5a67ff5ccd4a9ff0f15621040"
dependencies:
- babel-runtime "^6.20.0"
- fbjs "^0.8.4"
- prop-types "^15.5.4"
+ babel-runtime "^6.26.0"
+ fbjs "^0.8.16"
+ prop-types "^15.6.0"
warning "^3.0.0"
react-redux@5:
@@ -5761,7 +5761,7 @@ react-tap-event-plugin@^2.0.1:
dependencies:
fbjs "^0.8.6"
-react-transition-group@^1.1.2, react-transition-group@^1.2.0:
+react-transition-group@^1.2.0:
version "1.2.0"
resolved "https://registry.yarnpkg.com/react-transition-group/-/react-transition-group-1.2.0.tgz#b51fc921b0c3835a7ef7c571c79fc82c73e9204f"
dependencies:
@@ -5771,6 +5771,16 @@ react-transition-group@^1.1.2, react-transition-group@^1.2.0:
prop-types "^15.5.6"
warning "^3.0.0"
+react-transition-group@^1.2.1:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/react-transition-group/-/react-transition-group-1.2.1.tgz#e11f72b257f921b213229a774df46612346c7ca6"
+ dependencies:
+ chain-function "^1.0.0"
+ dom-helpers "^3.2.0"
+ loose-envify "^1.3.1"
+ prop-types "^15.5.6"
+ warning "^3.0.0"
+
react-transition-group@^2.2.0:
version "2.2.0"
resolved "https://registry.yarnpkg.com/react-transition-group/-/react-transition-group-2.2.0.tgz#793bf8cb15bfe91b3101b24bce1c1d2891659575"
@@ -5903,13 +5913,13 @@ recompose@0.21:
hoist-non-react-statics "^1.0.0"
symbol-observable "^1.0.4"
-recompose@0.24.0:
- version "0.24.0"
- resolved "https://registry.yarnpkg.com/recompose/-/recompose-0.24.0.tgz#262e93f974439eb17e7779824d88cce90492a5dd"
+recompose@^0.26.0:
+ version "0.26.0"
+ resolved "https://registry.yarnpkg.com/recompose/-/recompose-0.26.0.tgz#9babff039cb72ba5bd17366d55d7232fbdfb2d30"
dependencies:
change-emitter "^0.1.2"
fbjs "^0.8.1"
- hoist-non-react-statics "^1.0.0"
+ hoist-non-react-statics "^2.3.1"
symbol-observable "^1.0.4"
redent@^1.0.0:
From 3806f2d357e4e4743715f0bb3d3711b1f3684912 Mon Sep 17 00:00:00 2001
From: Birk Johansson
Date: Mon, 16 Oct 2017 21:24:01 +0200
Subject: [PATCH 16/21] Update dependencies and migrate to prop-types
---
app/src/components/appCards/AppCards.jsx | 37 +-
app/src/components/appVersion/VersionList.jsx | 5 +-
.../components/appVersion/VersionListEdit.jsx | 11 +-
app/src/components/appView/AppLogo.jsx | 3 +-
app/src/components/appView/AppView.jsx | 3 +-
app/src/components/appView/ImageViewer.jsx | 3 +-
app/src/components/dialog/DialogBase.js | 2 +-
app/src/components/form/EditAppForm.jsx | 3 +-
app/src/components/form/EditImageForm.jsx | 3 +-
app/src/components/form/FormStepper.jsx | 9 +-
.../form/MultipleUploadFileFields.jsx | 3 +-
app/src/components/form/NewAppVersionForm.jsx | 3 +-
.../components/form/UploadAppFormStepper.jsx | 3 +-
app/src/components/form/UploadFileField.jsx | 3 +-
app/src/components/header/SubHeader.jsx | 3 +-
app/src/components/user/UserView.jsx | 3 +-
.../components/user/appList/AppListItem.jsx | 11 +-
app/src/components/user/login/LoginView.jsx | 3 +-
.../user/userAppView/UserAppView.jsx | 11 +-
app/src/components/utils/Animate.jsx | 3 +-
app/src/components/utils/Error.jsx | 3 +-
app/src/components/utils/ErrorOrLoading.jsx | 3 +-
app/src/components/utils/Filters.jsx | 3 +-
app/src/components/utils/Loader.jsx | 3 +-
app/src/components/utils/PrivateRoute.jsx | 3 +-
app/src/components/utils/Snackbar.jsx | 3 +-
app/src/components/utils/Spinner.jsx | 3 +-
app/src/material/Grid/Col.jsx | 3 +-
app/src/material/Grid/Grid.jsx | 3 +-
app/src/material/Toolbar/Toolbar.jsx | 3 +-
app/src/material/Toolbar/ToolbarSection.jsx | 3 +-
app/src/material/Toolbar/ToolbarTitle.jsx | 3 +-
package.json | 18 +-
yarn.lock | 1138 ++---------------
34 files changed, 186 insertions(+), 1131 deletions(-)
diff --git a/app/src/components/appCards/AppCards.jsx b/app/src/components/appCards/AppCards.jsx
index e333cdcc2..cc08cfd5d 100644
--- a/app/src/components/appCards/AppCards.jsx
+++ b/app/src/components/appCards/AppCards.jsx
@@ -11,14 +11,13 @@ import {
filterAppType
} from "../utils/Filters";
import { ToolbarGroup } from "material-ui/Toolbar";
-//import {values, sortBy} from 'lodash';
import sortBy from "lodash/sortBy";
-//import values from 'lodash/values';
import SubHeader from "../header/SubHeader";
import ErrorOrLoading from "../utils/ErrorOrLoading";
import { FadeAnimation, FadeAnimationList } from "../utils/Animate";
import "../../styles/utils/animations.scss";
import Theme from "../../styles/theme";
+
class AppCards extends Component {
componentDidMount() {
this.props.loadApps();
@@ -60,11 +59,11 @@ class AppCards extends Component {
filterApp(app, searchFilter) &&
filterAppType(app, this.props.filters)
)
- .map((app, i) => (
+ .map((app, i) =>
- ));
+ );
const emptyApps = (
@@ -108,22 +107,20 @@ class AppCards extends Component {
- {loadOrErr || !apps ? (
-
- ) : (
-
- {apps}
-
- )}
+ {loadOrErr || !apps
+ ?
+ :
+ {apps}
+ }
{loaded && apps.length < 1 && emptyApps}
diff --git a/app/src/components/appVersion/VersionList.jsx b/app/src/components/appVersion/VersionList.jsx
index 5f2691c40..2634c0245 100644
--- a/app/src/components/appVersion/VersionList.jsx
+++ b/app/src/components/appVersion/VersionList.jsx
@@ -1,4 +1,5 @@
-import React, { Component, PropTypes } from "react";
+import PropTypes from 'prop-types';
+import React, { Component } from "react";
import {
Table,
TableBody,
@@ -28,7 +29,7 @@ const VersionList = props => {
}
>