keepSynced middleware

This commit is contained in:
2018-06-24 18:13:37 +03:00
parent ba71878261
commit 3791d4a5d7
10 changed files with 243 additions and 247 deletions

172
package-lock.json generated
View File

@@ -2127,9 +2127,9 @@
"dev": true
},
"dlv": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.1.tgz",
"integrity": "sha512-b/kUB0D6RgRGG69h5ExsLnUAwfs5Jndfk1pU2ao7/9mVdsxpUBlkFdTkNJThXw1jrLXpUbIIg+h3um5zXi6sFA==",
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.2.tgz",
"integrity": "sha512-xxD4VSH67GbRvSGUrckvha94RD7hjgOH7rqGxiytLpkaeMvixOHFZTGFK6EkIm3T761OVHT8ABHmGkq9gXgu6Q==",
"dev": true
},
"doctrine": {
@@ -2445,9 +2445,9 @@
"dev": true
},
"eslint-plugin-prettier": {
"version": "2.6.0",
"resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-2.6.0.tgz",
"integrity": "sha512-floiaI4F7hRkTrFe8V2ItOK97QYrX75DjmdzmVITZoAP6Cn06oEDPQRsO6MlHEP/u2SxI3xQ52Kpjw6j5WGfeQ==",
"version": "2.6.1",
"resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-2.6.1.tgz",
"integrity": "sha512-wNZ2z0oVCWnf+3BSI7roS+z4gGu2AwcPKUek+SlLZMZg+X0KbZLsB2knul7fd0K3iuIp402HIYzm4f2+OyfXxA==",
"dev": true,
"requires": {
"fast-diff": "^1.1.1",
@@ -3063,8 +3063,7 @@
"ansi-regex": {
"version": "2.1.1",
"bundled": true,
"dev": true,
"optional": true
"dev": true
},
"aproba": {
"version": "1.2.0",
@@ -3085,14 +3084,12 @@
"balanced-match": {
"version": "1.0.0",
"bundled": true,
"dev": true,
"optional": true
"dev": true
},
"brace-expansion": {
"version": "1.1.11",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
"balanced-match": "^1.0.0",
"concat-map": "0.0.1"
@@ -3107,20 +3104,17 @@
"code-point-at": {
"version": "1.1.0",
"bundled": true,
"dev": true,
"optional": true
"dev": true
},
"concat-map": {
"version": "0.0.1",
"bundled": true,
"dev": true,
"optional": true
"dev": true
},
"console-control-strings": {
"version": "1.1.0",
"bundled": true,
"dev": true,
"optional": true
"dev": true
},
"core-util-is": {
"version": "1.0.2",
@@ -3237,8 +3231,7 @@
"inherits": {
"version": "2.0.3",
"bundled": true,
"dev": true,
"optional": true
"dev": true
},
"ini": {
"version": "1.3.5",
@@ -3250,7 +3243,6 @@
"version": "1.0.0",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
"number-is-nan": "^1.0.0"
}
@@ -3265,7 +3257,6 @@
"version": "3.0.4",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
"brace-expansion": "^1.1.7"
}
@@ -3273,14 +3264,12 @@
"minimist": {
"version": "0.0.8",
"bundled": true,
"dev": true,
"optional": true
"dev": true
},
"minipass": {
"version": "2.2.4",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
"safe-buffer": "^5.1.1",
"yallist": "^3.0.0"
@@ -3299,7 +3288,6 @@
"version": "0.5.1",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
"minimist": "0.0.8"
}
@@ -3380,8 +3368,7 @@
"number-is-nan": {
"version": "1.0.1",
"bundled": true,
"dev": true,
"optional": true
"dev": true
},
"object-assign": {
"version": "4.1.1",
@@ -3393,7 +3380,6 @@
"version": "1.4.0",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
"wrappy": "1"
}
@@ -3479,8 +3465,7 @@
"safe-buffer": {
"version": "5.1.1",
"bundled": true,
"dev": true,
"optional": true
"dev": true
},
"safer-buffer": {
"version": "2.1.2",
@@ -3516,7 +3501,6 @@
"version": "1.0.2",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
"code-point-at": "^1.0.0",
"is-fullwidth-code-point": "^1.0.0",
@@ -3536,7 +3520,6 @@
"version": "3.0.1",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
"ansi-regex": "^2.0.0"
}
@@ -3580,14 +3563,12 @@
"wrappy": {
"version": "1.0.2",
"bundled": true,
"dev": true,
"optional": true
"dev": true
},
"yallist": {
"version": "3.0.2",
"bundled": true,
"dev": true,
"optional": true
"dev": true
}
}
},
@@ -5538,17 +5519,17 @@
}
},
"mongodb": {
"version": "3.0.9",
"resolved": "https://registry.npmjs.org/mongodb/-/mongodb-3.0.9.tgz",
"integrity": "sha512-2NJzruJu15/1YF6+H55f1wfLQb1M6/+hU96+L5sPv07PDZDPvZEDJBtCjFQorpbW9D2aqsem7mFVUKPhVwwRog==",
"version": "3.0.10",
"resolved": "https://registry.npmjs.org/mongodb/-/mongodb-3.0.10.tgz",
"integrity": "sha512-jy9s4FgcM4rl8sHNETYHGeWcuRh9AlwQCUuMiTj041t/HD02HwyFgmm2VZdd9/mA9YNHaUJLqj0tzBx2QFivtg==",
"requires": {
"mongodb-core": "3.0.8"
"mongodb-core": "3.0.9"
}
},
"mongodb-core": {
"version": "3.0.8",
"resolved": "https://registry.npmjs.org/mongodb-core/-/mongodb-core-3.0.8.tgz",
"integrity": "sha512-dFxfhH9N7ohuQnINyIl6dqEF8sYOE0WKuymrFf3L3cipJNrx+S8rAbNOTwa00/fuJCjBMJNFsaA+R2N16//UIw==",
"version": "3.0.9",
"resolved": "https://registry.npmjs.org/mongodb-core/-/mongodb-core-3.0.9.tgz",
"integrity": "sha512-buOWjdLLBlEqjHDeHYSXqXx173wHMVp7bafhdHxSjxWdB9V6Ri4myTqxjYZwL/eGFZxvd8oRQSuhwuIDbaaB+g==",
"requires": {
"bson": "~1.0.4",
"require_optional": "^1.0.1"
@@ -5615,15 +5596,15 @@
}
},
"mongoose": {
"version": "5.1.5",
"resolved": "https://registry.npmjs.org/mongoose/-/mongoose-5.1.5.tgz",
"integrity": "sha512-/bDtFRvWZclE4Fxw5ntofGA2Zm+lgJJw9WHZK4aWotVNK5MEDxrfPp+W/gk4whv0t4AO9JxmyAD4jfotjARSiA==",
"version": "5.1.6",
"resolved": "https://registry.npmjs.org/mongoose/-/mongoose-5.1.6.tgz",
"integrity": "sha512-p8p/3Z2kfXViqawN1TV+cZ8XbHz6SsllkytKTog+CDWfCNObyGraHQlUuRv/9aYPNKiZfq6WWITgLpJLZW/o/A==",
"requires": {
"async": "2.6.1",
"bson": "~1.0.5",
"kareem": "2.2.1",
"lodash.get": "4.4.2",
"mongodb": "3.0.9",
"mongodb": "3.0.10",
"mongoose-legacy-pluralize": "1.0.2",
"mpath": "0.4.1",
"mquery": "3.0.0",
@@ -6155,9 +6136,9 @@
}
},
"passport-local-mongoose": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/passport-local-mongoose/-/passport-local-mongoose-5.0.0.tgz",
"integrity": "sha512-ZfCBzPD42j7iDvZyg5X5lBtOpiOfId+kvwOqsJgIaVEy5R2lypE0QCbw7afZzyMpAWilh7h6EY4YZnlTgt7hnw==",
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/passport-local-mongoose/-/passport-local-mongoose-5.0.1.tgz",
"integrity": "sha512-VUY5DgBdpjt1tjunJJ1EXV5b2nhMDkXJuhTjyiK660IgIp7kONMyWEe9tGHf8I9tZudXuTF+47JNQLIzU+Hjbw==",
"requires": {
"debug": "^3.1.0",
"generaterr": "^1.5.0",
@@ -6327,15 +6308,15 @@
"dev": true
},
"prettier": {
"version": "1.13.4",
"resolved": "https://registry.npmjs.org/prettier/-/prettier-1.13.4.tgz",
"integrity": "sha512-emsEZ2bAigL1lq6ssgkpPm1MIBqgeTvcp90NxOP5XDqprub/V/WS2Hfgih3mS7/1dqTUvhG+sxx1Dv8crnVexA==",
"version": "1.13.5",
"resolved": "https://registry.npmjs.org/prettier/-/prettier-1.13.5.tgz",
"integrity": "sha512-4M90mfvLz6yRf2Dhzd+xPIE6b4xkI8nHMJhsSm9IlfG17g6wujrrm7+H1X8x52tC4cSNm6HmuhCUSNe6Hd5wfw==",
"dev": true
},
"prettier-eslint": {
"version": "8.8.1",
"resolved": "https://registry.npmjs.org/prettier-eslint/-/prettier-eslint-8.8.1.tgz",
"integrity": "sha512-8YMkJZnA+XVfEW6fPet05jpNmSQbD+Htbh/QyOxQcVf2GIUEZsnGP7ZScaM9Mq2Ra2261eCu60E7/TRIy9coXQ==",
"version": "8.8.2",
"resolved": "https://registry.npmjs.org/prettier-eslint/-/prettier-eslint-8.8.2.tgz",
"integrity": "sha512-2UzApPuxi2yRoyMlXMazgR6UcH9DKJhNgCviIwY3ixZ9THWSSrUww5vkiZ3C48WvpFl1M1y/oU63deSy1puWEA==",
"dev": true,
"requires": {
"babel-runtime": "^6.26.0",
@@ -6346,10 +6327,38 @@
"lodash.merge": "^4.6.0",
"loglevel-colored-level-prefix": "^1.0.0",
"prettier": "^1.7.0",
"pretty-format": "^22.0.3",
"pretty-format": "^23.0.1",
"require-relative": "^0.8.7",
"typescript": "^2.5.1",
"typescript-eslint-parser": "^11.0.0"
"typescript-eslint-parser": "^16.0.0",
"vue-eslint-parser": "^2.0.2"
},
"dependencies": {
"ansi-regex": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
"integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
"dev": true
},
"ansi-styles": {
"version": "3.2.1",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
"integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
"dev": true,
"requires": {
"color-convert": "^1.9.0"
}
},
"pretty-format": {
"version": "23.0.1",
"resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-23.0.1.tgz",
"integrity": "sha1-1h0GUmjkx1kIO8y8onoBrXx2AfQ=",
"dev": true,
"requires": {
"ansi-regex": "^3.0.0",
"ansi-styles": "^3.2.0"
}
}
}
},
"pretty-format": {
@@ -8296,27 +8305,19 @@
"dev": true
},
"typescript": {
"version": "2.9.1",
"resolved": "https://registry.npmjs.org/typescript/-/typescript-2.9.1.tgz",
"integrity": "sha512-h6pM2f/GDchCFlldnriOhs1QHuwbnmj6/v7499eMHqPeW4V2G0elua2eIc2nu8v2NdHV0Gm+tzX83Hr6nUFjQA==",
"version": "2.9.2",
"resolved": "https://registry.npmjs.org/typescript/-/typescript-2.9.2.tgz",
"integrity": "sha512-Gr4p6nFNaoufRIY4NMdpQRNmgxVIGMs4Fcu/ujdYk3nAZqk7supzBE9idmvfZIlH/Cuj//dvi+019qEue9lV0w==",
"dev": true
},
"typescript-eslint-parser": {
"version": "11.0.0",
"resolved": "https://registry.npmjs.org/typescript-eslint-parser/-/typescript-eslint-parser-11.0.0.tgz",
"integrity": "sha512-/fBHTBRBSorWQGKWOOjeMPkzd3o8cOPtFjTRwU5JLNGgVtmMa3KDkiw0R2n+H6ovo9y3OX30/5usm6YTqY44PQ==",
"version": "16.0.0",
"resolved": "https://registry.npmjs.org/typescript-eslint-parser/-/typescript-eslint-parser-16.0.0.tgz",
"integrity": "sha512-ZYYVKlHWR/RMvTCah4WfrZclb2azZipW4sbaYLJjbh6jiYn81tLUZAw/WdVLlXxaCbIawaKCA44AJPMFVArKZQ==",
"dev": true,
"requires": {
"lodash.unescape": "4.0.1",
"semver": "5.4.1"
},
"dependencies": {
"semver": {
"version": "5.4.1",
"resolved": "https://registry.npmjs.org/semver/-/semver-5.4.1.tgz",
"integrity": "sha512-WfG/X9+oATh81XtllIo/I8gOiY9EXRdv1cQdyykeXK17YcUW3EXUAi2To4pcH6nZtJPr7ZOpM5OMyWJZm+8Rsg==",
"dev": true
}
"semver": "5.5.0"
}
},
"uglify-js": {
@@ -8588,6 +8589,31 @@
"extsprintf": "^1.2.0"
}
},
"vue-eslint-parser": {
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-2.0.3.tgz",
"integrity": "sha512-ZezcU71Owm84xVF6gfurBQUGg8WQ+WZGxgDEQu1IHFBZNx7BFZg3L1yHxrCBNNwbwFtE1GuvfJKMtb6Xuwc/Bw==",
"dev": true,
"requires": {
"debug": "^3.1.0",
"eslint-scope": "^3.7.1",
"eslint-visitor-keys": "^1.0.0",
"espree": "^3.5.2",
"esquery": "^1.0.0",
"lodash": "^4.17.4"
},
"dependencies": {
"debug": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
"integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
"dev": true,
"requires": {
"ms": "2.0.0"
}
}
}
},
"w3c-hr-time": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.1.tgz",

