drop more dependencies + remove updater

pull/680/head
Philipp Dormann 2021-05-22 18:10:20 +02:00
parent e667928863
commit 8965d60516
8 changed files with 1122 additions and 890 deletions

View File

@ -1,47 +0,0 @@
import React from 'react';
import { FormattedMessage } from 'react-intl';
import useVersion from 'hooks/useVersion';
import styles from './UpdateNotice.module.css';
import ButtonLayout from '../layout/ButtonLayout';
import Button from './Button';
import useForceUpdate from '../../hooks/useForceUpdate';
export default function UpdateNotice() {
const forceUpdate = useForceUpdate();
const { hasUpdate, checked, latest, updateCheck } = useVersion(true);
function handleViewClick() {
location.href = 'https://github.com/mikecao/umami/releases';
updateCheck();
forceUpdate();
}
function handleDismissClick() {
updateCheck();
forceUpdate();
}
if (!hasUpdate || checked) {
return null;
}
return (
<div className={styles.notice}>
<div className={styles.message}>
<FormattedMessage
id="message.new-version-available"
defaultMessage="A new version of umami {version} is available!"
values={{ version: `v${latest}` }}
/>
</div>
<ButtonLayout>
<Button size="xsmall" variant="action" onClick={handleViewClick}>
<FormattedMessage id="label.view-details" defaultMessage="View details" />
</Button>
<Button size="xsmall" onClick={handleDismissClick}>
<FormattedMessage id="label.dismiss" defaultMessage="Dismiss" />
</Button>
</ButtonLayout>
</div>
);
}

View File

@ -6,7 +6,6 @@ import Link from 'components/common/Link';
import Icon from 'components/common/Icon'; import Icon from 'components/common/Icon';
import LanguageButton from 'components/settings/LanguageButton'; import LanguageButton from 'components/settings/LanguageButton';
import ThemeButton from 'components/settings/ThemeButton'; import ThemeButton from 'components/settings/ThemeButton';
import UpdateNotice from 'components/common/UpdateNotice';
import UserButton from 'components/settings/UserButton'; import UserButton from 'components/settings/UserButton';
import Logo from 'assets/logo.svg'; import Logo from 'assets/logo.svg';
import styles from './Header.module.css'; import styles from './Header.module.css';
@ -21,7 +20,6 @@ export default function Header() {
return ( return (
<nav className="container"> <nav className="container">
{user?.is_admin && <UpdateNotice />}
<div className={classNames(styles.header, 'row align-items-center')}> <div className={classNames(styles.header, 'row align-items-center')}>
<div className={styles.nav}> <div className={styles.nav}>
<div className=""> <div className="">

View File

@ -11,16 +11,16 @@
}, },
"scripts": { "scripts": {
"dev": "next dev", "dev": "next dev",
"build": "npm-run-all build-tracker build-geo build-db build-app", "clean": "rimraf .next",
"build": "npm-run-all clean build-tracker build-geo build-db build-app",
"start": "next start", "start": "next start",
"start-env": "node -r dotenv/config scripts/start-env.js", "start-env": "node -r dotenv/config scripts/start-env.js",
"build-app": "next build", "build-app": "next build",
"build-tracker": "rollup -c rollup.tracker.config.js", "build-tracker": "microbundle tracker/index.js -o public/umami.js --no-sourcemap -f cjs",
"build-db": "npm-run-all build-db-client", "build-db": "npm-run-all build-db-client",
"build-geo": "node scripts/build-geo.js", "build-geo": "node scripts/build-geo.js",
"build-db-schema": "dotenv prisma introspect", "build-db-schema": "dotenv prisma introspect",
"build-db-client": "dotenv prisma generate", "build-db-client": "dotenv prisma generate"
"download-country-names": "node scripts/download-country-names.js"
}, },
"dependencies": { "dependencies": {
"@prisma/client": "2.21.2", "@prisma/client": "2.21.2",
@ -58,7 +58,6 @@
"redux": "4.1.0", "redux": "4.1.0",
"redux-thunk": "2.3.0", "redux-thunk": "2.3.0",
"request-ip": "2.1.3", "request-ip": "2.1.3",
"semver": "7.3.5",
"thenby": "1.3.4", "thenby": "1.3.4",
"timezone-support": "2.0.2", "timezone-support": "2.0.2",
"tinycolor2": "1.4.2", "tinycolor2": "1.4.2",
@ -66,24 +65,18 @@
}, },
"devDependencies": { "devDependencies": {
"@formatjs/cli": "2.13.16", "@formatjs/cli": "2.13.16",
"@rollup/plugin-buble": "0.21.3",
"@rollup/plugin-node-resolve": "11.2.1",
"@rollup/plugin-replace": "2.3.4",
"@svgr/webpack": "5.5.0", "@svgr/webpack": "5.5.0",
"cross-env": "7.0.3", "cross-env": "7.0.3",
"del": "6.0.0",
"dotenv-cli": "4.0.0", "dotenv-cli": "4.0.0",
"extract-react-intl-messages": "4.1.1", "extract-react-intl-messages": "4.1.1",
"microbundle": "0.13.0",
"npm-run-all": "4.1.5", "npm-run-all": "4.1.5",
"pkg": "^5.2.0",
"postcss-flexbugs-fixes": "5.0.2", "postcss-flexbugs-fixes": "5.0.2",
"postcss-import": "13.0.0", "postcss-import": "13.0.0",
"postcss-preset-env": "6.7.0", "postcss-preset-env": "6.7.0",
"prettier": "2.2.1", "prettier": "2.2.1",
"prisma": "2.21.2", "prisma": "2.21.2",
"rollup": "2.45.2", "rimraf": "3.0.2",
"rollup-plugin-hashbang": "2.2.2",
"rollup-plugin-terser": "7.0.2",
"tar": "6.0.5" "tar": "6.0.5"
} }
} }

