From 1adaa9f5c4d311b2b826a8f7e229bee82b5147bb Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 28 Dec 2021 03:01:01 +0000 Subject: [PATCH 01/32] Bump mongoose from 6.1.3 to 6.1.4 Bumps [mongoose](https://github.com/Automattic/mongoose) from 6.1.3 to 6.1.4. - [Release notes](https://github.com/Automattic/mongoose/releases) - [Changelog](https://github.com/Automattic/mongoose/blob/master/CHANGELOG.md) - [Commits](https://github.com/Automattic/mongoose/compare/6.1.3...6.1.4) --- updated-dependencies: - dependency-name: mongoose dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- package-lock.json | 30 +++++++++++++++--------------- package.json | 2 +- 2 files changed, 16 insertions(+), 16 deletions(-) diff --git a/package-lock.json b/package-lock.json index 487a2daf8..99724b4e7 100644 --- a/package-lock.json +++ b/package-lock.json @@ -32,7 +32,7 @@ "marked-extended-tables": "^1.0.3", "markedLegacy": "npm:marked@^0.3.19", "moment": "^2.29.1", - "mongoose": "^6.1.3", + "mongoose": "^6.1.4", "nanoid": "3.1.30", "nconf": "^0.11.3", "prop-types": "15.8.0", @@ -5851,9 +5851,9 @@ } }, "node_modules/kareem": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/kareem/-/kareem-2.3.2.tgz", - "integrity": "sha512-STHz9P7X2L4Kwn72fA4rGyqyXdmrMSdxqHx9IXon/FXluXieaFA6KJ2upcHAHxQPQ0LeM/OjLrhFxifHewOALQ==" + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/kareem/-/kareem-2.3.3.tgz", + "integrity": "sha512-uESCXM2KdtOQ8LOvKyTUXEeg0MkYp4wGglTIpGcYHvjJcS5sn2Wkfrfit8m4xSbaNDAw2KdI9elgkOxZbrFYbg==" }, "node_modules/keyv": { "version": "3.1.0", @@ -6413,12 +6413,12 @@ } }, "node_modules/mongoose": { - "version": "6.1.3", - "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-6.1.3.tgz", - "integrity": "sha512-EK3IBmQcIZEhnX3HQYge82hF0ukAnrxnJovBUFwAEkoe3SZ3VJb2k1eMF4MOKEo5mF/h3auxzKJhItaXc3dfmg==", + "version": "6.1.4", + "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-6.1.4.tgz", + "integrity": "sha512-RsNiMpGWo7OXFmq5xt0ZWYt2rabHLxNYr0oAiR0xDv23lHKCkXDqyDl71+sXF9rcWEe8BTHG+1IRQykiNBvaKQ==", "dependencies": { "bson": "^4.2.2", - "kareem": "2.3.2", + "kareem": "2.3.3", "mongodb": "4.2.2", "mpath": "0.8.4", "mquery": "4.0.0", @@ -13909,9 +13909,9 @@ "integrity": "sha512-40aUybvhH9t2h71ncA1/1SbtTNCVZHgsTsTgqPUxGWDmUDrXyDf2wMNQKEbdBjbf4AI+fQhbECNTV6lWxQKUzg==" }, "kareem": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/kareem/-/kareem-2.3.2.tgz", - "integrity": "sha512-STHz9P7X2L4Kwn72fA4rGyqyXdmrMSdxqHx9IXon/FXluXieaFA6KJ2upcHAHxQPQ0LeM/OjLrhFxifHewOALQ==" + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/kareem/-/kareem-2.3.3.tgz", + "integrity": "sha512-uESCXM2KdtOQ8LOvKyTUXEeg0MkYp4wGglTIpGcYHvjJcS5sn2Wkfrfit8m4xSbaNDAw2KdI9elgkOxZbrFYbg==" }, "keyv": { "version": "3.1.0", @@ -14351,12 +14351,12 @@ } }, "mongoose": { - "version": "6.1.3", - "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-6.1.3.tgz", - "integrity": "sha512-EK3IBmQcIZEhnX3HQYge82hF0ukAnrxnJovBUFwAEkoe3SZ3VJb2k1eMF4MOKEo5mF/h3auxzKJhItaXc3dfmg==", + "version": "6.1.4", + "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-6.1.4.tgz", + "integrity": "sha512-RsNiMpGWo7OXFmq5xt0ZWYt2rabHLxNYr0oAiR0xDv23lHKCkXDqyDl71+sXF9rcWEe8BTHG+1IRQykiNBvaKQ==", "requires": { "bson": "^4.2.2", - "kareem": "2.3.2", + "kareem": "2.3.3", "mongodb": "4.2.2", "mpath": "0.8.4", "mquery": "4.0.0", diff --git a/package.json b/package.json index 0d419053c..1eb72583a 100644 --- a/package.json +++ b/package.json @@ -63,7 +63,7 @@ "marked-extended-tables": "^1.0.3", "markedLegacy": "npm:marked@^0.3.19", "moment": "^2.29.1", - "mongoose": "^6.1.3", + "mongoose": "^6.1.4", "nanoid": "3.1.30", "nconf": "^0.11.3", "prop-types": "15.8.0", From 6e04535eff44c75863b547207e08edfe522af893 Mon Sep 17 00:00:00 2001 From: Alexey Sachkov Date: Wed, 29 Dec 2021 19:01:03 +0300 Subject: [PATCH 02/32] [NFC] Outline database connection into a separate file --- server.js | 14 ++++---------- server/db.js | 37 +++++++++++++++++++++++++++++++++++++ 2 files changed, 41 insertions(+), 10 deletions(-) create mode 100644 server/db.js diff --git a/server.js b/server.js index 4c4cb6f63..7b87ae83e 100644 --- a/server.js +++ b/server.js @@ -77,16 +77,10 @@ const config = require('nconf') .file('environment', { file: `config/${process.env.NODE_ENV}.json` }) .file('defaults', { file: 'config/default.json' }); -//DB -const mongoose = require('mongoose'); -mongoose.connect(config.get('mongodb_uri') || config.get('mongolab_uri') || 'mongodb://localhost/naturalcrit', - { retryWrites: false }); -mongoose.connection.on('error', (err)=>{ - console.log('Error : Could not connect to a Mongo Database.'); - console.log(' If you are running locally, make sure mongodb.exe is running.'); - console.log(err); - throw 'Can not connect to Mongo'; -}); +// DB +const DB = require('./server/db.js'); +// FIXME: consider implementing error hanlding for a Promise returned by connect +DB.connect(config); //Account Middleware app.use((req, res, next)=>{ diff --git a/server/db.js b/server/db.js new file mode 100644 index 000000000..7adf3a58f --- /dev/null +++ b/server/db.js @@ -0,0 +1,37 @@ +const Mongoose = require('mongoose'); + +const getMongoDBURL = (config)=>{ + return config.get('mongodb_uri') || + config.get('mongolab_uri') || + 'mongodb://localhost/homebrewery'; +}; + +const disconnect = ()=>{ + return Mongoose.close(); +}; + +const connect = (config)=>{ + const resolver = (resolve, reject)=>{ + Mongoose.connect(getMongoDBURL(config), + { retryWrites: false }, + (error)=>{ + if(error) { + console.error('Could not connect to a Mongo Database.'); + console.log(error); + console.error('If you are running locally, make sure mongodb.exe is running.'); + // FIXME: do we need to pass 'error' to 'reject'? + return reject(); + } + + return resolve(); + }); + + }; + + return new Promise(resolver); +}; + +module.exports = { + connect : connect, + disconnect : disconnect +}; From 8a3f52b704e5697b70dffa7b9d7864cafd4de982 Mon Sep 17 00:00:00 2001 From: Alexey Sachkov Date: Wed, 29 Dec 2021 21:18:54 +0300 Subject: [PATCH 03/32] [NFC] Add display name for custom React components This improves readability of "Components" tab from React Development Tools extension for Chrome --- client/homebrew/brewRenderer/brewRenderer.jsx | 1 + client/homebrew/brewRenderer/errorBar/errorBar.jsx | 1 + .../brewRenderer/notificationPopup/notificationPopup.jsx | 1 + client/homebrew/editor/editor.jsx | 1 + client/homebrew/editor/metadataEditor/metadataEditor.jsx | 1 + client/homebrew/editor/snippetbar/snippetbar.jsx | 2 ++ client/homebrew/homebrew.jsx | 1 + client/homebrew/navbar/account.navitem.jsx | 2 +- client/homebrew/navbar/editTitle.navitem.jsx | 1 + client/homebrew/navbar/navbar.jsx | 1 + client/homebrew/navbar/recent.navitem.jsx | 2 +- client/homebrew/navbar/reddit.navitem.jsx | 1 + client/homebrew/pages/editPage/editPage.jsx | 1 + client/homebrew/pages/homePage/homePage.jsx | 1 + client/homebrew/pages/newPage/newPage.jsx | 1 + client/homebrew/pages/printPage/printPage.jsx | 1 + client/homebrew/pages/sharePage/sharePage.jsx | 1 + client/homebrew/pages/userPage/brewItem/brewItem.jsx | 1 + client/homebrew/pages/userPage/userPage.jsx | 1 + shared/homebrewery/renderWarnings/renderWarnings.jsx | 1 + shared/naturalcrit/codeEditor/codeEditor.jsx | 1 + shared/naturalcrit/nav/nav.jsx | 4 ++++ shared/naturalcrit/splitPane/splitPane.jsx | 2 ++ 23 files changed, 28 insertions(+), 2 deletions(-) diff --git a/client/homebrew/brewRenderer/brewRenderer.jsx b/client/homebrew/brewRenderer/brewRenderer.jsx index ad767ad9f..85439c0a1 100644 --- a/client/homebrew/brewRenderer/brewRenderer.jsx +++ b/client/homebrew/brewRenderer/brewRenderer.jsx @@ -17,6 +17,7 @@ const PAGE_HEIGHT = 1056; const PPR_THRESHOLD = 50; const BrewRenderer = createClass({ + displayName : 'BrewRenderer', getDefaultProps : function() { return { text : '', diff --git a/client/homebrew/brewRenderer/errorBar/errorBar.jsx b/client/homebrew/brewRenderer/errorBar/errorBar.jsx index 971903211..1b7a6df60 100644 --- a/client/homebrew/brewRenderer/errorBar/errorBar.jsx +++ b/client/homebrew/brewRenderer/errorBar/errorBar.jsx @@ -5,6 +5,7 @@ const _ = require('lodash'); const cx = require('classnames'); const ErrorBar = createClass({ + displayName : 'ErrorBar', getDefaultProps : function() { return { errors : [] diff --git a/client/homebrew/brewRenderer/notificationPopup/notificationPopup.jsx b/client/homebrew/brewRenderer/notificationPopup/notificationPopup.jsx index 819bf53d3..16519c9c1 100644 --- a/client/homebrew/brewRenderer/notificationPopup/notificationPopup.jsx +++ b/client/homebrew/brewRenderer/notificationPopup/notificationPopup.jsx @@ -7,6 +7,7 @@ const cx = require('classnames'); //Unused variable const DISMISS_KEY = 'dismiss_notification09-9-21'; const NotificationPopup = createClass({ + displayName : 'NotificationPopup', getInitialState : function() { return { notifications : {} diff --git a/client/homebrew/editor/editor.jsx b/client/homebrew/editor/editor.jsx index 9b7c27c34..ef0fe90ee 100644 --- a/client/homebrew/editor/editor.jsx +++ b/client/homebrew/editor/editor.jsx @@ -26,6 +26,7 @@ const splice = function(str, index, inject){ const Editor = createClass({ + displayName : 'Editor', getDefaultProps : function() { return { brew : { diff --git a/client/homebrew/editor/metadataEditor/metadataEditor.jsx b/client/homebrew/editor/metadataEditor/metadataEditor.jsx index c7dea871b..8893afc2e 100644 --- a/client/homebrew/editor/metadataEditor/metadataEditor.jsx +++ b/client/homebrew/editor/metadataEditor/metadataEditor.jsx @@ -8,6 +8,7 @@ const request = require('superagent'); const SYSTEMS = ['5e', '4e', '3.5e', 'Pathfinder']; const MetadataEditor = createClass({ + displayName : 'MetadataEditor', getDefaultProps : function() { return { metadata : { diff --git a/client/homebrew/editor/snippetbar/snippetbar.jsx b/client/homebrew/editor/snippetbar/snippetbar.jsx index a294bbb26..5c505b686 100644 --- a/client/homebrew/editor/snippetbar/snippetbar.jsx +++ b/client/homebrew/editor/snippetbar/snippetbar.jsx @@ -14,6 +14,7 @@ const execute = function(val, brew){ }; const Snippetbar = createClass({ + displayName : 'SnippetBar', getDefaultProps : function() { return { brew : {}, @@ -103,6 +104,7 @@ module.exports = Snippetbar; const SnippetGroup = createClass({ + displayName : 'SnippetGroup', getDefaultProps : function() { return { brew : {}, diff --git a/client/homebrew/homebrew.jsx b/client/homebrew/homebrew.jsx index f6fe26b61..933d863ff 100644 --- a/client/homebrew/homebrew.jsx +++ b/client/homebrew/homebrew.jsx @@ -13,6 +13,7 @@ const NewPage = require('./pages/newPage/newPage.jsx'); const PrintPage = require('./pages/printPage/printPage.jsx'); const Homebrew = createClass({ + displayName : 'Homebrewery', getDefaultProps : function() { return { url : '', diff --git a/client/homebrew/navbar/account.navitem.jsx b/client/homebrew/navbar/account.navitem.jsx index 60129dc80..8168ed9ef 100644 --- a/client/homebrew/navbar/account.navitem.jsx +++ b/client/homebrew/navbar/account.navitem.jsx @@ -3,7 +3,7 @@ const createClass = require('create-react-class'); const Nav = require('naturalcrit/nav/nav.jsx'); const Account = createClass({ - + displayName : 'AccountNavItem', getInitialState : function() { return { url : '' diff --git a/client/homebrew/navbar/editTitle.navitem.jsx b/client/homebrew/navbar/editTitle.navitem.jsx index c87acf868..47b8be56c 100644 --- a/client/homebrew/navbar/editTitle.navitem.jsx +++ b/client/homebrew/navbar/editTitle.navitem.jsx @@ -7,6 +7,7 @@ const MAX_TITLE_LENGTH = 50; const EditTitle = createClass({ + displayName : 'EditTitleNavItem', getDefaultProps : function() { return { title : '', diff --git a/client/homebrew/navbar/navbar.jsx b/client/homebrew/navbar/navbar.jsx index a61fb9d0b..8de04c9e0 100644 --- a/client/homebrew/navbar/navbar.jsx +++ b/client/homebrew/navbar/navbar.jsx @@ -6,6 +6,7 @@ const Nav = require('naturalcrit/nav/nav.jsx'); const PatreonNavItem = require('./patreon.navitem.jsx'); const Navbar = createClass({ + displayName : 'Navbar', getInitialState : function() { return { //showNonChromeWarning : false, diff --git a/client/homebrew/navbar/recent.navitem.jsx b/client/homebrew/navbar/recent.navitem.jsx index e386d9caf..a11b602f7 100644 --- a/client/homebrew/navbar/recent.navitem.jsx +++ b/client/homebrew/navbar/recent.navitem.jsx @@ -10,7 +10,7 @@ const VIEW_KEY = 'homebrewery-recently-viewed'; const RecentItems = createClass({ - + DisplayName : 'RecentItems', getDefaultProps : function() { return { storageKey : '', diff --git a/client/homebrew/navbar/reddit.navitem.jsx b/client/homebrew/navbar/reddit.navitem.jsx index 60762883c..9c0d18cd3 100644 --- a/client/homebrew/navbar/reddit.navitem.jsx +++ b/client/homebrew/navbar/reddit.navitem.jsx @@ -8,6 +8,7 @@ const MAIN_URL = 'https://www.reddit.com/r/UnearthedArcana/submit?selftext=true' const RedditShare = createClass({ + displayName : 'RedditShareNavItem', getDefaultProps : function() { return { brew : { diff --git a/client/homebrew/pages/editPage/editPage.jsx b/client/homebrew/pages/editPage/editPage.jsx index 1adccbd8b..029ed2039 100644 --- a/client/homebrew/pages/editPage/editPage.jsx +++ b/client/homebrew/pages/editPage/editPage.jsx @@ -27,6 +27,7 @@ const googleDriveInactive = require('../../googleDriveMono.png'); const SAVE_TIMEOUT = 3000; const EditPage = createClass({ + displayName : 'EditPage', getDefaultProps : function() { return { brew : { diff --git a/client/homebrew/pages/homePage/homePage.jsx b/client/homebrew/pages/homePage/homePage.jsx index c46d451eb..5f2d71670 100644 --- a/client/homebrew/pages/homePage/homePage.jsx +++ b/client/homebrew/pages/homePage/homePage.jsx @@ -21,6 +21,7 @@ const BrewRenderer = require('../../brewRenderer/brewRenderer.jsx'); const HomePage = createClass({ + displayName : 'HomePage', getDefaultProps : function() { return { brew : { diff --git a/client/homebrew/pages/newPage/newPage.jsx b/client/homebrew/pages/newPage/newPage.jsx index 73f29853b..69425a609 100644 --- a/client/homebrew/pages/newPage/newPage.jsx +++ b/client/homebrew/pages/newPage/newPage.jsx @@ -23,6 +23,7 @@ const METAKEY = 'homebrewery-new-meta'; const NewPage = createClass({ + displayName : 'NewPage', getDefaultProps : function() { return { brew : { diff --git a/client/homebrew/pages/printPage/printPage.jsx b/client/homebrew/pages/printPage/printPage.jsx index e5b7160c6..44cdb5510 100644 --- a/client/homebrew/pages/printPage/printPage.jsx +++ b/client/homebrew/pages/printPage/printPage.jsx @@ -12,6 +12,7 @@ const STYLEKEY = 'homebrewery-new-style'; const METAKEY = 'homebrewery-new-meta'; const PrintPage = createClass({ + displayName : 'PrintPage', getDefaultProps : function() { return { query : {}, diff --git a/client/homebrew/pages/sharePage/sharePage.jsx b/client/homebrew/pages/sharePage/sharePage.jsx index 42ead0693..f05f6eb83 100644 --- a/client/homebrew/pages/sharePage/sharePage.jsx +++ b/client/homebrew/pages/sharePage/sharePage.jsx @@ -14,6 +14,7 @@ const BrewRenderer = require('../../brewRenderer/brewRenderer.jsx'); const SharePage = createClass({ + displayName : 'SharePage', getDefaultProps : function() { return { brew : { diff --git a/client/homebrew/pages/userPage/brewItem/brewItem.jsx b/client/homebrew/pages/userPage/brewItem/brewItem.jsx index 497cef7a3..b099c9f9c 100644 --- a/client/homebrew/pages/userPage/brewItem/brewItem.jsx +++ b/client/homebrew/pages/userPage/brewItem/brewItem.jsx @@ -10,6 +10,7 @@ const googleDriveIcon = require('../../../googleDrive.png'); const dedent = require('dedent-tabs').default; const BrewItem = createClass({ + displayName : 'BrewItem', getDefaultProps : function() { return { brew : { diff --git a/client/homebrew/pages/userPage/userPage.jsx b/client/homebrew/pages/userPage/userPage.jsx index 3ef0d0340..96913e8b0 100644 --- a/client/homebrew/pages/userPage/userPage.jsx +++ b/client/homebrew/pages/userPage/userPage.jsx @@ -24,6 +24,7 @@ const ReportIssue = require('../../navbar/issue.navitem.jsx'); const UserPage = createClass({ + displayName : 'UserPage', getDefaultProps : function() { return { username : '', diff --git a/shared/homebrewery/renderWarnings/renderWarnings.jsx b/shared/homebrewery/renderWarnings/renderWarnings.jsx index 3fd290260..f93f70bad 100644 --- a/shared/homebrewery/renderWarnings/renderWarnings.jsx +++ b/shared/homebrewery/renderWarnings/renderWarnings.jsx @@ -7,6 +7,7 @@ const cx = require('classnames'); const DISMISS_KEY = 'dismiss_render_warning'; const RenderWarnings = createClass({ + displayName : 'RenderWarnings', getInitialState : function() { return { warnings : {} diff --git a/shared/naturalcrit/codeEditor/codeEditor.jsx b/shared/naturalcrit/codeEditor/codeEditor.jsx index 6d756fd6f..21fa69b14 100644 --- a/shared/naturalcrit/codeEditor/codeEditor.jsx +++ b/shared/naturalcrit/codeEditor/codeEditor.jsx @@ -40,6 +40,7 @@ if(typeof navigator !== 'undefined'){ } const CodeEditor = createClass({ + displayName : 'CodeEditor', getDefaultProps : function() { return { language : '', diff --git a/shared/naturalcrit/nav/nav.jsx b/shared/naturalcrit/nav/nav.jsx index 11e67e32c..12bde1c50 100644 --- a/shared/naturalcrit/nav/nav.jsx +++ b/shared/naturalcrit/nav/nav.jsx @@ -8,6 +8,7 @@ const NaturalCritIcon = require('naturalcrit/svg/naturalcrit.svg.jsx'); const Nav = { base : createClass({ + displayName : 'Nav.base', render : function(){ return