View File

@@ -28,12 +28,12 @@
"express-jwt": "^5.3.1",
"hsts": "^2.1.0",
"jsonwebtoken": "^8.3.0",
"mongoose": "^5.1.5",
"mongoose": "^5.1.6",
"mongoose-unique-validator": "^2.0.1",
"morgan": "^1.9.0",
"passport": "^0.4.0",
"passport-local": "^1.0.0",
"passport-local-mongoose": "^5.0.0"
"passport-local-mongoose": "^5.0.1"
},
"devDependencies": {
"cross-env": "^5.2.0",
@@ -43,11 +43,11 @@
"eslint-config-prettier": "^2.9.0",
"eslint-plugin-import": "^2.12.0",
"eslint-plugin-jest": "^21.17.0",
"eslint-plugin-prettier": "^2.6.0",
"eslint-plugin-prettier": "^2.6.1",
"jest": "^22.4.4",
"mongodb-memory-server": "^1.8.0",
"nodemon": "^1.17.5",
"prettier-eslint": "^8.8.1",
"prettier-eslint": "^8.8.2",
"supertest": "^3.1.0"
},
"jest": {

212
react/package-lock.json generated
View File

@@ -21,9 +21,9 @@
}
},
"@material-ui/core": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/@material-ui/core/-/core-1.2.1.tgz",
"integrity": "sha512-CG1jhJKUedImcdD8OdjQvDO89H/wUH5IVRYP1+cupr25iSpW84T/G0KHGPceoNRNUlbQpmuY98rffHQ7C74yvw==",
"version": "1.2.3",
"resolved": "https://registry.npmjs.org/@material-ui/core/-/core-1.2.3.tgz",
"integrity": "sha512-5Z4LhIrFJcvp1a7E8C3DPxL4W0RkjxWO9OwqOlRsr8YCF2sJgqCMDWn8DMW9eg1VD50JnZQ8bmx1esE0GBo71Q==",
"requires": {
"@babel/runtime": "^7.0.0-beta.42",
"@types/jss": "^9.5.3",
@@ -81,9 +81,9 @@
}
},
"@types/react": {
"version": "16.3.17",
"resolved": "https://registry.npmjs.org/@types/react/-/react-16.3.17.tgz",
"integrity": "sha512-f2ZTOSF7l9sRdXSbzLI84Z2wsVnj3qUjfJhtDLSi7lTWFMo1WSou7eQ2vkQga8100zhzzDjSyGbj+Viz7i927g==",
"version": "16.4.1",
"resolved": "https://registry.npmjs.org/@types/react/-/react-16.4.1.tgz",
"integrity": "sha512-uZP8Fd4f7rwHKztnOhFJYEJsKXO7opmcyKk5P9vRC8UJAx3AiWaGFiLxDqPJqzO3n3IhF/v6rdscxadarEXnag==",
"requires": {
"csstype": "^2.2.0"
}
@@ -2097,13 +2097,10 @@
"integrity": "sha1-30boZ9D8Kuxmo0ZitAapzK//Ww8="
},
"common-tags": {
"version": "1.7.2",
"resolved": "https://registry.npmjs.org/common-tags/-/common-tags-1.7.2.tgz",
"integrity": "sha512-joj9ZlUOjCrwdbmiLqafeUSgkUM74NqhLsZtSqDmhKudaIY197zTrb8JMl31fMnCUuxwFT23eC/oWvrZzDLRJQ==",
"dev": true,
"requires": {
"babel-runtime": "^6.26.0"
}
"version": "1.8.0",
"resolved": "https://registry.npmjs.org/common-tags/-/common-tags-1.8.0.tgz",
"integrity": "sha512-6P6g0uetGpW/sdyUy/iQQCbFF0kWVMSIVSyYz7Zgjcgh8mgw8PQzDNZeyZ5DQ2gM7LBoZPHmnjz8rUthkBG5tw==",
"dev": true
},
"commondir": {
"version": "1.0.1",
@@ -2590,9 +2587,9 @@
}
},
"csstype": {
"version": "2.5.3",
"resolved": "https://registry.npmjs.org/csstype/-/csstype-2.5.3.tgz",
"integrity": "sha512-G5HnoK8nOiAq3DXIEoY2n/8Vb7Lgrms+jGJl8E4EJpQEeVONEnPFJSl8IK505wPBoxxtrtHhrRm4WX2GgdqarA=="
"version": "2.5.5",
"resolved": "https://registry.npmjs.org/csstype/-/csstype-2.5.5.tgz",
"integrity": "sha512-EGMjeoiN3aqEX5u/cyH5mSdGBDGdLcCQvcEcBWNGFSPXKd9uOTIeVG91YQ22OxI44DKpvI+4C7VUSmEpsHWJaA=="
},
"currently-unhandled": {
"version": "0.4.1",
@@ -2806,9 +2803,9 @@
}
},
"dlv": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.1.tgz",
"integrity": "sha1-x52Wv+ZZpVaAASUO0qr2U5kr3T8=",
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.2.tgz",
"integrity": "sha512-xxD4VSH67GbRvSGUrckvha94RD7hjgOH7rqGxiytLpkaeMvixOHFZTGFK6EkIm3T761OVHT8ABHmGkq9gXgu6Q==",
"dev": true
},
"dns-equal": {
@@ -3503,6 +3500,12 @@
"estraverse": "^4.1.1"
}
},
"eslint-visitor-keys": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz",
"integrity": "sha512-qzm/XxIbxm/FHyH341ZrbnMUpe+5Bocte9xkmFMzPMjRaZMcXww+MpBptFvtU+79L362nqiLhekCxCxDPaUMBQ==",
"dev": true
},
"espree": {
"version": "3.5.4",
"resolved": "https://registry.npmjs.org/espree/-/espree-3.5.4.tgz",
@@ -4125,8 +4128,7 @@
},
"ansi-regex": {
"version": "2.1.1",
"bundled": true,
"optional": true
"bundled": true
},
"aproba": {
"version": "1.2.0",
@@ -4144,13 +4146,11 @@
},
"balanced-match": {
"version": "1.0.0",
"bundled": true,
"optional": true
"bundled": true
},
"brace-expansion": {
"version": "1.1.11",
"bundled": true,
"optional": true,
"requires": {
"balanced-match": "^1.0.0",
"concat-map": "0.0.1"
@@ -4163,18 +4163,15 @@
},
"code-point-at": {
"version": "1.1.0",
"bundled": true,
"optional": true
"bundled": true
},
"concat-map": {
"version": "0.0.1",
"bundled": true,
"optional": true
"bundled": true
},
"console-control-strings": {
"version": "1.1.0",
"bundled": true,
"optional": true
"bundled": true
},
"core-util-is": {
"version": "1.0.2",
@@ -4277,8 +4274,7 @@
},
"inherits": {
"version": "2.0.3",
"bundled": true,
"optional": true
"bundled": true
},
"ini": {
"version": "1.3.5",
@@ -4288,7 +4284,6 @@
"is-fullwidth-code-point": {
"version": "1.0.0",
"bundled": true,
"optional": true,
"requires": {
"number-is-nan": "^1.0.0"
}
@@ -4301,20 +4296,17 @@
"minimatch": {
"version": "3.0.4",
"bundled": true,
"optional": true,
"requires": {
"brace-expansion": "^1.1.7"
}
},
"minimist": {
"version": "0.0.8",
"bundled": true,
"optional": true
"bundled": true
},
"minipass": {
"version": "2.2.4",
"bundled": true,
"optional": true,
"requires": {
"safe-buffer": "^5.1.1",
"yallist": "^3.0.0"
@@ -4331,7 +4323,6 @@
"mkdirp": {
"version": "0.5.1",
"bundled": true,
"optional": true,
"requires": {
"minimist": "0.0.8"
}
@@ -4404,8 +4395,7 @@
},
"number-is-nan": {
"version": "1.0.1",
"bundled": true,
"optional": true
"bundled": true
},
"object-assign": {
"version": "4.1.1",
@@ -4415,7 +4405,6 @@
"once": {
"version": "1.4.0",
"bundled": true,
"optional": true,
"requires": {
"wrappy": "1"
}
@@ -4491,8 +4480,7 @@
},
"safe-buffer": {
"version": "5.1.1",
"bundled": true,
"optional": true
"bundled": true
},
"safer-buffer": {
"version": "2.1.2",
@@ -4522,7 +4510,6 @@
"string-width": {
"version": "1.0.2",
"bundled": true,
"optional": true,
"requires": {
"code-point-at": "^1.0.0",
"is-fullwidth-code-point": "^1.0.0",
@@ -4540,7 +4527,6 @@
"strip-ansi": {
"version": "3.0.1",
"bundled": true,
"optional": true,
"requires": {
"ansi-regex": "^2.0.0"
}
@@ -4579,13 +4565,11 @@
},
"wrappy": {
"version": "1.0.2",
"bundled": true,
"optional": true
"bundled": true
},
"yallist": {
"version": "3.0.2",
"bundled": true,
"optional": true
"bundled": true
}
}
},
@@ -6604,9 +6588,9 @@
}
},
"jss": {
"version": "9.8.3",
"resolved": "https://registry.npmjs.org/jss/-/jss-9.8.3.tgz",
"integrity": "sha512-3rywJZAmUTsxS07Af7ww3c4syWwXplQKhZnrgY4QIMuO5047LgF+heowaWdbbkykyREe3TauDcqp4wEpIlRLWw==",
"version": "9.8.7",
"resolved": "https://registry.npmjs.org/jss/-/jss-9.8.7.tgz",
"integrity": "sha512-awj3XRZYxbrmmrx9LUSj5pXSUfm12m8xzi/VKeqI1ZwWBtQ0kVPTs3vYs32t4rFw83CgFDukA8wKzOE9sMQnoQ==",
"requires": {
"is-in-browser": "^1.1.3",
"symbol-observable": "^1.1.0",
@@ -6897,9 +6881,9 @@
}
},
"localforage": {
"version": "1.7.1",
"resolved": "https://registry.npmjs.org/localforage/-/localforage-1.7.1.tgz",
"integrity": "sha1-5JJ+BCMCuGTbMPMhHxO1xvDell0=",
"version": "1.7.2",
"resolved": "https://registry.npmjs.org/localforage/-/localforage-1.7.2.tgz",
"integrity": "sha1-+kRCYC+Abt0rympUq05lbwMfEhw=",
"requires": {
"lie": "3.1.1"
}
@@ -6951,7 +6935,7 @@
"lodash.merge": {
"version": "4.6.1",
"resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.1.tgz",
"integrity": "sha1-rcJdnLmbk5HFliTzefu6YNcRHVQ=",
"integrity": "sha512-AOYza4+Hf5z1/0Hztxpm2/xiPZgi/cjMqdnKTUWTBSKchJlxXXuUSxCCl8rJlf4g6yww/j6mA8nC8Hw/EZWxKQ==",
"dev": true
},
"lodash.template": {
@@ -9071,15 +9055,15 @@
"integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks="
},
"prettier": {
"version": "1.12.1",
"resolved": "https://registry.npmjs.org/prettier/-/prettier-1.12.1.tgz",
"integrity": "sha1-wa0g6APndJ+vkFpAnSNn4Gu+cyU=",
"version": "1.13.5",
"resolved": "https://registry.npmjs.org/prettier/-/prettier-1.13.5.tgz",
"integrity": "sha512-4M90mfvLz6yRf2Dhzd+xPIE6b4xkI8nHMJhsSm9IlfG17g6wujrrm7+H1X8x52tC4cSNm6HmuhCUSNe6Hd5wfw==",
"dev": true
},
"prettier-eslint": {
"version": "8.8.1",
"resolved": "https://registry.npmjs.org/prettier-eslint/-/prettier-eslint-8.8.1.tgz",
"integrity": "sha1-OFBRYydHQvKgsxZTw55A8369B9o=",
"version": "8.8.2",
"resolved": "https://registry.npmjs.org/prettier-eslint/-/prettier-eslint-8.8.2.tgz",
"integrity": "sha512-2UzApPuxi2yRoyMlXMazgR6UcH9DKJhNgCviIwY3ixZ9THWSSrUww5vkiZ3C48WvpFl1M1y/oU63deSy1puWEA==",
"dev": true,
"requires": {
"babel-runtime": "^6.26.0",
@@ -9090,10 +9074,11 @@
"lodash.merge": "^4.6.0",
"loglevel-colored-level-prefix": "^1.0.0",
"prettier": "^1.7.0",
"pretty-format": "^22.0.3",
"pretty-format": "^23.0.1",
"require-relative": "^0.8.7",
"typescript": "^2.5.1",
"typescript-eslint-parser": "^11.0.0"
"typescript-eslint-parser": "^16.0.0",
"vue-eslint-parser": "^2.0.2"
},
"dependencies": {
"ansi-regex": {
@@ -9109,9 +9094,9 @@
"dev": true
},
"pretty-format": {
"version": "22.4.3",
"resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-22.4.3.tgz",
"integrity": "sha1-+HPXgIOanALpZkyKCC6e556qwW8=",
"version": "23.0.1",
"resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-23.0.1.tgz",
"integrity": "sha1-1h0GUmjkx1kIO8y8onoBrXx2AfQ=",
"dev": true,
"requires": {
"ansi-regex": "^3.0.0",
@@ -9172,11 +9157,10 @@
}
},
"prop-types": {
"version": "15.6.1",
"resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.6.1.tgz",
"integrity": "sha1-NmREU1ZCVd3aORGR+zoSXL32VMo=",
"version": "15.6.2",
"resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.6.2.tgz",
"integrity": "sha512-3pboPvLiWD7dkI3qf3KbUe6hKFKa52w+AE0VCqECtf+QHAKgOL37tTaNCnuX1nAAQ4ZhyP+kYVKf8rLmJ/feDQ==",
"requires": {
"fbjs": "^0.8.16",
"loose-envify": "^1.3.1",
"object-assign": "^4.1.1"
}
@@ -9416,23 +9400,13 @@
"integrity": "sha1-0ZhAioW0Bwk3qYZn9QDIMvhr1dQ="
},
"react-event-listener": {
"version": "0.6.0",
"resolved": "https://registry.npmjs.org/react-event-listener/-/react-event-listener-0.6.0.tgz",
"integrity": "sha512-CqewJSQ/0p09oPZ9BABNvoFhGMhUAuLQ4B4skPsZXxxgOBx+2SP3AgM9lP7zc68pRmJXlCQBDjgOAQsp1jnhAQ==",
"version": "0.6.1",
"resolved": "https://registry.npmjs.org/react-event-listener/-/react-event-listener-0.6.1.tgz",
"integrity": "sha1-QceoCmazmMJ91RHiJxKwLz1OzMo=",
"requires": {
"@babel/runtime": "^7.0.0-beta.42",
"prop-types": "^15.6.0",
"warning": "^3.0.0"
},
"dependencies": {
"warning": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/warning/-/warning-3.0.0.tgz",
"integrity": "sha1-MuU3fLVy3kqwR1O9+IIcAe1gW3w=",
"requires": {
"loose-envify": "^1.0.0"
}
}
"warning": "^4.0.1"
}
},
"react-jss": {
@@ -9685,9 +9659,9 @@
}
},
"react-spring": {
"version": "5.3.15",
"resolved": "https://registry.npmjs.org/react-spring/-/react-spring-5.3.15.tgz",
"integrity": "sha512-VP7m3Fptn2DdAyAKgoWE/nXMk+Tgu/ZPpgoHOVh8GExlQmFBH4FFjU5CI8zUZd/r0/Ez1wEVXdZzUpBXxGyRTw==",
"version": "5.3.18",
"resolved": "https://registry.npmjs.org/react-spring/-/react-spring-5.3.18.tgz",
"integrity": "sha512-gPLxo0wk1OYK1b3ZL9emWIAoWuQvTjuLDT8+yKXG+PTyEOYHvhaqEWShykL4bN6AUjPJyY4+7CLioHxJeAefZA==",
"requires": {
"@babel/runtime": "7.0.0-beta.49"
},
@@ -9863,9 +9837,9 @@
}
},
"redux-form": {
"version": "7.4.0",
"resolved": "https://registry.npmjs.org/redux-form/-/redux-form-7.4.0.tgz",
"integrity": "sha512-ppFEdbxS+HggJcS+HF37Gwyuh35/54hAZ2e1DvLBEzfw8sTqvas67A1YmfpK9thHj2XyLkwPOSbxgfObfkP+BQ==",
"version": "7.4.2",
"resolved": "https://registry.npmjs.org/redux-form/-/redux-form-7.4.2.tgz",
"integrity": "sha512-QxC36s4Lelx5Cr8dbpxqvl23dwYOydeAX8c6YPmgkz/Dhj053C16S2qoyZN6LO6HJ2oUF00rKsAyE94GwOUhFA==",
"requires": {
"es6-error": "^4.1.1",
"hoist-non-react-statics": "^2.5.4",
@@ -9873,13 +9847,14 @@
"is-promise": "^2.1.0",
"lodash": "^4.17.10",
"lodash-es": "^4.17.10",
"prop-types": "^15.6.1"
"prop-types": "^15.6.1",
"react-lifecycles-compat": "^3.0.4"
},
"dependencies": {
"hoist-non-react-statics": {
"version": "2.5.4",
"resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-2.5.4.tgz",
"integrity": "sha512-yklXtcYj0Pt5Dz9No8xUh7d+/7fy5XRIm+r7U/BXgwJ/VsD75EfXA8t4p9tIL0jykzo5A/sGzt1xV6oqd/gP0w=="
"version": "2.5.5",
"resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-2.5.5.tgz",
"integrity": "sha512-rqcy4pJo55FTTLWt+bU8ukscqHeE/e9KWvsOW2b/a3afxQZhwkQdT1rPPCJ0rYXdj4vNcasY8zHTH+jF/qStxw=="
}
}
},
@@ -11195,27 +11170,19 @@
"integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c="
},
"typescript": {
"version": "2.8.3",
"resolved": "https://registry.npmjs.org/typescript/-/typescript-2.8.3.tgz",
"integrity": "sha1-XYF/m28xu4cYNfTt8AifIavmwXA=",
"version": "2.9.2",
"resolved": "https://registry.npmjs.org/typescript/-/typescript-2.9.2.tgz",
"integrity": "sha512-Gr4p6nFNaoufRIY4NMdpQRNmgxVIGMs4Fcu/ujdYk3nAZqk7supzBE9idmvfZIlH/Cuj//dvi+019qEue9lV0w==",
"dev": true
},
"typescript-eslint-parser": {
"version": "11.0.0",
"resolved": "https://registry.npmjs.org/typescript-eslint-parser/-/typescript-eslint-parser-11.0.0.tgz",
"integrity": "sha1-N9umoBMN0wdQSqS0shsNPcfU6fI=",
"version": "16.0.0",
"resolved": "https://registry.npmjs.org/typescript-eslint-parser/-/typescript-eslint-parser-16.0.0.tgz",
"integrity": "sha512-ZYYVKlHWR/RMvTCah4WfrZclb2azZipW4sbaYLJjbh6jiYn81tLUZAw/WdVLlXxaCbIawaKCA44AJPMFVArKZQ==",
"dev": true,
"requires": {
"lodash.unescape": "4.0.1",
"semver": "5.4.1"
},
"dependencies": {
"semver": {
"version": "5.4.1",
"resolved": "https://registry.npmjs.org/semver/-/semver-5.4.1.tgz",
"integrity": "sha1-4FnAnYVx8FQII3M0M1BdOi8AsY4=",
"dev": true
}
"semver": "5.5.0"
}
},
"ua-parser-js": {
@@ -11569,6 +11536,31 @@
"indexof": "0.0.1"
}
},
"vue-eslint-parser": {
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-2.0.3.tgz",
"integrity": "sha512-ZezcU71Owm84xVF6gfurBQUGg8WQ+WZGxgDEQu1IHFBZNx7BFZg3L1yHxrCBNNwbwFtE1GuvfJKMtb6Xuwc/Bw==",
"dev": true,
"requires": {
"debug": "^3.1.0",
"eslint-scope": "^3.7.1",
"eslint-visitor-keys": "^1.0.0",
"espree": "^3.5.2",
"esquery": "^1.0.0",
"lodash": "^4.17.4"
},
"dependencies": {
"debug": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
"integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
"dev": true,
"requires": {
"ms": "2.0.0"
}
}
}
},
"walker": {
"version": "1.0.7",
"resolved": "https://registry.npmjs.org/walker/-/walker-1.0.7.tgz",

View File

@@ -3,20 +3,20 @@
"version": "0.1.0",
"private": true,
"dependencies": {
"@material-ui/core": "^1.2.1",
"@material-ui/core": "^1.2.3",
"@material-ui/icons": "^1.1.0",
"@redux-offline/redux-offline": "^2.3.3",
"localforage": "^1.7.1",
"prop-types": "^15.6.1",
"localforage": "^1.7.2",
"prop-types": "^15.6.2",
"react": "^16.4.1",
"react-dom": "^16.4.1",
"react-redux": "^5.0.7",
"react-router-dom": "^4.3.1",
"react-router-redux": "^4.0.8",
"react-scripts": "1.1.4",
"react-spring": "^5.3.15",
"react-spring": "^5.3.18",
"redux": "^4.0.0",
"redux-form": "^7.4.0",
"redux-form": "^7.4.2",
"redux-thunk": "^2.3.0"
},
"scripts": {
@@ -33,6 +33,6 @@
"eslint-plugin-jest": "^21.17.0",
"eslint-plugin-jsx-a11y": "^6.0.3",
"eslint-plugin-react": "^7.9.1",
"prettier-eslint": "^8.8.1"
"prettier-eslint": "^8.8.2"
}
}

View File

@@ -1,13 +1,13 @@
import React from 'react';
import FilterLink from '../containers/FilterLink';
import UserHeaderContainer from '../containers/UserHeaderContainer';
import UserHeader from '../components/UserHeader';
import { VisibilityFilters } from '../actions/todos';
import ListsContainer from '../containers/ListsContainer';
export default function Header() {
return (
<div id="header">
<UserHeaderContainer />
<UserHeader />
<div id="lists-header">
<ListsContainer />
<div id="filters">

View File

@@ -1,21 +1,10 @@
import React from 'react';
import PropTypes from 'prop-types';
import LogoutLink from '../containers/LogoutLink';
import FetchButton from '../containers/FetchButton';
import Status from '../containers/Status';
export default class UserHeader extends React.Component {
componentDidUpdate() {
if (
(this.props.dirtyLists || this.props.dirtyTodos) &&
!this.props.fetchingLists
) {
this.props.fetchLists();
}
}
render() {
export default function UserHeader() {
return (
<div id="user-header">
<FetchButton>sync</FetchButton>
@@ -24,11 +13,3 @@ export default class UserHeader extends React.Component {
</div>
);
}
}
UserHeader.propTypes = {
dirtyLists: PropTypes.bool.isRequired,
dirtyTodos: PropTypes.bool.isRequired,
fetchingLists: PropTypes.bool.isRequired,
fetchLists: PropTypes.func.isRequired,
};

View File

@@ -1,23 +0,0 @@
import { connect } from 'react-redux';
import UserHeader from '../components/UserHeader';
import { fetchLists } from '../actions/lists';
function mapStateToProps(state) {
return {
user: state.user,
dirtyLists: state.lists.dirty,
dirtyTodos: state.todos.dirty,
fetchingLists: state.lists.fetching,
};
}
function mapDispatchToProps(dispatch) {
return {
fetchLists: () => dispatch(fetchLists()),
};
}
export default connect(
mapStateToProps,
mapDispatchToProps,
)(UserHeader);

View File

@@ -10,6 +10,7 @@ import AppContainer from './containers/AppContainer';
import registerServiceWorker from './registerServiceWorker';
import todoApp from './reducers';
import { setToken } from './actions/util';
import keepSynced from './middleware/keepSynced';
let store;
@@ -29,8 +30,8 @@ const persistCallback = () => {
store = createStore(
todoApp,
compose(
applyMiddleware(thunk),
offline({ ...offlineConfig, persistCallback }),
applyMiddleware(thunk, keepSynced),
),
);

View File

@@ -0,0 +1,19 @@
import { fetchLists, REQUEST_LISTS, INVALIDATE_LISTS } from '../actions/lists';
export default store => next => action => {
next(action);
if (action.type !== REQUEST_LISTS && typeof action !== 'function') {
const state = store.getState();
if (state.user.user) {
const dirtyLists = state.lists.dirty || false;
const dirtyTodos = state.todos.dirty || false;
const fetchingLists = state.lists.fetching || false;
if (
((dirtyLists || dirtyTodos) && !fetchingLists) ||
action.type === INVALIDATE_LISTS
) {
store.dispatch(fetchLists());
}
}
}
};