View File

@ -7,7 +7,6 @@ import {
THEME_CONFIG, THEME_CONFIG,
VERSION_CHECK, VERSION_CHECK,
} from 'lib/constants'; } from 'lib/constants';
import semver from 'semver';
const app = createSlice({ const app = createSlice({
name: 'app', name: 'app',
@ -17,7 +16,6 @@ const app = createSlice({
versions: { versions: {
current: process.env.VERSION, current: process.env.VERSION,
latest: null, latest: null,
hasUpdate: false,
}, },
shareToken: null, shareToken: null,
}, },
@ -74,13 +72,11 @@ export function checkVersion() {
const latest = tag_name.startsWith('v') ? tag_name.slice(1) : tag_name; const latest = tag_name.startsWith('v') ? tag_name.slice(1) : tag_name;
const lastCheck = getItem(VERSION_CHECK); const lastCheck = getItem(VERSION_CHECK);
const hasUpdate = latest && semver.gt(latest, current) && lastCheck?.version !== latest;
return dispatch( return dispatch(
setVersions({ setVersions({
current, current,
latest, latest,
hasUpdate,
}), }),
); );
}; };

View File

@ -1,13 +0,0 @@
import 'dotenv/config';
import buble from '@rollup/plugin-buble';
import resolve from '@rollup/plugin-node-resolve';
import { terser } from 'rollup-plugin-terser';
export default {
input: 'tracker/index.js',
output: {
file: 'public/umami.js',
format: 'iife',
},
plugins: [resolve(), buble({ objectAssign: true }), terser({ compress: { evaluate: false } })],
};

View File

@ -1,39 +0,0 @@
const fs = require('fs');
const path = require('path');
const https = require('https');
const chalk = require('chalk');
const src = path.resolve(__dirname, '../lang');
const dest = path.resolve(__dirname, '../public/country');
const files = fs.readdirSync(src);
const getUrl = locale =>
`https://raw.githubusercontent.com/umpirsky/country-list/master/data/${locale}/country.json`;
const asyncForEach = async (array, callback) => {
for (let index = 0; index < array.length; index++) {
await callback(array[index], index, array);
}
};
if (!fs.existsSync(dest)) {
fs.mkdirSync(dest);
}
const download = async files => {
await asyncForEach(files, async file => {
const locale = file.replace('-', '_').replace('.json', '');
const filename = path.join(dest, file);
if (!fs.existsSync(filename)) {
await new Promise(resolve => {
https.get(getUrl(locale), res => {
console.log('Downloaded', chalk.greenBright('->'), filename);
resolve(res.pipe(fs.createWriteStream(filename)));
});
});
}
});
};
download(files);

View File

@ -1,35 +0,0 @@
const fs = require('fs');
const path = require('path');
const del = require('del');
const prettier = require('prettier');
const chalk = require('chalk');
const src = path.resolve(__dirname, '../lang');
const dest = path.resolve(__dirname, '../build');
const files = fs.readdirSync(src);
const removed = del.sync([path.join(dest, '*.json')]);
if (removed.length) {
console.log(removed.map(n => `${n} ${chalk.redBright('✗')}`).join('\n'));
}
if (!fs.existsSync(dest)) {
fs.mkdirSync(dest);
}
files.forEach(file => {
const lang = require(`../lang/${file}`);
const keys = Object.keys(lang).sort();
const formatted = keys.reduce((obj, key) => {
obj[key] = { defaultMessage: lang[key] };
return obj;
}, {});
const json = prettier.format(JSON.stringify(formatted), { parser: 'json' });
fs.writeFileSync(path.resolve(dest, file), json);
console.log(path.resolve(src, file), chalk.greenBright('->'), path.resolve(dest, file));
});

1853
yarn.lock

File diff suppressed because it is too large Load Diff