diff --git a/.eslintrc.json b/.eslintrc.json index 28e542bd..215d6491 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -16,7 +16,8 @@ "react/display-name": "off", "react/react-in-jsx-scope": "off", "react/prop-types": "off", - "import/no-anonymous-default-export": "off" + "import/no-anonymous-default-export": "off", + "@next/next/no-img-element": "off" }, "globals": { "React": "writable" diff --git a/components/common/UpdateNotice.js b/components/common/UpdateNotice.js index a2963995..a5036808 100644 --- a/components/common/UpdateNotice.js +++ b/components/common/UpdateNotice.js @@ -3,12 +3,12 @@ import { FormattedMessage } from 'react-intl'; import ButtonLayout from 'components/layout/ButtonLayout'; import useStore, { checkVersion } from 'store/version'; import { setItem } from 'lib/web'; -import { VERSION_CHECK, VERSION_URL } from 'lib/constants'; +import { REPO_URL, VERSION_CHECK } from 'lib/constants'; import Button from './Button'; import styles from './UpdateNotice.module.css'; export default function UpdateNotice() { - const { latest, checked, hasUpdate } = useStore(); + const { latest, checked, hasUpdate, releaseUrl } = useStore(); const [dismissed, setDismissed] = useState(false); const updateCheck = useCallback(() => { @@ -18,7 +18,7 @@ export default function UpdateNotice() { function handleViewClick() { updateCheck(); setDismissed(true); - location.href = VERSION_URL; + location.href = releaseUrl || REPO_URL; } function handleDismissClick() { diff --git a/components/layout/Footer.js b/components/layout/Footer.js index 21ce0573..ff7db96c 100644 --- a/components/layout/Footer.js +++ b/components/layout/Footer.js @@ -4,7 +4,7 @@ import { FormattedMessage } from 'react-intl'; import Link from 'components/common/Link'; import styles from './Footer.module.css'; import useStore from 'store/version'; -import { HOMEPAGE_URL, VERSION_URL } from 'lib/constants'; +import { HOMEPAGE_URL, REPO_URL } from 'lib/constants'; export default function Footer() { const { current } = useStore(); @@ -26,8 +26,11 @@ export default function Footer() { />
+ )}
);
}
diff --git a/lib/constants.js b/lib/constants.js
index 13af1f32..2b332b21 100644
--- a/lib/constants.js
+++ b/lib/constants.js
@@ -7,7 +7,8 @@ export const DASHBOARD_CONFIG = 'umami.dashboard';
export const VERSION_CHECK = 'umami.version-check';
export const SHARE_TOKEN_HEADER = 'x-umami-share-token';
export const HOMEPAGE_URL = 'https://umami.is';
-export const VERSION_URL = 'https://github.com/mikecao/umami/releases';
+export const REPO_URL = 'https://github.com/umami-software/umami';
+export const UPDATES_URL = 'https://api.umami.is/v1/updates';
export const DEFAULT_LOCALE = 'en-US';
export const DEFAULT_THEME = 'light';
diff --git a/lib/db.js b/lib/db.js
index 12bfd6d3..b44b4d3e 100644
--- a/lib/db.js
+++ b/lib/db.js
@@ -2,7 +2,7 @@ import { PrismaClient } from '@prisma/client';
import chalk from 'chalk';
BigInt.prototype.toJSON = function () {
- return this.toString();
+ return Number(this);
};
const options = {
@@ -18,20 +18,20 @@ function logQuery(e) {
console.log(chalk.yellow(e.params), '->', e.query, chalk.greenBright(`${e.duration}ms`));
}
-let prisma;
+function getClient(options) {
+ const prisma = new PrismaClient(options);
-if (process.env.NODE_ENV === 'production') {
- prisma = new PrismaClient(options);
-} else {
- if (!global.prisma) {
- global.prisma = new PrismaClient(options);
+ if (process.env.LOG_QUERY) {
+ prisma.$on('query', logQuery);
}
- prisma = global.prisma;
+ return prisma;
}
-if (process.env.LOG_QUERY) {
- prisma.$on('query', logQuery);
+const prisma = global.prisma || getClient(options);
+
+if (process.env.NODE_ENV !== 'production') {
+ global.prisma = prisma;
}
export default prisma;
diff --git a/next.config.js b/next.config.js
index f8186f3a..10624451 100644
--- a/next.config.js
+++ b/next.config.js
@@ -6,6 +6,7 @@ module.exports = {
currentVersion: pkg.version,
loginDisabled: process.env.DISABLE_LOGIN,
updatesDisabled: process.env.DISABLE_UPDATES,
+ telemetryDisabled: process.env.DISABLE_TELEMETRY,
},
basePath: process.env.BASE_PATH,
output: 'standalone',
diff --git a/store/version.js b/store/version.js
index 00f4f433..c809aa88 100644
--- a/store/version.js
+++ b/store/version.js
@@ -1,16 +1,15 @@
import create from 'zustand';
import produce from 'immer';
import semver from 'semver';
-import { VERSION_CHECK } from 'lib/constants';
+import { VERSION_CHECK, UPDATES_URL } from 'lib/constants';
import { getItem } from 'lib/web';
-const UPDATES_URL = 'https://api.umami.is/v1/updates';
-
const initialState = {
current: process.env.currentVersion,
latest: null,
hasUpdate: false,
checked: false,
+ releaseUrl: null,
};
const store = create(() => ({ ...initialState }));
@@ -37,7 +36,7 @@ export async function checkVersion() {
store.setState(
produce(state => {
- const { latest } = data;
+ const { latest, url } = data;
const lastCheck = getItem(VERSION_CHECK);
const hasUpdate = !!(latest && lastCheck?.version !== latest && semver.gt(latest, current));
@@ -46,6 +45,7 @@ export async function checkVersion() {
state.latest = latest;
state.hasUpdate = hasUpdate;
state.checked = true;
+ state.releaseUrl = url;
return state;
}),