From 66e0ba82a9f1a1196c65c1546ba7c4886da762ca Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bal=C3=A1zs=20Orb=C3=A1n?= Date: Fri, 16 Apr 2021 00:14:25 +0200 Subject: [PATCH 1/2] chore(deps): add optional-require --- package-lock.json | 3 +-- package.json | 1 + 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/package-lock.json b/package-lock.json index 998c95511e..639e51b87e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -14081,8 +14081,7 @@ "optional-require": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/optional-require/-/optional-require-1.0.3.tgz", - "integrity": "sha512-RV2Zp2MY2aeYK5G+B/Sps8lW5NHAzE5QClbFP15j+PWmP+T9PxlJXBOOLoSAdgwFvS4t0aMR4vpedMkbHfh0nA==", - "dev": true + "integrity": "sha512-RV2Zp2MY2aeYK5G+B/Sps8lW5NHAzE5QClbFP15j+PWmP+T9PxlJXBOOLoSAdgwFvS4t0aMR4vpedMkbHfh0nA==" }, "optionator": { "version": "0.9.1", diff --git a/package.json b/package.json index 60552d85f0..adae77214d 100644 --- a/package.json +++ b/package.json @@ -55,6 +55,7 @@ "jose": "^1.27.2", "jsonwebtoken": "^8.5.1", "oauth": "^0.9.15", + "optional-require": "^1.0.3", "pkce-challenge": "^2.1.0", "preact": "^10.4.1", "preact-render-to-string": "^5.1.14" From 47dc50c089404f866c4759851bb26a48abb0e099 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bal=C3=A1zs=20Orb=C3=A1n?= Date: Fri, 16 Apr 2021 00:14:46 +0200 Subject: [PATCH 2/2] refactor: use optional-require --- src/adapters/typeorm/index.js | 4 +++- src/providers/email.js | 3 ++- src/server/index.js | 4 +++- 3 files changed, 8 insertions(+), 3 deletions(-) diff --git a/src/adapters/typeorm/index.js b/src/adapters/typeorm/index.js index 92711ad9f9..69e268e3c9 100644 --- a/src/adapters/typeorm/index.js +++ b/src/adapters/typeorm/index.js @@ -8,6 +8,8 @@ import Models from './models' import { updateConnectionEntities } from './lib/utils' +import optionalRequire from 'optional-require' + const Adapter = (typeOrmConfig, options = {}) => { // Ensure typeOrmConfigObject is normalized to an object const typeOrmConfigObject = (typeof typeOrmConfig === 'string') @@ -93,7 +95,7 @@ const Adapter = (typeOrmConfig, options = {}) => { let ObjectId if (config.type === 'mongodb') { idKey = '_id' - const mongodb = (await import('mongodb')).default + const mongodb = optionalRequire('mongodb') ObjectId = mongodb.ObjectID } diff --git a/src/providers/email.js b/src/providers/email.js index 4370f2fc34..17037e695a 100644 --- a/src/providers/email.js +++ b/src/providers/email.js @@ -1,4 +1,5 @@ import logger from '../lib/logger' +import optionalRequire from 'optional-require' export default (options) => { return { @@ -26,7 +27,7 @@ async function sendVerificationRequest ({ identifier: email, url, baseUrl, provi // Strip protocol from URL and use domain as site name const site = baseUrl.replace(/^https?:\/\//, '') try { - const nodemailer = (await import('nodemailer')).default + const nodemailer = optionalRequire('nodemailer') await nodemailer .createTransport(server) .sendMail({ diff --git a/src/server/index.js b/src/server/index.js index 039e527b9c..11aacc2cb1 100644 --- a/src/server/index.js +++ b/src/server/index.js @@ -14,6 +14,8 @@ import csrfTokenHandler from './lib/csrf-token-handler' import * as pkce from './lib/oauth/pkce-handler' import * as state from './lib/oauth/state-handler' +import optionalRequire from 'optional-require' + // To work properly in production with OAuth providers the NEXTAUTH_URL // environment variable must be set. if (!process.env.NEXTAUTH_URL) { @@ -87,7 +89,7 @@ async function NextAuthHandler (req, res, userOptions) { // If database URI or config object is provided, use it (simple usage) let adapter = userOptions.adapter if ((!adapter && !!userOptions.database)) { - const TypeOrm = (await import('../adapters/typeorm')).default + const TypeOrm = optionalRequire('../adapters/typeorm') adapter = TypeOrm.Adapter(userOptions.database) }