From f5f735372a15b5d0e3068e09b1a0eefadbc8d2c0 Mon Sep 17 00:00:00 2001 From: unknown Date: Thu, 10 Jun 2021 13:44:03 +0200 Subject: [PATCH 001/196] Added License file --- LICENSE.md | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 LICENSE.md diff --git a/LICENSE.md b/LICENSE.md new file mode 100644 index 0000000..3f30c48 --- /dev/null +++ b/LICENSE.md @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2021 Paweł Malak + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. \ No newline at end of file From 66cc59c48e137597a41f58154de9f80973e94d83 Mon Sep 17 00:00:00 2001 From: unknown Date: Fri, 11 Jun 2021 00:09:25 +0200 Subject: [PATCH 002/196] Fixed bug related to websocket protocol which was making app unusable with reverse proxy and https --- README.md | 6 ++- Socket.js | 2 +- client/README.md | 46 ------------------- .../Widgets/WeatherWidget/WeatherWidget.tsx | 8 ++-- 4 files changed, 9 insertions(+), 53 deletions(-) delete mode 100644 client/README.md diff --git a/README.md b/README.md index 58517bf..3b2ed3d 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,9 @@ # Flame +[![JS Badge](https://img.shields.io/badge/JavaScript-F7DF1E?style=for-the-badge&logo=javascript&logoColor=black)](https://shields.io/) +[![TS Badge](https://img.shields.io/badge/TypeScript-007ACC?style=for-the-badge&logo=typescript&logoColor=white)](https://shields.io/) +[![React Badge](https://img.shields.io/badge/React-20232A?style=for-the-badge&logo=react&logoColor=61DAFB)](https://shields.io/) + ![Homescreen screenshot](./github/_home.png) ## Description @@ -10,7 +14,7 @@ Flame is self-hosted startpage for your server. It's inspired (heavily) by [SUI] - Node.js + Express - Sequelize ORM + SQLite - Frontend - - React + - React - Redux - TypeScript - Deployment diff --git a/Socket.js b/Socket.js index af9249a..0ae1f56 100644 --- a/Socket.js +++ b/Socket.js @@ -9,7 +9,7 @@ class Socket { }) this.webSocketServer.on('connection', (webSocketClient) => { - console.log('Socket: new connection'); + // console.log('Socket: new connection'); }) } diff --git a/client/README.md b/client/README.md deleted file mode 100644 index b87cb00..0000000 --- a/client/README.md +++ /dev/null @@ -1,46 +0,0 @@ -# Getting Started with Create React App - -This project was bootstrapped with [Create React App](https://github.com/facebook/create-react-app). - -## Available Scripts - -In the project directory, you can run: - -### `npm start` - -Runs the app in the development mode.\ -Open [http://localhost:3000](http://localhost:3000) to view it in the browser. - -The page will reload if you make edits.\ -You will also see any lint errors in the console. - -### `npm test` - -Launches the test runner in the interactive watch mode.\ -See the section about [running tests](https://facebook.github.io/create-react-app/docs/running-tests) for more information. - -### `npm run build` - -Builds the app for production to the `build` folder.\ -It correctly bundles React in production mode and optimizes the build for the best performance. - -The build is minified and the filenames include the hashes.\ -Your app is ready to be deployed! - -See the section about [deployment](https://facebook.github.io/create-react-app/docs/deployment) for more information. - -### `npm run eject` - -**Note: this is a one-way operation. Once you `eject`, you can’t go back!** - -If you aren’t satisfied with the build tool and configuration choices, you can `eject` at any time. This command will remove the single build dependency from your project. - -Instead, it will copy all the configuration files and the transitive dependencies (webpack, Babel, ESLint, etc) right into your project so you have full control over them. All of the commands except `eject` will still work, but they will point to the copied scripts so you can tweak them. At this point you’re on your own. - -You don’t have to ever use `eject`. The curated feature set is suitable for small and middle deployments, and you shouldn’t feel obligated to use this feature. However we understand that this tool wouldn’t be useful if you couldn’t customize it when you are ready for it. - -## Learn More - -You can learn more in the [Create React App documentation](https://facebook.github.io/create-react-app/docs/getting-started). - -To learn React, check out the [React documentation](https://reactjs.org/). diff --git a/client/src/components/Widgets/WeatherWidget/WeatherWidget.tsx b/client/src/components/Widgets/WeatherWidget/WeatherWidget.tsx index b28ef0a..ab758d5 100644 --- a/client/src/components/Widgets/WeatherWidget/WeatherWidget.tsx +++ b/client/src/components/Widgets/WeatherWidget/WeatherWidget.tsx @@ -50,11 +50,9 @@ const WeatherWidget = (): JSX.Element => { // Open socket for data updates useEffect(() => { - const webSocketClient = new WebSocket(`ws://${window.location.host}/socket`); - - webSocketClient.onopen = () => { - console.log('Socket: listen') - } + const socketProtocol = document.location.protocol === 'http:' ? 'ws:' : 'wss:'; + const socketAddress = `${socketProtocol}//${window.location.host}/socket`; + const webSocketClient = new WebSocket(socketAddress); webSocketClient.onmessage = (e) => { const data = JSON.parse(e.data); From a5504e6e80eb6934ea553ad16d54b817767ac5ea Mon Sep 17 00:00:00 2001 From: unknown Date: Fri, 11 Jun 2021 15:33:06 +0200 Subject: [PATCH 003/196] Added url parser to support wider range of addresses --- README.md | 15 ++++++++- client/src/App.tsx | 1 - .../src/components/Apps/AppCard/AppCard.tsx | 12 +++---- .../Bookmarks/BookmarkCard/BookmarkCard.tsx | 32 +++++++++++-------- client/src/utility/iconParser.ts | 5 +++ client/src/utility/index.ts | 2 ++ client/src/utility/urlParser.ts | 20 ++++++++++++ 7 files changed, 63 insertions(+), 24 deletions(-) create mode 100644 client/src/utility/index.ts create mode 100644 client/src/utility/urlParser.ts diff --git a/README.md b/README.md index 3b2ed3d..25d7436 100644 --- a/README.md +++ b/README.md @@ -59,4 +59,17 @@ docker run -p 5005:5005 -v :/app/data flame - Themes - Customize your page by choosing from 12 color themes -![Homescreen screenshot](./github/_themes.png) \ No newline at end of file +![Homescreen screenshot](./github/_themes.png) + +## Usage +### Supported links for applications and bookmarks +#### Rules +- URL starts with `http://` + - Format: `http://www.domain.com`, `http://domain.com` + - Redirect: `{dest}` +- URL starts with `https://` + - Format: `https://www.domain.com`, `https://domain.com` + - Redirect: `https://{dest}` +- URL without protocol + - Format: `www.domain.com`, `domain.com`, `sub.domain.com`, `local`, `ip`, `ip:port` + - Redirect: `http://{dest}` \ No newline at end of file diff --git a/client/src/App.tsx b/client/src/App.tsx index 9875f16..ad7b366 100644 --- a/client/src/App.tsx +++ b/client/src/App.tsx @@ -11,7 +11,6 @@ import Home from './components/Home/Home'; import Apps from './components/Apps/Apps'; import Settings from './components/Settings/Settings'; import Bookmarks from './components/Bookmarks/Bookmarks'; - import NotificationCenter from './components/NotificationCenter/NotificationCenter'; if (localStorage.theme) { diff --git a/client/src/components/Apps/AppCard/AppCard.tsx b/client/src/components/Apps/AppCard/AppCard.tsx index 18b5dfd..d2ef375 100644 --- a/client/src/components/Apps/AppCard/AppCard.tsx +++ b/client/src/components/Apps/AppCard/AppCard.tsx @@ -1,8 +1,6 @@ -import { Link } from 'react-router-dom'; - import classes from './AppCard.module.css'; import Icon from '../../UI/Icons/Icon/Icon'; -import { iconParser } from '../../../utility/iconParser'; +import { iconParser, urlParser } from '../../../utility'; import { App } from '../../../interfaces'; @@ -12,18 +10,16 @@ interface ComponentProps { } const AppCard = (props: ComponentProps): JSX.Element => { - const redirectHandler = (url: string): void => { - window.open(url); - } + const [displayUrl, redirectUrl] = urlParser(props.app.url); return ( - +
{props.app.name}
- {props.app.url} + {displayUrl}
) diff --git a/client/src/components/Bookmarks/BookmarkCard/BookmarkCard.tsx b/client/src/components/Bookmarks/BookmarkCard/BookmarkCard.tsx index 5f607b2..6ddf0b7 100644 --- a/client/src/components/Bookmarks/BookmarkCard/BookmarkCard.tsx +++ b/client/src/components/Bookmarks/BookmarkCard/BookmarkCard.tsx @@ -2,7 +2,7 @@ import { Bookmark, Category } from '../../../interfaces'; import classes from './BookmarkCard.module.css'; import Icon from '../../UI/Icons/Icon/Icon'; -import { iconParser } from '../../../utility/iconParser'; +import { iconParser, urlParser } from '../../../utility'; interface ComponentProps { category: Category; @@ -13,19 +13,23 @@ const BookmarkCard = (props: ComponentProps): JSX.Element => {

{props.category.name}

- {props.category.bookmarks.map((bookmark: Bookmark) => ( - - {bookmark.icon && ( -
- -
- )} - {bookmark.name} -
- ))} + {props.category.bookmarks.map((bookmark: Bookmark) => { + const [displayUrl, redirectUrl] = urlParser(bookmark.url); + + return ( + + {bookmark.icon && ( +
+ +
+ )} + {bookmark.name} +
+ ) + })}
) diff --git a/client/src/utility/iconParser.ts b/client/src/utility/iconParser.ts index e846102..c5c9d8b 100644 --- a/client/src/utility/iconParser.ts +++ b/client/src/utility/iconParser.ts @@ -1,3 +1,8 @@ +/** + * Parse Material Desgin icon name to be used with mdi/js + * @param mdiName Dash separated icon name from MDI, e.g. alert-box-outline + * @returns Parsed icon name to be used with mdi/js, e.g mdiAlertBoxOutline + */ export const iconParser = (mdiName: string): string => { let parsedName = mdiName .split('-') diff --git a/client/src/utility/index.ts b/client/src/utility/index.ts new file mode 100644 index 0000000..bd1db1b --- /dev/null +++ b/client/src/utility/index.ts @@ -0,0 +1,2 @@ +export * from './iconParser'; +export * from './urlParser'; \ No newline at end of file diff --git a/client/src/utility/urlParser.ts b/client/src/utility/urlParser.ts new file mode 100644 index 0000000..c74224a --- /dev/null +++ b/client/src/utility/urlParser.ts @@ -0,0 +1,20 @@ +export const urlParser = (url: string): string[] => { + let parsedUrl: string; + let displayUrl: string; + + if (/https?:\/\//.test(url)) { + // Url starts with http[s]:// -> leave it as it is + parsedUrl = url; + } else { + // No protocol -> apply http:// prefix + parsedUrl = `http://${url}`; + } + + // Create simplified url to display as text + displayUrl = url + .replace(/https?:\/\//, '') + .replace('www.', '') + .replace(/\/$/, ''); + + return [displayUrl, parsedUrl] +} \ No newline at end of file From d257fbf9a391aabb726e3ef2feafaca9e478a664 Mon Sep 17 00:00:00 2001 From: unknown Date: Sun, 13 Jun 2021 00:16:57 +0200 Subject: [PATCH 004/196] Created config global state. Reworked WeatherSettings and WeatherWidget to use new config state. --- client/src/App.tsx | 7 +- .../WeatherSettings/WeatherSettings.tsx | 92 ++++++++----------- .../Widgets/WeatherWidget/WeatherWidget.tsx | 51 +++++----- client/src/interfaces/Forms.ts | 6 ++ client/src/interfaces/GlobalState.ts | 2 + client/src/interfaces/index.ts | 3 +- client/src/store/actions/actionTypes.ts | 15 ++- client/src/store/actions/config.ts | 48 ++++++++++ client/src/store/actions/index.ts | 3 +- client/src/store/reducers/config.ts | 36 ++++++++ client/src/store/reducers/index.ts | 4 +- client/src/store/store.ts | 4 +- client/src/utility/index.ts | 3 +- client/src/utility/searchConfig.ts | 24 +++++ controllers/config.js | 4 +- 15 files changed, 214 insertions(+), 88 deletions(-) create mode 100644 client/src/interfaces/Forms.ts create mode 100644 client/src/store/actions/config.ts create mode 100644 client/src/store/reducers/config.ts create mode 100644 client/src/utility/searchConfig.ts diff --git a/client/src/App.tsx b/client/src/App.tsx index ad7b366..efdf4c8 100644 --- a/client/src/App.tsx +++ b/client/src/App.tsx @@ -1,8 +1,8 @@ import { BrowserRouter, Route, Switch } from 'react-router-dom'; -import { setTheme } from './store/actions'; +import { getConfig, setTheme } from './store/actions'; // Redux -import store from './store/store'; +import { store } from './store/store'; import { Provider } from 'react-redux'; import classes from './App.module.css'; @@ -13,6 +13,9 @@ import Settings from './components/Settings/Settings'; import Bookmarks from './components/Bookmarks/Bookmarks'; import NotificationCenter from './components/NotificationCenter/NotificationCenter'; +// Get config pairs from database +store.dispatch(getConfig()); + if (localStorage.theme) { store.dispatch(setTheme(localStorage.theme)); } diff --git a/client/src/components/Settings/WeatherSettings/WeatherSettings.tsx b/client/src/components/Settings/WeatherSettings/WeatherSettings.tsx index 3294fe4..6f14cfc 100644 --- a/client/src/components/Settings/WeatherSettings/WeatherSettings.tsx +++ b/client/src/components/Settings/WeatherSettings/WeatherSettings.tsx @@ -1,25 +1,28 @@ import { useState, ChangeEvent, useEffect, FormEvent } from 'react'; -import { connect } from 'react-redux'; import axios from 'axios'; -import { ApiResponse, Config, NewNotification, Weather } from '../../../interfaces'; +// Redux +import { connect } from 'react-redux'; +import { createNotification, updateConfig } from '../../../store/actions'; + +// Typescript +import { ApiResponse, GlobalState, NewNotification, Weather, WeatherForm } from '../../../interfaces'; + +// UI import InputGroup from '../../UI/Forms/InputGroup/InputGroup'; import Button from '../../UI/Buttons/Button/Button'; -import { createNotification } from '../../../store/actions'; -interface FormState { - WEATHER_API_KEY: string; - lat: number; - long: number; - isCelsius: number; -} +// Utils +import { searchConfig } from '../../../utility'; interface ComponentProps { createNotification: (notification: NewNotification) => void; + updateConfig: (formData: WeatherForm) => void; + loading: boolean; } const WeatherSettings = (props: ComponentProps): JSX.Element => { - const [formData, setFormData] = useState({ + const [formData, setFormData] = useState({ WEATHER_API_KEY: '', lat: 0, long: 0, @@ -40,28 +43,15 @@ const WeatherSettings = (props: ComponentProps): JSX.Element => { } useEffect(() => { - axios.get>('/api/config?keys=WEATHER_API_KEY,lat,long,isCelsius') - .then(data => { - let tmpFormData = { ...formData }; + setFormData({ + WEATHER_API_KEY: searchConfig('WEATHER_API_KEY', ''), + lat: searchConfig('lat', 0), + long: searchConfig('long', 0), + isCelsius: searchConfig('isCelsius', 1) + }) + }, [props.loading]); - data.data.data.forEach((config: Config) => { - let value: string | number = config.value; - if (config.valueType === 'number') { - value = parseFloat(value); - } - - tmpFormData = { - ...tmpFormData, - [config.key]: value - } - }) - - setFormData(tmpFormData); - }) - .catch(err => console.log(err)); - }, []); - - const formSubmitHandler = (e: FormEvent) => { + const formSubmitHandler = async (e: FormEvent) => { e.preventDefault(); // Check for api key input @@ -73,32 +63,22 @@ const WeatherSettings = (props: ComponentProps): JSX.Element => { } // Save settings - axios.put>('/api/config', formData) + await props.updateConfig(formData); + + // Update weather + axios.get>('/api/weather/update') .then(() => { props.createNotification({ title: 'Success', - message: 'Settings updated' + message: 'Weather updated' }) - - // Update weather with new settings - axios.get>('/api/weather/update') - .then(() => { - props.createNotification({ - title: 'Success', - message: 'Weather updated' - }) - }) - .catch((err) => { - props.createNotification({ - title: 'Error', - message: err.response.data.error - }) - }); }) - .catch(err => console.log(err)); - - // set localStorage - localStorage.setItem('isCelsius', JSON.stringify(parseInt(`${formData.isCelsius}`) === 1)) + .catch((err) => { + props.createNotification({ + title: 'Error', + message: err.response.data.error + }) + }); } return ( @@ -170,4 +150,10 @@ const WeatherSettings = (props: ComponentProps): JSX.Element => { ) } -export default connect(null, { createNotification })(WeatherSettings); \ No newline at end of file +const mapStateToProps = (state: GlobalState) => { + return { + loading: state.config.loading + } +} + +export default connect(mapStateToProps, { createNotification, updateConfig })(WeatherSettings); \ No newline at end of file diff --git a/client/src/components/Widgets/WeatherWidget/WeatherWidget.tsx b/client/src/components/Widgets/WeatherWidget/WeatherWidget.tsx index ab758d5..8a0e142 100644 --- a/client/src/components/Widgets/WeatherWidget/WeatherWidget.tsx +++ b/client/src/components/Widgets/WeatherWidget/WeatherWidget.tsx @@ -1,12 +1,27 @@ import { useState, useEffect, Fragment } from 'react'; -import { Weather, ApiResponse, Config } from '../../../interfaces'; import axios from 'axios'; -import WeatherIcon from '../../UI/Icons/WeatherIcon/WeatherIcon'; +// Redux +import { connect } from 'react-redux'; +// Typescript +import { Weather, ApiResponse, Config, GlobalState } from '../../../interfaces'; + +// CSS import classes from './WeatherWidget.module.css'; -const WeatherWidget = (): JSX.Element => { +// UI +import WeatherIcon from '../../UI/Icons/WeatherIcon/WeatherIcon'; + +// Utils +import { searchConfig } from '../../../utility'; + +interface ComponentProps { + configLoading: boolean; + config: Config[]; +} + +const WeatherWidget = (props: ComponentProps): JSX.Element => { const [weather, setWeather] = useState({ externalLastUpdate: '', tempC: 0, @@ -20,11 +35,9 @@ const WeatherWidget = (): JSX.Element => { updatedAt: new Date() }); const [isLoading, setIsLoading] = useState(true); - const [isCelsius, setIsCelsius] = useState(true); // Initial request to get data useEffect(() => { - // get weather axios.get>('/api/weather') .then(data => { const weatherData = data.data.data[0]; @@ -34,18 +47,6 @@ const WeatherWidget = (): JSX.Element => { setIsLoading(false); }) .catch(err => console.log(err)); - - // get config - if (!localStorage.isCelsius) { - axios.get>('/api/config/isCelsius') - .then((data) => { - setIsCelsius(parseInt(data.data.data.value) === 1); - localStorage.setItem('isCelsius', JSON.stringify(isCelsius)); - }) - .catch((err) => console.log(err)); - } else { - setIsCelsius(JSON.parse(localStorage.isCelsius)); - } }, []); // Open socket for data updates @@ -67,9 +68,8 @@ const WeatherWidget = (): JSX.Element => { return (
- {isLoading - ? 'loading' - : (weather.id > 0 && + {isLoading || props.configLoading || searchConfig('WEATHER_API_KEY', '') && + (weather.id > 0 && (
{ />
- {isCelsius + {searchConfig('isCelsius', true) ? {weather.tempC}°C : {weather.tempF}°F } @@ -91,4 +91,11 @@ const WeatherWidget = (): JSX.Element => { ) } -export default WeatherWidget; \ No newline at end of file +const mapStateToProps = (state: GlobalState) => { + return { + configLoading: state.config.loading, + config: state.config.config + } +} + +export default connect(mapStateToProps)(WeatherWidget); \ No newline at end of file diff --git a/client/src/interfaces/Forms.ts b/client/src/interfaces/Forms.ts new file mode 100644 index 0000000..6ce2d42 --- /dev/null +++ b/client/src/interfaces/Forms.ts @@ -0,0 +1,6 @@ +export interface WeatherForm { + WEATHER_API_KEY: string; + lat: number; + long: number; + isCelsius: number; +} \ No newline at end of file diff --git a/client/src/interfaces/GlobalState.ts b/client/src/interfaces/GlobalState.ts index 1ef7acb..a88f218 100644 --- a/client/src/interfaces/GlobalState.ts +++ b/client/src/interfaces/GlobalState.ts @@ -2,10 +2,12 @@ import { State as AppState } from '../store/reducers/app'; import { State as ThemeState } from '../store/reducers/theme'; import { State as BookmarkState } from '../store/reducers/bookmark'; import { State as NotificationState } from '../store/reducers/notification'; +import { State as ConfigState } from '../store/reducers/config'; export interface GlobalState { theme: ThemeState; app: AppState; bookmark: BookmarkState; notification: NotificationState; + config: ConfigState; } \ No newline at end of file diff --git a/client/src/interfaces/index.ts b/client/src/interfaces/index.ts index 14aece8..2f333d3 100644 --- a/client/src/interfaces/index.ts +++ b/client/src/interfaces/index.ts @@ -6,4 +6,5 @@ export * from './Weather'; export * from './Bookmark'; export * from './Category'; export * from './Notification'; -export * from './Config'; \ No newline at end of file +export * from './Config'; +export * from './Forms'; \ No newline at end of file diff --git a/client/src/store/actions/actionTypes.ts b/client/src/store/actions/actionTypes.ts index 4ff088c..d2cc17e 100644 --- a/client/src/store/actions/actionTypes.ts +++ b/client/src/store/actions/actionTypes.ts @@ -19,7 +19,10 @@ import { UpdateBookmarkAction, // Notifications CreateNotificationAction, - ClearNotificationAction + ClearNotificationAction, + // Config + GetConfigAction, + UpdateConfigAction } from './'; export enum ActionTypes { @@ -48,7 +51,10 @@ export enum ActionTypes { updateBookmark = 'UPDATE_BOOKMARK', // Notifications createNotification = 'CREATE_NOTIFICATION', - clearNotification = 'CLEAR_NOTIFICATION' + clearNotification = 'CLEAR_NOTIFICATION', + // Config + getConfig = 'GET_CONFIG', + updateConfig = 'UPDATE_CONFIG' } export type Action = @@ -72,4 +78,7 @@ export type Action = UpdateBookmarkAction | // Notifications CreateNotificationAction | - ClearNotificationAction; \ No newline at end of file + ClearNotificationAction | + // Config + GetConfigAction | + UpdateConfigAction; \ No newline at end of file diff --git a/client/src/store/actions/config.ts b/client/src/store/actions/config.ts new file mode 100644 index 0000000..e65415d --- /dev/null +++ b/client/src/store/actions/config.ts @@ -0,0 +1,48 @@ +import axios from 'axios'; +import { Dispatch } from 'redux'; +import { ActionTypes } from './actionTypes'; +import { Config, ApiResponse, WeatherForm } from '../../interfaces'; +import { CreateNotificationAction } from './notification'; + +export interface GetConfigAction { + type: ActionTypes.getConfig; + payload: Config[]; +} + +export const getConfig = () => async (dispatch: Dispatch) => { + try { + const res = await axios.get>('/api/config'); + + dispatch({ + type: ActionTypes.getConfig, + payload: res.data.data + }) + } catch (err) { + console.log(err) + } +} + +export interface UpdateConfigAction { + type: ActionTypes.updateConfig; + payload: Config[]; +} + +export const updateConfig = (formData: WeatherForm) => async (dispatch: Dispatch) => { + try { + const res = await axios.put>('/api/config', formData); + dispatch({ + type: ActionTypes.createNotification, + payload: { + title: 'Success', + message: 'Settings updated' + } + }) + + dispatch({ + type: ActionTypes.updateConfig, + payload: res.data.data + }) + } catch (err) { + console.log(err); + } +} \ No newline at end of file diff --git a/client/src/store/actions/index.ts b/client/src/store/actions/index.ts index 78c86b3..e516e54 100644 --- a/client/src/store/actions/index.ts +++ b/client/src/store/actions/index.ts @@ -2,4 +2,5 @@ export * from './theme'; export * from './app'; export * from './actionTypes'; export * from './bookmark'; -export * from './notification'; \ No newline at end of file +export * from './notification'; +export * from './config'; \ No newline at end of file diff --git a/client/src/store/reducers/config.ts b/client/src/store/reducers/config.ts new file mode 100644 index 0000000..071f461 --- /dev/null +++ b/client/src/store/reducers/config.ts @@ -0,0 +1,36 @@ +import { ActionTypes, Action } from '../actions'; +import { Config } from '../../interfaces'; + +export interface State { + loading: boolean; + config: Config[]; +} + +const initialState: State = { + loading: true, + config: [] +} + +const getConfig = (state: State, action: Action): State => { + return { + loading: false, + config: action.payload + } +} + +const updateConfig = (state: State, action: Action): State => { + return { + ...state, + config: action.payload + } +} + +const configReducer = (state: State = initialState, action: Action) => { + switch(action.type) { + case ActionTypes.getConfig: return getConfig(state, action); + case ActionTypes.updateConfig: return updateConfig(state, action); + default: return state; + } +} + +export default configReducer; \ No newline at end of file diff --git a/client/src/store/reducers/index.ts b/client/src/store/reducers/index.ts index bb0a0d6..96e9f95 100644 --- a/client/src/store/reducers/index.ts +++ b/client/src/store/reducers/index.ts @@ -6,12 +6,14 @@ import themeReducer from './theme'; import appReducer from './app'; import bookmarkReducer from './bookmark'; import notificationReducer from './notification'; +import configReducer from './config'; const rootReducer = combineReducers({ theme: themeReducer, app: appReducer, bookmark: bookmarkReducer, - notification: notificationReducer + notification: notificationReducer, + config: configReducer }) export default rootReducer; \ No newline at end of file diff --git a/client/src/store/store.ts b/client/src/store/store.ts index c0f4be4..22250a7 100644 --- a/client/src/store/store.ts +++ b/client/src/store/store.ts @@ -4,6 +4,4 @@ import thunk from 'redux-thunk'; import rootReducer from './reducers'; const initialState = {}; -const store = createStore(rootReducer, initialState, composeWithDevTools(applyMiddleware(thunk))); - -export default store; \ No newline at end of file +export const store = createStore(rootReducer, initialState, composeWithDevTools(applyMiddleware(thunk))); \ No newline at end of file diff --git a/client/src/utility/index.ts b/client/src/utility/index.ts index bd1db1b..6caa71e 100644 --- a/client/src/utility/index.ts +++ b/client/src/utility/index.ts @@ -1,2 +1,3 @@ export * from './iconParser'; -export * from './urlParser'; \ No newline at end of file +export * from './urlParser'; +export * from './searchConfig'; \ No newline at end of file diff --git a/client/src/utility/searchConfig.ts b/client/src/utility/searchConfig.ts new file mode 100644 index 0000000..0f8ec23 --- /dev/null +++ b/client/src/utility/searchConfig.ts @@ -0,0 +1,24 @@ +import { store } from '../store/store'; + +/** + * Search config store with given key + * @param key Config pair key to search + * @param _default Value to return if key is not found + */ +export const searchConfig = (key: string, _default: any)=> { + const state = store.getState(); + + const pair = state.config.config.find(p => p.key === key); + + if (pair) { + if (pair.valueType === 'number') { + return parseFloat(pair.value); + } else if (pair.valueType === 'boolean') { + return parseInt(pair.value); + } else { + return pair.value; + } + } else { + return _default; + } +} \ No newline at end of file diff --git a/controllers/config.js b/controllers/config.js index 82b6691..f8f3613 100644 --- a/controllers/config.js +++ b/controllers/config.js @@ -96,9 +96,11 @@ exports.updateValues = asyncWrapper(async (req, res, next) => { }) }) + const config = await Config.findAll(); + res.status(200).send({ success: true, - data: {} + data: config }) }) From f137498e7e168e1d810946221e35c1bbf4bc13b9 Mon Sep 17 00:00:00 2001 From: unknown Date: Sun, 13 Jun 2021 01:06:42 +0200 Subject: [PATCH 005/196] Added auto-refresh for greeting and date. Fixed multiple React warnings --- README.md | 2 +- client/src/App.module.css | 0 client/src/App.tsx | 2 - .../src/components/Apps/AppCard/AppCard.tsx | 7 +- .../src/components/Apps/AppForm/AppForm.tsx | 10 ++- client/src/components/Apps/Apps.tsx | 18 +++-- .../Bookmarks/BookmarkCard/BookmarkCard.tsx | 3 +- .../Bookmarks/BookmarkForm/BookmarkForm.tsx | 10 ++- .../Bookmarks/BookmarkGrid/BookmarkGrid.tsx | 2 +- client/src/components/Bookmarks/Bookmarks.tsx | 18 +++-- client/src/components/Home/Home.tsx | 80 +++++++++++-------- .../src/components/Home/functions/dateTime.ts | 8 ++ .../src/components/Home/functions/greeter.ts | 12 +++ client/src/components/UI/Modal/Modal.tsx | 2 +- client/src/store/actions/app.ts | 2 +- client/src/store/actions/bookmark.ts | 4 +- 16 files changed, 121 insertions(+), 59 deletions(-) delete mode 100644 client/src/App.module.css create mode 100644 client/src/components/Home/functions/dateTime.ts create mode 100644 client/src/components/Home/functions/greeter.ts diff --git a/README.md b/README.md index 25d7436..d61baa6 100644 --- a/README.md +++ b/README.md @@ -62,7 +62,7 @@ docker run -p 5005:5005 -v :/app/data flame ![Homescreen screenshot](./github/_themes.png) ## Usage -### Supported links for applications and bookmarks +### Supported URL formats for applications and bookmarks #### Rules - URL starts with `http://` - Format: `http://www.domain.com`, `http://domain.com` diff --git a/client/src/App.module.css b/client/src/App.module.css deleted file mode 100644 index e69de29..0000000 diff --git a/client/src/App.tsx b/client/src/App.tsx index efdf4c8..d58f4ad 100644 --- a/client/src/App.tsx +++ b/client/src/App.tsx @@ -5,8 +5,6 @@ import { getConfig, setTheme } from './store/actions'; import { store } from './store/store'; import { Provider } from 'react-redux'; -import classes from './App.module.css'; - import Home from './components/Home/Home'; import Apps from './components/Apps/Apps'; import Settings from './components/Settings/Settings'; diff --git a/client/src/components/Apps/AppCard/AppCard.tsx b/client/src/components/Apps/AppCard/AppCard.tsx index d2ef375..50fb979 100644 --- a/client/src/components/Apps/AppCard/AppCard.tsx +++ b/client/src/components/Apps/AppCard/AppCard.tsx @@ -13,7 +13,12 @@ const AppCard = (props: ComponentProps): JSX.Element => { const [displayUrl, redirectUrl] = urlParser(props.app.url); return ( - +
diff --git a/client/src/components/Apps/AppForm/AppForm.tsx b/client/src/components/Apps/AppForm/AppForm.tsx index b833752..cffeb19 100644 --- a/client/src/components/Apps/AppForm/AppForm.tsx +++ b/client/src/components/Apps/AppForm/AppForm.tsx @@ -98,7 +98,15 @@ const AppForm = (props: ComponentProps): JSX.Element => { value={formData.url} onChange={(e) => inputChangeHandler(e)} /> - Only urls without http[s]:// are supported + +
+ {' '}Check supported URL formats + + diff --git a/client/src/components/Apps/Apps.tsx b/client/src/components/Apps/Apps.tsx index 0f8e079..f02fba6 100644 --- a/client/src/components/Apps/Apps.tsx +++ b/client/src/components/Apps/Apps.tsx @@ -1,4 +1,4 @@ -import { Fragment, useEffect, useState } from 'react'; +import { useEffect, useState } from 'react'; import { Link } from 'react-router-dom'; // Redux @@ -30,6 +30,12 @@ interface ComponentProps { } const Apps = (props: ComponentProps): JSX.Element => { + const { + getApps, + apps, + loading + } = props; + const [modalIsOpen, setModalIsOpen] = useState(false); const [isInEdit, setIsInEdit] = useState(false); const [isInUpdate, setIsInUpdate] = useState(false); @@ -44,10 +50,10 @@ const Apps = (props: ComponentProps): JSX.Element => { }) useEffect(() => { - if (props.apps.length === 0) { - props.getApps(); + if (apps.length === 0) { + getApps(); } - }, [props.getApps]); + }, [getApps, apps]); const toggleModal = (): void => { setModalIsOpen(!modalIsOpen); @@ -93,10 +99,10 @@ const Apps = (props: ComponentProps): JSX.Element => {
- {props.loading + {loading ? : (!isInEdit - ? + ? : ) }
diff --git a/client/src/components/Bookmarks/BookmarkCard/BookmarkCard.tsx b/client/src/components/Bookmarks/BookmarkCard/BookmarkCard.tsx index 6ddf0b7..9e8dff9 100644 --- a/client/src/components/Bookmarks/BookmarkCard/BookmarkCard.tsx +++ b/client/src/components/Bookmarks/BookmarkCard/BookmarkCard.tsx @@ -14,12 +14,13 @@ const BookmarkCard = (props: ComponentProps): JSX.Element => {

{props.category.name}

{props.category.bookmarks.map((bookmark: Bookmark) => { - const [displayUrl, redirectUrl] = urlParser(bookmark.url); + const redirectUrl = urlParser(bookmark.url)[1]; return ( {bookmark.icon && (
diff --git a/client/src/components/Bookmarks/BookmarkForm/BookmarkForm.tsx b/client/src/components/Bookmarks/BookmarkForm/BookmarkForm.tsx index c5f5bcf..9341565 100644 --- a/client/src/components/Bookmarks/BookmarkForm/BookmarkForm.tsx +++ b/client/src/components/Bookmarks/BookmarkForm/BookmarkForm.tsx @@ -184,7 +184,15 @@ const BookmarkForm = (props: ComponentProps): JSX.Element => { value={formData.url} onChange={(e) => inputChangeHandler(e)} /> - Only urls without http[s]:// are supported + + + {' '}Check supported URL formats + + diff --git a/client/src/components/Bookmarks/BookmarkGrid/BookmarkGrid.tsx b/client/src/components/Bookmarks/BookmarkGrid/BookmarkGrid.tsx index c6355c6..c316f31 100644 --- a/client/src/components/Bookmarks/BookmarkGrid/BookmarkGrid.tsx +++ b/client/src/components/Bookmarks/BookmarkGrid/BookmarkGrid.tsx @@ -2,7 +2,7 @@ import { Link } from 'react-router-dom'; import classes from './BookmarkGrid.module.css'; -import { Bookmark, Category } from '../../../interfaces'; +import { Category } from '../../../interfaces'; import BookmarkCard from '../BookmarkCard/BookmarkCard'; diff --git a/client/src/components/Bookmarks/Bookmarks.tsx b/client/src/components/Bookmarks/Bookmarks.tsx index 53cca5c..b386706 100644 --- a/client/src/components/Bookmarks/Bookmarks.tsx +++ b/client/src/components/Bookmarks/Bookmarks.tsx @@ -28,6 +28,12 @@ export enum ContentType { } const Bookmarks = (props: ComponentProps): JSX.Element => { + const { + getCategories, + categories, + loading + } = props; + const [modalIsOpen, setModalIsOpen] = useState(false); const [formContentType, setFormContentType] = useState(ContentType.category); const [isInEdit, setIsInEdit] = useState(false); @@ -52,10 +58,10 @@ const Bookmarks = (props: ComponentProps): JSX.Element => { }) useEffect(() => { - if (props.categories.length === 0) { - props.getCategories(); + if (categories.length === 0) { + getCategories(); } - }, [props.getCategories]) + }, [getCategories, categories]) const toggleModal = (): void => { setModalIsOpen(!modalIsOpen); @@ -132,13 +138,13 @@ const Bookmarks = (props: ComponentProps): JSX.Element => { />
- {props.loading + {loading ? : (!isInEdit - ? + ? : ) diff --git a/client/src/components/Home/Home.tsx b/client/src/components/Home/Home.tsx index 1fdd090..ab41ac2 100644 --- a/client/src/components/Home/Home.tsx +++ b/client/src/components/Home/Home.tsx @@ -1,4 +1,4 @@ -import { useEffect } from 'react'; +import { useState, useEffect } from 'react'; import { Link } from 'react-router-dom'; // Redux @@ -23,6 +23,10 @@ import AppGrid from '../Apps/AppGrid/AppGrid'; import BookmarkGrid from '../Bookmarks/BookmarkGrid/BookmarkGrid'; import WeatherWidget from '../Widgets/WeatherWidget/WeatherWidget'; +// Functions +import { greeter } from './functions/greeter'; +import { dateTime } from './functions/dateTime'; + interface ComponentProps { getApps: Function; getCategories: Function; @@ -33,68 +37,74 @@ interface ComponentProps { } const Home = (props: ComponentProps): JSX.Element => { + const { + getApps, + apps, + appsLoading, + getCategories, + categories, + categoriesLoading + } = props; + + const [header, setHeader] = useState({ + dateTime: dateTime(), + greeting: greeter() + }) + + // Load applications useEffect(() => { - if (props.apps.length === 0) { - props.getApps(); + if (apps.length === 0) { + getApps(); } - }, [props.getApps]); + }, [getApps, apps]); + // Load bookmark categories useEffect(() => { - if (props.categories.length === 0) { - props.getCategories(); + if (categories.length === 0) { + getCategories(); } - }, [props.getCategories]); + }, [getCategories, categories]); - const dateAndTime = (): string => { - const days = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday']; - const months = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December']; + // Refresh greeter and time + useEffect(() => { + const interval = setInterval(() => { + setHeader({ + dateTime: dateTime(), + greeting: greeter() + }) + }, 1000); - const now = new Date(); - - return `${days[now.getDay()]}, ${now.getDate()} ${months[now.getMonth()]} ${now.getFullYear()}`; - } - - const greeter = (): string => { - const now = new Date().getHours(); - let msg: string; - - if (now >= 18) msg = 'Good evening!'; - else if (now >= 12) msg = 'Good afternoon!'; - else if (now >= 6) msg = 'Good morning!'; - else if (now >= 0) msg = 'Good night!'; - else msg = 'Hello!'; - - return msg; - } + return () => clearInterval(interval); + }, []) return (
-

{dateAndTime()}

+

{header.dateTime}

Go to Settings -

{greeter()}

+

{header.greeting}

- {props.appsLoading + {appsLoading ? : app.isPinned)} - totalApps={props.apps.length} + apps={apps.filter((app: App) => app.isPinned)} + totalApps={apps.length} /> }
- {props.categoriesLoading + {categoriesLoading ? : category.isPinned)} - totalCategories={props.categories.length} + categories={categories.filter((category: Category) => category.isPinned)} + totalCategories={categories.length} /> } diff --git a/client/src/components/Home/functions/dateTime.ts b/client/src/components/Home/functions/dateTime.ts new file mode 100644 index 0000000..44cc5e1 --- /dev/null +++ b/client/src/components/Home/functions/dateTime.ts @@ -0,0 +1,8 @@ +export const dateTime = (): string => { + const days = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday']; + const months = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December']; + + const now = new Date(); + + return `${days[now.getDay()]}, ${now.getDate()} ${months[now.getMonth()]} ${now.getFullYear()}`; +} \ No newline at end of file diff --git a/client/src/components/Home/functions/greeter.ts b/client/src/components/Home/functions/greeter.ts new file mode 100644 index 0000000..64cb2ea --- /dev/null +++ b/client/src/components/Home/functions/greeter.ts @@ -0,0 +1,12 @@ +export const greeter = (): string => { + const now = new Date().getHours(); + let msg: string; + + if (now >= 18) msg = 'Good evening!'; + else if (now >= 12) msg = 'Good afternoon!'; + else if (now >= 6) msg = 'Good morning!'; + else if (now >= 0) msg = 'Good night!'; + else msg = 'Hello!'; + + return msg; +} \ No newline at end of file diff --git a/client/src/components/UI/Modal/Modal.tsx b/client/src/components/UI/Modal/Modal.tsx index b8b86eb..ccb82be 100644 --- a/client/src/components/UI/Modal/Modal.tsx +++ b/client/src/components/UI/Modal/Modal.tsx @@ -1,4 +1,4 @@ -import { MouseEvent, useRef, useEffect } from 'react'; +import { MouseEvent, useRef } from 'react'; import classes from './Modal.module.css'; diff --git a/client/src/store/actions/app.ts b/client/src/store/actions/app.ts index 1699e31..a651cd2 100644 --- a/client/src/store/actions/app.ts +++ b/client/src/store/actions/app.ts @@ -89,7 +89,7 @@ export interface DeleteAppAction { export const deleteApp = (id: number) => async (dispatch: Dispatch) => { try { - const res = await axios.delete>(`/api/apps/${id}`); + await axios.delete>(`/api/apps/${id}`); dispatch({ type: ActionTypes.createNotification, diff --git a/client/src/store/actions/bookmark.ts b/client/src/store/actions/bookmark.ts index 11a8909..9608ebc 100644 --- a/client/src/store/actions/bookmark.ts +++ b/client/src/store/actions/bookmark.ts @@ -130,7 +130,7 @@ export interface DeleteCategoryAction { export const deleteCategory = (id: number) => async (dispatch: Dispatch) => { try { - const res = await axios.delete>(`/api/categories/${id}`); + await axios.delete>(`/api/categories/${id}`); dispatch({ type: ActionTypes.createNotification, @@ -191,7 +191,7 @@ export interface DeleteBookmarkAction { export const deleteBookmark = (bookmarkId: number, categoryId: number) => async (dispatch: Dispatch) => { try { - const res = await axios.delete>(`/api/bookmarks/${bookmarkId}`); + await axios.delete>(`/api/bookmarks/${bookmarkId}`); dispatch({ type: ActionTypes.createNotification, From 5e7cb72b8216b9adb47e52e54bd2265eef27f351 Mon Sep 17 00:00:00 2001 From: unknown Date: Sun, 13 Jun 2021 23:21:35 +0200 Subject: [PATCH 006/196] Reworked OtherSettings to work with global config state. Fixed bug with certain settings not being synchronized --- client/src/App.tsx | 4 - .../src/components/Apps/AppForm/AppForm.tsx | 4 +- .../Bookmarks/BookmarkForm/BookmarkForm.tsx | 4 +- client/src/components/Home/Home.tsx | 43 ++++++--- .../Settings/OtherSettings/OtherSettings.tsx | 95 ++++++++++--------- .../WeatherSettings/WeatherSettings.tsx | 40 ++++---- .../Widgets/WeatherWidget/WeatherWidget.tsx | 2 +- client/src/interfaces/Forms.ts | 7 ++ client/src/store/actions/config.ts | 10 +- client/src/utility/searchConfig.ts | 2 +- utils/initialConfig.json | 4 + 11 files changed, 124 insertions(+), 91 deletions(-) diff --git a/client/src/App.tsx b/client/src/App.tsx index d58f4ad..7210f3d 100644 --- a/client/src/App.tsx +++ b/client/src/App.tsx @@ -18,10 +18,6 @@ if (localStorage.theme) { store.dispatch(setTheme(localStorage.theme)); } -if (localStorage.customTitle) { - document.title = localStorage.customTitle; -} - const App = (): JSX.Element => { return ( diff --git a/client/src/components/Apps/AppForm/AppForm.tsx b/client/src/components/Apps/AppForm/AppForm.tsx index cffeb19..e9c7beb 100644 --- a/client/src/components/Apps/AppForm/AppForm.tsx +++ b/client/src/components/Apps/AppForm/AppForm.tsx @@ -100,10 +100,10 @@ const AppForm = (props: ComponentProps): JSX.Element => { /> + > {' '}Check supported URL formats diff --git a/client/src/components/Bookmarks/BookmarkForm/BookmarkForm.tsx b/client/src/components/Bookmarks/BookmarkForm/BookmarkForm.tsx index 9341565..eb83013 100644 --- a/client/src/components/Bookmarks/BookmarkForm/BookmarkForm.tsx +++ b/client/src/components/Bookmarks/BookmarkForm/BookmarkForm.tsx @@ -186,10 +186,10 @@ const BookmarkForm = (props: ComponentProps): JSX.Element => { /> + > {' '}Check supported URL formats diff --git a/client/src/components/Home/Home.tsx b/client/src/components/Home/Home.tsx index ab41ac2..854c04f 100644 --- a/client/src/components/Home/Home.tsx +++ b/client/src/components/Home/Home.tsx @@ -27,6 +27,9 @@ import WeatherWidget from '../Widgets/WeatherWidget/WeatherWidget'; import { greeter } from './functions/greeter'; import { dateTime } from './functions/dateTime'; +// Utils +import { searchConfig } from '../../utility'; + interface ComponentProps { getApps: Function; getCategories: Function; @@ -67,26 +70,36 @@ const Home = (props: ComponentProps): JSX.Element => { // Refresh greeter and time useEffect(() => { - const interval = setInterval(() => { - setHeader({ - dateTime: dateTime(), - greeting: greeter() - }) - }, 1000); + let interval: any; + + // Start interval only when hideHeader is false + if (searchConfig('hideHeader', 0) !== 1) { + interval = setInterval(() => { + setHeader({ + dateTime: dateTime(), + greeting: greeter() + }) + }, 1000); + } return () => clearInterval(interval); }, []) - + return ( -
-

{header.dateTime}

- Go to Settings - -

{header.greeting}

- -
-
+ {searchConfig('hideHeader', 0) !== 1 + ? ( +
+

{header.dateTime}

+ Go to Settings + +

{header.greeting}

+ +
+
+ ) + :
+ } {appsLoading diff --git a/client/src/components/Settings/OtherSettings/OtherSettings.tsx b/client/src/components/Settings/OtherSettings/OtherSettings.tsx index 7a6090e..5df8be7 100644 --- a/client/src/components/Settings/OtherSettings/OtherSettings.tsx +++ b/client/src/components/Settings/OtherSettings/OtherSettings.tsx @@ -1,69 +1,56 @@ import { useState, useEffect, ChangeEvent, FormEvent } from 'react'; -import axios from 'axios'; -import { connect } from 'react-redux'; +// Redux +import { connect } from 'react-redux'; +import { createNotification, updateConfig } from '../../../store/actions'; + +// Typescript +import { GlobalState, NewNotification, SettingsForm } from '../../../interfaces'; + +// UI import InputGroup from '../../UI/Forms/InputGroup/InputGroup'; import Button from '../../UI/Buttons/Button/Button'; -import { createNotification } from '../../../store/actions'; -import { ApiResponse, Config, NewNotification } from '../../../interfaces'; -interface FormState { - customTitle: string; - pinAppsByDefault: number; - pinCategoriesByDefault: number; -} +// Utils +import { searchConfig } from '../../../utility'; interface ComponentProps { createNotification: (notification: NewNotification) => void; + updateConfig: (formData: SettingsForm) => void; + loading: boolean; } const OtherSettings = (props: ComponentProps): JSX.Element => { - const [formData, setFormData] = useState({ + // Initial state + const [formData, setFormData] = useState({ customTitle: document.title, - pinAppsByDefault: 0, - pinCategoriesByDefault: 0 + pinAppsByDefault: 1, + pinCategoriesByDefault: 1, + hideHeader: 0 }) - // get initial config + // Get config useEffect(() => { - axios.get>('/api/config?keys=customTitle,pinAppsByDefault,pinCategoriesByDefault') - .then(data => { - let tmpFormData = { ...formData }; + setFormData({ + customTitle: searchConfig('customTitle', 'Flame'), + pinAppsByDefault: searchConfig('pinAppsByDefault', 1), + pinCategoriesByDefault: searchConfig('pinCategoriesByDefault', 1), + hideHeader: searchConfig('hideHeader', 0) + }) + }, [props.loading]); - data.data.data.forEach((config: Config) => { - let value: string | number = config.value; - if (config.valueType === 'number') { - value = parseFloat(value); - } - - tmpFormData = { - ...tmpFormData, - [config.key]: value - } - }) - - setFormData(tmpFormData); - }) - .catch(err => console.log(err)); - }, []) - - const formSubmitHandler = (e: FormEvent) => { + // Form handler + const formSubmitHandler = async (e: FormEvent) => { e.preventDefault(); - axios.put>('/api/config', formData) - .then(() => { - props.createNotification({ - title: 'Success', - message: 'Settings updated' - }) - }) - .catch((err) => console.log(err)); + // Save settings + await props.updateConfig(formData); // update local page title - localStorage.setItem('customTitle', formData.customTitle); document.title = formData.customTitle; } + // Input handler const inputChangeHandler = (e: ChangeEvent, isNumber?: boolean) => { let value: string | number = e.target.value; @@ -80,7 +67,7 @@ const OtherSettings = (props: ComponentProps): JSX.Element => { return (
formSubmitHandler(e)}> - + { + + + +
) } -export default connect(null, { createNotification })(OtherSettings); \ No newline at end of file +const mapStateToProps = (state: GlobalState) => { + return { + loading: state.config.loading + } +} + +export default connect(mapStateToProps, { createNotification, updateConfig })(OtherSettings); \ No newline at end of file diff --git a/client/src/components/Settings/WeatherSettings/WeatherSettings.tsx b/client/src/components/Settings/WeatherSettings/WeatherSettings.tsx index 6f14cfc..912aced 100644 --- a/client/src/components/Settings/WeatherSettings/WeatherSettings.tsx +++ b/client/src/components/Settings/WeatherSettings/WeatherSettings.tsx @@ -22,6 +22,7 @@ interface ComponentProps { } const WeatherSettings = (props: ComponentProps): JSX.Element => { + // Initial state const [formData, setFormData] = useState({ WEATHER_API_KEY: '', lat: 0, @@ -29,19 +30,7 @@ const WeatherSettings = (props: ComponentProps): JSX.Element => { isCelsius: 1 }) - const inputChangeHandler = (e: ChangeEvent, isNumber?: boolean) => { - let value: string | number = e.target.value; - - if (isNumber) { - value = parseFloat(value); - } - - setFormData({ - ...formData, - [e.target.name]: value - }) - } - + // Get config useEffect(() => { setFormData({ WEATHER_API_KEY: searchConfig('WEATHER_API_KEY', ''), @@ -51,6 +40,7 @@ const WeatherSettings = (props: ComponentProps): JSX.Element => { }) }, [props.loading]); + // Form handler const formSubmitHandler = async (e: FormEvent) => { e.preventDefault(); @@ -58,7 +48,7 @@ const WeatherSettings = (props: ComponentProps): JSX.Element => { if ((formData.lat || formData.long) && !formData.WEATHER_API_KEY) { props.createNotification({ title: 'Warning', - message: 'API Key is missing. Weather Module will NOT work' + message: 'API key is missing. Weather Module will NOT work' }) } @@ -81,10 +71,24 @@ const WeatherSettings = (props: ComponentProps): JSX.Element => { }); } + // Input handler + const inputChangeHandler = (e: ChangeEvent, isNumber?: boolean) => { + let value: string | number = e.target.value; + + if (isNumber) { + value = parseFloat(value); + } + + setFormData({ + ...formData, + [e.target.name]: value + }) + } + return (
formSubmitHandler(e)}> - + { - + { - + { /> - + + + + +
) @@ -124,4 +143,4 @@ const mapStateToProps = (state: GlobalState) => { } } -export default connect(mapStateToProps, { createNotification, updateConfig })(OtherSettings); \ No newline at end of file +export default connect(mapStateToProps, { createNotification, updateConfig, sortApps })(OtherSettings); \ No newline at end of file diff --git a/client/src/interfaces/Category.ts b/client/src/interfaces/Category.ts index 926987d..0f9f8f9 100644 --- a/client/src/interfaces/Category.ts +++ b/client/src/interfaces/Category.ts @@ -3,6 +3,7 @@ import { Model, Bookmark } from '.'; export interface Category extends Model { name: string; isPinned: boolean; + orderId: number; bookmarks: Bookmark[]; } diff --git a/client/src/store/actions/actionTypes.ts b/client/src/store/actions/actionTypes.ts index 42d863e..769bafa 100644 --- a/client/src/store/actions/actionTypes.ts +++ b/client/src/store/actions/actionTypes.ts @@ -7,7 +7,8 @@ import { AddAppAction, DeleteAppAction, UpdateAppAction, - ReorderAppAction, + ReorderAppsAction, + SortAppsAction, // Categories GetCategoriesAction, AddCategoryAction, @@ -38,7 +39,8 @@ export enum ActionTypes { addAppSuccess = 'ADD_APP_SUCCESS', deleteApp = 'DELETE_APP', updateApp = 'UPDATE_APP', - reorderApp = 'REORDER_APP', + reorderApps = 'REORDER_APPS', + sortApps = 'SORT_APPS', // Categories getCategories = 'GET_CATEGORIES', getCategoriesSuccess = 'GET_CATEGORIES_SUCCESS', @@ -68,7 +70,8 @@ export type Action = AddAppAction | DeleteAppAction | UpdateAppAction | - ReorderAppAction | + ReorderAppsAction | + SortAppsAction | // Categories GetCategoriesAction | AddCategoryAction | diff --git a/client/src/store/actions/app.ts b/client/src/store/actions/app.ts index 5c7db15..8dc9e94 100644 --- a/client/src/store/actions/app.ts +++ b/client/src/store/actions/app.ts @@ -1,7 +1,7 @@ import axios from 'axios'; import { Dispatch } from 'redux'; import { ActionTypes } from './actionTypes'; -import { App, ApiResponse, NewApp } from '../../interfaces'; +import { App, ApiResponse, NewApp, Config } from '../../interfaces'; import { CreateNotificationAction } from './notification'; export interface GetAppsAction { @@ -73,10 +73,13 @@ export const addApp = (formData: NewApp) => async (dispatch: Dispatch) => { } }) - dispatch({ + await dispatch({ type: ActionTypes.addAppSuccess, payload: res.data.data }) + + // Sort apps + dispatch(sortApps()) } catch (err) { console.log(err); } @@ -125,17 +128,20 @@ export const updateApp = (id: number, formData: NewApp) => async (dispatch: Disp } }) - dispatch({ + await dispatch({ type: ActionTypes.updateApp, payload: res.data.data }) + + // Sort apps + dispatch(sortApps()) } catch (err) { console.log(err); } } -export interface ReorderAppAction { - type: ActionTypes.reorderApp; +export interface ReorderAppsAction { + type: ActionTypes.reorderApps; payload: App[] } @@ -146,7 +152,7 @@ interface ReorderQuery { }[] } -export const reorderApp = (apps: App[]) => async (dispatch: Dispatch) => { +export const reorderApps = (apps: App[]) => async (dispatch: Dispatch) => { try { const updateQuery: ReorderQuery = { apps: [] } @@ -157,11 +163,39 @@ export const reorderApp = (apps: App[]) => async (dispatch: Dispatch) => { await axios.put<{}>('/api/apps/0/reorder', updateQuery); - dispatch({ - type: ActionTypes.reorderApp, + dispatch({ + type: ActionTypes.createNotification, + payload: { + title: 'Success', + message: 'New order saved' + } + }) + + dispatch({ + type: ActionTypes.reorderApps, payload: apps }) } catch (err) { console.log(err); } +} + +export interface SortAppsAction { + type: ActionTypes.sortApps; + payload: {}; +} + +export const sortApps = () => async (dispatch: Dispatch) => { + try { + const res = await axios.get>('/api/config/useOrdering'); + + console.log(res.data.data); + + dispatch({ + type: ActionTypes.sortApps, + payload: res.data.data.value + }) + } catch (err) { + console.log(err); + } } \ No newline at end of file diff --git a/client/src/store/reducers/app.ts b/client/src/store/reducers/app.ts index dcdb6ef..0935819 100644 --- a/client/src/store/reducers/app.ts +++ b/client/src/store/reducers/app.ts @@ -1,5 +1,6 @@ import { ActionTypes, Action } from '../actions'; import { App } from '../../interfaces/App'; +import { sortData } from '../../utility'; export interface State { loading: boolean; @@ -52,15 +53,9 @@ const pinApp = (state: State, action: Action): State => { } const addAppSuccess = (state: State, action: Action): State => { - const tmpApps: App[] = [...state.apps, action.payload].sort((a: App, b: App) => { - if (a.name.toLowerCase() < b.name.toLowerCase()) { return -1 } - if (a.name.toLowerCase() > b.name.toLowerCase()) { return 1 } - return 0; - }); - return { ...state, - apps: tmpApps + apps: [...state.apps, action.payload] } } @@ -89,13 +84,22 @@ const updateApp = (state: State, action: Action): State => { } } -const reorderApp = (state: State, action: Action): State => { +const reorderApps = (state: State, action: Action): State => { return { ...state, apps: action.payload } } +const sortApps = (state: State, action: Action): State => { + const sortedApps = sortData(state.apps, action.payload); + + return { + ...state, + apps: sortedApps + } +} + const appReducer = (state = initialState, action: Action) => { switch (action.type) { case ActionTypes.getApps: return getApps(state, action); @@ -105,7 +109,8 @@ const appReducer = (state = initialState, action: Action) => { case ActionTypes.addAppSuccess: return addAppSuccess(state, action); case ActionTypes.deleteApp: return deleteApp(state, action); case ActionTypes.updateApp: return updateApp(state, action); - case ActionTypes.reorderApp: return reorderApp(state, action); + case ActionTypes.reorderApps: return reorderApps(state, action); + case ActionTypes.sortApps: return sortApps(state, action); default: return state; } } diff --git a/client/src/utility/index.ts b/client/src/utility/index.ts index 1422624..a5407b2 100644 --- a/client/src/utility/index.ts +++ b/client/src/utility/index.ts @@ -1,4 +1,5 @@ export * from './iconParser'; export * from './urlParser'; export * from './searchConfig'; -export * from './checkVersion'; \ No newline at end of file +export * from './checkVersion'; +export * from './sortData'; \ No newline at end of file diff --git a/client/src/utility/sortData.ts b/client/src/utility/sortData.ts new file mode 100644 index 0000000..c1e9803 --- /dev/null +++ b/client/src/utility/sortData.ts @@ -0,0 +1,29 @@ +interface Data { + name: string; + orderId: number; + createdAt: Date; +} + +export const sortData = (array: T[], field: string): T[] => { + const sortedData = array.slice(); + + if (field === 'name') { + sortedData.sort((a: T, b: T) => { + return a.name.localeCompare(b.name, 'en', { sensitivity: 'base' }) + }) + } else if (field === 'orderId') { + sortedData.sort((a: T, b: T) => { + if (a.orderId < b.orderId) { return -1 } + if (a.orderId > b.orderId) { return 1 } + return 0; + }) + } else { + sortedData.sort((a: T, b: T) => { + if (a.createdAt < b.createdAt) { return -1 } + if (a.createdAt > b.createdAt) { return 1 } + return 0; + }) + } + + return sortedData; +} \ No newline at end of file diff --git a/models/Category.js b/models/Category.js index 5f82633..9c9eda6 100644 --- a/models/Category.js +++ b/models/Category.js @@ -9,6 +9,11 @@ const Category = sequelize.define('Category', { isPinned: { type: DataTypes.BOOLEAN, defaultValue: false + }, + orderId: { + type: DataTypes.INTEGER, + allowNull: true, + defaultValue: null } }, { tableName: 'categories' From 5b900872af59be04d0f717f6c62ed970cb6d7cd2 Mon Sep 17 00:00:00 2001 From: unknown Date: Fri, 18 Jun 2021 12:09:59 +0200 Subject: [PATCH 014/196] Apps reordering with drag-and-drop functionality --- client/.env | 2 +- .../Apps/AppTable/AppTable.module.css | 4 +- .../src/components/Apps/AppTable/AppTable.tsx | 206 +++++++++++------- client/src/store/actions/app.ts | 12 +- 4 files changed, 134 insertions(+), 90 deletions(-) diff --git a/client/.env b/client/.env index 69d1f92..8a650d5 100644 --- a/client/.env +++ b/client/.env @@ -1 +1 @@ -REACT_APP_VERSION=1.3.5 \ No newline at end of file +REACT_APP_VERSION=1.3.6 \ No newline at end of file diff --git a/client/src/components/Apps/AppTable/AppTable.module.css b/client/src/components/Apps/AppTable/AppTable.module.css index ee9c9a8..8b1e0ed 100644 --- a/client/src/components/Apps/AppTable/AppTable.module.css +++ b/client/src/components/Apps/AppTable/AppTable.module.css @@ -20,10 +20,10 @@ margin-bottom: 20px; } -.Message span { +.Message a { color: var(--color-accent); } -.Message span:hover { +.Message a:hover { cursor: pointer; } \ No newline at end of file diff --git a/client/src/components/Apps/AppTable/AppTable.tsx b/client/src/components/Apps/AppTable/AppTable.tsx index 1d80477..6ef6e6c 100644 --- a/client/src/components/Apps/AppTable/AppTable.tsx +++ b/client/src/components/Apps/AppTable/AppTable.tsx @@ -1,22 +1,52 @@ -import { KeyboardEvent } from 'react'; -import { connect } from 'react-redux'; -import { App, GlobalState } from '../../../interfaces'; -import { pinApp, deleteApp, reorderApp } from '../../../store/actions'; +import { Fragment, KeyboardEvent, useState, useEffect } from 'react'; import { DragDropContext, Droppable, Draggable, DropResult } from 'react-beautiful-dnd'; +import { Link } from 'react-router-dom'; +// Redux +import { connect } from 'react-redux'; +import { pinApp, deleteApp, reorderApps, updateConfig, createNotification } from '../../../store/actions'; + +// Typescript +import { App, GlobalState, NewNotification } from '../../../interfaces'; + +// CSS import classes from './AppTable.module.css'; + +// UI import Icon from '../../UI/Icons/Icon/Icon'; import Table from '../../UI/Table/Table'; +// Utils +import { searchConfig } from '../../../utility'; + interface ComponentProps { apps: App[]; pinApp: (app: App) => void; deleteApp: (id: number) => void; updateAppHandler: (app: App) => void; - reorderApp: (apps: App[]) => void; + reorderApps: (apps: App[]) => void; + updateConfig: (formData: any) => void; + createNotification: (notification: NewNotification) => void; } const AppTable = (props: ComponentProps): JSX.Element => { + const [localApps, setLocalApps] = useState([]); + const [isCustomOrder, setIsCustomOrder] = useState(false); + + // Copy apps array + useEffect(() => { + setLocalApps([...props.apps]); + }, [props.apps]) + + // Check ordering + useEffect(() => { + const order = searchConfig('useOrdering', ''); + + if (order === 'orderId') { + setIsCustomOrder(true); + } + }, []) + const deleteAppHandler = (app: App): void => { const proceed = window.confirm(`Are you sure you want to delete ${app.name} at ${app.url} ?`); @@ -25,6 +55,7 @@ const AppTable = (props: ComponentProps): JSX.Element => { } } + // Support keyboard navigation for actions const keyboardActionHandler = (e: KeyboardEvent, app: App, handler: Function) => { if (e.key === 'Enter') { handler(app); @@ -32,88 +63,103 @@ const AppTable = (props: ComponentProps): JSX.Element => { } const dragEndHanlder = (result: DropResult): void => { - console.log(result); + if (!isCustomOrder) { + props.createNotification({ + title: 'Error', + message: 'Custom order is disabled' + }) + return; + } if (!result.destination) { return; } - const tmpApps = [...props.apps]; + const tmpApps = [...localApps]; const [movedApp] = tmpApps.splice(result.source.index, 1); tmpApps.splice(result.destination.index, 0, movedApp); - props.reorderApp(tmpApps); + setLocalApps(tmpApps); + props.reorderApps(tmpApps); } return ( - - - {(provided) => ( - - {props.apps.map((app: App, index): JSX.Element => { - return ( - - {(provided, snapshot) => { - const style = { - border: snapshot.isDragging ? '1px solid var(--color-accent)' : 'none', - borderRadius: '4px', - ...provided.draggableProps.style, - }; + +
+ {isCustomOrder + ?

You can drag and drop single rows to reorder application

+ :

Custom order is disabled. You can change it in settings

+ } +
+ + + {(provided) => ( +
+ {localApps.map((app: App, index): JSX.Element => { + return ( + + {(provided, snapshot) => { + const style = { + border: snapshot.isDragging ? '1px solid var(--color-accent)' : 'none', + borderRadius: '4px', + ...provided.draggableProps.style, + }; - return ( - - - - - {!snapshot.isDragging && ( - - )} - - ) - }} - - ) - })} -
{app.name}{app.url}{app.icon} -
deleteAppHandler(app)} - onKeyDown={(e) => keyboardActionHandler(e, app, deleteAppHandler)} - tabIndex={0}> - -
-
props.updateAppHandler(app)} - onKeyDown={(e) => keyboardActionHandler(e, app, props.updateAppHandler)} - tabIndex={0}> - -
-
props.pinApp(app)} - onKeyDown={(e) => keyboardActionHandler(e, app, props.pinApp)} - tabIndex={0}> - {app.isPinned - ? - : - } -
-
- )} -
-
+ return ( + + {app.name} + {app.url} + {app.icon} + {!snapshot.isDragging && ( + +
deleteAppHandler(app)} + onKeyDown={(e) => keyboardActionHandler(e, app, deleteAppHandler)} + tabIndex={0}> + +
+
props.updateAppHandler(app)} + onKeyDown={(e) => keyboardActionHandler(e, app, props.updateAppHandler)} + tabIndex={0}> + +
+
props.pinApp(app)} + onKeyDown={(e) => keyboardActionHandler(e, app, props.pinApp)} + tabIndex={0}> + {app.isPinned + ? + : + } +
+ + )} + + ) + }} + + ) + })} + + )} + + + ) } @@ -123,4 +169,12 @@ const mapStateToProps = (state: GlobalState) => { } } -export default connect(mapStateToProps, { pinApp, deleteApp, reorderApp })(AppTable); \ No newline at end of file +const actions = { + pinApp, + deleteApp, + reorderApps, + updateConfig, + createNotification +} + +export default connect(mapStateToProps, actions)(AppTable); \ No newline at end of file diff --git a/client/src/store/actions/app.ts b/client/src/store/actions/app.ts index 8dc9e94..ebd66ad 100644 --- a/client/src/store/actions/app.ts +++ b/client/src/store/actions/app.ts @@ -161,15 +161,7 @@ export const reorderApps = (apps: App[]) => async (dispatch: Dispatch) => { orderId: index + 1 })) - await axios.put<{}>('/api/apps/0/reorder', updateQuery); - - dispatch({ - type: ActionTypes.createNotification, - payload: { - title: 'Success', - message: 'New order saved' - } - }) + await axios.put>('/api/apps/0/reorder', updateQuery); dispatch({ type: ActionTypes.reorderApps, @@ -189,8 +181,6 @@ export const sortApps = () => async (dispatch: Dispatch) => { try { const res = await axios.get>('/api/config/useOrdering'); - console.log(res.data.data); - dispatch({ type: ActionTypes.sortApps, payload: res.data.data.value From ae3141e37bc03b4d3e738a63da2a6893732ed100 Mon Sep 17 00:00:00 2001 From: unknown Date: Fri, 18 Jun 2021 13:42:55 +0200 Subject: [PATCH 015/196] Sorting and custom ordering for categories --- client/.env | 2 +- .../BookmarkTable/BookmarkTable.module.css | 17 ++ .../Bookmarks/BookmarkTable/BookmarkTable.tsx | 185 +++++++++++++----- client/src/components/Bookmarks/Bookmarks.tsx | 1 + .../Settings/OtherSettings/OtherSettings.tsx | 15 +- client/src/store/actions/actionTypes.ts | 6 + client/src/store/actions/app.ts | 2 +- client/src/store/actions/bookmark.ts | 62 +++++- client/src/store/reducers/bookmark.ts | 19 ++ controllers/category.js | 46 ++++- routes/category.js | 7 +- 11 files changed, 302 insertions(+), 60 deletions(-) diff --git a/client/.env b/client/.env index 8a650d5..43d8d21 100644 --- a/client/.env +++ b/client/.env @@ -1 +1 @@ -REACT_APP_VERSION=1.3.6 \ No newline at end of file +REACT_APP_VERSION=1.3.7 \ No newline at end of file diff --git a/client/src/components/Bookmarks/BookmarkTable/BookmarkTable.module.css b/client/src/components/Bookmarks/BookmarkTable/BookmarkTable.module.css index fc79b68..8b1e0ed 100644 --- a/client/src/components/Bookmarks/BookmarkTable/BookmarkTable.module.css +++ b/client/src/components/Bookmarks/BookmarkTable/BookmarkTable.module.css @@ -9,4 +9,21 @@ .TableAction:hover { cursor: pointer; +} + +.Message { + width: 100%; + display: flex; + justify-content: center; + align-items: baseline; + color: var(--color-primary); + margin-bottom: 20px; +} + +.Message a { + color: var(--color-accent); +} + +.Message a:hover { + cursor: pointer; } \ No newline at end of file diff --git a/client/src/components/Bookmarks/BookmarkTable/BookmarkTable.tsx b/client/src/components/Bookmarks/BookmarkTable/BookmarkTable.tsx index 1d319fb..02779d5 100644 --- a/client/src/components/Bookmarks/BookmarkTable/BookmarkTable.tsx +++ b/client/src/components/Bookmarks/BookmarkTable/BookmarkTable.tsx @@ -1,13 +1,25 @@ -import { ContentType } from '../Bookmarks'; -import classes from './BookmarkTable.module.css'; -import { connect } from 'react-redux'; -import { pinCategory, deleteCategory, deleteBookmark } from '../../../store/actions'; -import { KeyboardEvent } from 'react'; +import { KeyboardEvent, useState, useEffect, Fragment } from 'react'; +import { DragDropContext, Droppable, Draggable, DropResult } from 'react-beautiful-dnd'; +import { Link } from 'react-router-dom'; +// Redux +import { connect } from 'react-redux'; +import { pinCategory, deleteCategory, deleteBookmark, createNotification, reorderCategories } from '../../../store/actions'; + +// Typescript +import { Bookmark, Category, NewNotification } from '../../../interfaces'; +import { ContentType } from '../Bookmarks'; + +// CSS +import classes from './BookmarkTable.module.css'; + +// UI import Table from '../../UI/Table/Table'; -import { Bookmark, Category } from '../../../interfaces'; import Icon from '../../UI/Icons/Icon/Icon'; +// Utils +import { searchConfig } from '../../../utility'; + interface ComponentProps { contentType: ContentType; categories: Category[]; @@ -15,9 +27,28 @@ interface ComponentProps { deleteCategory: (id: number) => void; updateHandler: (data: Category | Bookmark) => void; deleteBookmark: (bookmarkId: number, categoryId: number) => void; + createNotification: (notification: NewNotification) => void; + reorderCategories: (categories: Category[]) => void; } const BookmarkTable = (props: ComponentProps): JSX.Element => { + const [localCategories, setLocalCategories] = useState([]); + const [isCustomOrder, setIsCustomOrder] = useState(false); + + // Copy categories array + useEffect(() => { + setLocalCategories([...props.categories]); + }, [props.categories]) + + // Check ordering + useEffect(() => { + const order = searchConfig('useOrdering', ''); + + if (order === 'orderId') { + setIsCustomOrder(true); + } + }) + const deleteCategoryHandler = (category: Category): void => { const proceed = window.confirm(`Are you sure you want to delete ${category.name}? It will delete ALL assigned bookmarks`); @@ -40,46 +71,100 @@ const BookmarkTable = (props: ComponentProps): JSX.Element => { } } + const dragEndHanlder = (result: DropResult): void => { + if (!isCustomOrder) { + props.createNotification({ + title: 'Error', + message: 'Custom order is disabled' + }) + return; + } + + if (!result.destination) { + return; + } + + const tmpCategories = [...localCategories]; + const [movedApp] = tmpCategories.splice(result.source.index, 1); + tmpCategories.splice(result.destination.index, 0, movedApp); + + setLocalCategories(tmpCategories); + props.reorderCategories(tmpCategories); + } + if (props.contentType === ContentType.category) { return ( - - {props.categories.map((category: Category) => { - return ( - - - - - ) - })} -
{category.name} -
deleteCategoryHandler(category)} - onKeyDown={(e) => keyboardActionHandler(e, category, deleteCategoryHandler)} - tabIndex={0}> - -
-
props.updateHandler(category)} - // onKeyDown={(e) => keyboardActionHandler(e, app, props.updateAppHandler)} - tabIndex={0}> - -
-
props.pinCategory(category)} - onKeyDown={(e) => keyboardActionHandler(e, category, props.pinCategory)} - tabIndex={0}> - {category.isPinned - ? - : - } -
-
+ +
+ {isCustomOrder + ?

You can drag and drop single rows to reorder categories

+ :

Custom order is disabled. You can change it in settings

+ } +
+ + + {(provided) => ( + + {localCategories.map((category: Category, index): JSX.Element => { + return ( + + {(provided, snapshot) => { + const style = { + border: snapshot.isDragging ? '1px solid var(--color-accent)' : 'none', + borderRadius: '4px', + ...provided.draggableProps.style, + }; + + return ( + + + {!snapshot.isDragging && ( + + )} + + ) + }} + + ) + })} +
{category.name} +
deleteCategoryHandler(category)} + onKeyDown={(e) => keyboardActionHandler(e, category, deleteCategoryHandler)} + tabIndex={0}> + +
+
props.updateHandler(category)} + tabIndex={0}> + +
+
props.pinCategory(category)} + onKeyDown={(e) => keyboardActionHandler(e, category, props.pinCategory)} + tabIndex={0}> + {category.isPinned + ? + : + } +
+
+ )} +
+
+
) } else { const bookmarks: {bookmark: Bookmark, categoryName: string}[] = []; @@ -111,14 +196,12 @@ const BookmarkTable = (props: ComponentProps): JSX.Element => {
deleteBookmarkHandler(bookmark.bookmark)} - // onKeyDown={(e) => keyboardActionHandler(e, app, deleteAppHandler)} tabIndex={0}>
props.updateHandler(bookmark.bookmark)} - // onKeyDown={(e) => keyboardActionHandler(e, app, props.updateAppHandler)} tabIndex={0}>
@@ -131,4 +214,12 @@ const BookmarkTable = (props: ComponentProps): JSX.Element => { } } -export default connect(null, { pinCategory, deleteCategory, deleteBookmark })(BookmarkTable); \ No newline at end of file +const actions = { + pinCategory, + deleteCategory, + deleteBookmark, + createNotification, + reorderCategories +} + +export default connect(null, actions)(BookmarkTable); \ No newline at end of file diff --git a/client/src/components/Bookmarks/Bookmarks.tsx b/client/src/components/Bookmarks/Bookmarks.tsx index 21f37b3..7a2deb2 100644 --- a/client/src/components/Bookmarks/Bookmarks.tsx +++ b/client/src/components/Bookmarks/Bookmarks.tsx @@ -43,6 +43,7 @@ const Bookmarks = (props: ComponentProps): JSX.Element => { name: '', id: -1, isPinned: false, + orderId: 0, bookmarks: [], createdAt: new Date(), updatedAt: new Date() diff --git a/client/src/components/Settings/OtherSettings/OtherSettings.tsx b/client/src/components/Settings/OtherSettings/OtherSettings.tsx index 50b04b5..bba197d 100644 --- a/client/src/components/Settings/OtherSettings/OtherSettings.tsx +++ b/client/src/components/Settings/OtherSettings/OtherSettings.tsx @@ -2,7 +2,7 @@ import { useState, useEffect, ChangeEvent, FormEvent } from 'react'; // Redux import { connect } from 'react-redux'; -import { createNotification, updateConfig, sortApps } from '../../../store/actions'; +import { createNotification, updateConfig, sortApps, sortCategories } from '../../../store/actions'; // Typescript import { GlobalState, NewNotification, SettingsForm } from '../../../interfaces'; @@ -18,6 +18,7 @@ interface ComponentProps { createNotification: (notification: NewNotification) => void; updateConfig: (formData: SettingsForm) => void; sortApps: () => void; + sortCategories: () => void; loading: boolean; } @@ -52,8 +53,9 @@ const OtherSettings = (props: ComponentProps): JSX.Element => { // Update local page title document.title = formData.customTitle; - // Get sorted apps + // Sort apps and categories with new settings props.sortApps(); + props.sortCategories(); } // Input handler @@ -143,4 +145,11 @@ const mapStateToProps = (state: GlobalState) => { } } -export default connect(mapStateToProps, { createNotification, updateConfig, sortApps })(OtherSettings); \ No newline at end of file +const actions = { + createNotification, + updateConfig, + sortApps, + sortCategories +} + +export default connect(mapStateToProps, actions)(OtherSettings); \ No newline at end of file diff --git a/client/src/store/actions/actionTypes.ts b/client/src/store/actions/actionTypes.ts index 769bafa..4324834 100644 --- a/client/src/store/actions/actionTypes.ts +++ b/client/src/store/actions/actionTypes.ts @@ -15,6 +15,8 @@ import { PinCategoryAction, DeleteCategoryAction, UpdateCategoryAction, + SortCategoriesAction, + ReorderCategoriesAction, // Bookmarks AddBookmarkAction, DeleteBookmarkAction, @@ -49,6 +51,8 @@ export enum ActionTypes { pinCategory = 'PIN_CATEGORY', deleteCategory = 'DELETE_CATEGORY', updateCategory = 'UPDATE_CATEGORY', + sortCategories = 'SORT_CATEGORIES', + reorderCategories = 'REORDER_CATEGORIES', // Bookmarks addBookmark = 'ADD_BOOKMARK', deleteBookmark = 'DELETE_BOOKMARK', @@ -78,6 +82,8 @@ export type Action = PinCategoryAction | DeleteCategoryAction | UpdateCategoryAction | + SortCategoriesAction | + ReorderCategoriesAction | // Bookmarks AddBookmarkAction | DeleteBookmarkAction | diff --git a/client/src/store/actions/app.ts b/client/src/store/actions/app.ts index ebd66ad..97db1c7 100644 --- a/client/src/store/actions/app.ts +++ b/client/src/store/actions/app.ts @@ -174,7 +174,7 @@ export const reorderApps = (apps: App[]) => async (dispatch: Dispatch) => { export interface SortAppsAction { type: ActionTypes.sortApps; - payload: {}; + payload: string; } export const sortApps = () => async (dispatch: Dispatch) => { diff --git a/client/src/store/actions/bookmark.ts b/client/src/store/actions/bookmark.ts index 9608ebc..0398bbb 100644 --- a/client/src/store/actions/bookmark.ts +++ b/client/src/store/actions/bookmark.ts @@ -1,7 +1,7 @@ import axios from 'axios'; import { Dispatch } from 'redux'; import { ActionTypes } from './actionTypes'; -import { Category, ApiResponse, NewCategory, Bookmark, NewBookmark } from '../../interfaces'; +import { Category, ApiResponse, NewCategory, Bookmark, NewBookmark, Config } from '../../interfaces'; import { CreateNotificationAction } from './notification'; /** @@ -54,6 +54,8 @@ export const addCategory = (formData: NewCategory) => async (dispatch: Dispatch) type: ActionTypes.addCategory, payload: res.data.data }) + + dispatch(sortCategories()); } catch (err) { console.log(err); } @@ -173,6 +175,8 @@ export const updateCategory = (id: number, formData: NewCategory) => async (disp type: ActionTypes.updateCategory, payload: res.data.data }) + + dispatch(sortCategories()); } catch (err) { console.log(err); } @@ -261,4 +265,60 @@ export const updateBookmark = (bookmarkId: number, formData: NewBookmark, previo } catch (err) { console.log(err); } +} + +/** + * SORT CATEGORIES + */ +export interface SortCategoriesAction { + type: ActionTypes.sortCategories; + payload: string; +} + +export const sortCategories = () => async (dispatch: Dispatch) => { + try { + const res = await axios.get>('/api/config/useOrdering'); + + dispatch({ + type: ActionTypes.sortCategories, + payload: res.data.data.value + }) + } catch (err) { + console.log(err); + } +} + +/** + * REORDER CATEGORIES + */ +export interface ReorderCategoriesAction { + type: ActionTypes.reorderCategories; + payload: Category[]; +} + +interface ReorderQuery { + categories: { + id: number; + orderId: number; + }[] +} + +export const reorderCategories = (categories: Category[]) => async (dispatch: Dispatch) => { + try { + const updateQuery: ReorderQuery = { categories: [] } + + categories.forEach((category, index) => updateQuery.categories.push({ + id: category.id, + orderId: index + 1 + })) + + await axios.put>('/api/categories/0/reorder', updateQuery); + + dispatch({ + type: ActionTypes.reorderCategories, + payload: categories + }) + } catch (err) { + console.log(err); + } } \ No newline at end of file diff --git a/client/src/store/reducers/bookmark.ts b/client/src/store/reducers/bookmark.ts index 2c1d5f0..a554d6e 100644 --- a/client/src/store/reducers/bookmark.ts +++ b/client/src/store/reducers/bookmark.ts @@ -1,5 +1,6 @@ import { ActionTypes, Action } from '../actions'; import { Category, Bookmark } from '../../interfaces'; +import { sortData } from '../../utility'; export interface State { loading: boolean; @@ -141,6 +142,22 @@ const updateBookmark = (state: State, action: Action): State => { } } +const sortCategories = (state: State, action: Action): State => { + const sortedCategories = sortData(state.categories, action.payload); + + return { + ...state, + categories: sortedCategories + } +} + +const reorderCategories = (state: State, action: Action): State => { + return { + ...state, + categories: action.payload + } +} + const bookmarkReducer = (state = initialState, action: Action) => { switch (action.type) { case ActionTypes.getCategories: return getCategories(state, action); @@ -152,6 +169,8 @@ const bookmarkReducer = (state = initialState, action: Action) => { case ActionTypes.updateCategory: return updateCategory(state, action); case ActionTypes.deleteBookmark: return deleteBookmark(state, action); case ActionTypes.updateBookmark: return updateBookmark(state, action); + case ActionTypes.sortCategories: return sortCategories(state, action); + case ActionTypes.reorderCategories: return reorderCategories(state, action); default: return state; } } diff --git a/controllers/category.js b/controllers/category.js index 29d03b4..15fe1eb 100644 --- a/controllers/category.js +++ b/controllers/category.js @@ -37,14 +37,32 @@ exports.createCategory = asyncWrapper(async (req, res, next) => { // @route GET /api/categories // @access Public exports.getCategories = asyncWrapper(async (req, res, next) => { - const categories = await Category.findAll({ - include: [{ - model: Bookmark, - as: 'bookmarks' - }], - order: [[ Sequelize.fn('lower', Sequelize.col('Category.name')), 'ASC' ]] + // Get config from database + const useOrdering = await Config.findOne({ + where: { key: 'useOrdering' } }); + const orderType = useOrdering ? useOrdering.value : 'createdAt'; + let categories; + + if (orderType == 'name') { + categories = await Category.findAll({ + include: [{ + model: Bookmark, + as: 'bookmarks' + }], + order: [[ Sequelize.fn('lower', Sequelize.col('Category.name')), 'ASC' ]] + }); + } else { + categories = await Category.findAll({ + include: [{ + model: Bookmark, + as: 'bookmarks' + }], + order: [[ orderType, 'ASC' ]] + }); + } + res.status(200).json({ success: true, data: categories @@ -119,6 +137,22 @@ exports.deleteCategory = asyncWrapper(async (req, res, next) => { where: { id: req.params.id } }) + res.status(200).json({ + success: true, + data: {} + }) +}) + +// @desc Reorder categories +// @route PUT /api/categories/0/reorder +// @access Public +exports.reorderCategories = asyncWrapper(async (req, res, next) => { + req.body.categories.forEach(async ({ id, orderId }) => { + await Category.update({ orderId }, { + where: { id } + }) + }) + res.status(200).json({ success: true, data: {} diff --git a/routes/category.js b/routes/category.js index b18b8f6..64067d7 100644 --- a/routes/category.js +++ b/routes/category.js @@ -6,7 +6,8 @@ const { getCategories, getCategory, updateCategory, - deleteCategory + deleteCategory, + reorderCategories } = require('../controllers/category'); router @@ -20,4 +21,8 @@ router .put(updateCategory) .delete(deleteCategory); +router + .route('/0/reorder') + .put(reorderCategories); + module.exports = router; \ No newline at end of file From 28680bec1ae368ece80a48d2035a3e47ec551b88 Mon Sep 17 00:00:00 2001 From: unknown Date: Fri, 18 Jun 2021 14:12:17 +0200 Subject: [PATCH 016/196] Fixed bug with decimal input values in Safari browser --- README.md | 26 +++++++++++++++---- client/.env | 2 +- .../WeatherSettings/WeatherSettings.tsx | 4 +++ 3 files changed, 26 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index 1e103ed..804ab86 100644 --- a/README.md +++ b/README.md @@ -8,7 +8,7 @@ ![Homescreen screenshot](./github/_home.png) ## Description -Flame is self-hosted startpage for your server. It's inspired (heavily) by [SUI](https://github.com/jeroenpardon/sui) +Flame is self-hosted startpage for your server. Its design is inspired (heavily) by [SUI](https://github.com/jeroenpardon/sui). Flame is very easy to setup and use. With built-in editors it allows you to setup your very own appliaction hub in no time - no file editing necessary. ## Technology - Backend @@ -23,6 +23,7 @@ Flame is self-hosted startpage for your server. It's inspired (heavily) by [SUI] ## Development ```sh +# clone repository git clone https://github.com/pawelmalak/flame cd flame @@ -33,13 +34,23 @@ npm run dev-init npm run dev ``` -## Deployment with Docker +## Building Docker images ```sh -# build image +# build image for amd64 only docker build -t flame . +# build multiarch image for amd64, armv7 and arm64 +# building failed multiple times with 2GB memory usage limit so you might want to increase it +docker buildx build \ + --platform linux/arm/v7,linux/arm64,linux/amd64 \ + -f Dockerfile.multiarch \ + -t flame:multiarch . +``` + +## Deployment with Docker +```sh # run container -docker run -p 5005:5005 -v :/app/data flame +docker run -p 5005:5005 -v /path/to/data:/app/data flame ``` ## Functionality @@ -73,4 +84,9 @@ docker run -p 5005:5005 -v :/app/data flame - Redirect: `https://{dest}` - URL without protocol - Format: `www.domain.com`, `domain.com`, `sub.domain.com`, `local`, `ip`, `ip:port` - - Redirect: `http://{dest}` \ No newline at end of file + - Redirect: `http://{dest}` + +## Support +If you want to support development of Flame and my upcoming self-hosted and open source projects you can use the following link: + +[![PayPal Badge](https://img.shields.io/badge/PayPal-00457C?style=for-the-badge&logo=paypal&logoColor=white)](https://www.paypal.com/paypalme/pawelmalak) \ No newline at end of file diff --git a/client/.env b/client/.env index 43d8d21..5a3822f 100644 --- a/client/.env +++ b/client/.env @@ -1 +1 @@ -REACT_APP_VERSION=1.3.7 \ No newline at end of file +REACT_APP_VERSION=1.4.0 \ No newline at end of file diff --git a/client/src/components/Settings/WeatherSettings/WeatherSettings.tsx b/client/src/components/Settings/WeatherSettings/WeatherSettings.tsx index 912aced..1378d44 100644 --- a/client/src/components/Settings/WeatherSettings/WeatherSettings.tsx +++ b/client/src/components/Settings/WeatherSettings/WeatherSettings.tsx @@ -116,6 +116,8 @@ const WeatherSettings = (props: ComponentProps): JSX.Element => { placeholder='52.22' value={formData.lat} onChange={(e) => inputChangeHandler(e, true)} + step='any' + lang='en-150' /> You can use @@ -135,6 +137,8 @@ const WeatherSettings = (props: ComponentProps): JSX.Element => { placeholder='21.01' value={formData.long} onChange={(e) => inputChangeHandler(e, true)} + step='any' + lang='en-150' /> From 4c3255107cd2ae5fc211afa5017defe4b8a988a6 Mon Sep 17 00:00:00 2001 From: unknown Date: Mon, 21 Jun 2021 13:59:17 +0200 Subject: [PATCH 017/196] Updated README.md with new screenshots, new installation guide and weather module instructions --- README.md | 21 +++++++++++++++++---- github/_apps.png | Bin 128292 -> 92461 bytes github/_bookmarks.png | Bin 182896 -> 95531 bytes github/_home.png | Bin 137275 -> 76779 bytes github/_themes.png | Bin 191037 -> 230864 bytes 5 files changed, 17 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 804ab86..6f4927c 100644 --- a/README.md +++ b/README.md @@ -34,7 +34,10 @@ npm run dev-init npm run dev ``` -## Building Docker images +## Installation + +### With Docker (recommended) +#### Building images ```sh # build image for amd64 only docker build -t flame . @@ -47,33 +50,43 @@ docker buildx build \ -t flame:multiarch . ``` -## Deployment with Docker +#### Deployment ```sh # run container docker run -p 5005:5005 -v /path/to/data:/app/data flame ``` +### Without Docker +Follow instructions from wiki: [Installation without Docker](https://github.com/pawelmalak/flame/wiki/Installation-without-docker) + ## Functionality - Applications - - Create, update and delete applications using GUI + - Create, update, delete and organize applications using GUI - Pin your favourite apps to homescreen ![Homescreen screenshot](./github/_apps.png) - Bookmarks - - Create, update and delete bookmarks and categories using GUI + - Create, update, delete and organize bookmarks and categories using GUI - Pin your favourite categories to homescreen ![Homescreen screenshot](./github/_bookmarks.png) - Weather - Get current temperature, cloud coverage and weather status with animated icons + - Themes - Customize your page by choosing from 12 color themes ![Homescreen screenshot](./github/_themes.png) ## Usage +### Setting up weather module +1. Obtain API Key from [Weather API](https://www.weatherapi.com/pricing.aspx). + > Free plan allows for 1M calls per month. Flame is making less then 3K API calls per month. +2. Get lat/long for your location. You can get them from [latlong.net](https://www.latlong.net/convert-address-to-lat-long.html). +3. Enter and save data. Weather widget will now update and should be visible on Home page. + ### Supported URL formats for applications and bookmarks #### Rules - URL starts with `http://` diff --git a/github/_apps.png b/github/_apps.png index ecc1a9df56921b3d6ef526acfce07bd8ec38eb34..39096dc120847384157d88aa67321936d59ffac3 100644 GIT binary patch literal 92461 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 literal 128292 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%0A?ZmAuW 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 PvnehjeLo%X`1OAPqlD^R diff --git a/github/_bookmarks.png b/github/_bookmarks.png index 6392eb2f1509372b655be94ac29cb08051dcefdf..fe6999b0857f49947474ac527645fb2786965fc0 100644 GIT binary patch literal 95531 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

PR;v~`=eoJ(qJH?0au8;iF_l6y29om}Sj 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

)BOX*MXh2wAE(OT7AuvhX}Yl6i(Iy&Zt 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 diff --git a/github/_home.png b/github/_home.png index 2f24126d7a11aa7a8390410ac06404769eb07734..c24050f080c41e75c3eb4f22486539885024b83c 100644 GIT binary patch literal 76779 zcmeFYcTiJp_bwbnML|HNNf%L2s`O5fsz~o0rT5-jKt!5=h2D$w66w7QNbf{y1f&x} z4-k@k8=vPrbAI0+-=E){ne*-$$4zDv?t9&9UF%xcT02rrMS+-*h7be-5x;sVs{sNL z1cN}=g>PL0KC!OUAqW1$bJtLi233sEZ2>=Aw|=4g0tBjzBf5Nh1Niy2%S(NC5QwDv z>K|U8bCCrIgv);=`$EgdWOp&nTWh)%heI-Un{iSN22mt}DT9V<{k9Z8YaM73Et}>1 zdfGmu8(mISJQ&YLVen_d$ZlCW^4r;~ipz*=SpnJKDwBJKBW&L%f6Kv_fAlP-Kk0KF z^;Y5e9^=ODZ1rf|&|{Ii$Bi@Qm0$SK=^}jTsPsS+;B%aSV=o7=xW5+*Js$tRw-4`K zAN%(g!x8gEvVvhfYq915Ys zp(G4JGw50iZ&b(hZe)4m&B;v1tya-F-!bt#b^XOTxKOTO(38p2xu*Nh=ebX~VT?A) zC=yG5!}>qa`;XxvlG9}+0;|Y6R+RKekaK=ZXjuW#9SSF9zK5ltq>0VX7Bc@l}yU;ZQxiQF+x`!tuhVu_0j2{ ztYzhjA;~J%b#1(JfflvXO&Dpy&B~7#pf*Kkv8=^yrL!Y>h66o^RH>ppZWuY`h1&L5Nmi;ebYS8K<|iv3z;mR0QZtHBaSghwrnr@9k-7%D#XH>AZfsd7UYG z*TNri1kVhVj9MH`Sco(=;yOB=8Uw40~!!6Qw{pe9M^i}TMx&Jo9Tv3LiE7&XJaj`M;;>gt)c4C=OcgPnSK z0NV~i-t~W+!_TMHn3v{-cYHBnaV4g3rE|O*x^Lnxc1g7}Wwy=DYd`3DU3EluU!>qt zT?9pgy_jLdÞ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 JlY8~%e*sSbGUWgO literal 137275 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

=%K2OFo0~XJASTX{-v5-!$-Ib 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 z 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 S^{=OIlYT5Gkt_E4um1t<|84#N diff --git a/github/_themes.png b/github/_themes.png index 6479d6f06faf1bee2a4a52e8e252257a9da53955..58fe97c00ee45cc4d150c7ebcea435fa8f9ad3d5 100644 GIT binary patch literal 230864 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 Pix|d)B(TVr*obZpxO(U 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

5N5B}xcE%Q#RXm<`=`7QbN z$dQ^R?rWR^GT<#wkky*?EB=#U(~$!+eC{YtQM>DFk4uRsGray^vVs^9uTfG5?8@kq z7P~Ui)YAXlM18Y4XjogU@CdJ>jQ86q zoQHLmVgD#c_=l9t1N@UbfM;}QE`g!21exLPuhIZ=jf%(@ z-EHzZ{e&HmnF;ryq`bV@>%FM&b#*tA?omo`klB$@FoESWXn&>7029!f`=Z?nGwq;= zErfx_S|<0v9L%K4pm8|z0L3OMAWRvo#vhLkqy8GO+LPn005enD?Qo>VMt65>HXnz! zC(<;|phl*H%JxaA?*2MF?Ft2G}s*IDa1bBWWJ2#w}j7dX10D^#e){?%W)k>i(&d*s^w$7@$yeZ_0 zuJ-xC(O;|fs3oAlj{#49RjO8rs|$FylIuY8JT3Zo_@A`qaepapT8P7#?o`%I3fNNh z!`SGT?a+tfuv4pf%WH=kte4n3zTf%<{-R-(80 zMpfc#TE7x*&pWeqfb`W3p7UyOC%g0clp5Q<<<)9Bfs-*Gmztdsm&}68lqa<;6`F`g zcKFKs*W*J5lHX8H37WLw4>SA~y&E*}c@5|K9(^Z|qK z178TDpcMRV5vX33>GLd57Z{AYo(x`FD25$bI*4yZ8y+So+om}pSjD4!4K5l00^D}J>AXWoI zj-`)GIUHmpR&EB;=XnG)d`!93&L(AQH(%w?@(%d&Zj(07X(`R#*)T74r~ZPKIkPvy zDO%S^Wax>J=M*U9&1hbY^^})jd$TYZK4I&gbe6HgNivZ12A%6{Qcl!jmp$BmZJAMK z(ljmX%KA5X3nqvBg+KK`y0g670=8OjqtF&@+g>7=@g$M6!GvfmIt-DE>7@GVYXM9w?_GHHp@!JjnolPPL-eK>DSz>etU3o0yuD~iGJ<4 z!C?CX7~lc9?85aJMgDeUgB@crDn31+9`_;J@6F2@3f6r)&nQ(!c>=CPnI=U)Z3x_66>-6 z&smNRV<5>3zQjy!^@5zQ9%V zOkCI`^+m2U#*7o9ifK9_m{slL(Mk`kq}OFGO-33wmLy3Ri#=$xl_;YdQ!@NNCRHD| zAcyI^iHu!_w!gYvyD1#p&fvNNo&+ca)={=GpO7L6I!>zKtIoczj2yg;t80#Jw&iEo zJ0I~qxXN%@=kE2a48!(1v@LdjhMCQfn7DNIiaYUaC!7n(h+ymzt!(Yi+_tvq(e_78 z8$F(s`2}#5UbRmZVJ{W%Q$bBaBEab;CJ!o%tIa#&KnS}OIL$nqui~Ve%%v*3I&`*{ zB8Pa~wR}x+sjW%kskWR5Tm{68+r`%Yy-_lN>u7!J>Fq-t8q)c^8Lw$6baW>L`Hj=l zAhAP9k)N;>TclpNC+x$Or!L-HfXXjm|yb;lJeC zk+<9z>O+ax?y37AgTybaz!ix*mTL>Rgz9b*`rz?DRu}RrGmZg89qPj+ApuRiARWku zM>q?0GM+YQ0(&~^TM@p*g{j{bTnX93R#fDEs@atE+Hc}VrHnM4OlO7q7dVF zM;G3wicQeY=*3v=*{z8m?i<=%N_x|oLW8W|e|2^FVHz)#3fCXJ{v-M=eZJYKsG$&m z09diF-Nn7;L3TSlY`(Vig~3o9@6mYo(ZXi&`gJS$QYYxq07!F9MQTQHSat8c)~XwT zHJdNzOM3$iF&e8k`Dn-81J@$;WwtI;x!{D;{Vuj@1@H|V(_Pm<$K#jy3Z9)DKB-XD;>bXJlX-ag44S=e<5 z#lp8cNbP##)agHw!UTF0qS~BivMhL`yAt%HbHOG(BYA(Y#p)9e4pXoE^_RxxX=5%q#w%AvucNOGFPPDrE2x3@3*-vgytj;e3X4^z*ZiJ zFjIKK+%Cb1$9xmR_1I_c> zW6!J0X{V04g`{3XmQQ0T#dhTUTc5M6s@B(QO$be%D3;tWK*(C0tL>SGso5$K2z&bu2BFw{FuilN za;NU~z$`i8Tyy^7NL-gTZ@Brq{*~@j>V5B1O5l=TT8(!9VrP31R{jYcVFc$d?$J#U zKg-YXFx|Di)d8$SCeBIejuYK(rU#s*R}t)qOm*DV zYU2)nYFIfqBAA3bzOcBF+9&Nl(qlN6-h3wL_F7ErtRh!;H6ZoXNZwJYKO2uF{^3;( zlRNil%Raom5v-oo$mcVhmPX56lqi9Ra~^993n}c3$qP_^dkQ@mBR)f_E>^Rwi;l

tomW47R{&XsE|Me2vYvq!JrKeG_=8A4- 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 CEWQ{3 literal 191037 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 >KQ>IKKF@~@_Hj`6b4B4w0awEA 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

XwcYGU+8{r_vRw*;2|hpSIw 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

QY)_iWF5#*T)m90)}^d!08<;^ZepZ|{h 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

    `sYdaM57Q4C0% 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 b-X~ak>p#P|@(svIL(o;F>x$V5w*&tV Date: Tue, 22 Jun 2021 13:07:32 +0200 Subject: [PATCH 018/196] Read/write css file from app settings. Changed order of operations at app startup. Added nano to Dockerfile --- Dockerfile | 2 + Dockerfile.multiarch | 2 + client/.env | 2 +- client/public/flame.css | 0 client/public/index.html | 11 ++--- client/public/robots.txt | 3 +- client/src/components/Settings/Settings.tsx | 9 ++++ .../Settings/StyleSettings/StyleSettings.tsx | 44 +++++++++++++++++++ .../UI/Forms/InputGroup/InputGroup.module.css | 11 ++++- controllers/config.js | 29 ++++++++++++ db.js | 15 ++++--- models/associateModels.js | 8 ++-- routes/config.js | 7 +++ server.js | 28 ++++++------ utils/File.js | 25 +++++++++++ 15 files changed, 161 insertions(+), 35 deletions(-) create mode 100644 client/public/flame.css create mode 100644 client/src/components/Settings/StyleSettings/StyleSettings.tsx create mode 100644 utils/File.js diff --git a/Dockerfile b/Dockerfile index cd99f47..148d970 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,5 +1,7 @@ FROM node:14-alpine +RUN apk update && apk add --no-cache nano + WORKDIR /app COPY package*.json ./ diff --git a/Dockerfile.multiarch b/Dockerfile.multiarch index 0cb1788..e0827af 100644 --- a/Dockerfile.multiarch +++ b/Dockerfile.multiarch @@ -1,5 +1,7 @@ FROM node:14-alpine +RUN apk update && apk add --no-cache nano + WORKDIR /app COPY package*.json ./ diff --git a/client/.env b/client/.env index 5a3822f..d53bf3c 100644 --- a/client/.env +++ b/client/.env @@ -1 +1 @@ -REACT_APP_VERSION=1.4.0 \ No newline at end of file +REACT_APP_VERSION=1.4.1 \ No newline at end of file diff --git a/client/public/flame.css b/client/public/flame.css new file mode 100644 index 0000000..e69de29 diff --git a/client/public/index.html b/client/public/index.html index 2ede77f..3f43c40 100644 --- a/client/public/index.html +++ b/client/public/index.html @@ -4,15 +4,10 @@ - - - - + + Flame @@ -21,4 +16,4 @@
    - + \ No newline at end of file diff --git a/client/public/robots.txt b/client/public/robots.txt index e9e57dc..77470cb 100644 --- a/client/public/robots.txt +++ b/client/public/robots.txt @@ -1,3 +1,2 @@ -# https://www.robotstxt.org/robotstxt.html User-agent: * -Disallow: +Disallow: / \ No newline at end of file diff --git a/client/src/components/Settings/Settings.tsx b/client/src/components/Settings/Settings.tsx index 49b08bd..b1eb300 100644 --- a/client/src/components/Settings/Settings.tsx +++ b/client/src/components/Settings/Settings.tsx @@ -9,6 +9,7 @@ import Themer from '../Themer/Themer'; import WeatherSettings from './WeatherSettings/WeatherSettings'; import OtherSettings from './OtherSettings/OtherSettings'; import AppDetails from './AppDetails/AppDetails'; +import StyleSettings from './StyleSettings/StyleSettings'; const Settings = (): JSX.Element => { return ( @@ -40,6 +41,13 @@ const Settings = (): JSX.Element => { to='/settings/other'> Other + + CSS + { + diff --git a/client/src/components/Settings/StyleSettings/StyleSettings.tsx b/client/src/components/Settings/StyleSettings/StyleSettings.tsx new file mode 100644 index 0000000..f73ac1d --- /dev/null +++ b/client/src/components/Settings/StyleSettings/StyleSettings.tsx @@ -0,0 +1,44 @@ +import { useState, useEffect, ChangeEvent, FormEvent } from 'react'; +import axios from 'axios'; + +import InputGroup from '../../UI/Forms/InputGroup/InputGroup'; +import Button from '../../UI/Buttons/Button/Button'; +import { ApiResponse } from '../../../interfaces'; + +const StyleSettings = (): JSX.Element => { + const [customStyles, setCustomStyles] = useState(''); + + useEffect(() => { + axios.get>('/api/config/0/css') + .then(data => setCustomStyles(data.data.data)) + .catch(err => console.log(err)); + }, []) + + const inputChangeHandler = (e: ChangeEvent) => { + e.preventDefault(); + setCustomStyles(e.target.value); + } + + const formSubmitHandler = (e: FormEvent) => { + e.preventDefault(); + + axios.put>('/api/config/0/css', { styles: customStyles }); + } + + return ( +
    formSubmitHandler(e)}> + + + + + +
    + ) +} + +export default StyleSettings; \ No newline at end of file diff --git a/client/src/components/UI/Forms/InputGroup/InputGroup.module.css b/client/src/components/UI/Forms/InputGroup/InputGroup.module.css index 6241764..93b74f1 100644 --- a/client/src/components/UI/Forms/InputGroup/InputGroup.module.css +++ b/client/src/components/UI/Forms/InputGroup/InputGroup.module.css @@ -4,12 +4,14 @@ .InputGroup label, .InputGroup span, -.InputGroup input { +.InputGroup input, +.InputGroup textarea { display: block; } .InputGroup input, -.InputGroup select { +.InputGroup select, +.InputGroup textarea { margin: 8px 0; width: 100%; border: none; @@ -30,4 +32,9 @@ .InputGroup label { color: var(--color-primary); +} + +.InputGroup textarea { + resize: none; + height: 50vh; } \ No newline at end of file diff --git a/controllers/config.js b/controllers/config.js index f8f3613..ef4f707 100644 --- a/controllers/config.js +++ b/controllers/config.js @@ -2,6 +2,8 @@ const asyncWrapper = require('../middleware/asyncWrapper'); const ErrorResponse = require('../utils/ErrorResponse'); const Config = require('../models/Config'); const { Op } = require('sequelize'); +const File = require('../utils/File'); +const { join } = require('path'); // @desc Insert new key:value pair // @route POST /api/config @@ -122,6 +124,33 @@ exports.deletePair = asyncWrapper(async (req, res, next) => { await pair.destroy(); + res.status(200).json({ + success: true, + data: {} + }) +}) + +// @desc Get custom CSS file +// @route GET /api/config/0/css +// @access Public +exports.getCss = asyncWrapper(async (req, res, next) => { + const file = new File(join(__dirname, '../public/flame.css')); + const content = file.read(); + + res.status(200).json({ + success: true, + data: content + }) +}) + + +// @desc Update custom CSS file +// @route PUT /api/config/0/css +// @access Public +exports.updateCss = asyncWrapper(async (req, res, next) => { + const file = new File(join(__dirname, '../public/flame.css')); + file.write(req.body.styles); + res.status(200).json({ success: true, data: {} diff --git a/db.js b/db.js index bc4c536..7728737 100644 --- a/db.js +++ b/db.js @@ -4,21 +4,26 @@ const sequelize = new Sequelize({ dialect: 'sqlite', storage: './data/db.sqlite', logging: false -}); +}) const connectDB = async () => { try { await sequelize.authenticate(); console.log('Connected to database'); - await sequelize.sync({ alter: true }); - console.log('All models were synced'); + const syncModels = true; + + if (syncModels) { + console.log('Starting model synchronization'); + await sequelize.sync({ alter: true }); + console.log('All models were synchronized'); + } } catch (error) { - console.error('Unable to connect to the database:', error); + throw new Error(`Unable to connect to the database: ${error.message}`); } } module.exports = { connectDB, sequelize -}; \ No newline at end of file +} \ No newline at end of file diff --git a/models/associateModels.js b/models/associateModels.js index 2457092..d1b86c1 100644 --- a/models/associateModels.js +++ b/models/associateModels.js @@ -2,12 +2,14 @@ const Category = require('./Category'); const Bookmark = require('./Bookmark'); const associateModels = () => { - // Category <> Bookmark Category.hasMany(Bookmark, { - as: 'bookmarks', + foreignKey: 'categoryId', + as: 'bookmarks' + }); + + Bookmark.belongsTo(Category, { foreignKey: 'categoryId' }); - Bookmark.belongsTo(Category, { foreignKey: 'categoryId' }); } module.exports = associateModels; \ No newline at end of file diff --git a/routes/config.js b/routes/config.js index caadbe5..eebf5dd 100644 --- a/routes/config.js +++ b/routes/config.js @@ -8,6 +8,8 @@ const { updateValue, updateValues, deletePair, + updateCss, + getCss, } = require('../controllers/config'); router @@ -22,4 +24,9 @@ router .put(updateValue) .delete(deletePair); +router + .route('/0/css') + .get(getCss) + .put(updateCss); + module.exports = router; \ No newline at end of file diff --git a/server.js b/server.js index 569b7ac..c15ebf0 100644 --- a/server.js +++ b/server.js @@ -10,20 +10,20 @@ const initConfig = require('./utils/initConfig'); const PORT = process.env.PORT || 5005; -connectDB() - .then(() => { - associateModels(); - initConfig(); - }); +(async () => { + await connectDB(); + await associateModels(); + await initConfig(); -// Create server for Express API and WebSockets -const server = http.createServer(); -server.on('request', api); + // Create server for Express API and WebSockets + const server = http.createServer(); + server.on('request', api); -// Register weatherSocket -const weatherSocket = new Socket(server); -Sockets.registerSocket('weather', weatherSocket); + // Register weatherSocket + const weatherSocket = new Socket(server); + Sockets.registerSocket('weather', weatherSocket); -server.listen(PORT, () => { - console.log(`Server is running on port ${PORT} in ${process.env.NODE_ENV} mode`); -}) \ No newline at end of file + server.listen(PORT, () => { + console.log(`Server is running on port ${PORT} in ${process.env.NODE_ENV} mode`); + }) +})(); \ No newline at end of file diff --git a/utils/File.js b/utils/File.js new file mode 100644 index 0000000..0b2fbdc --- /dev/null +++ b/utils/File.js @@ -0,0 +1,25 @@ +const fs = require('fs'); + +class File { + constructor(path) { + this.path = path; + this.content = ''; + } + + read() { + try { + const content = fs.readFileSync(this.path, { encoding: 'utf-8' }); + this.content = content; + return this.content; + } catch (err) { + return err.message; + } + } + + write(data) { + this.content = data; + fs.writeFileSync(this.path, this.content); + } +} + +module.exports = File; \ No newline at end of file From e3ed429da141f24088e914e5b84f2ba4070c8af9 Mon Sep 17 00:00:00 2001 From: unknown Date: Tue, 22 Jun 2021 14:49:00 +0200 Subject: [PATCH 019/196] Imporved logger --- .dockerignore | 3 +- .gitignore | 5 +- Socket.js | 4 +- client/.env | 2 +- .../Settings/StyleSettings/StyleSettings.tsx | 29 +++++++-- db.js | 15 +++-- middleware/errorHandler.js | 5 +- server.js | 4 +- utils/Logger.js | 63 +++++++++---------- utils/clearWeatherData.js | 4 +- utils/initConfig.js | 4 +- utils/jobs.js | 6 +- 12 files changed, 89 insertions(+), 55 deletions(-) diff --git a/.dockerignore b/.dockerignore index c77a412..5fcee18 100644 --- a/.dockerignore +++ b/.dockerignore @@ -1,2 +1,3 @@ node_modules -github \ No newline at end of file +github +public \ No newline at end of file diff --git a/.gitignore b/.gitignore index ff227fe..2955045 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ -node_modules/ -data/ \ No newline at end of file +node_modules +data +public \ No newline at end of file diff --git a/Socket.js b/Socket.js index 0ae1f56..a6a58c6 100644 --- a/Socket.js +++ b/Socket.js @@ -1,11 +1,13 @@ const WebSocket = require('ws'); +const Logger = require('./utils/Logger'); +const logger = new Logger(); class Socket { constructor(server) { this.webSocketServer = new WebSocket.Server({ server }) this.webSocketServer.on('listening', () => { - console.log('Socket: listen'); + logger.log('Socket: listen'); }) this.webSocketServer.on('connection', (webSocketClient) => { diff --git a/client/.env b/client/.env index d53bf3c..a0df532 100644 --- a/client/.env +++ b/client/.env @@ -1 +1 @@ -REACT_APP_VERSION=1.4.1 \ No newline at end of file +REACT_APP_VERSION=1.4.2 \ No newline at end of file diff --git a/client/src/components/Settings/StyleSettings/StyleSettings.tsx b/client/src/components/Settings/StyleSettings/StyleSettings.tsx index f73ac1d..9f45065 100644 --- a/client/src/components/Settings/StyleSettings/StyleSettings.tsx +++ b/client/src/components/Settings/StyleSettings/StyleSettings.tsx @@ -1,17 +1,28 @@ import { useState, useEffect, ChangeEvent, FormEvent } from 'react'; import axios from 'axios'; +// Redux +import { connect } from 'react-redux'; +import { createNotification } from '../../../store/actions'; + +// Typescript +import { ApiResponse, NewNotification } from '../../../interfaces'; + +// UI import InputGroup from '../../UI/Forms/InputGroup/InputGroup'; import Button from '../../UI/Buttons/Button/Button'; -import { ApiResponse } from '../../../interfaces'; -const StyleSettings = (): JSX.Element => { +interface ComponentProps { + createNotification: (notification: NewNotification) => void; +} + +const StyleSettings = (props: ComponentProps): JSX.Element => { const [customStyles, setCustomStyles] = useState(''); useEffect(() => { axios.get>('/api/config/0/css') .then(data => setCustomStyles(data.data.data)) - .catch(err => console.log(err)); + .catch(err => console.log(err.response)); }, []) const inputChangeHandler = (e: ChangeEvent) => { @@ -22,7 +33,14 @@ const StyleSettings = (): JSX.Element => { const formSubmitHandler = (e: FormEvent) => { e.preventDefault(); - axios.put>('/api/config/0/css', { styles: customStyles }); + axios.put>('/api/config/0/css', { styles: customStyles }) + .then(() => { + props.createNotification({ + title: 'Success', + message: 'CSS saved. Reload page to see changes' + }) + }) + .catch(err => console.log(err.response)); } return ( @@ -34,6 +52,7 @@ const StyleSettings = (): JSX.Element => { name='customStyles' value={customStyles} onChange={(e) => inputChangeHandler(e)} + spellCheck={false} > @@ -41,4 +60,4 @@ const StyleSettings = (): JSX.Element => { ) } -export default StyleSettings; \ No newline at end of file +export default connect(null, { createNotification })(StyleSettings); \ No newline at end of file diff --git a/db.js b/db.js index 7728737..94932e8 100644 --- a/db.js +++ b/db.js @@ -1,4 +1,6 @@ const { Sequelize } = require('sequelize'); +const Logger = require('./utils/Logger'); +const logger = new Logger(); const sequelize = new Sequelize({ dialect: 'sqlite', @@ -9,17 +11,18 @@ const sequelize = new Sequelize({ const connectDB = async () => { try { await sequelize.authenticate(); - console.log('Connected to database'); + logger.log('Connected to database'); + + const syncModels = false; - const syncModels = true; - if (syncModels) { - console.log('Starting model synchronization'); + logger.log('Starting model synchronization'); await sequelize.sync({ alter: true }); - console.log('All models were synchronized'); + logger.log('All models were synchronized'); } } catch (error) { - throw new Error(`Unable to connect to the database: ${error.message}`); + logger.log(`Unable to connect to the database: ${error.message}`, 'ERROR'); + process.exit(1); } } diff --git a/middleware/errorHandler.js b/middleware/errorHandler.js index 2de45a7..5db2bb2 100644 --- a/middleware/errorHandler.js +++ b/middleware/errorHandler.js @@ -1,5 +1,7 @@ const ErrorResponse = require('../utils/ErrorResponse'); const colors = require('colors'); +const Logger = require('../utils/Logger'); +const logger = new Logger(); const errorHandler = (err, req, res, next) => { let error = { ...err }; @@ -10,8 +12,7 @@ const errorHandler = (err, req, res, next) => { // error = new ErrorResponse(`Field ${msg}`, 400); // } - console.log(error); - console.log(`${err}`); + logger.log(error.message.split(',')[0], 'ERROR'); res.status(err.statusCode || 500).json({ success: false, diff --git a/server.js b/server.js index c15ebf0..6ce25d0 100644 --- a/server.js +++ b/server.js @@ -7,6 +7,8 @@ const Socket = require('./Socket'); const Sockets = require('./Sockets'); const associateModels = require('./models/associateModels'); const initConfig = require('./utils/initConfig'); +const Logger = require('./utils/Logger'); +const logger = new Logger(); const PORT = process.env.PORT || 5005; @@ -24,6 +26,6 @@ const PORT = process.env.PORT || 5005; Sockets.registerSocket('weather', weatherSocket); server.listen(PORT, () => { - console.log(`Server is running on port ${PORT} in ${process.env.NODE_ENV} mode`); + logger.log(`Server is running on port ${PORT} in ${process.env.NODE_ENV} mode`); }) })(); \ No newline at end of file diff --git a/utils/Logger.js b/utils/Logger.js index 6301dfe..6648212 100644 --- a/utils/Logger.js +++ b/utils/Logger.js @@ -1,40 +1,39 @@ -const fs = require('fs'); - class Logger { - constructor() { - this.logFileHandler(); + log(message, level = 'INFO') { + console.log(`[${this.generateTimestamp()}] [${level}] ${message}`) } - logFileHandler() { - if (!fs.existsSync('./flame.log')) { - fs.writeFileSync('./flame.log', ''); - } else { - console.log('file exists'); + generateTimestamp() { + const d = new Date(); + + // Date + const year = d.getFullYear(); + const month = this.parseDate(d.getMonth() + 1); + const day = this.parseDate(d.getDate()); + + // Time + const hour = this.parseDate(d.getHours()); + const minutes = this.parseDate(d.getMinutes()); + const seconds = this.parseDate(d.getSeconds()); + const miliseconds = this.parseDate(d.getMilliseconds(), true); + + // Timezone + const tz = -d.getTimezoneOffset() / 60; + + return `${year}-${month}-${day} ${hour}:${minutes}:${seconds}.${miliseconds} UTC${tz > 0 ? '+' + tz : tz}`; + } + + parseDate(date, ms = false) { + if (ms) { + if (date >= 10 && date < 100) { + return `0${date}`; + } else if (date < 10) { + return `00${date}`; + } } - } - writeLog(logMsg, logType) { - - } - - generateLog(logMsg, logType) { - const now = new Date(); - const date = `${this.parseNumber(now.getDate())}-${this.parseNumber(now.getMonth() + 1)}-${now.getFullYear()}`; - const time = `${this.parseNumber(now.getHours())}:${this.parseNumber(now.getMinutes())}:${this.parseNumber(now.getSeconds())}.${now.getMilliseconds()}`; - const log = `[${date} ${time}]: ${logType} ${logMsg}`; - return log; - // const timestamp = new Date().toISOString(); - } - - parseNumber(number) { - if (number > 9) { - return number; - } else { - return `0${number}`; - } + return date < 10 ? `0${date}` : date.toString(); } } -// console.log(logger.generateLog('testMsg', 'INFO')); - -module.exports = new Logger(); \ No newline at end of file +module.exports = Logger; \ No newline at end of file diff --git a/utils/clearWeatherData.js b/utils/clearWeatherData.js index d43f975..07be15b 100644 --- a/utils/clearWeatherData.js +++ b/utils/clearWeatherData.js @@ -1,5 +1,7 @@ const { Op } = require('sequelize'); const Weather = require('../models/Weather'); +const Logger = require('./Logger'); +const logger = new Logger(); const clearWeatherData = async () => { const weather = await Weather.findOne({ @@ -16,7 +18,7 @@ const clearWeatherData = async () => { }) } - console.log('Old weather data was deleted'); + logger.log('Old weather data was deleted'); } module.exports = clearWeatherData; \ No newline at end of file diff --git a/utils/initConfig.js b/utils/initConfig.js index de1cc88..1455ccb 100644 --- a/utils/initConfig.js +++ b/utils/initConfig.js @@ -1,6 +1,8 @@ const { Op } = require('sequelize'); const Config = require('../models/Config'); const { config } = require('./initialConfig.json'); +const Logger = require('./Logger'); +const logger = new Logger(); const initConfig = async () => { // Get config values @@ -26,7 +28,7 @@ const initConfig = async () => { } }) - console.log('Initial config created'); + logger.log('Initial config created'); return; } diff --git a/utils/jobs.js b/utils/jobs.js index 19dc0a8..935f497 100644 --- a/utils/jobs.js +++ b/utils/jobs.js @@ -2,15 +2,17 @@ const schedule = require('node-schedule'); const getExternalWeather = require('./getExternalWeather'); const clearWeatherData = require('./clearWeatherData'); const Sockets = require('../Sockets'); +const Logger = require('./Logger'); +const logger = new Logger(); // Update weather data every 15 minutes const weatherJob = schedule.scheduleJob('updateWeather', '0 */15 * * * *', async () => { try { const weatherData = await getExternalWeather(); - console.log('weather updated'); + logger.log('Weather updated'); Sockets.getSocket('weather').socket.send(JSON.stringify(weatherData)); } catch (err) { - console.log(err.message); + logger.log(err.message, 'ERROR'); } }) From 472cfd6610d484a3b5d1f3118fdc4ae5926115ae Mon Sep 17 00:00:00 2001 From: Rafael Griffo Goes Date: Tue, 22 Jun 2021 22:54:24 -0400 Subject: [PATCH 020/196] Adding npm install on client code --- Dockerfile | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index cd99f47..3b448d4 100644 --- a/Dockerfile +++ b/Dockerfile @@ -10,6 +10,7 @@ COPY . . RUN mkdir -p ./public ./data \ && cd ./client \ + && npm install --production \ && npm run build \ && cd .. \ && mv ./client/build/* ./public \ @@ -19,4 +20,4 @@ EXPOSE 5005 ENV NODE_ENV=production -CMD ["node", "server.js"] \ No newline at end of file +CMD ["node", "server.js"] From 6c067bee317c9aa91aa2800e00208aa4df9c5bcf Mon Sep 17 00:00:00 2001 From: unknown Date: Wed, 23 Jun 2021 14:15:14 +0200 Subject: [PATCH 021/196] Option to open links in the same tab. Api upload icon. Render image icon instead of MDI. Dockerfile client dependencies fix. --- Dockerfile | 1 + Dockerfile.multiarch | 1 + README.md | 5 + api.js | 8 +- client/.env | 2 +- .../Apps/AppCard/AppCard.module.css | 8 ++ .../src/components/Apps/AppCard/AppCard.tsx | 12 +- .../Bookmarks/BookmarkCard/BookmarkCard.tsx | 4 +- .../Settings/OtherSettings/OtherSettings.tsx | 18 ++- client/src/interfaces/Forms.ts | 1 + client/src/setupProxy.js | 5 + controllers/apps.js | 9 +- middleware/multer.js | 27 ++++ package-lock.json | 115 ++++++++++++++++++ package.json | 2 + routes/apps.js | 3 +- utils/Logger.js | 2 +- utils/initialConfig.json | 4 + 18 files changed, 214 insertions(+), 13 deletions(-) create mode 100644 middleware/multer.js diff --git a/Dockerfile b/Dockerfile index 148d970..95ddea4 100644 --- a/Dockerfile +++ b/Dockerfile @@ -12,6 +12,7 @@ COPY . . RUN mkdir -p ./public ./data \ && cd ./client \ + && npm install --production \ && npm run build \ && cd .. \ && mv ./client/build/* ./public \ diff --git a/Dockerfile.multiarch b/Dockerfile.multiarch index e0827af..808b815 100644 --- a/Dockerfile.multiarch +++ b/Dockerfile.multiarch @@ -13,6 +13,7 @@ COPY . . RUN mkdir -p ./public ./data \ && cd ./client \ + && npm install --production \ && npm run build \ && cd .. \ && mv ./client/build/* ./public \ diff --git a/README.md b/README.md index 6f4927c..9c86503 100644 --- a/README.md +++ b/README.md @@ -99,6 +99,11 @@ Follow instructions from wiki: [Installation without Docker](https://github.com/ - Format: `www.domain.com`, `domain.com`, `sub.domain.com`, `local`, `ip`, `ip:port` - Redirect: `http://{dest}` +### Custom CSS +> This is an experimental feature. Its behaviour might change in the future. +> +Follow instructions from wiki: [Custom CSS](https://github.com/pawelmalak/flame/wiki/Custom-CSS) + ## Support If you want to support development of Flame and my upcoming self-hosted and open source projects you can use the following link: diff --git a/api.js b/api.js index 6ea1ab1..a720fe2 100644 --- a/api.js +++ b/api.js @@ -1,15 +1,17 @@ -const path = require('path'); +const { join } = require('path'); const express = require('express'); const errorHandler = require('./middleware/errorHandler'); const api = express(); // Static files -api.use(express.static(path.join(__dirname, 'public'))); +api.use(express.static(join(__dirname, 'public'))); +api.use('/uploads', express.static(join(__dirname, 'data/uploads'))); api.get(/^\/(?!api)/, (req, res) => { - res.sendFile(path.join(__dirname, 'public/index.html')); + res.sendFile(join(__dirname, 'public/index.html')); }) + // Body parser api.use(express.json()); diff --git a/client/.env b/client/.env index a0df532..601e08c 100644 --- a/client/.env +++ b/client/.env @@ -1 +1 @@ -REACT_APP_VERSION=1.4.2 \ No newline at end of file +REACT_APP_VERSION=1.4.3 \ No newline at end of file diff --git a/client/src/components/Apps/AppCard/AppCard.module.css b/client/src/components/Apps/AppCard/AppCard.module.css index 26a8a69..768ef8e 100644 --- a/client/src/components/Apps/AppCard/AppCard.module.css +++ b/client/src/components/Apps/AppCard/AppCard.module.css @@ -39,4 +39,12 @@ .AppCard:hover { background-color: rgba(0,0,0,0.2); } +} + +.CustomIcon { + width: 90%; + height: 90%; + margin-top: 2px; + margin-left: 2px; + object-fit: contain; } \ No newline at end of file diff --git a/client/src/components/Apps/AppCard/AppCard.tsx b/client/src/components/Apps/AppCard/AppCard.tsx index 50fb979..79e09fe 100644 --- a/client/src/components/Apps/AppCard/AppCard.tsx +++ b/client/src/components/Apps/AppCard/AppCard.tsx @@ -3,6 +3,7 @@ import Icon from '../../UI/Icons/Icon/Icon'; import { iconParser, urlParser } from '../../../utility'; import { App } from '../../../interfaces'; +import { searchConfig } from '../../../utility'; interface ComponentProps { app: App; @@ -15,12 +16,19 @@ const AppCard = (props: ComponentProps): JSX.Element => { return (
    - + {(/.(jpeg|jpg|png)$/).test(props.app.icon) + ? {`${props.app.name} + : + }
    {props.app.name}
    diff --git a/client/src/components/Bookmarks/BookmarkCard/BookmarkCard.tsx b/client/src/components/Bookmarks/BookmarkCard/BookmarkCard.tsx index 9e8dff9..b0536d9 100644 --- a/client/src/components/Bookmarks/BookmarkCard/BookmarkCard.tsx +++ b/client/src/components/Bookmarks/BookmarkCard/BookmarkCard.tsx @@ -2,7 +2,7 @@ import { Bookmark, Category } from '../../../interfaces'; import classes from './BookmarkCard.module.css'; import Icon from '../../UI/Icons/Icon/Icon'; -import { iconParser, urlParser } from '../../../utility'; +import { iconParser, urlParser, searchConfig } from '../../../utility'; interface ComponentProps { category: Category; @@ -19,7 +19,7 @@ const BookmarkCard = (props: ComponentProps): JSX.Element => { return (
    {bookmark.icon && ( diff --git a/client/src/components/Settings/OtherSettings/OtherSettings.tsx b/client/src/components/Settings/OtherSettings/OtherSettings.tsx index bba197d..3c63d83 100644 --- a/client/src/components/Settings/OtherSettings/OtherSettings.tsx +++ b/client/src/components/Settings/OtherSettings/OtherSettings.tsx @@ -29,7 +29,8 @@ const OtherSettings = (props: ComponentProps): JSX.Element => { pinAppsByDefault: 1, pinCategoriesByDefault: 1, hideHeader: 0, - useOrdering: 'createdAt' + useOrdering: 'createdAt', + openSameTab: 0 }) // Get config @@ -39,7 +40,8 @@ const OtherSettings = (props: ComponentProps): JSX.Element => { pinAppsByDefault: searchConfig('pinAppsByDefault', 1), pinCategoriesByDefault: searchConfig('pinCategoriesByDefault', 1), hideHeader: searchConfig('hideHeader', 0), - useOrdering: searchConfig('useOrdering', 'createdAt') + useOrdering: searchConfig('useOrdering', 'createdAt'), + openSameTab: searchConfig('openSameTab', 0) }) }, [props.loading]); @@ -134,6 +136,18 @@ const OtherSettings = (props: ComponentProps): JSX.Element => { + + + + ) diff --git a/client/src/interfaces/Forms.ts b/client/src/interfaces/Forms.ts index 360dae1..948fb42 100644 --- a/client/src/interfaces/Forms.ts +++ b/client/src/interfaces/Forms.ts @@ -11,4 +11,5 @@ export interface SettingsForm { pinCategoriesByDefault: number; hideHeader: number; useOrdering: string; + openSameTab: number; } \ No newline at end of file diff --git a/client/src/setupProxy.js b/client/src/setupProxy.js index 5cafcb1..b45d4fe 100644 --- a/client/src/setupProxy.js +++ b/client/src/setupProxy.js @@ -5,11 +5,16 @@ module.exports = function (app) { target: 'http://localhost:5005' }) + const assetsProxy = createProxyMiddleware('/uploads', { + target: 'http://localhost:5005' + }) + const wsProxy = createProxyMiddleware('/socket', { target: 'http://localhost:5005', ws: true }) app.use(apiProxy); + app.use(assetsProxy); app.use(wsProxy); }; \ No newline at end of file diff --git a/controllers/apps.js b/controllers/apps.js index 4f50f96..267daa3 100644 --- a/controllers/apps.js +++ b/controllers/apps.js @@ -14,11 +14,18 @@ exports.createApp = asyncWrapper(async (req, res, next) => { }); let app; + let _body = { ...req.body }; + + if (req.file) { + console.log(req.file.filename) + _body.icon = req.file.filename; + } + if (pinApps) { if (parseInt(pinApps.value)) { app = await App.create({ - ...req.body, + ..._body, isPinned: true }) } else { diff --git a/middleware/multer.js b/middleware/multer.js new file mode 100644 index 0000000..d1d0556 --- /dev/null +++ b/middleware/multer.js @@ -0,0 +1,27 @@ +const fs = require('fs'); +const { join } = require('path'); +const multer = require('multer'); +const uuid = require('uuid'); + +const storage = multer.diskStorage({ + destination: (req, file, cb) => { + cb(null, './data/uploads'); + }, + filename: (req, file, cb) => { + cb(null, Date.now() + '--' + file.originalname); + } +}) + +const supportedTypes = ['jpg', 'jpeg', 'png']; + +const fileFilter = (req, file, cb) => { + if (supportedTypes.includes(file.mimetype.split('/')[1])) { + cb(null, true); + } else { + cb(null, false); + } +} + +const upload = multer({ storage, fileFilter }); + +module.exports = upload.single('icon'); \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 6ac480a..21017a1 100644 --- a/package-lock.json +++ b/package-lock.json @@ -224,6 +224,11 @@ "picomatch": "^2.0.4" } }, + "append-field": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/append-field/-/append-field-1.0.0.tgz", + "integrity": "sha1-HjRA6RXwsSA9I3SOeO3XubW0PlY=" + }, "aproba": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", @@ -364,6 +369,43 @@ "fill-range": "^7.0.1" } }, + "buffer-from": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", + "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==" + }, + "busboy": { + "version": "0.2.14", + "resolved": "https://registry.npmjs.org/busboy/-/busboy-0.2.14.tgz", + "integrity": "sha1-bCpiLvz0fFe7vh4qnDetNseSVFM=", + "requires": { + "dicer": "0.2.5", + "readable-stream": "1.1.x" + }, + "dependencies": { + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" + }, + "readable-stream": { + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", + "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" + } + } + }, "bytes": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", @@ -553,6 +595,17 @@ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" }, + "concat-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "requires": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + } + }, "concurrently": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/concurrently/-/concurrently-6.0.2.tgz", @@ -741,6 +794,38 @@ "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=" }, + "dicer": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/dicer/-/dicer-0.2.5.tgz", + "integrity": "sha1-WZbAhrszIYyBLAkL3cCc0S+stw8=", + "requires": { + "readable-stream": "1.1.x", + "streamsearch": "0.1.2" + }, + "dependencies": { + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" + }, + "readable-stream": { + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", + "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" + } + } + }, "dot-prop": { "version": "5.3.0", "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", @@ -1611,6 +1696,21 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" }, + "multer": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/multer/-/multer-1.4.2.tgz", + "integrity": "sha512-xY8pX7V+ybyUpbYMxtjM9KAiD9ixtg5/JkeKUTD6xilfDv0vzzOFcCp4Ljb1UU3tSOM3VTZtKo63OmzOrGi3Cg==", + "requires": { + "append-field": "^1.0.0", + "busboy": "^0.2.11", + "concat-stream": "^1.5.2", + "mkdirp": "^0.5.1", + "object-assign": "^4.1.1", + "on-finished": "^2.3.0", + "type-is": "^1.6.4", + "xtend": "^4.0.0" + } + }, "needle": { "version": "2.6.0", "resolved": "https://registry.npmjs.org/needle/-/needle-2.6.0.tgz", @@ -2411,6 +2511,11 @@ "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" }, + "streamsearch": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-0.1.2.tgz", + "integrity": "sha1-gIudDlb8Jz2Am6VzOOkpkZoanxo=" + }, "string-width": { "version": "4.2.2", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", @@ -2577,6 +2682,11 @@ "mime-types": "~2.1.24" } }, + "typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=" + }, "typedarray-to-buffer": { "version": "3.1.5", "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", @@ -2804,6 +2914,11 @@ "integrity": "sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==", "dev": true }, + "xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==" + }, "y18n": { "version": "5.0.8", "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", diff --git a/package.json b/package.json index b958be8..243a5f0 100644 --- a/package.json +++ b/package.json @@ -21,9 +21,11 @@ "concurrently": "^6.0.2", "dotenv": "^9.0.0", "express": "^4.17.1", + "multer": "^1.4.2", "node-schedule": "^2.0.0", "sequelize": "^6.6.2", "sqlite3": "^5.0.2", + "uuid": "^8.3.2", "ws": "^7.4.6" }, "devDependencies": { diff --git a/routes/apps.js b/routes/apps.js index a0b3f47..091550c 100644 --- a/routes/apps.js +++ b/routes/apps.js @@ -1,5 +1,6 @@ const express = require('express'); const router = express.Router(); +const upload = require('../middleware/multer'); const { createApp, @@ -12,7 +13,7 @@ const { router .route('/') - .post(createApp) + .post(upload, createApp) .get(getApps); router diff --git a/utils/Logger.js b/utils/Logger.js index 6648212..1d1deef 100644 --- a/utils/Logger.js +++ b/utils/Logger.js @@ -20,7 +20,7 @@ class Logger { // Timezone const tz = -d.getTimezoneOffset() / 60; - return `${year}-${month}-${day} ${hour}:${minutes}:${seconds}.${miliseconds} UTC${tz > 0 ? '+' + tz : tz}`; + return `${year}-${month}-${day} ${hour}:${minutes}:${seconds}.${miliseconds} UTC${tz >= 0 ? '+' + tz : tz}`; } parseDate(date, ms = false) { diff --git a/utils/initialConfig.json b/utils/initialConfig.json index 09bf4b8..ab0a861 100644 --- a/utils/initialConfig.json +++ b/utils/initialConfig.json @@ -35,6 +35,10 @@ { "key": "useOrdering", "value": "createdAt" + }, + { + "key": "openSameTab", + "value": false } ] } \ No newline at end of file From 12974ab01b8e84bd3fd9dc6ff9c6a812ecb0cb8b Mon Sep 17 00:00:00 2001 From: unknown Date: Wed, 23 Jun 2021 15:27:46 +0200 Subject: [PATCH 022/196] Upload custom icon on client --- Dockerfile | 2 +- Dockerfile.multiarch | 2 +- .../Apps/AppForm/AppForm.module.css | 7 ++ .../src/components/Apps/AppForm/AppForm.tsx | 90 ++++++++++++++----- client/src/store/actions/app.ts | 8 +- controllers/apps.js | 1 - 6 files changed, 81 insertions(+), 29 deletions(-) create mode 100644 client/src/components/Apps/AppForm/AppForm.module.css diff --git a/Dockerfile b/Dockerfile index 95ddea4..ac2a11a 100644 --- a/Dockerfile +++ b/Dockerfile @@ -10,7 +10,7 @@ RUN npm install --production COPY . . -RUN mkdir -p ./public ./data \ +RUN mkdir -p ./public ./data ./data/uploads \ && cd ./client \ && npm install --production \ && npm run build \ diff --git a/Dockerfile.multiarch b/Dockerfile.multiarch index 808b815..c379e7b 100644 --- a/Dockerfile.multiarch +++ b/Dockerfile.multiarch @@ -11,7 +11,7 @@ RUN apk --no-cache --virtual build-dependencies add python make g++ \ COPY . . -RUN mkdir -p ./public ./data \ +RUN mkdir -p ./public ./data ./data/uploads \ && cd ./client \ && npm install --production \ && npm run build \ diff --git a/client/src/components/Apps/AppForm/AppForm.module.css b/client/src/components/Apps/AppForm/AppForm.module.css new file mode 100644 index 0000000..66b15a0 --- /dev/null +++ b/client/src/components/Apps/AppForm/AppForm.module.css @@ -0,0 +1,7 @@ +.Switch { + text-decoration: underline; +} + +.Switch:hover { + cursor: pointer; +} \ No newline at end of file diff --git a/client/src/components/Apps/AppForm/AppForm.tsx b/client/src/components/Apps/AppForm/AppForm.tsx index e9c7beb..61d2023 100644 --- a/client/src/components/Apps/AppForm/AppForm.tsx +++ b/client/src/components/Apps/AppForm/AppForm.tsx @@ -3,18 +3,23 @@ import { connect } from 'react-redux'; import { addApp, updateApp } from '../../../store/actions'; import { App, NewApp } from '../../../interfaces'; +import classes from './AppForm.module.css'; + import ModalForm from '../../UI/Forms/ModalForm/ModalForm'; import InputGroup from '../../UI/Forms/InputGroup/InputGroup'; import Button from '../../UI/Buttons/Button/Button'; +import axios from 'axios'; interface ComponentProps { modalHandler: () => void; - addApp: (formData: NewApp) => any; + addApp: (formData: NewApp | FormData) => any; updateApp: (id: number, formData: NewApp) => any; app?: App; } const AppForm = (props: ComponentProps): JSX.Element => { + const [useCustomIcon, toggleUseCustomIcon] = useState(true); + const [customIcon, setCustomIcon] = useState(null); const [formData, setFormData] = useState({ name: '', url: '', @@ -52,11 +57,27 @@ const AppForm = (props: ComponentProps): JSX.Element => { }) } + const fileChangeHandler = (e: ChangeEvent): void => { + if (e.target.files) { + setCustomIcon(e.target.files[0]); + } + } + const formSubmitHandler = (e: SyntheticEvent): void => { e.preventDefault(); if (!props.app) { - props.addApp(formData); + if (customIcon) { + const data = new FormData(); + data.append('icon', customIcon); + + data.append('name', formData.name); + data.append('url', formData.url); + + props.addApp(data); + } else { + props.addApp(formData); + } } else { props.updateApp(props.app.id, formData); props.modalHandler(); @@ -108,26 +129,51 @@ const AppForm = (props: ComponentProps): JSX.Element => { - - - inputChangeHandler(e)} - /> - - Use icon name from MDI. - - {' '}Click here for reference - - - + {!useCustomIcon + // use mdi icon + ? ( + + inputChangeHandler(e)} + /> + + Use icon name from MDI. + + {' '}Click here for reference + + + toggleUseCustomIcon(!useCustomIcon)} + className={classes.Switch}> + Switch to custom icon upload + + ) + // upload custom icon + : ( + + fileChangeHandler(e)} + accept='.jpg,.jpeg,.png' + /> + toggleUseCustomIcon(!useCustomIcon)} + className={classes.Switch}> + Switch to MDI + + ) + } {!props.app ? : diff --git a/client/src/store/actions/app.ts b/client/src/store/actions/app.ts index 97db1c7..3a8e7d5 100644 --- a/client/src/store/actions/app.ts +++ b/client/src/store/actions/app.ts @@ -61,7 +61,7 @@ export interface AddAppAction { payload: App; } -export const addApp = (formData: NewApp) => async (dispatch: Dispatch) => { +export const addApp = (formData: NewApp | FormData) => async (dispatch: Dispatch) => { try { const res = await axios.post>('/api/apps', formData); @@ -69,7 +69,7 @@ export const addApp = (formData: NewApp) => async (dispatch: Dispatch) => { type: ActionTypes.createNotification, payload: { title: 'Success', - message: `App ${formData.name} added` + message: `App added` } }) @@ -116,7 +116,7 @@ export interface UpdateAppAction { payload: App; } -export const updateApp = (id: number, formData: NewApp) => async (dispatch: Dispatch) => { +export const updateApp = (id: number, formData: NewApp | FormData) => async (dispatch: Dispatch) => { try { const res = await axios.put>(`/api/apps/${id}`, formData); @@ -124,7 +124,7 @@ export const updateApp = (id: number, formData: NewApp) => async (dispatch: Disp type: ActionTypes.createNotification, payload: { title: 'Success', - message: `App ${formData.name} updated` + message: `App updated` } }) diff --git a/controllers/apps.js b/controllers/apps.js index 267daa3..238c66b 100644 --- a/controllers/apps.js +++ b/controllers/apps.js @@ -17,7 +17,6 @@ exports.createApp = asyncWrapper(async (req, res, next) => { let _body = { ...req.body }; if (req.file) { - console.log(req.file.filename) _body.icon = req.file.filename; } From 550e1e155b9d3b5e30a8c82469775472982cea3e Mon Sep 17 00:00:00 2001 From: unknown Date: Thu, 24 Jun 2021 10:54:48 +0200 Subject: [PATCH 023/196] Added option to hide apps and categories from home screen --- client/.env | 2 +- .../src/components/Apps/AppForm/AppForm.tsx | 2 +- client/src/components/Home/Home.tsx | 43 ++++++++----- .../OtherSettings/OtherSettings.module.css | 9 +++ .../Settings/OtherSettings/OtherSettings.tsx | 63 +++++++++++++++---- client/src/interfaces/Forms.ts | 2 + utils/initialConfig.json | 8 +++ 7 files changed, 98 insertions(+), 31 deletions(-) create mode 100644 client/src/components/Settings/OtherSettings/OtherSettings.module.css diff --git a/client/.env b/client/.env index 601e08c..c86ae30 100644 --- a/client/.env +++ b/client/.env @@ -1 +1 @@ -REACT_APP_VERSION=1.4.3 \ No newline at end of file +REACT_APP_VERSION=1.4.4 \ No newline at end of file diff --git a/client/src/components/Apps/AppForm/AppForm.tsx b/client/src/components/Apps/AppForm/AppForm.tsx index 61d2023..a8881c2 100644 --- a/client/src/components/Apps/AppForm/AppForm.tsx +++ b/client/src/components/Apps/AppForm/AppForm.tsx @@ -18,7 +18,7 @@ interface ComponentProps { } const AppForm = (props: ComponentProps): JSX.Element => { - const [useCustomIcon, toggleUseCustomIcon] = useState(true); + const [useCustomIcon, toggleUseCustomIcon] = useState(false); const [customIcon, setCustomIcon] = useState(null); const [formData, setFormData] = useState({ name: '', diff --git a/client/src/components/Home/Home.tsx b/client/src/components/Home/Home.tsx index 078c3a3..3742234 100644 --- a/client/src/components/Home/Home.tsx +++ b/client/src/components/Home/Home.tsx @@ -1,4 +1,4 @@ -import { useState, useEffect } from 'react'; +import { useState, useEffect, Fragment } from 'react'; import { Link } from 'react-router-dom'; // Redux @@ -101,24 +101,33 @@ const Home = (props: ComponentProps): JSX.Element => { :
    } - - {appsLoading - ? - : app.isPinned)} - totalApps={apps.length} - /> + {searchConfig('hideApps', 0) !== 1 + ? ( + + {appsLoading + ? + : app.isPinned)} + totalApps={apps.length} + /> + } +
    +
    ) + :
    } -
    - - - {categoriesLoading - ? - : category.isPinned)} - totalCategories={categories.length} - /> + {searchConfig('hideCategories', 0) !== 1 + ? ( + + {categoriesLoading + ? + : category.isPinned)} + totalCategories={categories.length} + /> + } + ) + :
    } diff --git a/client/src/components/Settings/OtherSettings/OtherSettings.module.css b/client/src/components/Settings/OtherSettings/OtherSettings.module.css new file mode 100644 index 0000000..36e4deb --- /dev/null +++ b/client/src/components/Settings/OtherSettings/OtherSettings.module.css @@ -0,0 +1,9 @@ +.SettingsSection { + color: var(--color-primary); + padding-bottom: 3px; + margin-bottom: 10px; + font-size: 20px; + font-weight: 500; + border-bottom: 2px solid var(--color-accent); + display: inline-block; +} \ No newline at end of file diff --git a/client/src/components/Settings/OtherSettings/OtherSettings.tsx b/client/src/components/Settings/OtherSettings/OtherSettings.tsx index 3c63d83..b3e4c3e 100644 --- a/client/src/components/Settings/OtherSettings/OtherSettings.tsx +++ b/client/src/components/Settings/OtherSettings/OtherSettings.tsx @@ -11,6 +11,9 @@ import { GlobalState, NewNotification, SettingsForm } from '../../../interfaces' import InputGroup from '../../UI/Forms/InputGroup/InputGroup'; import Button from '../../UI/Buttons/Button/Button'; +// CSS +import classes from './OtherSettings.module.css'; + // Utils import { searchConfig } from '../../../utility'; @@ -29,6 +32,8 @@ const OtherSettings = (props: ComponentProps): JSX.Element => { pinAppsByDefault: 1, pinCategoriesByDefault: 1, hideHeader: 0, + hideApps: 0, + hideCategories: 0, useOrdering: 'createdAt', openSameTab: 0 }) @@ -40,6 +45,8 @@ const OtherSettings = (props: ComponentProps): JSX.Element => { pinAppsByDefault: searchConfig('pinAppsByDefault', 1), pinCategoriesByDefault: searchConfig('pinCategoriesByDefault', 1), hideHeader: searchConfig('hideHeader', 0), + hideApps: searchConfig('hideApps', 0), + hideCategories: searchConfig('hideCategories', 0), useOrdering: searchConfig('useOrdering', 'createdAt'), openSameTab: searchConfig('openSameTab', 0) }) @@ -76,6 +83,8 @@ const OtherSettings = (props: ComponentProps): JSX.Element => { return (
    formSubmitHandler(e)}> + {/* OTHER OPTIONS */} +

    Miscellaneous

    { onChange={(e) => inputChangeHandler(e)} /> + + {/* BEAHVIOR OPTIONS */} +

    App Behavior

    - - - - + + {/* MODULES OPTIONS */} +

    Modules

    + + + + + + + + + + + +
    ) diff --git a/client/src/interfaces/Forms.ts b/client/src/interfaces/Forms.ts index 948fb42..e63fad7 100644 --- a/client/src/interfaces/Forms.ts +++ b/client/src/interfaces/Forms.ts @@ -10,6 +10,8 @@ export interface SettingsForm { pinAppsByDefault: number; pinCategoriesByDefault: number; hideHeader: number; + hideApps: number; + hideCategories: number; useOrdering: string; openSameTab: number; } \ No newline at end of file diff --git a/utils/initialConfig.json b/utils/initialConfig.json index ab0a861..a954456 100644 --- a/utils/initialConfig.json +++ b/utils/initialConfig.json @@ -39,6 +39,14 @@ { "key": "openSameTab", "value": false + }, + { + "key": "hideApps", + "value": false + }, + { + "key": "hideCategories", + "value": false } ] } \ No newline at end of file From 8026533a066b5cbfdf0f9b9e781e82a38d226829 Mon Sep 17 00:00:00 2001 From: unknown Date: Thu, 24 Jun 2021 12:53:45 +0200 Subject: [PATCH 024/196] Added search bar --- Dockerfile | 2 +- Dockerfile.multiarch | 2 +- README.md | 17 ++++++++ client/.env | 2 +- client/src/components/Home/Home.tsx | 6 +++ .../components/SearchBox/SearchBox.module.css | 17 ++++++++ client/src/components/SearchBox/SearchBox.tsx | 29 ++++++++++++++ .../Settings/OtherSettings/OtherSettings.tsx | 14 +++++++ client/src/interfaces/Forms.ts | 1 + client/src/interfaces/Query.ts | 5 +++ client/src/interfaces/index.ts | 3 +- client/src/utility/index.ts | 3 +- client/src/utility/searchParser.ts | 22 +++++++++++ client/src/utility/searchQueries.json | 39 +++++++++++++++++++ db.js | 2 +- middleware/multer.js | 6 ++- package.json | 1 - utils/initialConfig.json | 4 ++ 18 files changed, 166 insertions(+), 9 deletions(-) create mode 100644 client/src/components/SearchBox/SearchBox.module.css create mode 100644 client/src/components/SearchBox/SearchBox.tsx create mode 100644 client/src/interfaces/Query.ts create mode 100644 client/src/utility/searchParser.ts create mode 100644 client/src/utility/searchQueries.json diff --git a/Dockerfile b/Dockerfile index ac2a11a..95ddea4 100644 --- a/Dockerfile +++ b/Dockerfile @@ -10,7 +10,7 @@ RUN npm install --production COPY . . -RUN mkdir -p ./public ./data ./data/uploads \ +RUN mkdir -p ./public ./data \ && cd ./client \ && npm install --production \ && npm run build \ diff --git a/Dockerfile.multiarch b/Dockerfile.multiarch index c379e7b..808b815 100644 --- a/Dockerfile.multiarch +++ b/Dockerfile.multiarch @@ -11,7 +11,7 @@ RUN apk --no-cache --virtual build-dependencies add python make g++ \ COPY . . -RUN mkdir -p ./public ./data ./data/uploads \ +RUN mkdir -p ./public ./data \ && cd ./client \ && npm install --production \ && npm run build \ diff --git a/README.md b/README.md index 9c86503..cca0f49 100644 --- a/README.md +++ b/README.md @@ -81,6 +81,23 @@ Follow instructions from wiki: [Installation without Docker](https://github.com/ ![Homescreen screenshot](./github/_themes.png) ## Usage +### Search bar +> While opening links, module will follow `Open all links in the same tab` setting +#### Supported search engines +| Name | Prefix | Search URL | +|------------|--------|-------------------------------------| +| Disroot | /ds | http://search.disroot.org/search?q= | +| DuckDuckGo | /d | https://duckduckgo.com/?q= | +| Google | /g | https://www.google.com/search?q= | + +#### Supported services +| Name | Prefix | Search URL | +|--------------------|--------|-----------------------------------------------| +| IMDb | /im | https://www.imdb.com/find?q= | +| Reddit | /r | -https://www.reddit.com/search?q= | +| The Movie Database | /mv | https://www.themoviedb.org/search?query= | +| Youtube | /yt | https://www.youtube.com/results?search_query= | + ### Setting up weather module 1. Obtain API Key from [Weather API](https://www.weatherapi.com/pricing.aspx). > Free plan allows for 1M calls per month. Flame is making less then 3K API calls per month. diff --git a/client/.env b/client/.env index c86ae30..70acd43 100644 --- a/client/.env +++ b/client/.env @@ -1 +1 @@ -REACT_APP_VERSION=1.4.4 \ No newline at end of file +REACT_APP_VERSION=1.5.0 \ No newline at end of file diff --git a/client/src/components/Home/Home.tsx b/client/src/components/Home/Home.tsx index 3742234..2682d50 100644 --- a/client/src/components/Home/Home.tsx +++ b/client/src/components/Home/Home.tsx @@ -22,6 +22,7 @@ import classes from './Home.module.css'; import AppGrid from '../Apps/AppGrid/AppGrid'; import BookmarkGrid from '../Bookmarks/BookmarkGrid/BookmarkGrid'; import WeatherWidget from '../Widgets/WeatherWidget/WeatherWidget'; +import SearchBox from '../SearchBox/SearchBox'; // Functions import { greeter } from './functions/greeter'; @@ -87,6 +88,11 @@ const Home = (props: ComponentProps): JSX.Element => { return ( + {searchConfig('hideSearch', 0) !== 1 + ? + :
    + } + {searchConfig('hideHeader', 0) !== 1 ? (
    diff --git a/client/src/components/SearchBox/SearchBox.module.css b/client/src/components/SearchBox/SearchBox.module.css new file mode 100644 index 0000000..d9fbb4e --- /dev/null +++ b/client/src/components/SearchBox/SearchBox.module.css @@ -0,0 +1,17 @@ +.SearchBox { + width: 100%; + padding: 10px 0; + color: var(--color-primary); + /* font-size: 20px; */ + margin-bottom: 20px; + background-color: transparent; + border: none; + border-bottom: 2px solid var(--color-accent); + opacity: 0.5; + transition: all 0.2s; +} + +.SearchBox:focus { + opacity: 1; + outline: none; +} \ No newline at end of file diff --git a/client/src/components/SearchBox/SearchBox.tsx b/client/src/components/SearchBox/SearchBox.tsx new file mode 100644 index 0000000..ebc0cc6 --- /dev/null +++ b/client/src/components/SearchBox/SearchBox.tsx @@ -0,0 +1,29 @@ +import { useRef, useEffect, KeyboardEvent } from 'react'; + +import classes from './SearchBox.module.css'; +import { searchParser } from '../../utility'; + +const SearchBox = (): JSX.Element => { + const inputRef = useRef(document.createElement('input')); + + useEffect(() => { + inputRef.current.focus(); + }, []) + + const searchHandler = (e: KeyboardEvent) => { + if (e.code === 'Enter') { + searchParser(inputRef.current.value); + } + } + + return ( + searchHandler(e)} + /> + ) +} + +export default SearchBox; \ No newline at end of file diff --git a/client/src/components/Settings/OtherSettings/OtherSettings.tsx b/client/src/components/Settings/OtherSettings/OtherSettings.tsx index b3e4c3e..329b068 100644 --- a/client/src/components/Settings/OtherSettings/OtherSettings.tsx +++ b/client/src/components/Settings/OtherSettings/OtherSettings.tsx @@ -34,6 +34,7 @@ const OtherSettings = (props: ComponentProps): JSX.Element => { hideHeader: 0, hideApps: 0, hideCategories: 0, + hideSearch: 0, useOrdering: 'createdAt', openSameTab: 0 }) @@ -47,6 +48,7 @@ const OtherSettings = (props: ComponentProps): JSX.Element => { hideHeader: searchConfig('hideHeader', 0), hideApps: searchConfig('hideApps', 0), hideCategories: searchConfig('hideCategories', 0), + hideSearch: searchConfig('hideSearch', 0), useOrdering: searchConfig('useOrdering', 'createdAt'), openSameTab: searchConfig('openSameTab', 0) }) @@ -151,6 +153,18 @@ const OtherSettings = (props: ComponentProps): JSX.Element => { {/* MODULES OPTIONS */}

    Modules

    + + + + searchHandler(e)} + /> + ) +} + +export default connect(null, { createNotification })(SearchBar); \ No newline at end of file diff --git a/client/src/components/SearchBox/SearchBox.tsx b/client/src/components/SearchBox/SearchBox.tsx deleted file mode 100644 index ebc0cc6..0000000 --- a/client/src/components/SearchBox/SearchBox.tsx +++ /dev/null @@ -1,29 +0,0 @@ -import { useRef, useEffect, KeyboardEvent } from 'react'; - -import classes from './SearchBox.module.css'; -import { searchParser } from '../../utility'; - -const SearchBox = (): JSX.Element => { - const inputRef = useRef(document.createElement('input')); - - useEffect(() => { - inputRef.current.focus(); - }, []) - - const searchHandler = (e: KeyboardEvent) => { - if (e.code === 'Enter') { - searchParser(inputRef.current.value); - } - } - - return ( - searchHandler(e)} - /> - ) -} - -export default SearchBox; \ No newline at end of file diff --git a/client/src/utility/searchParser.ts b/client/src/utility/searchParser.ts index 4bea43f..6cba533 100644 --- a/client/src/utility/searchParser.ts +++ b/client/src/utility/searchParser.ts @@ -3,7 +3,7 @@ import { Query } from '../interfaces'; import { searchConfig } from '.'; -export const searchParser = (searchQuery: string): void => { +export const searchParser = (searchQuery: string): boolean => { const space = searchQuery.indexOf(' '); const prefix = searchQuery.slice(1, space); const search = encodeURIComponent(searchQuery.slice(space + 1)); @@ -18,5 +18,9 @@ export const searchParser = (searchQuery: string): void => { } else { window.open(`${query.template}${search}`); } + + return true; } + + return false; } \ No newline at end of file diff --git a/client/src/utility/searchQueries.json b/client/src/utility/searchQueries.json index 47739c9..6e23503 100644 --- a/client/src/utility/searchQueries.json +++ b/client/src/utility/searchQueries.json @@ -34,6 +34,11 @@ "name": "The Movie Database", "prefix": "mv", "template": "https://www.themoviedb.org/search?query=" + }, + { + "name": "Spotify", + "prefix": "sp", + "template": "https://open.spotify.com/search/" } ] } \ No newline at end of file diff --git a/middleware/multer.js b/middleware/multer.js index 8119477..b1314a9 100644 --- a/middleware/multer.js +++ b/middleware/multer.js @@ -2,7 +2,7 @@ const fs = require('fs'); const multer = require('multer'); if (!fs.existsSync('data/uploads')) { - fs.mkdirSync('data/uploads'); + fs.mkdirSync('data/uploads', { recursive: true }); } const storage = multer.diskStorage({ From c03f302fa67afbe781cf08e6508a204b59ca1270 Mon Sep 17 00:00:00 2001 From: unknown Date: Fri, 25 Jun 2021 11:24:29 +0200 Subject: [PATCH 026/196] Added option to open links in the same tab for apps/bookamrs/search separately --- client/.env | 2 +- .../src/components/Apps/AppCard/AppCard.tsx | 2 +- .../Bookmarks/BookmarkCard/BookmarkCard.tsx | 2 +- .../Settings/OtherSettings/OtherSettings.tsx | 41 +++++++++++++++---- client/src/interfaces/Forms.ts | 4 +- client/src/utility/searchParser.ts | 2 +- utils/initialConfig.json | 10 ++++- 7 files changed, 50 insertions(+), 13 deletions(-) diff --git a/client/.env b/client/.env index 6079712..18588d5 100644 --- a/client/.env +++ b/client/.env @@ -1 +1 @@ -REACT_APP_VERSION=1.5.1 \ No newline at end of file +REACT_APP_VERSION=1.5.2 \ No newline at end of file diff --git a/client/src/components/Apps/AppCard/AppCard.tsx b/client/src/components/Apps/AppCard/AppCard.tsx index 79e09fe..43d7b72 100644 --- a/client/src/components/Apps/AppCard/AppCard.tsx +++ b/client/src/components/Apps/AppCard/AppCard.tsx @@ -16,7 +16,7 @@ const AppCard = (props: ComponentProps): JSX.Element => { return ( diff --git a/client/src/components/Bookmarks/BookmarkCard/BookmarkCard.tsx b/client/src/components/Bookmarks/BookmarkCard/BookmarkCard.tsx index b0536d9..f2535b5 100644 --- a/client/src/components/Bookmarks/BookmarkCard/BookmarkCard.tsx +++ b/client/src/components/Bookmarks/BookmarkCard/BookmarkCard.tsx @@ -19,7 +19,7 @@ const BookmarkCard = (props: ComponentProps): JSX.Element => { return ( {bookmark.icon && ( diff --git a/client/src/components/Settings/OtherSettings/OtherSettings.tsx b/client/src/components/Settings/OtherSettings/OtherSettings.tsx index 329b068..e3f3aef 100644 --- a/client/src/components/Settings/OtherSettings/OtherSettings.tsx +++ b/client/src/components/Settings/OtherSettings/OtherSettings.tsx @@ -36,7 +36,9 @@ const OtherSettings = (props: ComponentProps): JSX.Element => { hideCategories: 0, hideSearch: 0, useOrdering: 'createdAt', - openSameTab: 0 + appsSameTab: 0, + bookmarksSameTab: 0, + searchSameTab: 0 }) // Get config @@ -50,7 +52,9 @@ const OtherSettings = (props: ComponentProps): JSX.Element => { hideCategories: searchConfig('hideCategories', 0), hideSearch: searchConfig('hideSearch', 0), useOrdering: searchConfig('useOrdering', 'createdAt'), - openSameTab: searchConfig('openSameTab', 0) + appsSameTab: searchConfig('appsSameTab', 0), + bookmarksSameTab: searchConfig('bookmarksSameTab', 0), + searchSameTab: searchConfig('searchSameTab', 0) }) }, [props.loading]); @@ -139,18 +143,41 @@ const OtherSettings = (props: ComponentProps): JSX.Element => { - + + + + + + + + + - {/* MODULES OPTIONS */}

    Modules

    diff --git a/client/src/interfaces/Forms.ts b/client/src/interfaces/Forms.ts index b5e58ee..bba2d72 100644 --- a/client/src/interfaces/Forms.ts +++ b/client/src/interfaces/Forms.ts @@ -14,5 +14,7 @@ export interface SettingsForm { hideCategories: number; hideSearch: number; useOrdering: string; - openSameTab: number; + appsSameTab: number; + bookmarksSameTab: number; + searchSameTab: number; } \ No newline at end of file diff --git a/client/src/utility/searchParser.ts b/client/src/utility/searchParser.ts index 6cba533..1f1037a 100644 --- a/client/src/utility/searchParser.ts +++ b/client/src/utility/searchParser.ts @@ -11,7 +11,7 @@ export const searchParser = (searchQuery: string): boolean => { const query = queries.find((q: Query) => q.prefix === prefix); if (query) { - const sameTab = searchConfig('openSameTab', false); + const sameTab = searchConfig('searchSameTab', false); if (sameTab) { document.location.replace(`${query.template}${search}`); diff --git a/utils/initialConfig.json b/utils/initialConfig.json index fe68dfe..c4a76cb 100644 --- a/utils/initialConfig.json +++ b/utils/initialConfig.json @@ -37,7 +37,15 @@ "value": "createdAt" }, { - "key": "openSameTab", + "key": "appsSameTab", + "value": false + }, + { + "key": "bookmarksSameTab", + "value": false + }, + { + "key": "searchSameTab", "value": false }, { From 7970ac30314c28f7485f5543bc2f04a6eaa42777 Mon Sep 17 00:00:00 2001 From: Neal Striegler-Pettersson Date: Sun, 27 Jun 2021 19:33:27 -0400 Subject: [PATCH 027/196] Add docker-compose instructions and link in readme --- README.md | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 63c10de..8e27c86 100644 --- a/README.md +++ b/README.md @@ -37,6 +37,9 @@ npm run dev ## Installation ### With Docker (recommended) + +[Docker Hub](https://hub.docker.com/r/pawelmalak/flame) + #### Building images ```sh # build image for amd64 only @@ -56,6 +59,20 @@ docker buildx build \ docker run -p 5005:5005 -v /path/to/data:/app/data flame ``` +#### Docker-Compose +```yaml +version: "2.1" +services: + flame: + image: pawelmalak/flame:latest + container_name: flame + volumes: + - :/app/data + ports: + - 5005:5005 + restart: unless-stopped +``` + ### Without Docker Follow instructions from wiki: [Installation without Docker](https://github.com/pawelmalak/flame/wiki/Installation-without-docker) @@ -129,4 +146,4 @@ Follow instructions from wiki: [Custom CSS](https://github.com/pawelmalak/flame/ ## Support If you want to support development of Flame and my upcoming self-hosted and open source projects you can use the following link: -[![PayPal Badge](https://img.shields.io/badge/PayPal-00457C?style=for-the-badge&logo=paypal&logoColor=white)](https://www.paypal.com/paypalme/pawelmalak) \ No newline at end of file +[![PayPal Badge](https://img.shields.io/badge/PayPal-00457C?style=for-the-badge&logo=paypal&logoColor=white)](https://www.paypal.com/paypalme/pawelmalak) From 112a35c08f5034a552a5db2d966fd394f2cdae12 Mon Sep 17 00:00:00 2001 From: Jeremy Jack Date: Mon, 5 Jul 2021 23:04:03 -0500 Subject: [PATCH 028/196] Adding a default search provider option, with DuckDuckGo as the default --- .../Settings/OtherSettings/OtherSettings.tsx | 22 ++++++++++++++++++- client/src/interfaces/Forms.ts | 3 ++- client/src/utility/searchParser.ts | 9 ++++---- utils/initialConfig.json | 6 ++++- 4 files changed, 33 insertions(+), 7 deletions(-) diff --git a/client/src/components/Settings/OtherSettings/OtherSettings.tsx b/client/src/components/Settings/OtherSettings/OtherSettings.tsx index e3f3aef..ebfe642 100644 --- a/client/src/components/Settings/OtherSettings/OtherSettings.tsx +++ b/client/src/components/Settings/OtherSettings/OtherSettings.tsx @@ -35,6 +35,7 @@ const OtherSettings = (props: ComponentProps): JSX.Element => { hideApps: 0, hideCategories: 0, hideSearch: 0, + defaultSearchProvider: 'd', useOrdering: 'createdAt', appsSameTab: 0, bookmarksSameTab: 0, @@ -51,6 +52,7 @@ const OtherSettings = (props: ComponentProps): JSX.Element => { hideApps: searchConfig('hideApps', 0), hideCategories: searchConfig('hideCategories', 0), hideSearch: searchConfig('hideSearch', 0), + defaultSearchProvider: searchConfig('defaultSearchProvider', 'd'), useOrdering: searchConfig('useOrdering', 'createdAt'), appsSameTab: searchConfig('appsSameTab', 0), bookmarksSameTab: searchConfig('bookmarksSameTab', 0), @@ -192,6 +194,24 @@ const OtherSettings = (props: ComponentProps): JSX.Element => { + + + + + {/* MODULES OPTIONS */}

    Modules

    @@ -202,14 +204,7 @@ const OtherSettings = (props: ComponentProps): JSX.Element => { value={formData.defaultSearchProvider} onChange={(e) => inputChangeHandler(e)} > - - - - - - - - + {queries.map((query: Query) => ())} @@ -266,4 +261,4 @@ const actions = { sortCategories } -export default connect(mapStateToProps, actions)(OtherSettings); +export default connect(mapStateToProps, actions)(OtherSettings); \ No newline at end of file diff --git a/client/src/utility/searchParser.ts b/client/src/utility/searchParser.ts index 21c35f6..e8bb859 100644 --- a/client/src/utility/searchParser.ts +++ b/client/src/utility/searchParser.ts @@ -10,7 +10,6 @@ export const searchParser = (searchQuery: string): boolean => { const query = queries.find((q: Query) => q.prefix === prefix); - console.log("QUERY IS " + query); if (query) { const sameTab = searchConfig('searchSameTab', false); @@ -24,4 +23,4 @@ export const searchParser = (searchQuery: string): boolean => { } return false; -} +} \ No newline at end of file diff --git a/client/src/utility/urlParser.ts b/client/src/utility/urlParser.ts index c74224a..87edb63 100644 --- a/client/src/utility/urlParser.ts +++ b/client/src/utility/urlParser.ts @@ -2,8 +2,8 @@ export const urlParser = (url: string): string[] => { let parsedUrl: string; let displayUrl: string; - if (/https?:\/\//.test(url)) { - // Url starts with http[s]:// -> leave it as it is + if (/(https?|steam):\/\//.test(url)) { + // Url starts with http[s]:// or steam:// -> leave it as it is parsedUrl = url; } else { // No protocol -> apply http:// prefix @@ -11,10 +11,14 @@ export const urlParser = (url: string): string[] => { } // Create simplified url to display as text - displayUrl = url + if (/steam:\/\//.test(url)) { + displayUrl = 'Run Steam App'; + } else { + displayUrl = url .replace(/https?:\/\//, '') .replace('www.', '') .replace(/\/$/, ''); - + } + return [displayUrl, parsedUrl] } \ No newline at end of file From 88785aaa32fd3266907ad6ffc6eae3e4f28b9d57 Mon Sep 17 00:00:00 2001 From: unknown Date: Sat, 17 Jul 2021 23:11:24 +0200 Subject: [PATCH 030/196] Fixed bug with custom css not persisting --- client/.env | 2 +- .../Settings/OtherSettings/OtherSettings.tsx | 22 +++++++++---------- controllers/config.js | 4 ++++ server.js | 2 ++ utils/findCss.js | 22 +++++++++++++++++++ 5 files changed, 40 insertions(+), 12 deletions(-) create mode 100644 utils/findCss.js diff --git a/client/.env b/client/.env index 18588d5..036129f 100644 --- a/client/.env +++ b/client/.env @@ -1 +1 @@ -REACT_APP_VERSION=1.5.2 \ No newline at end of file +REACT_APP_VERSION=1.6.0 \ No newline at end of file diff --git a/client/src/components/Settings/OtherSettings/OtherSettings.tsx b/client/src/components/Settings/OtherSettings/OtherSettings.tsx index 7ab2770..199e9ff 100644 --- a/client/src/components/Settings/OtherSettings/OtherSettings.tsx +++ b/client/src/components/Settings/OtherSettings/OtherSettings.tsx @@ -145,6 +145,17 @@ const OtherSettings = (props: ComponentProps): JSX.Element => { + + + + - - - - - - - inputChangeHandler(e)} - /> - - Use icon name from MDI. -
    - {' '}Click here for reference - - - + {!useCustomIcon + // mdi + ? ( + + inputChangeHandler(e)} + /> + + Use icon name from MDI. + + {' '}Click here for reference + + + toggleUseCustomIcon(!useCustomIcon)} + className={classes.Switch}> + Switch to custom icon upload + + ) + // custom + : ( + + fileChangeHandler(e)} + accept='.jpg,.jpeg,.png' + /> + toggleUseCustomIcon(!useCustomIcon)} + className={classes.Switch}> + Switch to MDI + + ) + } ) } diff --git a/client/src/store/actions/bookmark.ts b/client/src/store/actions/bookmark.ts index 0398bbb..8707062 100644 --- a/client/src/store/actions/bookmark.ts +++ b/client/src/store/actions/bookmark.ts @@ -69,15 +69,15 @@ export interface AddBookmarkAction { payload: Bookmark } -export const addBookmark = (formData: NewBookmark) => async (dispatch: Dispatch) => { +export const addBookmark = (formData: NewBookmark | FormData) => async (dispatch: Dispatch) => { try { const res = await axios.post>('/api/bookmarks', formData); - + console.log(res.data.data) dispatch({ type: ActionTypes.createNotification, payload: { title: 'Success', - message: `Bookmark ${formData.name} created` + message: `Bookmark created` } }) @@ -225,7 +225,14 @@ export interface UpdateBookmarkAction { payload: Bookmark } -export const updateBookmark = (bookmarkId: number, formData: NewBookmark, previousCategoryId: number) => async (dispatch: Dispatch) => { +export const updateBookmark = ( + bookmarkId: number, + formData: NewBookmark | FormData, + category: { + prev: number, + curr: number + } +) => async (dispatch: Dispatch) => { try { const res = await axios.put>(`/api/bookmarks/${bookmarkId}`, formData); @@ -233,12 +240,12 @@ export const updateBookmark = (bookmarkId: number, formData: NewBookmark, previo type: ActionTypes.createNotification, payload: { title: 'Success', - message: `Bookmark ${formData.name} updated` + message: `Bookmark updated` } }) // Check if category was changed - const categoryWasChanged = formData.categoryId !== previousCategoryId; + const categoryWasChanged = category.curr !== category.prev; if (categoryWasChanged) { // Delete bookmark from old category @@ -246,7 +253,7 @@ export const updateBookmark = (bookmarkId: number, formData: NewBookmark, previo type: ActionTypes.deleteBookmark, payload: { bookmarkId, - categoryId: previousCategoryId + categoryId: category.prev } }) @@ -256,7 +263,7 @@ export const updateBookmark = (bookmarkId: number, formData: NewBookmark, previo payload: res.data.data }) } else { - // Else update only name/url + // Else update only name/url/icon dispatch({ type: ActionTypes.updateBookmark, payload: res.data.data diff --git a/controllers/bookmark.js b/controllers/bookmark.js index 08b2fca..8077a8c 100644 --- a/controllers/bookmark.js +++ b/controllers/bookmark.js @@ -7,7 +7,18 @@ const { Sequelize } = require('sequelize'); // @route POST /api/bookmarks // @access Public exports.createBookmark = asyncWrapper(async (req, res, next) => { - const bookmark = await Bookmark.create(req.body); + let bookmark; + + let _body = { + ...req.body, + categoryId: parseInt(req.body.categoryId) + }; + + if (req.file) { + _body.icon = req.file.filename; + } + + bookmark = await Bookmark.create(_body); res.status(201).json({ success: true, @@ -59,7 +70,16 @@ exports.updateBookmark = asyncWrapper(async (req, res, next) => { return next(new ErrorResponse(`Bookmark with id of ${req.params.id} was not found`, 404)); } - bookmark = await bookmark.update({ ...req.body }); + let _body = { + ...req.body, + categoryId: parseInt(req.body.categoryId) + }; + + if (req.file) { + _body.icon = req.file.filename; + } + + bookmark = await bookmark.update(_body); res.status(200).json({ success: true, diff --git a/routes/bookmark.js b/routes/bookmark.js index f0d62f4..c594738 100644 --- a/routes/bookmark.js +++ b/routes/bookmark.js @@ -1,5 +1,6 @@ const express = require('express'); const router = express.Router(); +const upload = require('../middleware/multer'); const { createBookmark, @@ -11,13 +12,13 @@ const { router .route('/') - .post(createBookmark) + .post(upload, createBookmark) .get(getBookmarks); router .route('/:id') .get(getBookmark) - .put(updateBookmark) + .put(upload, updateBookmark) .delete(deleteBookmark); module.exports = router; \ No newline at end of file From d39eda49de3d3c7f2399f5bba80274cb3a6dc05d Mon Sep 17 00:00:00 2001 From: unknown Date: Wed, 28 Jul 2021 12:52:30 +0200 Subject: [PATCH 033/196] Added changelog. Added curl to Docker image --- .dockerignore | 3 ++- .gitignore | 3 ++- CHANGELOG.md | 1 + Dockerfile | 2 +- Dockerfile.multiarch | 2 +- client/src/components/Settings/AppDetails/AppDetails.tsx | 9 +++++++++ client/src/store/actions/bookmark.ts | 2 +- 7 files changed, 17 insertions(+), 5 deletions(-) diff --git a/.dockerignore b/.dockerignore index 5fcee18..da9bc10 100644 --- a/.dockerignore +++ b/.dockerignore @@ -1,3 +1,4 @@ node_modules github -public \ No newline at end of file +public +build.sh \ No newline at end of file diff --git a/.gitignore b/.gitignore index 2955045..98ec862 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ node_modules data -public \ No newline at end of file +public +build.sh \ No newline at end of file diff --git a/CHANGELOG.md b/CHANGELOG.md index d1ed220..56860ce 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,7 @@ ### v1.6.1 (2021-07-28) - Added option to upload custom icons for bookmarks ([#52](https://github.com/pawelmalak/flame/issues/52)) - Fixed custom icons not updating ([#58](https://github.com/pawelmalak/flame/issues/58)) +- Added changelog file ### v1.6 (2021-07-17) - Added support for Steam URLs ([#62](https://github.com/pawelmalak/flame/issues/62)) diff --git a/Dockerfile b/Dockerfile index 8016d8e..fed0789 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,6 +1,6 @@ FROM node:14-alpine -RUN apk update && apk add --no-cache nano +RUN apk update && apk add --no-cache nano curl WORKDIR /app diff --git a/Dockerfile.multiarch b/Dockerfile.multiarch index 808b815..20ff6c2 100644 --- a/Dockerfile.multiarch +++ b/Dockerfile.multiarch @@ -1,6 +1,6 @@ FROM node:14-alpine -RUN apk update && apk add --no-cache nano +RUN apk update && apk add --no-cache nano curl WORKDIR /app diff --git a/client/src/components/Settings/AppDetails/AppDetails.tsx b/client/src/components/Settings/AppDetails/AppDetails.tsx index 90fe2fb..50fd37f 100644 --- a/client/src/components/Settings/AppDetails/AppDetails.tsx +++ b/client/src/components/Settings/AppDetails/AppDetails.tsx @@ -17,6 +17,15 @@ const AppDetails = (): JSX.Element => { {' '} version {process.env.REACT_APP_VERSION}

    +

    + See changelog {' '} + + here + +

    ) diff --git a/client/src/store/actions/bookmark.ts b/client/src/store/actions/bookmark.ts index 8707062..b4b5831 100644 --- a/client/src/store/actions/bookmark.ts +++ b/client/src/store/actions/bookmark.ts @@ -72,7 +72,7 @@ export interface AddBookmarkAction { export const addBookmark = (formData: NewBookmark | FormData) => async (dispatch: Dispatch) => { try { const res = await axios.post>('/api/bookmarks', formData); - console.log(res.data.data) + dispatch({ type: ActionTypes.createNotification, payload: { From 4b42f991f8073af18577c8a1cdfb4803c2cfebaf Mon Sep 17 00:00:00 2001 From: Bhanu Date: Tue, 3 Aug 2021 11:51:54 +0530 Subject: [PATCH 034/196] Use correct changelog link current link in release 1.6.1 points to an incorrect url that returns 404 --- client/src/components/Settings/AppDetails/AppDetails.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/client/src/components/Settings/AppDetails/AppDetails.tsx b/client/src/components/Settings/AppDetails/AppDetails.tsx index 50fd37f..109053a 100644 --- a/client/src/components/Settings/AppDetails/AppDetails.tsx +++ b/client/src/components/Settings/AppDetails/AppDetails.tsx @@ -20,7 +20,7 @@ const AppDetails = (): JSX.Element => {

    See changelog {' '} here @@ -31,4 +31,4 @@ const AppDetails = (): JSX.Element => { ) } -export default AppDetails; \ No newline at end of file +export default AppDetails; From b94df53267ecb534fce5468d1529aae4972ac82a Mon Sep 17 00:00:00 2001 From: unknown Date: Tue, 3 Aug 2021 10:22:55 +0200 Subject: [PATCH 035/196] github directory name changed --- {github => .github}/_apps.png | Bin {github => .github}/_bookmarks.png | Bin {github => .github}/_home.png | Bin {github => .github}/_themes.png | Bin README.md | 43 +++++++++++++++++++++-------- 5 files changed, 31 insertions(+), 12 deletions(-) rename {github => .github}/_apps.png (100%) rename {github => .github}/_bookmarks.png (100%) rename {github => .github}/_home.png (100%) rename {github => .github}/_themes.png (100%) diff --git a/github/_apps.png b/.github/_apps.png similarity index 100% rename from github/_apps.png rename to .github/_apps.png diff --git a/github/_bookmarks.png b/.github/_bookmarks.png similarity index 100% rename from github/_bookmarks.png rename to .github/_bookmarks.png diff --git a/github/_home.png b/.github/_home.png similarity index 100% rename from github/_home.png rename to .github/_home.png diff --git a/github/_themes.png b/.github/_themes.png similarity index 100% rename from github/_themes.png rename to .github/_themes.png diff --git a/README.md b/README.md index 8e27c86..5c1abe2 100644 --- a/README.md +++ b/README.md @@ -5,23 +5,26 @@ [![Node Badge](https://img.shields.io/badge/Node.js-43853D?style=for-the-badge&logo=node.js&logoColor=white)](https://shields.io/) [![React Badge](https://img.shields.io/badge/React-20232A?style=for-the-badge&logo=react&logoColor=61DAFB)](https://shields.io/) -![Homescreen screenshot](./github/_home.png) +![Homescreen screenshot](./.github/_home.png) ## Description + Flame is self-hosted startpage for your server. Its design is inspired (heavily) by [SUI](https://github.com/jeroenpardon/sui). Flame is very easy to setup and use. With built-in editors it allows you to setup your very own appliaction hub in no time - no file editing necessary. ## Technology + - Backend - Node.js + Express - Sequelize ORM + SQLite - Frontend - - React + - React - Redux - TypeScript - Deployment - Docker ## Development + ```sh # clone repository git clone https://github.com/pawelmalak/flame @@ -34,13 +37,14 @@ npm run dev-init npm run dev ``` -## Installation +## Installation ### With Docker (recommended) [Docker Hub](https://hub.docker.com/r/pawelmalak/flame) #### Building images + ```sh # build image for amd64 only docker build -t flame . @@ -54,14 +58,16 @@ docker buildx build \ ``` #### Deployment + ```sh # run container docker run -p 5005:5005 -v /path/to/data:/app/data flame ``` #### Docker-Compose + ```yaml -version: "2.1" +version: '2.1' services: flame: image: pawelmalak/flame:latest @@ -74,46 +80,54 @@ services: ``` ### Without Docker + Follow instructions from wiki: [Installation without Docker](https://github.com/pawelmalak/flame/wiki/Installation-without-docker) ## Functionality + - Applications - Create, update, delete and organize applications using GUI - Pin your favourite apps to homescreen -![Homescreen screenshot](./github/_apps.png) +![Homescreen screenshot](./.github/_apps.png) - Bookmarks - Create, update, delete and organize bookmarks and categories using GUI - Pin your favourite categories to homescreen -![Homescreen screenshot](./github/_bookmarks.png) +![Homescreen screenshot](./.github/_bookmarks.png) - Weather + - Get current temperature, cloud coverage and weather status with animated icons - Themes - - Customize your page by choosing from 12 color themes + - Customize your page by choosing from 12 color themes -![Homescreen screenshot](./github/_themes.png) +![Homescreen screenshot](./.github/_themes.png) ## Usage + ### Search bar + #### Searching + To use search bar you need to type your search query with selected prefix. For example, to search for "what is docker" using google search you would type: `/g what is docker`. > You can change where to open search results (same/new tab) in the settings #### Supported search engines + | Name | Prefix | Search URL | -|------------|--------|-------------------------------------| +| ---------- | ------ | ----------------------------------- | | Disroot | /ds | http://search.disroot.org/search?q= | | DuckDuckGo | /d | https://duckduckgo.com/?q= | | Google | /g | https://www.google.com/search?q= | #### Supported services + | Name | Prefix | Search URL | -|--------------------|--------|-----------------------------------------------| +| ------------------ | ------ | --------------------------------------------- | | IMDb | /im | https://www.imdb.com/find?q= | | Reddit | /r | https://www.reddit.com/search?q= | | Spotify | /sp | https://open.spotify.com/search/ | @@ -121,13 +135,16 @@ To use search bar you need to type your search query with selected prefix. For e | Youtube | /yt | https://www.youtube.com/results?search_query= | ### Setting up weather module + 1. Obtain API Key from [Weather API](https://www.weatherapi.com/pricing.aspx). > Free plan allows for 1M calls per month. Flame is making less then 3K API calls per month. 2. Get lat/long for your location. You can get them from [latlong.net](https://www.latlong.net/convert-address-to-lat-long.html). 3. Enter and save data. Weather widget will now update and should be visible on Home page. ### Supported URL formats for applications and bookmarks + #### Rules + - URL starts with `http://` - Format: `http://www.domain.com`, `http://domain.com` - Redirect: `{dest}` @@ -139,11 +156,13 @@ To use search bar you need to type your search query with selected prefix. For e - Redirect: `http://{dest}` ### Custom CSS + > This is an experimental feature. Its behaviour might change in the future. -> -Follow instructions from wiki: [Custom CSS](https://github.com/pawelmalak/flame/wiki/Custom-CSS) +> +> Follow instructions from wiki: [Custom CSS](https://github.com/pawelmalak/flame/wiki/Custom-CSS) ## Support + If you want to support development of Flame and my upcoming self-hosted and open source projects you can use the following link: [![PayPal Badge](https://img.shields.io/badge/PayPal-00457C?style=for-the-badge&logo=paypal&logoColor=white)](https://www.paypal.com/paypalme/pawelmalak) From b53509aa691d5889fe8cd9dd4afba227c59cc653 Mon Sep 17 00:00:00 2001 From: Pablo Ruiz Date: Wed, 4 Aug 2021 22:19:35 +0200 Subject: [PATCH 036/196] docker api --- README.md | 15 +++++ .../Settings/OtherSettings/OtherSettings.tsx | 33 ++++++++++- client/src/interfaces/Forms.ts | 2 + controllers/apps.js | 55 ++++++++++++++++++- utils/initialConfig.json | 8 +++ 5 files changed, 110 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 5c1abe2..4074c61 100644 --- a/README.md +++ b/README.md @@ -74,6 +74,7 @@ services: container_name: flame volumes: - :/app/data + - /var/run/docker.sock:/var/sock/docker.sock # Docker socket ports: - 5005:5005 restart: unless-stopped @@ -155,6 +156,20 @@ To use search bar you need to type your search query with selected prefix. For e - Format: `www.domain.com`, `domain.com`, `sub.domain.com`, `local`, `ip`, `ip:port` - Redirect: `http://{dest}` +### Docker integration + +In order to use the Docker integration, each container must have the following labels: + +```yml +labels: + - flame.type=application # "app" works too + - flame.name=My container + - flame.url=https://example.com + - flame.icon=icon-name # Optional, default is "docker" +``` + +And you must have activated the Docker sync option in the settings panel. + ### Custom CSS > This is an experimental feature. Its behaviour might change in the future. diff --git a/client/src/components/Settings/OtherSettings/OtherSettings.tsx b/client/src/components/Settings/OtherSettings/OtherSettings.tsx index 199e9ff..cdf5302 100644 --- a/client/src/components/Settings/OtherSettings/OtherSettings.tsx +++ b/client/src/components/Settings/OtherSettings/OtherSettings.tsx @@ -40,7 +40,9 @@ const OtherSettings = (props: ComponentProps): JSX.Element => { useOrdering: 'createdAt', appsSameTab: 0, bookmarksSameTab: 0, - searchSameTab: 0 + searchSameTab: 0, + dockerApps:1, + unpinStoppedApps: 1 }) // Get config @@ -57,7 +59,9 @@ const OtherSettings = (props: ComponentProps): JSX.Element => { useOrdering: searchConfig('useOrdering', 'createdAt'), appsSameTab: searchConfig('appsSameTab', 0), bookmarksSameTab: searchConfig('bookmarksSameTab', 0), - searchSameTab: searchConfig('searchSameTab', 0) + searchSameTab: searchConfig('searchSameTab', 0), + dockerApps: searchConfig('dockerApps', 1), + unpinStoppedApps: searchConfig('unpinStoppedApps', 1) }) }, [props.loading]); @@ -243,6 +247,31 @@ const OtherSettings = (props: ComponentProps): JSX.Element => { +

    Docker

    + + + + + + + + ) diff --git a/client/src/interfaces/Forms.ts b/client/src/interfaces/Forms.ts index 139a638..8717d03 100644 --- a/client/src/interfaces/Forms.ts +++ b/client/src/interfaces/Forms.ts @@ -18,4 +18,6 @@ export interface SettingsForm { appsSameTab: number; bookmarksSameTab: number; searchSameTab: number; + dockerApps: number; + unpinStoppedApps: number; } diff --git a/controllers/apps.js b/controllers/apps.js index 92c1736..128e657 100644 --- a/controllers/apps.js +++ b/controllers/apps.js @@ -3,6 +3,7 @@ const ErrorResponse = require('../utils/ErrorResponse'); const App = require('../models/App'); const Config = require('../models/Config'); const { Sequelize } = require('sequelize'); +const axios = require('axios'); // @desc Create new app // @route POST /api/apps @@ -45,10 +46,61 @@ exports.getApps = asyncWrapper(async (req, res, next) => { const useOrdering = await Config.findOne({ where: { key: 'useOrdering' } }); + const useDockerApi = await Config.findOne({ + where: { key: 'dockerApps' } + }); + const unpinStoppedApps = await Config.findOne({ + where: { key: 'unpinStoppedApps' } + }); const orderType = useOrdering ? useOrdering.value : 'createdAt'; let apps; + + if (useDockerApi && useDockerApi.value==1) { + let {data:containers} = await axios.get('http://localhost/containers/json?{"status":["running"]}', { + socketPath: '/var/run/docker.sock' + }); + + if (containers) { + apps = await App.findAll({ + order: [[ orderType, 'ASC' ]] + }); + + containers = containers.filter((e) => Object.keys(e.Labels).length !== 0); + const dockerApps = []; + for (const container of containers) { + const labels = container.Labels; + + if ('flame.name' in labels && 'flame.url' in labels && (labels['flame.type']==='application' || labels['flame.type']==='app')) { + dockerApps.push({ + name: labels['flame.name'], + url: labels['flame.url'], + icon: labels['flame.icon'] || 'docker' + }) + } + } + + if (unpinStoppedApps && unpinStoppedApps.value==1) { + for (const app of apps) { + await app.update({ isPinned: false }); + } + } + + for (const item of dockerApps) { + if (apps.some(app => app.name === item.name)) { + const app = apps.filter(e => e.name === item.name)[0]; + await app.update({ ...item,isPinned: true }); + } else { + await App.create({ + ...item, + isPinned: true + }) + } + } + } + } + if (orderType == 'name') { apps = await App.findAll({ order: [[ Sequelize.fn('lower', Sequelize.col('name')), 'ASC' ]] @@ -59,7 +111,8 @@ exports.getApps = asyncWrapper(async (req, res, next) => { }); } - res.status(200).json({ + // Set header to fetch containers info every time + res.status(200).setHeader('Cache-Control','no-store').json({ success: true, data: apps }) diff --git a/utils/initialConfig.json b/utils/initialConfig.json index 39d2e08..0d0613c 100644 --- a/utils/initialConfig.json +++ b/utils/initialConfig.json @@ -63,6 +63,14 @@ { "key": "defaultSearchProvider", "value": "d" + }, + { + "key": "dockerApps", + "value": true + }, + { + "key": "unpinStoppedApps", + "value": true } ] } From 39349dded1ad44a3e5662b46d1477e696cf31258 Mon Sep 17 00:00:00 2001 From: Pablo Ruiz Date: Thu, 5 Aug 2021 08:56:02 +0200 Subject: [PATCH 037/196] fix optional docker.sock mount --- README.md | 2 +- controllers/apps.js | 11 +++++++++-- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 4074c61..c15bf65 100644 --- a/README.md +++ b/README.md @@ -74,7 +74,7 @@ services: container_name: flame volumes: - :/app/data - - /var/run/docker.sock:/var/sock/docker.sock # Docker socket + - /var/run/docker.sock:/var/sock/docker.sock # optional but required for Docker integration feature ports: - 5005:5005 restart: unless-stopped diff --git a/controllers/apps.js b/controllers/apps.js index 128e657..7073780 100644 --- a/controllers/apps.js +++ b/controllers/apps.js @@ -4,6 +4,8 @@ const App = require('../models/App'); const Config = require('../models/Config'); const { Sequelize } = require('sequelize'); const axios = require('axios'); +const Logger = require('../utils/Logger'); +const logger = new Logger(); // @desc Create new app // @route POST /api/apps @@ -58,9 +60,14 @@ exports.getApps = asyncWrapper(async (req, res, next) => { if (useDockerApi && useDockerApi.value==1) { - let {data:containers} = await axios.get('http://localhost/containers/json?{"status":["running"]}', { + let containers = null; + + try { + let {data} = await axios.get('http://localhost/containers/json?{"status":["running"]}', { socketPath: '/var/run/docker.sock' }); + containers = data; + } catch{logger.log("Can't connect to the docker socket","ERROR")} if (containers) { apps = await App.findAll({ @@ -72,7 +79,7 @@ exports.getApps = asyncWrapper(async (req, res, next) => { for (const container of containers) { const labels = container.Labels; - if ('flame.name' in labels && 'flame.url' in labels && (labels['flame.type']==='application' || labels['flame.type']==='app')) { + if ('flame.name' in labels && 'flame.url' in labels && /^app/.test(labels['flame.type'])) { dockerApps.push({ name: labels['flame.name'], url: labels['flame.url'], From a01661d0d5e0c736555b897c86328f2cf91dbed3 Mon Sep 17 00:00:00 2001 From: unknown Date: Fri, 6 Aug 2021 10:36:05 +0200 Subject: [PATCH 038/196] Pushed version 1.6.2. Small formatting fixes --- .prettierignore | 1 + CHANGELOG.md | 4 + client/.env | 2 +- .../Settings/OtherSettings/OtherSettings.tsx | 101 +++++++++++------- controllers/apps.js | 89 ++++++++------- utils/initialConfig.json | 4 +- 6 files changed, 123 insertions(+), 78 deletions(-) create mode 100644 .prettierignore diff --git a/.prettierignore b/.prettierignore new file mode 100644 index 0000000..2e1fa2d --- /dev/null +++ b/.prettierignore @@ -0,0 +1 @@ +*.md \ No newline at end of file diff --git a/CHANGELOG.md b/CHANGELOG.md index 56860ce..e6df0e5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,7 @@ +### v1.6.2 (2021-08-06) +- Fixed changelog link +- Added support for Docker API ([#14](https://github.com/pawelmalak/flame/issues/14)) + ### v1.6.1 (2021-07-28) - Added option to upload custom icons for bookmarks ([#52](https://github.com/pawelmalak/flame/issues/52)) - Fixed custom icons not updating ([#58](https://github.com/pawelmalak/flame/issues/58)) diff --git a/client/.env b/client/.env index f56a185..0c25886 100644 --- a/client/.env +++ b/client/.env @@ -1 +1 @@ -REACT_APP_VERSION=1.6.1 \ No newline at end of file +REACT_APP_VERSION=1.6.2 \ No newline at end of file diff --git a/client/src/components/Settings/OtherSettings/OtherSettings.tsx b/client/src/components/Settings/OtherSettings/OtherSettings.tsx index cdf5302..80b0c0b 100644 --- a/client/src/components/Settings/OtherSettings/OtherSettings.tsx +++ b/client/src/components/Settings/OtherSettings/OtherSettings.tsx @@ -2,10 +2,20 @@ import { useState, useEffect, ChangeEvent, FormEvent } from 'react'; // Redux import { connect } from 'react-redux'; -import { createNotification, updateConfig, sortApps, sortCategories } from '../../../store/actions'; +import { + createNotification, + updateConfig, + sortApps, + sortCategories +} from '../../../store/actions'; // Typescript -import { GlobalState, NewNotification, Query, SettingsForm } from '../../../interfaces'; +import { + GlobalState, + NewNotification, + Query, + SettingsForm +} from '../../../interfaces'; // UI import InputGroup from '../../UI/Forms/InputGroup/InputGroup'; @@ -41,9 +51,9 @@ const OtherSettings = (props: ComponentProps): JSX.Element => { appsSameTab: 0, bookmarksSameTab: 0, searchSameTab: 0, - dockerApps:1, + dockerApps: 1, unpinStoppedApps: 1 - }) + }); // Get config useEffect(() => { @@ -60,9 +70,9 @@ const OtherSettings = (props: ComponentProps): JSX.Element => { appsSameTab: searchConfig('appsSameTab', 0), bookmarksSameTab: searchConfig('bookmarksSameTab', 0), searchSameTab: searchConfig('searchSameTab', 0), - dockerApps: searchConfig('dockerApps', 1), - unpinStoppedApps: searchConfig('unpinStoppedApps', 1) - }) + dockerApps: searchConfig('dockerApps', 0), + unpinStoppedApps: searchConfig('unpinStoppedApps', 0) + }); }, [props.loading]); // Form handler @@ -78,10 +88,13 @@ const OtherSettings = (props: ComponentProps): JSX.Element => { // Sort apps and categories with new settings props.sortApps(); props.sortCategories(); - } + }; // Input handler - const inputChangeHandler = (e: ChangeEvent, isNumber?: boolean) => { + const inputChangeHandler = ( + e: ChangeEvent, + isNumber?: boolean + ) => { let value: string | number = e.target.value; if (isNumber) { @@ -91,11 +104,11 @@ const OtherSettings = (props: ComponentProps): JSX.Element => { setFormData({ ...formData, [e.target.name]: value - }) - } + }); + }; return ( -
    formSubmitHandler(e)}> + formSubmitHandler(e)}> {/* OTHER OPTIONS */}

    Miscellaneous

    @@ -106,31 +119,35 @@ const OtherSettings = (props: ComponentProps): JSX.Element => { name='customTitle' placeholder='Flame' value={formData.customTitle} - onChange={(e) => inputChangeHandler(e)} + onChange={e => inputChangeHandler(e)} /> {/* BEAHVIOR OPTIONS */}

    App Behavior

    - + - + - + + + {/* DOCKER SETTINGS */}

    Docker

    @@ -254,40 +277,42 @@ const OtherSettings = (props: ComponentProps): JSX.Element => { id='dockerApps' name='dockerApps' value={formData.dockerApps} - onChange={(e) => inputChangeHandler(e, true)} + onChange={e => inputChangeHandler(e, true)} > - + - +
    - ) -} + ); +}; const mapStateToProps = (state: GlobalState) => { return { loading: state.config.loading - } -} + }; +}; const actions = { createNotification, updateConfig, sortApps, sortCategories -} +}; -export default connect(mapStateToProps, actions)(OtherSettings); \ No newline at end of file +export default connect(mapStateToProps, actions)(OtherSettings); diff --git a/controllers/apps.js b/controllers/apps.js index 7073780..e4fa1bc 100644 --- a/controllers/apps.js +++ b/controllers/apps.js @@ -28,7 +28,7 @@ exports.createApp = asyncWrapper(async (req, res, next) => { app = await App.create({ ..._body, isPinned: true - }) + }); } else { app = await App.create(req.body); } @@ -37,8 +37,8 @@ exports.createApp = asyncWrapper(async (req, res, next) => { res.status(201).json({ success: true, data: app - }) -}) + }); +}); // @desc Get all apps // @route GET /api/apps @@ -58,37 +58,45 @@ exports.getApps = asyncWrapper(async (req, res, next) => { const orderType = useOrdering ? useOrdering.value : 'createdAt'; let apps; - - if (useDockerApi && useDockerApi.value==1) { + if (useDockerApi && useDockerApi.value == 1) { let containers = null; try { - let {data} = await axios.get('http://localhost/containers/json?{"status":["running"]}', { - socketPath: '/var/run/docker.sock' - }); - containers = data; - } catch{logger.log("Can't connect to the docker socket","ERROR")} + let { data } = await axios.get( + 'http://localhost/containers/json?{"status":["running"]}', + { + socketPath: '/var/run/docker.sock' + } + ); + containers = data; + } catch { + logger.log("Can't connect to the docker socket", 'ERROR'); + } if (containers) { apps = await App.findAll({ - order: [[ orderType, 'ASC' ]] + order: [[orderType, 'ASC']] }); - containers = containers.filter((e) => Object.keys(e.Labels).length !== 0); + containers = containers.filter(e => Object.keys(e.Labels).length !== 0); const dockerApps = []; for (const container of containers) { const labels = container.Labels; - if ('flame.name' in labels && 'flame.url' in labels && /^app/.test(labels['flame.type'])) { + if ( + 'flame.name' in labels && + 'flame.url' in labels && + /^app/.test(labels['flame.type']) + ) { dockerApps.push({ name: labels['flame.name'], url: labels['flame.url'], icon: labels['flame.icon'] || 'docker' - }) + }); } } - if (unpinStoppedApps && unpinStoppedApps.value==1) { + if (unpinStoppedApps && unpinStoppedApps.value == 1) { for (const app of apps) { await app.update({ isPinned: false }); } @@ -97,12 +105,12 @@ exports.getApps = asyncWrapper(async (req, res, next) => { for (const item of dockerApps) { if (apps.some(app => app.name === item.name)) { const app = apps.filter(e => e.name === item.name)[0]; - await app.update({ ...item,isPinned: true }); + await app.update({ ...item, isPinned: true }); } else { await App.create({ ...item, isPinned: true - }) + }); } } } @@ -110,20 +118,20 @@ exports.getApps = asyncWrapper(async (req, res, next) => { if (orderType == 'name') { apps = await App.findAll({ - order: [[ Sequelize.fn('lower', Sequelize.col('name')), 'ASC' ]] + order: [[Sequelize.fn('lower', Sequelize.col('name')), 'ASC']] }); } else { apps = await App.findAll({ - order: [[ orderType, 'ASC' ]] + order: [[orderType, 'ASC']] }); } // Set header to fetch containers info every time - res.status(200).setHeader('Cache-Control','no-store').json({ + res.status(200).setHeader('Cache-Control', 'no-store').json({ success: true, data: apps - }) -}) + }); +}); // @desc Get single app // @route GET /api/apps/:id @@ -134,14 +142,16 @@ exports.getApp = asyncWrapper(async (req, res, next) => { }); if (!app) { - return next(new ErrorResponse(`App with id of ${req.params.id} was not found`, 404)); + return next( + new ErrorResponse(`App with id of ${req.params.id} was not found`, 404) + ); } res.status(200).json({ success: true, data: app - }) -}) + }); +}); // @desc Update app // @route PUT /api/apps/:id @@ -152,7 +162,9 @@ exports.updateApp = asyncWrapper(async (req, res, next) => { }); if (!app) { - return next(new ErrorResponse(`App with id of ${req.params.id} was not found`, 404)); + return next( + new ErrorResponse(`App with id of ${req.params.id} was not found`, 404) + ); } let _body = { ...req.body }; @@ -166,8 +178,8 @@ exports.updateApp = asyncWrapper(async (req, res, next) => { res.status(200).json({ success: true, data: app - }) -}) + }); +}); // @desc Delete app // @route DELETE /api/apps/:id @@ -175,26 +187,29 @@ exports.updateApp = asyncWrapper(async (req, res, next) => { exports.deleteApp = asyncWrapper(async (req, res, next) => { await App.destroy({ where: { id: req.params.id } - }) + }); res.status(200).json({ success: true, data: {} - }) -}) + }); +}); // @desc Reorder apps // @route PUT /api/apps/0/reorder // @access Public exports.reorderApps = asyncWrapper(async (req, res, next) => { req.body.apps.forEach(async ({ id, orderId }) => { - await App.update({ orderId }, { - where: { id } - }) - }) + await App.update( + { orderId }, + { + where: { id } + } + ); + }); res.status(200).json({ success: true, data: {} - }) -}) \ No newline at end of file + }); +}); diff --git a/utils/initialConfig.json b/utils/initialConfig.json index 0d0613c..99bbb46 100644 --- a/utils/initialConfig.json +++ b/utils/initialConfig.json @@ -66,11 +66,11 @@ }, { "key": "dockerApps", - "value": true + "value": false }, { "key": "unpinStoppedApps", - "value": true + "value": false } ] } From 1699146f799b27da4b40798d407c1e63c37807ee Mon Sep 17 00:00:00 2001 From: unknown Date: Fri, 6 Aug 2021 15:15:54 +0200 Subject: [PATCH 039/196] Added support for custom SVG icons --- CHANGELOG.md | 3 + client/.env | 2 +- client/package-lock.json | 13 + client/package.json | 1 + client/src/App.tsx | 5 +- .../Apps/AppCard/AppCard.module.css | 6 +- .../src/components/Apps/AppCard/AppCard.tsx | 42 ++- .../src/components/Apps/AppForm/AppForm.tsx | 128 +++---- .../BookmarkCard/BookmarkCard.module.css | 12 +- .../Bookmarks/BookmarkCard/BookmarkCard.tsx | 55 ++- .../Bookmarks/BookmarkForm/BookmarkForm.tsx | 329 +++++++++--------- controllers/apps.js | 12 +- db.js | 10 +- middleware/multer.js | 8 +- 14 files changed, 356 insertions(+), 270 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index e6df0e5..b1bd00e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,6 @@ +### v1.6.3 (TBA) +- Added support for custom SVG icons ([#73](https://github.com/pawelmalak/flame/issues/73)) + ### v1.6.2 (2021-08-06) - Fixed changelog link - Added support for Docker API ([#14](https://github.com/pawelmalak/flame/issues/14)) diff --git a/client/.env b/client/.env index 0c25886..3ab31e3 100644 --- a/client/.env +++ b/client/.env @@ -1 +1 @@ -REACT_APP_VERSION=1.6.2 \ No newline at end of file +REACT_APP_VERSION=1.6.3 \ No newline at end of file diff --git a/client/package-lock.json b/client/package-lock.json index 66b371f..8326fc6 100644 --- a/client/package-lock.json +++ b/client/package-lock.json @@ -6462,6 +6462,14 @@ } } }, + "external-svg-loader": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/external-svg-loader/-/external-svg-loader-1.3.4.tgz", + "integrity": "sha512-73h7/rYYA4KnIV74M/0r6zHWPLuY/8QHnwKymwh+46tbQAZ0ZtoN98TJZI+CUYTfP2nXgqslCgSsxcr7eOw45w==", + "requires": { + "idb-keyval": "^3.2.0" + } + }, "extglob": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", @@ -7527,6 +7535,11 @@ "postcss": "^7.0.14" } }, + "idb-keyval": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/idb-keyval/-/idb-keyval-3.2.0.tgz", + "integrity": "sha512-slx8Q6oywCCSfKgPgL0sEsXtPVnSbTLWpyiDcu6msHOyKOLari1TD1qocXVCft80umnkk3/Qqh3lwoFt8T/BPQ==" + }, "identity-obj-proxy": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/identity-obj-proxy/-/identity-obj-proxy-3.0.0.tgz", diff --git a/client/package.json b/client/package.json index 832d079..f50079e 100644 --- a/client/package.json +++ b/client/package.json @@ -16,6 +16,7 @@ "@types/react-redux": "^7.1.16", "@types/react-router-dom": "^5.1.7", "axios": "^0.21.1", + "external-svg-loader": "^1.3.4", "http-proxy-middleware": "^2.0.0", "react": "^17.0.2", "react-beautiful-dnd": "^13.1.0", diff --git a/client/src/App.tsx b/client/src/App.tsx index 157206e..05db805 100644 --- a/client/src/App.tsx +++ b/client/src/App.tsx @@ -1,5 +1,6 @@ import { BrowserRouter, Route, Switch } from 'react-router-dom'; import { getConfig, setTheme } from './store/actions'; +import 'external-svg-loader'; // Redux import { store } from './store/store'; @@ -40,6 +41,6 @@ const App = (): JSX.Element => { ); -} +}; -export default App; \ No newline at end of file +export default App; diff --git a/client/src/components/Apps/AppCard/AppCard.module.css b/client/src/components/Apps/AppCard/AppCard.module.css index 768ef8e..d6b13a8 100644 --- a/client/src/components/Apps/AppCard/AppCard.module.css +++ b/client/src/components/Apps/AppCard/AppCard.module.css @@ -33,11 +33,11 @@ .AppCard { padding: 2px; border-radius: 4px; - transition: all 0.10s; + transition: all 0.1s; } .AppCard:hover { - background-color: rgba(0,0,0,0.2); + background-color: rgba(0, 0, 0, 0.2); } } @@ -47,4 +47,4 @@ margin-top: 2px; margin-left: 2px; object-fit: contain; -} \ No newline at end of file +} diff --git a/client/src/components/Apps/AppCard/AppCard.tsx b/client/src/components/Apps/AppCard/AppCard.tsx index 79ad3d8..172a680 100644 --- a/client/src/components/Apps/AppCard/AppCard.tsx +++ b/client/src/components/Apps/AppCard/AppCard.tsx @@ -13,6 +13,31 @@ interface ComponentProps { const AppCard = (props: ComponentProps): JSX.Element => { const [displayUrl, redirectUrl] = urlParser(props.app.url); + let iconEl: JSX.Element; + const { icon } = props.app; + + if (/.(jpeg|jpg|png)$/i.test(icon)) { + iconEl = ( + {`${props.app.name} + ); + } else if (/.(svg)$/i.test(icon)) { + iconEl = ( +
    + +
    + ); + } else { + iconEl = ; + } + return (
    { rel='noreferrer' className={classes.AppCard} > -
    - {(/.(jpeg|jpg|png)$/i).test(props.app.icon) - ? {`${props.app.name} - : - } -
    +
    {iconEl}
    {props.app.name}
    {displayUrl}
    - ) -} + ); +}; -export default AppCard; \ No newline at end of file +export default AppCard; diff --git a/client/src/components/Apps/AppForm/AppForm.tsx b/client/src/components/Apps/AppForm/AppForm.tsx index 72d8db2..5d05f0a 100644 --- a/client/src/components/Apps/AppForm/AppForm.tsx +++ b/client/src/components/Apps/AppForm/AppForm.tsx @@ -31,28 +31,28 @@ const AppForm = (props: ComponentProps): JSX.Element => { name: props.app.name, url: props.app.url, icon: props.app.icon - }) + }); } else { setFormData({ name: '', url: '', icon: '' - }) + }); } - }, [props.app]) + }, [props.app]); const inputChangeHandler = (e: ChangeEvent): void => { setFormData({ ...formData, [e.target.name]: e.target.value - }) - } + }); + }; const fileChangeHandler = (e: ChangeEvent): void => { if (e.target.files) { setCustomIcon(e.target.files[0]); } - } + }; const formSubmitHandler = (e: SyntheticEvent): void => { e.preventDefault(); @@ -66,7 +66,7 @@ const AppForm = (props: ComponentProps): JSX.Element => { data.append('url', formData.url); return data; - } + }; if (!props.app) { if (customIcon) { @@ -89,10 +89,10 @@ const AppForm = (props: ComponentProps): JSX.Element => { name: '', url: '', icon: '' - }) + }); setCustomIcon(null); - } + }; return ( { placeholder='Bookstack' required value={formData.name} - onChange={(e) => inputChangeHandler(e)} + onChange={e => inputChangeHandler(e)} /> @@ -120,7 +120,7 @@ const AppForm = (props: ComponentProps): JSX.Element => { placeholder='bookstack.example.com' required value={formData.url} - onChange={(e) => inputChangeHandler(e)} + onChange={e => inputChangeHandler(e)} /> { target='_blank' rel='noreferrer' > - {' '}Check supported URL formats + {' '} + Check supported URL formats - {!useCustomIcon + {!useCustomIcon ? ( // use mdi icon - ? ( - - inputChangeHandler(e)} - /> - - Use icon name from MDI. - - {' '}Click here for reference - - - toggleUseCustomIcon(!useCustomIcon)} - className={classes.Switch}> - Switch to custom icon upload - - ) + + + inputChangeHandler(e)} + /> + + Use icon name from MDI. + + {' '} + Click here for reference + + + toggleUseCustomIcon(!useCustomIcon)} + className={classes.Switch} + > + Switch to custom icon upload + + + ) : ( // upload custom icon - : ( - - fileChangeHandler(e)} - accept='.jpg,.jpeg,.png' - /> - toggleUseCustomIcon(!useCustomIcon)} - className={classes.Switch}> - Switch to MDI - - ) - } - {!props.app - ? - : - } + + + fileChangeHandler(e)} + accept='.jpg,.jpeg,.png,.svg' + /> + toggleUseCustomIcon(!useCustomIcon)} + className={classes.Switch} + > + Switch to MDI + + + )} + {!props.app ? ( + + ) : ( + + )} - ) -} + ); +}; -export default connect(null, { addApp, updateApp })(AppForm); \ No newline at end of file +export default connect(null, { addApp, updateApp })(AppForm); diff --git a/client/src/components/Bookmarks/BookmarkCard/BookmarkCard.module.css b/client/src/components/Bookmarks/BookmarkCard/BookmarkCard.module.css index b21ed42..ec5cbfd 100644 --- a/client/src/components/Bookmarks/BookmarkCard/BookmarkCard.module.css +++ b/client/src/components/Bookmarks/BookmarkCard/BookmarkCard.module.css @@ -32,4 +32,14 @@ display: flex; margin-top: 3px; margin-right: 2px; -} \ No newline at end of file + justify-content: center; + align-items: center; +} + +.BookmarkIconSvg { + width: 80%; + height: 80%; + margin-top: 2px; + margin-left: 2px; + object-fit: contain; +} diff --git a/client/src/components/Bookmarks/BookmarkCard/BookmarkCard.tsx b/client/src/components/Bookmarks/BookmarkCard/BookmarkCard.tsx index fe2198b..d3c0b2d 100644 --- a/client/src/components/Bookmarks/BookmarkCard/BookmarkCard.tsx +++ b/client/src/components/Bookmarks/BookmarkCard/BookmarkCard.tsx @@ -16,31 +16,52 @@ const BookmarkCard = (props: ComponentProps): JSX.Element => { {props.category.bookmarks.map((bookmark: Bookmark) => { const redirectUrl = urlParser(bookmark.url)[1]; + let iconEl: JSX.Element; + const { icon, name } = bookmark; + + if (/.(jpeg|jpg|png)$/i.test(icon)) { + iconEl = ( +
    + {`${name} +
    + ); + } else if (/.(svg)$/i.test(icon)) { + iconEl = ( +
    + +
    + ); + } else { + iconEl = ( +
    + +
    + ); + } + return ( - {bookmark.icon && ( -
    - {(/.(jpeg|jpg|png)$/i).test(bookmark.icon) - ? {`${bookmark.name} - : - } -
    - )} + key={`bookmark-${bookmark.id}`} + > + {icon && iconEl} {bookmark.name}
    - ) + ); })}

XAu{ly6II!ybK=vwZ2UFMa!n^}!A=g8xyjV?!>f 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ðW%O=f;*oOSbDPBJ*@5uefkB4b3U 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

- ) -} + ); +}; -export default BookmarkCard; \ No newline at end of file +export default BookmarkCard; diff --git a/client/src/components/Bookmarks/BookmarkForm/BookmarkForm.tsx b/client/src/components/Bookmarks/BookmarkForm/BookmarkForm.tsx index 67059ae..10d6de2 100644 --- a/client/src/components/Bookmarks/BookmarkForm/BookmarkForm.tsx +++ b/client/src/components/Bookmarks/BookmarkForm/BookmarkForm.tsx @@ -1,11 +1,31 @@ -import { useState, SyntheticEvent, Fragment, ChangeEvent, useEffect } from 'react'; +import { + useState, + SyntheticEvent, + Fragment, + ChangeEvent, + useEffect +} from 'react'; import { connect } from 'react-redux'; import ModalForm from '../../UI/Forms/ModalForm/ModalForm'; import InputGroup from '../../UI/Forms/InputGroup/InputGroup'; -import { Bookmark, Category, GlobalState, NewBookmark, NewCategory, NewNotification } from '../../../interfaces'; +import { + Bookmark, + Category, + GlobalState, + NewBookmark, + NewCategory, + NewNotification +} from '../../../interfaces'; import { ContentType } from '../Bookmarks'; -import { getCategories, addCategory, addBookmark, updateCategory, updateBookmark, createNotification } from '../../../store/actions'; +import { + getCategories, + addCategory, + addBookmark, + updateCategory, + updateBookmark, + createNotification +} from '../../../store/actions'; import Button from '../../UI/Buttons/Button/Button'; import classes from './BookmarkForm.module.css'; @@ -22,8 +42,8 @@ interface ComponentProps { id: number, formData: NewBookmark | FormData, category: { - prev: number, - curr: number + prev: number; + curr: number; } ) => void; createNotification: (notification: NewNotification) => void; @@ -34,14 +54,14 @@ const BookmarkForm = (props: ComponentProps): JSX.Element => { const [customIcon, setCustomIcon] = useState(null); const [categoryName, setCategoryName] = useState({ name: '' - }) + }); const [formData, setFormData] = useState({ name: '', url: '', categoryId: -1, icon: '' - }) + }); // Load category data if provided for editing useEffect(() => { @@ -50,7 +70,7 @@ const BookmarkForm = (props: ComponentProps): JSX.Element => { } else { setCategoryName({ name: '' }); } - }, [props.category]) + }, [props.category]); // Load bookmark data if provided for editing useEffect(() => { @@ -60,16 +80,16 @@ const BookmarkForm = (props: ComponentProps): JSX.Element => { url: props.bookmark.url, categoryId: props.bookmark.categoryId, icon: props.bookmark.icon - }) + }); } else { setFormData({ name: '', url: '', categoryId: -1, icon: '' - }) + }); } - }, [props.bookmark]) + }, [props.bookmark]); const formSubmitHandler = (e: SyntheticEvent): void => { e.preventDefault(); @@ -84,7 +104,7 @@ const BookmarkForm = (props: ComponentProps): JSX.Element => { data.append('categoryId', `${formData.categoryId}`); return data; - } + }; if (!props.category && !props.bookmark) { // Add new @@ -98,7 +118,7 @@ const BookmarkForm = (props: ComponentProps): JSX.Element => { props.createNotification({ title: 'Error', message: 'Please select category' - }) + }); return; } @@ -108,15 +128,15 @@ const BookmarkForm = (props: ComponentProps): JSX.Element => { } else { props.addBookmark(formData); } - + setFormData({ name: '', url: '', categoryId: formData.categoryId, icon: '' - }) + }); - setCustomIcon(null) + setCustomIcon(null); } } else { // Update @@ -128,23 +148,15 @@ const BookmarkForm = (props: ComponentProps): JSX.Element => { // Update bookmark if (customIcon) { const data = createFormData(); - props.updateBookmark( - props.bookmark.id, - data, - { - prev: props.bookmark.categoryId, - curr: formData.categoryId - } - ) + props.updateBookmark(props.bookmark.id, data, { + prev: props.bookmark.categoryId, + curr: formData.categoryId + }); } else { - props.updateBookmark( - props.bookmark.id, - formData, - { - prev: props.bookmark.categoryId, - curr: formData.categoryId - } - ); + props.updateBookmark(props.bookmark.id, formData, { + prev: props.bookmark.categoryId, + curr: formData.categoryId + }); } setFormData({ @@ -152,36 +164,36 @@ const BookmarkForm = (props: ComponentProps): JSX.Element => { url: '', categoryId: -1, icon: '' - }) + }); - setCustomIcon(null) + setCustomIcon(null); } props.modalHandler(); } - } + }; const inputChangeHandler = (e: ChangeEvent): void => { setFormData({ ...formData, [e.target.name]: e.target.value - }) - } + }); + }; const selectChangeHandler = (e: ChangeEvent): void => { setFormData({ ...formData, categoryId: parseInt(e.target.value) - }) - } + }); + }; const fileChangeHandler = (e: ChangeEvent): void => { if (e.target.files) { setCustomIcon(e.target.files[0]); } - } + }; - let button = + let button = ; if (!props.category && !props.bookmark) { if (props.contentType === ContentType.category) { @@ -190,9 +202,9 @@ const BookmarkForm = (props: ComponentProps): JSX.Element => { button = ; } } else if (props.category) { - button = + button = ; } else if (props.bookmark) { - button = + button = ; } return ( @@ -200,136 +212,133 @@ const BookmarkForm = (props: ComponentProps): JSX.Element => { modalHandler={props.modalHandler} formHandler={formSubmitHandler} > - {props.contentType === ContentType.category - ? ( - + {props.contentType === ContentType.category ? ( + + + + setCategoryName({ name: e.target.value })} + /> + + + ) : ( + + + + inputChangeHandler(e)} + /> + + + + inputChangeHandler(e)} + /> + + + {' '} + Check supported URL formats + + + + + + + + {!useCustomIcon ? ( + // mdi - + setCategoryName({ name: e.target.value })} - /> - - - ) - : ( - - - - inputChangeHandler(e)} - /> - - - - inputChangeHandler(e)} + name='icon' + id='icon' + placeholder='book-open-outline' + value={formData.icon} + onChange={e => inputChangeHandler(e)} /> - - {' '}Check supported URL formats + Use icon name from MDI. + + {' '} + Click here for reference - - - - + Switch to custom icon upload + - {!useCustomIcon - // mdi - ? ( - - inputChangeHandler(e)} - /> - - Use icon name from MDI. - - {' '}Click here for reference - - - toggleUseCustomIcon(!useCustomIcon)} - className={classes.Switch}> - Switch to custom icon upload - - ) - // custom - : ( - - fileChangeHandler(e)} - accept='.jpg,.jpeg,.png' - /> - toggleUseCustomIcon(!useCustomIcon)} - className={classes.Switch}> - Switch to MDI - - ) - } - - ) - } + ) : ( + // custom + + + fileChangeHandler(e)} + accept='.jpg,.jpeg,.png,.svg' + /> + toggleUseCustomIcon(!useCustomIcon)} + className={classes.Switch} + > + Switch to MDI + + + )} + + )} {button} - ) -} + ); +}; const mapStateToProps = (state: GlobalState) => { return { categories: state.bookmark.categories - } -} + }; +}; const dispatchMap = { getCategories, @@ -338,6 +347,6 @@ const dispatchMap = { updateCategory, updateBookmark, createNotification -} +}; -export default connect(mapStateToProps, dispatchMap)(BookmarkForm); \ No newline at end of file +export default connect(mapStateToProps, dispatchMap)(BookmarkForm); diff --git a/controllers/apps.js b/controllers/apps.js index e4fa1bc..ab59f2c 100644 --- a/controllers/apps.js +++ b/controllers/apps.js @@ -126,8 +126,16 @@ exports.getApps = asyncWrapper(async (req, res, next) => { }); } - // Set header to fetch containers info every time - res.status(200).setHeader('Cache-Control', 'no-store').json({ + if (process.env.NODE_ENV === 'production') { + // Set header to fetch containers info every time + res.status(200).setHeader('Cache-Control', 'no-store').json({ + success: true, + data: apps + }); + return; + } + + res.status(200).json({ success: true, data: apps }); diff --git a/db.js b/db.js index 9761efe..f9cbcfd 100644 --- a/db.js +++ b/db.js @@ -6,15 +6,15 @@ const sequelize = new Sequelize({ dialect: 'sqlite', storage: './data/db.sqlite', logging: false -}) +}); const connectDB = async () => { try { await sequelize.authenticate(); logger.log('Connected to database'); - + const syncModels = true; - + if (syncModels) { logger.log('Starting model synchronization'); await sequelize.sync({ alter: true }); @@ -24,9 +24,9 @@ const connectDB = async () => { logger.log(`Unable to connect to the database: ${error.message}`, 'ERROR'); process.exit(1); } -} +}; module.exports = { connectDB, sequelize -} \ No newline at end of file +}; diff --git a/middleware/multer.js b/middleware/multer.js index b1314a9..bd493f5 100644 --- a/middleware/multer.js +++ b/middleware/multer.js @@ -12,9 +12,9 @@ const storage = multer.diskStorage({ filename: (req, file, cb) => { cb(null, Date.now() + '--' + file.originalname); } -}) +}); -const supportedTypes = ['jpg', 'jpeg', 'png']; +const supportedTypes = ['jpg', 'jpeg', 'png', 'svg', 'svg+xml']; const fileFilter = (req, file, cb) => { if (supportedTypes.includes(file.mimetype.split('/')[1])) { @@ -22,8 +22,8 @@ const fileFilter = (req, file, cb) => { } else { cb(null, false); } -} +}; const upload = multer({ storage, fileFilter }); -module.exports = upload.single('icon'); \ No newline at end of file +module.exports = upload.single('icon'); From 683c948f6c433f07dbade0b496e1c8d03b9ce3f6 Mon Sep 17 00:00:00 2001 From: unknown Date: Fri, 6 Aug 2021 16:16:13 +0200 Subject: [PATCH 040/196] Added cli tool for adding new search engines/providers --- .prettierrc | 8 ++++ api.js | 5 +-- client/package-lock.json | 6 +++ client/package.json | 3 ++ client/src/utility/searchQueries.json | 40 +++++++++---------- client/utils/dev/cli-searchQueries.js | 57 +++++++++++++++++++++++++++ 6 files changed, 96 insertions(+), 23 deletions(-) create mode 100644 .prettierrc create mode 100644 client/utils/dev/cli-searchQueries.js diff --git a/.prettierrc b/.prettierrc new file mode 100644 index 0000000..f14788c --- /dev/null +++ b/.prettierrc @@ -0,0 +1,8 @@ +{ + "tabWidth": 2, + "useTabs": false, + "singleQuote": true, + "arrowParens": "always", + "printWidth": 80, + "trailingComma": "es5" +} diff --git a/api.js b/api.js index a720fe2..1c2d863 100644 --- a/api.js +++ b/api.js @@ -9,8 +9,7 @@ api.use(express.static(join(__dirname, 'public'))); api.use('/uploads', express.static(join(__dirname, 'data/uploads'))); api.get(/^\/(?!api)/, (req, res) => { res.sendFile(join(__dirname, 'public/index.html')); -}) - +}); // Body parser api.use(express.json()); @@ -25,4 +24,4 @@ api.use('/api/bookmarks', require('./routes/bookmark')); // Custom error handler api.use(errorHandler); -module.exports = api; \ No newline at end of file +module.exports = api; diff --git a/client/package-lock.json b/client/package-lock.json index 8326fc6..2717839 100644 --- a/client/package-lock.json +++ b/client/package-lock.json @@ -12113,6 +12113,12 @@ "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz", "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=" }, + "prettier": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.3.2.tgz", + "integrity": "sha512-lnJzDfJ66zkMy58OL5/NY5zp70S7Nz6KqcKkXYzn2tMVrNxvbqaBpg7H3qHaLxCJ5lNMsGuM8+ohS7cZrthdLQ==", + "dev": true + }, "pretty-bytes": { "version": "5.6.0", "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.6.0.tgz", diff --git a/client/package.json b/client/package.json index f50079e..6e05667 100644 --- a/client/package.json +++ b/client/package.json @@ -54,5 +54,8 @@ "last 1 firefox version", "last 1 safari version" ] + }, + "devDependencies": { + "prettier": "^2.3.2" } } diff --git a/client/src/utility/searchQueries.json b/client/src/utility/searchQueries.json index 6e23503..c4e055d 100644 --- a/client/src/utility/searchQueries.json +++ b/client/src/utility/searchQueries.json @@ -1,9 +1,9 @@ { "queries": [ { - "name": "Google", - "prefix": "g", - "template": "https://www.google.com/search?q=" + "name": "Disroot", + "prefix": "ds", + "template": "http://search.disroot.org/search?q=" }, { "name": "DuckDuckGo", @@ -11,19 +11,9 @@ "template": "https://duckduckgo.com/?q=" }, { - "name": "Disroot", - "prefix": "ds", - "template": "http://search.disroot.org/search?q=" - }, - { - "name": "YouTube", - "prefix": "yt", - "template": "https://www.youtube.com/results?search_query=" - }, - { - "name": "Reddit", - "prefix": "r", - "template": "https://www.reddit.com/search?q=" + "name": "Google", + "prefix": "g", + "template": "https://www.google.com/search?q=" }, { "name": "IMDb", @@ -31,14 +21,24 @@ "template": "https://www.imdb.com/find?q=" }, { - "name": "The Movie Database", - "prefix": "mv", - "template": "https://www.themoviedb.org/search?query=" + "name": "Reddit", + "prefix": "r", + "template": "https://www.reddit.com/search?q=" }, { "name": "Spotify", "prefix": "sp", "template": "https://open.spotify.com/search/" + }, + { + "name": "The Movie Database", + "prefix": "mv", + "template": "https://www.themoviedb.org/search?query=" + }, + { + "name": "YouTube", + "prefix": "yt", + "template": "https://www.youtube.com/results?search_query=" } ] -} \ No newline at end of file +} diff --git a/client/utils/dev/cli-searchQueries.js b/client/utils/dev/cli-searchQueries.js new file mode 100644 index 0000000..c431b32 --- /dev/null +++ b/client/utils/dev/cli-searchQueries.js @@ -0,0 +1,57 @@ +const queries = require('../../src/utility/searchQueries.json'); +const fs = require('fs'); +const prettier = require('prettier'); + +/** + * @description CLI tool for adding new search engines/providers. It will ensure that prefix is unique and that all entries are sorted alphabetically + * @argumens name prefix template + * @example node cli-searchQueries.js "DuckDuckGo" "d" "https://duckduckgo.com/?q=" + */ + +// Get arguments +const args = process.argv.slice(2); + +// Check arguments +if (args.length < 3) { + return console.log('Missing arguments'); +} else if (args.length > 3) { + return console.log('Too many arguments provided'); +} + +// Construct new query object +const newQuery = { + name: args[0], + prefix: args[1], + template: args[2], +}; + +// Get old queries +let rawQueries = queries.queries; +let parsedQueries = ''; + +// Check if prefix is unique +const isUnique = !rawQueries.find((query) => query.prefix == newQuery.prefix); + +if (!isUnique) { + return console.log('Prefix already exists'); +} + +// Add new query +rawQueries.push(newQuery); + +// Sort alphabetically +rawQueries = rawQueries.sort((a, b) => { + const _a = a.name.toLowerCase(); + const _b = b.name.toLowerCase(); + + if (_a < _b) return -1; + if (_a > _b) return 1; + return 0; +}); + +// Format JSON +parsedQueries = JSON.stringify(queries); +parsedQueries = prettier.format(parsedQueries, { parser: 'json' }); + +// Save file +fs.writeFileSync('../../src/utility/searchQueries.json', parsedQueries); From 5c60c7c1568a77401b7783ba92c8f3ced8f34d9b Mon Sep 17 00:00:00 2001 From: unknown Date: Mon, 9 Aug 2021 12:54:07 +0200 Subject: [PATCH 041/196] Pushed version 1.6.3. Added Deezer and Tidal to search queries --- CHANGELOG.md | 3 ++- README.md | 10 ++-------- client/src/utility/searchQueries.json | 10 ++++++++++ 3 files changed, 14 insertions(+), 9 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index b1bd00e..3101629 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,6 @@ -### v1.6.3 (TBA) +### v1.6.3 (2021-08-09) - Added support for custom SVG icons ([#73](https://github.com/pawelmalak/flame/issues/73)) +- Added Deezer and Tidal to search queries ### v1.6.2 (2021-08-06) - Fixed changelog link diff --git a/README.md b/README.md index c15bf65..ef01382 100644 --- a/README.md +++ b/README.md @@ -74,7 +74,7 @@ services: container_name: flame volumes: - :/app/data - - /var/run/docker.sock:/var/sock/docker.sock # optional but required for Docker integration feature + - /var/run/docker.sock:/var/run/docker.sock # optional but required for Docker integration feature ports: - 5005:5005 restart: unless-stopped @@ -174,10 +174,4 @@ And you must have activated the Docker sync option in the settings panel. > This is an experimental feature. Its behaviour might change in the future. > -> Follow instructions from wiki: [Custom CSS](https://github.com/pawelmalak/flame/wiki/Custom-CSS) - -## Support - -If you want to support development of Flame and my upcoming self-hosted and open source projects you can use the following link: - -[![PayPal Badge](https://img.shields.io/badge/PayPal-00457C?style=for-the-badge&logo=paypal&logoColor=white)](https://www.paypal.com/paypalme/pawelmalak) +> Follow instructions from wiki: [Custom CSS](https://github.com/pawelmalak/flame/wiki/Custom-CSS) \ No newline at end of file diff --git a/client/src/utility/searchQueries.json b/client/src/utility/searchQueries.json index c4e055d..e154245 100644 --- a/client/src/utility/searchQueries.json +++ b/client/src/utility/searchQueries.json @@ -1,5 +1,10 @@ { "queries": [ + { + "name": "Deezer", + "prefix": "dz", + "template": "https://www.deezer.com/search/" + }, { "name": "Disroot", "prefix": "ds", @@ -35,6 +40,11 @@ "prefix": "mv", "template": "https://www.themoviedb.org/search?query=" }, + { + "name": "Tidal", + "prefix": "td", + "template": "https://listen.tidal.com/search?q=" + }, { "name": "YouTube", "prefix": "yt", From 78a018f686be4d384622489315ae7ce65980ac02 Mon Sep 17 00:00:00 2001 From: unknown Date: Mon, 9 Aug 2021 15:31:20 +0200 Subject: [PATCH 042/196] Bookmark icon fixes --- .../BookmarkCard/BookmarkCard.module.css | 7 ++ .../Bookmarks/BookmarkCard/BookmarkCard.tsx | 64 ++++++++++--------- 2 files changed, 41 insertions(+), 30 deletions(-) diff --git a/client/src/components/Bookmarks/BookmarkCard/BookmarkCard.module.css b/client/src/components/Bookmarks/BookmarkCard/BookmarkCard.module.css index ec5cbfd..b840a42 100644 --- a/client/src/components/Bookmarks/BookmarkCard/BookmarkCard.module.css +++ b/client/src/components/Bookmarks/BookmarkCard/BookmarkCard.module.css @@ -43,3 +43,10 @@ margin-left: 2px; object-fit: contain; } + +.CustomIcon { + width: 90%; + height: 90%; + margin-top: 2px; + object-fit: contain; +} diff --git a/client/src/components/Bookmarks/BookmarkCard/BookmarkCard.tsx b/client/src/components/Bookmarks/BookmarkCard/BookmarkCard.tsx index d3c0b2d..b332a6f 100644 --- a/client/src/components/Bookmarks/BookmarkCard/BookmarkCard.tsx +++ b/client/src/components/Bookmarks/BookmarkCard/BookmarkCard.tsx @@ -3,6 +3,7 @@ import classes from './BookmarkCard.module.css'; import Icon from '../../UI/Icons/Icon/Icon'; import { iconParser, urlParser, searchConfig } from '../../../utility'; +import { Fragment } from 'react'; interface ComponentProps { category: Category; @@ -16,45 +17,48 @@ const BookmarkCard = (props: ComponentProps): JSX.Element => { {props.category.bookmarks.map((bookmark: Bookmark) => { const redirectUrl = urlParser(bookmark.url)[1]; - let iconEl: JSX.Element; - const { icon, name } = bookmark; + let iconEl: JSX.Element = ; - if (/.(jpeg|jpg|png)$/i.test(icon)) { - iconEl = ( -
- {`${name} -
- ); - } else if (/.(svg)$/i.test(icon)) { - iconEl = ( -
- -
- ); - } else { - iconEl = ( -
- -
- ); + if (bookmark.icon) { + const { icon, name } = bookmark; + + if (/.(jpeg|jpg|png)$/i.test(icon)) { + iconEl = ( +
+ {`${name} +
+ ); + } else if (/.(svg)$/i.test(icon)) { + iconEl = ( +
+ +
+ ); + } else { + iconEl = ( +
+ +
+ ); + } } return ( - {icon && iconEl} + {bookmark.icon && iconEl} {bookmark.name} ); From 8681f75babac390b7d7b7cadadaf0bb359e4e72a Mon Sep 17 00:00:00 2001 From: Dimitri Pommier Date: Tue, 17 Aug 2021 10:32:15 +0200 Subject: [PATCH 043/196] Kubernetes integration (#80) * chore(): skaffold * chore(): kubernetes integration * chore(skaffold): refine shokohsc profile * chore(): removed docker & kubernetes from database + stoppedApp pin option * Revert "chore(): removed docker & kubernetes from database + stoppedApp pin option" This reverts commit 5111c7ad794d15e157b04edcb270800d08257cec. --- .dockerignore | 4 +- CHANGELOG.md | 2 +- Dockerfile.dev | 16 + README.md | 23 + client/.env | 2 +- .../Settings/OtherSettings/OtherSettings.tsx | 17 + client/src/interfaces/Forms.ts | 1 + controllers/apps.js | 62 + k8s/base/deployment.yaml | 28 + k8s/base/ingress.yaml | 17 + k8s/base/kustomization.yaml | 9 + k8s/base/namespace.yaml | 8 + k8s/base/rbac.yaml | 26 + k8s/base/service.yaml | 16 + k8s/overlays/shokohsc/deployment.yaml | 36 + k8s/overlays/shokohsc/ingress.yaml | 28 + k8s/overlays/shokohsc/kustomization.yaml | 9 + k8s/overlays/shokohsc/namespace.yaml | 8 + k8s/overlays/shokohsc/rbac.yaml | 26 + k8s/overlays/shokohsc/service.yaml | 16 + package-lock.json | 5229 ++++++++++++++++- package.json | 4 +- skaffold.yaml | 65 + utils/initialConfig.json | 4 + 24 files changed, 5567 insertions(+), 89 deletions(-) create mode 100644 Dockerfile.dev create mode 100644 k8s/base/deployment.yaml create mode 100644 k8s/base/ingress.yaml create mode 100644 k8s/base/kustomization.yaml create mode 100644 k8s/base/namespace.yaml create mode 100644 k8s/base/rbac.yaml create mode 100644 k8s/base/service.yaml create mode 100644 k8s/overlays/shokohsc/deployment.yaml create mode 100644 k8s/overlays/shokohsc/ingress.yaml create mode 100644 k8s/overlays/shokohsc/kustomization.yaml create mode 100644 k8s/overlays/shokohsc/namespace.yaml create mode 100644 k8s/overlays/shokohsc/rbac.yaml create mode 100644 k8s/overlays/shokohsc/service.yaml create mode 100644 skaffold.yaml diff --git a/.dockerignore b/.dockerignore index da9bc10..6c10c72 100644 --- a/.dockerignore +++ b/.dockerignore @@ -1,4 +1,6 @@ node_modules github public -build.sh \ No newline at end of file +build.sh +k8s +skaffold.yaml diff --git a/CHANGELOG.md b/CHANGELOG.md index 3101629..e269e15 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -56,4 +56,4 @@ - Added 'warnings' to apps and bookmarks forms about supported url formats ([#5](https://github.com/pawelmalak/flame/issues/5)) ### v1.0 (2021-06-08) -Initial release of Flame - self-hosted startpage using Node.js on backend and React on frontend. \ No newline at end of file +Initial release of Flame - self-hosted startpage using Node.js on backend and React on frontend. diff --git a/Dockerfile.dev b/Dockerfile.dev new file mode 100644 index 0000000..680ed26 --- /dev/null +++ b/Dockerfile.dev @@ -0,0 +1,16 @@ +FROM node:lts-alpine as build-front +RUN apk add --no-cache curl +WORKDIR /app +COPY ./client . +RUN npm install --production \ + && npm run build + +FROM node:lts-alpine +WORKDIR /app +RUN mkdir -p ./public +COPY --from=build-front /app/build/ ./public + +COPY package*.json ./ +RUN npm install +COPY . . +CMD ["npm", "run", "skaffold"] diff --git a/README.md b/README.md index ef01382..dadb428 100644 --- a/README.md +++ b/README.md @@ -22,6 +22,7 @@ Flame is self-hosted startpage for your server. Its design is inspired (heavily) - TypeScript - Deployment - Docker + - Kubernetes ## Development @@ -80,6 +81,13 @@ services: restart: unless-stopped ``` +#### Skaffold + +```sh +# use skaffold +skaffold dev +``` + ### Without Docker Follow instructions from wiki: [Installation without Docker](https://github.com/pawelmalak/flame/wiki/Installation-without-docker) @@ -170,6 +178,21 @@ labels: And you must have activated the Docker sync option in the settings panel. +### Kubernetes integration + +In order to use the Kubernetes integration, each ingress must have the following annotations: + +```yml +metadata: + annotations: + - flame.pawelmalak/type=application # "app" works too + - flame.pawelmalak/name=My container + - flame.pawelmalak/url=https://example.com + - flame.pawelmalak/icon=icon-name # Optional, default is "kubernetes" +``` + +And you must have activated the Kubernetes sync option in the settings panel. + ### Custom CSS > This is an experimental feature. Its behaviour might change in the future. diff --git a/client/.env b/client/.env index 3ab31e3..3395c3f 100644 --- a/client/.env +++ b/client/.env @@ -1 +1 @@ -REACT_APP_VERSION=1.6.3 \ No newline at end of file +REACT_APP_VERSION=1.6.3 diff --git a/client/src/components/Settings/OtherSettings/OtherSettings.tsx b/client/src/components/Settings/OtherSettings/OtherSettings.tsx index 80b0c0b..31bbd52 100644 --- a/client/src/components/Settings/OtherSettings/OtherSettings.tsx +++ b/client/src/components/Settings/OtherSettings/OtherSettings.tsx @@ -52,6 +52,7 @@ const OtherSettings = (props: ComponentProps): JSX.Element => { bookmarksSameTab: 0, searchSameTab: 0, dockerApps: 1, + kubernetesApps: 1, unpinStoppedApps: 1 }); @@ -71,6 +72,7 @@ const OtherSettings = (props: ComponentProps): JSX.Element => { bookmarksSameTab: searchConfig('bookmarksSameTab', 0), searchSameTab: searchConfig('searchSameTab', 0), dockerApps: searchConfig('dockerApps', 0), + kubernetesApps: searchConfig('kubernetesApps', 0), unpinStoppedApps: searchConfig('unpinStoppedApps', 0) }); }, [props.loading]); @@ -297,6 +299,21 @@ const OtherSettings = (props: ComponentProps): JSX.Element => { + + {/* KUBERNETES SETTINGS */} +

Kubernetes

+ + + + ); diff --git a/client/src/interfaces/Forms.ts b/client/src/interfaces/Forms.ts index 8717d03..177821d 100644 --- a/client/src/interfaces/Forms.ts +++ b/client/src/interfaces/Forms.ts @@ -19,5 +19,6 @@ export interface SettingsForm { bookmarksSameTab: number; searchSameTab: number; dockerApps: number; + kubernetesApps: number; unpinStoppedApps: number; } diff --git a/controllers/apps.js b/controllers/apps.js index ab59f2c..b5c66be 100644 --- a/controllers/apps.js +++ b/controllers/apps.js @@ -6,6 +6,7 @@ const { Sequelize } = require('sequelize'); const axios = require('axios'); const Logger = require('../utils/Logger'); const logger = new Logger(); +const k8s = require('@kubernetes/client-node'); // @desc Create new app // @route POST /api/apps @@ -51,6 +52,9 @@ exports.getApps = asyncWrapper(async (req, res, next) => { const useDockerApi = await Config.findOne({ where: { key: 'dockerApps' } }); + const useKubernetesApi = await Config.findOne({ + where: { key: 'kubernetesApps' } + }); const unpinStoppedApps = await Config.findOne({ where: { key: 'unpinStoppedApps' } }); @@ -116,6 +120,64 @@ exports.getApps = asyncWrapper(async (req, res, next) => { } } + if (useKubernetesApi && useKubernetesApi.value == 1) { + let ingresses = null; + + try { + const kc = new k8s.KubeConfig(); + kc.loadFromCluster(); + const k8sNetworkingV1Api = kc.makeApiClient(k8s.NetworkingV1Api); + await k8sNetworkingV1Api.listIngressForAllNamespaces() + .then((res) => { + ingresses = res.body.items; + }); + } catch { + logger.log("Can't connect to the kubernetes api", 'ERROR'); + } + + if (ingresses) { + apps = await App.findAll({ + order: [[orderType, 'ASC']] + }); + + ingresses = ingresses.filter(e => Object.keys(e.metadata.annotations).length !== 0); + const kubernetesApps = []; + for (const ingress of ingresses) { + const annotations = ingress.metadata.annotations; + + if ( + 'flame.pawelmalak/name' in annotations && + 'flame.pawelmalak/url' in annotations && + /^app/.test(annotations['flame.pawelmalak/type']) + ) { + kubernetesApps.push({ + name: annotations['flame.pawelmalak/name'], + url: annotations['flame.pawelmalak/url'], + icon: annotations['flame.pawelmalak/icon'] || 'kubernetes' + }); + } + } + + if (unpinStoppedApps && unpinStoppedApps.value == 1) { + for (const app of apps) { + await app.update({ isPinned: false }); + } + } + + for (const item of kubernetesApps) { + if (apps.some(app => app.name === item.name)) { + const app = apps.filter(e => e.name === item.name)[0]; + await app.update({ ...item, isPinned: true }); + } else { + await App.create({ + ...item, + isPinned: true + }); + } + } + } + } + if (orderType == 'name') { apps = await App.findAll({ order: [[Sequelize.fn('lower', Sequelize.col('name')), 'ASC']] diff --git a/k8s/base/deployment.yaml b/k8s/base/deployment.yaml new file mode 100644 index 0000000..3a33cee --- /dev/null +++ b/k8s/base/deployment.yaml @@ -0,0 +1,28 @@ +--- +kind: Deployment +apiVersion: apps/v1 +metadata: + name: flame +spec: + selector: + matchLabels: + app: flame + template: + metadata: + labels: + app: flame + spec: + serviceAccountName: flame + securityContext: + fsGroup: 1000 + containers: + - name: flame + image: shokohsc/flame + ports: + - name: http + containerPort: 5005 + protocol: TCP + readinessProbe: + httpGet: + path: / + port: http diff --git a/k8s/base/ingress.yaml b/k8s/base/ingress.yaml new file mode 100644 index 0000000..7694ddb --- /dev/null +++ b/k8s/base/ingress.yaml @@ -0,0 +1,17 @@ +--- +apiVersion: networking.k8s.io/v1 +kind: Ingress +metadata: + name: flame +spec: + rules: + - host: flame.cluster.local + http: + paths: + - path: / + pathType: Prefix + backend: + service: + name: flame + port: + number: 80 diff --git a/k8s/base/kustomization.yaml b/k8s/base/kustomization.yaml new file mode 100644 index 0000000..5fbfb6f --- /dev/null +++ b/k8s/base/kustomization.yaml @@ -0,0 +1,9 @@ +apiVersion: kustomize.config.k8s.io/v1beta1 +kind: Kustomization +namespace: flame +resources: + - namespace.yaml + - deployment.yaml + - service.yaml + - ingress.yaml + - rbac.yaml diff --git a/k8s/base/namespace.yaml b/k8s/base/namespace.yaml new file mode 100644 index 0000000..cf4094e --- /dev/null +++ b/k8s/base/namespace.yaml @@ -0,0 +1,8 @@ +--- +apiVersion: v1 +kind: Namespace +metadata: + name: flame + labels: + namespace: flame + goldilocks.fairwinds.com/enabled: "true" diff --git a/k8s/base/rbac.yaml b/k8s/base/rbac.yaml new file mode 100644 index 0000000..eedb941 --- /dev/null +++ b/k8s/base/rbac.yaml @@ -0,0 +1,26 @@ +--- +apiVersion: v1 +kind: ServiceAccount +metadata: + name: flame +--- +kind: ClusterRole +apiVersion: rbac.authorization.k8s.io/v1 +metadata: + name: flame +rules: +- apiGroups: ["networking.k8s.io"] + resources: ["ingresses"] + verbs: ["get", "list", "watch"] +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRoleBinding +metadata: + name: flame +subjects: +- kind: ServiceAccount + name: flame +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: ClusterRole + name: flame diff --git a/k8s/base/service.yaml b/k8s/base/service.yaml new file mode 100644 index 0000000..d6cf340 --- /dev/null +++ b/k8s/base/service.yaml @@ -0,0 +1,16 @@ +--- +apiVersion: v1 +kind: Service +metadata: + name: flame + labels: + app: flame +spec: + type: ClusterIP + ports: + - port: 80 + targetPort: http + protocol: TCP + name: http + selector: + app: flame diff --git a/k8s/overlays/shokohsc/deployment.yaml b/k8s/overlays/shokohsc/deployment.yaml new file mode 100644 index 0000000..8649fac --- /dev/null +++ b/k8s/overlays/shokohsc/deployment.yaml @@ -0,0 +1,36 @@ +--- +kind: Deployment +apiVersion: apps/v1 +metadata: + name: flame +spec: + selector: + matchLabels: + app: flame + template: + metadata: + labels: + app: flame + spec: + serviceAccountName: flame-dev + securityContext: + fsGroup: 1000 + containers: + - name: flame + image: shokohsc/flame + command: + - npm + args: + - run + - skaffold + env: + - name: NODE_ENV + value: development + ports: + - name: http + containerPort: 5005 + protocol: TCP + readinessProbe: + httpGet: + path: / + port: http diff --git a/k8s/overlays/shokohsc/ingress.yaml b/k8s/overlays/shokohsc/ingress.yaml new file mode 100644 index 0000000..5d523fa --- /dev/null +++ b/k8s/overlays/shokohsc/ingress.yaml @@ -0,0 +1,28 @@ +--- +apiVersion: networking.k8s.io/v1 +kind: Ingress +metadata: + name: flame + annotations: + kubernetes.io/ingress.class: nginx + cert-manager.io/cluster-issuer: ca-cluster-issuer + flame.pawelmalak/name: flame + flame.pawelmalak/url: dev.flame.shokohsc.home + flame.pawelmalak/type: app + flame.pawelmalak/icon: fire +spec: + rules: + - host: dev.flame.shokohsc.home + http: + paths: + - path: / + pathType: Prefix + backend: + service: + name: flame + port: + number: 80 + tls: + - hosts: + - dev.flame.shokohsc.home + secretName: flame-cert diff --git a/k8s/overlays/shokohsc/kustomization.yaml b/k8s/overlays/shokohsc/kustomization.yaml new file mode 100644 index 0000000..8eff20c --- /dev/null +++ b/k8s/overlays/shokohsc/kustomization.yaml @@ -0,0 +1,9 @@ +apiVersion: kustomize.config.k8s.io/v1beta1 +kind: Kustomization +namespace: flame-dev +resources: + - namespace.yaml + - deployment.yaml + - service.yaml + - ingress.yaml + - rbac.yaml diff --git a/k8s/overlays/shokohsc/namespace.yaml b/k8s/overlays/shokohsc/namespace.yaml new file mode 100644 index 0000000..d767629 --- /dev/null +++ b/k8s/overlays/shokohsc/namespace.yaml @@ -0,0 +1,8 @@ +--- +apiVersion: v1 +kind: Namespace +metadata: + name: flame-dev + labels: + namespace: flame-dev + goldilocks.fairwinds.com/enabled: "true" diff --git a/k8s/overlays/shokohsc/rbac.yaml b/k8s/overlays/shokohsc/rbac.yaml new file mode 100644 index 0000000..2fdc1e6 --- /dev/null +++ b/k8s/overlays/shokohsc/rbac.yaml @@ -0,0 +1,26 @@ +--- +apiVersion: v1 +kind: ServiceAccount +metadata: + name: flame-dev +--- +kind: ClusterRole +apiVersion: rbac.authorization.k8s.io/v1 +metadata: + name: flame-dev +rules: +- apiGroups: ["networking.k8s.io"] + resources: ["ingresses"] + verbs: ["get", "list", "watch"] +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRoleBinding +metadata: + name: flame-dev +subjects: +- kind: ServiceAccount + name: flame-dev +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: ClusterRole + name: flame-dev diff --git a/k8s/overlays/shokohsc/service.yaml b/k8s/overlays/shokohsc/service.yaml new file mode 100644 index 0000000..d6cf340 --- /dev/null +++ b/k8s/overlays/shokohsc/service.yaml @@ -0,0 +1,16 @@ +--- +apiVersion: v1 +kind: Service +metadata: + name: flame + labels: + app: flame +spec: + type: ClusterIP + ports: + - port: 80 + targetPort: http + protocol: TCP + name: http + selector: + app: flame diff --git a/package-lock.json b/package-lock.json index 21017a1..5abdad6 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,8 +1,4517 @@ { "name": "flame", "version": "0.1.0", - "lockfileVersion": 1, + "lockfileVersion": 2, "requires": true, + "packages": { + "": { + "name": "flame", + "version": "0.1.0", + "license": "ISC", + "dependencies": { + "@kubernetes/client-node": "^0.15.0", + "@types/express": "^4.17.11", + "axios": "^0.21.1", + "colors": "^1.4.0", + "concurrently": "^6.0.2", + "dotenv": "^9.0.0", + "express": "^4.17.1", + "multer": "^1.4.2", + "node-schedule": "^2.0.0", + "sequelize": "^6.6.2", + "sqlite3": "^5.0.2", + "ws": "^7.4.6" + }, + "devDependencies": { + "nodemon": "^2.0.7" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz", + "integrity": "sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==", + "dependencies": { + "@babel/highlight": "^7.12.13" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.0.tgz", + "integrity": "sha512-V3ts7zMSu5lfiwWDVWzRDGIN+lnCEUdaXgtVHJgLb1rGaA6jMrtB9EmE7L18foXJIE8Un/A/h6NJfGQp/e1J4A==" + }, + "node_modules/@babel/highlight": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.0.tgz", + "integrity": "sha512-YSCOwxvTYEIMSGaBQb5kDDsCopDdiUGsqpatp3fOlI4+2HQSkTmEVWnVuySdAC5EWCqSWWTv0ib63RjR7dTBdg==", + "dependencies": { + "@babel/helper-validator-identifier": "^7.14.0", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + } + }, + "node_modules/@babel/highlight/node_modules/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==", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/@babel/highlight/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "node_modules/@kubernetes/client-node": { + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/@kubernetes/client-node/-/client-node-0.15.0.tgz", + "integrity": "sha512-AnEcsWWadl5IWOzzvO/gWpTnJb1d1CzA/rbV/qK1c0fD1SOxTDPj6jFllyQ9icGDfCgNw3TafZftmuepm6z9JA==", + "dependencies": { + "@types/js-yaml": "^3.12.1", + "@types/node": "^10.12.0", + "@types/request": "^2.47.1", + "@types/stream-buffers": "^3.0.3", + "@types/tar": "^4.0.3", + "@types/underscore": "^1.8.9", + "@types/ws": "^6.0.1", + "byline": "^5.0.0", + "execa": "5.0.0", + "isomorphic-ws": "^4.0.1", + "js-yaml": "^3.13.1", + "jsonpath-plus": "^0.19.0", + "openid-client": "^4.1.1", + "request": "^2.88.0", + "rfc4648": "^1.3.0", + "shelljs": "^0.8.4", + "stream-buffers": "^3.0.2", + "tar": "^6.0.2", + "tmp-promise": "^3.0.2", + "tslib": "^1.9.3", + "underscore": "^1.9.1", + "ws": "^7.3.1" + } + }, + "node_modules/@kubernetes/client-node/node_modules/@types/node": { + "version": "10.17.60", + "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.60.tgz", + "integrity": "sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw==" + }, + "node_modules/@kubernetes/client-node/node_modules/chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "engines": { + "node": ">=10" + } + }, + "node_modules/@kubernetes/client-node/node_modules/fs-minipass": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@kubernetes/client-node/node_modules/minipass": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.3.tgz", + "integrity": "sha512-Mgd2GdMVzY+x3IJ+oHnVM+KG3lA5c8tnabyJKmHSaG2kAGpudxuOf8ToDkhumF7UzME7DecbQE9uOZhNm7PuJg==", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@kubernetes/client-node/node_modules/minizlib": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", + "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", + "dependencies": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@kubernetes/client-node/node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@kubernetes/client-node/node_modules/tar": { + "version": "6.1.7", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.7.tgz", + "integrity": "sha512-PBoRkOJU0X3lejJ8GaRCsobjXTgFofRDSPdSUhRSdlwJfifRlQBwGXitDItdGFu0/h0XDMCkig0RN1iT7DBxhA==", + "dependencies": { + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^3.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/@panva/asn1.js": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@panva/asn1.js/-/asn1.js-1.0.0.tgz", + "integrity": "sha512-UdkG3mLEqXgnlKsWanWcgb6dOjUzJ+XC5f+aWw30qrtjxeNUSfKX1cd5FBzOaXQumoe9nIqeZUvrRJS03HCCtw==", + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/@sindresorhus/is": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", + "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/@szmarczak/http-timer": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz", + "integrity": "sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==", + "dev": true, + "dependencies": { + "defer-to-connect": "^1.0.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@types/body-parser": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.0.tgz", + "integrity": "sha512-W98JrE0j2K78swW4ukqMleo8R7h/pFETjM2DQ90MF6XK2i4LO4W3gQ71Lt4w3bfm2EvVSyWHplECvB5sK22yFQ==", + "dependencies": { + "@types/connect": "*", + "@types/node": "*" + } + }, + "node_modules/@types/cacheable-request": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.2.tgz", + "integrity": "sha512-B3xVo+dlKM6nnKTcmm5ZtY/OL8bOAOd2Olee9M1zft65ox50OzjEHW91sDiU9j6cvW8Ejg1/Qkf4xd2kugApUA==", + "dependencies": { + "@types/http-cache-semantics": "*", + "@types/keyv": "*", + "@types/node": "*", + "@types/responselike": "*" + } + }, + "node_modules/@types/caseless": { + "version": "0.12.2", + "resolved": "https://registry.npmjs.org/@types/caseless/-/caseless-0.12.2.tgz", + "integrity": "sha512-6ckxMjBBD8URvjB6J3NcnuAn5Pkl7t3TizAg+xdlzzQGSPSmBcXf8KoIH0ua/i+tio+ZRUHEXp0HEmvaR4kt0w==" + }, + "node_modules/@types/connect": { + "version": "3.4.34", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.34.tgz", + "integrity": "sha512-ePPA/JuI+X0vb+gSWlPKOY0NdNAie/rPUqX2GUPpbZwiKTkSPhjXWuee47E4MtE54QVzGCQMQkAL6JhV2E1+cQ==", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/express": { + "version": "4.17.11", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.11.tgz", + "integrity": "sha512-no+R6rW60JEc59977wIxreQVsIEOAYwgCqldrA/vkpCnbD7MqTefO97lmoBe4WE0F156bC4uLSP1XHDOySnChg==", + "dependencies": { + "@types/body-parser": "*", + "@types/express-serve-static-core": "^4.17.18", + "@types/qs": "*", + "@types/serve-static": "*" + } + }, + "node_modules/@types/express-serve-static-core": { + "version": "4.17.19", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.19.tgz", + "integrity": "sha512-DJOSHzX7pCiSElWaGR8kCprwibCB/3yW6vcT8VG3P0SJjnv19gnWG/AZMfM60Xj/YJIp/YCaDHyvzsFVeniARA==", + "dependencies": { + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*" + } + }, + "node_modules/@types/http-cache-semantics": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.1.tgz", + "integrity": "sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ==" + }, + "node_modules/@types/js-yaml": { + "version": "3.12.7", + "resolved": "https://registry.npmjs.org/@types/js-yaml/-/js-yaml-3.12.7.tgz", + "integrity": "sha512-S6+8JAYTE1qdsc9HMVsfY7+SgSuUU/Tp6TYTmITW0PZxiyIMvol3Gy//y69Wkhs0ti4py5qgR3uZH6uz/DNzJQ==" + }, + "node_modules/@types/keyv": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.2.tgz", + "integrity": "sha512-/FvAK2p4jQOaJ6CGDHJTqZcUtbZe820qIeTg7o0Shg7drB4JHeL+V/dhSaly7NXx6u8eSee+r7coT+yuJEvDLg==", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/mime": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.2.tgz", + "integrity": "sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw==" + }, + "node_modules/@types/minipass": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@types/minipass/-/minipass-3.1.0.tgz", + "integrity": "sha512-b2yPKwCrB8x9SB65kcCistMoe3wrYnxxt5rJSZ1kprw0uOXvhuKi9kTQ746Y+Pbqoh+9C0N4zt0ztmTnG9yg7A==", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/node": { + "version": "15.0.2", + "resolved": "https://registry.npmjs.org/@types/node/-/node-15.0.2.tgz", + "integrity": "sha512-p68+a+KoxpoB47015IeYZYRrdqMUcpbK8re/zpFB8Ld46LHC1lPEbp3EXgkEhAYEcPvjJF6ZO+869SQ0aH1dcA==" + }, + "node_modules/@types/normalize-package-data": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.0.tgz", + "integrity": "sha512-f5j5b/Gf71L+dbqxIpQ4Z2WlmI/mPJ0fOkGGmFgtb6sAu97EPczzbS3/tJKxmcYDj55OX6ssqwDAWOHIYDRDGA==" + }, + "node_modules/@types/qs": { + "version": "6.9.6", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.6.tgz", + "integrity": "sha512-0/HnwIfW4ki2D8L8c9GVcG5I72s9jP5GSLVF0VIXDW00kmIpA6O33G7a8n59Tmh7Nz0WUC3rSb7PTY/sdW2JzA==" + }, + "node_modules/@types/range-parser": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.3.tgz", + "integrity": "sha512-ewFXqrQHlFsgc09MK5jP5iR7vumV/BYayNC6PgJO2LPe8vrnNFyjQjSppfEngITi0qvfKtzFvgKymGheFM9UOA==" + }, + "node_modules/@types/request": { + "version": "2.48.7", + "resolved": "https://registry.npmjs.org/@types/request/-/request-2.48.7.tgz", + "integrity": "sha512-GWP9AZW7foLd4YQxyFZDBepl0lPsWLMEXDZUjQ/c1gqVPDPECrRZyEzuhJdnPWioFCq3Tv0qoGpMD6U+ygd4ZA==", + "dependencies": { + "@types/caseless": "*", + "@types/node": "*", + "@types/tough-cookie": "*", + "form-data": "^2.5.0" + } + }, + "node_modules/@types/request/node_modules/form-data": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.5.1.tgz", + "integrity": "sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA==", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 0.12" + } + }, + "node_modules/@types/responselike": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.0.tgz", + "integrity": "sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA==", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/serve-static": { + "version": "1.13.9", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.13.9.tgz", + "integrity": "sha512-ZFqF6qa48XsPdjXV5Gsz0Zqmux2PerNd3a/ktL45mHpa19cuMi/cL8tcxdAx497yRh+QtYPuofjT9oWw9P7nkA==", + "dependencies": { + "@types/mime": "^1", + "@types/node": "*" + } + }, + "node_modules/@types/stream-buffers": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/stream-buffers/-/stream-buffers-3.0.4.tgz", + "integrity": "sha512-qU/K1tb2yUdhXkLIATzsIPwbtX6BpZk0l3dPW6xqWyhfzzM1ECaQ/8faEnu3CNraLiQ9LHyQQPBGp7N9Fbs25w==", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/tar": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/@types/tar/-/tar-4.0.5.tgz", + "integrity": "sha512-cgwPhNEabHaZcYIy5xeMtux2EmYBitfqEceBUi2t5+ETy4dW6kswt6WX4+HqLeiiKOo42EXbGiDmVJ2x+vi37Q==", + "dependencies": { + "@types/minipass": "*", + "@types/node": "*" + } + }, + "node_modules/@types/tough-cookie": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-4.0.1.tgz", + "integrity": "sha512-Y0K95ThC3esLEYD6ZuqNek29lNX2EM1qxV8y2FTLUB0ff5wWrk7az+mLrnNFUnaXcgKye22+sFBRXOgpPILZNg==" + }, + "node_modules/@types/underscore": { + "version": "1.11.3", + "resolved": "https://registry.npmjs.org/@types/underscore/-/underscore-1.11.3.tgz", + "integrity": "sha512-Fl1TX1dapfXyDqFg2ic9M+vlXRktcPJrc4PR7sRc7sdVrjavg/JHlbUXBt8qWWqhJrmSqg3RNAkAPRiOYw6Ahw==" + }, + "node_modules/@types/ws": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-6.0.4.tgz", + "integrity": "sha512-PpPrX7SZW9re6+Ha8ojZG4Se8AZXgf0GK6zmfqEuCsY49LFDNXO3SByp44X3dFEqtB73lkCDAdUazhAjVPiNwg==", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" + }, + "node_modules/accepts": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", + "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", + "dependencies": { + "mime-types": "~2.1.24", + "negotiator": "0.6.2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/aggregate-error": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "dependencies": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ansi-align": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.0.tgz", + "integrity": "sha512-ZpClVKqXN3RGBmKibdfWzqCY4lnjEuoNzU5T0oEFpfd/z5qJHVarukridD4juLO2FXMiwUQxr9WqQtaYa8XRYw==", + "dev": true, + "dependencies": { + "string-width": "^3.0.0" + } + }, + "node_modules/ansi-align/node_modules/string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "dependencies": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/any-promise": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", + "integrity": "sha1-q8av7tzqUugJzcA3au0845Y10X8=" + }, + "node_modules/anymatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "dev": true, + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/append-field": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/append-field/-/append-field-1.0.0.tgz", + "integrity": "sha1-HjRA6RXwsSA9I3SOeO3XubW0PlY=" + }, + "node_modules/aproba": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", + "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==" + }, + "node_modules/are-we-there-yet": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz", + "integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==", + "dependencies": { + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" + } + }, + "node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" + }, + "node_modules/asn1": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", + "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", + "dependencies": { + "safer-buffer": "~2.1.0" + } + }, + "node_modules/assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" + }, + "node_modules/aws-sign2": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", + "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", + "engines": { + "node": "*" + } + }, + "node_modules/aws4": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz", + "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==" + }, + "node_modules/axios": { + "version": "0.21.1", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.1.tgz", + "integrity": "sha512-dKQiRHxGD9PPRIUNIWvZhPTPpl1rf/OxTYKsqKUDjBwYylTvV7SjSHJb9ratfyzM6wCdLCOYLzs73qpg5c4iGA==", + "dependencies": { + "follow-redirects": "^1.10.0" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + }, + "node_modules/bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", + "dependencies": { + "tweetnacl": "^0.14.3" + } + }, + "node_modules/binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/block-stream": { + "version": "0.0.9", + "resolved": "https://registry.npmjs.org/block-stream/-/block-stream-0.0.9.tgz", + "integrity": "sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo=", + "optional": true, + "dependencies": { + "inherits": "~2.0.0" + }, + "engines": { + "node": "0.4 || >=0.5.8" + } + }, + "node_modules/body-parser": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", + "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==", + "dependencies": { + "bytes": "3.1.0", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "~1.1.2", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", + "on-finished": "~2.3.0", + "qs": "6.7.0", + "raw-body": "2.4.0", + "type-is": "~1.6.17" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/boxen": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/boxen/-/boxen-4.2.0.tgz", + "integrity": "sha512-eB4uT9RGzg2odpER62bBwSLvUeGC+WbRjjyyFhGsKnc8wp/m0+hQsMUvUe3H2V0D5vw0nBdO1hCJoZo5mKeuIQ==", + "dev": true, + "dependencies": { + "ansi-align": "^3.0.0", + "camelcase": "^5.3.1", + "chalk": "^3.0.0", + "cli-boxes": "^2.2.0", + "string-width": "^4.1.0", + "term-size": "^2.1.0", + "type-fest": "^0.8.1", + "widest-line": "^3.1.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/buffer-from": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", + "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==" + }, + "node_modules/busboy": { + "version": "0.2.14", + "resolved": "https://registry.npmjs.org/busboy/-/busboy-0.2.14.tgz", + "integrity": "sha1-bCpiLvz0fFe7vh4qnDetNseSVFM=", + "dependencies": { + "dicer": "0.2.5", + "readable-stream": "1.1.x" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/busboy/node_modules/isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" + }, + "node_modules/busboy/node_modules/readable-stream": { + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", + "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "node_modules/busboy/node_modules/string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" + }, + "node_modules/byline": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/byline/-/byline-5.0.0.tgz", + "integrity": "sha1-dBxSFkaOrcRXsDQQEYrXfejB3bE=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/bytes": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", + "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/cacheable-lookup": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz", + "integrity": "sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==", + "engines": { + "node": ">=10.6.0" + } + }, + "node_modules/cacheable-request": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz", + "integrity": "sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==", + "dev": true, + "dependencies": { + "clone-response": "^1.0.2", + "get-stream": "^5.1.0", + "http-cache-semantics": "^4.0.0", + "keyv": "^3.0.0", + "lowercase-keys": "^2.0.0", + "normalize-url": "^4.1.0", + "responselike": "^1.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cacheable-request/node_modules/get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "dev": true, + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cacheable-request/node_modules/lowercase-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", + "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dependencies": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" + }, + "node_modules/chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/chalk/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/chalk/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/chokidar": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.1.tgz", + "integrity": "sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw==", + "dev": true, + "dependencies": { + "anymatch": "~3.1.1", + "braces": "~3.0.2", + "glob-parent": "~5.1.0", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.5.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.1" + } + }, + "node_modules/chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==" + }, + "node_modules/ci-info": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", + "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", + "dev": true + }, + "node_modules/clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "engines": { + "node": ">=6" + } + }, + "node_modules/cli-boxes": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz", + "integrity": "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==", + "dev": true, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "node_modules/cliui/node_modules/ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "engines": { + "node": ">=8" + } + }, + "node_modules/cliui/node_modules/strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dependencies": { + "ansi-regex": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/clone-response": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz", + "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=", + "dependencies": { + "mimic-response": "^1.0.0" + } + }, + "node_modules/code-point-at": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", + "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/colors": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", + "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", + "engines": { + "node": ">=0.1.90" + } + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + }, + "node_modules/concat-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "engines": [ + "node >= 0.8" + ], + "dependencies": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + } + }, + "node_modules/concurrently": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/concurrently/-/concurrently-6.0.2.tgz", + "integrity": "sha512-u+1Q0dJG5BidgUTpz9CU16yoHTt/oApFDQ3mbvHwSDgMjU7aGqy0q8ZQyaZyaNxdwRKTD872Ux3Twc6//sWA+Q==", + "dependencies": { + "chalk": "^4.1.0", + "date-fns": "^2.16.1", + "lodash": "^4.17.21", + "read-pkg": "^5.2.0", + "rxjs": "^6.6.3", + "spawn-command": "^0.0.2-1", + "supports-color": "^8.1.0", + "tree-kill": "^1.2.2", + "yargs": "^16.2.0" + }, + "bin": { + "concurrently": "bin/concurrently.js" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/concurrently/node_modules/chalk": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", + "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/concurrently/node_modules/chalk/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/concurrently/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/concurrently/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/configstore": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/configstore/-/configstore-5.0.1.tgz", + "integrity": "sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA==", + "dev": true, + "dependencies": { + "dot-prop": "^5.2.0", + "graceful-fs": "^4.1.2", + "make-dir": "^3.0.0", + "unique-string": "^2.0.0", + "write-file-atomic": "^3.0.0", + "xdg-basedir": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/console-control-strings": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", + "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=" + }, + "node_modules/content-disposition": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", + "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==", + "dependencies": { + "safe-buffer": "5.1.2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/content-type": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", + "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz", + "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" + }, + "node_modules/core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" + }, + "node_modules/cron-parser": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/cron-parser/-/cron-parser-3.5.0.tgz", + "integrity": "sha512-wyVZtbRs6qDfFd8ap457w3XVntdvqcwBGxBoTvJQH9KGVKL/fB+h2k3C8AqiVxvUQKN1Ps/Ns46CNViOpVDhfQ==", + "dependencies": { + "is-nan": "^1.3.2", + "luxon": "^1.26.0" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/cross-spawn/node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/crypto-random-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", + "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", + "dependencies": { + "assert-plus": "^1.0.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/date-fns": { + "version": "2.21.2", + "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.21.2.tgz", + "integrity": "sha512-FMkG7pIPx64mGIpS2LOb3Wp3O606H/hatoiz7G0oiYWai1izdM4tF1dd7QABv2NogkIDI4wxsfLLFQSuVvDHgA==", + "engines": { + "node": ">=0.11" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/date-fns" + } + }, + "node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/decompress-response": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", + "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=", + "dev": true, + "dependencies": { + "mimic-response": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/defer-to-connect": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz", + "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==", + "dev": true + }, + "node_modules/define-properties": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", + "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "dependencies": { + "object-keys": "^1.0.12" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=" + }, + "node_modules/depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/destroy": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", + "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" + }, + "node_modules/detect-libc": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", + "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=", + "bin": { + "detect-libc": "bin/detect-libc.js" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/dicer": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/dicer/-/dicer-0.2.5.tgz", + "integrity": "sha1-WZbAhrszIYyBLAkL3cCc0S+stw8=", + "dependencies": { + "readable-stream": "1.1.x", + "streamsearch": "0.1.2" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/dicer/node_modules/isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" + }, + "node_modules/dicer/node_modules/readable-stream": { + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", + "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "node_modules/dicer/node_modules/string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" + }, + "node_modules/dot-prop": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", + "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", + "dev": true, + "dependencies": { + "is-obj": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/dotenv": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-9.0.0.tgz", + "integrity": "sha512-yy3x9XjojW8ROTBePD25AcMoHqGHsvHmtfw8QWlpEXyMMXXPj6brUA464AptUvHuTPRmNz6Sd3ZLNLeJl6dHJA==", + "engines": { + "node": ">=10" + } + }, + "node_modules/dottie": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/dottie/-/dottie-2.0.2.tgz", + "integrity": "sha512-fmrwR04lsniq/uSr8yikThDTrM7epXHBAAjH9TbeH3rEA8tdCO7mRzB9hdmdGyJCxF8KERo9CITcm3kGuoyMhg==" + }, + "node_modules/duplexer3": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", + "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=", + "dev": true + }, + "node_modules/ecc-jsbn": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", + "dependencies": { + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" + } + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" + }, + "node_modules/emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "dev": true + }, + "node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dependencies": { + "once": "^1.4.0" + } + }, + "node_modules/error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-goat": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/escape-goat/-/escape-goat-2.1.1.tgz", + "integrity": "sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" + }, + "node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/execa": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.0.0.tgz", + "integrity": "sha512-ov6w/2LCiuyO4RLYGdpFGjkcs0wMTgGE8PrkTHikeUy5iJekXyPIKUjifk5CsE0pt7sMCrMZ3YNqoCj6idQOnQ==", + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/execa/node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/express": { + "version": "4.17.1", + "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz", + "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==", + "dependencies": { + "accepts": "~1.3.7", + "array-flatten": "1.1.1", + "body-parser": "1.19.0", + "content-disposition": "0.5.3", + "content-type": "~1.0.4", + "cookie": "0.4.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "~1.1.2", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "~1.1.2", + "fresh": "0.5.2", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.5", + "qs": "6.7.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.1.2", + "send": "0.17.1", + "serve-static": "1.14.1", + "setprototypeof": "1.1.1", + "statuses": "~1.5.0", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" + }, + "node_modules/extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", + "engines": [ + "node >=0.6.0" + ] + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" + }, + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/finalhandler": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", + "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "statuses": "~1.5.0", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/follow-redirects": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.1.tgz", + "integrity": "sha512-HWqDgT7ZEkqRzBvc2s64vSZ/hfOceEol3ac/7tKwzuvEyWx3/4UegXh5oBOIotkGsObyk3xznnSRVADBgWSQVg==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", + "engines": { + "node": "*" + } + }, + "node_modules/form-data": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", + "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 0.12" + } + }, + "node_modules/forwarded": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", + "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fs-minipass": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.7.tgz", + "integrity": "sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA==", + "dependencies": { + "minipass": "^2.6.0" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" + }, + "node_modules/fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/fstream": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.12.tgz", + "integrity": "sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg==", + "optional": true, + "dependencies": { + "graceful-fs": "^4.1.2", + "inherits": "~2.0.0", + "mkdirp": ">=0.5 0", + "rimraf": "2" + }, + "engines": { + "node": ">=0.6" + } + }, + "node_modules/function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + }, + "node_modules/gauge": { + "version": "2.7.4", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", + "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", + "dependencies": { + "aproba": "^1.0.3", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.0", + "object-assign": "^4.1.0", + "signal-exit": "^3.0.0", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wide-align": "^1.1.0" + } + }, + "node_modules/gauge/node_modules/ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/gauge/node_modules/is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "dependencies": { + "number-is-nan": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/gauge/node_modules/string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "dependencies": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/gauge/node_modules/strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dependencies": { + "ansi-regex": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-intrinsic": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", + "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", + "dependencies": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "dev": true, + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", + "dependencies": { + "assert-plus": "^1.0.0" + } + }, + "node_modules/glob": { + "version": "7.1.7", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", + "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/global-dirs": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-2.1.0.tgz", + "integrity": "sha512-MG6kdOUh/xBnyo9cJFeIKkLEc1AyFq42QTU4XiX51i2NEdxLxLWXIjEjmqKeSuKR7pAZjTqUVoT2b2huxVLgYQ==", + "dev": true, + "dependencies": { + "ini": "1.3.7" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/got": { + "version": "9.6.0", + "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz", + "integrity": "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==", + "dev": true, + "dependencies": { + "@sindresorhus/is": "^0.14.0", + "@szmarczak/http-timer": "^1.1.2", + "cacheable-request": "^6.0.0", + "decompress-response": "^3.3.0", + "duplexer3": "^0.1.4", + "get-stream": "^4.1.0", + "lowercase-keys": "^1.0.1", + "mimic-response": "^1.0.1", + "p-cancelable": "^1.0.0", + "to-readable-stream": "^1.0.0", + "url-parse-lax": "^3.0.0" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.6", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz", + "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==", + "devOptional": true + }, + "node_modules/har-schema": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", + "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", + "engines": { + "node": ">=4" + } + }, + "node_modules/har-validator": { + "version": "5.1.5", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", + "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", + "deprecated": "this library is no longer supported", + "dependencies": { + "ajv": "^6.12.3", + "har-schema": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dependencies": { + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "engines": { + "node": ">=4" + } + }, + "node_modules/has-symbols": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", + "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-unicode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=" + }, + "node_modules/has-yarn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/has-yarn/-/has-yarn-2.1.0.tgz", + "integrity": "sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/hosted-git-info": { + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==" + }, + "node_modules/http-cache-semantics": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", + "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==" + }, + "node_modules/http-errors": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", + "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", + "dependencies": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.1", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/http-signature": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", + "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", + "dependencies": { + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" + }, + "engines": { + "node": ">=0.8", + "npm": ">=1.3.7" + } + }, + "node_modules/http2-wrapper": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-1.0.3.tgz", + "integrity": "sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==", + "dependencies": { + "quick-lru": "^5.1.1", + "resolve-alpn": "^1.0.0" + }, + "engines": { + "node": ">=10.19.0" + } + }, + "node_modules/human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "engines": { + "node": ">=10.17.0" + } + }, + "node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ignore-by-default": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz", + "integrity": "sha1-SMptcvbGo68Aqa1K5odr44ieKwk=", + "dev": true + }, + "node_modules/ignore-walk": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-3.0.4.tgz", + "integrity": "sha512-PY6Ii8o1jMRA1z4F2hRkH/xN59ox43DavKvD3oDpfurRlOJyAHpifIwpbdv1n4jt4ov0jSpw3kQ4GhJnpBL6WQ==", + "dependencies": { + "minimatch": "^3.0.4" + } + }, + "node_modules/import-lazy": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", + "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "dev": true, + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "engines": { + "node": ">=8" + } + }, + "node_modules/inflection": { + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/inflection/-/inflection-1.12.0.tgz", + "integrity": "sha1-ogCTVlbW9fa8TcdQLhrstwMihBY=", + "engines": [ + "node >= 0.4.0" + ] + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + }, + "node_modules/ini": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.7.tgz", + "integrity": "sha512-iKpRpXP+CrP2jyrxvg1kMUpXDyRUFDWurxbnVT1vQPx+Wz9uCYsMIqYuSBLV+PAaZG/d7kRLKRFc9oDMsH+mFQ==" + }, + "node_modules/interpret": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", + "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=" + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-ci": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", + "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", + "dev": true, + "dependencies": { + "ci-info": "^2.0.0" + }, + "bin": { + "is-ci": "bin.js" + } + }, + "node_modules/is-core-module": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.3.0.tgz", + "integrity": "sha512-xSphU2KG9867tsYdLD4RWQ1VqdFl4HTO9Thf3I/3dLEfr0dbPTWKsuCKrgqMljg4nPE+Gq0VCnzT3gr0CyBmsw==", + "dependencies": { + "has": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "engines": { + "node": ">=4" + } + }, + "node_modules/is-glob": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", + "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-installed-globally": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.3.2.tgz", + "integrity": "sha512-wZ8x1js7Ia0kecP/CHM/3ABkAmujX7WPvQk6uu3Fly/Mk44pySulQpnHG46OMjHGXApINnV4QhY3SWnECO2z5g==", + "dev": true, + "dependencies": { + "global-dirs": "^2.0.1", + "is-path-inside": "^3.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-nan": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/is-nan/-/is-nan-1.3.2.tgz", + "integrity": "sha512-E+zBKpQ2t6MEo1VsonYmluk9NxGrbzpeeLC2xIViuO2EjU2xsXsBPwTr3Ykv9l08UYEVEdWeRZNouaZqF6RN0w==", + "dependencies": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-npm": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-4.0.0.tgz", + "integrity": "sha512-96ECIfh9xtDDlPylNPXhzjsykHsMJZ18ASpaWzQyBr4YRTcVjUvzaHayDAES2oU/3KpljhHUjtSRNiDwi0F0ig==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-obj": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", + "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" + }, + "node_modules/is-yarn-global": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/is-yarn-global/-/is-yarn-global-0.3.0.tgz", + "integrity": "sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw==", + "dev": true + }, + "node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" + }, + "node_modules/isomorphic-ws": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/isomorphic-ws/-/isomorphic-ws-4.0.1.tgz", + "integrity": "sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w==", + "peerDependencies": { + "ws": "*" + } + }, + "node_modules/isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" + }, + "node_modules/jose": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/jose/-/jose-2.0.5.tgz", + "integrity": "sha512-BAiDNeDKTMgk4tvD0BbxJ8xHEHBZgpeRZ1zGPPsitSyMgjoMWiLGYAE7H7NpP5h0lPppQajQs871E8NHUrzVPA==", + "dependencies": { + "@panva/asn1.js": "^1.0.0" + }, + "engines": { + "node": ">=10.13.0 < 13 || >=13.7.0" + }, + "funding": { + "url": "https://github.com/sponsors/panva" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + }, + "node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=" + }, + "node_modules/json-buffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", + "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=", + "dev": true + }, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" + }, + "node_modules/json-schema": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", + "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=" + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" + }, + "node_modules/json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" + }, + "node_modules/jsonpath-plus": { + "version": "0.19.0", + "resolved": "https://registry.npmjs.org/jsonpath-plus/-/jsonpath-plus-0.19.0.tgz", + "integrity": "sha512-GSVwsrzW9LsA5lzsqe4CkuZ9wp+kxBb2GwNniaWzI2YFn5Ig42rSW8ZxVpWXaAfakXNrx5pgY5AbQq7kzX29kg==", + "engines": { + "node": ">=6.0" + } + }, + "node_modules/jsprim": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", + "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", + "engines": [ + "node >=0.6.0" + ], + "dependencies": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.2.3", + "verror": "1.10.0" + } + }, + "node_modules/keyv": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz", + "integrity": "sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==", + "dev": true, + "dependencies": { + "json-buffer": "3.0.0" + } + }, + "node_modules/latest-version": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-5.1.0.tgz", + "integrity": "sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA==", + "dev": true, + "dependencies": { + "package-json": "^6.3.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/lines-and-columns": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz", + "integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=" + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, + "node_modules/long-timeout": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/long-timeout/-/long-timeout-0.1.1.tgz", + "integrity": "sha1-lyHXiLR+C8taJMLivuGg2lXatRQ=" + }, + "node_modules/lowercase-keys": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", + "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/luxon": { + "version": "1.27.0", + "resolved": "https://registry.npmjs.org/luxon/-/luxon-1.27.0.tgz", + "integrity": "sha512-VKsFsPggTA0DvnxtJdiExAucKdAnwbCCNlMM5ENvHlxubqWd0xhZcdb4XgZ7QFNhaRhilXCFxHuoObP5BNA4PA==", + "engines": { + "node": "*" + } + }, + "node_modules/make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dev": true, + "dependencies": { + "semver": "^6.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/make-dir/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/make-error": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==" + }, + "node_modules/media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" + }, + "node_modules/methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/mime-db": { + "version": "1.47.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.47.0.tgz", + "integrity": "sha512-QBmA/G2y+IfeS4oktet3qRZ+P5kPhCKRXxXnQEudYqUaEioAU1/Lq2us3D/t1Jfo4hE9REQPrbB7K5sOczJVIw==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.30", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.30.tgz", + "integrity": "sha512-crmjA4bLtR8m9qLpHvgxSChT+XoSlZi8J4n/aIdn3z92e/U47Z0V/yl+Wh9W046GgFVAmoNR/fmdbZYcSSIUeg==", + "dependencies": { + "mime-db": "1.47.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "engines": { + "node": ">=6" + } + }, + "node_modules/mimic-response": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", + "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", + "engines": { + "node": ">=4" + } + }, + "node_modules/minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" + }, + "node_modules/minipass": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.9.0.tgz", + "integrity": "sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg==", + "dependencies": { + "safe-buffer": "^5.1.2", + "yallist": "^3.0.0" + } + }, + "node_modules/minipass/node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" + }, + "node_modules/minizlib": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.3.3.tgz", + "integrity": "sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q==", + "dependencies": { + "minipass": "^2.9.0" + } + }, + "node_modules/mkdirp": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "dependencies": { + "minimist": "^1.2.5" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/moment": { + "version": "2.29.1", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.1.tgz", + "integrity": "sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ==", + "engines": { + "node": "*" + } + }, + "node_modules/moment-timezone": { + "version": "0.5.33", + "resolved": "https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.5.33.tgz", + "integrity": "sha512-PTc2vcT8K9J5/9rDEPe5czSIKgLoGsH8UNpA4qZTVw0Vd/Uz19geE9abbIOQKaAQFcnQ3v5YEXrbSc5BpshH+w==", + "dependencies": { + "moment": ">= 2.9.0" + }, + "engines": { + "node": "*" + } + }, + "node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "node_modules/multer": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/multer/-/multer-1.4.2.tgz", + "integrity": "sha512-xY8pX7V+ybyUpbYMxtjM9KAiD9ixtg5/JkeKUTD6xilfDv0vzzOFcCp4Ljb1UU3tSOM3VTZtKo63OmzOrGi3Cg==", + "dependencies": { + "append-field": "^1.0.0", + "busboy": "^0.2.11", + "concat-stream": "^1.5.2", + "mkdirp": "^0.5.1", + "object-assign": "^4.1.1", + "on-finished": "^2.3.0", + "type-is": "^1.6.4", + "xtend": "^4.0.0" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/needle": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/needle/-/needle-2.6.0.tgz", + "integrity": "sha512-KKYdza4heMsEfSWD7VPUIz3zX2XDwOyX2d+geb4vrERZMT5RMU6ujjaD+I5Yr54uZxQ2w6XRTAhHBbSCyovZBg==", + "dependencies": { + "debug": "^3.2.6", + "iconv-lite": "^0.4.4", + "sax": "^1.2.4" + }, + "bin": { + "needle": "bin/needle" + }, + "engines": { + "node": ">= 4.4.x" + } + }, + "node_modules/needle/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/needle/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + }, + "node_modules/negotiator": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", + "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/node-addon-api": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.1.0.tgz", + "integrity": "sha512-flmrDNB06LIl5lywUz7YlNGZH/5p0M7W28k8hzd9Lshtdh1wshD2Y+U4h9LD6KObOy1f+fEVdgprPrEymjM5uw==" + }, + "node_modules/node-gyp": { + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-3.8.0.tgz", + "integrity": "sha512-3g8lYefrRRzvGeSowdJKAKyks8oUpLEd/DyPV4eMhVlhJ0aNaZqIrNUIPuEWWTAoPqyFkfGrM67MC69baqn6vA==", + "optional": true, + "dependencies": { + "fstream": "^1.0.0", + "glob": "^7.0.3", + "graceful-fs": "^4.1.2", + "mkdirp": "^0.5.0", + "nopt": "2 || 3", + "npmlog": "0 || 1 || 2 || 3 || 4", + "osenv": "0", + "request": "^2.87.0", + "rimraf": "2", + "semver": "~5.3.0", + "tar": "^2.0.0", + "which": "1" + }, + "bin": { + "node-gyp": "bin/node-gyp.js" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/node-gyp/node_modules/nopt": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", + "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=", + "optional": true, + "dependencies": { + "abbrev": "1" + }, + "bin": { + "nopt": "bin/nopt.js" + } + }, + "node_modules/node-gyp/node_modules/semver": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz", + "integrity": "sha1-myzl094C0XxgEq0yaqa00M9U+U8=", + "optional": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/node-pre-gyp": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/node-pre-gyp/-/node-pre-gyp-0.11.0.tgz", + "integrity": "sha512-TwWAOZb0j7e9eGaf9esRx3ZcLaE5tQ2lvYy1pb5IAaG1a2e2Kv5Lms1Y4hpj+ciXJRofIxxlt5haeQ/2ANeE0Q==", + "deprecated": "Please upgrade to @mapbox/node-pre-gyp: the non-scoped node-pre-gyp package is deprecated and only the @mapbox scoped package will recieve updates in the future", + "dependencies": { + "detect-libc": "^1.0.2", + "mkdirp": "^0.5.1", + "needle": "^2.2.1", + "nopt": "^4.0.1", + "npm-packlist": "^1.1.6", + "npmlog": "^4.0.2", + "rc": "^1.2.7", + "rimraf": "^2.6.1", + "semver": "^5.3.0", + "tar": "^4" + }, + "bin": { + "node-pre-gyp": "bin/node-pre-gyp" + } + }, + "node_modules/node-pre-gyp/node_modules/nopt": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.3.tgz", + "integrity": "sha512-CvaGwVMztSMJLOeXPrez7fyfObdZqNUK1cPAEzLHrTybIua9pMdmmPR5YwtfNftIOMv3DPUhFaxsZMNTQO20Kg==", + "dependencies": { + "abbrev": "1", + "osenv": "^0.1.4" + }, + "bin": { + "nopt": "bin/nopt.js" + } + }, + "node_modules/node-pre-gyp/node_modules/tar": { + "version": "4.4.13", + "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.13.tgz", + "integrity": "sha512-w2VwSrBoHa5BsSyH+KxEqeQBAllHhccyMFVHtGtdMpF4W7IRWfZjFiQceJPChOeTsSDVUpER2T8FA93pr0L+QA==", + "dependencies": { + "chownr": "^1.1.1", + "fs-minipass": "^1.2.5", + "minipass": "^2.8.6", + "minizlib": "^1.2.1", + "mkdirp": "^0.5.0", + "safe-buffer": "^5.1.2", + "yallist": "^3.0.3" + }, + "engines": { + "node": ">=4.5" + } + }, + "node_modules/node-pre-gyp/node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" + }, + "node_modules/node-schedule": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/node-schedule/-/node-schedule-2.0.0.tgz", + "integrity": "sha512-cHc9KEcfiuXxYDU+HjsBVo2FkWL1jRAUoczFoMIzRBpOA4p/NRHuuLs85AWOLgKsHtSPjN8csvwIxc2SqMv+CQ==", + "dependencies": { + "cron-parser": "^3.1.0", + "long-timeout": "0.1.1", + "sorted-array-functions": "^1.3.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/nodemon": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-2.0.7.tgz", + "integrity": "sha512-XHzK69Awgnec9UzHr1kc8EomQh4sjTQ8oRf8TsGrSmHDx9/UmiGG9E/mM3BuTfNeFwdNBvrqQq/RHL0xIeyFOA==", + "dev": true, + "hasInstallScript": true, + "dependencies": { + "chokidar": "^3.2.2", + "debug": "^3.2.6", + "ignore-by-default": "^1.0.1", + "minimatch": "^3.0.4", + "pstree.remy": "^1.1.7", + "semver": "^5.7.1", + "supports-color": "^5.5.0", + "touch": "^3.1.0", + "undefsafe": "^2.0.3", + "update-notifier": "^4.1.0" + }, + "bin": { + "nodemon": "bin/nodemon.js" + }, + "engines": { + "node": ">=8.10.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/nodemon" + } + }, + "node_modules/nodemon/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/nodemon/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + }, + "node_modules/nopt": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", + "integrity": "sha1-bd0hvSoxQXuScn3Vhfim83YI6+4=", + "dev": true, + "dependencies": { + "abbrev": "1" + }, + "bin": { + "nopt": "bin/nopt.js" + }, + "engines": { + "node": "*" + } + }, + "node_modules/normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "dependencies": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/normalize-url": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.0.tgz", + "integrity": "sha512-2s47yzUxdexf1OhyRi4Em83iQk0aPvwTddtFz4hnSSw9dCEsLEGf6SwIO8ss/19S9iBb5sJaOuTvTGDeZI00BQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/npm-bundled": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.1.2.tgz", + "integrity": "sha512-x5DHup0SuyQcmL3s7Rx/YQ8sbw/Hzg0rj48eN0dV7hf5cmQq5PXIeioroH3raV1QC1yh3uTYuMThvEQF3iKgGQ==", + "dependencies": { + "npm-normalize-package-bin": "^1.0.1" + } + }, + "node_modules/npm-normalize-package-bin": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz", + "integrity": "sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA==" + }, + "node_modules/npm-packlist": { + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-1.4.8.tgz", + "integrity": "sha512-5+AZgwru5IevF5ZdnFglB5wNlHG1AOOuw28WhUq8/8emhBmLv6jX5by4WJCh7lW0uSYZYS6DXqIsyZVIXRZU9A==", + "dependencies": { + "ignore-walk": "^3.0.1", + "npm-bundled": "^1.0.1", + "npm-normalize-package-bin": "^1.0.1" + } + }, + "node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/npmlog": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", + "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", + "dependencies": { + "are-we-there-yet": "~1.1.2", + "console-control-strings": "~1.1.0", + "gauge": "~2.7.3", + "set-blocking": "~2.0.0" + } + }, + "node_modules/number-is-nan": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/oauth-sign": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", + "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", + "engines": { + "node": "*" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-hash": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-2.2.0.tgz", + "integrity": "sha512-gScRMn0bS5fH+IuwyIFgnh9zBdo4DV+6GhygmWM9HyNJSgS0hScp1f5vjtm7oIIOiT9trXrShAkLFSc2IqKNgw==", + "engines": { + "node": ">= 6" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/oidc-token-hash": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/oidc-token-hash/-/oidc-token-hash-5.0.1.tgz", + "integrity": "sha512-EvoOtz6FIEBzE+9q253HsLCVRiK/0doEJ2HCvvqMQb3dHZrP3WlJKYtJ55CRTw4jmYomzH4wkPuCj/I3ZvpKxQ==", + "engines": { + "node": "^10.13.0 || >=12.0.0" + } + }, + "node_modules/on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/openid-client": { + "version": "4.7.4", + "resolved": "https://registry.npmjs.org/openid-client/-/openid-client-4.7.4.tgz", + "integrity": "sha512-n+RURXYuR0bBZo9i0pn+CXZSyg5JYQ1nbwEwPQvLE7EcJt/vMZ2iIMjLehl5DvCN53XUoPVZs9KAE5r6d9fxsw==", + "dependencies": { + "aggregate-error": "^3.1.0", + "got": "^11.8.0", + "jose": "^2.0.5", + "lru-cache": "^6.0.0", + "make-error": "^1.3.6", + "object-hash": "^2.0.1", + "oidc-token-hash": "^5.0.1" + }, + "engines": { + "node": "^10.19.0 || >=12.0.0 < 13 || >=13.7.0 < 14 || >= 14.2.0" + }, + "funding": { + "url": "https://github.com/sponsors/panva" + } + }, + "node_modules/openid-client/node_modules/@sindresorhus/is": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.0.1.tgz", + "integrity": "sha512-Qm9hBEBu18wt1PO2flE7LPb30BHMQt1eQgbV76YntdNk73XZGpn3izvGTYxbGgzXKgbCjiia0uxTd3aTNQrY/g==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/is?sponsor=1" + } + }, + "node_modules/openid-client/node_modules/@szmarczak/http-timer": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.6.tgz", + "integrity": "sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==", + "dependencies": { + "defer-to-connect": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/openid-client/node_modules/cacheable-request": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.2.tgz", + "integrity": "sha512-pouW8/FmiPQbuGpkXQ9BAPv/Mo5xDGANgSNXzTzJ8DrKGuXOssM4wIQRjfanNRh3Yu5cfYPvcorqbhg2KIJtew==", + "dependencies": { + "clone-response": "^1.0.2", + "get-stream": "^5.1.0", + "http-cache-semantics": "^4.0.0", + "keyv": "^4.0.0", + "lowercase-keys": "^2.0.0", + "normalize-url": "^6.0.1", + "responselike": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/openid-client/node_modules/decompress-response": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", + "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", + "dependencies": { + "mimic-response": "^3.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/openid-client/node_modules/defer-to-connect": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz", + "integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==", + "engines": { + "node": ">=10" + } + }, + "node_modules/openid-client/node_modules/get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/openid-client/node_modules/got": { + "version": "11.8.2", + "resolved": "https://registry.npmjs.org/got/-/got-11.8.2.tgz", + "integrity": "sha512-D0QywKgIe30ODs+fm8wMZiAcZjypcCodPNuMz5H9Mny7RJ+IjJ10BdmGW7OM7fHXP+O7r6ZwapQ/YQmMSvB0UQ==", + "dependencies": { + "@sindresorhus/is": "^4.0.0", + "@szmarczak/http-timer": "^4.0.5", + "@types/cacheable-request": "^6.0.1", + "@types/responselike": "^1.0.0", + "cacheable-lookup": "^5.0.3", + "cacheable-request": "^7.0.1", + "decompress-response": "^6.0.0", + "http2-wrapper": "^1.0.0-beta.5.2", + "lowercase-keys": "^2.0.0", + "p-cancelable": "^2.0.0", + "responselike": "^2.0.0" + }, + "engines": { + "node": ">=10.19.0" + }, + "funding": { + "url": "https://github.com/sindresorhus/got?sponsor=1" + } + }, + "node_modules/openid-client/node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==" + }, + "node_modules/openid-client/node_modules/keyv": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.0.3.tgz", + "integrity": "sha512-zdGa2TOpSZPq5mU6iowDARnMBZgtCqJ11dJROFi6tg6kTn4nuUdU09lFyLFSaHrWqpIJ+EBq4E8/Dc0Vx5vLdA==", + "dependencies": { + "json-buffer": "3.0.1" + } + }, + "node_modules/openid-client/node_modules/lowercase-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", + "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", + "engines": { + "node": ">=8" + } + }, + "node_modules/openid-client/node_modules/mimic-response": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", + "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/openid-client/node_modules/normalize-url": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", + "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/openid-client/node_modules/p-cancelable": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.1.1.tgz", + "integrity": "sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==", + "engines": { + "node": ">=8" + } + }, + "node_modules/openid-client/node_modules/responselike": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/responselike/-/responselike-2.0.0.tgz", + "integrity": "sha512-xH48u3FTB9VsZw7R+vvgaKeLKzT6jOogbQhEe/jewwnZgzPcnyWui2Av6JpoYZF/91uueC+lqhWqeURw5/qhCw==", + "dependencies": { + "lowercase-keys": "^2.0.0" + } + }, + "node_modules/os-homedir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", + "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/osenv": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz", + "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", + "dependencies": { + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.0" + } + }, + "node_modules/p-cancelable": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz", + "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/package-json": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/package-json/-/package-json-6.5.0.tgz", + "integrity": "sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ==", + "dev": true, + "dependencies": { + "got": "^9.6.0", + "registry-auth-token": "^4.0.0", + "registry-url": "^5.0.0", + "semver": "^6.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/package-json/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", + "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==" + }, + "node_modules/path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" + }, + "node_modules/performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" + }, + "node_modules/picomatch": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.3.tgz", + "integrity": "sha512-KpELjfwcCDUb9PeigTs2mBJzXUPzAuP2oPcA989He8Rte0+YUAjw1JVedDhuTKPkHjSYzMN3npC9luThGYEKdg==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/prepend-http": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", + "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" + }, + "node_modules/proxy-addr": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.6.tgz", + "integrity": "sha512-dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw==", + "dependencies": { + "forwarded": "~0.1.2", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/psl": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", + "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==" + }, + "node_modules/pstree.remy": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz", + "integrity": "sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==", + "dev": true + }, + "node_modules/pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "engines": { + "node": ">=6" + } + }, + "node_modules/pupa": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/pupa/-/pupa-2.1.1.tgz", + "integrity": "sha512-l1jNAspIBSFqbT+y+5FosojNpVpF94nlI+wDUpqP9enwOTfHx9f0gh5nB96vl+6yTpsJsypeNrwfzPrKuHB41A==", + "dev": true, + "dependencies": { + "escape-goat": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/qs": { + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", + "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/quick-lru": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", + "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/raw-body": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz", + "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==", + "dependencies": { + "bytes": "3.1.0", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "dependencies": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "bin": { + "rc": "cli.js" + } + }, + "node_modules/read-pkg": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", + "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", + "dependencies": { + "@types/normalize-package-data": "^2.4.0", + "normalize-package-data": "^2.5.0", + "parse-json": "^5.0.0", + "type-fest": "^0.6.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/read-pkg/node_modules/type-fest": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", + "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", + "engines": { + "node": ">=8" + } + }, + "node_modules/readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/readdirp": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.5.0.tgz", + "integrity": "sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ==", + "dev": true, + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/rechoir": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", + "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=", + "dependencies": { + "resolve": "^1.1.6" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/registry-auth-token": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-4.2.1.tgz", + "integrity": "sha512-6gkSb4U6aWJB4SF2ZvLb76yCBjcvufXBqvvEx1HbmKPkutswjW1xNVRY0+daljIYRbogN7O0etYSlbiaEQyMyw==", + "dev": true, + "dependencies": { + "rc": "^1.2.8" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/registry-url": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-5.1.0.tgz", + "integrity": "sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw==", + "dev": true, + "dependencies": { + "rc": "^1.2.8" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/request": { + "version": "2.88.2", + "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", + "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", + "deprecated": "request has been deprecated, see https://github.com/request/request/issues/3142", + "dependencies": { + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "form-data": "~2.3.2", + "har-validator": "~5.1.3", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "oauth-sign": "~0.9.0", + "performance-now": "^2.1.0", + "qs": "~6.5.2", + "safe-buffer": "^5.1.2", + "tough-cookie": "~2.5.0", + "tunnel-agent": "^0.6.0", + "uuid": "^3.3.2" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/request/node_modules/qs": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", + "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/request/node_modules/uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", + "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", + "bin": { + "uuid": "bin/uuid" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resolve": { + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", + "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", + "dependencies": { + "is-core-module": "^2.2.0", + "path-parse": "^1.0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-alpn": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.0.tgz", + "integrity": "sha512-e4FNQs+9cINYMO5NMFc6kOUCdohjqFPSgMuwuZAOUWqrfWsen+Yjy5qZFkV5K7VO7tFSLKcUL97olkED7sCBHA==" + }, + "node_modules/responselike": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", + "integrity": "sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=", + "dev": true, + "dependencies": { + "lowercase-keys": "^1.0.0" + } + }, + "node_modules/retry-as-promised": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/retry-as-promised/-/retry-as-promised-3.2.0.tgz", + "integrity": "sha512-CybGs60B7oYU/qSQ6kuaFmRd9sTZ6oXSc0toqePvV74Ac6/IFZSI1ReFQmtCN+uvW1Mtqdwpvt/LGOiCBAY2Mg==", + "dependencies": { + "any-promise": "^1.3.0" + } + }, + "node_modules/rfc4648": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/rfc4648/-/rfc4648-1.5.0.tgz", + "integrity": "sha512-FA6W9lDNeX8WbMY31io1xWg+TpZCbeDKsBo0ocwACZiWnh9TUAyk9CCuBQuOPmYnwwdEQZmraQ2ZK7yJsxErBg==" + }, + "node_modules/rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } + }, + "node_modules/rxjs": { + "version": "6.6.7", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", + "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", + "dependencies": { + "tslib": "^1.9.0" + }, + "engines": { + "npm": ">=2.0.0" + } + }, + "node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "node_modules/sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" + }, + "node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/semver-diff": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-3.1.1.tgz", + "integrity": "sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg==", + "dev": true, + "dependencies": { + "semver": "^6.3.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/semver-diff/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/send": { + "version": "0.17.1", + "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", + "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==", + "dependencies": { + "debug": "2.6.9", + "depd": "~1.1.2", + "destroy": "~1.0.4", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "~1.7.2", + "mime": "1.6.0", + "ms": "2.1.1", + "on-finished": "~2.3.0", + "range-parser": "~1.2.1", + "statuses": "~1.5.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/send/node_modules/ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" + }, + "node_modules/sequelize": { + "version": "6.6.2", + "resolved": "https://registry.npmjs.org/sequelize/-/sequelize-6.6.2.tgz", + "integrity": "sha512-H/zrzmTK+tis9PJaSigkuXI57nKBvNCtPQol0yxCvau1iWLzSOuq8t3tMOVeQ+Ep8QH2HoD9/+FCCIAqzUr/BQ==", + "dependencies": { + "debug": "^4.1.1", + "dottie": "^2.0.0", + "inflection": "1.12.0", + "lodash": "^4.17.20", + "moment": "^2.26.0", + "moment-timezone": "^0.5.31", + "retry-as-promised": "^3.2.0", + "semver": "^7.3.2", + "sequelize-pool": "^6.0.0", + "toposort-class": "^1.0.1", + "uuid": "^8.1.0", + "validator": "^10.11.0", + "wkx": "^0.5.0" + }, + "engines": { + "node": ">=10.0.0" + }, + "peerDependenciesMeta": { + "mariadb": { + "optional": true + }, + "mysql2": { + "optional": true + }, + "pg": { + "optional": true + }, + "pg-hstore": { + "optional": true + }, + "sqlite3": { + "optional": true + }, + "tedious": { + "optional": true + } + } + }, + "node_modules/sequelize-pool": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/sequelize-pool/-/sequelize-pool-6.1.0.tgz", + "integrity": "sha512-4YwEw3ZgK/tY/so+GfnSgXkdwIJJ1I32uZJztIEgZeAO6HMgj64OzySbWLgxj+tXhZCJnzRfkY9gINw8Ft8ZMg==", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/sequelize/node_modules/debug": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/sequelize/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/sequelize/node_modules/semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/serve-static": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz", + "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==", + "dependencies": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.17.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" + }, + "node_modules/setprototypeof": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", + "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==" + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "engines": { + "node": ">=8" + } + }, + "node_modules/shelljs": { + "version": "0.8.4", + "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.4.tgz", + "integrity": "sha512-7gk3UZ9kOfPLIAbslLzyWeGiEqx9e3rxwZM0KE6EL8GlGwjym9Mrlx5/p33bWTu9YG6vcS4MBxYZDHYr5lr8BQ==", + "dependencies": { + "glob": "^7.0.0", + "interpret": "^1.0.0", + "rechoir": "^0.6.2" + }, + "bin": { + "shjs": "bin/shjs" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/signal-exit": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", + "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==" + }, + "node_modules/sorted-array-functions": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/sorted-array-functions/-/sorted-array-functions-1.3.0.tgz", + "integrity": "sha512-2sqgzeFlid6N4Z2fUQ1cvFmTOLRi/sEDzSQ0OKYchqgoPmQBVyM3959qYx3fpS6Esef80KjmpgPeEr028dP3OA==" + }, + "node_modules/spawn-command": { + "version": "0.0.2-1", + "resolved": "https://registry.npmjs.org/spawn-command/-/spawn-command-0.0.2-1.tgz", + "integrity": "sha1-YvXpRmmBwbeW3Fkpk34RycaSG9A=" + }, + "node_modules/spdx-correct": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", + "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", + "dependencies": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-exceptions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", + "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==" + }, + "node_modules/spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "dependencies": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-license-ids": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.7.tgz", + "integrity": "sha512-U+MTEOO0AiDzxwFvoa4JVnMV6mZlJKk2sBLt90s7G0Gd0Mlknc7kxEn3nuDPNZRta7O2uy8oLcZLVT+4sqNZHQ==" + }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" + }, + "node_modules/sqlite3": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/sqlite3/-/sqlite3-5.0.2.tgz", + "integrity": "sha512-1SdTNo+BVU211Xj1csWa8lV6KM0CtucDwRyA0VHl91wEH1Mgh7RxUpI4rVvG7OhHrzCSGaVyW5g8vKvlrk9DJA==", + "hasInstallScript": true, + "dependencies": { + "node-addon-api": "^3.0.0", + "node-pre-gyp": "^0.11.0" + }, + "optionalDependencies": { + "node-gyp": "3.x" + }, + "peerDependencies": { + "node-gyp": "3.x" + }, + "peerDependenciesMeta": { + "node-gyp": { + "optional": true + } + } + }, + "node_modules/sshpk": { + "version": "1.16.1", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", + "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", + "dependencies": { + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" + }, + "bin": { + "sshpk-conv": "bin/sshpk-conv", + "sshpk-sign": "bin/sshpk-sign", + "sshpk-verify": "bin/sshpk-verify" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/stream-buffers": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/stream-buffers/-/stream-buffers-3.0.2.tgz", + "integrity": "sha512-DQi1h8VEBA/lURbSwFtEHnSTb9s2/pwLEaFuNhXwy1Dx3Sa0lOuYT2yNUr4/j2fs8oCAMANtrZ5OrPZtyVs3MQ==", + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/streamsearch": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-0.1.2.tgz", + "integrity": "sha1-gIudDlb8Jz2Am6VzOOkpkZoanxo=", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/string-width": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", + "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width/node_modules/ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "node_modules/string-width/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width/node_modules/strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dependencies": { + "ansi-regex": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "dependencies": { + "ansi-regex": "^4.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "engines": { + "node": ">=6" + } + }, + "node_modules/strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/tar": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/tar/-/tar-2.2.2.tgz", + "integrity": "sha512-FCEhQ/4rE1zYv9rYXJw/msRqsnmlje5jHP6huWeBZ704jUTy02c5AZyWujpMR1ax6mVw9NyJMfuK2CMDWVIfgA==", + "optional": true, + "dependencies": { + "block-stream": "*", + "fstream": "^1.0.12", + "inherits": "2" + } + }, + "node_modules/term-size": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/term-size/-/term-size-2.2.1.tgz", + "integrity": "sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/tmp": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", + "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", + "dependencies": { + "rimraf": "^3.0.0" + }, + "engines": { + "node": ">=8.17.0" + } + }, + "node_modules/tmp-promise": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/tmp-promise/-/tmp-promise-3.0.2.tgz", + "integrity": "sha512-OyCLAKU1HzBjL6Ev3gxUeraJNlbNingmi8IrHHEsYH8LTmEuhvYfqvhn2F/je+mjf4N58UmZ96OMEy1JanSCpA==", + "dependencies": { + "tmp": "^0.2.0" + } + }, + "node_modules/tmp/node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/to-readable-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz", + "integrity": "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/toidentifier": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", + "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/toposort-class": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toposort-class/-/toposort-class-1.0.1.tgz", + "integrity": "sha1-f/0feMi+KMO6Rc1OGj9e4ZO9mYg=" + }, + "node_modules/touch": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz", + "integrity": "sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==", + "dev": true, + "dependencies": { + "nopt": "~1.0.10" + }, + "bin": { + "nodetouch": "bin/nodetouch.js" + } + }, + "node_modules/tough-cookie": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", + "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", + "dependencies": { + "psl": "^1.1.28", + "punycode": "^2.1.1" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/tree-kill": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", + "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", + "bin": { + "tree-kill": "cli.js" + } + }, + "node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", + "dependencies": { + "safe-buffer": "^5.0.1" + }, + "engines": { + "node": "*" + } + }, + "node_modules/tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=" + }, + "node_modules/type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=" + }, + "node_modules/typedarray-to-buffer": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", + "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", + "dev": true, + "dependencies": { + "is-typedarray": "^1.0.0" + } + }, + "node_modules/undefsafe": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.3.tgz", + "integrity": "sha512-nrXZwwXrD/T/JXeygJqdCO6NZZ1L66HrxM/Z7mIq2oPanoN0F1nLx3lwJMu6AwJY69hdixaFQOuoYsMjE5/C2A==", + "dev": true, + "dependencies": { + "debug": "^2.2.0" + } + }, + "node_modules/underscore": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.1.tgz", + "integrity": "sha512-hzSoAVtJF+3ZtiFX0VgfFPHEDRm7Y/QPjGyNo4TVdnDTdft3tr8hEkD25a1jC+TjTuE7tkHGKkhwCgs9dgBB2g==" + }, + "node_modules/unique-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", + "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", + "dev": true, + "dependencies": { + "crypto-random-string": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/update-notifier": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-4.1.3.tgz", + "integrity": "sha512-Yld6Z0RyCYGB6ckIjffGOSOmHXj1gMeE7aROz4MG+XMkmixBX4jUngrGXNYz7wPKBmtoD4MnBa2Anu7RSKht/A==", + "dev": true, + "dependencies": { + "boxen": "^4.2.0", + "chalk": "^3.0.0", + "configstore": "^5.0.1", + "has-yarn": "^2.1.0", + "import-lazy": "^2.1.0", + "is-ci": "^2.0.0", + "is-installed-globally": "^0.3.1", + "is-npm": "^4.0.0", + "is-yarn-global": "^0.3.0", + "latest-version": "^5.0.0", + "pupa": "^2.0.1", + "semver-diff": "^3.1.1", + "xdg-basedir": "^4.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/yeoman/update-notifier?sponsor=1" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/url-parse-lax": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", + "integrity": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=", + "dev": true, + "dependencies": { + "prepend-http": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" + }, + "node_modules/utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dependencies": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "node_modules/validator": { + "version": "10.11.0", + "resolved": "https://registry.npmjs.org/validator/-/validator-10.11.0.tgz", + "integrity": "sha512-X/p3UZerAIsbBfN/IwahhYaBbY68EN/UQBWHtsbXGT5bfrH/p4NQzUCG1kF/rtKaNpnJ7jAu6NGTdSNtyNIXMw==", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/verror": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", + "engines": [ + "node >=0.6.0" + ], + "dependencies": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + } + }, + "node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "optional": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/wide-align": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", + "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", + "dependencies": { + "string-width": "^1.0.2 || 2" + } + }, + "node_modules/wide-align/node_modules/ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "engines": { + "node": ">=4" + } + }, + "node_modules/wide-align/node_modules/string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dependencies": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/wide-align/node_modules/strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dependencies": { + "ansi-regex": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/widest-line": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", + "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==", + "dev": true, + "dependencies": { + "string-width": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wkx": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/wkx/-/wkx-0.5.0.tgz", + "integrity": "sha512-Xng/d4Ichh8uN4l0FToV/258EjMGU9MGcA0HV2d9B/ZpZB3lqQm7nkOdZdm5GhKtLLhAE7PiVQwN4eN+2YJJUg==", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi/node_modules/strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dependencies": { + "ansi-regex": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + }, + "node_modules/write-file-atomic": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", + "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", + "dev": true, + "dependencies": { + "imurmurhash": "^0.1.4", + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" + } + }, + "node_modules/ws": { + "version": "7.4.6", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.6.tgz", + "integrity": "sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==", + "engines": { + "node": ">=8.3.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/xdg-basedir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-4.0.0.tgz", + "integrity": "sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "engines": { + "node": ">=0.4" + } + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "engines": { + "node": ">=10" + } + }, + "node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + }, + "node_modules/yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dependencies": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs-parser": { + "version": "20.2.7", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.7.tgz", + "integrity": "sha512-FiNkvbeHzB/syOjIUxFDCnhSfzAL8R5vs40MgLFBorXACCOAEaWu0gRZl14vG8MR9AOJIZbmkjhusqBYZ3HTHw==", + "engines": { + "node": ">=10" + } + } + }, "dependencies": { "@babel/code-frame": { "version": "7.12.13", @@ -60,6 +4569,95 @@ } } }, + "@kubernetes/client-node": { + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/@kubernetes/client-node/-/client-node-0.15.0.tgz", + "integrity": "sha512-AnEcsWWadl5IWOzzvO/gWpTnJb1d1CzA/rbV/qK1c0fD1SOxTDPj6jFllyQ9icGDfCgNw3TafZftmuepm6z9JA==", + "requires": { + "@types/js-yaml": "^3.12.1", + "@types/node": "^10.12.0", + "@types/request": "^2.47.1", + "@types/stream-buffers": "^3.0.3", + "@types/tar": "^4.0.3", + "@types/underscore": "^1.8.9", + "@types/ws": "^6.0.1", + "byline": "^5.0.0", + "execa": "5.0.0", + "isomorphic-ws": "^4.0.1", + "js-yaml": "^3.13.1", + "jsonpath-plus": "^0.19.0", + "openid-client": "^4.1.1", + "request": "^2.88.0", + "rfc4648": "^1.3.0", + "shelljs": "^0.8.4", + "stream-buffers": "^3.0.2", + "tar": "^6.0.2", + "tmp-promise": "^3.0.2", + "tslib": "^1.9.3", + "underscore": "^1.9.1", + "ws": "^7.3.1" + }, + "dependencies": { + "@types/node": { + "version": "10.17.60", + "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.60.tgz", + "integrity": "sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw==" + }, + "chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==" + }, + "fs-minipass": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "requires": { + "minipass": "^3.0.0" + } + }, + "minipass": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.3.tgz", + "integrity": "sha512-Mgd2GdMVzY+x3IJ+oHnVM+KG3lA5c8tnabyJKmHSaG2kAGpudxuOf8ToDkhumF7UzME7DecbQE9uOZhNm7PuJg==", + "requires": { + "yallist": "^4.0.0" + } + }, + "minizlib": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", + "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", + "requires": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" + } + }, + "mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==" + }, + "tar": { + "version": "6.1.7", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.7.tgz", + "integrity": "sha512-PBoRkOJU0X3lejJ8GaRCsobjXTgFofRDSPdSUhRSdlwJfifRlQBwGXitDItdGFu0/h0XDMCkig0RN1iT7DBxhA==", + "requires": { + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^3.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" + } + } + } + }, + "@panva/asn1.js": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@panva/asn1.js/-/asn1.js-1.0.0.tgz", + "integrity": "sha512-UdkG3mLEqXgnlKsWanWcgb6dOjUzJ+XC5f+aWw30qrtjxeNUSfKX1cd5FBzOaXQumoe9nIqeZUvrRJS03HCCtw==" + }, "@sindresorhus/is": { "version": "0.14.0", "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", @@ -84,6 +4682,22 @@ "@types/node": "*" } }, + "@types/cacheable-request": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.2.tgz", + "integrity": "sha512-B3xVo+dlKM6nnKTcmm5ZtY/OL8bOAOd2Olee9M1zft65ox50OzjEHW91sDiU9j6cvW8Ejg1/Qkf4xd2kugApUA==", + "requires": { + "@types/http-cache-semantics": "*", + "@types/keyv": "*", + "@types/node": "*", + "@types/responselike": "*" + } + }, + "@types/caseless": { + "version": "0.12.2", + "resolved": "https://registry.npmjs.org/@types/caseless/-/caseless-0.12.2.tgz", + "integrity": "sha512-6ckxMjBBD8URvjB6J3NcnuAn5Pkl7t3TizAg+xdlzzQGSPSmBcXf8KoIH0ua/i+tio+ZRUHEXp0HEmvaR4kt0w==" + }, "@types/connect": { "version": "3.4.34", "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.34.tgz", @@ -113,11 +4727,37 @@ "@types/range-parser": "*" } }, + "@types/http-cache-semantics": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.1.tgz", + "integrity": "sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ==" + }, + "@types/js-yaml": { + "version": "3.12.7", + "resolved": "https://registry.npmjs.org/@types/js-yaml/-/js-yaml-3.12.7.tgz", + "integrity": "sha512-S6+8JAYTE1qdsc9HMVsfY7+SgSuUU/Tp6TYTmITW0PZxiyIMvol3Gy//y69Wkhs0ti4py5qgR3uZH6uz/DNzJQ==" + }, + "@types/keyv": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.2.tgz", + "integrity": "sha512-/FvAK2p4jQOaJ6CGDHJTqZcUtbZe820qIeTg7o0Shg7drB4JHeL+V/dhSaly7NXx6u8eSee+r7coT+yuJEvDLg==", + "requires": { + "@types/node": "*" + } + }, "@types/mime": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.2.tgz", "integrity": "sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw==" }, + "@types/minipass": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@types/minipass/-/minipass-3.1.0.tgz", + "integrity": "sha512-b2yPKwCrB8x9SB65kcCistMoe3wrYnxxt5rJSZ1kprw0uOXvhuKi9kTQ746Y+Pbqoh+9C0N4zt0ztmTnG9yg7A==", + "requires": { + "@types/node": "*" + } + }, "@types/node": { "version": "15.0.2", "resolved": "https://registry.npmjs.org/@types/node/-/node-15.0.2.tgz", @@ -138,6 +4778,37 @@ "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.3.tgz", "integrity": "sha512-ewFXqrQHlFsgc09MK5jP5iR7vumV/BYayNC6PgJO2LPe8vrnNFyjQjSppfEngITi0qvfKtzFvgKymGheFM9UOA==" }, + "@types/request": { + "version": "2.48.7", + "resolved": "https://registry.npmjs.org/@types/request/-/request-2.48.7.tgz", + "integrity": "sha512-GWP9AZW7foLd4YQxyFZDBepl0lPsWLMEXDZUjQ/c1gqVPDPECrRZyEzuhJdnPWioFCq3Tv0qoGpMD6U+ygd4ZA==", + "requires": { + "@types/caseless": "*", + "@types/node": "*", + "@types/tough-cookie": "*", + "form-data": "^2.5.0" + }, + "dependencies": { + "form-data": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.5.1.tgz", + "integrity": "sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA==", + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + } + } + } + }, + "@types/responselike": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.0.tgz", + "integrity": "sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA==", + "requires": { + "@types/node": "*" + } + }, "@types/serve-static": { "version": "1.13.9", "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.13.9.tgz", @@ -147,6 +4818,41 @@ "@types/node": "*" } }, + "@types/stream-buffers": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/stream-buffers/-/stream-buffers-3.0.4.tgz", + "integrity": "sha512-qU/K1tb2yUdhXkLIATzsIPwbtX6BpZk0l3dPW6xqWyhfzzM1ECaQ/8faEnu3CNraLiQ9LHyQQPBGp7N9Fbs25w==", + "requires": { + "@types/node": "*" + } + }, + "@types/tar": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/@types/tar/-/tar-4.0.5.tgz", + "integrity": "sha512-cgwPhNEabHaZcYIy5xeMtux2EmYBitfqEceBUi2t5+ETy4dW6kswt6WX4+HqLeiiKOo42EXbGiDmVJ2x+vi37Q==", + "requires": { + "@types/minipass": "*", + "@types/node": "*" + } + }, + "@types/tough-cookie": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-4.0.1.tgz", + "integrity": "sha512-Y0K95ThC3esLEYD6ZuqNek29lNX2EM1qxV8y2FTLUB0ff5wWrk7az+mLrnNFUnaXcgKye22+sFBRXOgpPILZNg==" + }, + "@types/underscore": { + "version": "1.11.3", + "resolved": "https://registry.npmjs.org/@types/underscore/-/underscore-1.11.3.tgz", + "integrity": "sha512-Fl1TX1dapfXyDqFg2ic9M+vlXRktcPJrc4PR7sRc7sdVrjavg/JHlbUXBt8qWWqhJrmSqg3RNAkAPRiOYw6Ahw==" + }, + "@types/ws": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-6.0.4.tgz", + "integrity": "sha512-PpPrX7SZW9re6+Ha8ojZG4Se8AZXgf0GK6zmfqEuCsY49LFDNXO3SByp44X3dFEqtB73lkCDAdUazhAjVPiNwg==", + "requires": { + "@types/node": "*" + } + }, "abbrev": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", @@ -161,11 +4867,19 @@ "negotiator": "0.6.2" } }, + "aggregate-error": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "requires": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + } + }, "ajv": { "version": "6.12.6", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "optional": true, "requires": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -243,6 +4957,14 @@ "readable-stream": "^2.0.6" } }, + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "requires": { + "sprintf-js": "~1.0.2" + } + }, "array-flatten": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", @@ -252,7 +4974,6 @@ "version": "0.2.4", "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", - "optional": true, "requires": { "safer-buffer": "~2.1.0" } @@ -260,26 +4981,22 @@ "assert-plus": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", - "optional": true + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" }, "asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", - "optional": true + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" }, "aws-sign2": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", - "optional": true + "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=" }, "aws4": { "version": "1.11.0", "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz", - "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==", - "optional": true + "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==" }, "axios": { "version": "0.21.1", @@ -298,7 +5015,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", - "optional": true, "requires": { "tweetnacl": "^0.14.3" } @@ -406,11 +5122,21 @@ } } }, + "byline": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/byline/-/byline-5.0.0.tgz", + "integrity": "sha1-dBxSFkaOrcRXsDQQEYrXfejB3bE=" + }, "bytes": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==" }, + "cacheable-lookup": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz", + "integrity": "sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==" + }, "cacheable-request": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz", @@ -461,8 +5187,7 @@ "caseless": { "version": "0.12.0", "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", - "optional": true + "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" }, "chalk": { "version": "3.0.0", @@ -518,6 +5243,11 @@ "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", "dev": true }, + "clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==" + }, "cli-boxes": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz", @@ -553,7 +5283,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz", "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=", - "dev": true, "requires": { "mimic-response": "^1.0.0" } @@ -585,7 +5314,6 @@ "version": "1.0.8", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "optional": true, "requires": { "delayed-stream": "~1.0.0" } @@ -712,6 +5440,26 @@ "luxon": "^1.26.0" } }, + "cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "dependencies": { + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "requires": { + "isexe": "^2.0.0" + } + } + } + }, "crypto-random-string": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", @@ -722,7 +5470,6 @@ "version": "1.14.1", "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", - "optional": true, "requires": { "assert-plus": "^1.0.0" } @@ -771,8 +5518,7 @@ "delayed-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", - "optional": true + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" }, "delegates": { "version": "1.0.0", @@ -855,7 +5601,6 @@ "version": "0.1.2", "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", - "optional": true, "requires": { "jsbn": "~0.1.0", "safer-buffer": "^2.1.0" @@ -881,7 +5626,6 @@ "version": "1.4.4", "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "dev": true, "requires": { "once": "^1.4.0" } @@ -915,11 +5659,39 @@ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" }, + "esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" + }, "etag": { "version": "1.8.1", "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=" }, + "execa": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.0.0.tgz", + "integrity": "sha512-ov6w/2LCiuyO4RLYGdpFGjkcs0wMTgGE8PrkTHikeUy5iJekXyPIKUjifk5CsE0pt7sMCrMZ3YNqoCj6idQOnQ==", + "requires": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + }, + "dependencies": { + "get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==" + } + } + }, "express": { "version": "4.17.1", "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz", @@ -960,26 +5732,22 @@ "extend": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", - "optional": true + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" }, "extsprintf": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", - "optional": true + "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=" }, "fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "optional": true + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" }, "fast-json-stable-stringify": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "optional": true + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" }, "fill-range": { "version": "7.0.1", @@ -1012,14 +5780,12 @@ "forever-agent": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", - "optional": true + "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=" }, "form-data": { "version": "2.3.3", "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", - "optional": true, "requires": { "asynckit": "^0.4.0", "combined-stream": "^1.0.6", @@ -1149,7 +5915,6 @@ "version": "0.1.7", "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", - "optional": true, "requires": { "assert-plus": "^1.0.0" } @@ -1207,19 +5972,18 @@ "graceful-fs": { "version": "4.2.6", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz", - "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==" + "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==", + "devOptional": true }, "har-schema": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", - "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", - "optional": true + "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=" }, "har-validator": { "version": "5.1.5", "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", - "optional": true, "requires": { "ajv": "^6.12.3", "har-schema": "^2.0.0" @@ -1262,8 +6026,7 @@ "http-cache-semantics": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", - "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==", - "dev": true + "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==" }, "http-errors": { "version": "1.7.2", @@ -1281,13 +6044,26 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", - "optional": true, "requires": { "assert-plus": "^1.0.0", "jsprim": "^1.2.2", "sshpk": "^1.7.0" } }, + "http2-wrapper": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-1.0.3.tgz", + "integrity": "sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==", + "requires": { + "quick-lru": "^5.1.1", + "resolve-alpn": "^1.0.0" + } + }, + "human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==" + }, "iconv-lite": { "version": "0.4.24", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", @@ -1322,6 +6098,11 @@ "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", "dev": true }, + "indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==" + }, "inflection": { "version": "1.12.0", "resolved": "https://registry.npmjs.org/inflection/-/inflection-1.12.0.tgz", @@ -1346,6 +6127,11 @@ "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.7.tgz", "integrity": "sha512-iKpRpXP+CrP2jyrxvg1kMUpXDyRUFDWurxbnVT1vQPx+Wz9uCYsMIqYuSBLV+PAaZG/d7kRLKRFc9oDMsH+mFQ==" }, + "interpret": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", + "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==" + }, "ipaddr.js": { "version": "1.9.1", "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", @@ -1445,6 +6231,11 @@ "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", "dev": true }, + "is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==" + }, "is-typedarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", @@ -1464,25 +6255,45 @@ "isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", - "optional": true + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" + }, + "isomorphic-ws": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/isomorphic-ws/-/isomorphic-ws-4.0.1.tgz", + "integrity": "sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w==", + "requires": {} }, "isstream": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", - "optional": true + "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" + }, + "jose": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/jose/-/jose-2.0.5.tgz", + "integrity": "sha512-BAiDNeDKTMgk4tvD0BbxJ8xHEHBZgpeRZ1zGPPsitSyMgjoMWiLGYAE7H7NpP5h0lPppQajQs871E8NHUrzVPA==", + "requires": { + "@panva/asn1.js": "^1.0.0" + } }, "js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" }, + "js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, "jsbn": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", - "optional": true + "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=" }, "json-buffer": { "version": "3.0.0", @@ -1498,26 +6309,27 @@ "json-schema": { "version": "0.2.3", "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", - "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", - "optional": true + "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=" }, "json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "optional": true + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" }, "json-stringify-safe": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", - "optional": true + "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" + }, + "jsonpath-plus": { + "version": "0.19.0", + "resolved": "https://registry.npmjs.org/jsonpath-plus/-/jsonpath-plus-0.19.0.tgz", + "integrity": "sha512-GSVwsrzW9LsA5lzsqe4CkuZ9wp+kxBb2GwNniaWzI2YFn5Ig42rSW8ZxVpWXaAfakXNrx5pgY5AbQq7kzX29kg==" }, "jsprim": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", - "optional": true, "requires": { "assert-plus": "1.0.0", "extsprintf": "1.3.0", @@ -1594,6 +6406,11 @@ } } }, + "make-error": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==" + }, "media-typer": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", @@ -1604,6 +6421,11 @@ "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" }, + "merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" + }, "methods": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", @@ -1627,11 +6449,15 @@ "mime-db": "1.47.0" } }, + "mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==" + }, "mimic-response": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", - "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", - "dev": true + "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==" }, "minimatch": { "version": "3.0.4", @@ -1930,6 +6756,14 @@ "npm-normalize-package-bin": "^1.0.1" } }, + "npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "requires": { + "path-key": "^3.0.0" + } + }, "npmlog": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", @@ -1949,19 +6783,28 @@ "oauth-sign": { "version": "0.9.0", "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", - "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", - "optional": true + "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==" }, "object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" }, + "object-hash": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-2.2.0.tgz", + "integrity": "sha512-gScRMn0bS5fH+IuwyIFgnh9zBdo4DV+6GhygmWM9HyNJSgS0hScp1f5vjtm7oIIOiT9trXrShAkLFSc2IqKNgw==" + }, "object-keys": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" }, + "oidc-token-hash": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/oidc-token-hash/-/oidc-token-hash-5.0.1.tgz", + "integrity": "sha512-EvoOtz6FIEBzE+9q253HsLCVRiK/0doEJ2HCvvqMQb3dHZrP3WlJKYtJ55CRTw4jmYomzH4wkPuCj/I3ZvpKxQ==" + }, "on-finished": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", @@ -1978,6 +6821,137 @@ "wrappy": "1" } }, + "onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "requires": { + "mimic-fn": "^2.1.0" + } + }, + "openid-client": { + "version": "4.7.4", + "resolved": "https://registry.npmjs.org/openid-client/-/openid-client-4.7.4.tgz", + "integrity": "sha512-n+RURXYuR0bBZo9i0pn+CXZSyg5JYQ1nbwEwPQvLE7EcJt/vMZ2iIMjLehl5DvCN53XUoPVZs9KAE5r6d9fxsw==", + "requires": { + "aggregate-error": "^3.1.0", + "got": "^11.8.0", + "jose": "^2.0.5", + "lru-cache": "^6.0.0", + "make-error": "^1.3.6", + "object-hash": "^2.0.1", + "oidc-token-hash": "^5.0.1" + }, + "dependencies": { + "@sindresorhus/is": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.0.1.tgz", + "integrity": "sha512-Qm9hBEBu18wt1PO2flE7LPb30BHMQt1eQgbV76YntdNk73XZGpn3izvGTYxbGgzXKgbCjiia0uxTd3aTNQrY/g==" + }, + "@szmarczak/http-timer": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.6.tgz", + "integrity": "sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==", + "requires": { + "defer-to-connect": "^2.0.0" + } + }, + "cacheable-request": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.2.tgz", + "integrity": "sha512-pouW8/FmiPQbuGpkXQ9BAPv/Mo5xDGANgSNXzTzJ8DrKGuXOssM4wIQRjfanNRh3Yu5cfYPvcorqbhg2KIJtew==", + "requires": { + "clone-response": "^1.0.2", + "get-stream": "^5.1.0", + "http-cache-semantics": "^4.0.0", + "keyv": "^4.0.0", + "lowercase-keys": "^2.0.0", + "normalize-url": "^6.0.1", + "responselike": "^2.0.0" + } + }, + "decompress-response": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", + "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", + "requires": { + "mimic-response": "^3.1.0" + } + }, + "defer-to-connect": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz", + "integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==" + }, + "get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "requires": { + "pump": "^3.0.0" + } + }, + "got": { + "version": "11.8.2", + "resolved": "https://registry.npmjs.org/got/-/got-11.8.2.tgz", + "integrity": "sha512-D0QywKgIe30ODs+fm8wMZiAcZjypcCodPNuMz5H9Mny7RJ+IjJ10BdmGW7OM7fHXP+O7r6ZwapQ/YQmMSvB0UQ==", + "requires": { + "@sindresorhus/is": "^4.0.0", + "@szmarczak/http-timer": "^4.0.5", + "@types/cacheable-request": "^6.0.1", + "@types/responselike": "^1.0.0", + "cacheable-lookup": "^5.0.3", + "cacheable-request": "^7.0.1", + "decompress-response": "^6.0.0", + "http2-wrapper": "^1.0.0-beta.5.2", + "lowercase-keys": "^2.0.0", + "p-cancelable": "^2.0.0", + "responselike": "^2.0.0" + } + }, + "json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==" + }, + "keyv": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.0.3.tgz", + "integrity": "sha512-zdGa2TOpSZPq5mU6iowDARnMBZgtCqJ11dJROFi6tg6kTn4nuUdU09lFyLFSaHrWqpIJ+EBq4E8/Dc0Vx5vLdA==", + "requires": { + "json-buffer": "3.0.1" + } + }, + "lowercase-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", + "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==" + }, + "mimic-response": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", + "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==" + }, + "normalize-url": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", + "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==" + }, + "p-cancelable": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.1.1.tgz", + "integrity": "sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==" + }, + "responselike": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/responselike/-/responselike-2.0.0.tgz", + "integrity": "sha512-xH48u3FTB9VsZw7R+vvgaKeLKzT6jOogbQhEe/jewwnZgzPcnyWui2Av6JpoYZF/91uueC+lqhWqeURw5/qhCw==", + "requires": { + "lowercase-keys": "^2.0.0" + } + } + } + }, "os-homedir": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", @@ -2044,6 +7018,11 @@ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" }, + "path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==" + }, "path-parse": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", @@ -2057,8 +7036,7 @@ "performance-now": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", - "optional": true + "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" }, "picomatch": { "version": "2.2.3", @@ -2089,8 +7067,7 @@ "psl": { "version": "1.8.0", "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", - "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==", - "optional": true + "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==" }, "pstree.remy": { "version": "1.1.8", @@ -2102,7 +7079,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "dev": true, "requires": { "end-of-stream": "^1.1.0", "once": "^1.3.1" @@ -2111,8 +7087,7 @@ "punycode": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", - "optional": true + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" }, "pupa": { "version": "2.1.1", @@ -2128,6 +7103,11 @@ "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==" }, + "quick-lru": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", + "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==" + }, "range-parser": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", @@ -2196,6 +7176,14 @@ "picomatch": "^2.2.1" } }, + "rechoir": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", + "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=", + "requires": { + "resolve": "^1.1.6" + } + }, "registry-auth-token": { "version": "4.2.1", "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-4.2.1.tgz", @@ -2218,7 +7206,6 @@ "version": "2.88.2", "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", - "optional": true, "requires": { "aws-sign2": "~0.7.0", "aws4": "^1.8.0", @@ -2245,14 +7232,12 @@ "qs": { "version": "6.5.2", "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", - "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", - "optional": true + "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==" }, "uuid": { "version": "3.4.0", "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", - "optional": true + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==" } } }, @@ -2270,6 +7255,11 @@ "path-parse": "^1.0.6" } }, + "resolve-alpn": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.0.tgz", + "integrity": "sha512-e4FNQs+9cINYMO5NMFc6kOUCdohjqFPSgMuwuZAOUWqrfWsen+Yjy5qZFkV5K7VO7tFSLKcUL97olkED7sCBHA==" + }, "responselike": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", @@ -2287,6 +7277,11 @@ "any-promise": "^1.3.0" } }, + "rfc4648": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/rfc4648/-/rfc4648-1.5.0.tgz", + "integrity": "sha512-FA6W9lDNeX8WbMY31io1xWg+TpZCbeDKsBo0ocwACZiWnh9TUAyk9CCuBQuOPmYnwwdEQZmraQ2ZK7yJsxErBg==" + }, "rimraf": { "version": "2.7.1", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", @@ -2436,6 +7431,29 @@ "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==" }, + "shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "requires": { + "shebang-regex": "^3.0.0" + } + }, + "shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==" + }, + "shelljs": { + "version": "0.8.4", + "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.4.tgz", + "integrity": "sha512-7gk3UZ9kOfPLIAbslLzyWeGiEqx9e3rxwZM0KE6EL8GlGwjym9Mrlx5/p33bWTu9YG6vcS4MBxYZDHYr5lr8BQ==", + "requires": { + "glob": "^7.0.0", + "interpret": "^1.0.0", + "rechoir": "^0.6.2" + } + }, "signal-exit": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", @@ -2479,6 +7497,11 @@ "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.7.tgz", "integrity": "sha512-U+MTEOO0AiDzxwFvoa4JVnMV6mZlJKk2sBLt90s7G0Gd0Mlknc7kxEn3nuDPNZRta7O2uy8oLcZLVT+4sqNZHQ==" }, + "sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" + }, "sqlite3": { "version": "5.0.2", "resolved": "https://registry.npmjs.org/sqlite3/-/sqlite3-5.0.2.tgz", @@ -2493,7 +7516,6 @@ "version": "1.16.1", "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", - "optional": true, "requires": { "asn1": "~0.2.3", "assert-plus": "^1.0.0", @@ -2511,11 +7533,24 @@ "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" }, + "stream-buffers": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/stream-buffers/-/stream-buffers-3.0.2.tgz", + "integrity": "sha512-DQi1h8VEBA/lURbSwFtEHnSTb9s2/pwLEaFuNhXwy1Dx3Sa0lOuYT2yNUr4/j2fs8oCAMANtrZ5OrPZtyVs3MQ==" + }, "streamsearch": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-0.1.2.tgz", "integrity": "sha1-gIudDlb8Jz2Am6VzOOkpkZoanxo=" }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "requires": { + "safe-buffer": "~5.1.0" + } + }, "string-width": { "version": "4.2.2", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", @@ -2551,14 +7586,6 @@ } } }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "requires": { - "safe-buffer": "~5.1.0" - } - }, "strip-ansi": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", @@ -2568,6 +7595,11 @@ "ansi-regex": "^4.1.0" } }, + "strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==" + }, "strip-json-comments": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", @@ -2598,6 +7630,32 @@ "integrity": "sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg==", "dev": true }, + "tmp": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", + "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", + "requires": { + "rimraf": "^3.0.0" + }, + "dependencies": { + "rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "requires": { + "glob": "^7.1.3" + } + } + } + }, + "tmp-promise": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/tmp-promise/-/tmp-promise-3.0.2.tgz", + "integrity": "sha512-OyCLAKU1HzBjL6Ev3gxUeraJNlbNingmi8IrHHEsYH8LTmEuhvYfqvhn2F/je+mjf4N58UmZ96OMEy1JanSCpA==", + "requires": { + "tmp": "^0.2.0" + } + }, "to-readable-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz", @@ -2636,7 +7694,6 @@ "version": "2.5.0", "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", - "optional": true, "requires": { "psl": "^1.1.28", "punycode": "^2.1.1" @@ -2656,7 +7713,6 @@ "version": "0.6.0", "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", - "optional": true, "requires": { "safe-buffer": "^5.0.1" } @@ -2664,8 +7720,7 @@ "tweetnacl": { "version": "0.14.5", "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", - "optional": true + "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=" }, "type-fest": { "version": "0.8.1", @@ -2705,6 +7760,11 @@ "debug": "^2.2.0" } }, + "underscore": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.1.tgz", + "integrity": "sha512-hzSoAVtJF+3ZtiFX0VgfFPHEDRm7Y/QPjGyNo4TVdnDTdft3tr8hEkD25a1jC+TjTuE7tkHGKkhwCgs9dgBB2g==" + }, "unique-string": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", @@ -2744,7 +7804,6 @@ "version": "4.4.1", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "optional": true, "requires": { "punycode": "^2.1.0" } @@ -2796,7 +7855,6 @@ "version": "1.10.0", "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", - "optional": true, "requires": { "assert-plus": "^1.0.0", "core-util-is": "1.0.2", @@ -2906,7 +7964,8 @@ "ws": { "version": "7.4.6", "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.6.tgz", - "integrity": "sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==" + "integrity": "sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==", + "requires": {} }, "xdg-basedir": { "version": "4.0.0", diff --git a/package.json b/package.json index 2716484..40f1646 100644 --- a/package.json +++ b/package.json @@ -10,11 +10,13 @@ "dev-init": "npm run init-server && npm run init-client", "dev-server": "nodemon server.js", "dev-client": "npm start --prefix client", - "dev": "concurrently \"npm run dev-server\" \"npm run dev-client\"" + "dev": "concurrently \"npm run dev-server\" \"npm run dev-client\"", + "skaffold": "concurrently \"npm run init-client\" \"npm run dev-server\"" }, "author": "", "license": "ISC", "dependencies": { + "@kubernetes/client-node": "^0.15.0", "@types/express": "^4.17.11", "axios": "^0.21.1", "colors": "^1.4.0", diff --git a/skaffold.yaml b/skaffold.yaml new file mode 100644 index 0000000..e11f8fd --- /dev/null +++ b/skaffold.yaml @@ -0,0 +1,65 @@ +apiVersion: skaffold/v2beta20 +kind: Config +metadata: + name: flame +build: + artifacts: + - image: shokohsc/flame + context: . + sync: + manual: + - src: controllers/*.js + dest: . + docker: + dockerfile: Dockerfile.dev +deploy: + kustomize: + paths: + - k8s/base +profiles: +- name: dev + activation: + - command: dev + build: + artifacts: + - image: shokohsc/flame + sync: + manual: + - src: controllers/*.js + dest: . + docker: + dockerfile: Dockerfile.dev +- name: shokohsc + build: + artifacts: + - image: shokohsc/flame + sync: + manual: + - src: controllers/*.js + dest: . + kaniko: + dockerfile: Dockerfile.dev + cache: + repo: shokohsc/flame + cluster: + dockerConfig: + secretName: kaniko-secret + namespace: kaniko + pullSecretName: kaniko-secret + deploy: + kustomize: + paths: + - k8s/overlays/shokohsc +- name: prod + build: + artifacts: + - image: shokohsc/flame + kaniko: + dockerfile: Dockerfile + cache: + repo: shokohsc/flame + cluster: + dockerConfig: + secretName: kaniko-secret + namespace: kaniko + pullSecretName: kaniko-secret diff --git a/utils/initialConfig.json b/utils/initialConfig.json index 99bbb46..31306fa 100644 --- a/utils/initialConfig.json +++ b/utils/initialConfig.json @@ -68,6 +68,10 @@ "key": "dockerApps", "value": false }, + { + "key": "kubernetesApps", + "value": false + }, { "key": "unpinStoppedApps", "value": false From 5cef34a467f7321e521914455c7b3f454fb8a322 Mon Sep 17 00:00:00 2001 From: unknown Date: Tue, 17 Aug 2021 10:38:16 +0200 Subject: [PATCH 044/196] Pushed version 1.6.4 --- CHANGELOG.md | 3 +++ client/.env | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index e269e15..5c0cb50 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,6 @@ +### v1.6.4 (2021-08-17) +- Added Kubernetes integration ([#72 continued](https://github.com/pawelmalak/flame/issues/73)) + ### v1.6.3 (2021-08-09) - Added support for custom SVG icons ([#73](https://github.com/pawelmalak/flame/issues/73)) - Added Deezer and Tidal to search queries diff --git a/client/.env b/client/.env index 3395c3f..34a75d7 100644 --- a/client/.env +++ b/client/.env @@ -1 +1 @@ -REACT_APP_VERSION=1.6.3 +REACT_APP_VERSION=1.6.4 From 8808f65b47fcaf405f895c596fc5e492f7c4c118 Mon Sep 17 00:00:00 2001 From: pawelmalak Date: Tue, 17 Aug 2021 10:44:12 +0200 Subject: [PATCH 045/196] Fixed typo with latest issues --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5c0cb50..1d46223 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,5 @@ ### v1.6.4 (2021-08-17) -- Added Kubernetes integration ([#72 continued](https://github.com/pawelmalak/flame/issues/73)) +- Added Kubernetes integration ([#72 continued](https://github.com/pawelmalak/flame/issues/72)) ### v1.6.3 (2021-08-09) - Added support for custom SVG icons ([#73](https://github.com/pawelmalak/flame/issues/73)) From 45fb337c87b16324115d8a32c4a6bfe209c16b81 Mon Sep 17 00:00:00 2001 From: Samuel Martineau Date: Sat, 21 Aug 2021 19:08:40 +0000 Subject: [PATCH 046/196] Add support for all protocols for urls (#74) --- client/src/utility/urlParser.ts | 33 ++++++++++++++++----------------- 1 file changed, 16 insertions(+), 17 deletions(-) diff --git a/client/src/utility/urlParser.ts b/client/src/utility/urlParser.ts index 87edb63..666935f 100644 --- a/client/src/utility/urlParser.ts +++ b/client/src/utility/urlParser.ts @@ -1,24 +1,23 @@ -export const urlParser = (url: string): string[] => { - let parsedUrl: string; - let displayUrl: string; +const hasProtocol = (url: string): boolean => /^\w+:\/\//.test(url); +const isSteamUrl = (url: string): boolean => /^steam:\/\//.test(url); +const isWebUrl = (url: string): boolean => /^https?:\/\//.test(url); - if (/(https?|steam):\/\//.test(url)) { - // Url starts with http[s]:// or steam:// -> leave it as it is - parsedUrl = url; - } else { +export const urlParser = (url: string): string[] => { + if (!hasProtocol(url)) { // No protocol -> apply http:// prefix - parsedUrl = `http://${url}`; + url = `http://${url}`; } // Create simplified url to display as text - if (/steam:\/\//.test(url)) { + let displayUrl: string; + if (isSteamUrl(url)) { displayUrl = 'Run Steam App'; - } else { + } else if (isWebUrl(url)) { displayUrl = url - .replace(/https?:\/\//, '') - .replace('www.', '') - .replace(/\/$/, ''); - } - - return [displayUrl, parsedUrl] -} \ No newline at end of file + .replace(/https?:\/\//, '') + .replace('www.', '') + .replace(/\/$/, ''); + } else displayUrl = url; + + return [displayUrl, url]; +}; From 85219957581adfd0875c132c9a82fec9c6065552 Mon Sep 17 00:00:00 2001 From: unknown Date: Sat, 28 Aug 2021 11:42:54 +0200 Subject: [PATCH 047/196] Pushed version 1.6.5 --- CHANGELOG.md | 3 +++ client/.env | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1d46223..e40a21b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,6 @@ +### v1.6.5 (2021-08-28) +- Added support for more URL schemes ([#74](https://github.com/pawelmalak/flame/issues/74)) + ### v1.6.4 (2021-08-17) - Added Kubernetes integration ([#72 continued](https://github.com/pawelmalak/flame/issues/72)) diff --git a/client/.env b/client/.env index 34a75d7..df82210 100644 --- a/client/.env +++ b/client/.env @@ -1 +1 @@ -REACT_APP_VERSION=1.6.4 +REACT_APP_VERSION=1.6.5 From 6ae6c58f4ca36a8c86d2ed9fc5450effc2c2937f Mon Sep 17 00:00:00 2001 From: unknown Date: Mon, 6 Sep 2021 12:24:01 +0200 Subject: [PATCH 048/196] Local search for apps --- README.md | 2 +- .../src/components/Apps/AppGrid/AppGrid.tsx | 34 +- client/src/components/Apps/Apps.tsx | 69 +- client/src/components/Home/Home.tsx | 138 +- client/src/components/SearchBar/SearchBar.tsx | 27 +- .../Settings/OtherSettings/OtherSettings.tsx | 152 +- client/src/interfaces/SearchResult.ts | 5 + client/src/interfaces/index.ts | 3 +- client/src/utility/searchParser.ts | 41 +- client/src/utility/searchQueries.json | 5 + package-lock.json | 4536 +---------------- package.json | 14 +- utils/initConfig.js | 20 +- utils/initialConfig.json | 2 +- 14 files changed, 297 insertions(+), 4751 deletions(-) create mode 100644 client/src/interfaces/SearchResult.ts diff --git a/README.md b/README.md index dadb428..669b7b0 100644 --- a/README.md +++ b/README.md @@ -32,7 +32,7 @@ git clone https://github.com/pawelmalak/flame cd flame # run only once -npm run dev-init +npm run dev:init # start backend and frontend development servers npm run dev diff --git a/client/src/components/Apps/AppGrid/AppGrid.tsx b/client/src/components/Apps/AppGrid/AppGrid.tsx index cacc19c..30d5c8c 100644 --- a/client/src/components/Apps/AppGrid/AppGrid.tsx +++ b/client/src/components/Apps/AppGrid/AppGrid.tsx @@ -7,6 +7,7 @@ import AppCard from '../AppCard/AppCard'; interface ComponentProps { apps: App[]; totalApps?: number; + searching: boolean; } const AppGrid = (props: ComponentProps): JSX.Element => { @@ -16,26 +17,37 @@ const AppGrid = (props: ComponentProps): JSX.Element => { apps = (
{props.apps.map((app: App): JSX.Element => { - return + return ; })}
- ) + ); } else { if (props.totalApps) { - apps = ( -

There are no pinned applications. You can pin them from the /applications menu

- ); + if (props.searching) { + apps = ( +

+ No apps match your search criteria +

+ ); + } else { + apps = ( +

+ There are no pinned applications. You can pin them from the{' '} + /applications menu +

+ ); + } } else { apps = ( -

You don't have any applications. You can add a new one from /applications menu

+

+ You don't have any applications. You can add a new one from{' '} + /applications menu +

); } } return apps; -} +}; -export default AppGrid; \ No newline at end of file +export default AppGrid; diff --git a/client/src/components/Apps/Apps.tsx b/client/src/components/Apps/Apps.tsx index 88c3fff..751a196 100644 --- a/client/src/components/Apps/Apps.tsx +++ b/client/src/components/Apps/Apps.tsx @@ -27,14 +27,11 @@ interface ComponentProps { getApps: Function; apps: App[]; loading: boolean; + searching: boolean; } const Apps = (props: ComponentProps): JSX.Element => { - const { - getApps, - apps, - loading - } = props; + const { getApps, apps, loading, searching = false } = props; const [modalIsOpen, setModalIsOpen] = useState(false); const [isInEdit, setIsInEdit] = useState(false); @@ -47,8 +44,8 @@ const Apps = (props: ComponentProps): JSX.Element => { orderId: 0, id: 0, createdAt: new Date(), - updatedAt: new Date() - }) + updatedAt: new Date(), + }); useEffect(() => { if (apps.length === 0) { @@ -59,63 +56,57 @@ const Apps = (props: ComponentProps): JSX.Element => { const toggleModal = (): void => { setModalIsOpen(!modalIsOpen); setIsInUpdate(false); - } + }; const toggleEdit = (): void => { setIsInEdit(!isInEdit); setIsInUpdate(false); - } + }; const toggleUpdate = (app: App): void => { setAppInUpdate(app); setIsInUpdate(true); setModalIsOpen(true); - } + }; return ( - {!isInUpdate - ? - : - } + {!isInUpdate ? ( + + ) : ( + + )} Go back)} + title="All Applications" + subtitle={Go back} /> - +
- - + +
- {loading - ? - : (!isInEdit - ? - : ) - } + {loading ? ( + + ) : !isInEdit ? ( + + ) : ( + + )}
- ) -} + ); +}; const mapStateToProps = (state: GlobalState) => { return { apps: state.app.apps, - loading: state.app.loading - } -} + loading: state.app.loading, + }; +}; -export default connect(mapStateToProps, { getApps })(Apps); \ No newline at end of file +export default connect(mapStateToProps, { getApps })(Apps); diff --git a/client/src/components/Home/Home.tsx b/client/src/components/Home/Home.tsx index ece4a8a..12097bf 100644 --- a/client/src/components/Home/Home.tsx +++ b/client/src/components/Home/Home.tsx @@ -47,13 +47,16 @@ const Home = (props: ComponentProps): JSX.Element => { appsLoading, getCategories, categories, - categoriesLoading + categoriesLoading, } = props; const [header, setHeader] = useState({ dateTime: dateTime(), - greeting: greeter() - }) + greeting: greeter(), + }); + + // Local search query + const [localSearch, setLocalSearch] = useState(null); // Load applications useEffect(() => { @@ -78,78 +81,93 @@ const Home = (props: ComponentProps): JSX.Element => { interval = setInterval(() => { setHeader({ dateTime: dateTime(), - greeting: greeter() - }) + greeting: greeter(), + }); }, 1000); } return () => clearInterval(interval); - }, []) - + }, []); + return ( - {searchConfig('hideSearch', 0) !== 1 - ? - :
- } + {searchConfig('hideSearch', 0) !== 1 ? ( + + ) : ( +
+ )} - {searchConfig('hideHeader', 0) !== 1 - ? ( -
-

{header.dateTime}

- Go to Settings - -

{header.greeting}

- -
-
- ) - :
- } - - {searchConfig('hideApps', 0) !== 1 - ? ( - - {appsLoading - ? - : app.isPinned)} - totalApps={apps.length} - /> - } -
-
) - :
- } + {searchConfig('hideHeader', 0) !== 1 ? ( +
+

{header.dateTime}

+ + Go to Settings + + +

{header.greeting}

+ +
+
+ ) : ( +
+ )} - {searchConfig('hideCategories', 0) !== 1 - ? ( - - {categoriesLoading - ? - : category.isPinned)} - totalCategories={categories.length} - /> - } - ) - :
- } + {searchConfig('hideApps', 0) !== 1 ? ( + + + {appsLoading ? ( + + ) : ( + isPinned) + : apps.filter(({ name }) => + new RegExp(localSearch, 'i').test(name) + ) + } + totalApps={apps.length} + searching={!!localSearch} + /> + )} +
+
+ ) : ( +
+ )} - - + {searchConfig('hideCategories', 0) !== 1 ? ( + + + {categoriesLoading ? ( + + ) : ( + category.isPinned + )} + totalCategories={categories.length} + /> + )} + + ) : ( +
+ )} + + +
- ) -} + ); +}; const mapStateToProps = (state: GlobalState) => { return { appsLoading: state.app.loading, apps: state.app.apps, categoriesLoading: state.bookmark.loading, - categories: state.bookmark.categories - } -} + categories: state.bookmark.categories, + }; +}; -export default connect(mapStateToProps, { getApps, getCategories })(Home); \ No newline at end of file +export default connect(mapStateToProps, { getApps, getCategories })(Home); diff --git a/client/src/components/SearchBar/SearchBar.tsx b/client/src/components/SearchBar/SearchBar.tsx index 029f175..0b5f3cc 100644 --- a/client/src/components/SearchBar/SearchBar.tsx +++ b/client/src/components/SearchBar/SearchBar.tsx @@ -15,36 +15,41 @@ import { searchParser } from '../../utility'; interface ComponentProps { createNotification: (notification: NewNotification) => void; + setLocalSearch: (query: string) => void; } const SearchBar = (props: ComponentProps): JSX.Element => { + const { setLocalSearch, createNotification } = props; + const inputRef = useRef(document.createElement('input')); useEffect(() => { inputRef.current.focus(); - }, []) + }, []); const searchHandler = (e: KeyboardEvent) => { if (e.code === 'Enter') { - const prefixFound = searchParser(inputRef.current.value); + const searchResult = searchParser(inputRef.current.value); - if (!prefixFound) { - props.createNotification({ + if (!searchResult.prefix) { + createNotification({ title: 'Error', - message: 'Prefix not found' - }) + message: 'Prefix not found', + }); + } else if (searchResult.isLocal) { + setLocalSearch(searchResult.query); } } - } + }; return ( searchHandler(e)} /> - ) -} + ); +}; -export default connect(null, { createNotification })(SearchBar); \ No newline at end of file +export default connect(null, { createNotification })(SearchBar); diff --git a/client/src/components/Settings/OtherSettings/OtherSettings.tsx b/client/src/components/Settings/OtherSettings/OtherSettings.tsx index 31bbd52..afaf072 100644 --- a/client/src/components/Settings/OtherSettings/OtherSettings.tsx +++ b/client/src/components/Settings/OtherSettings/OtherSettings.tsx @@ -6,7 +6,7 @@ import { createNotification, updateConfig, sortApps, - sortCategories + sortCategories, } from '../../../store/actions'; // Typescript @@ -14,7 +14,7 @@ import { GlobalState, NewNotification, Query, - SettingsForm + SettingsForm, } from '../../../interfaces'; // UI @@ -53,7 +53,7 @@ const OtherSettings = (props: ComponentProps): JSX.Element => { searchSameTab: 0, dockerApps: 1, kubernetesApps: 1, - unpinStoppedApps: 1 + unpinStoppedApps: 1, }); // Get config @@ -73,7 +73,7 @@ const OtherSettings = (props: ComponentProps): JSX.Element => { searchSameTab: searchConfig('searchSameTab', 0), dockerApps: searchConfig('dockerApps', 0), kubernetesApps: searchConfig('kubernetesApps', 0), - unpinStoppedApps: searchConfig('unpinStoppedApps', 0) + unpinStoppedApps: searchConfig('unpinStoppedApps', 0), }); }, [props.loading]); @@ -105,115 +105,117 @@ const OtherSettings = (props: ComponentProps): JSX.Element => { setFormData({ ...formData, - [e.target.name]: value + [e.target.name]: value, }); }; return ( -
formSubmitHandler(e)}> + formSubmitHandler(e)}> {/* OTHER OPTIONS */}

Miscellaneous

- + inputChangeHandler(e)} + onChange={(e) => inputChangeHandler(e)} /> {/* BEAHVIOR OPTIONS */}

App Behavior

- - - + - + - - + - + inputChangeHandler(e, true)} + onChange={(e) => inputChangeHandler(e, true)} > - + - + - + inputChangeHandler(e, true)} + onChange={(e) => inputChangeHandler(e, true)} > - - - - - - - - - inputChangeHandler(e, true)} - > - - - - inputChangeHandler(e)} + > + {queries.map((query: Query, idx) => ( + + ))} + + + + + + + + + + + +
+ ); +}; + +const mapStateToProps = (state: GlobalState) => { + return { + loading: state.config.loading, + }; +}; + +const actions = { + createNotification, + updateConfig, +}; + +export default connect(mapStateToProps, actions)(SearchSettings); diff --git a/client/src/components/Settings/Settings.tsx b/client/src/components/Settings/Settings.tsx index b1eb300..5df8ec6 100644 --- a/client/src/components/Settings/Settings.tsx +++ b/client/src/components/Settings/Settings.tsx @@ -1,73 +1,61 @@ +// import { NavLink, Link, Switch, Route } from 'react-router-dom'; +// Typescript +import { Route as SettingsRoute } from '../../interfaces'; + +// CSS import classes from './Settings.module.css'; -import { Container } from '../UI/Layout/Layout'; -import Headline from '../UI/Headlines/Headline/Headline'; - +// Components import Themer from '../Themer/Themer'; import WeatherSettings from './WeatherSettings/WeatherSettings'; import OtherSettings from './OtherSettings/OtherSettings'; import AppDetails from './AppDetails/AppDetails'; import StyleSettings from './StyleSettings/StyleSettings'; +import SearchSettings from './SearchSettings/SearchSettings'; + +// UI +import { Container } from '../UI/Layout/Layout'; +import Headline from '../UI/Headlines/Headline/Headline'; + +// Data +import { routes } from './settings.json'; const Settings = (): JSX.Element => { return ( - Go back} - /> + Go back} />
+ {/* NAVIGATION MENU */} + + {/* ROUTES */}
- - - - - + + + + + +
- ) -} + ); +}; -export default Settings; \ No newline at end of file +export default Settings; diff --git a/client/src/components/Settings/settings.json b/client/src/components/Settings/settings.json new file mode 100644 index 0000000..3cc24e9 --- /dev/null +++ b/client/src/components/Settings/settings.json @@ -0,0 +1,28 @@ +{ + "routes": [ + { + "name": "Theme", + "dest": "/settings" + }, + { + "name": "Weather", + "dest": "/settings/weather" + }, + { + "name": "Search", + "dest": "/settings/search" + }, + { + "name": "Other", + "dest": "/settings/other" + }, + { + "name": "CSS", + "dest": "/settings/css" + }, + { + "name": "App", + "dest": "/settings/app" + } + ] +} diff --git a/client/src/interfaces/Forms.ts b/client/src/interfaces/Forms.ts index 177821d..22856be 100644 --- a/client/src/interfaces/Forms.ts +++ b/client/src/interfaces/Forms.ts @@ -5,6 +5,12 @@ export interface WeatherForm { isCelsius: number; } +export interface SearchForm { + hideSearch: number; + defaultSearchProvider: string; + searchSameTab: number; +} + export interface SettingsForm { customTitle: string; pinAppsByDefault: number; @@ -12,12 +18,12 @@ export interface SettingsForm { hideHeader: number; hideApps: number; hideCategories: number; - hideSearch: number; - defaultSearchProvider: string; + // hideSearch: number; + // defaultSearchProvider: string; useOrdering: string; appsSameTab: number; bookmarksSameTab: number; - searchSameTab: number; + // searchSameTab: number; dockerApps: number; kubernetesApps: number; unpinStoppedApps: number; diff --git a/client/src/interfaces/Route.ts b/client/src/interfaces/Route.ts new file mode 100644 index 0000000..9d571dd --- /dev/null +++ b/client/src/interfaces/Route.ts @@ -0,0 +1,4 @@ +export interface Route { + name: string; + dest: string; +} diff --git a/client/src/interfaces/index.ts b/client/src/interfaces/index.ts index 6892fb5..b9683dd 100644 --- a/client/src/interfaces/index.ts +++ b/client/src/interfaces/index.ts @@ -10,3 +10,4 @@ export * from './Config'; export * from './Forms'; export * from './Query'; export * from './SearchResult'; +export * from './Route'; From 84bd641cf2b405a17e21d94c27b7ebc3f8a545fa Mon Sep 17 00:00:00 2001 From: unknown Date: Tue, 5 Oct 2021 12:29:17 +0200 Subject: [PATCH 056/196] Database migrations --- CHANGELOG.md | 3 + client/.env | 2 +- db.js | 32 ------ db/index.js | 51 ++++++++++ db/migrations/00_initial.js | 189 ++++++++++++++++++++++++++++++++++++ models/Config.js | 44 +++++---- package-lock.json | 13 +++ package.json | 1 + 8 files changed, 282 insertions(+), 53 deletions(-) delete mode 100644 db.js create mode 100644 db/index.js create mode 100644 db/migrations/00_initial.js diff --git a/CHANGELOG.md b/CHANGELOG.md index 0a372a7..0ab36d7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,6 @@ +### v1.6.8 (2021-10-05) +- Implemented migration system for database + ### v1.6.7 (2021-10-04) - Add multiple labels to Docker Compose ([#90](https://github.com/pawelmalak/flame/issues/90)) - Custom icons via Docker Compose labels ([#91](https://github.com/pawelmalak/flame/issues/91)) diff --git a/client/.env b/client/.env index 482555e..afab507 100644 --- a/client/.env +++ b/client/.env @@ -1 +1 @@ -REACT_APP_VERSION=1.6.7 \ No newline at end of file +REACT_APP_VERSION=1.6.8 \ No newline at end of file diff --git a/db.js b/db.js deleted file mode 100644 index 6c1eb7c..0000000 --- a/db.js +++ /dev/null @@ -1,32 +0,0 @@ -const { Sequelize } = require('sequelize'); -const Logger = require('./utils/Logger'); -const logger = new Logger(); - -const sequelize = new Sequelize({ - dialect: 'sqlite', - storage: './data/db.sqlite', - logging: false, -}); - -const connectDB = async () => { - try { - await sequelize.authenticate(); - logger.log('Connected to database'); - - const syncModels = true; - - if (syncModels) { - logger.log('Starting model synchronization'); - await sequelize.sync({ alter: true }); - logger.log('All models were synchronized'); - } - } catch (error) { - logger.log(`Unable to connect to the database: ${error.message}`, 'ERROR'); - process.exit(1); - } -}; - -module.exports = { - connectDB, - sequelize, -}; diff --git a/db/index.js b/db/index.js new file mode 100644 index 0000000..fbff66d --- /dev/null +++ b/db/index.js @@ -0,0 +1,51 @@ +const { Sequelize } = require('sequelize'); +const { join } = require('path'); +const fs = require('fs'); +const Umzug = require('umzug'); + +const Logger = require('../utils/Logger'); +const logger = new Logger(); + +const sequelize = new Sequelize({ + dialect: 'sqlite', + storage: './data/db.sqlite', + logging: false, +}); + +const umzug = new Umzug({ + migrations: { + path: join(__dirname, './migrations'), + params: [sequelize.getQueryInterface()], + }, + storage: 'sequelize', + storageOptions: { + sequelize, + }, +}); + +const connectDB = async () => { + try { + if (fs.existsSync('data/db.sqlite')) { + fs.copyFileSync('data/db.sqlite', 'data/backup_db.sqlite'); + } + + await sequelize.authenticate(); + logger.log('Connected to database'); + + // migrations + const pendingMigrations = await umzug.pending(); + + if (pendingMigrations.length > 0) { + logger.log('Executing pending migrations'); + await umzug.up(); + } + } catch (error) { + logger.log(`Unable to connect to the database: ${error.message}`, 'ERROR'); + process.exit(1); + } +}; + +module.exports = { + connectDB, + sequelize, +}; diff --git a/db/migrations/00_initial.js b/db/migrations/00_initial.js new file mode 100644 index 0000000..e6d7b13 --- /dev/null +++ b/db/migrations/00_initial.js @@ -0,0 +1,189 @@ +const { DataTypes } = require('sequelize'); +const { INTEGER, DATE, STRING, TINYINT, FLOAT, TEXT } = DataTypes; + +const up = async (query) => { + // CONFIG TABLE + await query.createTable('config', { + id: { + type: INTEGER, + autoIncrement: true, + primaryKey: true, + }, + key: { + type: STRING, + allowNull: false, + unique: true, + }, + value: { + type: STRING, + allowNull: false, + }, + valueType: { + type: STRING, + allowNull: false, + }, + isLocked: { + type: TINYINT, + defaultValue: 0, + }, + createdAt: { + type: DATE, + allowNull: false, + }, + updatedAt: { + type: DATE, + allowNull: false, + }, + }); + + // WEATHER TABLE + await query.createTable('weather', { + id: { + type: INTEGER, + autoIncrement: true, + primaryKey: true, + }, + externalLastUpdate: { + type: STRING, + }, + tempC: { + type: FLOAT, + }, + tempF: { + type: FLOAT, + }, + isDay: { + type: INTEGER, + }, + cloud: { + type: INTEGER, + }, + conditionText: { + type: TEXT, + }, + conditionCode: { + type: INTEGER, + }, + createdAt: { + type: DATE, + allowNull: false, + }, + updatedAt: { + type: DATE, + allowNull: false, + }, + }); + + // CATEGORIES TABLE + await query.createTable('categories', { + id: { + type: INTEGER, + autoIncrement: true, + primaryKey: true, + }, + name: { + type: STRING, + allowNull: false, + }, + isPinned: { + type: TINYINT, + defaultValue: 0, + }, + createdAt: { + type: DATE, + allowNull: false, + }, + updatedAt: { + type: DATE, + allowNull: false, + }, + orderId: { + type: INTEGER, + defaultValue: null, + }, + }); + + // BOOKMARKS TABLE + await query.createTable('bookmarks', { + id: { + type: INTEGER, + autoIncrement: true, + primaryKey: true, + }, + name: { + type: STRING, + allowNull: false, + }, + url: { + type: STRING, + allowNull: false, + }, + categoryId: { + type: INTEGER, + allowNull: false, + }, + icon: { + type: STRING, + defaultValue: '', + }, + createdAt: { + type: DATE, + allowNull: false, + }, + updatedAt: { + type: DATE, + allowNull: false, + }, + }); + + // APPS TABLE + await query.createTable('apps', { + id: { + type: INTEGER, + autoIncrement: true, + primaryKey: true, + }, + name: { + type: STRING, + allowNull: false, + }, + url: { + type: STRING, + allowNull: false, + }, + icon: { + type: STRING, + allowNull: false, + defaultValue: 'cancel', + }, + isPinned: { + type: TINYINT, + defaultValue: 0, + }, + createdAt: { + type: DATE, + allowNull: false, + }, + updatedAt: { + type: DATE, + allowNull: false, + }, + orderId: { + type: INTEGER, + defaultValue: null, + }, + }); +}; + +const down = async (query) => { + await query.dropTable('config'); + await query.dropTable('weather'); + await query.dropTable('categories'); + await query.dropTable('bookmarks'); + await query.dropTable('apps'); +}; + +module.exports = { + up, + down, +}; diff --git a/models/Config.js b/models/Config.js index 3919f3f..675aaa8 100644 --- a/models/Config.js +++ b/models/Config.js @@ -1,26 +1,30 @@ const { DataTypes } = require('sequelize'); const { sequelize } = require('../db'); -const Config = sequelize.define('Config', { - key: { - type: DataTypes.STRING, - allowNull: false, - unique: true +const Config = sequelize.define( + 'Config', + { + key: { + type: DataTypes.STRING, + allowNull: false, + unique: true, + }, + value: { + type: DataTypes.STRING, + allowNull: false, + }, + valueType: { + type: DataTypes.STRING, + allowNull: false, + }, + isLocked: { + type: DataTypes.TINYINT, + defaultValue: 0, + }, }, - value: { - type: DataTypes.STRING, - allowNull: false - }, - valueType: { - type: DataTypes.STRING, - allowNull: false - }, - isLocked: { - type: DataTypes.BOOLEAN, - defaultValue: false + { + tableName: 'config', } -}, { - tableName: 'config' -}); +); -module.exports = Config; \ No newline at end of file +module.exports = Config; diff --git a/package-lock.json b/package-lock.json index a7183e8..dab2464 100644 --- a/package-lock.json +++ b/package-lock.json @@ -525,6 +525,11 @@ "inherits": "~2.0.0" } }, + "bluebird": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==" + }, "body-parser": { "version": "1.19.0", "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", @@ -3240,6 +3245,14 @@ "is-typedarray": "^1.0.0" } }, + "umzug": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/umzug/-/umzug-2.3.0.tgz", + "integrity": "sha512-Z274K+e8goZK8QJxmbRPhl89HPO1K+ORFtm6rySPhFKfKc5GHhqdzD0SGhSWHkzoXasqJuItdhorSvY7/Cgflw==", + "requires": { + "bluebird": "^3.7.2" + } + }, "undefsafe": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.3.tgz", diff --git a/package.json b/package.json index 40f1646..dbeb5ee 100644 --- a/package.json +++ b/package.json @@ -27,6 +27,7 @@ "node-schedule": "^2.0.0", "sequelize": "^6.6.2", "sqlite3": "^5.0.2", + "umzug": "^2.3.0", "ws": "^7.4.6" }, "devDependencies": { From 59271d33764abbc1a0b12f7ee29194ad7a5a66a2 Mon Sep 17 00:00:00 2001 From: unknown Date: Tue, 5 Oct 2021 13:17:09 +0200 Subject: [PATCH 057/196] Create database backup before migrating --- .env | 3 ++- db/index.js | 5 ++--- db/utils/backupDb.js | 21 +++++++++++++++++++++ 3 files changed, 25 insertions(+), 4 deletions(-) create mode 100644 db/utils/backupDb.js diff --git a/.env b/.env index f1644a5..de0f091 100644 --- a/.env +++ b/.env @@ -1,2 +1,3 @@ PORT=5005 -NODE_ENV=development \ No newline at end of file +NODE_ENV=development +VERSION=1.6.8 \ No newline at end of file diff --git a/db/index.js b/db/index.js index fbff66d..34e715f 100644 --- a/db/index.js +++ b/db/index.js @@ -2,6 +2,7 @@ const { Sequelize } = require('sequelize'); const { join } = require('path'); const fs = require('fs'); const Umzug = require('umzug'); +const backupDB = require('./utils/backupDb'); const Logger = require('../utils/Logger'); const logger = new Logger(); @@ -25,9 +26,7 @@ const umzug = new Umzug({ const connectDB = async () => { try { - if (fs.existsSync('data/db.sqlite')) { - fs.copyFileSync('data/db.sqlite', 'data/backup_db.sqlite'); - } + backupDB(); await sequelize.authenticate(); logger.log('Connected to database'); diff --git a/db/utils/backupDb.js b/db/utils/backupDb.js new file mode 100644 index 0000000..572679b --- /dev/null +++ b/db/utils/backupDb.js @@ -0,0 +1,21 @@ +const fs = require('fs'); + +const backupDB = () => { + if (!fs.existsSync('data/db_backups')) { + fs.mkdirSync('data/db_backups'); + } + + const version = process.env.VERSION; + const slug = `db-${version.replace(/\./g, '')}-backup.sqlite`; + + const srcPath = 'data/db.sqlite'; + const destPath = `data/db_backups/${slug}`; + + if (fs.existsSync(srcPath)) { + if (!fs.existsSync(destPath)) { + fs.copyFileSync(srcPath, destPath); + } + } +}; + +module.exports = backupDB; From bf1aa9e85cc9e3df825a86e99ab0019ec6c6cefe Mon Sep 17 00:00:00 2001 From: unknown Date: Tue, 5 Oct 2021 16:31:56 +0200 Subject: [PATCH 058/196] Clickable notifications with url redirect --- CHANGELOG.md | 3 ++ .../NotificationCenter/NotificationCenter.tsx | 15 +++++----- .../UI/Notification/Notification.tsx | 24 ++++++++++----- client/src/interfaces/Notification.ts | 3 +- client/src/utility/checkVersion.ts | 29 ++++++++++++------- 5 files changed, 48 insertions(+), 26 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0a372a7..4d81511 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,6 @@ +### v1.7.0 (TBA) +- URL can now be assigned to notifications. Clicking on "New version is available" popup will now redirect to changelog ([#86](https://github.com/pawelmalak/flame/issues/86)) + ### v1.6.7 (2021-10-04) - Add multiple labels to Docker Compose ([#90](https://github.com/pawelmalak/flame/issues/90)) - Custom icons via Docker Compose labels ([#91](https://github.com/pawelmalak/flame/issues/91)) diff --git a/client/src/components/NotificationCenter/NotificationCenter.tsx b/client/src/components/NotificationCenter/NotificationCenter.tsx index 29c9cb2..733316b 100644 --- a/client/src/components/NotificationCenter/NotificationCenter.tsx +++ b/client/src/components/NotificationCenter/NotificationCenter.tsx @@ -20,19 +20,20 @@ const NotificationCenter = (props: ComponentProps): JSX.Element => { - ) + ); })}
- ) -} + ); +}; const mapStateToProps = (state: GlobalState) => { return { - notifications: state.notification.notifications - } -} + notifications: state.notification.notifications, + }; +}; -export default connect(mapStateToProps)(NotificationCenter); \ No newline at end of file +export default connect(mapStateToProps)(NotificationCenter); diff --git a/client/src/components/UI/Notification/Notification.tsx b/client/src/components/UI/Notification/Notification.tsx index 95109e1..2bd5185 100644 --- a/client/src/components/UI/Notification/Notification.tsx +++ b/client/src/components/UI/Notification/Notification.tsx @@ -8,12 +8,16 @@ interface ComponentProps { title: string; message: string; id: number; + url: string | null; clearNotification: (id: number) => void; } const Notification = (props: ComponentProps): JSX.Element => { const [isOpen, setIsOpen] = useState(true); - const elementClasses = [classes.Notification, isOpen ? classes.NotificationOpen : classes.NotificationClose].join(' '); + const elementClasses = [ + classes.Notification, + isOpen ? classes.NotificationOpen : classes.NotificationClose, + ].join(' '); useEffect(() => { const closeNotification = setTimeout(() => { @@ -22,21 +26,27 @@ const Notification = (props: ComponentProps): JSX.Element => { const clearNotification = setTimeout(() => { props.clearNotification(props.id); - }, 3600) + }, 3600); return () => { window.clearTimeout(closeNotification); window.clearTimeout(clearNotification); + }; + }, []); + + const clickHandler = () => { + if (props.url) { + window.open(props.url, '_blank'); } - }, []) + }; return ( -
+

{props.title}

{props.message}

- ) -} + ); +}; -export default connect(null, { clearNotification })(Notification); \ No newline at end of file +export default connect(null, { clearNotification })(Notification); diff --git a/client/src/interfaces/Notification.ts b/client/src/interfaces/Notification.ts index 80a49f2..5054922 100644 --- a/client/src/interfaces/Notification.ts +++ b/client/src/interfaces/Notification.ts @@ -1,8 +1,9 @@ export interface NewNotification { title: string; message: string; + url?: string; } export interface Notification extends NewNotification { id: number; -} \ No newline at end of file +} diff --git a/client/src/utility/checkVersion.ts b/client/src/utility/checkVersion.ts index e1a0508..d4cdb9a 100644 --- a/client/src/utility/checkVersion.ts +++ b/client/src/utility/checkVersion.ts @@ -4,24 +4,31 @@ import { createNotification } from '../store/actions'; export const checkVersion = async (isForced: boolean = false) => { try { - const res = await axios.get('https://raw.githubusercontent.com/pawelmalak/flame/master/client/.env'); + const res = await axios.get( + 'https://raw.githubusercontent.com/pawelmalak/flame/master/client/.env' + ); const githubVersion = res.data .split('\n') - .map(pair => pair.split('='))[0][1]; + .map((pair) => pair.split('='))[0][1]; if (githubVersion !== process.env.REACT_APP_VERSION) { - store.dispatch(createNotification({ - title: 'Info', - message: 'New version is available!' - })) + store.dispatch( + createNotification({ + title: 'Info', + message: 'New version is available!', + url: 'https://github.com/pawelmalak/flame/blob/master/CHANGELOG.md', + }) + ); } else if (isForced) { - store.dispatch(createNotification({ - title: 'Info', - message: 'You are using the latest version!' - })) + store.dispatch( + createNotification({ + title: 'Info', + message: 'You are using the latest version!', + }) + ); } } catch (err) { console.log(err); } -} \ No newline at end of file +}; From 084218027c93976da701493be164e13150dfee8d Mon Sep 17 00:00:00 2001 From: unknown Date: Tue, 5 Oct 2021 17:08:37 +0200 Subject: [PATCH 059/196] Bugfix for #83 --- CHANGELOG.md | 1 + .../src/components/Apps/AppForm/AppForm.tsx | 74 ++++----- .../Bookmarks/BookmarkForm/BookmarkForm.tsx | 145 ++++++++++-------- 3 files changed, 117 insertions(+), 103 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4d81511..9384559 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,5 @@ ### v1.7.0 (TBA) +- Fixed bug related to creating new apps/bookmarks with custom icon ([#83](https://github.com/pawelmalak/flame/issues/83)) - URL can now be assigned to notifications. Clicking on "New version is available" popup will now redirect to changelog ([#86](https://github.com/pawelmalak/flame/issues/86)) ### v1.6.7 (2021-10-04) diff --git a/client/src/components/Apps/AppForm/AppForm.tsx b/client/src/components/Apps/AppForm/AppForm.tsx index 5d05f0a..d44418e 100644 --- a/client/src/components/Apps/AppForm/AppForm.tsx +++ b/client/src/components/Apps/AppForm/AppForm.tsx @@ -22,7 +22,7 @@ const AppForm = (props: ComponentProps): JSX.Element => { const [formData, setFormData] = useState({ name: '', url: '', - icon: '' + icon: '', }); useEffect(() => { @@ -30,13 +30,13 @@ const AppForm = (props: ComponentProps): JSX.Element => { setFormData({ name: props.app.name, url: props.app.url, - icon: props.app.icon + icon: props.app.icon, }); } else { setFormData({ name: '', url: '', - icon: '' + icon: '', }); } }, [props.app]); @@ -44,7 +44,7 @@ const AppForm = (props: ComponentProps): JSX.Element => { const inputChangeHandler = (e: ChangeEvent): void => { setFormData({ ...formData, - [e.target.name]: e.target.value + [e.target.name]: e.target.value, }); }; @@ -59,6 +59,7 @@ const AppForm = (props: ComponentProps): JSX.Element => { const createFormData = (): FormData => { const data = new FormData(); + if (customIcon) { data.append('icon', customIcon); } @@ -88,10 +89,8 @@ const AppForm = (props: ComponentProps): JSX.Element => { setFormData({ name: '', url: '', - icon: '' + icon: '', }); - - setCustomIcon(null); }; return ( @@ -100,33 +99,33 @@ const AppForm = (props: ComponentProps): JSX.Element => { formHandler={formSubmitHandler} > - + inputChangeHandler(e)} + onChange={(e) => inputChangeHandler(e)} /> - + inputChangeHandler(e)} + onChange={(e) => inputChangeHandler(e)} /> {' '} Check supported URL formats @@ -136,19 +135,19 @@ const AppForm = (props: ComponentProps): JSX.Element => { {!useCustomIcon ? ( // use mdi icon - + inputChangeHandler(e)} + onChange={(e) => inputChangeHandler(e)} /> Use icon name from MDI. - + {' '} Click here for reference @@ -163,17 +162,20 @@ const AppForm = (props: ComponentProps): JSX.Element => { ) : ( // upload custom icon - + fileChangeHandler(e)} - accept='.jpg,.jpeg,.png,.svg' + onChange={(e) => fileChangeHandler(e)} + accept=".jpg,.jpeg,.png,.svg" /> toggleUseCustomIcon(!useCustomIcon)} + onClick={() => { + setCustomIcon(null); + toggleUseCustomIcon(!useCustomIcon); + }} className={classes.Switch} > Switch to MDI diff --git a/client/src/components/Bookmarks/BookmarkForm/BookmarkForm.tsx b/client/src/components/Bookmarks/BookmarkForm/BookmarkForm.tsx index 10d6de2..5162c89 100644 --- a/client/src/components/Bookmarks/BookmarkForm/BookmarkForm.tsx +++ b/client/src/components/Bookmarks/BookmarkForm/BookmarkForm.tsx @@ -1,32 +1,40 @@ +// React import { useState, SyntheticEvent, Fragment, ChangeEvent, - useEffect + useEffect, } from 'react'; -import { connect } from 'react-redux'; -import ModalForm from '../../UI/Forms/ModalForm/ModalForm'; -import InputGroup from '../../UI/Forms/InputGroup/InputGroup'; -import { - Bookmark, - Category, - GlobalState, - NewBookmark, - NewCategory, - NewNotification -} from '../../../interfaces'; -import { ContentType } from '../Bookmarks'; +// Redux +import { connect } from 'react-redux'; import { getCategories, addCategory, addBookmark, updateCategory, updateBookmark, - createNotification + createNotification, } from '../../../store/actions'; + +// Typescript +import { + Bookmark, + Category, + GlobalState, + NewBookmark, + NewCategory, + NewNotification, +} from '../../../interfaces'; +import { ContentType } from '../Bookmarks'; + +// UI +import ModalForm from '../../UI/Forms/ModalForm/ModalForm'; +import InputGroup from '../../UI/Forms/InputGroup/InputGroup'; import Button from '../../UI/Buttons/Button/Button'; + +// CSS import classes from './BookmarkForm.module.css'; interface ComponentProps { @@ -53,14 +61,14 @@ const BookmarkForm = (props: ComponentProps): JSX.Element => { const [useCustomIcon, toggleUseCustomIcon] = useState(false); const [customIcon, setCustomIcon] = useState(null); const [categoryName, setCategoryName] = useState({ - name: '' + name: '', }); const [formData, setFormData] = useState({ name: '', url: '', categoryId: -1, - icon: '' + icon: '', }); // Load category data if provided for editing @@ -79,14 +87,14 @@ const BookmarkForm = (props: ComponentProps): JSX.Element => { name: props.bookmark.name, url: props.bookmark.url, categoryId: props.bookmark.categoryId, - icon: props.bookmark.icon + icon: props.bookmark.icon, }); } else { setFormData({ name: '', url: '', categoryId: -1, - icon: '' + icon: '', }); } }, [props.bookmark]); @@ -117,7 +125,7 @@ const BookmarkForm = (props: ComponentProps): JSX.Element => { if (formData.categoryId === -1) { props.createNotification({ title: 'Error', - message: 'Please select category' + message: 'Please select category', }); return; } @@ -133,10 +141,10 @@ const BookmarkForm = (props: ComponentProps): JSX.Element => { name: '', url: '', categoryId: formData.categoryId, - icon: '' + icon: '', }); - setCustomIcon(null); + // setCustomIcon(null); } } else { // Update @@ -150,12 +158,12 @@ const BookmarkForm = (props: ComponentProps): JSX.Element => { const data = createFormData(); props.updateBookmark(props.bookmark.id, data, { prev: props.bookmark.categoryId, - curr: formData.categoryId + curr: formData.categoryId, }); } else { props.updateBookmark(props.bookmark.id, formData, { prev: props.bookmark.categoryId, - curr: formData.categoryId + curr: formData.categoryId, }); } @@ -163,7 +171,7 @@ const BookmarkForm = (props: ComponentProps): JSX.Element => { name: '', url: '', categoryId: -1, - icon: '' + icon: '', }); setCustomIcon(null); @@ -176,14 +184,14 @@ const BookmarkForm = (props: ComponentProps): JSX.Element => { const inputChangeHandler = (e: ChangeEvent): void => { setFormData({ ...formData, - [e.target.name]: e.target.value + [e.target.name]: e.target.value, }); }; const selectChangeHandler = (e: ChangeEvent): void => { setFormData({ ...formData, - categoryId: parseInt(e.target.value) + categoryId: parseInt(e.target.value), }); }; @@ -215,48 +223,48 @@ const BookmarkForm = (props: ComponentProps): JSX.Element => { {props.contentType === ContentType.category ? ( - + setCategoryName({ name: e.target.value })} + onChange={(e) => setCategoryName({ name: e.target.value })} /> ) : ( - + inputChangeHandler(e)} + onChange={(e) => inputChangeHandler(e)} /> - + inputChangeHandler(e)} + onChange={(e) => inputChangeHandler(e)} /> {' '} Check supported URL formats @@ -264,12 +272,12 @@ const BookmarkForm = (props: ComponentProps): JSX.Element => { - + inputChangeHandler(e)} + onChange={(e) => inputChangeHandler(e)} /> Use icon name from MDI. - + {' '} Click here for reference @@ -311,16 +319,19 @@ const BookmarkForm = (props: ComponentProps): JSX.Element => { ) : ( // custom - + fileChangeHandler(e)} - accept='.jpg,.jpeg,.png,.svg' + type="file" + name="icon" + id="icon" + onChange={(e) => fileChangeHandler(e)} + accept=".jpg,.jpeg,.png,.svg" /> toggleUseCustomIcon(!useCustomIcon)} + onClick={() => { + setCustomIcon(null); + toggleUseCustomIcon(!useCustomIcon); + }} className={classes.Switch} > Switch to MDI @@ -336,7 +347,7 @@ const BookmarkForm = (props: ComponentProps): JSX.Element => { const mapStateToProps = (state: GlobalState) => { return { - categories: state.bookmark.categories + categories: state.bookmark.categories, }; }; @@ -346,7 +357,7 @@ const dispatchMap = { addBookmark, updateCategory, updateBookmark, - createNotification + createNotification, }; export default connect(mapStateToProps, dispatchMap)(BookmarkForm); From a162450568a24cf6c372625ef822968f4021110b Mon Sep 17 00:00:00 2001 From: unknown Date: Wed, 6 Oct 2021 11:23:30 +0200 Subject: [PATCH 060/196] Added static fonts --- client/public/index.html | 13 +++-- .../fonts/Roboto/roboto-v29-latin-500.woff | Bin 0 -> 20532 bytes .../fonts/Roboto/roboto-v29-latin-500.woff2 | Bin 0 -> 15920 bytes .../fonts/Roboto/roboto-v29-latin-700.woff | Bin 0 -> 20396 bytes .../fonts/Roboto/roboto-v29-latin-700.woff2 | Bin 0 -> 15828 bytes .../fonts/Roboto/roboto-v29-latin-900.woff | Bin 0 -> 20412 bytes .../fonts/Roboto/roboto-v29-latin-900.woff2 | Bin 0 -> 15724 bytes .../Roboto/roboto-v29-latin-regular.woff | Bin 0 -> 20332 bytes .../Roboto/roboto-v29-latin-regular.woff2 | Bin 0 -> 15688 bytes client/src/index.css | 46 ++++++++++++++++-- 10 files changed, 47 insertions(+), 12 deletions(-) create mode 100644 client/src/assets/fonts/Roboto/roboto-v29-latin-500.woff create mode 100644 client/src/assets/fonts/Roboto/roboto-v29-latin-500.woff2 create mode 100644 client/src/assets/fonts/Roboto/roboto-v29-latin-700.woff create mode 100644 client/src/assets/fonts/Roboto/roboto-v29-latin-700.woff2 create mode 100644 client/src/assets/fonts/Roboto/roboto-v29-latin-900.woff create mode 100644 client/src/assets/fonts/Roboto/roboto-v29-latin-900.woff2 create mode 100644 client/src/assets/fonts/Roboto/roboto-v29-latin-regular.woff create mode 100644 client/src/assets/fonts/Roboto/roboto-v29-latin-regular.woff2 diff --git a/client/public/index.html b/client/public/index.html index 3f43c40..c93d95e 100644 --- a/client/public/index.html +++ b/client/public/index.html @@ -4,16 +4,15 @@ - - - - + + Flame -
- - \ No newline at end of file + diff --git a/client/src/assets/fonts/Roboto/roboto-v29-latin-500.woff b/client/src/assets/fonts/Roboto/roboto-v29-latin-500.woff new file mode 100644 index 0000000000000000000000000000000000000000..c9eb5cabfba7d5ff961fce4c067f0d3fae77db11 GIT binary patch literal 20532 zcmYhib95)q(>DBxZQC1L8{4++Y;4=MZQHhOXOoR>%l*bCd4;v>$S@BGjk7 z$jXSu3{ziKUsGRgUuIup?~EZwFuf{gDMVl-aCV1)f&`-oaNCGZ0f{5iKnd=xP_yP~ zUTv|qJwHzSbKYvb+0qU<>R`3Gh+rLMMyz`k9u-r66;6MBS*4ZkJ*$KSIMnX97JlAZ zWy~lM=8ch+R_5w57$lasoRBn8$CqbLcGRLq)u)$R+{ z9{LG#S$nWqdlYVKXnKo^+@>^{jnfU|dapamkmg_d7-`83fbY(n8t{oH>2i z>WCrLeaZ}IQhf$mwISlscr1ZLj^GoPVGMEb!jRo_ZITz*rp`k6EJJnoeyKg?k(kh= zSX-cLPEIlFkE>m}PCr~x`zo7V@8cY?rbs6y*+^J@ib;So^ZcDO(yr>&amTmXKD%MY znKTCTkTj#z6grNwW8oSpTO_Sv<;l_~Ry-O^)cV--ex15DDTk}1-;2xa^h)}PwbuVHSp**i+l zoY~E7ui>xZ)yrpL<@h66XmR0ok%63 zE_8|Z%uFnv9g%3&$7OU5Q&*56Fu)9*PCb>DbTt_1kjeaAF$ zM+cQ~c=1@jufFg?cPU*%V;X%ok<#}HFK@7Mn-!z`e&H6oJWFIV{K-UP{*pATjA?Xi z7+rNLP>HC#wD27Cc(jp@Yr<+71}_JeFAid*dM>Il@NJg0559WIh+g%?+#k9$$!z&X z^9j!o^mj9uqXW!(aJT2XYONUMcAVpq+wWvuUjxmp$Ff#j&KoJOd2GFPli%HzUC%n> zx5gdZAYrVP4elUBJjrefOcOO9dE({W(D*fH34h~>8S6g(mX^GoOlhrz(YYW9meKb` zRofdZiPU{(K6%us>mA8`s$IcX^=8Jeo=w>l-LiOHVt>) zppM{*QTQi#3rWrh9on-&WD!AD76-hqD6SY`PlthQ549>k0=HGN)x9N0QoTUwBwl)l zFY1VGRNRm#;izqR5ddg{DokY~PG(7oBtjULJu{>|m3S(WYVf7oBpZT9K?( zf^~};%`sPb;8U?Ww|Z$7{qL+m$F|QU4Dp3m9jU(IjK>%LU`5$b&+y8fk=+hTTz&AaOh*a zA&Td&-lsPf>Y&h2TQV{3Y-_ryQ{#d+M4Kk~O24}k-Ju%QpineJ+5ob?rLjt=ZfZR#^(s}|F!$j@Gp45f(px#ofJT5`LSs)r)jOA7k61@*?r zM=-lH-Hv_n%5-2`nuHx~H|eJ)Lsw=e0-@*nDeo#f0;v;HxxeruTm50y7e!;!zI1~mI8Zf27Usro(%I;0?2|F{ zt~1BSv*aRCKUmX4mYLVc)oZ2Oif$s&;m#2D+_JE4b4fc?2z^Hs1VnAG1@U8suk=!k zv#{(=&)t*ZPP4P$p8r-JIq`S7@8?dowb-L}dOfGPmwgBjvlxit+v_J*lvMtQqD`(>8jD`t(tkA7bpjjJ&to38UKQ4!+F`1^nhn{9Hk@&jgktHdGKmOW}wt14maUHS$btkc^k;W$zpT>0JjIH=c5xjKsicFNI?MHkh2W&#(53 zKB;Ap)XFkDs3IN!qknKD|M^UgB9kvRz!aTrc6Qx$ZLUsr7Gfr?LZ)o%I)do@;IaCvMB+eh#3*p+-0i{vA1$Bsd$BX!3pjs;v( z8}|3i&#CKD_EMA*Xy;<(ynk&yAT#^`GZmQXrg>S2?4dDa`glRAdz!j2i0OB_X0PZUlfDA$efC1$Mpn^sN5W(sIsNk3YH1IwE zBCr+!83Ggl2EOxux$)1OiUAS>6~GKJ+qmqgB<7DwtFQUZ4DZ)x_%znPf`0^~(oqQW z0AWb9lDB(DR|l~*+s+rCv1z2jaNRXK`VVYT3D!Z)@k;{k`^%4~7Gi#|8)#M0R0`(H zysorgY=UsXA;A21yEBvo{paJ>WVn}m1_^!(7Celc5tM41iJO@$5!t*qhOip=ttv_@ zww%Dt2K0v2{L7@io*Y?0{f_ufC@f~Va#P|n_;t?XH!5T~|&=4q^5Q=3xh6!l=?lFI7hEBbk*!IJ~RBH*Fe zoXo!$7>Ht=y~n9fVOk|MrgAcQD@|>NotoT9{7J`5ma`gS6y&qai&RL~vn$~m4Tq(h z>WzH>IyGUpKfMhE00uw;fWN;12yPoqUSRsDVw*S2jh(LTClYiRWDcbHYXWq@lyji2 z^!VC=O2`4icCOa>{E_b_FsRRpe~S^{&@H{XoQ0&~1RWB6O`im9=)FF661FqDH@D4l z+_k|;F<}Xn6LAUsz@7fW05PaOE#ttByus^rgG8(;490T$JWvBeu$=GpwbTjXE|-xL z0Py^J6y!99_^*@54vSP|bw3VndT8INFg}uC)UR)PbxLiVnus(R2#xs#StJGL1zF8N zyol1d2}k3u>D38A4N8?9y0)k+vfJGh!-0-}zwh_l+v)YyHC-@n4D3Azf;Wut`SEBJ zy5_C+pGraWpw0+J=MHv?#-7*?y~>k5$4X zctNZ;5--L~pP*{Qpa`f4kr>F9u!|F=gPVFZk9O~KA+`K4yl7PUZj!ifnzAt<4>5*b z#o{oMQOky3BKLfq`eweS)Zc|-iD-J?`Ij>-y(E;)m{=Rv=HDcr)E;qfdSuqF#@}&o zAa8!KA_P{#kL>x=MSSm@!o0iUA^RR>yo8wAs!~ylRiPR3gle@anX-GVi>vegHD3C~ zAb(yT3Qq_lWcY^Ie=fp$Ve^$x6F{7mg44mjS}Si=@j5M+F;r{YB*`-{F)#>HlhU#h zjM*W;(yPPmS1_YF7{sdrC=JY~SBl!&NImuAc!)IWVyUdZj+4DJpL0F9efYl>NRX;9 zv%Ee}N+Q`K@5yD;f=ar%TFkVs7B5?Ydpq&&9t3yp_CPvfPd4q>vUEFpShD#r9!?B* z0vHMV^BO!CyiS=V`|}YIB;*OuCl${&VRdCur9T_6i zcsWQ+K>kNzI9FL)u+?kuJ8?hWWbO(q(&bW<;kob1<(kEEldcwy?JAecb{GC`G-n$R zySUkMw@!g8!14CDeZNDa(`DM0!|}L9B*XN&XR|`3(PmpK34MCK$J;&PET3fQSoomm`%Fv~$-=Y_u}Ti*<`vfA||@+4jsjtWH<6E7$kMV0{% zlzAW=+GvPSZ85k$5m6;N`(e3YZM?|Ki~+1sNxUvRI{=pGLdW230Fpf;BI>V$QYn2C z5$l^G#k`#~BlbeU0cof1pYWJfVU=WL#kdrtG(>X=2?-Hjm!P@SDet#A^js=Z3S0MP7U#e>0OwYhWSR4H|$+&LMs;&fvs zbRYqs@<_gw2N0eUlj{C4cjYFI4=XDlQKJZvK(Oi^^Z5}2ZHCMFEY3&-w|pLgrS$t} z<*i%SCa7lfE@M&)5uZy@o47R#N1Q^{6Cr;2Xx>&7@0xg?RaEsaZC`K^!jX*^<3b{d z*nj_&0-{7=u2>Fp+nrZ%)mup$Wcv$&>9bryVTs=tj%9_vgOO<{Aa!&Rd25l{`F~;5 zr-$sh3piA$fXA(oX5UmiWHw7TZZX}#jmbvti z1D#YGI~*?D1>QmLS;p#UltH|{ba(TNHAq;eN0j9KUspxcyv|hi4ffB z%hyGX8k@;vk;Pyjx$+wbfe2$=dk%C3h1O$?l4QyVOq74e1rmk{nsUEwiNS%w$Q+nl}NBsUBrQX)h(+3!0i3mnK zp}-Lw)UEdO=UtXRMGNrPk^}e7pSeU6m{7Ut6LE4vmUNLotC&idG(n6&UzGfluP62} zg`LDx=yn%N-Rr^WjI{38des+Fg}?<%ub#s7Zu&HhQbA1Z%E55Dyxe%tV}s+s)6#1$q;#-drH^HehX)NUJ1DRgYGnE&Fs< zf-Df5$5vV{j$TKoGM}liXBLaaNmJuKJ*v9aJ%FDWCmY`NmB>MrBjE8F>Ee(IMmHZQ z+q;gw=D8ZHyPieZQoE-eO@i_Lu&eTwoe6p_0SXZY)I${O+1`Y%Sb`}M@xP!t7chyq z8U<=-glT9rq>hAUc6_K=L7P$=eYqKn&4X9h9nR$&9t+ausPAisI7F*^=4A29s6p)} zxr}}m0{WdIu9cz1K%-KGDusIn*bA=34*Oo_{R#d-7OBl=qQ5e(HMI=Lw^k;wCFwja zVt{w(u!1&JItZH+LM#~<7)s{-X3GHaH)P+zKNz6U$h+DRdX`9B(&`m#YPp`@a@%e>3-GkC6b zO%kFD?W{qOc>Bg|1!JV*=6J@y20W^7nm1%HLXH@J(RM&t@ol=b$atfzr;tGBbAP_K z)HgZT)6?=G&8Se60Ec!3tG!TmAwJy9=i}6Ar9Oz0OBDb8s&fIP&~z4?r$HavqU>WM*QpjJE?V=}o9awVjuS6P7DKs9Cm_KU((#kv<960qu zs+S2DC02JwG{wmCtlpRX_R`3U#JTH2S?MnDWp?+iadQam8$9-0@y*7v zT&q>qmMK>IhYR)aw1{oDx-o-N!>LP2XYc%FYw>0?Y*i$>W~Y7DDO@QDwgxCoP&j7C zC`3FG!|D-=hIo-eg9PpwV;0qB@-We&y_UFeB8mIp>ujY^?2Y3V-TIZXSw6m!^M|YO zl64_7OV|S%4oCm3IOiT1g@ebM+>&9|F5ZARmG1YqmmPt{+;0BC1I7MY=hA~O6-%JjzGqRVa+56lmU)J0Dbqe~2h zxN1!kF@9f};mUp4+wgCGM|Z?|votIriS6?OfUAHJTkU*_Ac+mKqR?c5(?up?R3er% z)vePt{4(j$sXS?wpTOJv|DoyIr<-{+zbXx9LtTcPfYuMR2snvbaPYQlb!h}g6#D@*8RVT?yhGDEOs`PNlH9nr~@84hw>tn>02CMYHnT1}9Ai{b`%q=hn4!=5hEu zGbp-&K49KE-|%jGiKcUZcwytCD9j6_sLji7W_iBGq{g zmmRFTi${}GfAI`WDGEK!uw!;2S?ImdR%*8=43E`5zTFUx;NgdcOH+B1vO`^`W%4$P zPd))iUJT9cOXmhtjr_MX*IUIl2?+Dz{sbP;hZrSg`{N{E@pUx5g39m)^Aw=8J}{jD%r2x#K~#uE13ODVVBX=PD9=2o!2XV{)DdYT z8aa#aAGp(e1ALrvM5*gD(SDYu$D+upJt{WTjt7ViMnHrU=IO?~Lsy4W)IIbe(jiBN zG+pax*?fs6U>Uhmxsi&CkOc9yNFKdFX^E;(`Vy5E&%IN0N2zN)$T@935K1FHJZIjz z3C&u7R#Hg(Sg1$}QfD)v+Aud2Zyv!-bX?Tlk2zOZBIeGy&MwA=n#7i%Ik;38p7pS- zU2Y^H!E%pWR5`2~P;g*j&q>aBM}y={HcLr3TtJ{-0#!tn)cPnNEU6yv*eYaf@7pXY z|8GL=keO3h&MY!~#UUAyY=J_b7^a^B)>=BDqKf#LkCN1NwV-({2%KaQ`{2Xrc%|^= z9Dm{3UfG>qL|&%kmzn%Oyw1u)krwaZE{j)m_Ko!|BhknZ!)&hu!Iey#`p?t?ZwQTy*)W z(Lwoj`Dl*j+FLl16T$#TaZrT6@8`sA!fJo0s{#~b_IjO#-8cus?Nu~X!)k)4$d#`M zdnX`ibEMc1zHvpqIJ*B$1QvoF){&1Kkq5K0nA_Yn+yu zl#?xS-U(RJ_8s-wG&Ab~5F%kgVjq(Fg=DwI?+ePj@^KT8jxYz?9K4m)z!sx z=acxgh5czi`ujS!dhV(LYN}B85_I6ALT+)YBJxUJuO5swjo2kc_qR9O-|!%rT5Gte zGIJfrEFR^zc4N>?HI*Ex1@-zsKtxt~gK-K2{BBD$tk`)`0Y;~+C5H>}q$zaZBs139 zk&Wsc4i+3J@4zR4L=46^IA{-xPiJ;7d(JoZI<7h^7{ndJpbX89A-lS_hKtuI{B(k^ zW$u!bnXT-=F0@3J*1pP?V*X)-agoW;m@Wz0Z4jQJu)BCqh~l3fI@hD>@ByD-Ux==l^}Am zxuCVO%d!wb>9+-^o>5zUNxi?qlwH_a-7ja^Dos}qUb>t!6}pMbv!sAwM03Vbrek@e ztAM=c>^8?q)*$?vtIb|1Q~Rf02f0tuu0yAmsn`q-S6xx#`|;7EYp#ug^Ef&Sp4I2y z-LasxCqF6Y$7Q8=C+qb914H!07HGsE0J1P+qR6;aI%2t?Q6)`l&lXiMp_bVD<&?F@ zy>7!rABl*Tc|hZ0v#(K4GjKnh{NrW4TzYqNnB*Xm4^3`zCoQGNVt^$oy7*w_g9h$* zZ|?RyNb*O`sI&&rvpjH(&N-?h}Sl)%c~Ap1u7 zfq&LwW`%#4W0==E<=4C^Ql=4s91jTbbL~Ov7l_IL^jnD>g8qeUOD;D~Cy(-3_H}wE zYx3M*`o?9^+4vzT^NC#)s3xdymMZf|-CQv4{)UYe7~%y~y5V6sa7X4Tz=jIKDSY82 zU<_@?*9W6px#(Z3yE7rY1hN~9hNf?=S`c!qdFQ$)!10gv$+43ual4RMzs&}>wtz^2 zWg;D-l^oDE!FLzZh!A&@n~whDNr~Mxep&Dz5|PuFrT;*Z3^gzeIS*K*J8t?jb6eG zB)H3@*|Mkyw`n0s2-=3y1%^qs@|ys|EM{5<1Nm51rq#%LA?xAh1IJNrvawpAs+l$D(}k88pFDwtFn4I| zr$DzM4hE-H0mYU{M|HYE`#LI*NTDU)zFikGojjH8@3)kJvm%e?B_6mcv!qxp@Sg_w zl%ZIhWFbJJ1Lb+axe3=9>Js!9w5t)#!to35&PU^shv_A+ytn2xd5d26 z#_DT-JQ02GMaJZQ+}3wxSGxnSOxA%%K8w5UaYWkaA?{lr1JhyO5H2)YjgJ=Feq60G zuw2Fz@-=%wAbN!^_byg-KZ)gTe2cI{607}jd;5^Jd>XwfofRHUc3_&)DE($L1$)NW zz2xO(Nfkcv&!ZhA8>)oafNj{kS?1PsI?t|3p&2-5W%yhMMh;A$RhfyF4u9g|yX3dy zb9--unXL9o*K0y}qdl&`^1WD3lu+@%xXbmYM5X!e3nOT`{Xi#hpE<#mSBSF5YRTwe z&!99s-ZLuA?AS_&eC-}b)xq4Q`fG98FQG*vA;YM-(aJt7x)NF4i`kbFxMsZCIoHvC zaSaT;=c zWu&Vq-K`)LO?L2nDw5(1j~IdnXfS#%Oru#R`Yy0RHeBDFwp}Y$PZnZ+i5XL7cl|!u z+MpPI4+10GBZ7!WN0cs5_oXXwusB>eO9rD4J#U5%#(C1t*VncBSAJxKh3tM4ibPs0 z*YA2@79%w535|pHossT($<2Fe%{Cf1|&y`yM|6(&P^3lmGEbT1%Hy6t)9xy+^Fq zF_hF!SVtnd8pp>G)Dcg<>m`G~cyDkJX`A0a(>ZfJ5841aYRDX`(1c{8@G}o&z`F%5 zr^{6b$1wb~jDfP8$W)et?>wex@L?Vg(hP1t*pS7K1)dWZET6|A8xu6d1K<8~kue_R z-v-SU35BE$QN;oUF{1)Ib5neL|18IV(&U=H`Wd}o_~RMt0X@AJziL6A26*~a7EqX? zF;V<&@X%T<2J*BSWst4y#W^Oe>P$0I3sh+}v;^d82`CAPrlz3*ZDm?oH-v`2K*otr z7aDtUg)_X`E#9I zE^(vSHtC@XX^j+9{ivptq)CGpMwJvAW(+t1-fkv|)pIA{jm9i?X|yz>*~qC$Ls<~2 zIkxPhbA_TfM~Dan=y=ZXlgBgO4kzz#CL+DA=TEDT4R4Vbz4+Y^g&+USMtz%^F&pNj zZ(H;W-K0|C=(@nxjET}vg7qCi%MMfeJf%RLbHWy4f}xmydHgX_s~gUd2V?dX?eeyi zINw6Z7-F?>eY&YwX-s7gw_Q+S;QUgu^?A6d@$B*SRGn(8@iTze2;RZi^alVf$<3X? zL37AkKqm)d9h*lG{8DYsArq#tG>bTzYhxL@!s#!9wa_YIw^?tn_mJu;2@d`pnD`6$x?8dKP)n^Bv9` z+uUPUP@anA3-WEu_eF1CN*ESJd;mi%l{h9s4w=kXn6EW8DDuPMah#+&JWwH3i;t27 z)R0pcuiZ1P-=4IqKOXh8nw{f;yyg^dF^E`gR z-iTfC>=yp><;GcHJ8Qt16wt|W)Z=*=VPkb&n9J95x9TeP7M;fUaeLfX3F4c~8Rjd5 zsa)t3zFTqCfJGe1Up@IC0?!lMC#qrxL5&x==t0rwX6*${7LxRWYBN`)-c+SORUqOo zummbwvI1HikBnpUwwfHhh%t-D?XkX3c0QY>)$2805f6evM>&n~&c}ZN^Tc8&i6uJvq_y^w&}qeRk*t5Eh;Q5}@A&oAP%e z9lF`*IMB@pgVCjy;xG|Zg)(=>`b6wBnl@T!UquS|now}cTBYELWyhM%Rz&}MQ-LK$ z6#GEz=|jZ)B4vw$Oih8f{S9F~7*-I1yDz=Vre8AyqPp3opVKS2dXSrHR@BkGBv}8~ zymB~I3PZU-dh`awlw#KNd2MgPsG$03?Eu+Flt_pK?liPE0EZ=r!$G;wb#1BOA%;_g z-%NdeaTs5PPja%Sy7p>k;8BLI`0sU&?}M4zA?RTWsJDSkE4>hkB~>kDlxwGEvuPLc z0Z8-Va1G_*;lXV)BT9kfj+`=9V!i$Cg%YW0FABzGx)lERW7Nlu+hEst;tZs)9$csZ6PDaCuh@nwjsfN z{|QMq@)6vQ_v2_~I@l+t>m{$($Gg$g-g1fanW@ymW&MrKlo+eL>w7} zxrG;klns(?&qvl*yIv~d5HV8yApui{F}rofHmHv3jACn0i3|k0wWb;e5ae98D&&W- z8hO&4I#X2~iP9P4kVpf(yh~H3+q7)z*o<4XYJ6de%!rF_NtA^TK+G_U=-hHW895^` zZ}I#Dj1SM$Cl}*MlO^O@<(7nNdc>pLi+jbYgza{EqG0&fe#HtV(s{I@ zvWiiaVsxHb1jCZ%N&6kVi9SnKCT8FXL6T-Jz7sj_ykA?ktU$WBe<%ZiV z09N*R`|n_^z42fXrR}^U))pVP_xq@2`LlCsa%LiD(cK(|sl+Ri{j>u(O zfQR=N$GWU&{ADVAzOJ7EXif`c;c;J6PKF+p-VjIA--Jn4H7l$%jn?d5 zEf&Y+BqP!-$D8Lb2)R98=d>JbtQduAyK9Rt6YD{Ux0M&9xxTdkO{K z3G^ALdO`ur+1cAGE$4JxkXRVT|oSeKQ zI4&!eCu&JYVugf=KmOAAIZ;{*6f`t!Lt3>x&0pl}1fG?voFED;?(k)-PW0feUUqUG zh4b#6TKmpusZ5imG4-h4N5WBG_qac{4*VzF?Cj^+Vf9)Wnh%Vbn{4Te6z#8@kcd^K zdnqdmHi(46q6I_EC`X?|XPWl;&5bC$gs(QBu&)C^U2!#$@X|Leur+76vn%k$cq#*D z%Al&xDean*(zsBJ8GVE-?Dv7rg`&0JcE*a0rs=d=5*Tbdy1iddq6v${l=aq|d$d48 zeEfp->d?H109p-8nM<$phuX_A$CvWv(1Th7e^3HS=>e=W7alf)E+A*}&K{!k`8Zp7 z!Be38M234uCb;Q0Tp7A}H*y`2F8s*_`#OHxb?V>3mwM$BZNTN(Xa^%pm;r6E7=Rk9 z^wiDNo{tKveexLZgBAGU$_)@ZmJ|yS$Dx;lp{0>gmua02BFDeP5BR#dkwpeF738e4 zIWIo_o+P0z1PG9dH%wiT0~%=12UOZj?HUUTSFf%^DG zn02PkV*VW0HQyLepls8k^Hn#Lfae%G9wNH~P^JfXm|c5xJ_xLHlM^?2O6-F*BF&`H zqsTBiqos+Wi>~=k1(7>$JKC_BT+X+>toQPw`lKk4S>!E-sxr($a+Yt|?{M9}Lkj9K z+MOFOOvIkH$l9q%Je@;+L( z2muGolj7-s1AP!ltbm=oqOhm*hN%@9KwBO(nqGTY z|3jzc6onc$pcXZrZB?l?Nk+f>LY;6`-9g0GscUb$rqx<8Q)-9*60d$MMX$l~m@R-aV6pOW3%Dp|akLRX% zi?x{w_;u$zKt<^b_+g>mCcFF242dX7`w-X*b4b3OoHME4HT-heU7r+rgIdKx)_jALgFhHwLRM={%H7BZ+8M2cp;r}-SJy2tS>AH(ZL(;5wXj^ zDRy#MAiVMjWy(d-d;x-U4XrVwf+7N=vSV6Khcd;)8q^-0m;%6>sblWk^pXcJoF@`n|DW554 z$ttJ@(EeQhnjrVhq>_q$$Wh63DIQp#s8~KFOovusdA=qe6URs8qoeal>GYaM9T)g= zvpc;HJ)nN0ObME4V~$+ioGE-AdBkR33W8nNtZdQj87Wh2$)Ot6W1_C^3EsOhX)%?c zWTvaSn%CK50{*Dyh_h`gNaCXi0XUAL4T?pUaDP2++|~|efE7<>_jIq>%V}@_^b?2& z>+UXPt=uR{!P@Cc;J;36INV%(y~gv3SL-L-Xao)d{LN~K?VbB0=L`FGol>A#tmS5! z&eC);mm<_uNVq)l5jdRo8@{J7fzjP51un4nhLS)R|@C$nB_}*%cOd%vgymwCVO59 zone$(`}_NST@H^FV;Jiw7qq9ki5%!sddPZW0`!%a>2`|G72MHc2;ZEm)xu}b*zDX- zvx_MyJs!K3h3ZUZU*kd5Y1^b4scg0LftxJY{E<8_o(=}in?e^IJRG(w>v>Q0*^v@7 zF|*m>A$QlWf#`C^&GX`)qqv`+H)`EIAU@s$KB)ec0zwRuS{7JXiGVHTYgSjP4kNBq z9SwMch`C5dm|2nY;1tegO@#bbnvdle6j>!l$})8-%h&wTS-}iLutKmyVt=DU7#E3> z_z7}Hwx^uKWQVL5;Pwp@nu~=Ms4ROcD zR>zkI!x3G%N7Y|Et2Z* z4P^((B3H#>6FV3IW|ILzYBm&T5mys&UmwdD=zItS)dRT>&b@c>X^Lmm+(eu$?qZ26 z552!8$hSVINn5k$N~VKaimR12TV$$dX*m2M8dd2e{w}QbRU)^={d~x%@eg@&yo!^kQ7rOM zh<@%aC`y+$6`@--E5vf`Y!Mnvhw8N?#QV%kw*s-T>BQS11f5!0!`&NBa)$vC0g|)b zNF~HEbPqOhkh!cmw*W}DnL$~nIj?5<<6EIpzFbvF`t=pJT7_c9$?M7ScIx6zG5GiZ zoK|Jd#>Iyx+)GSXax=Ew5)F~2I26mULTp<0<@}F}DJn+e2W81?wC9GVS1k~AReZc* zJW)5vgY!23mW>+5lqWXF7yfYY-`PZv7Qx1ifO@wA5wf4vi7SmFngLvdtJg9$NnIf5 zj~Rw_^#X#c^o~GI?Z9OG>`XaV5N}mz!lP2k0X#Nu{<9cF9Bv!(>!oP9XS}@(p><`K z@WR07kjK}mTpYETtskJfoX(BL#g9rJ4_Utu*HG>tA$T3`LS0MeF@J`(QWCK2nJ=!} zbvJ9ecbLIO^=-|DQ#sY-u57BgGzPQx%wcE_sYlj>%Nl{{3P{|yG2B`{n%)v)pzsMM zzBSUh>tcs~*&EJ!kQ3YW_6@TwFpJm3EI2wB_ox@^gBfG-AH|pvL zJfDC2`-{Ms`eFkE>A2e+hFw)|?M3$O>$41fpksS9CTHE}Y_0w^QD{WgpxbI6K@bHF znBIKE(8IwmjOifef*}T98)rYi01;i#F03YMtsh`b`lk$~sUY%%^bIEbeczPYGS>aMq(K>LRLL!c5ou>m1==`H;vgsoj_te;X@|3 zyS~+~#I?zs1`UNLm5PuRx+u^ZKH&*WUSobC2e&FOG`fCg9Slp}u~SU*meq*WskEvv z7AUJ*Pv8eX3gYjeC^1KAbNJ3$>TdceX9Cxh=DZ@zG+$Fu)kOJ#0&|L&S4RVkbVFjL zImMPt-HgF8tgC+=qO4Ko`C=ezdUv#V+=rxCR0e6N9RaauH<<_=?zc&*RyctV2qI3}P9! z#JK#34$yKL*ov`AJ9efBdwqAFPF848ReIU)gnkvKn)$nnvN#Dg^Oh={MSAYiJlHW; zUC-yM?c-2OPG+-E1iXePBRp(jw!Hq|`rkVzl}HrOd&6Lnlk(~Z7>u5+baa3|)YQtM zE4o>mC{Ct4L3NRJOuVtNDtmXAJR$C1Q7>Ti;!lFOB4Ob;=v?>IrR)& z_;A9kvS9+3oWGOkfT>nL*$0wNlT?(czSHX+9X8pL+--D6lkp5Oq%pZ(j%2v2+R|Kr znr8U6$bUUJWCMX@EQkUamzUi&5@$#tL&ij<>N;eJN4BA%p9y!N2TVZ4+5Cg zS*a-%f=c^+@WSpwax4NF!BG3~>_M7(&TUX#8_n{qM zfI&Qho88tZGq*TH-ERa{Y-)+sRHPfc5G5eu4+Gse!{|pPR5;7tumxSrNaU8vNJx_k zvA~TYbR$VHvKj7MfyFF8D1r*-kTecLu!8-lC?X#F#OFrcmEN0IJ-fshpeqzBEMbz^ zP86v%b82b~N5&N}+eple?AswT4JF5XB;#{(r&SJ$(A<%^NaZcim!Xii1*^PJ_^P|T z^nPL6)~Qd|KK;J{XAhY05*CAn)1~R9O~rsJRa^Jjv3l8N{4bnZqkg@N-nJ`OuCx(F zEQ*@WrFBc|3fKQmO%0Bp+qz)w!hCyTT4KKj>3!Pv-tBBFdT$h2E)D?8Le%SXaiJc5 zi#it<1aHX20e5H3?8Kt3{~Niu*Ja|EqQHU)G?3sHQVXrTi=2XIb;crEov|p-SF|a6 zigyc9%sOFvYSOu@dt7)BG4wTiYU2yKB>tT_3P~BZX*}!02j5<$PnPXa5wq@{M2%KG+fZ z10H|40G7dK5GrLHy+PyJRjI0b#<40?PBqG5RayJu|8>R@efi&I95EyT;8TLR(%zAw zZ`eB$zi#hHAC2eUk)nw76fte#glNIyCwuS$NDJrLNtwWiom}VjlB|xN2Li_O&T{zLiuRTnpI(QrsTXoYf$IhdQGbVhISPG zqe2XrpbGSr10$ncdd=589v)h$iId7!H`p}3;40`1#Hz?bsEVe|F&a0BIdLmHL~<&? z3CrjEwHTQ-cjugydmi0cQ>$@6eo|8*=KX#Hn=P3#>HQt+>wftM>0Z@Rb$RpTiA=jB z1904{_k;{pS2uINRCEItMAe>90d*m5aSq<=?27Z(fbfc^O%P7G=zUqM)Dvl0 zQ7JpdxbHU->KQGiK_$*nF*Ji;5VI_1bBvI2uwzXB7#eqm7(F|s#dM6JEu=*;KhRNO zh`Tt9VFE<<4T(|Ss6wg1v#h9snOONTXE2nItdw$?5@Yywk$CO+SsyJ~v~||__0wmp zC%+`6rDvw4t-WCHUl*rOOleqT|5?djGnzD^w`-

_ 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 SYT_{{QN5GB$em6A0000dHT^mO literal 0 HcmV?d00001 diff --git a/client/src/assets/fonts/Roboto/roboto-v29-latin-700.woff b/client/src/assets/fonts/Roboto/roboto-v29-latin-700.woff new file mode 100644 index 0000000000000000000000000000000000000000..a5d98fc6202f5cf5fd8b556ca834e8e9dbaafac1 GIT binary patch literal 20396 zcmYg#V{|566YY~^Vsm2K#>BR5+twtR*tTs=Y}>YzCz#mA&HLT^L!~ zJ@~D|{6-$s2|bCin+qWT0P`IWAn_k)e19~VIhfl50I;Or8kTQ#>fd5lnj1QQ`@(5_ zYvBF|C;+Otji=eSX#xQ75CQ-;y^q3rx)vt39^YYtzBS)5K#&+&NH{D^4Zk%K_um}* ze|TS+*Rl8}0RTzbZ=3KNq_E@=vlg~4-@cME-)o2k0Dd45k4hcd*c*TAq`&6}^8C%i zlmeRfCxD%`8H zz{Z5m0$W#AS5sH*Sms#c==xKhU}{C)N|?Y{@bnfD6&Y3u;IST^0v1Q6i5lEfp>E6D zw9;&Ae|DT^eb!>T(cA_#;$*Y2fM^?KPONts9u-q}8P0HZQKg;kGoy?QIMnI06?xiR zVag~G=lk?GxAfWvi{%wwXh8Hi@yrMVO#ZgNo-`)#$Wdx^A{IhAoI8ek4!*L5rjOkI z*~QRG-pas^i_9jnBq*+dS5g@Amx_m?ljL!DKXnM4sRSj&T%e;M|DAdv$^j)b6jP$Z3Y!&fQ{L%mXo@ zX|axA=d8R^mbJS>x^5qQQQHc;L(ju3v6g5DCfRUUU5aUdE6d!i4DycJ<#GF$`aXwI z#;MFtmO&XN=}8P673acLQuatXqso)T53G1}uK1rHMgnjVL`<~J<;QMy!slomi{33z zX(sj_S>lwCl`p>y$wYrWh}qT4*){9gH9b`QjIW1Hx==PlJ`<&i-^8-6{r5S0XZc-u|6S%?=v~Q$Iu%(n9@Vo>{H4n%7wS3vBMN5ey!ihr ze`~u$M2$vdjYfvC&pVw_lgD4%kww+hX|c`Ldj8+#M1*amN<`#F>WA+@WotCqp;ZoH z*Qr&ZQeC#>&i$`krdP&MM~=&RIq1K&&*b9μ@r2h2zTF5D3Lz~+tNz*d0Io>VN^ zv~8jJE{>VVcDeR92T1P9lGV6vvo2Y1)F{fVk? zw*H3F(~WDa{@pY05W6bO`xkuVw(JklJE{3BAu!0;B7jY$>we&m5v*kv=C6g6*sAtw zYm*1`GqW!~ZIcb#(AuA?e|)BLAgI9&^ieB^q{T0o8vWQfnZKsqa_;|r;XS$&;M?{d z)5aYEE8+3tu{bY3@j`c~+(Tm;{5Fu&_X;nrv2mM}qI=14i`||ivl*>3(OEvFj4ERq zoa;wcTnbbpDlaU(2fQBaWa1jJnuj3DK^2OF*r=b1Y7G6F}w#<}fhxD<}tSyxvevum+z6&G{HDyv?buU!(Q5c5bEZOYZlqad4r*e@f zy~P)E#x^c)NTbZ2GAVIF*om7yE`5)HeU5g)vX4J@dc`z@>sTEj6{@-0ekf}((y}AzE^5LUV{tI)W&Vz$tdJOUP)|wA#g>nyywN zYmsEzq(OJiRq6jws?M!moWXdxGZ>_#8n!4OoJqfRPGQoNViu(~u28u!r@t{D_VT4? zduuS}?McXphmEk81X)Ov9mS>U)4@;}WLBf<$#6|-(5n!cF-2RTT1p_2r}9w};U5@$ zAFGezy{+@@iG>Ch8tF(S#+`0XHFjv8^M&Zp245OR3bwyB7Um5C%lr{>Y(nX4E`+*^U{oV zZR{(Q-I4CVv2bbDza>M$fxeUUoyo|Z#f3olsczDz%7H-ogj9YPVR*AI%=Wx!)Q8rU z0M#CBGeAQB`@`a~t{X4vwk3chY7ad%$pd}BGdY@nrpdAwT3UzeeKq+YdT#RD+GhZLez^hyPU< z6@p(uoP+qDot#pD2SfI6p+RcwomwvyL6x7x zJl<58K^#P@%OI*8C{srQ&BY0#TDofik5ahvi7rSvD2yfO2hy)CAmB{vn~D0GERfMi?mh%c3ZpswCYoh3m+5=f1K9&=#lvUqj=u&NftsB`kmm zm_42*GX`EU3$)YbDXjM69?eoVLHrH!&%5@VN<8DLhB2k(ubA=KzK0$&-i^cnkzHX6 zaQ5Rm*)c|`fIjup42ok=tbp72U(DnvGKFG8OtG0JSN9$Frs`BzVHVOV6spz^?t82< zjesC-w9SWgfxazYzRS3{!NLoGS1(}GvFh?Vx}CN+yCNK-T#Hrm4qCgxrUd}zs<73Kb8?W`g9|eJU~tTXj3lISqm;%` zEPbSsq%1?MX0#f0@j}#hw0}oYCaU7ZepUYO-kSV%1+dS1Z2+hN{{TgRPk*SzDtJoX#hY2%>)pF5dmO-`~sl;hz1~m{{^5yU;@xVN&v_Zy#NG=9RTRJ z_P^&R21NXaAZCd9`dND=u|QN>o8wTrBj5){hd4s>Bcp!VJf3bIKN4&m#7By|Kku&Z z^hfyOCVpjr=dlkTK0{i1L2g^boqWa16J)|&1p)7-wgZW2yG$gZs;C}Bt zwkDsCmX)jz$Q%1V7HP|!qZ!iq$*Z8%jWDoObtjpYm-CE@@k9B2giV~xvqUknu4B^w zoLeF^LwQ$t)uuNi;0va3pic->O?}3-!~`9UkW!mW+-v4(k!eZ_WrZFgm1)D8zFXPv z+Cc$8zrFy79_v-VA$8D3o}N3`wzz+}Z#stN^(sb}QL6Upfq4G}@fM{ed`ua{_df3$ ziE*!-W7Rf#vKC4jRI!$+vqr($yv|MM-hI5jx_VdJoF?)=;iBV~mm$}cey z163kY2l{s^QkaNUd!;+N`~iPso8AQzfgCM#452kDdXP*Y+mN*7Zo5ugyZE^_;MTX` z24X#_*Rxn@&ul3hfFS@I0KMNwy4c7*Sc*DIa*O5h9s(`|(5_B+c|ee~%?_bRvbYhk zCfGE`zYIhYQ=Z7_g+|E#X+;^ijs0k)XdFU}lLs0sO9{Ccjj&0XhoNZd7I|v=O0-Mh zRTxIBP|FttLryfjTd5u#A~HzUJ5E7_)Iv{3LPEzz0wxC~FMaFPXt7;5Qk4T$Skgb! zS_nfFuS6z8(2hp*t1xQoM~q>krmhLbs_CmQkqQn?9a!tqrW>-Bs9gtPG)17} zGvxW7RqcPU911$13P|gukl>lC(gBp|=dB(J*SzD7bF=;-2-K+q1ANz|V1CWGY&?uU z11iqZ7W}YE>PEB}>DCsL)V?kZ%pKy|I=GkZ4bW?IrK9HsOlL2~5K^SkYq9#!wEK%N zOTojL&lGB5rUW|*pZVgtlzM*D4;H6*f718`v)xE9CK?MZ`Fmp8B$Z;#aw1+(mg9;3 z+VQI}1kn`{yrCuRJSGygvZ;teDX6V+8x>fwRRrE1mbK5J!K$?VIh4pe=^eZtB=V0X{Cf+XM7#t>r3YpAhKV*B^o5h&$bTT$rq3`nM)k|H-dv2IYwfCoD zC|yBHn=AH9ogVm!xOx{j^Te9v4%#N5hI+2XRru=r0(Tiz9TM3cXDLvi%~C5z797tq8~=ofx`X zK1tUjBHf_^MMw&)5Xoe1DWpb^_ zS@CoekNal@c1baZoPAo(a@GAt8+QwXWOl<{;fs+`Xxqj2CAOEA?6e&O=rZ_XRoQ>6 z6*2vayefp=E3t+yw?|NO#&jK>tx8U1&(Zt$-sjvDftxaWE(=rjmt$K zMMLGV($6Fj$)YHO0sUIFGn9Q}HmgFa1SMix9&+TxBvZJ6?X13 zYkcK|+uuj>z{FCI4mFs*WPD`+7;1l9iTl3lWRkw~BX9vqm zu>sM`l+8uFv$#}<+xA7sBQ8~xbtVB${4dHbRM16{XJi+hpID}GDrj1n2npxEMr*tT z)DJA`SQCKz66A);k|^87r$LPpB$Ylc@9H^oW=t7-M+b=(Du&gy!y{!ey_`;`Kyg^? z->t?Q5fFEm^5~AG9e<%SShwS(u@h(nf!YZ?X0{|@q3At-IaZ47FYWyrB5$YiMl|r! zcMBs|c1J}5V`Gt@{JwI*;W4g|n*CM{winhw<=SOm;}YRlV*VT;p&%+c@cG%ov`IjG zjBn%p!GW1554jiWYbL|^Clv8JJhDQO?b6(>*nGu;|ChQ)0qG#jo|t4QMv%mb+;oXR z!Dl0Wf%51WO=c|aHtp~9n;X_qa-0&}DZ-gM!l?J02{TC{f(XHVWS|@ylMj{;hqfO& zXBdjIKe_D?0UzkVnAL4uRRHcR^juL8Tp$}^pUz{qLOt%b=uA8fOoDD(wSWwJafO(~ z&-Bsz7_H)08&?h3cf?-G`cC79u|&HZ0v{X@Y;ZCUnooG>QOLRCrawaV>HD%Cl@H7@ z!3jO9oeLA6!7SGZLnJB~JUst85uExa^YWaYJqxna(`n^r?6%0cX_{o0_tkj48m-p4 zxC82YCd~FXHs?=~z?bLX^Lp4rgwBVoSFhGtRq=ut7tD=_lNAvwW|T~c@_uD!my=Cp znk3RN!61<|KqO&H`{zT1h8PG|-atRj1v|GXS+~*4p`q&Y`>0TB?4>ICQy=UJzrucq z1MmA{;`il0v$*wG6_*Clxq+fBKh$Zuj~^0 zVtnhwoEFfue=9d5z=~i`2Vt5M8~Cx{ZoK99oPE$6Tvn+|74X- zQTNQ%js3y|PHNHCQnaL@gJ^IkvG{@VnnsZ178e97x~Hq#1MjQAVZPq5)$s+bE;fqg)B9 zXAe{0&eaLxg47!Zx(!FdB0_)<&jK(f$N`ZC9OHF^#Qu|@2OH(i`eAv`y)=Q*1O{sN zsBc9ZkD%^D;-8O>wmW49VL?k2aTpt|xIZde?{7q{R6S9}>_^Coc2tX#%)(Q7hUsKH zUfb{mSOWShlgD@XeTZBJT1s8zALLY_dqt0*vk|h;eH{?>_;OjeXRjZH>ud;y}~3qNthu_2*Krj~vf_>wKpQ39zSB#*8;8 zconAm-Rw-!X1H}6{w9>>O2WFb_qS&hOM;6yi;}K)H3$G-O7s2SjuIp`9%7(86afeZ zjQ8CXfH9B@<|$s6Vs~P?oLWe`hE^tIL>8tF8#%OAu&5jl*4pjnow|_gCkm9G3zttO z35gVq8BpqjHhDR662@c*BpT^O#vIoIdkEx0C{Ph>85@ z+nG!UQuyg`sdS_RG@VW#@UN+NwY)jO9Yq>`rdz+@SAA|IumhtJib>uK1jKDGd2=nw~fS ztQTKnsben=VJH^kUqiwk7GSrStg)}B;d9v?C^K+)*o%)NT9+p(;lqxcHk44T&F@Wi zf{SS>S0*T|g^)ab9%S^-$b5D}19#m%RrZtXXmj{CRW6_wKVX~DUu0Vi`4;2QR%kI;fJQ+t7o6`Y=8LTD)dB)Z4Rd)9W{;cLRmH+omoBV5ue3J)|j4|%; zX)M&hI z@$q~5-hYzCIkzqjb(wa&c3CY({5C&_J68`GUAk9;&DGz8z81WrJiCe6szDcGm*JFE z`x0f3x7-svvs(T_U>9aQ*&98uHi6S*wf2pjzAikr42s7lqLOA_Xuz>5jDo5-5>;`@ zGg|Le9n_hl;?!|FP{%TdCExW6xDJ0oG=wT z<@Lk~JP95sjAl8p^@Q%SyKw`o4{eO<{Ymm=;rv&pQBBo4udWohJP4<6;z8STn12NZ zqJE9VW-#du%uNMy2}}psj}Dx<56g8Cr!!>Z*YOs-Zd0lI_IfaLNU&%2!*X}QOut1cEN5;;#)s|o?y_iw|Ob=*FF6j)7DuKELzO84!t7|#M z+)m~K2VrLMsDe59mCpH|0##{l5?o=AI{LQWfLJmCjZrkSE(D&BGX+>HcClX93sGxO zcge5mHA&pJqEz;pXkxsGkiC?)yxC!r!2#sFf6Fi$>)ed5`LcMR=e*tH3s5Ul)Ag>f;fXH45P5$*4#OgmFfDe_e^e^C}+znSS`7i=ju3jE6Y}tZI*p!LyQR zo^oWUV}kggGoebF&|bJAL?<{u)|?cOfMXeih;9?YmQ&!S(+s0yY;fvzWgy~CYOomS zRVkSAvYA2Li3A7)B<{-xhr4fBP)Ha8zH>9Vt!}Vrm)nU__y=OS_XKsQ36YSWKV%;} zJs7KZpSaiDuZmONtqN<<##h?9oU+l=Wx&sC2Fl8B`qoq7j!T;3aRyJ+5_CPy!s^^pBEud0EkV@cptP%yPR<YY26i-Ed8%n>zQ9L<%kLU--hL&gEu(?%+?g(U{D>McHC|F7$|ta$-4?gfv)n z^8($9h0eAE62YyPDXNFmI#XkbP~-qqxt-p)OmJhO8LfZ^6JEJ3*;hrOLti+Kszj+; zq7GUSMG4aTX>F6f05sgeHXN9n#`zqDH>zZsw@j6VHqlW96uCO6h+?%@5Om_+0cp}( zt%wU?h>c+pjoI@*LNu5As4W8?v|dP{6=C`{TRP?_t;(1z)3YmuMigSoZ!-2qH=>t> zHMtuk`nwC0-8M?o-h!gm050_TFtWkDeTrcb0T4q-s-SuxgyF=a|nE zq>?W66*gL!lIffom8hDL!gyB#yGq4_6dP(@l(<7NE~N4hF8;9vb5XnX=vE;?;tqSS z7t|jeC=K}tw<^spFt;l0F8J#?YapyMQDbX@7yLRdj|ATb{v}_#U+GlzG2#_r$I^4M zbRE8H(v}ar4%LEGV10KH+`S1RNUM<2>n!M!Jj^WCm{F@Nd$4n&jIa$Q=}>E5jJosa z%%GH>|45MKf_P#mW|e7z=YDNux8KcEnjwjqVUQw+5_O%1M63`cuddL*`LvM&vQkPI z+IjIDXGwb61Qt+4zDW_U#tTQ*dItOH{6`yR?mb5PXQ<8;Pxo>1*_Xfug^p5`MIP;o zs`0h-tw?e z1qwhEAe{`84sFoQ>ZRVk?3i&LDtyw?^aat-C?OlhBR2~y=98K-Mm%o*q>)sFKpB=L zJ!a9L_HFVV;CGh1xqnwoOr-_5#BTaFXYy!3xDt8{illAxIy-!DxexpOqP;px4-_+R zv0kWEd)s-$?_fWC6P5R7hW!)g5%0Y;CpA&51C=ah`E|kNh>xyEIwi>@iQW=EBBd2J z@+tNQhH@#QRo9XNeottiJ>hS5ep- zlfKz=Ypmo=7+Gm+_pvIM*3*mX*kSmF4#63Gj>bHdY-6k%7XvR=;Y6@B5Xn%v^NIYwja<61L`s zmKc(&p;nR0iSY9Pnc#@ia|pAc@SE?sa0rWG4w~6*YpP-U0oC{XtGhq1A1XYSN`=0x z8iK}^@~hEAsr*#I@y?qkLJ)2*n`&kpb}$hP zTlValCPtQuGOaVY!_-iuBn6{1g`RGAzVG;U(6||l^TZiF=enZV31U+e35g^BZJ>#- zYclVZBtkC}pEIc+e!-N6e-Ks{k1Jl{nuaYUI?KG}7|K#f>NbZ;-MMblO{@?HJxe?~ zb77;GD03N>aJ?m|b|%=M5M>taJ6=JJz@n}rj^yA<)fJ(D0tO|mC=~Q40oM(8;8Exw zeM&|YvWmZrtnwO8nW~-pgOQwiL%zlWE(mKlgqfvHC+cu(QBE!w2LuU_am0E-Kg`s% zlw=DFUP=W{CuHlVOo~{r9;C>fB8KWLOeW9mM4DTr_4egTnXS-nnqxcSDNuYY$`w^K zY{;0dqo`3^B)G)mh zs-^#DcOT#uKX$;U+4_ZQvDxf?Cg#&@qQ@yzu7H`H z>hmktorAm*Oo`ye%r-Gc2>b^jy>DOtdbftS)L5QScKZk%+_=~33vqU=&QaG+Ij3NPL-tbMIoNKnvx7q$3d?IOr z)K*koU2y~tx=~B-7i@6x^V)~A8To#d?hMfMS=;aT7$bjv9$L1?q{e6{{mK$A*NPCn z<2Gl94@OejPwsdcBrq7q;-O$Nd~D&|glQT%$f%uLZBsZN%CPnP%YbN@B(;Z7g!U-P zHtVs5glRI9+reo@@-SV$chw)<&;RNW=hw(TotXLz2H*QZG_$`~Adzf=8w~F05W8r} zRD^^kk0(9N(%o4!$Q%PY(K~;Hz4?XwV)sfwQ{p?S%8Ft#7Qw^>ff$=Ew7$ODCU>{%S&KgFIaSb*ZI7EQrc#zGFyOP~ zY&~bF_$SONR=_YVrc;ORsd0<%iaDUXk+Z^s0Qcl zGVem47kuG4zab%E2ZtRbv?stTF*IpY`?smePVLho^ScttuEN!W^WhNEMt&} zJ-QHf5`D+o2fu7%J)go}fU4s?a*B;?AO=S;f>ap184;s8FAr!oe>2jnBv7pM97_@i zkruQ-5SPE){4C%${AZpST{|!y%3t&~@ClARerX%q+Xn=lh>R1arkD1l5TL0-U1|fz zi1Bv?raA6R1(V^)CUZLy19H&h+IqQKyWwc7ok*uSxiR>|MGw(Lz}B>HbVYpk#{N(R zhD20-weH+r?A%c6UxPbg9-iPmm2{Z(T z!6f5L1gjOryYii>2tqZN#VOZ}e@(Sf%Ne293)f`G6_-O~P)6#cQWcH%`K!>DZbO6c z&CdBx7fOW&W~^M1`7&1~d%E!-U1O%dJ3~+&3+s~c_q(jrmG)f3`7L$k>c~(1=7$)K zzK@~`2Zp5aSk6snr}i{Ak2tA4l`mVZ&X;Z=RT7dnWbh}VN2Fr7Ci4Dvk?PD+RP;DW zK1vXdUCbIm!?NX`geVN$>?K_ZsC~Q|ma!w}Fq)OscDo5^Lg&j`a!pe$5LmO-gM~?^ zs0h(o>(HFkGP}cF9Zqk?sGh%2)ndCuA}UmjwV2O6!|@Ikzbp5ve#83BmbOXKG^TGr zJ&MQY`yQ4Birdz74|Y3q^{;kRwG4jMbnCG?Wr^Uzgb(Q-1$)7@r}Fdg=r5e#zYz3Q zAtm~jb>_UdLVXe<>Gq9Ezt(W(S?t4@y647lP;j=mnv5CIK@nT_yr=akIK<%6f8y|8 z;Z%9c)*PYIek8GE&#DP5o#G8hR3c~1qoL9b4MrLWpgEkq3x>8ym^785&#%n`-coCHLQ=6}v|OLHOY`lfYA|JgFUadSP#V}HXK z6KwVdS)6cJEioe=XhqzOOJ%~m@Nq%DX->g<|91__{BcuWtFHiZma|NC7kb|T?C-2Z z?Gv9IJ6Xpo*vENs^{u;KOg+PKx5L+FAfwLP;Gl_l++oS{NhODh(_RDXl&}iFS0NyT zoC!Ij?MkdRp+yvJ#^#KC5P{U;K~E-5`Mt!5S7Mq2t8b;R^@^URUl#NnG*>!!{ zB^htEKweJfsb}+1ZJ70H?iV&>8{uz`7NVHFE4vg3;ad6kR5dL@xP+A`1_6_UDCb%B zkvB^*zSIj7rylS!6lNSO&Xl%HCm)1#YqI!uEWgLHtmYkJpyZS?(gOueW^|i*#{;9b zpgwjdfzXD|Xm|s8=FZta_~5eiwGWeoPC1aLE!IkOJE^JpYuzSe)i5(qL(2r_#yrQ@7Vwt41--m)!#<@_3^ zkeM)X)sVI{Xkvsbzp#u`$SM?wl(@t*Vz6*J`23gO7^qK7Q}IHd)bAjFzYo)4?aK>e zYsJ{AzN<=XB7PO|hNt=h zpLZZ~X(F3bzQ?mepc~$GzVN(Ny%{4gr{i_1ZC~Cma!bpnFNvmwrQs57CsOziLY#Tr z!%>W`_c(ODh1O^KDQ6&CP`{RdAzQ((M;)Gm-_k4;^(hp*784aiBOq#H;uD5!^`IU` zBENZH@hyx7kj|uqiD-kXkYn-DS6De+Fb9R!f^E1muk)VWYW4hnzp2kJr*Y@%a6e78 z@F&=Ut!;8K3i6N?DQriJHg<)AYw$&gX`7#R6!;f%2{xswdCZ@F{o^Vt#Uuo8$A^u-`6fe&Yahoq~GW@K}&}oCGzHRNh(`e7bcsr zKKc{PVfI{I-qQoXm;d5Pr^j<`OrCAOEsBs4l35#KJT%`#DMh1g7l_AlHNry8_A{i8+D^@iCqxh1?+o5%^t?!TYd*d24=*Lc{>cQ(HzOcF- z(}i9L<~>ySU2&}f5_Q}Mo|l4WU^cP)^b_98wMKOa^I^G-ZxQ8uRv^|5o&^5y*m(7L zo9jJK8iIA~f_wD`D{`wweX@j%5{ck8wv6A7SrtrrD!0~Z6^*vpuR|O|Go#fx*_lr+ z!5*6~eMya_@;=RW9uCL*UD^~KPx!M}(_qcF*%Oyibc3ao0MUFjtd$z$og@sMqA2Nf zDJVAyr`cCc*`E}s=;bj*C`hT8>7%-dB83?jFiaJKGoJA;jh)_7RXs2J#j;m)8Qd1Y zdC|xfW#=B3n+Rku3|ji^ByXepGSs%Vk?+#xa2pNZYf2y6bKd1vPo&c0aN7;lFJ&_1 ztpByZ%3=PTZ*@!^mTy&1Z~$TI0T9(eCp&9JjH#dBUMmMy21{pXdq9xW6h5Y_N zYLR+XNHdTMc|JkOj@{qpc}k9F6@)B{~+K%v(^FHAl5ddleud_3t{%r&#bAvsUqbR7^k(z4ql^vH;-$Z0M8I>)lZBWIg5B!QR#vq z8c39t9WAB@z~HdSl*Z>HF$H3zZD%u;?DE#XFHG9r<*gt5%p+<{^;#U9i~CX~u-vP`G4~Xiv&15}e_E@aQ8dwwN-*P{E49+3>)hHuPz-V=`ss*Oq zRJ}(0tHW_51FDd3|4GQc9J7s>7e*uselfsk%htL&vbj>dW;Y5UJf;p0o6T;;&gzXO zJ5l-9e8VCyADxfJMzbTd<-Z$8+YMs>l{b6o(wCTKkwzs1t2mRLxf89y7{^D85_a9J z^}|hUaY)Bair7lqjb4{k97w|~x{jrzNFas}W}D^a3Aj9m_DxHtM{m)J24CCkpxuzUW+@yOU5YU$`4gF_43MmKks z`t#Ow@<;phR3@{X-7!c5e*pHIn}Xq*yxrwGY+nbx(3SJ?sQAw>VYeJ!#4fDZnUT;R z@=_B3G&y5!2K+h3H}wHIVSOof{o!4spjzA9h$xZADJ4Aa>o$#S@6>mM;-a-wr_KSN z>dXrWTM%`m@`5B}>AUP?w`KK8j`dSa>hV6#3E3^*)93UKL^vvo6t~^o&NiI)v6PH0 zP^a~W-cr!*f6S)OWs-F)MrWSz-uC}&oZ9`4p9U(Y0z)3W=kSjoEi(R!uKppOJ<^6M zpEJY!^Ndf9$&iK8A1}gGDzSE6qx^;QWU8@tvgmnclMfyR8SkZU1peije@Y2aoQH@$ zL{sbpoWin;u!`|JR6qcJa;lOz{q1csXFTjTko`Wa3T%&{;MkV$T?d9?*SXQDl#b%6 z_T~3sOGl8Hx=PhJ8FA5xMqV+nVwU+{!$%vm#Y<$ehr?a$O=>4Br+-!LRpzgs_IHXs zEZLp$X146GGIZHzo{K(5>O_coGhz#RIB9g9HJIGgPPq`k{ zDOYG_rT7UsPoxvykJcw9ic;C_rn02UoC>>&b#a1`Q>p^w=41kA?M#y%frIMTc}dQW ziNnp7z7C`C0d>Zz?6dJ143w2ZkG;(J%G*)RYDPu}=NXmr&9y0DcjFzGVO=TIH5>`}BCmhV2uM@JsV?3QfNFpH+&k`m(kKlut zp*R(BrBEmA4vSY6VYkC8!1gMYt5Hb%Ey!tylyLET>s1r9&guB4uABJ#;v<~&@2ag% zvH71a>2WGOYU78zEU6cn9j7M|LvKBHSSyUaPAO?CG>vKs(L~DRQE5nb(+PVlX2+q6 zv4~TkAuk46hWL}tGk1!fnrq$uy*Pr+v<6~_CFJfz0%0ghLCr!Xj6!L|v`EXaZ$UG` z()~02KKUZECSN~ifFIvzKo3?Z1E&Ih`k)j4M9u?eC0X?!uHh?dI4@tgd+>Bd(NNsD zbsC4)6cPUtyRbYU&^{f}(*a7#tnPU3jzbs_`&BX@!AqJ#8=lqwLk&4dNNAvAIgL~K zMI^BKN8o}z+6 z`tiIlLVUZAdejU#r#;|_XHjPv;JI4hg<~(uoDwM$1oxyW&aV_}Ima%MjeEUU=I-uV zgHB3k=sa0GUmcG?h;Bt5$h&ZV1Yd-G2%&V|>7S&{$hIXA!S=-kao~DCWO!wh5yXfc zYf3cU9m}q_HbT<@k#uD|YcS;JYTz=T(>KohioTILockvzQQv0M<=w!o6d^rst4_Fi z)o(&w-#4lKrE+1T7^KkY&Ha?$3W#Kt+fi5^AgU2dJc|*&c1-sdlgP`5QD~mhk|9C_ za=hk%?Y;gfp=R;Xjgq6llPp16yV@Ej+O=6B zYSl{LL#ri4{AX3ot7F@zy{;enKD4n_wwLn6TT{6j$d?DM(Hs;@8Y_ILfzbRNw_AZt zAI8K?L2CzJ=?(5x60)^jb?(QBEA&2fp0;k;AXrGo@=$~_Uva;pmHINr@6kew{%vIT zH&L6+3{i3bD3JvpyTHby;iM{$3aRb4&`$^&Y=3=%B<9J{WbcV)ToFV5AlNH*t>xgM z@PePFDu)dBoz1~bm_!^MhBV>XP#h-B$7+{(V^1M;U;HzKQePQru*1B2G~PW{usbfd zOTKQMqZD6-vGpuW3ofvRMu^-Cl?Pz~Q3t%$D}#J^N|-?ENc}AwVSr02IB(|!g5sX& z4BWJnApDuWJWanrJtQ3)hYVimuHbHZR+-@OiJdbKcSzw}HjJxavP}6np7yc!1=s&R z5mq5P9Dh1H2-VFNoGP&hp;gBWiilOzD)IMWc(}p$0FR}^uMP-j8^!D7AozOhjF9|T zfk-hgHhZbTLlsceJgwKYwe7X(wboE;pn+l?cftHHt?5K)>WBZ?GWWqff4ZmEW3f&d zIcF0z7@efd6VFgUR|{cB%!bXPcAn}Q^9a(m@mg;J|0QNwP(~IQfaifsh}3W)m@o6y z5KX7@(I?(x@BL2S_65YE+26)|`ix>qNPmYdWSD7tjuo++^M|zL_`DaHyeFy#&r-+w zM}432VI@lSknhZ-uIQY+MWzOHnS31;{8ht1)-0@}>Cn;v;ISw%5A6nrVM14aLoi*H zwd?Hk*^fnz_NxB;&^nf7LxqqzU9DD4RV`%JvP&6!?BV&9$72M+Sxsa5$J&g`pipG#~lf=0QQ-m=5oGTWG)uge~<C7DY(b8yf|3i$bmAMiU=EqYS^z2x zf*};lzK9BtUW2NkhPco)hQY{(E1vo|rsLo~rW%rR@CqgvNu1!L414%90*06$;RL| zqXh&O--gZ$K?)!N0~jTj<2CcI-^(l(RTEY8%BboYYerP4F%_obI>HqV*!b2hP(Fev zc^uTunPVHT&o=D8ve@|O{cze%rFD-$cmFEj&#)x-P*%2-lZ%SI3@w6Z;v-aN2TegF zk_7sS1e$D}*6YTXs9Nr2^v7GPqep8pG1&js`&|89JhU4;Bn&yF&zR@g;Wnk+Y)$d1 zLhDB@tI~-Cjt3H4_!HLr>GGGLq@bmsQoh9>S}ioug7uWziIfa|EY~g9wFGVQB@sD& zD%2Hpw#nR0=ILzT-?oZIM+GTNcCk*L)0bXchSgdjlk3_P46I$nE3l@&^L}esA?ogq zw#?oYKmKuLc@{WyEwqD|$y&`RUY#Y3T$`O`w!{atbxfU*Oo2 zl6*#>w;@9vW%SpR(RUa19`ezL`q)>Q^b9s4AcsqKd% z$$jm<27@8u(QWgE5RrA@E9JVGMz(_A}oWj&Qk*=hv?nkbLd*Aa-7lXgih)MKP7uH9)iS&BB zgy=W^Ktp$s(L!8gBoL;*daw~}foIplPqq8E;doOR&-m9oq7&o}gTA&KlIpauspxgN zrXuIsL~r|+$2DM(&sVw0Jj*WU_sugs4;T!{Gpd-~JEudjw|w!!cG;1|B9&EP|OQjuLp-n?JFKCU6YH_mp1`baYJD%cSm~5YqQ@S>P zKI;;2ovLuC!(I`7Uk3wwtUw&{OAja(8;DqgM_A1pj*c3vjQwJX%0I43CE{>Cyz-$j zGJa&Gs?ZkcF|hUv75ZhXAsg!B~FLHIk-DOJc9K1ch#Gc&GwWG%wWv*K|J z%T#>Ub*n=chCdvdYM{y-h$l`~)mi^|V=GPGd$UJG)x^IbL8S~Ihz5V^!N=NULT-#a zpn3!yAyti%G#$tY746Ia8y#sYvx;b+RKNE+66ihqYyRmKUc5(q@b!j{GQO#xchvg- z1oRFI@o%Z`1kD2p;vpI8Lu0{Rl7iH+=65!7=$c7+NgNE84lOx}6`BmQsCayu7G}iK zg{9%4RyZECdSOIEM;Q%T4AmjEfux}Q;X0Y2>M==~R0l@-xFal@VL2KZ@;Y2Ckn1GY z?>_R_j?xPL0?%ufn^QOI{Htn_5G&nRl$ zVPww{C$IICL-xzUO9#O3l9B^^>B4Q(Sk+4hL=qbjS;uhJMFeoxA#1k9(fDtB=>q!b zN&t9WDI6S-(3kY1p=`p-`j&&WS(jtwu(j4fwn2TS7CEm^vI{e&)aJZ<7afI}DT#}iTma6$r1)?A56 zCXZsMza2f?mOEkcPWtq+0(Y@LjtU3%$7S{BoQo9-yF`p_aYUe^KJ{rsNMbM0y5MJNIC^oC2@rc

2Y_o* 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 literal 0 HcmV?d00001 diff --git a/client/src/assets/fonts/Roboto/roboto-v29-latin-700.woff2 b/client/src/assets/fonts/Roboto/roboto-v29-latin-700.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..01d05fa509b7f91526cabe90c9bafa130e4c118a GIT binary patch literal 15828 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] zr2)AW*N(^RhnRQBqFmpd7;dMC^Wa^$8c}%Ue>TmbbT-}q#>0Q(!^K2rC~VTn`p&04;XE2RpTiTv zGdRSrY^0AFo7zHb=iw@kdfxNe(nS|`ed+kqnu7;D=5!rjz@2W|3uE>*V_K?3oiRIQ z11#!NwsA?N&tkf2MlmXix%4LVO;n@kG)vYp!;dtWo+|D!ok0$*gkS=6&POquM%QrZ z1iCLOD#aL$iI5DXqfvBSRCBMdaqo>6!^J7etnTFjS$tcYrj&4e44Ep9yJw0k#H!Mt z5BV&qN`4dh)ZWrjDnELvi1(qhhM)s9--nLS=m^lVd@E4CgO1-DRLaU6+EbvSn~s@E zWf_ri%R^742B7toZ&;h%mk9K-RZ)5r?a#&X8(5~g=P&$vH^(v{>`z%|} zWFHNcFF1rDrOK+FZKR}6GUN|IPZf`S=mH_=0A2nqUBjgl=m~PmyT2uUM{``rJAj8Lhoe?zrJ{F#&r zyi+VPPA>g!yT>INw#9UB+7sx@!Tp; z*lmvQL}yvM^NFJM`89tQwcCb*={zBn19g7KhPiA)+a&c%Q`k$GuRx&wn>tsqdlhN) z^yXe$c^L%-oz-%$?Qo6urIGs}ck3;;}GLa2*lYDtCJHr&Vd-`6(G)ucsR#%90s=7%1i*AH?f*Ya4u`46s%p*N z=coz*?am@)i1gdzzccKF&IB*>GewEM&<2eC_|xv|17^N4qL$s3Nk$~)bbC9=W9V#C z#;P;`No-PdoSajK|2&{Pd2r;z9~}O&h}XC328Oi+%m4rY0RR910wWS+$^JKA4?Oh% z83+IX0002Q@DVNm0002h0aDERJpI)PvIuhk000R90ssI20001Z+GAj3U|`Sr$HTzD zx%!vQKTXa}KoJzc$N~U@{smEZ+HKPV5M4VIh2j4uJNLd<+qP}nwr$(CZQHgrtTpbS zwlOMBcWRxPZ{i%S*lD!m+ZFosmB~*>GnvG)ffTZay6z=STssPdijmb^XOOu{CVPk^ zQi1Fy6ItzI7MZT}H0Ao!Z$OWT)v*<7g3izHODefS zS{h2Zs5-AUon7VNWB4ucT~fq_gO75H5~eiWZ0F#qmND!+(%DI14pKl$l3hmAS~8JO zMyaM0H}{DqODHJgXlU}%%w!IxNh?}wy;u0I&K*l58KHCix{>6w|7n?+wB{tybgZ$Y z!MMvLkQ79f^uY%$%b3MvGEv#4Wo8$X7N#RZ)O)Nj^Vy7nb~i%GhAv=&q7|6+3eN-m6~z(5p~RLrkKJsurSkZp}(%J?zYi8 z9HMb}v96Cx<;VnLNm25<(bSgL^mBQb5I#e3nNBI0K~eucGK`j{5yScVMl{dK)28Q0gCasw05)e!4(IQ8_0{AaK%}hXEHB*&UnNpyeq`-WK4-u3IaB`J`t$7n#b4+003GEVowTf}W#`XRn&c*U z+C9Moklj!K0KjkCw&Facwr$(CjbUvKYTLGL+qT`_=yqi?S*`rzWLxBgs#sX z8VVbR8;%Ixr(_4xDLAhy4~*4?lT^bXQ=0{H}2iwQ~9d;hWSqW z-Tp@YY5uGJHvu8gC$KhX3HAzJ4HXPE3jGM@!sjC;B2^;YqtR&b=-}wSm@_siwjlO7 z9*Y-`_lz%$KaGD(m=c*p$;9HMIawvSC1ptUO&3isOMl4J%52P>%{It>%~845xh476 z<#y)oQA#RKaa19y3pJUVPwl2|P_JnjJ(9jle_>iPTiH77WA-sugIma*<^B9*{-VGM zV})&EMjR*36E}%R#2ex(pa32a0U1yiG|k%8w;8{!VbJ}YsjAzzhv(1ma7LP)vLf+Z7W^MBGMvKaw49LITLyi$_NG4yt?=3#hHkh zY$;E<5|NUY5PC2DA2Vs%yyY62`KDW=^;@Oy8A(gVjmwvK%)Ml(9~UtuloB)URl=i) zcWDu6;|}avx9P~aO{1mX6Tc6XG}-`o+GAj50E7Qo3@Hp)001f<0nq?>+C9xf+5%7% z2H<Abe@^KF6mf+N+U0(x4K?9_iBk4U&5P}3K4TrW0h0x+ciY&r2p^IjEJ*l(yPRXxR1x%1|=fi$`*g*&sK@|+ak`Wug2Xa8VG+qlWAw|>&OH1QnA1Hzz7=kCv9j#zv%m~!a GP1dP2ZbstT&cf$d=w*b> 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 literal 0 HcmV?d00001 diff --git a/client/src/assets/fonts/Roboto/roboto-v29-latin-regular.woff b/client/src/assets/fonts/Roboto/roboto-v29-latin-regular.woff new file mode 100644 index 0000000000000000000000000000000000000000..86b386372664a278c839b4a6fedbf6a05b396b70 GIT binary patch literal 20332 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 Z@IjO83?{s=KqX^`zGvsj4^tdfk^ttt3T6NR literal 0 HcmV?d00001 diff --git a/client/src/assets/fonts/Roboto/roboto-v29-latin-regular.woff2 b/client/src/assets/fonts/Roboto/roboto-v29-latin-regular.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..ebe1795f85a661c205e4a4612eaf47d56273e68e GIT binary patch literal 15688 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 Date: Wed, 6 Oct 2021 12:01:07 +0200 Subject: [PATCH 061/196] Added redirect function to search bar --- CHANGELOG.md | 2 ++ client/src/components/SearchBar/SearchBar.tsx | 28 +++++++++---------- client/src/interfaces/SearchResult.ts | 1 + client/src/utility/index.ts | 3 +- client/src/utility/redirectUrl.ts | 7 +++++ client/src/utility/searchParser.ts | 9 ++++++ 6 files changed, 35 insertions(+), 15 deletions(-) create mode 100644 client/src/utility/redirectUrl.ts diff --git a/CHANGELOG.md b/CHANGELOG.md index 9384559..3b6ccfb 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,8 @@ ### v1.7.0 (TBA) +- Search bar will now redirect if valid URL or IP is provided ([#67](https://github.com/pawelmalak/flame/issues/67)) - Fixed bug related to creating new apps/bookmarks with custom icon ([#83](https://github.com/pawelmalak/flame/issues/83)) - URL can now be assigned to notifications. Clicking on "New version is available" popup will now redirect to changelog ([#86](https://github.com/pawelmalak/flame/issues/86)) +- Added static fonts ([#94](https://github.com/pawelmalak/flame/issues/94)) ### v1.6.7 (2021-10-04) - Add multiple labels to Docker Compose ([#90](https://github.com/pawelmalak/flame/issues/90)) diff --git a/client/src/components/SearchBar/SearchBar.tsx b/client/src/components/SearchBar/SearchBar.tsx index f2ccdec..887a2ef 100644 --- a/client/src/components/SearchBar/SearchBar.tsx +++ b/client/src/components/SearchBar/SearchBar.tsx @@ -11,7 +11,7 @@ import { NewNotification } from '../../interfaces'; import classes from './SearchBar.module.css'; // Utils -import { searchParser } from '../../utility'; +import { searchParser, urlParser, redirectUrl } from '../../utility'; interface ComponentProps { createNotification: (notification: NewNotification) => void; @@ -28,28 +28,28 @@ const SearchBar = (props: ComponentProps): JSX.Element => { }, []); const searchHandler = (e: KeyboardEvent) => { - const searchResult = searchParser(inputRef.current.value); + const { isLocal, search, query, isURL, sameTab } = searchParser( + inputRef.current.value + ); - if (searchResult.isLocal) { - setLocalSearch(searchResult.search); + if (isLocal) { + setLocalSearch(search); } if (e.code === 'Enter') { - if (!searchResult.query.prefix) { + if (!query.prefix) { createNotification({ title: 'Error', message: 'Prefix not found', }); - } else if (searchResult.isLocal) { - setLocalSearch(searchResult.search); + } else if (isURL) { + const url = urlParser(inputRef.current.value)[1]; + redirectUrl(url, sameTab); + } else if (isLocal) { + setLocalSearch(search); } else { - if (searchResult.sameTab) { - document.location.replace( - `${searchResult.query.template}${searchResult.search}` - ); - } else { - window.open(`${searchResult.query.template}${searchResult.search}`); - } + const url = `${query.template}${search}`; + redirectUrl(url, sameTab); } } }; diff --git a/client/src/interfaces/SearchResult.ts b/client/src/interfaces/SearchResult.ts index 271bdc2..3d6c8ae 100644 --- a/client/src/interfaces/SearchResult.ts +++ b/client/src/interfaces/SearchResult.ts @@ -2,6 +2,7 @@ import { Query } from './Query'; export interface SearchResult { isLocal: boolean; + isURL: boolean; sameTab: boolean; search: string; query: Query; diff --git a/client/src/utility/index.ts b/client/src/utility/index.ts index 99f8d69..caff9c3 100644 --- a/client/src/utility/index.ts +++ b/client/src/utility/index.ts @@ -3,4 +3,5 @@ export * from './urlParser'; export * from './searchConfig'; export * from './checkVersion'; export * from './sortData'; -export * from './searchParser'; \ No newline at end of file +export * from './searchParser'; +export * from './redirectUrl'; diff --git a/client/src/utility/redirectUrl.ts b/client/src/utility/redirectUrl.ts new file mode 100644 index 0000000..81eca10 --- /dev/null +++ b/client/src/utility/redirectUrl.ts @@ -0,0 +1,7 @@ +export const redirectUrl = (url: string, sameTab: boolean) => { + if (sameTab) { + document.location.replace(url); + } else { + window.open(url); + } +}; diff --git a/client/src/utility/searchParser.ts b/client/src/utility/searchParser.ts index c477d66..a1c3787 100644 --- a/client/src/utility/searchParser.ts +++ b/client/src/utility/searchParser.ts @@ -6,6 +6,7 @@ import { searchConfig } from '.'; export const searchParser = (searchQuery: string): SearchResult => { const result: SearchResult = { isLocal: false, + isURL: false, sameTab: false, search: '', query: { @@ -15,6 +16,13 @@ export const searchParser = (searchQuery: string): SearchResult => { }, }; + // Check if url or ip was passed + const urlRegex = + /^(http:\/\/www\.|https:\/\/www\.|http:\/\/|https:\/\/)?[a-z0-9]+([\-\.]{1}[a-z0-9]+)*\.[a-z]{2,5}(:[0-9]{1,5})?(\/.*)?|^((http:\/\/www\.|https:\/\/www\.|http:\/\/|https:\/\/)?([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$/; + + result.isURL = urlRegex.test(searchQuery); + + // Match prefix and query const splitQuery = searchQuery.match(/^\/([a-z]+)[ ](.+)$/i); const prefix = splitQuery @@ -27,6 +35,7 @@ export const searchParser = (searchQuery: string): SearchResult => { const query = queries.find((q: Query) => q.prefix === prefix); + // If search provider was found if (query) { result.query = query; result.search = search; From 591824dd0c39af3b206d1b24311a595db50575ea Mon Sep 17 00:00:00 2001 From: unknown Date: Wed, 6 Oct 2021 14:15:05 +0200 Subject: [PATCH 062/196] Fetch and use custom search queries --- client/src/App.tsx | 13 +++-- .../SearchSettings/SearchSettings.tsx | 4 +- client/src/store/actions/actionTypes.ts | 53 ++++++++++--------- client/src/store/actions/config.ts | 46 +++++++++++----- client/src/store/reducers/config.ts | 44 +++++++++------ client/src/utility/searchParser.ts | 8 ++- controllers/config.js | 15 +++++- routes/config.js | 22 +++----- utils/File.js | 11 ++-- 9 files changed, 136 insertions(+), 80 deletions(-) diff --git a/client/src/App.tsx b/client/src/App.tsx index 05db805..9311b4b 100644 --- a/client/src/App.tsx +++ b/client/src/App.tsx @@ -1,5 +1,5 @@ import { BrowserRouter, Route, Switch } from 'react-router-dom'; -import { getConfig, setTheme } from './store/actions'; +import { fetchQueries, getConfig, setTheme } from './store/actions'; import 'external-svg-loader'; // Redux @@ -27,15 +27,18 @@ if (localStorage.theme) { // Check for updates checkVersion(); +// fetch queries +store.dispatch(fetchQueries()); + const App = (): JSX.Element => { return ( - - - - + + + + diff --git a/client/src/components/Settings/SearchSettings/SearchSettings.tsx b/client/src/components/Settings/SearchSettings/SearchSettings.tsx index dc3a4af..a3fec29 100644 --- a/client/src/components/Settings/SearchSettings/SearchSettings.tsx +++ b/client/src/components/Settings/SearchSettings/SearchSettings.tsx @@ -27,6 +27,7 @@ interface Props { createNotification: (notification: NewNotification) => void; updateConfig: (formData: SearchForm) => void; loading: boolean; + customQueries: Query[]; } const SearchSettings = (props: Props): JSX.Element => { @@ -81,7 +82,7 @@ const SearchSettings = (props: Props): JSX.Element => { value={formData.defaultSearchProvider} onChange={(e) => inputChangeHandler(e)} > - {queries.map((query: Query, idx) => ( + {[...queries, ...props.customQueries].map((query: Query, idx) => ( @@ -122,6 +123,7 @@ const SearchSettings = (props: Props): JSX.Element => { const mapStateToProps = (state: GlobalState) => { return { loading: state.config.loading, + customQueries: state.config.customQueries, }; }; diff --git a/client/src/store/actions/actionTypes.ts b/client/src/store/actions/actionTypes.ts index 4324834..0c1cc87 100644 --- a/client/src/store/actions/actionTypes.ts +++ b/client/src/store/actions/actionTypes.ts @@ -26,8 +26,9 @@ import { ClearNotificationAction, // Config GetConfigAction, - UpdateConfigAction + UpdateConfigAction, } from './'; +import { FetchQueriesAction } from './config'; export enum ActionTypes { // Theme @@ -62,35 +63,37 @@ export enum ActionTypes { clearNotification = 'CLEAR_NOTIFICATION', // Config getConfig = 'GET_CONFIG', - updateConfig = 'UPDATE_CONFIG' + updateConfig = 'UPDATE_CONFIG', + fetchQueries = 'FETCH_QUERIES', } -export type Action = +export type Action = // Theme - SetThemeAction | + | SetThemeAction // Apps - GetAppsAction | - PinAppAction | - AddAppAction | - DeleteAppAction | - UpdateAppAction | - ReorderAppsAction | - SortAppsAction | + | GetAppsAction + | PinAppAction + | AddAppAction + | DeleteAppAction + | UpdateAppAction + | ReorderAppsAction + | SortAppsAction // Categories - GetCategoriesAction | - AddCategoryAction | - PinCategoryAction | - DeleteCategoryAction | - UpdateCategoryAction | - SortCategoriesAction | - ReorderCategoriesAction | + | GetCategoriesAction + | AddCategoryAction + | PinCategoryAction + | DeleteCategoryAction + | UpdateCategoryAction + | SortCategoriesAction + | ReorderCategoriesAction // Bookmarks - AddBookmarkAction | - DeleteBookmarkAction | - UpdateBookmarkAction | + | AddBookmarkAction + | DeleteBookmarkAction + | UpdateBookmarkAction // Notifications - CreateNotificationAction | - ClearNotificationAction | + | CreateNotificationAction + | ClearNotificationAction // Config - GetConfigAction | - UpdateConfigAction; \ No newline at end of file + | GetConfigAction + | UpdateConfigAction + | FetchQueriesAction; diff --git a/client/src/store/actions/config.ts b/client/src/store/actions/config.ts index a14e21e..baddbe5 100644 --- a/client/src/store/actions/config.ts +++ b/client/src/store/actions/config.ts @@ -1,7 +1,7 @@ import axios from 'axios'; import { Dispatch } from 'redux'; import { ActionTypes } from './actionTypes'; -import { Config, ApiResponse } from '../../interfaces'; +import { Config, ApiResponse, Query } from '../../interfaces'; import { CreateNotificationAction } from './notification'; import { searchConfig } from '../../utility'; @@ -13,18 +13,18 @@ export interface GetConfigAction { export const getConfig = () => async (dispatch: Dispatch) => { try { const res = await axios.get>('/api/config'); - + dispatch({ type: ActionTypes.getConfig, - payload: res.data.data - }) + payload: res.data.data, + }); // Set custom page title if set document.title = searchConfig('customTitle', 'Flame'); } catch (err) { - console.log(err) + console.log(err); } -} +}; export interface UpdateConfigAction { type: ActionTypes.updateConfig; @@ -34,19 +34,41 @@ export interface UpdateConfigAction { export const updateConfig = (formData: any) => async (dispatch: Dispatch) => { try { const res = await axios.put>('/api/config', formData); + dispatch({ type: ActionTypes.createNotification, payload: { title: 'Success', - message: 'Settings updated' - } - }) + message: 'Settings updated', + }, + }); dispatch({ type: ActionTypes.updateConfig, - payload: res.data.data - }) + payload: res.data.data, + }); } catch (err) { console.log(err); } -} \ No newline at end of file +}; + +export interface FetchQueriesAction { + type: ActionTypes.fetchQueries; + payload: Query[]; +} + +export const fetchQueries = + () => async (dispatch: Dispatch) => { + try { + const res = await axios.get>( + '/api/config/0/queries' + ); + + dispatch({ + type: ActionTypes.fetchQueries, + payload: res.data.data, + }); + } catch (err) { + console.log(err); + } + }; diff --git a/client/src/store/reducers/config.ts b/client/src/store/reducers/config.ts index 071f461..93150e2 100644 --- a/client/src/store/reducers/config.ts +++ b/client/src/store/reducers/config.ts @@ -1,36 +1,50 @@ import { ActionTypes, Action } from '../actions'; -import { Config } from '../../interfaces'; +import { Config, Query } from '../../interfaces'; export interface State { loading: boolean; config: Config[]; + customQueries: Query[]; } const initialState: State = { loading: true, - config: [] -} + config: [], + customQueries: [], +}; const getConfig = (state: State, action: Action): State => { return { + ...state, loading: false, - config: action.payload - } -} + }; +}; const updateConfig = (state: State, action: Action): State => { return { ...state, - config: action.payload - } -} + config: action.payload, + }; +}; + +const fetchQueries = (state: State, action: Action): State => { + return { + ...state, + customQueries: action.payload, + }; +}; const configReducer = (state: State = initialState, action: Action) => { - switch(action.type) { - case ActionTypes.getConfig: return getConfig(state, action); - case ActionTypes.updateConfig: return updateConfig(state, action); - default: return state; + switch (action.type) { + case ActionTypes.getConfig: + return getConfig(state, action); + case ActionTypes.updateConfig: + return updateConfig(state, action); + case ActionTypes.fetchQueries: + return fetchQueries(state, action); + default: + return state; } -} +}; -export default configReducer; \ No newline at end of file +export default configReducer; diff --git a/client/src/utility/searchParser.ts b/client/src/utility/searchParser.ts index a1c3787..2befdd2 100644 --- a/client/src/utility/searchParser.ts +++ b/client/src/utility/searchParser.ts @@ -1,6 +1,6 @@ import { queries } from './searchQueries.json'; import { Query, SearchResult } from '../interfaces'; - +import { store } from '../store/store'; import { searchConfig } from '.'; export const searchParser = (searchQuery: string): SearchResult => { @@ -16,6 +16,8 @@ export const searchParser = (searchQuery: string): SearchResult => { }, }; + const customQueries = store.getState().config.customQueries; + // Check if url or ip was passed const urlRegex = /^(http:\/\/www\.|https:\/\/www\.|http:\/\/|https:\/\/)?[a-z0-9]+([\-\.]{1}[a-z0-9]+)*\.[a-z]{2,5}(:[0-9]{1,5})?(\/.*)?|^((http:\/\/www\.|https:\/\/www\.|http:\/\/|https:\/\/)?([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$/; @@ -33,7 +35,9 @@ export const searchParser = (searchQuery: string): SearchResult => { ? encodeURIComponent(splitQuery[2]) : encodeURIComponent(searchQuery); - const query = queries.find((q: Query) => q.prefix === prefix); + const query = [...queries, ...customQueries].find( + (q: Query) => q.prefix === prefix + ); // If search provider was found if (query) { diff --git a/controllers/config.js b/controllers/config.js index a9768d2..85b209a 100644 --- a/controllers/config.js +++ b/controllers/config.js @@ -162,7 +162,7 @@ exports.getCss = asyncWrapper(async (req, res, next) => { // @access Public exports.updateCss = asyncWrapper(async (req, res, next) => { const file = new File(join(__dirname, '../public/flame.css')); - file.write(req.body.styles); + file.write(req.body.styles, false); // Copy file to docker volume fs.copyFileSync( @@ -175,3 +175,16 @@ exports.updateCss = asyncWrapper(async (req, res, next) => { data: {}, }); }); + +// @desc Get custom queries file +// @route GET /api/config/0/queries +// @access Public +exports.getQueries = asyncWrapper(async (req, res, next) => { + const file = new File(join(__dirname, '../data/customQueries.json')); + const content = JSON.parse(file.read()); + + res.status(200).json({ + success: true, + data: content.queries, + }); +}); diff --git a/routes/config.js b/routes/config.js index eebf5dd..6abea15 100644 --- a/routes/config.js +++ b/routes/config.js @@ -10,23 +10,15 @@ const { deletePair, updateCss, getCss, + getQueries, } = require('../controllers/config'); -router - .route('/') - .post(createPair) - .get(getAllPairs) - .put(updateValues); +router.route('/').post(createPair).get(getAllPairs).put(updateValues); -router - .route('/:key') - .get(getSinglePair) - .put(updateValue) - .delete(deletePair); +router.route('/:key').get(getSinglePair).put(updateValue).delete(deletePair); -router - .route('/0/css') - .get(getCss) - .put(updateCss); +router.route('/0/css').get(getCss).put(updateCss); -module.exports = router; \ No newline at end of file +router.route('/0/queries').get(getQueries); + +module.exports = router; diff --git a/utils/File.js b/utils/File.js index 0b2fbdc..f135da8 100644 --- a/utils/File.js +++ b/utils/File.js @@ -3,7 +3,7 @@ const fs = require('fs'); class File { constructor(path) { this.path = path; - this.content = ''; + this.content = null; } read() { @@ -16,10 +16,13 @@ class File { } } - write(data) { + write(data, isJSON) { this.content = data; - fs.writeFileSync(this.path, this.content); + fs.writeFileSync( + this.path, + isJSON ? JSON.stringify(this.content) : this.content + ); } } -module.exports = File; \ No newline at end of file +module.exports = File; From 459523dfd256a6869e04f71c4b02edbeb3562390 Mon Sep 17 00:00:00 2001 From: unknown Date: Wed, 6 Oct 2021 14:17:31 +0200 Subject: [PATCH 063/196] Changed initial files creation process --- package.json | 7 ++++--- server.js | 27 +++++++++++++++--------- utils/findCss.js | 22 -------------------- utils/init/createFile.js | 32 +++++++++++++++++++++++++++++ utils/init/index.js | 9 ++++++++ utils/{ => init}/initConfig.js | 10 ++++++--- utils/init/initFiles.js | 8 ++++++++ utils/{ => init}/initialConfig.json | 0 utils/init/initialFiles.json | 32 +++++++++++++++++++++++++++++ 9 files changed, 109 insertions(+), 38 deletions(-) delete mode 100644 utils/findCss.js create mode 100644 utils/init/createFile.js create mode 100644 utils/init/index.js rename utils/{ => init}/initConfig.js (78%) create mode 100644 utils/init/initFiles.js rename utils/{ => init}/initialConfig.json (100%) create mode 100644 utils/init/initialFiles.json diff --git a/package.json b/package.json index 40f1646..e2a2501 100644 --- a/package.json +++ b/package.json @@ -5,10 +5,11 @@ "main": "index.js", "scripts": { "start": "node server.js", - "init-server": "echo Instaling server dependencies && npm install && mkdir public && touch public/flame.css", + "init-server": "echo Instaling server dependencies && npm install", "init-client": "cd client && echo Instaling client dependencies && npm install", - "dev-init": "npm run init-server && npm run init-client", - "dev-server": "nodemon server.js", + "dir-init": "npx mkdirp data public && touch public/flame.css public/customQueries.json", + "dev-init": "npm run dir-init && npm run init-server && npm run init-client", + "dev-server": "nodemon server.js -e js", "dev-client": "npm start --prefix client", "dev": "concurrently \"npm run dev-server\" \"npm run dev-client\"", "skaffold": "concurrently \"npm run init-client\" \"npm run dev-server\"" diff --git a/server.js b/server.js index 8b09803..5c1d0fa 100644 --- a/server.js +++ b/server.js @@ -1,23 +1,28 @@ require('dotenv').config(); const http = require('http'); + +// Database const { connectDB } = require('./db'); +const associateModels = require('./models/associateModels'); + +// Server const api = require('./api'); const jobs = require('./utils/jobs'); const Socket = require('./Socket'); const Sockets = require('./Sockets'); -const associateModels = require('./models/associateModels'); -const initConfig = require('./utils/initConfig'); -const findCss = require('./utils/findCss'); + +// Utils +const initApp = require('./utils/init'); const Logger = require('./utils/Logger'); const logger = new Logger(); -const PORT = process.env.PORT || 5005; - (async () => { + const PORT = process.env.PORT || 5005; + + // Init app await connectDB(); await associateModels(); - await initConfig(); - findCss(); + await initApp(); // Create server for Express API and WebSockets const server = http.createServer(); @@ -28,6 +33,8 @@ const PORT = process.env.PORT || 5005; Sockets.registerSocket('weather', weatherSocket); server.listen(PORT, () => { - logger.log(`Server is running on port ${PORT} in ${process.env.NODE_ENV} mode`); - }) -})(); \ No newline at end of file + logger.log( + `Server is running on port ${PORT} in ${process.env.NODE_ENV} mode` + ); + }); +})(); diff --git a/utils/findCss.js b/utils/findCss.js deleted file mode 100644 index af85a0a..0000000 --- a/utils/findCss.js +++ /dev/null @@ -1,22 +0,0 @@ -const fs = require('fs'); -const { join } = require('path'); -const Logger = require('./Logger'); -const logger = new Logger(); - -// Check if flame.css exists in mounted docker volume. Create new file if not -const findCss = () => { - const srcPath = join(__dirname, '../data/flame.css'); - const destPath = join(__dirname, '../public/flame.css'); - - if (fs.existsSync(srcPath)) { - fs.copyFileSync(srcPath, destPath); - logger.log('Custom CSS file found'); - return; - } - - logger.log('Creating empty CSS file'); - fs.writeFileSync(destPath, ''); - -} - -module.exports = findCss; \ No newline at end of file diff --git a/utils/init/createFile.js b/utils/init/createFile.js new file mode 100644 index 0000000..b46b4f6 --- /dev/null +++ b/utils/init/createFile.js @@ -0,0 +1,32 @@ +const fs = require('fs'); +const { join } = require('path'); + +const Logger = require('../Logger'); +const logger = new Logger(); + +const createFile = async (file) => { + const { name, msg, template, isJSON, paths } = file; + + const srcPath = join(__dirname, paths.src, name); + const destPath = join(__dirname, paths.dest, name); + + // Check if file exists + if (fs.existsSync(srcPath)) { + fs.copyFileSync(srcPath, destPath); + + if (process.env.NODE_ENV == 'development') { + logger.log(msg.found); + } + + return; + } + + // Create file if not + fs.writeFileSync(destPath, isJSON ? JSON.stringify(template) : template); + + if (process.env.NODE_ENV == 'development') { + logger.log(msg.created); + } +}; + +module.exports = createFile; diff --git a/utils/init/index.js b/utils/init/index.js new file mode 100644 index 0000000..a0e11a1 --- /dev/null +++ b/utils/init/index.js @@ -0,0 +1,9 @@ +const initConfig = require('./initConfig'); +const initFiles = require('./initFiles'); + +const initApp = async () => { + await initConfig(); + await initFiles(); +}; + +module.exports = initApp; diff --git a/utils/initConfig.js b/utils/init/initConfig.js similarity index 78% rename from utils/initConfig.js rename to utils/init/initConfig.js index b6a5a18..83ce4ea 100644 --- a/utils/initConfig.js +++ b/utils/init/initConfig.js @@ -1,7 +1,8 @@ const { Op } = require('sequelize'); -const Config = require('../models/Config'); +const Config = require('../../models/Config'); const { config } = require('./initialConfig.json'); -const Logger = require('./Logger'); + +const Logger = require('../Logger'); const logger = new Logger(); const initConfig = async () => { @@ -28,7 +29,10 @@ const initConfig = async () => { } }); - logger.log('Initial config created'); + if (process.env.NODE_ENV == 'development') { + logger.log('Initial config created'); + } + return; }; diff --git a/utils/init/initFiles.js b/utils/init/initFiles.js new file mode 100644 index 0000000..cee54ca --- /dev/null +++ b/utils/init/initFiles.js @@ -0,0 +1,8 @@ +const createFile = require('./createFile'); +const { files } = require('./initialFiles.json'); + +const initFiles = async () => { + files.forEach(async (file) => await createFile(file)); +}; + +module.exports = initFiles; diff --git a/utils/initialConfig.json b/utils/init/initialConfig.json similarity index 100% rename from utils/initialConfig.json rename to utils/init/initialConfig.json diff --git a/utils/init/initialFiles.json b/utils/init/initialFiles.json new file mode 100644 index 0000000..42354d7 --- /dev/null +++ b/utils/init/initialFiles.json @@ -0,0 +1,32 @@ +{ + "files": [ + { + "name": "flame.css", + "msg": { + "created": "Created empty CSS file", + "found": "Custom CSS file found" + }, + "paths": { + "src": "../../data", + "dest": "../../public" + }, + "template": "", + "isJSON": false + }, + { + "name": "customQueries.json", + "msg": { + "created": "Created empty queries file", + "found": "Custom queries file found" + }, + "paths": { + "src": "../../data", + "dest": "../../data" + }, + "template": { + "queries": [] + }, + "isJSON": true + } + ] +} From 231dbc4577b795c2b6c8cafaee35d5c5d9fbe26a Mon Sep 17 00:00:00 2001 From: Pablo Ruiz Date: Wed, 6 Oct 2021 22:17:43 +0200 Subject: [PATCH 064/196] Added remote docker host --- .../Settings/OtherSettings/OtherSettings.tsx | 13 ++++++++++++ client/src/interfaces/Forms.ts | 1 + controllers/apps.js | 21 ++++++++++++------- utils/initialConfig.json | 4 ++++ 4 files changed, 32 insertions(+), 7 deletions(-) diff --git a/client/src/components/Settings/OtherSettings/OtherSettings.tsx b/client/src/components/Settings/OtherSettings/OtherSettings.tsx index afaf072..bd9bf49 100644 --- a/client/src/components/Settings/OtherSettings/OtherSettings.tsx +++ b/client/src/components/Settings/OtherSettings/OtherSettings.tsx @@ -52,6 +52,7 @@ const OtherSettings = (props: ComponentProps): JSX.Element => { bookmarksSameTab: 0, searchSameTab: 0, dockerApps: 1, + dockerHost: 'localhost', kubernetesApps: 1, unpinStoppedApps: 1, }); @@ -72,6 +73,7 @@ const OtherSettings = (props: ComponentProps): JSX.Element => { bookmarksSameTab: searchConfig('bookmarksSameTab', 0), searchSameTab: searchConfig('searchSameTab', 0), dockerApps: searchConfig('dockerApps', 0), + dockerHost: searchConfig('dockerHost', 'localhost'), kubernetesApps: searchConfig('kubernetesApps', 0), unpinStoppedApps: searchConfig('unpinStoppedApps', 0), }); @@ -275,6 +277,17 @@ const OtherSettings = (props: ComponentProps): JSX.Element => { {/* DOCKER SETTINGS */}

Docker

+ + + inputChangeHandler(e)} + /> + { {/* BEAHVIOR OPTIONS */} -

App Behavior

+ {/* MODULES OPTIONS */} -

Modules

+ { {/* KUBERNETES SETTINGS */} -

Kubernetes

+ inputChangeHandler(e)} + /> + + + + inputChangeHandler(e)} + /> + + + + inputChangeHandler(e)} + /> + + + + ); +}; + +export default QueriesForm; diff --git a/client/src/components/Settings/SearchSettings/SearchSettings.tsx b/client/src/components/Settings/SearchSettings/SearchSettings.tsx index a3fec29..5b40f71 100644 --- a/client/src/components/Settings/SearchSettings/SearchSettings.tsx +++ b/client/src/components/Settings/SearchSettings/SearchSettings.tsx @@ -1,5 +1,5 @@ // React -import { useState, useEffect, FormEvent, ChangeEvent } from 'react'; +import { useState, useEffect, FormEvent, ChangeEvent, Fragment } from 'react'; import { connect } from 'react-redux'; // State @@ -13,15 +13,19 @@ import { SearchForm, } from '../../../interfaces'; -// Utils -import { searchConfig } from '../../../utility'; -import InputGroup from '../../UI/Forms/InputGroup/InputGroup'; - -// Data -import { queries } from '../../../utility/searchQueries.json'; +// Components +import CustomQueries from './CustomQueries/CustomQueries'; // UI import Button from '../../UI/Buttons/Button/Button'; +import SettingsHeadline from '../../UI/Headlines/SettingsHeadline/SettingsHeadline'; +import InputGroup from '../../UI/Forms/InputGroup/InputGroup'; + +// Utils +import { searchConfig } from '../../../utility'; + +// Data +import { queries } from '../../../utility/searchQueries.json'; interface Props { createNotification: (notification: NewNotification) => void; @@ -73,50 +77,65 @@ const SearchSettings = (props: Props): JSX.Element => { }; return ( -
formSubmitHandler(e)}> - - - - - - - - - - - - - -
+ + {/* GENERAL SETTINGS */} +
formSubmitHandler(e)} + style={{ marginBottom: '30px' }} + > + + + + + + + + + + + + + + + + + {/* CUSTOM QUERIES */} + + +
); }; diff --git a/client/src/components/Settings/OtherSettings/OtherSettings.module.css b/client/src/components/UI/Headlines/SettingsHeadline/SettingsHeadline.module.css similarity index 89% rename from client/src/components/Settings/OtherSettings/OtherSettings.module.css rename to client/src/components/UI/Headlines/SettingsHeadline/SettingsHeadline.module.css index 36e4deb..137667c 100644 --- a/client/src/components/Settings/OtherSettings/OtherSettings.module.css +++ b/client/src/components/UI/Headlines/SettingsHeadline/SettingsHeadline.module.css @@ -1,4 +1,4 @@ -.SettingsSection { +.SettingsHeadline { color: var(--color-primary); padding-bottom: 3px; margin-bottom: 10px; @@ -6,4 +6,4 @@ font-weight: 500; border-bottom: 2px solid var(--color-accent); display: inline-block; -} \ No newline at end of file +} diff --git a/client/src/components/UI/Headlines/SettingsHeadline/SettingsHeadline.tsx b/client/src/components/UI/Headlines/SettingsHeadline/SettingsHeadline.tsx new file mode 100644 index 0000000..5d14949 --- /dev/null +++ b/client/src/components/UI/Headlines/SettingsHeadline/SettingsHeadline.tsx @@ -0,0 +1,11 @@ +const classes = require('./SettingsHeadline.module.css'); + +interface Props { + text: string; +} + +const SettingsHeadline = (props: Props): JSX.Element => { + return

{props.text}

; +}; + +export default SettingsHeadline; diff --git a/client/src/store/actions/actionTypes.ts b/client/src/store/actions/actionTypes.ts index 0c1cc87..f040016 100644 --- a/client/src/store/actions/actionTypes.ts +++ b/client/src/store/actions/actionTypes.ts @@ -28,7 +28,11 @@ import { GetConfigAction, UpdateConfigAction, } from './'; -import { FetchQueriesAction } from './config'; +import { + AddQueryAction, + DeleteQueryAction, + FetchQueriesAction, +} from './config'; export enum ActionTypes { // Theme @@ -65,6 +69,8 @@ export enum ActionTypes { getConfig = 'GET_CONFIG', updateConfig = 'UPDATE_CONFIG', fetchQueries = 'FETCH_QUERIES', + addQuery = 'ADD_QUERY', + deleteQuery = 'DELETE_QUERY', } export type Action = @@ -96,4 +102,6 @@ export type Action = // Config | GetConfigAction | UpdateConfigAction - | FetchQueriesAction; + | FetchQueriesAction + | AddQueryAction + | DeleteQueryAction; diff --git a/client/src/store/actions/config.ts b/client/src/store/actions/config.ts index baddbe5..d0c8a42 100644 --- a/client/src/store/actions/config.ts +++ b/client/src/store/actions/config.ts @@ -60,9 +60,7 @@ export interface FetchQueriesAction { export const fetchQueries = () => async (dispatch: Dispatch) => { try { - const res = await axios.get>( - '/api/config/0/queries' - ); + const res = await axios.get>('/api/queries'); dispatch({ type: ActionTypes.fetchQueries, @@ -72,3 +70,43 @@ export const fetchQueries = console.log(err); } }; + +export interface AddQueryAction { + type: ActionTypes.addQuery; + payload: Query; +} + +export const addQuery = + (query: Query) => async (dispatch: Dispatch) => { + try { + const res = await axios.post>('/api/queries', query); + + dispatch({ + type: ActionTypes.addQuery, + payload: res.data.data, + }); + } catch (err) { + console.log(err); + } + }; + +export interface DeleteQueryAction { + type: ActionTypes.deleteQuery; + payload: Query[]; +} + +export const deleteQuery = + (prefix: string) => async (dispatch: Dispatch) => { + try { + const res = await axios.delete>( + `/api/queries/${prefix}` + ); + + dispatch({ + type: ActionTypes.deleteQuery, + payload: res.data.data, + }); + } catch (err) { + console.log(err); + } + }; diff --git a/client/src/store/reducers/config.ts b/client/src/store/reducers/config.ts index 93150e2..08b68e6 100644 --- a/client/src/store/reducers/config.ts +++ b/client/src/store/reducers/config.ts @@ -34,6 +34,20 @@ const fetchQueries = (state: State, action: Action): State => { }; }; +const addQuery = (state: State, action: Action): State => { + return { + ...state, + customQueries: [...state.customQueries, action.payload], + }; +}; + +const deleteQuery = (state: State, action: Action): State => { + return { + ...state, + customQueries: action.payload, + }; +}; + const configReducer = (state: State = initialState, action: Action) => { switch (action.type) { case ActionTypes.getConfig: @@ -42,6 +56,10 @@ const configReducer = (state: State = initialState, action: Action) => { return updateConfig(state, action); case ActionTypes.fetchQueries: return fetchQueries(state, action); + case ActionTypes.addQuery: + return addQuery(state, action); + case ActionTypes.deleteQuery: + return deleteQuery(state, action); default: return state; } diff --git a/controllers/config.js b/controllers/config.js index 85b209a..e5290aa 100644 --- a/controllers/config.js +++ b/controllers/config.js @@ -175,16 +175,3 @@ exports.updateCss = asyncWrapper(async (req, res, next) => { data: {}, }); }); - -// @desc Get custom queries file -// @route GET /api/config/0/queries -// @access Public -exports.getQueries = asyncWrapper(async (req, res, next) => { - const file = new File(join(__dirname, '../data/customQueries.json')); - const content = JSON.parse(file.read()); - - res.status(200).json({ - success: true, - data: content.queries, - }); -}); diff --git a/controllers/queries/index.js b/controllers/queries/index.js new file mode 100644 index 0000000..b68f145 --- /dev/null +++ b/controllers/queries/index.js @@ -0,0 +1,53 @@ +const asyncWrapper = require('../../middleware/asyncWrapper'); +const File = require('../../utils/File'); +const { join } = require('path'); + +const QUERIES_PATH = join(__dirname, '../../data/customQueries.json'); + +// @desc Add custom search query +// @route POST /api/queries +// @access Public +exports.addQuery = asyncWrapper(async (req, res, next) => { + const file = new File(QUERIES_PATH); + let content = JSON.parse(file.read()); + + // Add new query + content.queries.push(req.body); + file.write(content, true); + + res.status(201).json({ + success: true, + data: req.body, + }); +}); + +// @desc Get custom queries file +// @route GET /api/queries +// @access Public +exports.getQueries = asyncWrapper(async (req, res, next) => { + const file = new File(QUERIES_PATH); + const content = JSON.parse(file.read()); + + res.status(200).json({ + success: true, + data: content.queries, + }); +}); + +// @desc Delete query +// @route DELETE /api/queries/:prefix +// @access Public +exports.deleteQuery = asyncWrapper(async (req, res, next) => { + const file = new File(QUERIES_PATH); + let content = JSON.parse(file.read()); + + content.queries = content.queries.filter( + (q) => q.prefix != req.params.prefix + ); + file.write(content, true); + + res.status(200).json({ + success: true, + data: content.queries, + }); +}); diff --git a/routes/config.js b/routes/config.js index 6abea15..8c9ac15 100644 --- a/routes/config.js +++ b/routes/config.js @@ -10,7 +10,6 @@ const { deletePair, updateCss, getCss, - getQueries, } = require('../controllers/config'); router.route('/').post(createPair).get(getAllPairs).put(updateValues); @@ -19,6 +18,4 @@ router.route('/:key').get(getSinglePair).put(updateValue).delete(deletePair); router.route('/0/css').get(getCss).put(updateCss); -router.route('/0/queries').get(getQueries); - module.exports = router; diff --git a/routes/queries.js b/routes/queries.js new file mode 100644 index 0000000..0e17bc0 --- /dev/null +++ b/routes/queries.js @@ -0,0 +1,13 @@ +const express = require('express'); +const router = express.Router(); + +const { + getQueries, + addQuery, + deleteQuery, +} = require('../controllers/queries/'); + +router.route('/').post(addQuery).get(getQueries); +router.route('/:prefix').delete(deleteQuery); + +module.exports = router; From 38ffdf1bff3c9c00fde9439c0e93f14a820042eb Mon Sep 17 00:00:00 2001 From: unknown Date: Mon, 11 Oct 2021 13:55:53 +0200 Subject: [PATCH 070/196] Add and update custom queries --- .../CustomQueries/CustomQueries.module.css | 4 + .../CustomQueries/CustomQueries.tsx | 26 ++++-- .../CustomQueries/QueriesForm.tsx | 86 +++++++++++++++---- client/src/store/actions/actionTypes.ts | 5 +- client/src/store/actions/config.ts | 23 +++++ client/src/store/reducers/config.ts | 9 ++ controllers/queries/index.js | 28 ++++++ routes/queries.js | 3 +- 8 files changed, 159 insertions(+), 25 deletions(-) diff --git a/client/src/components/Settings/SearchSettings/CustomQueries/CustomQueries.module.css b/client/src/components/Settings/SearchSettings/CustomQueries/CustomQueries.module.css index 36313bf..73297cc 100644 --- a/client/src/components/Settings/SearchSettings/CustomQueries/CustomQueries.module.css +++ b/client/src/components/Settings/SearchSettings/CustomQueries/CustomQueries.module.css @@ -7,6 +7,10 @@ color: var(--color-primary); } +.QueriesGrid span:last-child { + margin-bottom: 10px; +} + .ActionIcons { display: flex; } diff --git a/client/src/components/Settings/SearchSettings/CustomQueries/CustomQueries.tsx b/client/src/components/Settings/SearchSettings/CustomQueries/CustomQueries.tsx index bc50cf4..de9d226 100644 --- a/client/src/components/Settings/SearchSettings/CustomQueries/CustomQueries.tsx +++ b/client/src/components/Settings/SearchSettings/CustomQueries/CustomQueries.tsx @@ -3,11 +3,9 @@ import { connect } from 'react-redux'; import classes from './CustomQueries.module.css'; -import ModalForm from '../../../UI/Forms/ModalForm/ModalForm'; import Modal from '../../../UI/Modal/Modal'; import Icon from '../../../UI/Icons/Icon/Icon'; import { GlobalState, Query } from '../../../../interfaces'; -import InputGroup from '../../../UI/Forms/InputGroup/InputGroup'; import QueriesForm from './QueriesForm'; import { deleteQuery } from '../../../../store/actions'; import Button from '../../../UI/Buttons/Button/Button'; @@ -21,6 +19,12 @@ const CustomQueries = (props: Props): JSX.Element => { const { customQueries, deleteQuery } = props; const [modalIsOpen, setModalIsOpen] = useState(false); + const [editableQuery, setEditableQuery] = useState(null); + + const updateHandler = (query: Query) => { + setEditableQuery(query); + setModalIsOpen(true); + }; const deleteHandler = (query: Query) => { if (window.confirm(`Are you sure you want to delete this provider?`)) { @@ -34,7 +38,14 @@ const CustomQueries = (props: Props): JSX.Element => { isOpen={modalIsOpen} setIsOpen={() => setModalIsOpen(!modalIsOpen)} > - setModalIsOpen(!modalIsOpen)} /> + {editableQuery ? ( + setModalIsOpen(!modalIsOpen)} + query={editableQuery} + /> + ) : ( + setModalIsOpen(!modalIsOpen)} /> + )}
@@ -54,7 +65,7 @@ const CustomQueries = (props: Props): JSX.Element => { {q.name} {q.prefix} - + updateHandler(q)}> deleteHandler(q)}> @@ -65,7 +76,12 @@ const CustomQueries = (props: Props): JSX.Element => { ))}
-
diff --git a/client/src/components/Settings/SearchSettings/CustomQueries/QueriesForm.tsx b/client/src/components/Settings/SearchSettings/CustomQueries/QueriesForm.tsx index 8a20e05..42ad654 100644 --- a/client/src/components/Settings/SearchSettings/CustomQueries/QueriesForm.tsx +++ b/client/src/components/Settings/SearchSettings/CustomQueries/QueriesForm.tsx @@ -1,20 +1,70 @@ -import { useState } from 'react'; +import { ChangeEvent, FormEvent, useState, useEffect } from 'react'; +import { Query } from '../../../../interfaces'; import Button from '../../../UI/Buttons/Button/Button'; import InputGroup from '../../../UI/Forms/InputGroup/InputGroup'; import ModalForm from '../../../UI/Forms/ModalForm/ModalForm'; +import { connect } from 'react-redux'; +import { addQuery, updateQuery } from '../../../../store/actions'; interface Props { modalHandler: () => void; - // addApp: (formData: NewApp | FormData) => any; - // updateApp: (id: number, formData: NewApp | FormData) => any; - // app?: App; + addQuery: (query: Query) => {}; + updateQuery: (query: Query, Oldprefix: string) => {}; + query?: Query; } const QueriesForm = (props: Props): JSX.Element => { - const [formData, setFormData] = useState(); + const { modalHandler, addQuery, updateQuery, query } = props; + + const [formData, setFormData] = useState({ + name: '', + prefix: '', + template: '', + }); + + const inputChangeHandler = (e: ChangeEvent) => { + const { name, value } = e.target; + + setFormData({ + ...formData, + [name]: value, + }); + }; + + const formHandler = (e: FormEvent) => { + e.preventDefault(); + + if (query) { + updateQuery(formData, query.prefix); + } else { + addQuery(formData); + } + + // close modal + modalHandler(); + + // clear form + setFormData({ + name: '', + prefix: '', + template: '', + }); + }; + + useEffect(() => { + if (query) { + setFormData(query); + } else { + setFormData({ + name: '', + prefix: '', + template: '', + }); + } + }, [query]); return ( - {}}> + { id="name" placeholder="Google" required - // value={formData.name} - // onChange={(e) => inputChangeHandler(e)} + value={formData.name} + onChange={(e) => inputChangeHandler(e)} /> inputChangeHandler(e)} + value={formData.prefix} + onChange={(e) => inputChangeHandler(e)} /> inputChangeHandler(e)} + value={formData.template} + onChange={(e) => inputChangeHandler(e)} /> - + {query ? : } ); }; -export default QueriesForm; +export default connect(null, { addQuery, updateQuery })(QueriesForm); diff --git a/client/src/store/actions/actionTypes.ts b/client/src/store/actions/actionTypes.ts index f040016..c670b2f 100644 --- a/client/src/store/actions/actionTypes.ts +++ b/client/src/store/actions/actionTypes.ts @@ -32,6 +32,7 @@ import { AddQueryAction, DeleteQueryAction, FetchQueriesAction, + UpdateQueryAction, } from './config'; export enum ActionTypes { @@ -71,6 +72,7 @@ export enum ActionTypes { fetchQueries = 'FETCH_QUERIES', addQuery = 'ADD_QUERY', deleteQuery = 'DELETE_QUERY', + updateQuery = 'UPDATE_QUERY', } export type Action = @@ -104,4 +106,5 @@ export type Action = | UpdateConfigAction | FetchQueriesAction | AddQueryAction - | DeleteQueryAction; + | DeleteQueryAction + | UpdateQueryAction; diff --git a/client/src/store/actions/config.ts b/client/src/store/actions/config.ts index d0c8a42..29c5186 100644 --- a/client/src/store/actions/config.ts +++ b/client/src/store/actions/config.ts @@ -110,3 +110,26 @@ export const deleteQuery = console.log(err); } }; + +export interface UpdateQueryAction { + type: ActionTypes.updateQuery; + payload: Query[]; +} + +export const updateQuery = + (query: Query, oldPrefix: string) => + async (dispatch: Dispatch) => { + try { + const res = await axios.put>( + `/api/queries/${oldPrefix}`, + query + ); + + dispatch({ + type: ActionTypes.updateQuery, + payload: res.data.data, + }); + } catch (err) { + console.log(err); + } + }; diff --git a/client/src/store/reducers/config.ts b/client/src/store/reducers/config.ts index 08b68e6..ac81aeb 100644 --- a/client/src/store/reducers/config.ts +++ b/client/src/store/reducers/config.ts @@ -48,6 +48,13 @@ const deleteQuery = (state: State, action: Action): State => { }; }; +const updateQuery = (state: State, action: Action): State => { + return { + ...state, + customQueries: action.payload, + }; +}; + const configReducer = (state: State = initialState, action: Action) => { switch (action.type) { case ActionTypes.getConfig: @@ -60,6 +67,8 @@ const configReducer = (state: State = initialState, action: Action) => { return addQuery(state, action); case ActionTypes.deleteQuery: return deleteQuery(state, action); + case ActionTypes.updateQuery: + return updateQuery(state, action); default: return state; } diff --git a/controllers/queries/index.js b/controllers/queries/index.js index b68f145..ae1ccec 100644 --- a/controllers/queries/index.js +++ b/controllers/queries/index.js @@ -34,6 +34,34 @@ exports.getQueries = asyncWrapper(async (req, res, next) => { }); }); +// @desc Update query +// @route PUT /api/queries/:prefix +// @access Public +exports.updateQuery = asyncWrapper(async (req, res, next) => { + const file = new File(QUERIES_PATH); + let content = JSON.parse(file.read()); + + let queryIdx = content.queries.findIndex( + (q) => q.prefix == req.params.prefix + ); + + // query found + if (queryIdx > -1) { + content.queries = [ + ...content.queries.slice(0, queryIdx), + req.body, + ...content.queries.slice(queryIdx + 1), + ]; + } + + file.write(content, true); + + res.status(200).json({ + success: true, + data: content.queries, + }); +}); + // @desc Delete query // @route DELETE /api/queries/:prefix // @access Public diff --git a/routes/queries.js b/routes/queries.js index 0e17bc0..afacffd 100644 --- a/routes/queries.js +++ b/routes/queries.js @@ -5,9 +5,10 @@ const { getQueries, addQuery, deleteQuery, + updateQuery, } = require('../controllers/queries/'); router.route('/').post(addQuery).get(getQueries); -router.route('/:prefix').delete(deleteQuery); +router.route('/:prefix').delete(deleteQuery).put(updateQuery); module.exports = router; From edb04c375f841d0fa8d9559f430193b8e15ee416 Mon Sep 17 00:00:00 2001 From: unknown Date: Mon, 11 Oct 2021 14:05:53 +0200 Subject: [PATCH 071/196] Prevent deleting active search provider --- .../CustomQueries/CustomQueries.tsx | 24 +++++++++++++++---- 1 file changed, 19 insertions(+), 5 deletions(-) diff --git a/client/src/components/Settings/SearchSettings/CustomQueries/CustomQueries.tsx b/client/src/components/Settings/SearchSettings/CustomQueries/CustomQueries.tsx index de9d226..c5dac62 100644 --- a/client/src/components/Settings/SearchSettings/CustomQueries/CustomQueries.tsx +++ b/client/src/components/Settings/SearchSettings/CustomQueries/CustomQueries.tsx @@ -5,18 +5,20 @@ import classes from './CustomQueries.module.css'; import Modal from '../../../UI/Modal/Modal'; import Icon from '../../../UI/Icons/Icon/Icon'; -import { GlobalState, Query } from '../../../../interfaces'; +import { GlobalState, NewNotification, Query } from '../../../../interfaces'; import QueriesForm from './QueriesForm'; -import { deleteQuery } from '../../../../store/actions'; +import { deleteQuery, createNotification } from '../../../../store/actions'; import Button from '../../../UI/Buttons/Button/Button'; +import { searchConfig } from '../../../../utility'; interface Props { customQueries: Query[]; deleteQuery: (prefix: string) => {}; + createNotification: (notification: NewNotification) => void; } const CustomQueries = (props: Props): JSX.Element => { - const { customQueries, deleteQuery } = props; + const { customQueries, deleteQuery, createNotification } = props; const [modalIsOpen, setModalIsOpen] = useState(false); const [editableQuery, setEditableQuery] = useState(null); @@ -27,7 +29,17 @@ const CustomQueries = (props: Props): JSX.Element => { }; const deleteHandler = (query: Query) => { - if (window.confirm(`Are you sure you want to delete this provider?`)) { + const currentProvider = searchConfig('defaultSearchProvider', 'l'); + const isCurrent = currentProvider === query.prefix; + + if (isCurrent) { + createNotification({ + title: 'Error', + message: 'Cannot delete active provider', + }); + } else if ( + window.confirm(`Are you sure you want to delete this provider?`) + ) { deleteQuery(query.prefix); } }; @@ -95,4 +107,6 @@ const mapStateToProps = (state: GlobalState) => { }; }; -export default connect(mapStateToProps, { deleteQuery })(CustomQueries); +export default connect(mapStateToProps, { deleteQuery, createNotification })( + CustomQueries +); From 7129fe83dae086bad49f935885b831083e85abfc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pawe=C5=82=20Malak?= Date: Mon, 11 Oct 2021 15:15:26 +0200 Subject: [PATCH 072/196] Fixed bug with fetching config. Pushed version 1.7.0 --- .env | 2 +- CHANGELOG.md | 4 +++- client/.env | 2 +- .../components/Settings/SearchSettings/SearchSettings.tsx | 2 +- client/src/store/reducers/config.ts | 1 + controllers/apps.js | 5 ++++- 6 files changed, 11 insertions(+), 5 deletions(-) diff --git a/.env b/.env index feb0686..1bb2edb 100644 --- a/.env +++ b/.env @@ -1,3 +1,3 @@ PORT=5005 NODE_ENV=development -VERSION=1.6.9 \ No newline at end of file +VERSION=1.7.0 \ No newline at end of file diff --git a/CHANGELOG.md b/CHANGELOG.md index 85af84f..54c68e1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,8 +1,10 @@ -### v1.7.0 (TBA) +### v1.7.0 (2021-10-11) - Search bar will now redirect if valid URL or IP is provided ([#67](https://github.com/pawelmalak/flame/issues/67)) +- Users can now add their custom search providers ([#71](https://github.com/pawelmalak/flame/issues/71)) - Fixed bug related to creating new apps/bookmarks with custom icon ([#83](https://github.com/pawelmalak/flame/issues/83)) - URL can now be assigned to notifications. Clicking on "New version is available" popup will now redirect to changelog ([#86](https://github.com/pawelmalak/flame/issues/86)) - Added static fonts ([#94](https://github.com/pawelmalak/flame/issues/94)) +- Fixed bug with overriding app icon created with docker labels ### v1.6.9 (2021-10-09) - Added option for remote docker host ([#97](https://github.com/pawelmalak/flame/issues/97)) diff --git a/client/.env b/client/.env index e9f8924..6dbe18b 100644 --- a/client/.env +++ b/client/.env @@ -1 +1 @@ -REACT_APP_VERSION=1.6.9 \ No newline at end of file +REACT_APP_VERSION=1.7.0 \ No newline at end of file diff --git a/client/src/components/Settings/SearchSettings/SearchSettings.tsx b/client/src/components/Settings/SearchSettings/SearchSettings.tsx index 5b40f71..b2ac422 100644 --- a/client/src/components/Settings/SearchSettings/SearchSettings.tsx +++ b/client/src/components/Settings/SearchSettings/SearchSettings.tsx @@ -46,7 +46,7 @@ const SearchSettings = (props: Props): JSX.Element => { useEffect(() => { setFormData({ hideSearch: searchConfig('hideSearch', 0), - defaultSearchProvider: searchConfig('defaultSearchProvider', 'd'), + defaultSearchProvider: searchConfig('defaultSearchProvider', 'l'), searchSameTab: searchConfig('searchSameTab', 0), }); }, [props.loading]); diff --git a/client/src/store/reducers/config.ts b/client/src/store/reducers/config.ts index ac81aeb..ae2699e 100644 --- a/client/src/store/reducers/config.ts +++ b/client/src/store/reducers/config.ts @@ -17,6 +17,7 @@ const getConfig = (state: State, action: Action): State => { return { ...state, loading: false, + config: action.payload, }; }; diff --git a/controllers/apps.js b/controllers/apps.js index c2b065e..b976d45 100644 --- a/controllers/apps.js +++ b/controllers/apps.js @@ -131,7 +131,10 @@ exports.getApps = asyncWrapper(async (req, res, next) => { if (apps.some((app) => app.name === item.name)) { const app = apps.filter((e) => e.name === item.name)[0]; - if (item.icon === 'custom' || (item.icon === 'docker' && app.icon != 'docker')) { + if ( + item.icon === 'custom' || + (item.icon === 'docker' && app.icon != 'docker') + ) { await app.update({ name: item.name, url: item.url, From e5cba605fa2623b20124e86da24201de89d0557d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pawe=C5=82=20Malak?= Date: Wed, 13 Oct 2021 13:31:01 +0200 Subject: [PATCH 073/196] Search bar bug fixes --- CHANGELOG.md | 4 +++ client/src/components/SearchBar/SearchBar.tsx | 27 ++++++++++++++----- client/src/store/reducers/theme.ts | 24 +++++++++-------- client/src/utility/searchParser.ts | 2 +- 4 files changed, 38 insertions(+), 19 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 54c68e1..54d5274 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,7 @@ +### v1.7.1 (TBA) +- Fixed search action not being triggered by Numpad Enter +- Fixed search bar not redirecting to valid URL if it starts with capital letter ([#118](https://github.com/pawelmalak/flame/issues/118)) + ### v1.7.0 (2021-10-11) - Search bar will now redirect if valid URL or IP is provided ([#67](https://github.com/pawelmalak/flame/issues/67)) - Users can now add their custom search providers ([#71](https://github.com/pawelmalak/flame/issues/71)) diff --git a/client/src/components/SearchBar/SearchBar.tsx b/client/src/components/SearchBar/SearchBar.tsx index 887a2ef..85175ff 100644 --- a/client/src/components/SearchBar/SearchBar.tsx +++ b/client/src/components/SearchBar/SearchBar.tsx @@ -27,6 +27,11 @@ const SearchBar = (props: ComponentProps): JSX.Element => { inputRef.current.focus(); }, []); + const clearSearch = () => { + inputRef.current.value = ''; + setLocalSearch(''); + }; + const searchHandler = (e: KeyboardEvent) => { const { isLocal, search, query, isURL, sameTab } = searchParser( inputRef.current.value @@ -36,31 +41,39 @@ const SearchBar = (props: ComponentProps): JSX.Element => { setLocalSearch(search); } - if (e.code === 'Enter') { + if (e.code === 'Enter' || e.code === 'NumpadEnter') { if (!query.prefix) { + // Prefix not found -> emit notification createNotification({ title: 'Error', message: 'Prefix not found', }); } else if (isURL) { + // URL or IP passed -> redirect const url = urlParser(inputRef.current.value)[1]; redirectUrl(url, sameTab); } else if (isLocal) { + // Local query -> filter apps and bookmarks setLocalSearch(search); } else { + // Valid query -> redirect to search results const url = `${query.template}${search}`; redirectUrl(url, sameTab); } + } else if (e.code === 'Escape') { + clearSearch(); } }; return ( - searchHandler(e)} - /> +
+ searchHandler(e)} + /> +
); }; diff --git a/client/src/store/reducers/theme.ts b/client/src/store/reducers/theme.ts index fabcc4b..6adc225 100644 --- a/client/src/store/reducers/theme.ts +++ b/client/src/store/reducers/theme.ts @@ -7,20 +7,22 @@ export interface State { const initialState: State = { theme: { - name: 'blues', + name: 'tron', colors: { - background: '#2B2C56', - primary: '#EFF1FC', - accent: '#6677EB' - } - } -} + background: '#242B33', + primary: '#EFFBFF', + accent: '#6EE2FF', + }, + }, +}; const themeReducer = (state = initialState, action: Action) => { switch (action.type) { - case ActionTypes.setTheme: return { theme: action.payload }; - default: return state; + case ActionTypes.setTheme: + return { theme: action.payload }; + default: + return state; } -} +}; -export default themeReducer; \ No newline at end of file +export default themeReducer; diff --git a/client/src/utility/searchParser.ts b/client/src/utility/searchParser.ts index 2befdd2..e14617c 100644 --- a/client/src/utility/searchParser.ts +++ b/client/src/utility/searchParser.ts @@ -20,7 +20,7 @@ export const searchParser = (searchQuery: string): SearchResult => { // Check if url or ip was passed const urlRegex = - /^(http:\/\/www\.|https:\/\/www\.|http:\/\/|https:\/\/)?[a-z0-9]+([\-\.]{1}[a-z0-9]+)*\.[a-z]{2,5}(:[0-9]{1,5})?(\/.*)?|^((http:\/\/www\.|https:\/\/www\.|http:\/\/|https:\/\/)?([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$/; + /^(http:\/\/www\.|https:\/\/www\.|http:\/\/|https:\/\/)?[a-z0-9]+([\-\.]{1}[a-z0-9]+)*\.[a-z]{2,5}(:[0-9]{1,5})?(\/.*)?|^((http:\/\/www\.|https:\/\/www\.|http:\/\/|https:\/\/)?([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$/i; result.isURL = urlRegex.test(searchQuery); From b7de1e3d275dba1ffc7f66d482579153989f835f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pawe=C5=82=20Malak?= Date: Thu, 21 Oct 2021 17:14:25 +0200 Subject: [PATCH 074/196] Server: Reimplemented config system --- db/migrations/01_new-config.js | 41 +++++++++++++ utils/checkFileExists.js | 10 ++++ utils/init/index.js | 2 +- utils/init/initConfig.js | 48 ++++++---------- utils/init/initialConfig.json | 102 +++++++-------------------------- utils/loadConfig.js | 18 ++++++ 6 files changed, 107 insertions(+), 114 deletions(-) create mode 100644 db/migrations/01_new-config.js create mode 100644 utils/checkFileExists.js create mode 100644 utils/loadConfig.js diff --git a/db/migrations/01_new-config.js b/db/migrations/01_new-config.js new file mode 100644 index 0000000..2c42af7 --- /dev/null +++ b/db/migrations/01_new-config.js @@ -0,0 +1,41 @@ +const { DataTypes } = require('sequelize'); +const { INTEGER, DATE, STRING, TINYINT, FLOAT, TEXT } = DataTypes; +const { readFile, writeFile, copyFile } = require('fs/promises'); +const Config = require('../../models/Config'); + +const up = async (query) => { + await copyFile('utils/init/initialConfig.json', 'data/config.json'); + + const initConfigFile = await readFile('data/config.json', 'utf-8'); + const parsedNewConfig = JSON.parse(initConfigFile); + + const existingConfig = await Config.findAll({ raw: true }); + + for (let pair of existingConfig) { + const { key, value, valueType } = pair; + + let newValue = value; + + if (valueType == 'number') { + newValue = parseFloat(value); + } else if (valueType == 'boolean') { + newValue = value == 1; + } + + parsedNewConfig[key] = newValue; + } + + const newConfig = JSON.stringify(parsedNewConfig); + await writeFile('data/config.json', newConfig); + + // await query.dropTable('config'); +}; + +const down = async (query) => { + // await query.dropTable('config'); +}; + +module.exports = { + up, + down, +}; diff --git a/utils/checkFileExists.js b/utils/checkFileExists.js new file mode 100644 index 0000000..091c24e --- /dev/null +++ b/utils/checkFileExists.js @@ -0,0 +1,10 @@ +const fs = require('fs'); + +const checkFileExists = (path) => { + return fs.promises + .access(path, fs.constants.F_OK) + .then(() => true) + .catch(() => false); +}; + +module.exports = checkFileExists; diff --git a/utils/init/index.js b/utils/init/index.js index a0e11a1..bbc507c 100644 --- a/utils/init/index.js +++ b/utils/init/index.js @@ -2,8 +2,8 @@ const initConfig = require('./initConfig'); const initFiles = require('./initFiles'); const initApp = async () => { - await initConfig(); await initFiles(); + await initConfig(); }; module.exports = initApp; diff --git a/utils/init/initConfig.js b/utils/init/initConfig.js index 83ce4ea..b7ef5d9 100644 --- a/utils/init/initConfig.js +++ b/utils/init/initConfig.js @@ -1,39 +1,25 @@ -const { Op } = require('sequelize'); -const Config = require('../../models/Config'); -const { config } = require('./initialConfig.json'); - -const Logger = require('../Logger'); -const logger = new Logger(); +const { copyFile, readFile, writeFile } = require('fs/promises'); +const checkFileExists = require('../checkFileExists'); +const initialConfig = require('./initialConfig.json'); const initConfig = async () => { - // Get config values - const configPairs = await Config.findAll({ - where: { - key: { - [Op.or]: config.map((pair) => pair.key), - }, - }, - }); + const configExists = await checkFileExists('data/config.json'); - // Get key from each pair - const configKeys = configPairs.map((pair) => pair.key); - - // Create missing pairs - config.forEach(async ({ key, value }) => { - if (!configKeys.includes(key)) { - await Config.create({ - key, - value, - valueType: typeof value, - }); - } - }); - - if (process.env.NODE_ENV == 'development') { - logger.log('Initial config created'); + if (!configExists) { + await copyFile('utils/init/initialConfig.json', 'data/config.json'); } - return; + const existingConfig = await readFile('data/config.json', 'utf-8'); + const parsedConfig = JSON.parse(existingConfig); + + // Add new config pairs if necessary + for (let key in initialConfig) { + if (!Object.keys(parsedConfig).includes(key)) { + parsedConfig[key] = initialConfig[key]; + } + } + + await writeFile('data/config.json', JSON.stringify(parsedConfig)); }; module.exports = initConfig; diff --git a/utils/init/initialConfig.json b/utils/init/initialConfig.json index 18cc3b4..f6b57a3 100644 --- a/utils/init/initialConfig.json +++ b/utils/init/initialConfig.json @@ -1,84 +1,22 @@ { - "config": [ - { - "key": "WEATHER_API_KEY", - "value": "" - }, - { - "key": "lat", - "value": 0 - }, - { - "key": "long", - "value": 0 - }, - { - "key": "isCelsius", - "value": true - }, - { - "key": "customTitle", - "value": "Flame" - }, - { - "key": "pinAppsByDefault", - "value": true - }, - { - "key": "pinCategoriesByDefault", - "value": true - }, - { - "key": "hideHeader", - "value": false - }, - { - "key": "useOrdering", - "value": "createdAt" - }, - { - "key": "appsSameTab", - "value": false - }, - { - "key": "bookmarksSameTab", - "value": false - }, - { - "key": "searchSameTab", - "value": false - }, - { - "key": "hideApps", - "value": false - }, - { - "key": "hideCategories", - "value": false - }, - { - "key": "hideSearch", - "value": false - }, - { - "key": "defaultSearchProvider", - "value": "l" - }, - { - "key": "dockerApps", - "value": false - }, - { - "key": "dockerHost", - "value": "localhost" - }, - { - "key": "kubernetesApps", - "value": false - }, - { - "key": "unpinStoppedApps", - "value": false - } - ] + "WEATHER_API_KEY": "", + "lat": 0, + "long": 0, + "isCelsius": true, + "customTitle": "Flame", + "pinAppsByDefault": true, + "pinCategoriesByDefault": true, + "hideHeader": false, + "useOrdering": "createdAt", + "appsSameTab": false, + "bookmarksSameTab": false, + "searchSameTab": false, + "hideApps": false, + "hideCategories": false, + "hideSearch": false, + "defaultSearchProvider": "l", + "dockerApps": false, + "dockerHost": "localhost", + "kubernetesApps": false, + "unpinStoppedApps": false } diff --git a/utils/loadConfig.js b/utils/loadConfig.js new file mode 100644 index 0000000..dc234f1 --- /dev/null +++ b/utils/loadConfig.js @@ -0,0 +1,18 @@ +const { readFile } = require('fs/promises'); +const checkFileExists = require('../utils/checkFileExists'); +const initConfig = require('../utils/init/initConfig'); + +const loadConfig = async () => { + const configExists = await checkFileExists('data/config.json'); + + if (!configExists) { + await initConfig(); + } + + const config = await readFile('data/config.json', 'utf-8'); + const parsedConfig = JSON.parse(config); + + return parsedConfig; +}; + +module.exports = loadConfig; From 34279c8b8c19cd9536da1d7f55b15382de308b45 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pawe=C5=82=20Malak?= Date: Fri, 22 Oct 2021 00:42:27 +0200 Subject: [PATCH 075/196] Split apps controllers into separate files --- controllers/apps.js | 352 ----------------------- controllers/apps/createApp.js | 33 +++ controllers/apps/deleteApp.js | 18 ++ controllers/apps/docker/index.js | 4 + controllers/apps/docker/useDocker.js | 148 ++++++++++ controllers/apps/docker/useKubernetes.js | 70 +++++ controllers/apps/getAllApps.js | 52 ++++ controllers/apps/getSingleApp.js | 27 ++ controllers/apps/index.js | 8 + controllers/apps/reorderApps.js | 23 ++ controllers/apps/updateApp.js | 35 +++ db/index.js | 1 - middleware/asyncWrapper.js | 16 +- middleware/errorHandler.js | 12 +- routes/apps.js | 23 +- utils/getExternalWeather.js | 20 +- 16 files changed, 444 insertions(+), 398 deletions(-) delete mode 100644 controllers/apps.js create mode 100644 controllers/apps/createApp.js create mode 100644 controllers/apps/deleteApp.js create mode 100644 controllers/apps/docker/index.js create mode 100644 controllers/apps/docker/useDocker.js create mode 100644 controllers/apps/docker/useKubernetes.js create mode 100644 controllers/apps/getAllApps.js create mode 100644 controllers/apps/getSingleApp.js create mode 100644 controllers/apps/index.js create mode 100644 controllers/apps/reorderApps.js create mode 100644 controllers/apps/updateApp.js diff --git a/controllers/apps.js b/controllers/apps.js deleted file mode 100644 index 8fc7acd..0000000 --- a/controllers/apps.js +++ /dev/null @@ -1,352 +0,0 @@ -const asyncWrapper = require('../middleware/asyncWrapper'); -const ErrorResponse = require('../utils/ErrorResponse'); -const App = require('../models/App'); -const Config = require('../models/Config'); -const { Sequelize } = require('sequelize'); -const axios = require('axios'); -const Logger = require('../utils/Logger'); -const logger = new Logger(); -const k8s = require('@kubernetes/client-node'); - -// @desc Create new app -// @route POST /api/apps -// @access Public -exports.createApp = asyncWrapper(async (req, res, next) => { - // Get config from database - const pinApps = await Config.findOne({ - where: { key: 'pinAppsByDefault' }, - }); - - let app; - let _body = { ...req.body }; - - if (req.file) { - _body.icon = req.file.filename; - } - - if (pinApps) { - if (parseInt(pinApps.value)) { - app = await App.create({ - ..._body, - isPinned: true, - }); - } else { - app = await App.create(req.body); - } - } - - res.status(201).json({ - success: true, - data: app, - }); -}); - -// @desc Get all apps -// @route GET /api/apps -// @access Public -exports.getApps = asyncWrapper(async (req, res, next) => { - // Get config from database - const useOrdering = await Config.findOne({ - where: { key: 'useOrdering' }, - }); - const useDockerApi = await Config.findOne({ - where: { key: 'dockerApps' }, - }); - const useKubernetesApi = await Config.findOne({ - where: { key: 'kubernetesApps' }, - }); - const unpinStoppedApps = await Config.findOne({ - where: { key: 'unpinStoppedApps' }, - }); - - const orderType = useOrdering ? useOrdering.value : 'createdAt'; - let apps; - - if (useDockerApi && useDockerApi.value == 1) { - let containers = null; - - const host = await Config.findOne({ - where: { key: 'dockerHost' }, - }); - - try { - if (host.value.includes('localhost')) { - let { data } = await axios.get( - `http://${host.value}/containers/json?{"status":["running"]}`, - { - socketPath: '/var/run/docker.sock', - } - ); - containers = data; - } else { - let { data } = await axios.get( - `http://${host.value}/containers/json?{"status":["running"]}` - ); - containers = data; - } - } catch { - logger.log(`Can't connect to the docker api on ${host.value}`, 'ERROR'); - } - - if (containers) { - apps = await App.findAll({ - order: [[orderType, 'ASC']], - }); - - containers = containers.filter((e) => Object.keys(e.Labels).length !== 0); - const dockerApps = []; - for (const container of containers) { - let labels = container.Labels; - - if (!('flame.url' in labels)) { - for (const label of Object.keys(labels)) { - if (/^traefik.*.frontend.rule/.test(label)) { - // Traefik 1.x - let value = labels[label]; - if (value.indexOf('Host') !== -1) { - value = value.split('Host:')[1]; - labels['flame.url'] = 'https://' + value.split(',').join(';https://'); - } - } else if (/^traefik.*?\.rule/.test(label)) { - // Traefik 2.x - const value = labels[label]; - if (value.indexOf('Host') !== -1) { - const regex = /\`([a-zA-Z0-9\.\-]+)\`/g; - const domains = [] - while ((match = regex.exec(value)) != null) { - domains.push('http://' + match[1]); - } - if (domains.length > 0) { - labels['flame.url'] = domains.join(';'); - } - } - } - } - } - - if ( - 'flame.name' in labels && - 'flame.url' in labels && - /^app/.test(labels['flame.type']) - ) { - for (let i = 0; i < labels['flame.name'].split(';').length; i++) { - const names = labels['flame.name'].split(';'); - const urls = labels['flame.url'].split(';'); - let icons = ''; - - if ('flame.icon' in labels) { - icons = labels['flame.icon'].split(';'); - } - - dockerApps.push({ - name: names[i] || names[0], - url: urls[i] || urls[0], - icon: icons[i] || 'docker', - }); - } - } - } - - if (unpinStoppedApps && unpinStoppedApps.value == 1) { - for (const app of apps) { - await app.update({ isPinned: false }); - } - } - - for (const item of dockerApps) { - if (apps.some((app) => app.name === item.name)) { - const app = apps.filter((e) => e.name === item.name)[0]; - - if ( - item.icon === 'custom' || - (item.icon === 'docker' && app.icon != 'docker') - ) { - await app.update({ - name: item.name, - url: item.url, - isPinned: true, - }); - } else { - await app.update({ - name: item.name, - url: item.url, - icon: item.icon, - isPinned: true, - }); - } - } else { - await App.create({ - name: item.name, - url: item.url, - icon: item.icon === 'custom' ? 'docker' : item.icon, - isPinned: true, - }); - } - } - } - } - - if (useKubernetesApi && useKubernetesApi.value == 1) { - let ingresses = null; - - try { - const kc = new k8s.KubeConfig(); - kc.loadFromCluster(); - const k8sNetworkingV1Api = kc.makeApiClient(k8s.NetworkingV1Api); - await k8sNetworkingV1Api.listIngressForAllNamespaces().then((res) => { - ingresses = res.body.items; - }); - } catch { - logger.log("Can't connect to the kubernetes api", 'ERROR'); - } - - if (ingresses) { - apps = await App.findAll({ - order: [[orderType, 'ASC']], - }); - - ingresses = ingresses.filter( - (e) => Object.keys(e.metadata.annotations).length !== 0 - ); - const kubernetesApps = []; - for (const ingress of ingresses) { - const annotations = ingress.metadata.annotations; - - if ( - 'flame.pawelmalak/name' in annotations && - 'flame.pawelmalak/url' in annotations && - /^app/.test(annotations['flame.pawelmalak/type']) - ) { - kubernetesApps.push({ - name: annotations['flame.pawelmalak/name'], - url: annotations['flame.pawelmalak/url'], - icon: annotations['flame.pawelmalak/icon'] || 'kubernetes', - }); - } - } - - if (unpinStoppedApps && unpinStoppedApps.value == 1) { - for (const app of apps) { - await app.update({ isPinned: false }); - } - } - - for (const item of kubernetesApps) { - if (apps.some((app) => app.name === item.name)) { - const app = apps.filter((e) => e.name === item.name)[0]; - await app.update({ ...item, isPinned: true }); - } else { - await App.create({ - ...item, - isPinned: true, - }); - } - } - } - } - - if (orderType == 'name') { - apps = await App.findAll({ - order: [[Sequelize.fn('lower', Sequelize.col('name')), 'ASC']], - }); - } else { - apps = await App.findAll({ - order: [[orderType, 'ASC']], - }); - } - - if (process.env.NODE_ENV === 'production') { - // Set header to fetch containers info every time - res.status(200).setHeader('Cache-Control', 'no-store').json({ - success: true, - data: apps, - }); - return; - } - - res.status(200).json({ - success: true, - data: apps, - }); -}); - -// @desc Get single app -// @route GET /api/apps/:id -// @access Public -exports.getApp = asyncWrapper(async (req, res, next) => { - const app = await App.findOne({ - where: { id: req.params.id }, - }); - - if (!app) { - return next( - new ErrorResponse(`App with id of ${req.params.id} was not found`, 404) - ); - } - - res.status(200).json({ - success: true, - data: app, - }); -}); - -// @desc Update app -// @route PUT /api/apps/:id -// @access Public -exports.updateApp = asyncWrapper(async (req, res, next) => { - let app = await App.findOne({ - where: { id: req.params.id }, - }); - - if (!app) { - return next( - new ErrorResponse(`App with id of ${req.params.id} was not found`, 404) - ); - } - - let _body = { ...req.body }; - - if (req.file) { - _body.icon = req.file.filename; - } - - app = await app.update(_body); - - res.status(200).json({ - success: true, - data: app, - }); -}); - -// @desc Delete app -// @route DELETE /api/apps/:id -// @access Public -exports.deleteApp = asyncWrapper(async (req, res, next) => { - await App.destroy({ - where: { id: req.params.id }, - }); - - res.status(200).json({ - success: true, - data: {}, - }); -}); - -// @desc Reorder apps -// @route PUT /api/apps/0/reorder -// @access Public -exports.reorderApps = asyncWrapper(async (req, res, next) => { - req.body.apps.forEach(async ({ id, orderId }) => { - await App.update( - { orderId }, - { - where: { id }, - } - ); - }); - - res.status(200).json({ - success: true, - data: {}, - }); -}); diff --git a/controllers/apps/createApp.js b/controllers/apps/createApp.js new file mode 100644 index 0000000..361e77e --- /dev/null +++ b/controllers/apps/createApp.js @@ -0,0 +1,33 @@ +const asyncWrapper = require('../../middleware/asyncWrapper'); +const App = require('../../models/App'); +const loadConfig = require('../../utils/loadConfig'); + +// @desc Create new app +// @route POST /api/apps +// @access Public +const createApp = asyncWrapper(async (req, res, next) => { + const { pinAppsByDefault } = await loadConfig(); + + let app; + let _body = { ...req.body }; + + if (req.file) { + _body.icon = req.file.filename; + } + + if (pinAppsByDefault) { + app = await App.create({ + ..._body, + isPinned: true, + }); + } else { + app = await App.create(req.body); + } + + res.status(201).json({ + success: true, + data: app, + }); +}); + +module.exports = createApp; diff --git a/controllers/apps/deleteApp.js b/controllers/apps/deleteApp.js new file mode 100644 index 0000000..ed55729 --- /dev/null +++ b/controllers/apps/deleteApp.js @@ -0,0 +1,18 @@ +const asyncWrapper = require('../../middleware/asyncWrapper'); +const App = require('../../models/App'); + +// @desc Delete app +// @route DELETE /api/apps/:id +// @access Public +const deleteApp = asyncWrapper(async (req, res, next) => { + await App.destroy({ + where: { id: req.params.id }, + }); + + res.status(200).json({ + success: true, + data: {}, + }); +}); + +module.exports = deleteApp; diff --git a/controllers/apps/docker/index.js b/controllers/apps/docker/index.js new file mode 100644 index 0000000..f76a9e2 --- /dev/null +++ b/controllers/apps/docker/index.js @@ -0,0 +1,4 @@ +module.exports = { + useKubernetes: require('./useKubernetes'), + useDocker: require('./useDocker'), +}; diff --git a/controllers/apps/docker/useDocker.js b/controllers/apps/docker/useDocker.js new file mode 100644 index 0000000..fcc4379 --- /dev/null +++ b/controllers/apps/docker/useDocker.js @@ -0,0 +1,148 @@ +const App = require('../../models/App'); +const axios = require('axios'); +const Logger = require('../../utils/Logger'); +const logger = new Logger(); +const loadConfig = require('../../utils/loadConfig'); + +const useDocker = async (apps) => { + const { + useOrdering: orderType, + unpinStoppedApps, + dockerHost: host, + } = await loadConfig(); + + let containers = null; + + // Get list of containers + try { + if (host.includes('localhost')) { + // Use default host + let { data } = await axios.get( + `http://${host}/containers/json?{"status":["running"]}`, + { + socketPath: '/var/run/docker.sock', + } + ); + + containers = data; + } else { + // Use custom host + let { data } = await axios.get( + `http://${host}/containers/json?{"status":["running"]}` + ); + + containers = data; + } + } catch { + logger.log(`Can't connect to the Docker API on ${host}`, 'ERROR'); + } + + if (containers) { + apps = await App.findAll({ + order: [[orderType, 'ASC']], + }); + + // Filter out containers without any annotations + containers = containers.filter((e) => Object.keys(e.Labels).length !== 0); + + const dockerApps = []; + + for (const container of containers) { + let labels = container.Labels; + + // todo + if (!('flame.url' in labels)) { + for (const label of Object.keys(labels)) { + if (/^traefik.*.frontend.rule/.test(label)) { + // Traefik 1.x + let value = labels[label]; + + if (value.indexOf('Host') !== -1) { + value = value.split('Host:')[1]; + labels['flame.url'] = + 'https://' + value.split(',').join(';https://'); + } + } else if (/^traefik.*?\.rule/.test(label)) { + // Traefik 2.x + const value = labels[label]; + + if (value.indexOf('Host') !== -1) { + const regex = /\`([a-zA-Z0-9\.\-]+)\`/g; + const domains = []; + + while ((match = regex.exec(value)) != null) { + domains.push('http://' + match[1]); + } + + if (domains.length > 0) { + labels['flame.url'] = domains.join(';'); + } + } + } + } + } + + // add each container as flame formatted app + if ( + 'flame.name' in labels && + 'flame.url' in labels && + /^app/.test(labels['flame.type']) + ) { + for (let i = 0; i < labels['flame.name'].split(';').length; i++) { + const names = labels['flame.name'].split(';'); + const urls = labels['flame.url'].split(';'); + let icons = ''; + + if ('flame.icon' in labels) { + icons = labels['flame.icon'].split(';'); + } + + dockerApps.push({ + name: names[i] || names[0], + url: urls[i] || urls[0], + icon: icons[i] || 'docker', + }); + } + } + } + + if (unpinStoppedApps) { + for (const app of apps) { + await app.update({ isPinned: false }); + } + } + + for (const item of dockerApps) { + // If app already exists, update it + if (apps.some((app) => app.name === item.name)) { + const app = apps.find((a) => a.name === item.name); + + if ( + item.icon === 'custom' || + (item.icon === 'docker' && app.icon != 'docker') + ) { + // update without overriding icon + await app.update({ + name: item.name, + url: item.url, + isPinned: true, + }); + } else { + await app.update({ + ...item, + isPinned: true, + }); + } + } else { + // else create new app + await App.create({ + ...item, + icon: item.icon === 'custom' ? 'docker' : item.icon, + isPinned: true, + }); + } + } + } +}; + +module.exports = useDocker; diff --git a/controllers/apps/docker/useKubernetes.js b/controllers/apps/docker/useKubernetes.js new file mode 100644 index 0000000..d9961cd --- /dev/null +++ b/controllers/apps/docker/useKubernetes.js @@ -0,0 +1,70 @@ +const App = require('../../../models/App'); +const k8s = require('@kubernetes/client-node'); +const Logger = require('../../../utils/Logger'); +const logger = new Logger(); +const loadConfig = require('../../../utils/loadConfig'); + +const useKubernetes = async (apps) => { + const { useOrdering: orderType, unpinStoppedApps } = await loadConfig(); + + let ingresses = null; + + try { + const kc = new k8s.KubeConfig(); + kc.loadFromCluster(); + const k8sNetworkingV1Api = kc.makeApiClient(k8s.NetworkingV1Api); + await k8sNetworkingV1Api.listIngressForAllNamespaces().then((res) => { + ingresses = res.body.items; + }); + } catch { + logger.log("Can't connect to the Kubernetes API", 'ERROR'); + } + + if (ingresses) { + apps = await App.findAll({ + order: [[orderType, 'ASC']], + }); + + ingresses = ingresses.filter( + (e) => Object.keys(e.metadata.annotations).length !== 0 + ); + + const kubernetesApps = []; + + for (const ingress of ingresses) { + const annotations = ingress.metadata.annotations; + + if ( + 'flame.pawelmalak/name' in annotations && + 'flame.pawelmalak/url' in annotations && + /^app/.test(annotations['flame.pawelmalak/type']) + ) { + kubernetesApps.push({ + name: annotations['flame.pawelmalak/name'], + url: annotations['flame.pawelmalak/url'], + icon: annotations['flame.pawelmalak/icon'] || 'kubernetes', + }); + } + } + + if (unpinStoppedApps) { + for (const app of apps) { + await app.update({ isPinned: false }); + } + } + + for (const item of kubernetesApps) { + if (apps.some((app) => app.name === item.name)) { + const app = apps.find((a) => a.name === item.name); + await app.update({ ...item, isPinned: true }); + } else { + await App.create({ + ...item, + isPinned: true, + }); + } + } + } +}; + +module.exports = useKubernetes; diff --git a/controllers/apps/getAllApps.js b/controllers/apps/getAllApps.js new file mode 100644 index 0000000..1172e34 --- /dev/null +++ b/controllers/apps/getAllApps.js @@ -0,0 +1,52 @@ +const asyncWrapper = require('../../middleware/asyncWrapper'); +const App = require('../../models/App'); +const { Sequelize } = require('sequelize'); +const loadConfig = require('../../utils/loadConfig'); + +const { useKubernetes, useDocker } = require('./docker'); + +// @desc Get all apps +// @route GET /api/apps +// @access Public +const getAllApps = asyncWrapper(async (req, res, next) => { + const { + useOrdering: orderType, + dockerApps: useDockerAPI, + kubernetesApps: useKubernetesAPI, + } = await loadConfig(); + + let apps; + + if (useDockerAPI) { + await useDocker(apps); + } + + if (useKubernetesAPI) { + await useKubernetes(apps); + } + + if (orderType == 'name') { + apps = await App.findAll({ + order: [[Sequelize.fn('lower', Sequelize.col('name')), 'ASC']], + }); + } else { + apps = await App.findAll({ + order: [[orderType, 'ASC']], + }); + } + + if (process.env.NODE_ENV === 'production') { + // Set header to fetch containers info every time + return res.status(200).setHeader('Cache-Control', 'no-store').json({ + success: true, + data: apps, + }); + } + + res.status(200).json({ + success: true, + data: apps, + }); +}); + +module.exports = getAllApps; diff --git a/controllers/apps/getSingleApp.js b/controllers/apps/getSingleApp.js new file mode 100644 index 0000000..9a06b68 --- /dev/null +++ b/controllers/apps/getSingleApp.js @@ -0,0 +1,27 @@ +const asyncWrapper = require('../../middleware/asyncWrapper'); +const App = require('../../models/App'); + +// @desc Get single app +// @route GET /api/apps/:id +// @access Public +const getSingleApp = asyncWrapper(async (req, res, next) => { + const app = await App.findOne({ + where: { id: req.params.id }, + }); + + if (!app) { + return next( + new ErrorResponse( + `App with the id of ${req.params.id} was not found`, + 404 + ) + ); + } + + res.status(200).json({ + success: true, + data: app, + }); +}); + +module.exports = getSingleApp; diff --git a/controllers/apps/index.js b/controllers/apps/index.js new file mode 100644 index 0000000..01873b3 --- /dev/null +++ b/controllers/apps/index.js @@ -0,0 +1,8 @@ +module.exports = { + createApp: require('./createApp'), + getSingleApp: require('./getSingleApp'), + deleteApp: require('./deleteApp'), + updateApp: require('./updateApp'), + reorderApps: require('./reorderApps'), + getAllApps: require('./getAllApps'), +}; diff --git a/controllers/apps/reorderApps.js b/controllers/apps/reorderApps.js new file mode 100644 index 0000000..29794b3 --- /dev/null +++ b/controllers/apps/reorderApps.js @@ -0,0 +1,23 @@ +const asyncWrapper = require('../../middleware/asyncWrapper'); +const App = require('../../models/App'); + +// @desc Reorder apps +// @route PUT /api/apps/0/reorder +// @access Public +const reorderApps = asyncWrapper(async (req, res, next) => { + req.body.apps.forEach(async ({ id, orderId }) => { + await App.update( + { orderId }, + { + where: { id }, + } + ); + }); + + res.status(200).json({ + success: true, + data: {}, + }); +}); + +module.exports = reorderApps; diff --git a/controllers/apps/updateApp.js b/controllers/apps/updateApp.js new file mode 100644 index 0000000..2a996fb --- /dev/null +++ b/controllers/apps/updateApp.js @@ -0,0 +1,35 @@ +const asyncWrapper = require('../../middleware/asyncWrapper'); +const App = require('../../models/App'); + +// @desc Update app +// @route PUT /api/apps/:id +// @access Public +const updateApp = asyncWrapper(async (req, res, next) => { + let app = await App.findOne({ + where: { id: req.params.id }, + }); + + if (!app) { + return next( + new ErrorResponse( + `App with the id of ${req.params.id} was not found`, + 404 + ) + ); + } + + let _body = { ...req.body }; + + if (req.file) { + _body.icon = req.file.filename; + } + + app = await app.update(_body); + + res.status(200).json({ + success: true, + data: app, + }); +}); + +module.exports = updateApp; diff --git a/db/index.js b/db/index.js index 34e715f..500a261 100644 --- a/db/index.js +++ b/db/index.js @@ -1,6 +1,5 @@ const { Sequelize } = require('sequelize'); const { join } = require('path'); -const fs = require('fs'); const Umzug = require('umzug'); const backupDB = require('./utils/backupDb'); diff --git a/middleware/asyncWrapper.js b/middleware/asyncWrapper.js index 11b3e52..9d99271 100644 --- a/middleware/asyncWrapper.js +++ b/middleware/asyncWrapper.js @@ -1,17 +1,7 @@ -// const asyncWrapper = foo => (req, res, next) => { -// return Promise -// .resolve(foo(req, res, next)) -// .catch(next); -// } - -// module.exports = asyncWrapper; - function asyncWrapper(foo) { return function (req, res, next) { - return Promise - .resolve(foo(req, res, next)) - .catch(next); - } + return Promise.resolve(foo(req, res, next)).catch(next); + }; } -module.exports = asyncWrapper; \ No newline at end of file +module.exports = asyncWrapper; diff --git a/middleware/errorHandler.js b/middleware/errorHandler.js index 5db2bb2..de93c35 100644 --- a/middleware/errorHandler.js +++ b/middleware/errorHandler.js @@ -14,10 +14,14 @@ const errorHandler = (err, req, res, next) => { logger.log(error.message.split(',')[0], 'ERROR'); + if (process.env.NODE_ENV == 'development') { + console.log(err); + } + res.status(err.statusCode || 500).json({ success: false, - error: error.message || 'Server Error' - }) -} + error: error.message || 'Server Error', + }); +}; -module.exports = errorHandler; \ No newline at end of file +module.exports = errorHandler; diff --git a/routes/apps.js b/routes/apps.js index 37c0286..6f1e817 100644 --- a/routes/apps.js +++ b/routes/apps.js @@ -4,26 +4,17 @@ const upload = require('../middleware/multer'); const { createApp, - getApps, - getApp, + getAllApps, + getSingleApp, updateApp, deleteApp, - reorderApps + reorderApps, } = require('../controllers/apps'); -router - .route('/') - .post(upload, createApp) - .get(getApps); +router.route('/').post(upload, createApp).get(getAllApps); -router - .route('/:id') - .get(getApp) - .put(upload, updateApp) - .delete(deleteApp); +router.route('/:id').get(getSingleApp).put(upload, updateApp).delete(deleteApp); -router - .route('/0/reorder') - .put(reorderApps); +router.route('/0/reorder').put(reorderApps); -module.exports = router; \ No newline at end of file +module.exports = router; diff --git a/utils/getExternalWeather.js b/utils/getExternalWeather.js index 1135ef7..8b2be8d 100644 --- a/utils/getExternalWeather.js +++ b/utils/getExternalWeather.js @@ -1,15 +1,9 @@ -const Config = require('../models/Config'); const Weather = require('../models/Weather'); const axios = require('axios'); +const loadConfig = require('./loadConfig'); const getExternalWeather = async () => { - // Get config from database - const config = await Config.findAll(); - - // Find and check values - const secret = config.find(pair => pair.key === 'WEATHER_API_KEY'); - const lat = config.find(pair => pair.key === 'lat'); - const long = config.find(pair => pair.key === 'long'); + const { WEATHER_API_KEY: secret, lat, long } = await loadConfig(); if (!secret) { throw new Error('API key was not found. Weather updated failed'); @@ -21,7 +15,9 @@ const getExternalWeather = async () => { // Fetch data from external API try { - const res = await axios.get(`http://api.weatherapi.com/v1/current.json?key=${secret.value}&q=${lat.value},${long.value}`); + const res = await axios.get( + `http://api.weatherapi.com/v1/current.json?key=${secret}&q=${lat},${long}` + ); // Save weather data const cursor = res.data.current; @@ -32,12 +28,12 @@ const getExternalWeather = async () => { isDay: cursor.is_day, cloud: cursor.cloud, conditionText: cursor.condition.text, - conditionCode: cursor.condition.code + conditionCode: cursor.condition.code, }); return weatherData; } catch (err) { throw new Error('External API request failed'); } -} +}; -module.exports = getExternalWeather; \ No newline at end of file +module.exports = getExternalWeather; From 76e50624e726e511d541398595f884d77e1de049 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pawe=C5=82=20Malak?= Date: Fri, 22 Oct 2021 13:31:02 +0200 Subject: [PATCH 076/196] Client: Implemented new config system --- .../src/components/Apps/AppCard/AppCard.tsx | 19 +- .../src/components/Apps/AppTable/AppTable.tsx | 152 +++++---- .../Bookmarks/BookmarkCard/BookmarkCard.tsx | 16 +- .../Bookmarks/BookmarkTable/BookmarkTable.tsx | 296 +++++++++++------- client/src/components/Home/Home.tsx | 17 +- .../Settings/OtherSettings/OtherSettings.tsx | 99 +++--- .../CustomQueries/CustomQueries.tsx | 12 +- .../SearchSettings/SearchSettings.tsx | 39 +-- .../WeatherSettings/WeatherSettings.tsx | 154 ++++----- .../Widgets/WeatherWidget/WeatherWidget.tsx | 76 ++--- client/src/interfaces/Config.ts | 30 +- client/src/interfaces/Forms.ts | 31 +- client/src/utility/index.ts | 3 +- client/src/utility/inputHandler.ts | 39 +++ client/src/utility/searchConfig.ts | 24 -- client/src/utility/searchParser.ts | 9 +- .../utility/templateObjects/configTemplate.ts | 24 ++ client/src/utility/templateObjects/index.ts | 2 + .../templateObjects/settingsTemplate.ts | 30 ++ 19 files changed, 625 insertions(+), 447 deletions(-) create mode 100644 client/src/utility/inputHandler.ts delete mode 100644 client/src/utility/searchConfig.ts create mode 100644 client/src/utility/templateObjects/configTemplate.ts create mode 100644 client/src/utility/templateObjects/index.ts create mode 100644 client/src/utility/templateObjects/settingsTemplate.ts diff --git a/client/src/components/Apps/AppCard/AppCard.tsx b/client/src/components/Apps/AppCard/AppCard.tsx index 172a680..803e5dd 100644 --- a/client/src/components/Apps/AppCard/AppCard.tsx +++ b/client/src/components/Apps/AppCard/AppCard.tsx @@ -2,12 +2,13 @@ import classes from './AppCard.module.css'; import Icon from '../../UI/Icons/Icon/Icon'; import { iconParser, urlParser } from '../../../utility'; -import { App } from '../../../interfaces'; -import { searchConfig } from '../../../utility'; +import { App, Config, GlobalState } from '../../../interfaces'; +import { connect } from 'react-redux'; interface ComponentProps { app: App; pinHandler?: Function; + config: Config; } const AppCard = (props: ComponentProps): JSX.Element => { @@ -29,7 +30,7 @@ const AppCard = (props: ComponentProps): JSX.Element => {
@@ -41,8 +42,8 @@ const AppCard = (props: ComponentProps): JSX.Element => { return (
{iconEl}
@@ -54,4 +55,10 @@ const AppCard = (props: ComponentProps): JSX.Element => { ); }; -export default AppCard; +const mapStateToProps = (state: GlobalState) => { + return { + config: state.config.config, + }; +}; + +export default connect(mapStateToProps)(AppCard); diff --git a/client/src/components/Apps/AppTable/AppTable.tsx b/client/src/components/Apps/AppTable/AppTable.tsx index 6ef6e6c..3f68d76 100644 --- a/client/src/components/Apps/AppTable/AppTable.tsx +++ b/client/src/components/Apps/AppTable/AppTable.tsx @@ -1,13 +1,24 @@ import { Fragment, KeyboardEvent, useState, useEffect } from 'react'; -import { DragDropContext, Droppable, Draggable, DropResult } from 'react-beautiful-dnd'; +import { + DragDropContext, + Droppable, + Draggable, + DropResult, +} from 'react-beautiful-dnd'; import { Link } from 'react-router-dom'; // Redux import { connect } from 'react-redux'; -import { pinApp, deleteApp, reorderApps, updateConfig, createNotification } from '../../../store/actions'; +import { + pinApp, + deleteApp, + reorderApps, + updateConfig, + createNotification, +} from '../../../store/actions'; // Typescript -import { App, GlobalState, NewNotification } from '../../../interfaces'; +import { App, Config, GlobalState, NewNotification } from '../../../interfaces'; // CSS import classes from './AppTable.module.css'; @@ -16,11 +27,9 @@ import classes from './AppTable.module.css'; import Icon from '../../UI/Icons/Icon/Icon'; import Table from '../../UI/Table/Table'; -// Utils -import { searchConfig } from '../../../utility'; - interface ComponentProps { apps: App[]; + config: Config; pinApp: (app: App) => void; deleteApp: (id: number) => void; updateAppHandler: (app: App) => void; @@ -36,38 +45,44 @@ const AppTable = (props: ComponentProps): JSX.Element => { // Copy apps array useEffect(() => { setLocalApps([...props.apps]); - }, [props.apps]) + }, [props.apps]); // Check ordering useEffect(() => { - const order = searchConfig('useOrdering', ''); + const order = props.config.useOrdering; if (order === 'orderId') { setIsCustomOrder(true); } - }, []) + }, []); const deleteAppHandler = (app: App): void => { - const proceed = window.confirm(`Are you sure you want to delete ${app.name} at ${app.url} ?`); + const proceed = window.confirm( + `Are you sure you want to delete ${app.name} at ${app.url} ?` + ); if (proceed) { props.deleteApp(app.id); } - } + }; // Support keyboard navigation for actions - const keyboardActionHandler = (e: KeyboardEvent, app: App, handler: Function) => { + const keyboardActionHandler = ( + e: KeyboardEvent, + app: App, + handler: Function + ) => { if (e.key === 'Enter') { handler(app); } - } + }; const dragEndHanlder = (result: DropResult): void => { if (!isCustomOrder) { props.createNotification({ title: 'Error', - message: 'Custom order is disabled' - }) + message: 'Custom order is disabled', + }); return; } @@ -81,32 +96,39 @@ const AppTable = (props: ComponentProps): JSX.Element => { setLocalApps(tmpApps); props.reorderApps(tmpApps); - } + }; return (
- {isCustomOrder - ?

You can drag and drop single rows to reorder application

- :

Custom order is disabled. You can change it in settings

- } + {isCustomOrder ? ( +

You can drag and drop single rows to reorder application

+ ) : ( +

+ Custom order is disabled. You can change it in{' '} + settings +

+ )}
- + {(provided) => ( - +
{localApps.map((app: App, index): JSX.Element => { return ( - + {(provided, snapshot) => { const style = { - border: snapshot.isDragging ? '1px solid var(--color-accent)' : 'none', + border: snapshot.isDragging + ? '1px solid var(--color-accent)' + : 'none', borderRadius: '4px', ...provided.draggableProps.style, }; @@ -118,63 +140,85 @@ const AppTable = (props: ComponentProps): JSX.Element => { ref={provided.innerRef} style={style} > - - - + + + {!snapshot.isDragging && ( )} - ) + ); }} - ) + ); })}
{app.name}{app.url}{app.icon}{app.name}{app.url}{app.icon}
deleteAppHandler(app)} - onKeyDown={(e) => keyboardActionHandler(e, app, deleteAppHandler)} - tabIndex={0}> - + onKeyDown={(e) => + keyboardActionHandler( + e, + app, + deleteAppHandler + ) + } + tabIndex={0} + > +
props.updateAppHandler(app)} - onKeyDown={(e) => keyboardActionHandler(e, app, props.updateAppHandler)} - tabIndex={0}> - + onKeyDown={(e) => + keyboardActionHandler( + e, + app, + props.updateAppHandler + ) + } + tabIndex={0} + > +
props.pinApp(app)} - onKeyDown={(e) => keyboardActionHandler(e, app, props.pinApp)} - tabIndex={0}> - {app.isPinned - ? - : + onKeyDown={(e) => + keyboardActionHandler(e, app, props.pinApp) } + tabIndex={0} + > + {app.isPinned ? ( + + ) : ( + + )}
)}
- ) -} + ); +}; const mapStateToProps = (state: GlobalState) => { return { - apps: state.app.apps - } -} + apps: state.app.apps, + config: state.config.config, + }; +}; const actions = { pinApp, deleteApp, reorderApps, updateConfig, - createNotification -} + createNotification, +}; -export default connect(mapStateToProps, actions)(AppTable); \ No newline at end of file +export default connect(mapStateToProps, actions)(AppTable); diff --git a/client/src/components/Bookmarks/BookmarkCard/BookmarkCard.tsx b/client/src/components/Bookmarks/BookmarkCard/BookmarkCard.tsx index b332a6f..93ead02 100644 --- a/client/src/components/Bookmarks/BookmarkCard/BookmarkCard.tsx +++ b/client/src/components/Bookmarks/BookmarkCard/BookmarkCard.tsx @@ -1,12 +1,14 @@ -import { Bookmark, Category } from '../../../interfaces'; +import { Bookmark, Category, Config, GlobalState } from '../../../interfaces'; import classes from './BookmarkCard.module.css'; import Icon from '../../UI/Icons/Icon/Icon'; -import { iconParser, urlParser, searchConfig } from '../../../utility'; +import { iconParser, urlParser } from '../../../utility'; import { Fragment } from 'react'; +import { connect } from 'react-redux'; interface ComponentProps { category: Category; + config: Config; } const BookmarkCard = (props: ComponentProps): JSX.Element => { @@ -54,7 +56,7 @@ const BookmarkCard = (props: ComponentProps): JSX.Element => { return (
@@ -68,4 +70,10 @@ const BookmarkCard = (props: ComponentProps): JSX.Element => { ); }; -export default BookmarkCard; +const mapStateToProps = (state: GlobalState) => { + return { + config: state.config.config, + }; +}; + +export default connect(mapStateToProps)(BookmarkCard); diff --git a/client/src/components/Bookmarks/BookmarkTable/BookmarkTable.tsx b/client/src/components/Bookmarks/BookmarkTable/BookmarkTable.tsx index 02779d5..90c34aa 100644 --- a/client/src/components/Bookmarks/BookmarkTable/BookmarkTable.tsx +++ b/client/src/components/Bookmarks/BookmarkTable/BookmarkTable.tsx @@ -1,13 +1,30 @@ import { KeyboardEvent, useState, useEffect, Fragment } from 'react'; -import { DragDropContext, Droppable, Draggable, DropResult } from 'react-beautiful-dnd'; +import { + DragDropContext, + Droppable, + Draggable, + DropResult, +} from 'react-beautiful-dnd'; import { Link } from 'react-router-dom'; // Redux import { connect } from 'react-redux'; -import { pinCategory, deleteCategory, deleteBookmark, createNotification, reorderCategories } from '../../../store/actions'; +import { + pinCategory, + deleteCategory, + deleteBookmark, + createNotification, + reorderCategories, +} from '../../../store/actions'; // Typescript -import { Bookmark, Category, NewNotification } from '../../../interfaces'; +import { + Bookmark, + Category, + Config, + GlobalState, + NewNotification, +} from '../../../interfaces'; import { ContentType } from '../Bookmarks'; // CSS @@ -17,12 +34,10 @@ import classes from './BookmarkTable.module.css'; import Table from '../../UI/Table/Table'; import Icon from '../../UI/Icons/Icon/Icon'; -// Utils -import { searchConfig } from '../../../utility'; - interface ComponentProps { contentType: ContentType; categories: Category[]; + config: Config; pinCategory: (category: Category) => void; deleteCategory: (id: number) => void; updateHandler: (data: Category | Bookmark) => void; @@ -38,45 +53,53 @@ const BookmarkTable = (props: ComponentProps): JSX.Element => { // Copy categories array useEffect(() => { setLocalCategories([...props.categories]); - }, [props.categories]) + }, [props.categories]); // Check ordering useEffect(() => { - const order = searchConfig('useOrdering', ''); + const order = props.config.useOrdering; if (order === 'orderId') { setIsCustomOrder(true); } - }) + }); const deleteCategoryHandler = (category: Category): void => { - const proceed = window.confirm(`Are you sure you want to delete ${category.name}? It will delete ALL assigned bookmarks`); + const proceed = window.confirm( + `Are you sure you want to delete ${category.name}? It will delete ALL assigned bookmarks` + ); if (proceed) { props.deleteCategory(category.id); } - } + }; const deleteBookmarkHandler = (bookmark: Bookmark): void => { - const proceed = window.confirm(`Are you sure you want to delete ${bookmark.name}?`); + const proceed = window.confirm( + `Are you sure you want to delete ${bookmark.name}?` + ); if (proceed) { props.deleteBookmark(bookmark.id, bookmark.categoryId); } - } + }; - const keyboardActionHandler = (e: KeyboardEvent, category: Category, handler: Function) => { + const keyboardActionHandler = ( + e: KeyboardEvent, + category: Category, + handler: Function + ) => { if (e.key === 'Enter') { handler(category); } - } + }; const dragEndHanlder = (result: DropResult): void => { if (!isCustomOrder) { props.createNotification({ title: 'Error', - message: 'Custom order is disabled' - }) + message: 'Custom order is disabled', + }); return; } @@ -90,136 +113,171 @@ const BookmarkTable = (props: ComponentProps): JSX.Element => { setLocalCategories(tmpCategories); props.reorderCategories(tmpCategories); - } + }; if (props.contentType === ContentType.category) { return (
- {isCustomOrder - ?

You can drag and drop single rows to reorder categories

- :

Custom order is disabled. You can change it in settings

- } + {isCustomOrder ? ( +

You can drag and drop single rows to reorder categories

+ ) : ( +

+ Custom order is disabled. You can change it in{' '} + settings +

+ )}
- + {(provided) => ( - - {localCategories.map((category: Category, index): JSX.Element => { - return ( - - {(provided, snapshot) => { - const style = { - border: snapshot.isDragging ? '1px solid var(--color-accent)' : 'none', - borderRadius: '4px', - ...provided.draggableProps.style, - }; +
+ {localCategories.map( + (category: Category, index): JSX.Element => { + return ( + + {(provided, snapshot) => { + const style = { + border: snapshot.isDragging + ? '1px solid var(--color-accent)' + : 'none', + borderRadius: '4px', + ...provided.draggableProps.style, + }; - return ( - - - {!snapshot.isDragging && ( - - )} - - ) - }} - - ) - })} + return ( + + + {!snapshot.isDragging && ( + + )} + + ); + }} + + ); + } + )}
{category.name} -
deleteCategoryHandler(category)} - onKeyDown={(e) => keyboardActionHandler(e, category, deleteCategoryHandler)} - tabIndex={0}> - -
-
props.updateHandler(category)} - tabIndex={0}> - -
-
props.pinCategory(category)} - onKeyDown={(e) => keyboardActionHandler(e, category, props.pinCategory)} - tabIndex={0}> - {category.isPinned - ? - : - } -
-
{category.name} +
+ deleteCategoryHandler(category) + } + onKeyDown={(e) => + keyboardActionHandler( + e, + category, + deleteCategoryHandler + ) + } + tabIndex={0} + > + +
+
+ props.updateHandler(category) + } + tabIndex={0} + > + +
+
props.pinCategory(category)} + onKeyDown={(e) => + keyboardActionHandler( + e, + category, + props.pinCategory + ) + } + tabIndex={0} + > + {category.isPinned ? ( + + ) : ( + + )} +
+
)}
- ) + ); } else { - const bookmarks: {bookmark: Bookmark, categoryName: string}[] = []; + const bookmarks: { bookmark: Bookmark; categoryName: string }[] = []; props.categories.forEach((category: Category) => { category.bookmarks.forEach((bookmark: Bookmark) => { bookmarks.push({ bookmark, - categoryName: category.name + categoryName: category.name, }); - }) - }) + }); + }); return ( - - {bookmarks.map((bookmark: {bookmark: Bookmark, categoryName: string}) => { - return ( - - - - - - - - ) - })} +
{bookmark.bookmark.name}{bookmark.bookmark.url}{bookmark.bookmark.icon}{bookmark.categoryName} -
deleteBookmarkHandler(bookmark.bookmark)} - tabIndex={0}> - -
-
props.updateHandler(bookmark.bookmark)} - tabIndex={0}> - -
-
+ {bookmarks.map( + (bookmark: { bookmark: Bookmark; categoryName: string }) => { + return ( + + + + + + + + ); + } + )}
{bookmark.bookmark.name}{bookmark.bookmark.url}{bookmark.bookmark.icon}{bookmark.categoryName} +
deleteBookmarkHandler(bookmark.bookmark)} + tabIndex={0} + > + +
+
props.updateHandler(bookmark.bookmark)} + tabIndex={0} + > + +
+
- ) + ); } -} +}; + +const mapStateToProps = (state: GlobalState) => { + return { + config: state.config.config, + }; +}; const actions = { pinCategory, deleteCategory, deleteBookmark, createNotification, - reorderCategories -} + reorderCategories, +}; -export default connect(null, actions)(BookmarkTable); \ No newline at end of file +export default connect(mapStateToProps, actions)(BookmarkTable); diff --git a/client/src/components/Home/Home.tsx b/client/src/components/Home/Home.tsx index fd711aa..18d81bc 100644 --- a/client/src/components/Home/Home.tsx +++ b/client/src/components/Home/Home.tsx @@ -7,7 +7,7 @@ import { getApps, getCategories } from '../../store/actions'; // Typescript import { GlobalState } from '../../interfaces/GlobalState'; -import { App, Category } from '../../interfaces'; +import { App, Category, Config } from '../../interfaces'; // UI import Icon from '../UI/Icons/Icon/Icon'; @@ -28,9 +28,6 @@ import SearchBar from '../SearchBar/SearchBar'; import { greeter } from './functions/greeter'; import { dateTime } from './functions/dateTime'; -// Utils -import { searchConfig } from '../../utility'; - interface ComponentProps { getApps: Function; getCategories: Function; @@ -38,6 +35,7 @@ interface ComponentProps { apps: App[]; categoriesLoading: boolean; categories: Category[]; + config: Config; } const Home = (props: ComponentProps): JSX.Element => { @@ -77,7 +75,7 @@ const Home = (props: ComponentProps): JSX.Element => { let interval: any; // Start interval only when hideHeader is false - if (searchConfig('hideHeader', 0) !== 1) { + if (!props.config.hideHeader) { interval = setInterval(() => { setHeader({ dateTime: dateTime(), @@ -103,13 +101,13 @@ const Home = (props: ComponentProps): JSX.Element => { return ( - {searchConfig('hideSearch', 0) !== 1 ? ( + {!props.config.hideSearch ? ( ) : (
)} - {searchConfig('hideHeader', 0) !== 1 ? ( + {!props.config.hideHeader ? (

{header.dateTime}

@@ -124,7 +122,7 @@ const Home = (props: ComponentProps): JSX.Element => {
)} - {searchConfig('hideApps', 0) !== 1 ? ( + {!props.config.hideApps ? ( {appsLoading ? ( @@ -148,7 +146,7 @@ const Home = (props: ComponentProps): JSX.Element => {
)} - {searchConfig('hideCategories', 0) !== 1 ? ( + {!props.config.hideCategories ? ( {categoriesLoading ? ( @@ -182,6 +180,7 @@ const mapStateToProps = (state: GlobalState) => { apps: state.app.apps, categoriesLoading: state.bookmark.loading, categories: state.bookmark.categories, + config: state.config.config, }; }; diff --git a/client/src/components/Settings/OtherSettings/OtherSettings.tsx b/client/src/components/Settings/OtherSettings/OtherSettings.tsx index c3525f8..3d82fa4 100644 --- a/client/src/components/Settings/OtherSettings/OtherSettings.tsx +++ b/client/src/components/Settings/OtherSettings/OtherSettings.tsx @@ -11,9 +11,10 @@ import { // Typescript import { + Config, GlobalState, NewNotification, - SettingsForm, + OtherSettingsForm, } from '../../../interfaces'; // UI @@ -22,50 +23,29 @@ import Button from '../../UI/Buttons/Button/Button'; import SettingsHeadline from '../../UI/Headlines/SettingsHeadline/SettingsHeadline'; // Utils -import { searchConfig } from '../../../utility'; +import { otherSettingsTemplate, inputHandler } from '../../../utility'; interface ComponentProps { createNotification: (notification: NewNotification) => void; - updateConfig: (formData: SettingsForm) => void; + updateConfig: (formData: OtherSettingsForm) => void; sortApps: () => void; sortCategories: () => void; loading: boolean; + config: Config; } const OtherSettings = (props: ComponentProps): JSX.Element => { + const { config } = props; + // Initial state - const [formData, setFormData] = useState({ - customTitle: document.title, - pinAppsByDefault: 1, - pinCategoriesByDefault: 1, - hideHeader: 0, - hideApps: 0, - hideCategories: 0, - useOrdering: 'createdAt', - appsSameTab: 0, - bookmarksSameTab: 0, - dockerApps: 1, - dockerHost: 'localhost', - kubernetesApps: 1, - unpinStoppedApps: 1, - }); + const [formData, setFormData] = useState( + otherSettingsTemplate + ); // Get config useEffect(() => { setFormData({ - customTitle: searchConfig('customTitle', 'Flame'), - pinAppsByDefault: searchConfig('pinAppsByDefault', 1), - pinCategoriesByDefault: searchConfig('pinCategoriesByDefault', 1), - hideHeader: searchConfig('hideHeader', 0), - hideApps: searchConfig('hideApps', 0), - hideCategories: searchConfig('hideCategories', 0), - useOrdering: searchConfig('useOrdering', 'createdAt'), - appsSameTab: searchConfig('appsSameTab', 0), - bookmarksSameTab: searchConfig('bookmarksSameTab', 0), - dockerApps: searchConfig('dockerApps', 0), - dockerHost: searchConfig('dockerHost', 'localhost'), - kubernetesApps: searchConfig('kubernetesApps', 0), - unpinStoppedApps: searchConfig('unpinStoppedApps', 0), + ...config, }); }, [props.loading]); @@ -87,17 +67,13 @@ const OtherSettings = (props: ComponentProps): JSX.Element => { // Input handler const inputChangeHandler = ( e: ChangeEvent, - isNumber?: boolean + options?: { isNumber?: boolean; isBool?: boolean } ) => { - let value: string | number = e.target.value; - - if (isNumber) { - value = parseFloat(value); - } - - setFormData({ - ...formData, - [e.target.name]: value, + inputHandler({ + e, + options, + setStateHandler: setFormData, + state: formData, }); }; @@ -126,8 +102,8 @@ const OtherSettings = (props: ComponentProps): JSX.Element => { inputChangeHandler(e, true)} + value={formData.pinCategoriesByDefault ? 1 : 0} + onChange={(e) => inputChangeHandler(e, { isBool: true })} > @@ -165,8 +141,8 @@ const OtherSettings = (props: ComponentProps): JSX.Element => { inputChangeHandler(e, true)} + value={formData.bookmarksSameTab ? 1 : 0} + onChange={(e) => inputChangeHandler(e, { isBool: true })} > @@ -192,8 +168,8 @@ const OtherSettings = (props: ComponentProps): JSX.Element => { inputChangeHandler(e, true)} + value={formData.hideApps ? 1 : 0} + onChange={(e) => inputChangeHandler(e, { isBool: true })} > @@ -216,8 +192,8 @@ const OtherSettings = (props: ComponentProps): JSX.Element => { inputChangeHandler(e, true)} + value={formData.dockerApps ? 1 : 0} + onChange={(e) => inputChangeHandler(e, { isBool: true })} > @@ -256,8 +232,8 @@ const OtherSettings = (props: ComponentProps): JSX.Element => { inputChangeHandler(e, true)} + value={formData.kubernetesApps ? 1 : 0} + onChange={(e) => inputChangeHandler(e, { isBool: true })} > @@ -286,6 +262,7 @@ const OtherSettings = (props: ComponentProps): JSX.Element => { const mapStateToProps = (state: GlobalState) => { return { loading: state.config.loading, + config: state.config.config, }; }; diff --git a/client/src/components/Settings/SearchSettings/CustomQueries/CustomQueries.tsx b/client/src/components/Settings/SearchSettings/CustomQueries/CustomQueries.tsx index c5dac62..a694f42 100644 --- a/client/src/components/Settings/SearchSettings/CustomQueries/CustomQueries.tsx +++ b/client/src/components/Settings/SearchSettings/CustomQueries/CustomQueries.tsx @@ -5,16 +5,21 @@ import classes from './CustomQueries.module.css'; import Modal from '../../../UI/Modal/Modal'; import Icon from '../../../UI/Icons/Icon/Icon'; -import { GlobalState, NewNotification, Query } from '../../../../interfaces'; +import { + Config, + GlobalState, + NewNotification, + Query, +} from '../../../../interfaces'; import QueriesForm from './QueriesForm'; import { deleteQuery, createNotification } from '../../../../store/actions'; import Button from '../../../UI/Buttons/Button/Button'; -import { searchConfig } from '../../../../utility'; interface Props { customQueries: Query[]; deleteQuery: (prefix: string) => {}; createNotification: (notification: NewNotification) => void; + config: Config; } const CustomQueries = (props: Props): JSX.Element => { @@ -29,7 +34,7 @@ const CustomQueries = (props: Props): JSX.Element => { }; const deleteHandler = (query: Query) => { - const currentProvider = searchConfig('defaultSearchProvider', 'l'); + const currentProvider = props.config.defaultSearchProvider; const isCurrent = currentProvider === query.prefix; if (isCurrent) { @@ -104,6 +109,7 @@ const CustomQueries = (props: Props): JSX.Element => { const mapStateToProps = (state: GlobalState) => { return { customQueries: state.config.customQueries, + config: state.config.config, }; }; diff --git a/client/src/components/Settings/SearchSettings/SearchSettings.tsx b/client/src/components/Settings/SearchSettings/SearchSettings.tsx index b2ac422..a403fa6 100644 --- a/client/src/components/Settings/SearchSettings/SearchSettings.tsx +++ b/client/src/components/Settings/SearchSettings/SearchSettings.tsx @@ -7,6 +7,7 @@ import { createNotification, updateConfig } from '../../../store/actions'; // Typescript import { + Config, GlobalState, NewNotification, Query, @@ -22,7 +23,7 @@ import SettingsHeadline from '../../UI/Headlines/SettingsHeadline/SettingsHeadli import InputGroup from '../../UI/Forms/InputGroup/InputGroup'; // Utils -import { searchConfig } from '../../../utility'; +import { inputHandler, searchSettingsTemplate } from '../../../utility'; // Data import { queries } from '../../../utility/searchQueries.json'; @@ -32,22 +33,17 @@ interface Props { updateConfig: (formData: SearchForm) => void; loading: boolean; customQueries: Query[]; + config: Config; } const SearchSettings = (props: Props): JSX.Element => { // Initial state - const [formData, setFormData] = useState({ - hideSearch: 0, - defaultSearchProvider: 'l', - searchSameTab: 0, - }); + const [formData, setFormData] = useState(searchSettingsTemplate); // Get config useEffect(() => { setFormData({ - hideSearch: searchConfig('hideSearch', 0), - defaultSearchProvider: searchConfig('defaultSearchProvider', 'l'), - searchSameTab: searchConfig('searchSameTab', 0), + ...props.config, }); }, [props.loading]); @@ -62,17 +58,13 @@ const SearchSettings = (props: Props): JSX.Element => { // Input handler const inputChangeHandler = ( e: ChangeEvent, - isNumber?: boolean + options?: { isNumber?: boolean; isBool?: boolean } ) => { - let value: string | number = e.target.value; - - if (isNumber) { - value = parseFloat(value); - } - - setFormData({ - ...formData, - [e.target.name]: value, + inputHandler({ + e, + options, + setStateHandler: setFormData, + state: formData, }); }; @@ -110,8 +102,8 @@ const SearchSettings = (props: Props): JSX.Element => { inputChangeHandler(e, true)} + value={formData.hideSearch ? 1 : 0} + onChange={(e) => inputChangeHandler(e, { isBool: true })} > @@ -143,6 +135,7 @@ const mapStateToProps = (state: GlobalState) => { return { loading: state.config.loading, customQueries: state.config.customQueries, + config: state.config.config, }; }; diff --git a/client/src/components/Settings/WeatherSettings/WeatherSettings.tsx b/client/src/components/Settings/WeatherSettings/WeatherSettings.tsx index 1378d44..04c9fa5 100644 --- a/client/src/components/Settings/WeatherSettings/WeatherSettings.tsx +++ b/client/src/components/Settings/WeatherSettings/WeatherSettings.tsx @@ -6,38 +6,40 @@ import { connect } from 'react-redux'; import { createNotification, updateConfig } from '../../../store/actions'; // Typescript -import { ApiResponse, GlobalState, NewNotification, Weather, WeatherForm } from '../../../interfaces'; +import { + ApiResponse, + Config, + GlobalState, + NewNotification, + Weather, + WeatherForm, +} from '../../../interfaces'; // UI import InputGroup from '../../UI/Forms/InputGroup/InputGroup'; import Button from '../../UI/Buttons/Button/Button'; // Utils -import { searchConfig } from '../../../utility'; +import { inputHandler, weatherSettingsTemplate } from '../../../utility'; interface ComponentProps { createNotification: (notification: NewNotification) => void; updateConfig: (formData: WeatherForm) => void; loading: boolean; + config: Config; } const WeatherSettings = (props: ComponentProps): JSX.Element => { // Initial state - const [formData, setFormData] = useState({ - WEATHER_API_KEY: '', - lat: 0, - long: 0, - isCelsius: 1 - }) + const [formData, setFormData] = useState( + weatherSettingsTemplate + ); // Get config useEffect(() => { setFormData({ - WEATHER_API_KEY: searchConfig('WEATHER_API_KEY', ''), - lat: searchConfig('lat', 0), - long: searchConfig('long', 0), - isCelsius: searchConfig('isCelsius', 1) - }) + ...props.config, + }); }, [props.loading]); // Form handler @@ -48,120 +50,124 @@ const WeatherSettings = (props: ComponentProps): JSX.Element => { if ((formData.lat || formData.long) && !formData.WEATHER_API_KEY) { props.createNotification({ title: 'Warning', - message: 'API key is missing. Weather Module will NOT work' - }) + message: 'API key is missing. Weather Module will NOT work', + }); } // Save settings await props.updateConfig(formData); - + // Update weather - axios.get>('/api/weather/update') + axios + .get>('/api/weather/update') .then(() => { props.createNotification({ title: 'Success', - message: 'Weather updated' - }) + message: 'Weather updated', + }); }) .catch((err) => { props.createNotification({ title: 'Error', - message: err.response.data.error - }) + message: err.response.data.error, + }); }); - } + }; // Input handler - const inputChangeHandler = (e: ChangeEvent, isNumber?: boolean) => { - let value: string | number = e.target.value; - - if (isNumber) { - value = parseFloat(value); - } - - setFormData({ - ...formData, - [e.target.name]: value - }) - } + const inputChangeHandler = ( + e: ChangeEvent, + options?: { isNumber?: boolean; isBool?: boolean } + ) => { + inputHandler({ + e, + options, + setStateHandler: setFormData, + state: formData, + }); + }; return (
formSubmitHandler(e)}> - + inputChangeHandler(e)} /> Using - - {' '}Weather API + + {' '} + Weather API . Key is required for weather module to work. - + inputChangeHandler(e, true)} - step='any' - lang='en-150' + onChange={(e) => inputChangeHandler(e, { isNumber: true })} + step="any" + lang="en-150" /> You can use - {' '}latlong.net + href="https://www.latlong.net/convert-address-to-lat-long.html" + target="blank" + > + {' '} + latlong.net - + inputChangeHandler(e, true)} - step='any' - lang='en-150' + onChange={(e) => inputChangeHandler(e, { isNumber: true })} + step="any" + lang="en-150" /> - + - +
- ) -} + ); +}; const mapStateToProps = (state: GlobalState) => { return { - loading: state.config.loading - } -} + loading: state.config.loading, + config: state.config.config, + }; +}; -export default connect(mapStateToProps, { createNotification, updateConfig })(WeatherSettings); \ No newline at end of file +export default connect(mapStateToProps, { createNotification, updateConfig })( + WeatherSettings +); diff --git a/client/src/components/Widgets/WeatherWidget/WeatherWidget.tsx b/client/src/components/Widgets/WeatherWidget/WeatherWidget.tsx index edf6fee..862a398 100644 --- a/client/src/components/Widgets/WeatherWidget/WeatherWidget.tsx +++ b/client/src/components/Widgets/WeatherWidget/WeatherWidget.tsx @@ -5,7 +5,7 @@ import axios from 'axios'; import { connect } from 'react-redux'; // Typescript -import { Weather, ApiResponse, Config, GlobalState } from '../../../interfaces'; +import { Weather, ApiResponse, GlobalState, Config } from '../../../interfaces'; // CSS import classes from './WeatherWidget.module.css'; @@ -13,12 +13,9 @@ import classes from './WeatherWidget.module.css'; // UI import WeatherIcon from '../../UI/Icons/WeatherIcon/WeatherIcon'; -// Utils -import { searchConfig } from '../../../utility'; - interface ComponentProps { configLoading: boolean; - config: Config[]; + config: Config; } const WeatherWidget = (props: ComponentProps): JSX.Element => { @@ -32,26 +29,28 @@ const WeatherWidget = (props: ComponentProps): JSX.Element => { conditionCode: 1000, id: -1, createdAt: new Date(), - updatedAt: new Date() + updatedAt: new Date(), }); const [isLoading, setIsLoading] = useState(true); // Initial request to get data useEffect(() => { - axios.get>('/api/weather') - .then(data => { + axios + .get>('/api/weather') + .then((data) => { const weatherData = data.data.data[0]; if (weatherData) { setWeather(weatherData); } setIsLoading(false); }) - .catch(err => console.log(err)); + .catch((err) => console.log(err)); }, []); // Open socket for data updates useEffect(() => { - const socketProtocol = document.location.protocol === 'http:' ? 'ws:' : 'wss:'; + const socketProtocol = + document.location.protocol === 'http:' ? 'ws:' : 'wss:'; const socketAddress = `${socketProtocol}//${window.location.host}/socket`; const webSocketClient = new WebSocket(socketAddress); @@ -59,43 +58,44 @@ const WeatherWidget = (props: ComponentProps): JSX.Element => { const data = JSON.parse(e.data); setWeather({ ...weather, - ...data - }) - } + ...data, + }); + }; return () => webSocketClient.close(); }, []); return (
- {(isLoading || props.configLoading || searchConfig('WEATHER_API_KEY', '')) && - (weather.id > 0 && - ( -
- -
-
- {searchConfig('isCelsius', true) - ? {weather.tempC}°C - : {weather.tempF}°F - } - {weather.cloud}% -
-
) - ) - } + {isLoading || + props.configLoading || + (props.config.WEATHER_API_KEY && weather.id > 0 && ( + +
+ +
+
+ {props.config.isCelsius ? ( + {weather.tempC}°C + ) : ( + {weather.tempF}°F + )} + {weather.cloud}% +
+
+ ))}
- ) -} + ); +}; const mapStateToProps = (state: GlobalState) => { return { configLoading: state.config.loading, - config: state.config.config - } -} + config: state.config.config, + }; +}; -export default connect(mapStateToProps)(WeatherWidget); \ No newline at end of file +export default connect(mapStateToProps)(WeatherWidget); diff --git a/client/src/interfaces/Config.ts b/client/src/interfaces/Config.ts index 281402c..d0152c5 100644 --- a/client/src/interfaces/Config.ts +++ b/client/src/interfaces/Config.ts @@ -1,8 +1,22 @@ -import { Model } from './'; - -export interface Config extends Model { - key: string; - value: string; - valueType: string; - isLocked: boolean; -} \ No newline at end of file +export interface Config { + WEATHER_API_KEY: string; + lat: number; + long: number; + isCelsius: boolean; + customTitle: string; + pinAppsByDefault: boolean; + pinCategoriesByDefault: boolean; + hideHeader: boolean; + useOrdering: string; + appsSameTab: boolean; + bookmarksSameTab: boolean; + searchSameTab: boolean; + hideApps: boolean; + hideCategories: boolean; + hideSearch: boolean; + defaultSearchProvider: string; + dockerApps: boolean; + dockerHost: string; + kubernetesApps: boolean; + unpinStoppedApps: boolean; +} diff --git a/client/src/interfaces/Forms.ts b/client/src/interfaces/Forms.ts index 9b195da..9123d62 100644 --- a/client/src/interfaces/Forms.ts +++ b/client/src/interfaces/Forms.ts @@ -2,30 +2,27 @@ export interface WeatherForm { WEATHER_API_KEY: string; lat: number; long: number; - isCelsius: number; + isCelsius: boolean; } export interface SearchForm { - hideSearch: number; + hideSearch: boolean; defaultSearchProvider: string; - searchSameTab: number; + searchSameTab: boolean; } -export interface SettingsForm { +export interface OtherSettingsForm { customTitle: string; - pinAppsByDefault: number; - pinCategoriesByDefault: number; - hideHeader: number; - hideApps: number; - hideCategories: number; - // hideSearch: number; - // defaultSearchProvider: string; + pinAppsByDefault: boolean; + pinCategoriesByDefault: boolean; + hideHeader: boolean; + hideApps: boolean; + hideCategories: boolean; useOrdering: string; - appsSameTab: number; - bookmarksSameTab: number; - // searchSameTab: number; - dockerApps: number; + appsSameTab: boolean; + bookmarksSameTab: boolean; + dockerApps: boolean; dockerHost: string; - kubernetesApps: number; - unpinStoppedApps: number; + kubernetesApps: boolean; + unpinStoppedApps: boolean; } diff --git a/client/src/utility/index.ts b/client/src/utility/index.ts index caff9c3..ad08042 100644 --- a/client/src/utility/index.ts +++ b/client/src/utility/index.ts @@ -1,7 +1,8 @@ export * from './iconParser'; export * from './urlParser'; -export * from './searchConfig'; export * from './checkVersion'; export * from './sortData'; export * from './searchParser'; export * from './redirectUrl'; +export * from './templateObjects'; +export * from './inputHandler'; diff --git a/client/src/utility/inputHandler.ts b/client/src/utility/inputHandler.ts new file mode 100644 index 0000000..98e805a --- /dev/null +++ b/client/src/utility/inputHandler.ts @@ -0,0 +1,39 @@ +import { ChangeEvent, SetStateAction } from 'react'; + +type Event = ChangeEvent; + +interface Options { + isNumber?: boolean; + isBool?: boolean; +} + +interface Params { + e: Event; + options?: Options; + setStateHandler: (v: SetStateAction) => void; + state: T; +} + +export const inputHandler = (params: Params): void => { + const { e, options, setStateHandler, state } = params; + + const rawValue = e.target.value; + let value: string | number | boolean = e.target.value; + + if (options) { + const { isNumber = false, isBool = false } = options; + + if (isNumber) { + value = parseFloat(rawValue); + } + + if (isBool) { + value = !!parseInt(rawValue); + } + } + + setStateHandler({ + ...state, + [e.target.name]: value, + }); +}; diff --git a/client/src/utility/searchConfig.ts b/client/src/utility/searchConfig.ts deleted file mode 100644 index 4e46091..0000000 --- a/client/src/utility/searchConfig.ts +++ /dev/null @@ -1,24 +0,0 @@ -import { store } from '../store/store'; - -/** - * Search config store with given key - * @param key Config pair key to search - * @param _default Value to return if key is not found - */ -export const searchConfig = (key: string, _default: any) => { - const state = store.getState(); - - const pair = state.config.config.find(p => p.key === key); - - if (pair) { - if (pair.valueType === 'number') { - return parseFloat(pair.value); - } else if (pair.valueType === 'boolean') { - return parseInt(pair.value); - } else { - return pair.value; - } - } - - return _default; -} \ No newline at end of file diff --git a/client/src/utility/searchParser.ts b/client/src/utility/searchParser.ts index e14617c..cff9bfb 100644 --- a/client/src/utility/searchParser.ts +++ b/client/src/utility/searchParser.ts @@ -1,7 +1,6 @@ import { queries } from './searchQueries.json'; import { Query, SearchResult } from '../interfaces'; import { store } from '../store/store'; -import { searchConfig } from '.'; export const searchParser = (searchQuery: string): SearchResult => { const result: SearchResult = { @@ -16,7 +15,7 @@ export const searchParser = (searchQuery: string): SearchResult => { }, }; - const customQueries = store.getState().config.customQueries; + const { customQueries, config } = store.getState().config; // Check if url or ip was passed const urlRegex = @@ -27,9 +26,7 @@ export const searchParser = (searchQuery: string): SearchResult => { // Match prefix and query const splitQuery = searchQuery.match(/^\/([a-z]+)[ ](.+)$/i); - const prefix = splitQuery - ? splitQuery[1] - : searchConfig('defaultSearchProvider', 'l'); + const prefix = splitQuery ? splitQuery[1] : config.defaultSearchProvider; const search = splitQuery ? encodeURIComponent(splitQuery[2]) @@ -47,7 +44,7 @@ export const searchParser = (searchQuery: string): SearchResult => { if (prefix === 'l') { result.isLocal = true; } else { - result.sameTab = searchConfig('searchSameTab', false); + result.sameTab = config.searchSameTab; } return result; diff --git a/client/src/utility/templateObjects/configTemplate.ts b/client/src/utility/templateObjects/configTemplate.ts new file mode 100644 index 0000000..bbc7998 --- /dev/null +++ b/client/src/utility/templateObjects/configTemplate.ts @@ -0,0 +1,24 @@ +import { Config } from '../../interfaces'; + +export const configTemplate: Config = { + WEATHER_API_KEY: '', + lat: 0, + long: 0, + isCelsius: true, + customTitle: 'Flame', + pinAppsByDefault: true, + pinCategoriesByDefault: true, + hideHeader: false, + useOrdering: 'createdAt', + appsSameTab: false, + bookmarksSameTab: false, + searchSameTab: false, + hideApps: false, + hideCategories: false, + hideSearch: false, + defaultSearchProvider: 'l', + dockerApps: false, + dockerHost: 'localhost', + kubernetesApps: false, + unpinStoppedApps: false, +}; diff --git a/client/src/utility/templateObjects/index.ts b/client/src/utility/templateObjects/index.ts new file mode 100644 index 0000000..3f2d57c --- /dev/null +++ b/client/src/utility/templateObjects/index.ts @@ -0,0 +1,2 @@ +export * from './configTemplate'; +export * from './settingsTemplate'; diff --git a/client/src/utility/templateObjects/settingsTemplate.ts b/client/src/utility/templateObjects/settingsTemplate.ts new file mode 100644 index 0000000..674931b --- /dev/null +++ b/client/src/utility/templateObjects/settingsTemplate.ts @@ -0,0 +1,30 @@ +import { OtherSettingsForm, SearchForm, WeatherForm } from '../../interfaces'; + +export const otherSettingsTemplate: OtherSettingsForm = { + customTitle: document.title, + pinAppsByDefault: true, + pinCategoriesByDefault: true, + hideHeader: false, + hideApps: false, + hideCategories: false, + useOrdering: 'createdAt', + appsSameTab: false, + bookmarksSameTab: false, + dockerApps: true, + dockerHost: 'localhost', + kubernetesApps: true, + unpinStoppedApps: true, +}; + +export const weatherSettingsTemplate: WeatherForm = { + WEATHER_API_KEY: '', + lat: 0, + long: 0, + isCelsius: true, +}; + +export const searchSettingsTemplate: SearchForm = { + hideSearch: false, + searchSameTab: false, + defaultSearchProvider: 'l', +}; From cfb471e578ed09bad28684dcb1a4cbf1ace4bf6c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pawe=C5=82=20Malak?= Date: Fri, 22 Oct 2021 14:00:38 +0200 Subject: [PATCH 077/196] Changed config api. Split config controllers into separate files. Split bookmarks controllers into separate files --- CHANGELOG.md | 1 + client/src/store/actions/app.ts | 164 ++++---- client/src/store/actions/bookmark.ts | 428 +++++++++++---------- client/src/store/actions/config.ts | 11 +- client/src/store/reducers/config.ts | 5 +- controllers/apps/docker/useDocker.js | 8 +- controllers/bookmark.js | 112 ------ controllers/bookmarks/createBookmark.js | 27 ++ controllers/bookmarks/deleteBookmark.js | 18 + controllers/bookmarks/getAllBookmarks.js | 19 + controllers/bookmarks/getSingleBookmark.js | 28 ++ controllers/bookmarks/index.js | 7 + controllers/bookmarks/updateBookmark.js | 39 ++ controllers/category.js | 12 +- controllers/config.js | 177 --------- controllers/config/getCSS.js | 18 + controllers/config/getConfig.js | 16 + controllers/config/index.js | 6 + controllers/config/updateCSS.js | 24 ++ controllers/config/updateConfig.js | 24 ++ middleware/multer.js | 2 +- routes/bookmark.js | 17 +- routes/config.js | 18 +- 23 files changed, 579 insertions(+), 602 deletions(-) delete mode 100644 controllers/bookmark.js create mode 100644 controllers/bookmarks/createBookmark.js create mode 100644 controllers/bookmarks/deleteBookmark.js create mode 100644 controllers/bookmarks/getAllBookmarks.js create mode 100644 controllers/bookmarks/getSingleBookmark.js create mode 100644 controllers/bookmarks/index.js create mode 100644 controllers/bookmarks/updateBookmark.js delete mode 100644 controllers/config.js create mode 100644 controllers/config/getCSS.js create mode 100644 controllers/config/getConfig.js create mode 100644 controllers/config/index.js create mode 100644 controllers/config/updateCSS.js create mode 100644 controllers/config/updateConfig.js diff --git a/CHANGELOG.md b/CHANGELOG.md index 54d5274..5b91cc2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,7 @@ ### v1.7.1 (TBA) - Fixed search action not being triggered by Numpad Enter - Fixed search bar not redirecting to valid URL if it starts with capital letter ([#118](https://github.com/pawelmalak/flame/issues/118)) +- Performance improvements ### v1.7.0 (2021-10-11) - Search bar will now redirect if valid URL or IP is provided ([#67](https://github.com/pawelmalak/flame/issues/67)) diff --git a/client/src/store/actions/app.ts b/client/src/store/actions/app.ts index 3a8e7d5..b33a78b 100644 --- a/client/src/store/actions/app.ts +++ b/client/src/store/actions/app.ts @@ -5,14 +5,17 @@ import { App, ApiResponse, NewApp, Config } from '../../interfaces'; import { CreateNotificationAction } from './notification'; export interface GetAppsAction { - type: ActionTypes.getApps | ActionTypes.getAppsSuccess | ActionTypes.getAppsError; + type: + | ActionTypes.getApps + | ActionTypes.getAppsSuccess + | ActionTypes.getAppsError; payload: T; } export const getApps = () => async (dispatch: Dispatch) => { dispatch>({ type: ActionTypes.getApps, - payload: undefined + payload: undefined, }); try { @@ -20,12 +23,12 @@ export const getApps = () => async (dispatch: Dispatch) => { dispatch>({ type: ActionTypes.getAppsSuccess, - payload: res.data.data - }) + payload: res.data.data, + }); } catch (err) { console.log(err); } -} +}; export interface PinAppAction { type: ActionTypes.pinApp; @@ -35,59 +38,64 @@ export interface PinAppAction { export const pinApp = (app: App) => async (dispatch: Dispatch) => { try { const { id, isPinned, name } = app; - const res = await axios.put>(`/api/apps/${id}`, { isPinned: !isPinned }); + const res = await axios.put>(`/api/apps/${id}`, { + isPinned: !isPinned, + }); - const status = isPinned ? 'unpinned from Homescreen' : 'pinned to Homescreen'; + const status = isPinned + ? 'unpinned from Homescreen' + : 'pinned to Homescreen'; dispatch({ type: ActionTypes.createNotification, payload: { title: 'Success', - message: `App ${name} ${status}` - } - }) + message: `App ${name} ${status}`, + }, + }); dispatch({ type: ActionTypes.pinApp, - payload: res.data.data - }) + payload: res.data.data, + }); } catch (err) { console.log(err); } -} +}; export interface AddAppAction { type: ActionTypes.addAppSuccess; payload: App; } -export const addApp = (formData: NewApp | FormData) => async (dispatch: Dispatch) => { - try { - const res = await axios.post>('/api/apps', formData); +export const addApp = + (formData: NewApp | FormData) => async (dispatch: Dispatch) => { + try { + const res = await axios.post>('/api/apps', formData); - dispatch({ - type: ActionTypes.createNotification, - payload: { - title: 'Success', - message: `App added` - } - }) + dispatch({ + type: ActionTypes.createNotification, + payload: { + title: 'Success', + message: `App added`, + }, + }); - await dispatch({ - type: ActionTypes.addAppSuccess, - payload: res.data.data - }) + await dispatch({ + type: ActionTypes.addAppSuccess, + payload: res.data.data, + }); - // Sort apps - dispatch(sortApps()) - } catch (err) { - console.log(err); - } -} + // Sort apps + dispatch(sortApps()); + } catch (err) { + console.log(err); + } + }; export interface DeleteAppAction { - type: ActionTypes.deleteApp, - payload: number + type: ActionTypes.deleteApp; + payload: number; } export const deleteApp = (id: number) => async (dispatch: Dispatch) => { @@ -98,79 +106,85 @@ export const deleteApp = (id: number) => async (dispatch: Dispatch) => { type: ActionTypes.createNotification, payload: { title: 'Success', - message: 'App deleted' - } - }) + message: 'App deleted', + }, + }); dispatch({ type: ActionTypes.deleteApp, - payload: id - }) + payload: id, + }); } catch (err) { console.log(err); } -} +}; export interface UpdateAppAction { type: ActionTypes.updateApp; payload: App; } -export const updateApp = (id: number, formData: NewApp | FormData) => async (dispatch: Dispatch) => { - try { - const res = await axios.put>(`/api/apps/${id}`, formData); +export const updateApp = + (id: number, formData: NewApp | FormData) => async (dispatch: Dispatch) => { + try { + const res = await axios.put>( + `/api/apps/${id}`, + formData + ); - dispatch({ - type: ActionTypes.createNotification, - payload: { - title: 'Success', - message: `App updated` - } - }) + dispatch({ + type: ActionTypes.createNotification, + payload: { + title: 'Success', + message: `App updated`, + }, + }); - await dispatch({ - type: ActionTypes.updateApp, - payload: res.data.data - }) + await dispatch({ + type: ActionTypes.updateApp, + payload: res.data.data, + }); - // Sort apps - dispatch(sortApps()) - } catch (err) { - console.log(err); - } -} + // Sort apps + dispatch(sortApps()); + } catch (err) { + console.log(err); + } + }; export interface ReorderAppsAction { type: ActionTypes.reorderApps; - payload: App[] + payload: App[]; } interface ReorderQuery { apps: { id: number; orderId: number; - }[] + }[]; } export const reorderApps = (apps: App[]) => async (dispatch: Dispatch) => { try { - const updateQuery: ReorderQuery = { apps: [] } + const updateQuery: ReorderQuery = { apps: [] }; - apps.forEach((app, index) => updateQuery.apps.push({ - id: app.id, - orderId: index + 1 - })) + apps.forEach((app, index) => + updateQuery.apps.push({ + id: app.id, + orderId: index + 1, + }) + ); await axios.put>('/api/apps/0/reorder', updateQuery); dispatch({ type: ActionTypes.reorderApps, - payload: apps - }) + payload: apps, + }); } catch (err) { console.log(err); } -} +}; export interface SortAppsAction { type: ActionTypes.sortApps; @@ -179,13 +193,13 @@ export interface SortAppsAction { export const sortApps = () => async (dispatch: Dispatch) => { try { - const res = await axios.get>('/api/config/useOrdering'); + const res = await axios.get>('/api/config'); dispatch({ type: ActionTypes.sortApps, - payload: res.data.data.value - }) + payload: res.data.data.useOrdering, + }); } catch (err) { console.log(err); } -} \ No newline at end of file +}; diff --git a/client/src/store/actions/bookmark.ts b/client/src/store/actions/bookmark.ts index b4b5831..6d6fdf5 100644 --- a/client/src/store/actions/bookmark.ts +++ b/client/src/store/actions/bookmark.ts @@ -1,133 +1,157 @@ import axios from 'axios'; import { Dispatch } from 'redux'; import { ActionTypes } from './actionTypes'; -import { Category, ApiResponse, NewCategory, Bookmark, NewBookmark, Config } from '../../interfaces'; +import { + Category, + ApiResponse, + NewCategory, + Bookmark, + NewBookmark, + Config, +} from '../../interfaces'; import { CreateNotificationAction } from './notification'; /** * GET CATEGORIES */ export interface GetCategoriesAction { - type: ActionTypes.getCategories | ActionTypes.getCategoriesSuccess | ActionTypes.getCategoriesError; + type: + | ActionTypes.getCategories + | ActionTypes.getCategoriesSuccess + | ActionTypes.getCategoriesError; payload: T; } export const getCategories = () => async (dispatch: Dispatch) => { dispatch>({ type: ActionTypes.getCategories, - payload: undefined - }) + payload: undefined, + }); try { const res = await axios.get>('/api/categories'); dispatch>({ type: ActionTypes.getCategoriesSuccess, - payload: res.data.data - }) + payload: res.data.data, + }); } catch (err) { console.log(err); } -} +}; /** * ADD CATEGORY */ export interface AddCategoryAction { - type: ActionTypes.addCategory, - payload: Category + type: ActionTypes.addCategory; + payload: Category; } -export const addCategory = (formData: NewCategory) => async (dispatch: Dispatch) => { - try { - const res = await axios.post>('/api/categories', formData); +export const addCategory = + (formData: NewCategory) => async (dispatch: Dispatch) => { + try { + const res = await axios.post>( + '/api/categories', + formData + ); - dispatch({ - type: ActionTypes.createNotification, - payload: { - title: 'Success', - message: `Category ${formData.name} created` - } - }) + dispatch({ + type: ActionTypes.createNotification, + payload: { + title: 'Success', + message: `Category ${formData.name} created`, + }, + }); - dispatch({ - type: ActionTypes.addCategory, - payload: res.data.data - }) + dispatch({ + type: ActionTypes.addCategory, + payload: res.data.data, + }); - dispatch(sortCategories()); - } catch (err) { - console.log(err); - } -} + dispatch(sortCategories()); + } catch (err) { + console.log(err); + } + }; /** * ADD BOOKMARK */ export interface AddBookmarkAction { - type: ActionTypes.addBookmark, - payload: Bookmark + type: ActionTypes.addBookmark; + payload: Bookmark; } -export const addBookmark = (formData: NewBookmark | FormData) => async (dispatch: Dispatch) => { - try { - const res = await axios.post>('/api/bookmarks', formData); +export const addBookmark = + (formData: NewBookmark | FormData) => async (dispatch: Dispatch) => { + try { + const res = await axios.post>( + '/api/bookmarks', + formData + ); - dispatch({ - type: ActionTypes.createNotification, - payload: { - title: 'Success', - message: `Bookmark created` - } - }) + dispatch({ + type: ActionTypes.createNotification, + payload: { + title: 'Success', + message: `Bookmark created`, + }, + }); - dispatch({ - type: ActionTypes.addBookmark, - payload: res.data.data - }) - } catch (err) { - console.log(err); - } -} + dispatch({ + type: ActionTypes.addBookmark, + payload: res.data.data, + }); + } catch (err) { + console.log(err); + } + }; /** * PIN CATEGORY */ export interface PinCategoryAction { - type: ActionTypes.pinCategory, - payload: Category + type: ActionTypes.pinCategory; + payload: Category; } -export const pinCategory = (category: Category) => async (dispatch: Dispatch) => { - try { - const { id, isPinned, name } = category; - const res = await axios.put>(`/api/categories/${id}`, { isPinned: !isPinned }); +export const pinCategory = + (category: Category) => async (dispatch: Dispatch) => { + try { + const { id, isPinned, name } = category; + const res = await axios.put>( + `/api/categories/${id}`, + { isPinned: !isPinned } + ); - const status = isPinned ? 'unpinned from Homescreen' : 'pinned to Homescreen'; + const status = isPinned + ? 'unpinned from Homescreen' + : 'pinned to Homescreen'; - dispatch({ - type: ActionTypes.createNotification, - payload: { - title: 'Success', - message: `Category ${name} ${status}` - } - }) + dispatch({ + type: ActionTypes.createNotification, + payload: { + title: 'Success', + message: `Category ${name} ${status}`, + }, + }); - dispatch({ - type: ActionTypes.pinCategory, - payload: res.data.data - }) - } catch (err) { - console.log(err); - } -} + dispatch({ + type: ActionTypes.pinCategory, + payload: res.data.data, + }); + } catch (err) { + console.log(err); + } + }; /** * DELETE CATEGORY */ export interface DeleteCategoryAction { - type: ActionTypes.deleteCategory, - payload: number + type: ActionTypes.deleteCategory; + payload: number; } export const deleteCategory = (id: number) => async (dispatch: Dispatch) => { @@ -138,141 +162,151 @@ export const deleteCategory = (id: number) => async (dispatch: Dispatch) => { type: ActionTypes.createNotification, payload: { title: 'Success', - message: `Category deleted` - } - }) + message: `Category deleted`, + }, + }); dispatch({ type: ActionTypes.deleteCategory, - payload: id - }) + payload: id, + }); } catch (err) { console.log(err); } -} +}; /** * UPDATE CATEGORY */ export interface UpdateCategoryAction { - type: ActionTypes.updateCategory, - payload: Category + type: ActionTypes.updateCategory; + payload: Category; } -export const updateCategory = (id: number, formData: NewCategory) => async (dispatch: Dispatch) => { - try { - const res = await axios.put>(`/api/categories/${id}`, formData); +export const updateCategory = + (id: number, formData: NewCategory) => async (dispatch: Dispatch) => { + try { + const res = await axios.put>( + `/api/categories/${id}`, + formData + ); - dispatch({ - type: ActionTypes.createNotification, - payload: { - title: 'Success', - message: `Category ${formData.name} updated` - } - }) + dispatch({ + type: ActionTypes.createNotification, + payload: { + title: 'Success', + message: `Category ${formData.name} updated`, + }, + }); - dispatch({ - type: ActionTypes.updateCategory, - payload: res.data.data - }) + dispatch({ + type: ActionTypes.updateCategory, + payload: res.data.data, + }); - dispatch(sortCategories()); - } catch (err) { - console.log(err); - } -} + dispatch(sortCategories()); + } catch (err) { + console.log(err); + } + }; /** * DELETE BOOKMARK */ export interface DeleteBookmarkAction { - type: ActionTypes.deleteBookmark, + type: ActionTypes.deleteBookmark; payload: { - bookmarkId: number, - categoryId: number - } + bookmarkId: number; + categoryId: number; + }; } -export const deleteBookmark = (bookmarkId: number, categoryId: number) => async (dispatch: Dispatch) => { - try { - await axios.delete>(`/api/bookmarks/${bookmarkId}`); +export const deleteBookmark = + (bookmarkId: number, categoryId: number) => async (dispatch: Dispatch) => { + try { + await axios.delete>(`/api/bookmarks/${bookmarkId}`); - dispatch({ - type: ActionTypes.createNotification, - payload: { - title: 'Success', - message: 'Bookmark deleted' - } - }) + dispatch({ + type: ActionTypes.createNotification, + payload: { + title: 'Success', + message: 'Bookmark deleted', + }, + }); - dispatch({ - type: ActionTypes.deleteBookmark, - payload: { - bookmarkId, - categoryId - } - }) - } catch (err) { - console.log(err); - } -} + dispatch({ + type: ActionTypes.deleteBookmark, + payload: { + bookmarkId, + categoryId, + }, + }); + } catch (err) { + console.log(err); + } + }; /** * UPDATE BOOKMARK */ export interface UpdateBookmarkAction { - type: ActionTypes.updateBookmark, - payload: Bookmark + type: ActionTypes.updateBookmark; + payload: Bookmark; } -export const updateBookmark = ( - bookmarkId: number, - formData: NewBookmark | FormData, - category: { - prev: number, - curr: number - } -) => async (dispatch: Dispatch) => { - try { - const res = await axios.put>(`/api/bookmarks/${bookmarkId}`, formData); - - dispatch({ - type: ActionTypes.createNotification, - payload: { - title: 'Success', - message: `Bookmark updated` - } - }) - - // Check if category was changed - const categoryWasChanged = category.curr !== category.prev; - - if (categoryWasChanged) { - // Delete bookmark from old category - dispatch({ - type: ActionTypes.deleteBookmark, - payload: { - bookmarkId, - categoryId: category.prev - } - }) - - // Add bookmark to the new category - dispatch({ - type: ActionTypes.addBookmark, - payload: res.data.data - }) - } else { - // Else update only name/url/icon - dispatch({ - type: ActionTypes.updateBookmark, - payload: res.data.data - }) +export const updateBookmark = + ( + bookmarkId: number, + formData: NewBookmark | FormData, + category: { + prev: number; + curr: number; } - } catch (err) { - console.log(err); - } -} + ) => + async (dispatch: Dispatch) => { + try { + const res = await axios.put>( + `/api/bookmarks/${bookmarkId}`, + formData + ); + + dispatch({ + type: ActionTypes.createNotification, + payload: { + title: 'Success', + message: `Bookmark updated`, + }, + }); + + // Check if category was changed + const categoryWasChanged = category.curr !== category.prev; + + if (categoryWasChanged) { + // Delete bookmark from old category + dispatch({ + type: ActionTypes.deleteBookmark, + payload: { + bookmarkId, + categoryId: category.prev, + }, + }); + + // Add bookmark to the new category + dispatch({ + type: ActionTypes.addBookmark, + payload: res.data.data, + }); + } else { + // Else update only name/url/icon + dispatch({ + type: ActionTypes.updateBookmark, + payload: res.data.data, + }); + } + } catch (err) { + console.log(err); + } + }; /** * SORT CATEGORIES @@ -284,16 +318,16 @@ export interface SortCategoriesAction { export const sortCategories = () => async (dispatch: Dispatch) => { try { - const res = await axios.get>('/api/config/useOrdering'); + const res = await axios.get>('/api/config'); dispatch({ type: ActionTypes.sortCategories, - payload: res.data.data.value - }) + payload: res.data.data.useOrdering, + }); } catch (err) { console.log(err); } -} +}; /** * REORDER CATEGORIES @@ -307,25 +341,31 @@ interface ReorderQuery { categories: { id: number; orderId: number; - }[] + }[]; } -export const reorderCategories = (categories: Category[]) => async (dispatch: Dispatch) => { - try { - const updateQuery: ReorderQuery = { categories: [] } +export const reorderCategories = + (categories: Category[]) => async (dispatch: Dispatch) => { + try { + const updateQuery: ReorderQuery = { categories: [] }; - categories.forEach((category, index) => updateQuery.categories.push({ - id: category.id, - orderId: index + 1 - })) + categories.forEach((category, index) => + updateQuery.categories.push({ + id: category.id, + orderId: index + 1, + }) + ); - await axios.put>('/api/categories/0/reorder', updateQuery); + await axios.put>( + '/api/categories/0/reorder', + updateQuery + ); - dispatch({ - type: ActionTypes.reorderCategories, - payload: categories - }) - } catch (err) { - console.log(err); - } -} \ No newline at end of file + dispatch({ + type: ActionTypes.reorderCategories, + payload: categories, + }); + } catch (err) { + console.log(err); + } + }; diff --git a/client/src/store/actions/config.ts b/client/src/store/actions/config.ts index 29c5186..8b1ef5a 100644 --- a/client/src/store/actions/config.ts +++ b/client/src/store/actions/config.ts @@ -3,16 +3,15 @@ import { Dispatch } from 'redux'; import { ActionTypes } from './actionTypes'; import { Config, ApiResponse, Query } from '../../interfaces'; import { CreateNotificationAction } from './notification'; -import { searchConfig } from '../../utility'; export interface GetConfigAction { type: ActionTypes.getConfig; - payload: Config[]; + payload: Config; } export const getConfig = () => async (dispatch: Dispatch) => { try { - const res = await axios.get>('/api/config'); + const res = await axios.get>('/api/config'); dispatch({ type: ActionTypes.getConfig, @@ -20,7 +19,7 @@ export const getConfig = () => async (dispatch: Dispatch) => { }); // Set custom page title if set - document.title = searchConfig('customTitle', 'Flame'); + document.title = res.data.data.customTitle; } catch (err) { console.log(err); } @@ -28,12 +27,12 @@ export const getConfig = () => async (dispatch: Dispatch) => { export interface UpdateConfigAction { type: ActionTypes.updateConfig; - payload: Config[]; + payload: Config; } export const updateConfig = (formData: any) => async (dispatch: Dispatch) => { try { - const res = await axios.put>('/api/config', formData); + const res = await axios.put>('/api/config', formData); dispatch({ type: ActionTypes.createNotification, diff --git a/client/src/store/reducers/config.ts b/client/src/store/reducers/config.ts index ae2699e..c0ece13 100644 --- a/client/src/store/reducers/config.ts +++ b/client/src/store/reducers/config.ts @@ -1,15 +1,16 @@ import { ActionTypes, Action } from '../actions'; import { Config, Query } from '../../interfaces'; +import { configTemplate } from '../../utility'; export interface State { loading: boolean; - config: Config[]; + config: Config; customQueries: Query[]; } const initialState: State = { loading: true, - config: [], + config: configTemplate, customQueries: [], }; diff --git a/controllers/apps/docker/useDocker.js b/controllers/apps/docker/useDocker.js index fcc4379..88ecb3e 100644 --- a/controllers/apps/docker/useDocker.js +++ b/controllers/apps/docker/useDocker.js @@ -1,8 +1,8 @@ -const App = require('../../models/App'); +const App = require('../../../models/App'); const axios = require('axios'); -const Logger = require('../../utils/Logger'); +const Logger = require('../../../utils/Logger'); const logger = new Logger(); -const loadConfig = require('../../utils/loadConfig'); +const loadConfig = require('../../../utils/loadConfig'); const useDocker = async (apps) => { const { @@ -50,7 +50,7 @@ const useDocker = async (apps) => { for (const container of containers) { let labels = container.Labels; - // todo + // Traefik labels for URL configuration if (!('flame.url' in labels)) { for (const label of Object.keys(labels)) { if (/^traefik.*.frontend.rule/.test(label)) { diff --git a/controllers/bookmark.js b/controllers/bookmark.js deleted file mode 100644 index e745d4d..0000000 --- a/controllers/bookmark.js +++ /dev/null @@ -1,112 +0,0 @@ -const asyncWrapper = require('../middleware/asyncWrapper'); -const ErrorResponse = require('../utils/ErrorResponse'); -const Bookmark = require('../models/Bookmark'); -const { Sequelize } = require('sequelize'); - -// @desc Create new bookmark -// @route POST /api/bookmarks -// @access Public -exports.createBookmark = asyncWrapper(async (req, res, next) => { - let bookmark; - - let _body = { - ...req.body, - categoryId: parseInt(req.body.categoryId), - }; - - if (req.file) { - _body.icon = req.file.filename; - } - - bookmark = await Bookmark.create(_body); - - res.status(201).json({ - success: true, - data: bookmark, - }); -}); - -// @desc Get all bookmarks -// @route GET /api/bookmarks -// @access Public -exports.getBookmarks = asyncWrapper(async (req, res, next) => { - const bookmarks = await Bookmark.findAll({ - order: [[Sequelize.fn('lower', Sequelize.col('name')), 'ASC']], - }); - - res.status(200).json({ - success: true, - data: bookmarks, - }); -}); - -// @desc Get single bookmark -// @route GET /api/bookmarks/:id -// @access Public -exports.getBookmark = asyncWrapper(async (req, res, next) => { - const bookmark = await Bookmark.findOne({ - where: { id: req.params.id }, - }); - - if (!bookmark) { - return next( - new ErrorResponse( - `Bookmark with id of ${req.params.id} was not found`, - 404 - ) - ); - } - - res.status(200).json({ - success: true, - data: bookmark, - }); -}); - -// @desc Update bookmark -// @route PUT /api/bookmarks/:id -// @access Public -exports.updateBookmark = asyncWrapper(async (req, res, next) => { - let bookmark = await Bookmark.findOne({ - where: { id: req.params.id }, - }); - - if (!bookmark) { - return next( - new ErrorResponse( - `Bookmark with id of ${req.params.id} was not found`, - 404 - ) - ); - } - - let _body = { - ...req.body, - categoryId: parseInt(req.body.categoryId), - }; - - if (req.file) { - _body.icon = req.file.filename; - } - - bookmark = await bookmark.update(_body); - - res.status(200).json({ - success: true, - data: bookmark, - }); -}); - -// @desc Delete bookmark -// @route DELETE /api/bookmarks/:id -// @access Public -exports.deleteBookmark = asyncWrapper(async (req, res, next) => { - await Bookmark.destroy({ - where: { id: req.params.id }, - }); - - res.status(200).json({ - success: true, - data: {}, - }); -}); diff --git a/controllers/bookmarks/createBookmark.js b/controllers/bookmarks/createBookmark.js new file mode 100644 index 0000000..2292c50 --- /dev/null +++ b/controllers/bookmarks/createBookmark.js @@ -0,0 +1,27 @@ +const asyncWrapper = require('../../middleware/asyncWrapper'); +const Bookmark = require('../../models/Bookmark'); + +// @desc Create new bookmark +// @route POST /api/bookmarks +// @access Public +const createBookmark = asyncWrapper(async (req, res, next) => { + let bookmark; + + let _body = { + ...req.body, + categoryId: parseInt(req.body.categoryId), + }; + + if (req.file) { + _body.icon = req.file.filename; + } + + bookmark = await Bookmark.create(_body); + + res.status(201).json({ + success: true, + data: bookmark, + }); +}); + +module.exports = createBookmark; diff --git a/controllers/bookmarks/deleteBookmark.js b/controllers/bookmarks/deleteBookmark.js new file mode 100644 index 0000000..c511a30 --- /dev/null +++ b/controllers/bookmarks/deleteBookmark.js @@ -0,0 +1,18 @@ +const asyncWrapper = require('../../middleware/asyncWrapper'); +const Bookmark = require('../../models/Bookmark'); + +// @desc Delete bookmark +// @route DELETE /api/bookmarks/:id +// @access Public +const deleteBookmark = asyncWrapper(async (req, res, next) => { + await Bookmark.destroy({ + where: { id: req.params.id }, + }); + + res.status(200).json({ + success: true, + data: {}, + }); +}); + +module.exports = deleteBookmark; diff --git a/controllers/bookmarks/getAllBookmarks.js b/controllers/bookmarks/getAllBookmarks.js new file mode 100644 index 0000000..c4d8dde --- /dev/null +++ b/controllers/bookmarks/getAllBookmarks.js @@ -0,0 +1,19 @@ +const asyncWrapper = require('../../middleware/asyncWrapper'); +const Bookmark = require('../../models/Bookmark'); +const { Sequelize } = require('sequelize'); + +// @desc Get all bookmarks +// @route GET /api/bookmarks +// @access Public +const getAllBookmarks = asyncWrapper(async (req, res, next) => { + const bookmarks = await Bookmark.findAll({ + order: [[Sequelize.fn('lower', Sequelize.col('name')), 'ASC']], + }); + + res.status(200).json({ + success: true, + data: bookmarks, + }); +}); + +module.exports = getAllBookmarks; diff --git a/controllers/bookmarks/getSingleBookmark.js b/controllers/bookmarks/getSingleBookmark.js new file mode 100644 index 0000000..18c0cbf --- /dev/null +++ b/controllers/bookmarks/getSingleBookmark.js @@ -0,0 +1,28 @@ +const asyncWrapper = require('../../middleware/asyncWrapper'); +const ErrorResponse = require('../../utils/ErrorResponse'); +const Bookmark = require('../../models/Bookmark'); + +// @desc Get single bookmark +// @route GET /api/bookmarks/:id +// @access Public +const getSingleBookmark = asyncWrapper(async (req, res, next) => { + const bookmark = await Bookmark.findOne({ + where: { id: req.params.id }, + }); + + if (!bookmark) { + return next( + new ErrorResponse( + `Bookmark with the id of ${req.params.id} was not found`, + 404 + ) + ); + } + + res.status(200).json({ + success: true, + data: bookmark, + }); +}); + +module.exports = getSingleBookmark; diff --git a/controllers/bookmarks/index.js b/controllers/bookmarks/index.js new file mode 100644 index 0000000..f1ef588 --- /dev/null +++ b/controllers/bookmarks/index.js @@ -0,0 +1,7 @@ +module.exports = { + createBookmark: require('./createBookmark'), + getAllBookmarks: require('./getAllBookmarks'), + getSingleBookmark: require('./getSingleBookmark'), + updateBookmark: require('./updateBookmark'), + deleteBookmark: require('./deleteBookmark'), +}; diff --git a/controllers/bookmarks/updateBookmark.js b/controllers/bookmarks/updateBookmark.js new file mode 100644 index 0000000..778d2eb --- /dev/null +++ b/controllers/bookmarks/updateBookmark.js @@ -0,0 +1,39 @@ +const asyncWrapper = require('../../middleware/asyncWrapper'); +const ErrorResponse = require('../../utils/ErrorResponse'); +const Bookmark = require('../../models/Bookmark'); + +// @desc Update bookmark +// @route PUT /api/bookmarks/:id +// @access Public +const updateBookmark = asyncWrapper(async (req, res, next) => { + let bookmark = await Bookmark.findOne({ + where: { id: req.params.id }, + }); + + if (!bookmark) { + return next( + new ErrorResponse( + `Bookmark with id of ${req.params.id} was not found`, + 404 + ) + ); + } + + let _body = { + ...req.body, + categoryId: parseInt(req.body.categoryId), + }; + + if (req.file) { + _body.icon = req.file.filename; + } + + bookmark = await bookmark.update(_body); + + res.status(200).json({ + success: true, + data: bookmark, + }); +}); + +module.exports = updateBookmark; diff --git a/controllers/category.js b/controllers/category.js index 0f1af58..557c1a1 100644 --- a/controllers/category.js +++ b/controllers/category.js @@ -4,15 +4,13 @@ const Category = require('../models/Category'); const Bookmark = require('../models/Bookmark'); const Config = require('../models/Config'); const { Sequelize } = require('sequelize'); +const loadConfig = require('../utils/loadConfig'); // @desc Create new category // @route POST /api/categories // @access Public exports.createCategory = asyncWrapper(async (req, res, next) => { - // Get config from database - const pinCategories = await Config.findOne({ - where: { key: 'pinCategoriesByDefault' }, - }); + const { pinCategoriesByDefault: pinCategories } = await loadConfig(); let category; @@ -37,12 +35,8 @@ exports.createCategory = asyncWrapper(async (req, res, next) => { // @route GET /api/categories // @access Public exports.getCategories = asyncWrapper(async (req, res, next) => { - // Get config from database - const useOrdering = await Config.findOne({ - where: { key: 'useOrdering' }, - }); + const { useOrdering: orderType } = await loadConfig(); - const orderType = useOrdering ? useOrdering.value : 'createdAt'; let categories; if (orderType == 'name') { diff --git a/controllers/config.js b/controllers/config.js deleted file mode 100644 index e5290aa..0000000 --- a/controllers/config.js +++ /dev/null @@ -1,177 +0,0 @@ -const asyncWrapper = require('../middleware/asyncWrapper'); -const ErrorResponse = require('../utils/ErrorResponse'); -const Config = require('../models/Config'); -const { Op } = require('sequelize'); -const File = require('../utils/File'); -const { join } = require('path'); -const fs = require('fs'); - -// @desc Insert new key:value pair -// @route POST /api/config -// @access Public -exports.createPair = asyncWrapper(async (req, res, next) => { - const pair = await Config.create(req.body); - - res.status(201).json({ - success: true, - data: pair, - }); -}); - -// @desc Get all key:value pairs -// @route GET /api/config -// @route GET /api/config?keys=foo,bar,baz -// @access Public -exports.getAllPairs = asyncWrapper(async (req, res, next) => { - let pairs; - - if (req.query.keys) { - // Check for specific keys to get in a single query - const keys = req.query.keys.split(',').map((key) => { - return { key }; - }); - - pairs = await Config.findAll({ - where: { - [Op.or]: keys, - }, - }); - } else { - // Else get all - pairs = await Config.findAll(); - } - - res.status(200).json({ - success: true, - data: pairs, - }); -}); - -// @desc Get single key:value pair -// @route GET /api/config/:key -// @access Public -exports.getSinglePair = asyncWrapper(async (req, res, next) => { - const pair = await Config.findOne({ - where: { key: req.params.key }, - }); - - if (!pair) { - return next(new ErrorResponse(`Key ${req.params.key} was not found`, 404)); - } - - res.status(200).json({ - success: true, - data: pair, - }); -}); - -// @desc Update value -// @route PUT /api/config/:key -// @access Public -exports.updateValue = asyncWrapper(async (req, res, next) => { - let pair = await Config.findOne({ - where: { key: req.params.key }, - }); - - if (!pair) { - return next(new ErrorResponse(`Key ${req.params.key} was not found`, 404)); - } - - if (pair.isLocked) { - return next( - new ErrorResponse( - `Value of key ${req.params.key} is locked and can not be changed`, - 400 - ) - ); - } - - pair = await pair.update({ ...req.body }); - - res.status(200).json({ - success: true, - data: pair, - }); -}); - -// @desc Update multiple values -// @route PUT /api/config/ -// @access Public -exports.updateValues = asyncWrapper(async (req, res, next) => { - Object.entries(req.body).forEach(async ([key, value]) => { - await Config.update( - { value }, - { - where: { key }, - } - ); - }); - - const config = await Config.findAll(); - - res.status(200).send({ - success: true, - data: config, - }); -}); - -// @desc Delete key:value pair -// @route DELETE /api/config/:key -// @access Public -exports.deletePair = asyncWrapper(async (req, res, next) => { - const pair = await Config.findOne({ - where: { key: req.params.key }, - }); - - if (!pair) { - return next(new ErrorResponse(`Key ${req.params.key} was not found`, 404)); - } - - if (pair.isLocked) { - return next( - new ErrorResponse( - `Value of key ${req.params.key} is locked and can not be deleted`, - 400 - ) - ); - } - - await pair.destroy(); - - res.status(200).json({ - success: true, - data: {}, - }); -}); - -// @desc Get custom CSS file -// @route GET /api/config/0/css -// @access Public -exports.getCss = asyncWrapper(async (req, res, next) => { - const file = new File(join(__dirname, '../public/flame.css')); - const content = file.read(); - - res.status(200).json({ - success: true, - data: content, - }); -}); - -// @desc Update custom CSS file -// @route PUT /api/config/0/css -// @access Public -exports.updateCss = asyncWrapper(async (req, res, next) => { - const file = new File(join(__dirname, '../public/flame.css')); - file.write(req.body.styles, false); - - // Copy file to docker volume - fs.copyFileSync( - join(__dirname, '../public/flame.css'), - join(__dirname, '../data/flame.css') - ); - - res.status(200).json({ - success: true, - data: {}, - }); -}); diff --git a/controllers/config/getCSS.js b/controllers/config/getCSS.js new file mode 100644 index 0000000..db6b783 --- /dev/null +++ b/controllers/config/getCSS.js @@ -0,0 +1,18 @@ +const asyncWrapper = require('../../middleware/asyncWrapper'); +const File = require('../../utils/File'); +const { join } = require('path'); + +// @desc Get custom CSS file +// @route GET /api/config/0/css +// @access Public +const getCSS = asyncWrapper(async (req, res, next) => { + const file = new File(join(__dirname, '../../public/flame.css')); + const content = file.read(); + + res.status(200).json({ + success: true, + data: content, + }); +}); + +module.exports = getCSS; diff --git a/controllers/config/getConfig.js b/controllers/config/getConfig.js new file mode 100644 index 0000000..cb196f7 --- /dev/null +++ b/controllers/config/getConfig.js @@ -0,0 +1,16 @@ +const asyncWrapper = require('../../middleware/asyncWrapper'); +const loadConfig = require('../../utils/loadConfig'); + +// @desc Get config +// @route GET /api/config +// @access Public +const getConfig = asyncWrapper(async (req, res, next) => { + const config = await loadConfig(); + + res.status(200).json({ + success: true, + data: config, + }); +}); + +module.exports = getConfig; diff --git a/controllers/config/index.js b/controllers/config/index.js new file mode 100644 index 0000000..ae3c828 --- /dev/null +++ b/controllers/config/index.js @@ -0,0 +1,6 @@ +module.exports = { + getCSS: require('./getCSS'), + updateCSS: require('./updateCSS'), + getConfig: require('./getConfig'), + updateConfig: require('./updateConfig'), +}; diff --git a/controllers/config/updateCSS.js b/controllers/config/updateCSS.js new file mode 100644 index 0000000..4deea76 --- /dev/null +++ b/controllers/config/updateCSS.js @@ -0,0 +1,24 @@ +const asyncWrapper = require('../../middleware/asyncWrapper'); +const File = require('../../utils/File'); +const { join } = require('path'); + +// @desc Update custom CSS file +// @route PUT /api/config/0/css +// @access Public +const updateCSS = asyncWrapper(async (req, res, next) => { + const file = new File(join(__dirname, '../../public/flame.css')); + file.write(req.body.styles, false); + + // Copy file to docker volume + fs.copyFileSync( + join(__dirname, '../../public/flame.css'), + join(__dirname, '../../data/flame.css') + ); + + res.status(200).json({ + success: true, + data: {}, + }); +}); + +module.exports = updateCSS; diff --git a/controllers/config/updateConfig.js b/controllers/config/updateConfig.js new file mode 100644 index 0000000..722f334 --- /dev/null +++ b/controllers/config/updateConfig.js @@ -0,0 +1,24 @@ +const asyncWrapper = require('../../middleware/asyncWrapper'); +const loadConfig = require('../../utils/loadConfig'); +const { writeFile } = require('fs/promises'); + +// @desc Update config +// @route PUT /api/config/ +// @access Public +const updateConfig = asyncWrapper(async (req, res, next) => { + const existingConfig = await loadConfig(); + + const newConfig = { + ...existingConfig, + ...req.body, + }; + + await writeFile('data/config.json', JSON.stringify(newConfig)); + + res.status(200).send({ + success: true, + data: newConfig, + }); +}); + +module.exports = updateConfig; diff --git a/middleware/multer.js b/middleware/multer.js index bd493f5..806e5b4 100644 --- a/middleware/multer.js +++ b/middleware/multer.js @@ -11,7 +11,7 @@ const storage = multer.diskStorage({ }, filename: (req, file, cb) => { cb(null, Date.now() + '--' + file.originalname); - } + }, }); const supportedTypes = ['jpg', 'jpeg', 'png', 'svg', 'svg+xml']; diff --git a/routes/bookmark.js b/routes/bookmark.js index c594738..f7e541b 100644 --- a/routes/bookmark.js +++ b/routes/bookmark.js @@ -4,21 +4,18 @@ const upload = require('../middleware/multer'); const { createBookmark, - getBookmarks, - getBookmark, + getAllBookmarks, + getSingleBookmark, updateBookmark, - deleteBookmark -} = require('../controllers/bookmark'); + deleteBookmark, +} = require('../controllers/bookmarks'); -router - .route('/') - .post(upload, createBookmark) - .get(getBookmarks); +router.route('/').post(upload, createBookmark).get(getAllBookmarks); router .route('/:id') - .get(getBookmark) + .get(getSingleBookmark) .put(upload, updateBookmark) .delete(deleteBookmark); -module.exports = router; \ No newline at end of file +module.exports = router; diff --git a/routes/config.js b/routes/config.js index 8c9ac15..fbb632f 100644 --- a/routes/config.js +++ b/routes/config.js @@ -2,20 +2,14 @@ const express = require('express'); const router = express.Router(); const { - createPair, - getAllPairs, - getSinglePair, - updateValue, - updateValues, - deletePair, - updateCss, - getCss, + getCSS, + updateCSS, + getConfig, + updateConfig, } = require('../controllers/config'); -router.route('/').post(createPair).get(getAllPairs).put(updateValues); +router.route('/').get(getConfig).put(updateConfig); -router.route('/:key').get(getSinglePair).put(updateValue).delete(deletePair); - -router.route('/0/css').get(getCss).put(updateCss); +router.route('/0/css').get(getCSS).put(updateCSS); module.exports = router; From 4ef9652ede50e9ac5efa6ec7097eb8979409c1a1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pawe=C5=82=20Malak?= Date: Fri, 22 Oct 2021 15:51:11 +0200 Subject: [PATCH 078/196] Added option to change date formatting. Added shortcuts to clear search bar --- CHANGELOG.md | 3 ++ client/src/App.tsx | 2 +- .../src/components/Home/functions/dateTime.ts | 39 +++++++++++++++++-- client/src/components/SearchBar/SearchBar.tsx | 1 + .../Settings/OtherSettings/OtherSettings.tsx | 12 ++++++ client/src/interfaces/Config.ts | 1 + client/src/interfaces/Forms.ts | 1 + client/src/store/actions/config.ts | 6 +++ .../utility/templateObjects/configTemplate.ts | 1 + .../templateObjects/settingsTemplate.ts | 1 + controllers/category.js | 14 +++---- 11 files changed, 68 insertions(+), 13 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5b91cc2..06f83ab 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,8 @@ ### v1.7.1 (TBA) - Fixed search action not being triggered by Numpad Enter +- Added option to change date formatting ([#92](https://github.com/pawelmalak/flame/issues/92)) +- Added shortcuts (Esc and double click) to clear search bar ([#100](https://github.com/pawelmalak/flame/issues/100)) +- Added Traefik integration ([#102](https://github.com/pawelmalak/flame/issues/102)) - Fixed search bar not redirecting to valid URL if it starts with capital letter ([#118](https://github.com/pawelmalak/flame/issues/118)) - Performance improvements diff --git a/client/src/App.tsx b/client/src/App.tsx index 9311b4b..3968bcd 100644 --- a/client/src/App.tsx +++ b/client/src/App.tsx @@ -16,7 +16,7 @@ import Settings from './components/Settings/Settings'; import Bookmarks from './components/Bookmarks/Bookmarks'; import NotificationCenter from './components/NotificationCenter/NotificationCenter'; -// Get config pairs from database +// Load config store.dispatch(getConfig()); // Set theme diff --git a/client/src/components/Home/functions/dateTime.ts b/client/src/components/Home/functions/dateTime.ts index 44cc5e1..ddcfc70 100644 --- a/client/src/components/Home/functions/dateTime.ts +++ b/client/src/components/Home/functions/dateTime.ts @@ -1,8 +1,39 @@ export const dateTime = (): string => { - const days = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday']; - const months = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December']; + const days = [ + 'Sunday', + 'Monday', + 'Tuesday', + 'Wednesday', + 'Thursday', + 'Friday', + 'Saturday', + ]; + const months = [ + 'January', + 'February', + 'March', + 'April', + 'May', + 'June', + 'July', + 'August', + 'September', + 'October', + 'November', + 'December', + ]; const now = new Date(); - return `${days[now.getDay()]}, ${now.getDate()} ${months[now.getMonth()]} ${now.getFullYear()}`; -} \ No newline at end of file + const useAmericanDate = localStorage.useAmericanDate === 'true'; + + if (!useAmericanDate) { + return `${days[now.getDay()]}, ${now.getDate()} ${ + months[now.getMonth()] + } ${now.getFullYear()}`; + } else { + return `${days[now.getDay()]}, ${ + months[now.getMonth()] + } ${now.getDate()} ${now.getFullYear()}`; + } +}; diff --git a/client/src/components/SearchBar/SearchBar.tsx b/client/src/components/SearchBar/SearchBar.tsx index 85175ff..b6a981f 100644 --- a/client/src/components/SearchBar/SearchBar.tsx +++ b/client/src/components/SearchBar/SearchBar.tsx @@ -72,6 +72,7 @@ const SearchBar = (props: ComponentProps): JSX.Element => { type="text" className={classes.SearchBar} onKeyUp={(e) => searchHandler(e)} + onDoubleClick={clearSearch} /> ); diff --git a/client/src/components/Settings/OtherSettings/OtherSettings.tsx b/client/src/components/Settings/OtherSettings/OtherSettings.tsx index 3d82fa4..6610b65 100644 --- a/client/src/components/Settings/OtherSettings/OtherSettings.tsx +++ b/client/src/components/Settings/OtherSettings/OtherSettings.tsx @@ -92,6 +92,18 @@ const OtherSettings = (props: ComponentProps): JSX.Element => { onChange={(e) => inputChangeHandler(e)} /> + + + + {/* BEAHVIOR OPTIONS */} diff --git a/client/src/interfaces/Config.ts b/client/src/interfaces/Config.ts index d0152c5..1b60ca7 100644 --- a/client/src/interfaces/Config.ts +++ b/client/src/interfaces/Config.ts @@ -19,4 +19,5 @@ export interface Config { dockerHost: string; kubernetesApps: boolean; unpinStoppedApps: boolean; + useAmericanDate: boolean; } diff --git a/client/src/interfaces/Forms.ts b/client/src/interfaces/Forms.ts index 9123d62..411ce90 100644 --- a/client/src/interfaces/Forms.ts +++ b/client/src/interfaces/Forms.ts @@ -25,4 +25,5 @@ export interface OtherSettingsForm { dockerHost: string; kubernetesApps: boolean; unpinStoppedApps: boolean; + useAmericanDate: boolean; } diff --git a/client/src/store/actions/config.ts b/client/src/store/actions/config.ts index 8b1ef5a..79bcebe 100644 --- a/client/src/store/actions/config.ts +++ b/client/src/store/actions/config.ts @@ -20,6 +20,9 @@ export const getConfig = () => async (dispatch: Dispatch) => { // Set custom page title if set document.title = res.data.data.customTitle; + + // Store settings for priority UI elements + localStorage.setItem('useAmericanDate', `${res.data.data.useAmericanDate}`); } catch (err) { console.log(err); } @@ -46,6 +49,9 @@ export const updateConfig = (formData: any) => async (dispatch: Dispatch) => { type: ActionTypes.updateConfig, payload: res.data.data, }); + + // Store settings for priority UI elements + localStorage.setItem('useAmericanDate', `${res.data.data.useAmericanDate}`); } catch (err) { console.log(err); } diff --git a/client/src/utility/templateObjects/configTemplate.ts b/client/src/utility/templateObjects/configTemplate.ts index bbc7998..4d4843f 100644 --- a/client/src/utility/templateObjects/configTemplate.ts +++ b/client/src/utility/templateObjects/configTemplate.ts @@ -21,4 +21,5 @@ export const configTemplate: Config = { dockerHost: 'localhost', kubernetesApps: false, unpinStoppedApps: false, + useAmericanDate: false, }; diff --git a/client/src/utility/templateObjects/settingsTemplate.ts b/client/src/utility/templateObjects/settingsTemplate.ts index 674931b..05bc887 100644 --- a/client/src/utility/templateObjects/settingsTemplate.ts +++ b/client/src/utility/templateObjects/settingsTemplate.ts @@ -14,6 +14,7 @@ export const otherSettingsTemplate: OtherSettingsForm = { dockerHost: 'localhost', kubernetesApps: true, unpinStoppedApps: true, + useAmericanDate: false, }; export const weatherSettingsTemplate: WeatherForm = { diff --git a/controllers/category.js b/controllers/category.js index 557c1a1..d10183f 100644 --- a/controllers/category.js +++ b/controllers/category.js @@ -15,14 +15,12 @@ exports.createCategory = asyncWrapper(async (req, res, next) => { let category; if (pinCategories) { - if (parseInt(pinCategories.value)) { - category = await Category.create({ - ...req.body, - isPinned: true, - }); - } else { - category = await Category.create(req.body); - } + category = await Category.create({ + ...req.body, + isPinned: true, + }); + } else { + category = await Category.create(req.body); } res.status(201).json({ From 98924ac00689de2849a305285f226777194113cc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pawe=C5=82=20Malak?= Date: Fri, 22 Oct 2021 16:10:38 +0200 Subject: [PATCH 079/196] Pushed version 1.7.1 --- .env | 2 +- CHANGELOG.md | 2 +- client/.env | 2 +- db/migrations/01_new-config.js | 8 ++------ 4 files changed, 5 insertions(+), 9 deletions(-) diff --git a/.env b/.env index 1bb2edb..e2c26fc 100644 --- a/.env +++ b/.env @@ -1,3 +1,3 @@ PORT=5005 NODE_ENV=development -VERSION=1.7.0 \ No newline at end of file +VERSION=1.7.1 \ No newline at end of file diff --git a/CHANGELOG.md b/CHANGELOG.md index 06f83ab..fc2dbd5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,4 @@ -### v1.7.1 (TBA) +### v1.7.1 (2021-10-22) - Fixed search action not being triggered by Numpad Enter - Added option to change date formatting ([#92](https://github.com/pawelmalak/flame/issues/92)) - Added shortcuts (Esc and double click) to clear search bar ([#100](https://github.com/pawelmalak/flame/issues/100)) diff --git a/client/.env b/client/.env index 6dbe18b..1511942 100644 --- a/client/.env +++ b/client/.env @@ -1 +1 @@ -REACT_APP_VERSION=1.7.0 \ No newline at end of file +REACT_APP_VERSION=1.7.1 \ No newline at end of file diff --git a/db/migrations/01_new-config.js b/db/migrations/01_new-config.js index 2c42af7..6429e4f 100644 --- a/db/migrations/01_new-config.js +++ b/db/migrations/01_new-config.js @@ -1,5 +1,3 @@ -const { DataTypes } = require('sequelize'); -const { INTEGER, DATE, STRING, TINYINT, FLOAT, TEXT } = DataTypes; const { readFile, writeFile, copyFile } = require('fs/promises'); const Config = require('../../models/Config'); @@ -28,12 +26,10 @@ const up = async (query) => { const newConfig = JSON.stringify(parsedNewConfig); await writeFile('data/config.json', newConfig); - // await query.dropTable('config'); + await query.dropTable('config'); }; -const down = async (query) => { - // await query.dropTable('config'); -}; +const down = async (query) => {}; module.exports = { up, From df6d96f5b697c8a149a9c5ccba9a5ce70a95918d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pawe=C5=82=20Malak?= Date: Tue, 26 Oct 2021 13:09:42 +0200 Subject: [PATCH 080/196] Added option to disable search bar autofocus --- DEV_GUIDELINES.md | 10 +++++++++ client/src/components/SearchBar/SearchBar.tsx | 21 ++++++++++++++----- .../SearchSettings/SearchSettings.tsx | 12 +++++++++++ client/src/interfaces/Config.ts | 1 + client/src/interfaces/Forms.ts | 1 + .../utility/templateObjects/configTemplate.ts | 1 + .../templateObjects/settingsTemplate.ts | 1 + utils/init/initialConfig.json | 4 +++- 8 files changed, 45 insertions(+), 6 deletions(-) create mode 100644 DEV_GUIDELINES.md diff --git a/DEV_GUIDELINES.md b/DEV_GUIDELINES.md new file mode 100644 index 0000000..462a17f --- /dev/null +++ b/DEV_GUIDELINES.md @@ -0,0 +1,10 @@ +## Adding new config key + +1. Edit utils/init/initialConfig.json +2. Edit client/src/interfaces/Config.ts +3. Edit client/src/utility/templateObjects/configTemplate.ts + +If config value will be used in a form: + +4. Edit client/src/interfaces/Forms.ts +5. Edit client/src/utility/templateObjects/settingsTemplate.ts \ No newline at end of file diff --git a/client/src/components/SearchBar/SearchBar.tsx b/client/src/components/SearchBar/SearchBar.tsx index b6a981f..a535c19 100644 --- a/client/src/components/SearchBar/SearchBar.tsx +++ b/client/src/components/SearchBar/SearchBar.tsx @@ -5,7 +5,7 @@ import { connect } from 'react-redux'; import { createNotification } from '../../store/actions'; // Typescript -import { NewNotification } from '../../interfaces'; +import { Config, GlobalState, NewNotification } from '../../interfaces'; // CSS import classes from './SearchBar.module.css'; @@ -16,16 +16,20 @@ import { searchParser, urlParser, redirectUrl } from '../../utility'; interface ComponentProps { createNotification: (notification: NewNotification) => void; setLocalSearch: (query: string) => void; + config: Config; + loading: boolean; } const SearchBar = (props: ComponentProps): JSX.Element => { - const { setLocalSearch, createNotification } = props; + const { setLocalSearch, createNotification, config, loading } = props; const inputRef = useRef(document.createElement('input')); useEffect(() => { - inputRef.current.focus(); - }, []); + if (!loading && !config.disableAutofocus) { + inputRef.current.focus(); + } + }, [config]); const clearSearch = () => { inputRef.current.value = ''; @@ -78,4 +82,11 @@ const SearchBar = (props: ComponentProps): JSX.Element => { ); }; -export default connect(null, { createNotification })(SearchBar); +const mapStateToProps = (state: GlobalState) => { + return { + config: state.config.config, + loading: state.config.loading, + }; +}; + +export default connect(mapStateToProps, { createNotification })(SearchBar); diff --git a/client/src/components/Settings/SearchSettings/SearchSettings.tsx b/client/src/components/Settings/SearchSettings/SearchSettings.tsx index a403fa6..d05def5 100644 --- a/client/src/components/Settings/SearchSettings/SearchSettings.tsx +++ b/client/src/components/Settings/SearchSettings/SearchSettings.tsx @@ -121,6 +121,18 @@ const SearchSettings = (props: Props): JSX.Element => { + + + + diff --git a/client/src/interfaces/Config.ts b/client/src/interfaces/Config.ts index 1b60ca7..88f1d5c 100644 --- a/client/src/interfaces/Config.ts +++ b/client/src/interfaces/Config.ts @@ -20,4 +20,5 @@ export interface Config { kubernetesApps: boolean; unpinStoppedApps: boolean; useAmericanDate: boolean; + disableAutofocus: boolean; } diff --git a/client/src/interfaces/Forms.ts b/client/src/interfaces/Forms.ts index 411ce90..6e144bb 100644 --- a/client/src/interfaces/Forms.ts +++ b/client/src/interfaces/Forms.ts @@ -9,6 +9,7 @@ export interface SearchForm { hideSearch: boolean; defaultSearchProvider: string; searchSameTab: boolean; + disableAutofocus: boolean; } export interface OtherSettingsForm { diff --git a/client/src/utility/templateObjects/configTemplate.ts b/client/src/utility/templateObjects/configTemplate.ts index 4d4843f..a6f590a 100644 --- a/client/src/utility/templateObjects/configTemplate.ts +++ b/client/src/utility/templateObjects/configTemplate.ts @@ -22,4 +22,5 @@ export const configTemplate: Config = { kubernetesApps: false, unpinStoppedApps: false, useAmericanDate: false, + disableAutofocus: false, }; diff --git a/client/src/utility/templateObjects/settingsTemplate.ts b/client/src/utility/templateObjects/settingsTemplate.ts index 05bc887..30fa871 100644 --- a/client/src/utility/templateObjects/settingsTemplate.ts +++ b/client/src/utility/templateObjects/settingsTemplate.ts @@ -28,4 +28,5 @@ export const searchSettingsTemplate: SearchForm = { hideSearch: false, searchSameTab: false, defaultSearchProvider: 'l', + disableAutofocus: false, }; diff --git a/utils/init/initialConfig.json b/utils/init/initialConfig.json index f6b57a3..11a839a 100644 --- a/utils/init/initialConfig.json +++ b/utils/init/initialConfig.json @@ -18,5 +18,7 @@ "dockerApps": false, "dockerHost": "localhost", "kubernetesApps": false, - "unpinStoppedApps": false + "unpinStoppedApps": false, + "useAmericanDate": false, + "disableAutofocus": false } From 3d3e2eed8c679a0a88cac349a58dd31cc3f7bd7f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pawe=C5=82=20Malak?= Date: Tue, 26 Oct 2021 14:37:01 +0200 Subject: [PATCH 081/196] Fixed bug with weather logging. Fixed bug with search bar shortcuts --- CHANGELOG.md | 5 +++ client/src/components/SearchBar/SearchBar.tsx | 16 +++++++++ utils/getExternalWeather.js | 8 ----- utils/jobs.js | 35 +++++++++++++------ 4 files changed, 45 insertions(+), 19 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index fc2dbd5..0f57ca1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,8 @@ +### v1.7.2 (TBA) +- Use search bar shortcuts when it's not focused ([#124](https://github.com/pawelmalak/flame/issues/124)) +- Fixed bug with Weather API still logging with module being disabled ([#125](https://github.com/pawelmalak/flame/issues/125)) +- Added option to disable search bar autofocus ([#127](https://github.com/pawelmalak/flame/issues/127)) + ### v1.7.1 (2021-10-22) - Fixed search action not being triggered by Numpad Enter - Added option to change date formatting ([#92](https://github.com/pawelmalak/flame/issues/92)) diff --git a/client/src/components/SearchBar/SearchBar.tsx b/client/src/components/SearchBar/SearchBar.tsx index a535c19..c20b457 100644 --- a/client/src/components/SearchBar/SearchBar.tsx +++ b/client/src/components/SearchBar/SearchBar.tsx @@ -25,12 +25,28 @@ const SearchBar = (props: ComponentProps): JSX.Element => { const inputRef = useRef(document.createElement('input')); + // Search bar autofocus useEffect(() => { if (!loading && !config.disableAutofocus) { inputRef.current.focus(); } }, [config]); + // Listen for keyboard events outside of search bar + useEffect(() => { + const keyOutsideFocus = (e: any) => { + const { key } = e as KeyboardEvent; + + if (key === 'Escape') { + clearSearch(); + } + }; + + window.addEventListener('keydown', keyOutsideFocus); + + return () => window.removeEventListener('keydown', keyOutsideFocus); + }, []); + const clearSearch = () => { inputRef.current.value = ''; setLocalSearch(''); diff --git a/utils/getExternalWeather.js b/utils/getExternalWeather.js index 8b2be8d..20edac4 100644 --- a/utils/getExternalWeather.js +++ b/utils/getExternalWeather.js @@ -5,14 +5,6 @@ const loadConfig = require('./loadConfig'); const getExternalWeather = async () => { const { WEATHER_API_KEY: secret, lat, long } = await loadConfig(); - if (!secret) { - throw new Error('API key was not found. Weather updated failed'); - } - - if (!lat || !long) { - throw new Error('Location was not found. Weather updated failed'); - } - // Fetch data from external API try { const res = await axios.get( diff --git a/utils/jobs.js b/utils/jobs.js index 935f497..9716af0 100644 --- a/utils/jobs.js +++ b/utils/jobs.js @@ -3,20 +3,33 @@ const getExternalWeather = require('./getExternalWeather'); const clearWeatherData = require('./clearWeatherData'); const Sockets = require('../Sockets'); const Logger = require('./Logger'); +const loadConfig = require('./loadConfig'); const logger = new Logger(); // Update weather data every 15 minutes -const weatherJob = schedule.scheduleJob('updateWeather', '0 */15 * * * *', async () => { - try { - const weatherData = await getExternalWeather(); - logger.log('Weather updated'); - Sockets.getSocket('weather').socket.send(JSON.stringify(weatherData)); - } catch (err) { - logger.log(err.message, 'ERROR'); +const weatherJob = schedule.scheduleJob( + 'updateWeather', + '0 */15 * * * *', + async () => { + const { WEATHER_API_KEY: secret } = await loadConfig(); + + try { + const weatherData = await getExternalWeather(); + logger.log('Weather updated'); + Sockets.getSocket('weather').socket.send(JSON.stringify(weatherData)); + } catch (err) { + if (secret) { + logger.log(err.message, 'ERROR'); + } + } } -}) +); // Clear old weather data every 4 hours -const weatherCleanerJob = schedule.scheduleJob('clearWeather', '0 5 */4 * * *', async () => { - clearWeatherData(); -}) \ No newline at end of file +const weatherCleanerJob = schedule.scheduleJob( + 'clearWeather', + '0 5 */4 * * *', + async () => { + clearWeatherData(); + } +); From da13ca6092c2e41b77138654f1f87fe089a92842 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pawe=C5=82=20Malak?= Date: Wed, 27 Oct 2021 11:52:57 +0200 Subject: [PATCH 082/196] Search bar redirect to local search results --- CHANGELOG.md | 1 + client/src/components/Home/Home.tsx | 55 ++++++++++++------- client/src/components/SearchBar/SearchBar.tsx | 27 +++++++-- client/src/utility/redirectUrl.ts | 8 ++- 4 files changed, 66 insertions(+), 25 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0f57ca1..3eae525 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,5 @@ ### v1.7.2 (TBA) +- Pressing Enter while search bar is focused will now redirect to first result of local search ([#121](https://github.com/pawelmalak/flame/issues/121)) - Use search bar shortcuts when it's not focused ([#124](https://github.com/pawelmalak/flame/issues/124)) - Fixed bug with Weather API still logging with module being disabled ([#125](https://github.com/pawelmalak/flame/issues/125)) - Added option to disable search bar autofocus ([#127](https://github.com/pawelmalak/flame/issues/127)) diff --git a/client/src/components/Home/Home.tsx b/client/src/components/Home/Home.tsx index 18d81bc..4a0adbe 100644 --- a/client/src/components/Home/Home.tsx +++ b/client/src/components/Home/Home.tsx @@ -55,17 +55,21 @@ const Home = (props: ComponentProps): JSX.Element => { // Local search query const [localSearch, setLocalSearch] = useState(null); + const [appSearchResult, setAppSearchResult] = useState(null); + const [bookmarkSearchResult, setBookmarkSearchResult] = useState< + null | Category[] + >(null); // Load applications useEffect(() => { - if (apps.length === 0) { + if (!apps.length) { getApps(); } }, [getApps]); // Load bookmark categories useEffect(() => { - if (categories.length === 0) { + if (!categories.length) { getCategories(); } }, [getCategories]); @@ -87,22 +91,37 @@ const Home = (props: ComponentProps): JSX.Element => { return () => clearInterval(interval); }, []); - // Search bookmarks - const searchBookmarks = (query: string): Category[] => { - const category = { ...categories[0] }; - category.name = 'Search Results'; - category.bookmarks = categories - .map(({ bookmarks }) => bookmarks) - .flat() - .filter(({ name }) => new RegExp(query, 'i').test(name)); + useEffect(() => { + if (localSearch) { + // Search through apps + setAppSearchResult([ + ...apps.filter(({ name }) => new RegExp(localSearch, 'i').test(name)), + ]); - return [category]; - }; + // Search through bookmarks + const category = { ...categories[0] }; + + category.name = 'Search Results'; + category.bookmarks = categories + .map(({ bookmarks }) => bookmarks) + .flat() + .filter(({ name }) => new RegExp(localSearch, 'i').test(name)); + + setBookmarkSearchResult([category]); + } else { + setAppSearchResult(null); + setBookmarkSearchResult(null); + } + }, [localSearch]); return ( {!props.config.hideSearch ? ( - + ) : (
)} @@ -130,11 +149,9 @@ const Home = (props: ComponentProps): JSX.Element => { ) : ( isPinned) - : apps.filter(({ name }) => - new RegExp(localSearch, 'i').test(name) - ) + : appSearchResult } totalApps={apps.length} searching={!!localSearch} @@ -154,9 +171,9 @@ const Home = (props: ComponentProps): JSX.Element => { ) : ( isPinned) - : searchBookmarks(localSearch) + : bookmarkSearchResult } totalCategories={categories.length} searching={!!localSearch} diff --git a/client/src/components/SearchBar/SearchBar.tsx b/client/src/components/SearchBar/SearchBar.tsx index c20b457..7a91525 100644 --- a/client/src/components/SearchBar/SearchBar.tsx +++ b/client/src/components/SearchBar/SearchBar.tsx @@ -5,7 +5,13 @@ import { connect } from 'react-redux'; import { createNotification } from '../../store/actions'; // Typescript -import { Config, GlobalState, NewNotification } from '../../interfaces'; +import { + App, + Category, + Config, + GlobalState, + NewNotification, +} from '../../interfaces'; // CSS import classes from './SearchBar.module.css'; @@ -16,12 +22,21 @@ import { searchParser, urlParser, redirectUrl } from '../../utility'; interface ComponentProps { createNotification: (notification: NewNotification) => void; setLocalSearch: (query: string) => void; + appSearchResult: App[] | null; + bookmarkSearchResult: Category[] | null; config: Config; loading: boolean; } const SearchBar = (props: ComponentProps): JSX.Element => { - const { setLocalSearch, createNotification, config, loading } = props; + const { + setLocalSearch, + createNotification, + config, + loading, + appSearchResult, + bookmarkSearchResult, + } = props; const inputRef = useRef(document.createElement('input')); @@ -73,8 +88,12 @@ const SearchBar = (props: ComponentProps): JSX.Element => { const url = urlParser(inputRef.current.value)[1]; redirectUrl(url, sameTab); } else if (isLocal) { - // Local query -> filter apps and bookmarks - setLocalSearch(search); + // Local query -> redirect if at least 1 result found + if (appSearchResult?.length) { + redirectUrl(appSearchResult[0].url, sameTab); + } else if (bookmarkSearchResult?.length) { + redirectUrl(bookmarkSearchResult[0].bookmarks[0].url, sameTab); + } } else { // Valid query -> redirect to search results const url = `${query.template}${search}`; diff --git a/client/src/utility/redirectUrl.ts b/client/src/utility/redirectUrl.ts index 81eca10..533f5d2 100644 --- a/client/src/utility/redirectUrl.ts +++ b/client/src/utility/redirectUrl.ts @@ -1,7 +1,11 @@ +import { urlParser } from '.'; + export const redirectUrl = (url: string, sameTab: boolean) => { + const parsedUrl = urlParser(url)[1]; + if (sameTab) { - document.location.replace(url); + document.location.replace(parsedUrl); } else { - window.open(url); + window.open(parsedUrl); } }; From feb7275cf8648d99b1d2aa1e27ae050cb53285a4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pawe=C5=82=20Malak?= Date: Thu, 28 Oct 2021 11:44:36 +0200 Subject: [PATCH 083/196] Pushed version 1.7.2 --- .env | 2 +- CHANGELOG.md | 2 +- client/.env | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.env b/.env index e2c26fc..3288f33 100644 --- a/.env +++ b/.env @@ -1,3 +1,3 @@ PORT=5005 NODE_ENV=development -VERSION=1.7.1 \ No newline at end of file +VERSION=1.7.2 \ No newline at end of file diff --git a/CHANGELOG.md b/CHANGELOG.md index 3eae525..25d796b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,4 @@ -### v1.7.2 (TBA) +### v1.7.2 (2021-10-28) - Pressing Enter while search bar is focused will now redirect to first result of local search ([#121](https://github.com/pawelmalak/flame/issues/121)) - Use search bar shortcuts when it's not focused ([#124](https://github.com/pawelmalak/flame/issues/124)) - Fixed bug with Weather API still logging with module being disabled ([#125](https://github.com/pawelmalak/flame/issues/125)) diff --git a/client/.env b/client/.env index 1511942..e16ddf3 100644 --- a/client/.env +++ b/client/.env @@ -1 +1 @@ -REACT_APP_VERSION=1.7.1 \ No newline at end of file +REACT_APP_VERSION=1.7.2 \ No newline at end of file From 88694c7e2767040bcf9551fe65eb3ce80a849368 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pawe=C5=82=20Malak?= Date: Thu, 28 Oct 2021 16:05:21 +0200 Subject: [PATCH 084/196] Fixed bug with custom css not updating --- .env | 2 +- CHANGELOG.md | 3 +++ client/.env | 2 +- controllers/config/updateCSS.js | 1 + 4 files changed, 6 insertions(+), 2 deletions(-) diff --git a/.env b/.env index 3288f33..5c6e879 100644 --- a/.env +++ b/.env @@ -1,3 +1,3 @@ PORT=5005 NODE_ENV=development -VERSION=1.7.2 \ No newline at end of file +VERSION=1.7.3 \ No newline at end of file diff --git a/CHANGELOG.md b/CHANGELOG.md index 25d796b..7c870d1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,6 @@ +### v1.7.3 (2021-10-28) +- Fixed bug with custom CSS not updating + ### v1.7.2 (2021-10-28) - Pressing Enter while search bar is focused will now redirect to first result of local search ([#121](https://github.com/pawelmalak/flame/issues/121)) - Use search bar shortcuts when it's not focused ([#124](https://github.com/pawelmalak/flame/issues/124)) diff --git a/client/.env b/client/.env index e16ddf3..18bbaa3 100644 --- a/client/.env +++ b/client/.env @@ -1 +1 @@ -REACT_APP_VERSION=1.7.2 \ No newline at end of file +REACT_APP_VERSION=1.7.3 \ No newline at end of file diff --git a/controllers/config/updateCSS.js b/controllers/config/updateCSS.js index 4deea76..4ac476c 100644 --- a/controllers/config/updateCSS.js +++ b/controllers/config/updateCSS.js @@ -1,6 +1,7 @@ const asyncWrapper = require('../../middleware/asyncWrapper'); const File = require('../../utils/File'); const { join } = require('path'); +const fs = require('fs'); // @desc Update custom CSS file // @route PUT /api/config/0/css From 1d70bd132a5f6a496daf407acf144f6bd101e32f Mon Sep 17 00:00:00 2001 From: Ekrem Parlak Date: Mon, 1 Nov 2021 15:13:06 +0100 Subject: [PATCH 085/196] Update Dockerfile for smaller image --- Dockerfile | 8 +++++++- Dockerfile.multiarch | 6 ++++++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index fed0789..fc402f4 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,4 @@ -FROM node:14-alpine +FROM node:14-alpine as builder RUN apk update && apk add --no-cache nano curl @@ -18,6 +18,12 @@ RUN mkdir -p ./public ./data \ && mv ./client/build/* ./public \ && rm -rf ./client +FROM node:14-alpine + +COPY --from=builder /app /app + +WORKDIR /app + EXPOSE 5005 ENV NODE_ENV=production diff --git a/Dockerfile.multiarch b/Dockerfile.multiarch index 20ff6c2..a03cb4b 100644 --- a/Dockerfile.multiarch +++ b/Dockerfile.multiarch @@ -20,6 +20,12 @@ RUN mkdir -p ./public ./data \ && rm -rf ./client \ && apk del build-dependencies +FROM node:14-alpine + +COPY --from=builder /app /app + +WORKDIR /app + EXPOSE 5005 ENV NODE_ENV=production From b45eecada219c75c8c975b159aa2210c59244846 Mon Sep 17 00:00:00 2001 From: Ekrem Date: Mon, 1 Nov 2021 19:08:30 +0300 Subject: [PATCH 086/196] Update Dockerfile.multiarch --- Dockerfile.multiarch | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Dockerfile.multiarch b/Dockerfile.multiarch index a03cb4b..ea1e6ea 100644 --- a/Dockerfile.multiarch +++ b/Dockerfile.multiarch @@ -1,4 +1,4 @@ -FROM node:14-alpine +FROM node:14-alpine as builder RUN apk update && apk add --no-cache nano curl @@ -30,4 +30,4 @@ EXPOSE 5005 ENV NODE_ENV=production -CMD ["node", "server.js"] \ No newline at end of file +CMD ["node", "server.js"] From 4ed29fe276b4282c67415f9788660df2a3a69b5c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pawe=C5=82=20Malak?= Date: Thu, 4 Nov 2021 23:39:35 +0100 Subject: [PATCH 087/196] Split remaining controllers into separate files. Added iOS homescreen icon. Removed additional logging from weather module. --- .gitignore | 1 + CHANGELOG.md | 3 + .../public/icons/apple-touch-icon-114x114.png | Bin 0 -> 9581 bytes .../public/icons/apple-touch-icon-120x120.png | Bin 0 -> 7588 bytes .../public/icons/apple-touch-icon-144x144.png | Bin 0 -> 7315 bytes .../public/icons/apple-touch-icon-152x152.png | Bin 0 -> 11565 bytes .../public/icons/apple-touch-icon-180x180.png | Bin 0 -> 20249 bytes .../public/icons/apple-touch-icon-57x57.png | Bin 0 -> 2579 bytes .../public/icons/apple-touch-icon-72x72.png | Bin 0 -> 3311 bytes .../public/icons/apple-touch-icon-76x76.png | Bin 0 -> 4058 bytes client/public/icons/apple-touch-icon.png | Bin 0 -> 2579 bytes client/public/{ => icons}/favicon.ico | Bin client/public/index.html | 46 ++++- controllers/categories/createCategory.js | 28 +++ controllers/categories/deleteCategory.js | 45 +++++ controllers/categories/getAllCategories.js | 43 +++++ controllers/categories/getSingleCategory.js | 35 ++++ controllers/categories/index.js | 8 + controllers/categories/reorderCategories.js | 22 +++ controllers/categories/updateCategory.js | 30 +++ controllers/category.js | 178 ------------------ controllers/queries/addQuery.js | 21 +++ controllers/queries/deleteQuery.js | 22 +++ controllers/queries/getQueries.js | 17 ++ controllers/queries/index.js | 87 +-------- controllers/queries/updateQuery.js | 32 ++++ controllers/weather.js | 31 --- controllers/weather/getWather.js | 19 ++ controllers/weather/index.js | 4 + controllers/weather/updateWeather.js | 16 ++ routes/category.js | 21 +-- utils/clearWeatherData.js | 21 ++- 32 files changed, 418 insertions(+), 312 deletions(-) create mode 100644 client/public/icons/apple-touch-icon-114x114.png create mode 100644 client/public/icons/apple-touch-icon-120x120.png create mode 100644 client/public/icons/apple-touch-icon-144x144.png create mode 100644 client/public/icons/apple-touch-icon-152x152.png create mode 100644 client/public/icons/apple-touch-icon-180x180.png create mode 100644 client/public/icons/apple-touch-icon-57x57.png create mode 100644 client/public/icons/apple-touch-icon-72x72.png create mode 100644 client/public/icons/apple-touch-icon-76x76.png create mode 100644 client/public/icons/apple-touch-icon.png rename client/public/{ => icons}/favicon.ico (100%) create mode 100644 controllers/categories/createCategory.js create mode 100644 controllers/categories/deleteCategory.js create mode 100644 controllers/categories/getAllCategories.js create mode 100644 controllers/categories/getSingleCategory.js create mode 100644 controllers/categories/index.js create mode 100644 controllers/categories/reorderCategories.js create mode 100644 controllers/categories/updateCategory.js delete mode 100644 controllers/category.js create mode 100644 controllers/queries/addQuery.js create mode 100644 controllers/queries/deleteQuery.js create mode 100644 controllers/queries/getQueries.js create mode 100644 controllers/queries/updateQuery.js delete mode 100644 controllers/weather.js create mode 100644 controllers/weather/getWather.js create mode 100644 controllers/weather/index.js create mode 100644 controllers/weather/updateWeather.js diff --git a/.gitignore b/.gitignore index 98ec862..147804b 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,5 @@ node_modules data public +!client/public build.sh \ No newline at end of file diff --git a/CHANGELOG.md b/CHANGELOG.md index 7c870d1..afd7297 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,6 @@ +### v1.7.4 (TBA) +- Added iOS "Add to homescreen" icon ([#131](https://github.com/pawelmalak/flame/issues/131)) + ### v1.7.3 (2021-10-28) - Fixed bug with custom CSS not updating diff --git a/client/public/icons/apple-touch-icon-114x114.png b/client/public/icons/apple-touch-icon-114x114.png new file mode 100644 index 0000000000000000000000000000000000000000..301cd2527deac021ffaf5dafbc3dc72bbfa28597 GIT binary patch literal 9581 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 Xng6tX727L300000NkvXXu0mjf@N93N literal 0 HcmV?d00001 diff --git a/client/public/icons/apple-touch-icon-120x120.png b/client/public/icons/apple-touch-icon-120x120.png new file mode 100644 index 0000000000000000000000000000000000000000..28ba56d603187f1f698fa1d10bc9e8cb9d2f1bf0 GIT binary patch literal 7588 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 literal 0 HcmV?d00001 diff --git a/client/public/icons/apple-touch-icon-57x57.png b/client/public/icons/apple-touch-icon-57x57.png new file mode 100644 index 0000000000000000000000000000000000000000..b07d1da59d94de7a617ee11963889b7930ff4ced GIT binary patch literal 2579 zcmV+u3hecXP)6HM;ZTpbI;y;cenR$No@1jP2A?unxtu}!B-GN ziA`#4Q^e5Xiq(W#C{5IAL()H*ScD2iMI<0t6oi5gum!Oc0;V;TNCOqCo325k;e zMQ)TSWh*Nw^;=937-gRXEFdMpm(q zOd1(S#TLtAheJ!~8CK>pz<80!67mCv64P96fZ47L$smeInbJ_h+T!U{dwWsYv;{mh zh3SJY>l&iQYu4gd@=O4jSrb;GjjYF#!0VRG$(n5vqtdO8ITZ$*iWCH>Y~6nznF6JWHR<=mEu(|YL?K<>6{UcCcA7t1H zkB@@GuuvGt3ny&Ifi=X_X|S5Zuj`JF?t2#0 z-E9#h<64go0OHz;FhK9#{Sfs&yKk5`|7t7E^`B(r%MT*Bb(QmbX>d6}bj?A(=tz_W z+EcBL>O)`m4}S9kh^2$qM_t*3ZidU{7!0I=A-?C>opE;Vm3y~B)argg5TUZ=zL-W7 z$5?fbGIT2Zur{W0&jv(Pz6q$1(+aw!bBNW7qdQVji24^JkMia(6;tVZw?Zsf7=w*; zjCi0FfX5Tn92Hx}S2y>h*(7Na(czT>&$vji0!o9+Ao`ai8o|uY3)OD)eD5hB2%?o# zA%(&ZJAt+1wW49dzI=8RKvsMiy(-etY2hN&o;!fb1KXVZxN<_SwnEOG6*;iypOp~Oz5P*$S{?1i zgifPW@=hc-#&&g~`?2q$`tTzK^hxK<#;;)M#o`SQ$KI4!{ubar46H8w26VVR0JQ$~7I<>f4VdSDBx*Nu z42>rrM|#Rh7sVl zcuQtRY2|HEj#M$Q@boE6|M?|UwhcLfgBVy^_?#pgLaY}#CB@@o8UyNtNeEC^m-fvB z1)|mm2$7*b^ZH+PTBaat_0Cq(y=rXDH#30n-IJE^$4&;#=k|qhpxw^UZl65^Znr@~ zB&)2^X|+09$$*KnCjhJ;u%y}O=tX$^9q`Ny5U-duqu}|?96l5$%heMb26gvnYHZR= zL5A%>gq+EDA;FLuGGL+!Bb;!viPp$)N4T_o?tM)E@wW+GH8cgQ)_D7dCq@-BBD-lx zUYX4h0x+eaMBB}0oO1MS_Vw51KEe0Tp!xJ}v>S~~XaW(+TRbU~>1nh^h8;n}7f@Kq z46ws;T`G6zAb7G_c=e`!^E@UV-;VIq344}(<0b^_);np;9z6oSJlR>cjyPur>SDYx zf$5k2P%wqbn0@mNz``UEp}cVudY^d8+kfiC-(xOC9NHKc?*1%0peOZuO7tAUk)NXbsQ)K2-d7c<(~Ty+_~O6&g|hsn0$6$VaJx?Gpfk?5Q*C* zA4Tn_zi=J}eAr)md<+vicYr^*)IkQEuFf$*`}8R^_wA0e16O&1%?6s!?CoHJ#x5jH zQ!56^Y)N9;p5t@Ikz;7?-ih$N|K_TcD+Zcgy*)mL=HBlheCOYDOs!?#34dvkZ?d|y z!V{xt?An2uSN;SJ!^~t{lh3?o#_ZuknAo`^o*+50utpeQSH_lOo0L@+2~sc$WDF)! zbdeS$sNYJtqAVu)HFg7u$5uzD>@14|+1%?EmVA{H)Bg3q5v z`0h!xMuyS)$D4^=Yh+nHk1-INDsW4k3~AogfnBX2fh{=El%B61NMhkkzQw^M8+3ie zeHwO6@pfS4(>Qxztqe*z8zDFW6JRe^QVy();}ptP+prUgC;1DC6I+@*jJ|~ie(3RlXzXVVQ)28r563e=OkbmyZ?E3ZJ$gKwGKWt}eTaA~-2IE@Z@ z3kcQXK$eOCH?$?^##-&kR@qt#2y;*FIb#Cs*(__DX39YgZP)hvRbf*@M} z1SaF?#Nvru_`+Nj&e_oTj^onv4NHH9an?cFskB**l@_H*$CCtfhZSgnoHIt58oq7~ zq?HC6wyszs#Wcw%IVGnPBFz~|FrX&JlXwr3M|V2^?0{dn_G5Hrr7DB9Y7RY|sL)xS pxunZY#%WgCjt!`-`3t4?;eWk|mdmBFm`4Br002ovPDHLkV1h8T`P={i literal 0 HcmV?d00001 diff --git a/client/public/icons/apple-touch-icon-72x72.png b/client/public/icons/apple-touch-icon-72x72.png new file mode 100644 index 0000000000000000000000000000000000000000..0ebf2c8ccfdf80922cf7ab5ff18512dd0a5e9a83 GIT binary patch literal 3311 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 literal 0 HcmV?d00001 diff --git a/client/public/icons/apple-touch-icon-76x76.png b/client/public/icons/apple-touch-icon-76x76.png new file mode 100644 index 0000000000000000000000000000000000000000..d636fe97d49405bb55f3a1062d40fdf5b0cf266c GIT binary patch literal 4058 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 literal 0 HcmV?d00001 diff --git a/client/public/favicon.ico b/client/public/icons/favicon.ico similarity index 100% rename from client/public/favicon.ico rename to client/public/icons/favicon.ico diff --git a/client/public/index.html b/client/public/index.html index c93d95e..32e17fe 100644 --- a/client/public/index.html +++ b/client/public/index.html @@ -2,7 +2,51 @@ - + + + + + + + + + + { + const { pinCategoriesByDefault: pinCategories } = await loadConfig(); + + let category; + + if (pinCategories) { + category = await Category.create({ + ...req.body, + isPinned: true, + }); + } else { + category = await Category.create(req.body); + } + + res.status(201).json({ + success: true, + data: category, + }); +}); + +module.exports = createCategory; diff --git a/controllers/categories/deleteCategory.js b/controllers/categories/deleteCategory.js new file mode 100644 index 0000000..e9b004b --- /dev/null +++ b/controllers/categories/deleteCategory.js @@ -0,0 +1,45 @@ +const asyncWrapper = require('../../middleware/asyncWrapper'); +const ErrorResponse = require('../../utils/ErrorResponse'); +const Category = require('../../models/Category'); +const Bookmark = require('../../models/Bookmark'); + +// @desc Delete category +// @route DELETE /api/categories/:id +// @access Public +const deleteCategory = asyncWrapper(async (req, res, next) => { + const category = await Category.findOne({ + where: { id: req.params.id }, + include: [ + { + model: Bookmark, + as: 'bookmarks', + }, + ], + }); + + if (!category) { + return next( + new ErrorResponse( + `Category with id of ${req.params.id} was not found`, + 404 + ) + ); + } + + category.bookmarks.forEach(async (bookmark) => { + await Bookmark.destroy({ + where: { id: bookmark.id }, + }); + }); + + await Category.destroy({ + where: { id: req.params.id }, + }); + + res.status(200).json({ + success: true, + data: {}, + }); +}); + +module.exports = deleteCategory; diff --git a/controllers/categories/getAllCategories.js b/controllers/categories/getAllCategories.js new file mode 100644 index 0000000..597bfcc --- /dev/null +++ b/controllers/categories/getAllCategories.js @@ -0,0 +1,43 @@ +const asyncWrapper = require('../../middleware/asyncWrapper'); +const Category = require('../../models/Category'); +const Bookmark = require('../../models/Bookmark'); +const { Sequelize } = require('sequelize'); +const loadConfig = require('../../utils/loadConfig'); + +// @desc Get all categories +// @route GET /api/categories +// @access Public +const getAllCategories = asyncWrapper(async (req, res, next) => { + const { useOrdering: orderType } = await loadConfig(); + + let categories; + + if (orderType == 'name') { + categories = await Category.findAll({ + include: [ + { + model: Bookmark, + as: 'bookmarks', + }, + ], + order: [[Sequelize.fn('lower', Sequelize.col('Category.name')), 'ASC']], + }); + } else { + categories = await Category.findAll({ + include: [ + { + model: Bookmark, + as: 'bookmarks', + }, + ], + order: [[orderType, 'ASC']], + }); + } + + res.status(200).json({ + success: true, + data: categories, + }); +}); + +module.exports = getAllCategories; diff --git a/controllers/categories/getSingleCategory.js b/controllers/categories/getSingleCategory.js new file mode 100644 index 0000000..084362b --- /dev/null +++ b/controllers/categories/getSingleCategory.js @@ -0,0 +1,35 @@ +const asyncWrapper = require('../../middleware/asyncWrapper'); +const ErrorResponse = require('../../utils/ErrorResponse'); +const Category = require('../../models/Category'); +const Bookmark = require('../../models/Bookmark'); + +// @desc Get single category +// @route GET /api/categories/:id +// @access Public +const getSingleCategory = asyncWrapper(async (req, res, next) => { + const category = await Category.findOne({ + where: { id: req.params.id }, + include: [ + { + model: Bookmark, + as: 'bookmarks', + }, + ], + }); + + if (!category) { + return next( + new ErrorResponse( + `Category with id of ${req.params.id} was not found`, + 404 + ) + ); + } + + res.status(200).json({ + success: true, + data: category, + }); +}); + +module.exports = getSingleCategory; diff --git a/controllers/categories/index.js b/controllers/categories/index.js new file mode 100644 index 0000000..8b3c179 --- /dev/null +++ b/controllers/categories/index.js @@ -0,0 +1,8 @@ +module.exports = { + createCategory: require('./createCategory'), + getAllCategories: require('./getAllCategories'), + getSingleCategory: require('./getSingleCategory'), + updateCategory: require('./updateCategory'), + deleteCategory: require('./deleteCategory'), + reorderCategories: require('./reorderCategories'), +}; diff --git a/controllers/categories/reorderCategories.js b/controllers/categories/reorderCategories.js new file mode 100644 index 0000000..492675b --- /dev/null +++ b/controllers/categories/reorderCategories.js @@ -0,0 +1,22 @@ +const asyncWrapper = require('../../middleware/asyncWrapper'); +const Category = require('../../models/Category'); +// @desc Reorder categories +// @route PUT /api/categories/0/reorder +// @access Public +const reorderCategories = asyncWrapper(async (req, res, next) => { + req.body.categories.forEach(async ({ id, orderId }) => { + await Category.update( + { orderId }, + { + where: { id }, + } + ); + }); + + res.status(200).json({ + success: true, + data: {}, + }); +}); + +module.exports = reorderCategories; diff --git a/controllers/categories/updateCategory.js b/controllers/categories/updateCategory.js new file mode 100644 index 0000000..cc43db6 --- /dev/null +++ b/controllers/categories/updateCategory.js @@ -0,0 +1,30 @@ +const asyncWrapper = require('../../middleware/asyncWrapper'); +const ErrorResponse = require('../../utils/ErrorResponse'); +const Category = require('../../models/Category'); + +// @desc Update category +// @route PUT /api/categories/:id +// @access Public +const updateCategory = asyncWrapper(async (req, res, next) => { + let category = await Category.findOne({ + where: { id: req.params.id }, + }); + + if (!category) { + return next( + new ErrorResponse( + `Category with id of ${req.params.id} was not found`, + 404 + ) + ); + } + + category = await category.update({ ...req.body }); + + res.status(200).json({ + success: true, + data: category, + }); +}); + +module.exports = updateCategory; diff --git a/controllers/category.js b/controllers/category.js deleted file mode 100644 index d10183f..0000000 --- a/controllers/category.js +++ /dev/null @@ -1,178 +0,0 @@ -const asyncWrapper = require('../middleware/asyncWrapper'); -const ErrorResponse = require('../utils/ErrorResponse'); -const Category = require('../models/Category'); -const Bookmark = require('../models/Bookmark'); -const Config = require('../models/Config'); -const { Sequelize } = require('sequelize'); -const loadConfig = require('../utils/loadConfig'); - -// @desc Create new category -// @route POST /api/categories -// @access Public -exports.createCategory = asyncWrapper(async (req, res, next) => { - const { pinCategoriesByDefault: pinCategories } = await loadConfig(); - - let category; - - if (pinCategories) { - category = await Category.create({ - ...req.body, - isPinned: true, - }); - } else { - category = await Category.create(req.body); - } - - res.status(201).json({ - success: true, - data: category, - }); -}); - -// @desc Get all categories -// @route GET /api/categories -// @access Public -exports.getCategories = asyncWrapper(async (req, res, next) => { - const { useOrdering: orderType } = await loadConfig(); - - let categories; - - if (orderType == 'name') { - categories = await Category.findAll({ - include: [ - { - model: Bookmark, - as: 'bookmarks', - }, - ], - order: [[Sequelize.fn('lower', Sequelize.col('Category.name')), 'ASC']], - }); - } else { - categories = await Category.findAll({ - include: [ - { - model: Bookmark, - as: 'bookmarks', - }, - ], - order: [[orderType, 'ASC']], - }); - } - - res.status(200).json({ - success: true, - data: categories, - }); -}); - -// @desc Get single category -// @route GET /api/categories/:id -// @access Public -exports.getCategory = asyncWrapper(async (req, res, next) => { - const category = await Category.findOne({ - where: { id: req.params.id }, - include: [ - { - model: Bookmark, - as: 'bookmarks', - }, - ], - }); - - if (!category) { - return next( - new ErrorResponse( - `Category with id of ${req.params.id} was not found`, - 404 - ) - ); - } - - res.status(200).json({ - success: true, - data: category, - }); -}); - -// @desc Update category -// @route PUT /api/categories/:id -// @access Public -exports.updateCategory = asyncWrapper(async (req, res, next) => { - let category = await Category.findOne({ - where: { id: req.params.id }, - }); - - if (!category) { - return next( - new ErrorResponse( - `Category with id of ${req.params.id} was not found`, - 404 - ) - ); - } - - category = await category.update({ ...req.body }); - - res.status(200).json({ - success: true, - data: category, - }); -}); - -// @desc Delete category -// @route DELETE /api/categories/:id -// @access Public -exports.deleteCategory = asyncWrapper(async (req, res, next) => { - const category = await Category.findOne({ - where: { id: req.params.id }, - include: [ - { - model: Bookmark, - as: 'bookmarks', - }, - ], - }); - - if (!category) { - return next( - new ErrorResponse( - `Category with id of ${req.params.id} was not found`, - 404 - ) - ); - } - - category.bookmarks.forEach(async (bookmark) => { - await Bookmark.destroy({ - where: { id: bookmark.id }, - }); - }); - - await Category.destroy({ - where: { id: req.params.id }, - }); - - res.status(200).json({ - success: true, - data: {}, - }); -}); - -// @desc Reorder categories -// @route PUT /api/categories/0/reorder -// @access Public -exports.reorderCategories = asyncWrapper(async (req, res, next) => { - req.body.categories.forEach(async ({ id, orderId }) => { - await Category.update( - { orderId }, - { - where: { id }, - } - ); - }); - - res.status(200).json({ - success: true, - data: {}, - }); -}); diff --git a/controllers/queries/addQuery.js b/controllers/queries/addQuery.js new file mode 100644 index 0000000..cd61c67 --- /dev/null +++ b/controllers/queries/addQuery.js @@ -0,0 +1,21 @@ +const asyncWrapper = require('../../middleware/asyncWrapper'); +const File = require('../../utils/File'); + +// @desc Add custom search query +// @route POST /api/queries +// @access Public +const addQuery = asyncWrapper(async (req, res, next) => { + const file = new File('data/customQueries.json'); + let content = JSON.parse(file.read()); + + // Add new query + content.queries.push(req.body); + file.write(content, true); + + res.status(201).json({ + success: true, + data: req.body, + }); +}); + +module.exports = addQuery; diff --git a/controllers/queries/deleteQuery.js b/controllers/queries/deleteQuery.js new file mode 100644 index 0000000..1a30041 --- /dev/null +++ b/controllers/queries/deleteQuery.js @@ -0,0 +1,22 @@ +const asyncWrapper = require('../../middleware/asyncWrapper'); +const File = require('../../utils/File'); + +// @desc Delete query +// @route DELETE /api/queries/:prefix +// @access Public +const deleteQuery = asyncWrapper(async (req, res, next) => { + const file = new File('data/customQueries.json'); + let content = JSON.parse(file.read()); + + content.queries = content.queries.filter( + (q) => q.prefix != req.params.prefix + ); + file.write(content, true); + + res.status(200).json({ + success: true, + data: content.queries, + }); +}); + +module.exports = deleteQuery; diff --git a/controllers/queries/getQueries.js b/controllers/queries/getQueries.js new file mode 100644 index 0000000..6299473 --- /dev/null +++ b/controllers/queries/getQueries.js @@ -0,0 +1,17 @@ +const asyncWrapper = require('../../middleware/asyncWrapper'); +const File = require('../../utils/File'); + +// @desc Get custom queries file +// @route GET /api/queries +// @access Public +const getQueries = asyncWrapper(async (req, res, next) => { + const file = new File('data/customQueries.json'); + const content = JSON.parse(file.read()); + + res.status(200).json({ + success: true, + data: content.queries, + }); +}); + +module.exports = getQueries; diff --git a/controllers/queries/index.js b/controllers/queries/index.js index ae1ccec..3d5d036 100644 --- a/controllers/queries/index.js +++ b/controllers/queries/index.js @@ -1,81 +1,6 @@ -const asyncWrapper = require('../../middleware/asyncWrapper'); -const File = require('../../utils/File'); -const { join } = require('path'); - -const QUERIES_PATH = join(__dirname, '../../data/customQueries.json'); - -// @desc Add custom search query -// @route POST /api/queries -// @access Public -exports.addQuery = asyncWrapper(async (req, res, next) => { - const file = new File(QUERIES_PATH); - let content = JSON.parse(file.read()); - - // Add new query - content.queries.push(req.body); - file.write(content, true); - - res.status(201).json({ - success: true, - data: req.body, - }); -}); - -// @desc Get custom queries file -// @route GET /api/queries -// @access Public -exports.getQueries = asyncWrapper(async (req, res, next) => { - const file = new File(QUERIES_PATH); - const content = JSON.parse(file.read()); - - res.status(200).json({ - success: true, - data: content.queries, - }); -}); - -// @desc Update query -// @route PUT /api/queries/:prefix -// @access Public -exports.updateQuery = asyncWrapper(async (req, res, next) => { - const file = new File(QUERIES_PATH); - let content = JSON.parse(file.read()); - - let queryIdx = content.queries.findIndex( - (q) => q.prefix == req.params.prefix - ); - - // query found - if (queryIdx > -1) { - content.queries = [ - ...content.queries.slice(0, queryIdx), - req.body, - ...content.queries.slice(queryIdx + 1), - ]; - } - - file.write(content, true); - - res.status(200).json({ - success: true, - data: content.queries, - }); -}); - -// @desc Delete query -// @route DELETE /api/queries/:prefix -// @access Public -exports.deleteQuery = asyncWrapper(async (req, res, next) => { - const file = new File(QUERIES_PATH); - let content = JSON.parse(file.read()); - - content.queries = content.queries.filter( - (q) => q.prefix != req.params.prefix - ); - file.write(content, true); - - res.status(200).json({ - success: true, - data: content.queries, - }); -}); +module.exports = { + addQuery: require('./addQuery'), + getQueries: require('./getQueries'), + updateQuery: require('./updateQuery'), + deleteQuery: require('./deleteQuery'), +}; diff --git a/controllers/queries/updateQuery.js b/controllers/queries/updateQuery.js new file mode 100644 index 0000000..a95b71a --- /dev/null +++ b/controllers/queries/updateQuery.js @@ -0,0 +1,32 @@ +const asyncWrapper = require('../../middleware/asyncWrapper'); +const File = require('../../utils/File'); + +// @desc Update query +// @route PUT /api/queries/:prefix +// @access Public +const updateQuery = asyncWrapper(async (req, res, next) => { + const file = new File('data/customQueries.json'); + let content = JSON.parse(file.read()); + + let queryIdx = content.queries.findIndex( + (q) => q.prefix == req.params.prefix + ); + + // query found + if (queryIdx > -1) { + content.queries = [ + ...content.queries.slice(0, queryIdx), + req.body, + ...content.queries.slice(queryIdx + 1), + ]; + } + + file.write(content, true); + + res.status(200).json({ + success: true, + data: content.queries, + }); +}); + +module.exports = updateQuery; diff --git a/controllers/weather.js b/controllers/weather.js deleted file mode 100644 index 3acd1ad..0000000 --- a/controllers/weather.js +++ /dev/null @@ -1,31 +0,0 @@ -const asyncWrapper = require('../middleware/asyncWrapper'); -const ErrorResponse = require('../utils/ErrorResponse'); -const Weather = require('../models/Weather'); -const getExternalWeather = require('../utils/getExternalWeather'); - -// @desc Get latest weather status -// @route GET /api/weather -// @access Public -exports.getWeather = asyncWrapper(async (req, res, next) => { - const weather = await Weather.findAll({ - order: [['createdAt', 'DESC']], - limit: 1, - }); - - res.status(200).json({ - success: true, - data: weather, - }); -}); - -// @desc Update weather -// @route GET /api/weather/update -// @access Public -exports.updateWeather = asyncWrapper(async (req, res, next) => { - const weather = await getExternalWeather(); - - res.status(200).json({ - success: true, - data: weather, - }); -}); diff --git a/controllers/weather/getWather.js b/controllers/weather/getWather.js new file mode 100644 index 0000000..44e6e3f --- /dev/null +++ b/controllers/weather/getWather.js @@ -0,0 +1,19 @@ +const asyncWrapper = require('../../middleware/asyncWrapper'); +const Weather = require('../../models/Weather'); + +// @desc Get latest weather status +// @route GET /api/weather +// @access Public +const getWeather = asyncWrapper(async (req, res, next) => { + const weather = await Weather.findAll({ + order: [['createdAt', 'DESC']], + limit: 1, + }); + + res.status(200).json({ + success: true, + data: weather, + }); +}); + +module.exports = getWeather; diff --git a/controllers/weather/index.js b/controllers/weather/index.js new file mode 100644 index 0000000..8c7231d --- /dev/null +++ b/controllers/weather/index.js @@ -0,0 +1,4 @@ +module.exports = { + getWeather: require('./getWather'), + updateWeather: require('./updateWeather'), +}; diff --git a/controllers/weather/updateWeather.js b/controllers/weather/updateWeather.js new file mode 100644 index 0000000..c66417e --- /dev/null +++ b/controllers/weather/updateWeather.js @@ -0,0 +1,16 @@ +const asyncWrapper = require('../../middleware/asyncWrapper'); +const getExternalWeather = require('../../utils/getExternalWeather'); + +// @desc Update weather +// @route GET /api/weather/update +// @access Public +const updateWeather = asyncWrapper(async (req, res, next) => { + const weather = await getExternalWeather(); + + res.status(200).json({ + success: true, + data: weather, + }); +}); + +module.exports = updateWeather; diff --git a/routes/category.js b/routes/category.js index 64067d7..b7527c8 100644 --- a/routes/category.js +++ b/routes/category.js @@ -3,26 +3,21 @@ const router = express.Router(); const { createCategory, - getCategories, - getCategory, + getAllCategories, + getSingleCategory, updateCategory, deleteCategory, - reorderCategories -} = require('../controllers/category'); + reorderCategories, +} = require('../controllers/categories'); -router - .route('/') - .post(createCategory) - .get(getCategories); +router.route('/').post(createCategory).get(getAllCategories); router .route('/:id') - .get(getCategory) + .get(getSingleCategory) .put(updateCategory) .delete(deleteCategory); -router - .route('/0/reorder') - .put(reorderCategories); +router.route('/0/reorder').put(reorderCategories); -module.exports = router; \ No newline at end of file +module.exports = router; diff --git a/utils/clearWeatherData.js b/utils/clearWeatherData.js index 07be15b..5e4972a 100644 --- a/utils/clearWeatherData.js +++ b/utils/clearWeatherData.js @@ -2,23 +2,28 @@ const { Op } = require('sequelize'); const Weather = require('../models/Weather'); const Logger = require('./Logger'); const logger = new Logger(); +const loadConfig = require('./loadConfig'); const clearWeatherData = async () => { + const { WEATHER_API_KEY: secret } = await loadConfig(); + const weather = await Weather.findOne({ - order: [[ 'createdAt', 'DESC' ]] + order: [['createdAt', 'DESC']], }); if (weather) { await Weather.destroy({ where: { id: { - [Op.lt]: weather.id - } - } - }) + [Op.lt]: weather.id, + }, + }, + }); } - logger.log('Old weather data was deleted'); -} + if (secret) { + logger.log('Old weather data was deleted'); + } +}; -module.exports = clearWeatherData; \ No newline at end of file +module.exports = clearWeatherData; From 4e205278341967dc7823d2e15c33c92cddae8408 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pawe=C5=82=20Malak?= Date: Fri, 5 Nov 2021 15:05:33 +0100 Subject: [PATCH 088/196] Added new themes --- client/src/components/Themer/themes.json | 26 +++++++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) diff --git a/client/src/components/Themer/themes.json b/client/src/components/Themer/themes.json index 812191f..f3b12bd 100644 --- a/client/src/components/Themer/themes.json +++ b/client/src/components/Themer/themes.json @@ -95,6 +95,30 @@ "primary": "#4C432E", "accent": "#AA9A73" } + }, + { + "name": "neon", + "colors": { + "background": "#091833", + "primary": "#EFFBFF", + "accent": "#ea00d9" + } + }, + { + "name": "pumpkin", + "colors": { + "background": "#2d3436", + "primary": "#EFFBFF", + "accent": "#ffa500" + } + }, + { + "name": "onedark", + "colors": { + "background": "#282c34", + "primary": "#dfd9d6", + "accent": "#98c379" + } } ] -} \ No newline at end of file +} From aca8b0261e28d3be56185220415ce3fe0ca788dc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pawe=C5=82=20Malak?= Date: Fri, 5 Nov 2021 16:39:42 +0100 Subject: [PATCH 089/196] Added option to set custom greetings. Moved HomeHeader to separate file. Cleaned up README file --- CHANGELOG.md | 2 + README.md | 57 +++++++------------ .../components/Home/Header/Header.module.css | 31 ++++++++++ client/src/components/Home/Header/Header.tsx | 49 ++++++++++++++++ .../functions/getDateTime.ts} | 2 +- .../Home/Header/functions/greeter.ts | 17 ++++++ client/src/components/Home/Home.module.css | 32 +---------- client/src/components/Home/Home.tsx | 43 +------------- .../src/components/Home/functions/greeter.ts | 12 ---- .../Settings/OtherSettings/OtherSettings.tsx | 15 +++++ client/src/interfaces/Config.ts | 1 + client/src/interfaces/Forms.ts | 1 + client/src/store/actions/config.ts | 2 + .../utility/templateObjects/configTemplate.ts | 1 + .../templateObjects/settingsTemplate.ts | 1 + utils/ErrorResponse.js | 4 +- utils/init/initialConfig.json | 3 +- 17 files changed, 149 insertions(+), 124 deletions(-) create mode 100644 client/src/components/Home/Header/Header.module.css create mode 100644 client/src/components/Home/Header/Header.tsx rename client/src/components/Home/{functions/dateTime.ts => Header/functions/getDateTime.ts} (94%) create mode 100644 client/src/components/Home/Header/functions/greeter.ts delete mode 100644 client/src/components/Home/functions/greeter.ts diff --git a/CHANGELOG.md b/CHANGELOG.md index afd7297..1011cad 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,7 @@ ### v1.7.4 (TBA) +- [WIP] Added option to set custom greetings and date ([#103](https://github.com/pawelmalak/flame/issues/103)) - Added iOS "Add to homescreen" icon ([#131](https://github.com/pawelmalak/flame/issues/131)) +- Added 3 new themes ### v1.7.3 (2021-10-28) - Fixed bug with custom CSS not updating diff --git a/README.md b/README.md index e3fd2d7..0fcf509 100644 --- a/README.md +++ b/README.md @@ -1,15 +1,10 @@ # Flame -[![JS Badge](https://img.shields.io/badge/JavaScript-F7DF1E?style=for-the-badge&logo=javascript&logoColor=black)](https://shields.io/) -[![TS Badge](https://img.shields.io/badge/TypeScript-007ACC?style=for-the-badge&logo=typescript&logoColor=white)](https://shields.io/) -[![Node Badge](https://img.shields.io/badge/Node.js-43853D?style=for-the-badge&logo=node.js&logoColor=white)](https://shields.io/) -[![React Badge](https://img.shields.io/badge/React-20232A?style=for-the-badge&logo=react&logoColor=61DAFB)](https://shields.io/) - ![Homescreen screenshot](./.github/_home.png) ## Description -Flame is self-hosted startpage for your server. Its design is inspired (heavily) by [SUI](https://github.com/jeroenpardon/sui). Flame is very easy to setup and use. With built-in editors it allows you to setup your very own appliaction hub in no time - no file editing necessary. +Flame is self-hosted startpage for your server. Its design is inspired (heavily) by [SUI](https://github.com/jeroenpardon/sui). Flame is very easy to setup and use. With built-in editors it allows you to setup your very own application hub in no time - no file editing necessary. ## Technology @@ -42,7 +37,15 @@ npm run dev ### With Docker (recommended) -[Docker Hub](https://hub.docker.com/r/pawelmalak/flame) +[Docker Hub link](https://hub.docker.com/r/pawelmalak/flame) + +```sh +docker pull pawelmalak/flame:latest + +# for ARM architecture (e.g. RaspberryPi) +docker pull pawelmalak/flame:multiarch +``` + #### Building images @@ -96,13 +99,13 @@ Follow instructions from wiki: [Installation without Docker](https://github.com/ - Applications - Create, update, delete and organize applications using GUI - - Pin your favourite apps to homescreen + - Pin your favourite apps to the homescreen ![Homescreen screenshot](./.github/_apps.png) - Bookmarks - Create, update, delete and organize bookmarks and categories using GUI - - Pin your favourite categories to homescreen + - Pin your favourite categories to the homescreen ![Homescreen screenshot](./.github/_bookmarks.png) @@ -111,7 +114,7 @@ Follow instructions from wiki: [Installation without Docker](https://github.com/ - Get current temperature, cloud coverage and weather status with animated icons - Themes - - Customize your page by choosing from 12 color themes + - Customize your page by choosing from 15 color themes ![Homescreen screenshot](./.github/_themes.png) @@ -125,23 +128,7 @@ To use search bar you need to type your search query with selected prefix. For e > You can change where to open search results (same/new tab) in the settings -#### Supported search engines - -| Name | Prefix | Search URL | -| ---------- | ------ | ----------------------------------- | -| Disroot | /ds | http://search.disroot.org/search?q= | -| DuckDuckGo | /d | https://duckduckgo.com/?q= | -| Google | /g | https://www.google.com/search?q= | - -#### Supported services - -| Name | Prefix | Search URL | -| ------------------ | ------ | --------------------------------------------- | -| IMDb | /im | https://www.imdb.com/find?q= | -| Reddit | /r | https://www.reddit.com/search?q= | -| Spotify | /sp | https://open.spotify.com/search/ | -| The Movie Database | /mv | https://www.themoviedb.org/search?query= | -| Youtube | /yt | https://www.youtube.com/results?search_query= | +For list of supported search engines, shortcuts and more about searching functionality visit [project wiki](https://github.com/pawelmalak/flame/wiki/Search-bar). ### Setting up weather module @@ -159,13 +146,13 @@ labels: - flame.type=application # "app" works too - flame.name=My container - flame.url=https://example.com - - flame.icon=icon-name # Optional, default is "docker" + - flame.icon=icon-name # optional, default is "docker" # - flame.icon=custom to make changes in app. ie: custom icon upload ``` -And you must have activated the Docker sync option in the settings panel. +> "Use Docker API" option must be enabled for this to work. You can find it in Settings > Other > Docker section -You can set up different apps in the same label adding `;` between each one. +You can also set up different apps in the same label adding `;` between each one. ```yml labels: @@ -208,13 +195,11 @@ metadata: - flame.pawelmalak/type=application # "app" works too - flame.pawelmalak/name=My container - flame.pawelmalak/url=https://example.com - - flame.pawelmalak/icon=icon-name # Optional, default is "kubernetes" + - flame.pawelmalak/icon=icon-name # optional, default is "kubernetes" ``` -And you must have activated the Kubernetes sync option in the settings panel. +> "Use Kubernetes Ingress API" option must be enabled for this to work. You can find it in Settings > Other > Kubernetes section -### Custom CSS +### Custom CSS and themes -> This is an experimental feature. Its behaviour might change in the future. -> -> Follow instructions from wiki: [Custom CSS](https://github.com/pawelmalak/flame/wiki/Custom-CSS) \ No newline at end of file +See project wiki for [Custom CSS](https://github.com/pawelmalak/flame/wiki/Custom-CSS) and [Custom theme with CSS](https://github.com/pawelmalak/flame/wiki/Custom-theme-with-CSS). \ No newline at end of file diff --git a/client/src/components/Home/Header/Header.module.css b/client/src/components/Home/Header/Header.module.css new file mode 100644 index 0000000..d7ee22b --- /dev/null +++ b/client/src/components/Home/Header/Header.module.css @@ -0,0 +1,31 @@ +.Header h1 { + color: var(--color-primary); + font-weight: 700; + font-size: 4em; + display: inline-block; +} + +.Header p { + color: var(--color-primary); + font-weight: 300; + text-transform: uppercase; + height: 30px; +} + +.HeaderMain { + display: flex; + justify-content: space-between; + align-items: center; + margin-bottom: 2.5rem; +} + +.SettingsLink { + visibility: visible; + color: var(--color-accent); +} + +@media (min-width: 769px) { + .SettingsLink { + visibility: hidden; + } +} diff --git a/client/src/components/Home/Header/Header.tsx b/client/src/components/Home/Header/Header.tsx new file mode 100644 index 0000000..3b2841b --- /dev/null +++ b/client/src/components/Home/Header/Header.tsx @@ -0,0 +1,49 @@ +import { useEffect, useState } from 'react'; +import { connect } from 'react-redux'; +import { Link } from 'react-router-dom'; +import { Config, GlobalState } from '../../../interfaces'; +import WeatherWidget from '../../Widgets/WeatherWidget/WeatherWidget'; +import { getDateTime } from './functions/getDateTime'; +import { greeter } from './functions/greeter'; +import classes from './Header.module.css'; + +interface Props { + config: Config; +} + +const Header = (props: Props): JSX.Element => { + const [dateTime, setDateTime] = useState(getDateTime()); + const [greeting, setGreeting] = useState(greeter()); + + useEffect(() => { + let dateTimeInterval: NodeJS.Timeout; + + dateTimeInterval = setInterval(() => { + setDateTime(getDateTime()); + setGreeting(greeter()); + }, 1000); + + return () => window.clearInterval(dateTimeInterval); + }, []); + + return ( +

+

{dateTime}

+ + Go to Settings + + +

{greeting}

+ +
+
+ ); +}; + +const mapStateToProps = (state: GlobalState) => { + return { + config: state.config.config, + }; +}; + +export default connect(mapStateToProps)(Header); diff --git a/client/src/components/Home/functions/dateTime.ts b/client/src/components/Home/Header/functions/getDateTime.ts similarity index 94% rename from client/src/components/Home/functions/dateTime.ts rename to client/src/components/Home/Header/functions/getDateTime.ts index ddcfc70..9f1d601 100644 --- a/client/src/components/Home/functions/dateTime.ts +++ b/client/src/components/Home/Header/functions/getDateTime.ts @@ -1,4 +1,4 @@ -export const dateTime = (): string => { +export const getDateTime = (): string => { const days = [ 'Sunday', 'Monday', diff --git a/client/src/components/Home/Header/functions/greeter.ts b/client/src/components/Home/Header/functions/greeter.ts new file mode 100644 index 0000000..93b32b4 --- /dev/null +++ b/client/src/components/Home/Header/functions/greeter.ts @@ -0,0 +1,17 @@ +export const greeter = (): string => { + const now = new Date().getHours(); + let msg: string; + + const greetingsSchemaRaw = + localStorage.getItem('greetingsSchema') || + 'Good evening!;Good afternoon!;Good morning!;Good night!'; + const greetingsSchema = greetingsSchemaRaw.split(';'); + + if (now >= 18) msg = greetingsSchema[0]; + else if (now >= 12) msg = greetingsSchema[1]; + else if (now >= 6) msg = greetingsSchema[2]; + else if (now >= 0) msg = greetingsSchema[3]; + else msg = 'Hello!'; + + return msg; +}; diff --git a/client/src/components/Home/Home.module.css b/client/src/components/Home/Home.module.css index 652ca22..f425184 100644 --- a/client/src/components/Home/Home.module.css +++ b/client/src/components/Home/Home.module.css @@ -1,24 +1,3 @@ -.Header h1 { - color: var(--color-primary); - font-weight: 700; - font-size: 4em; - display: inline-block; -} - -.Header p { - color: var(--color-primary); - font-weight: 300; - text-transform: uppercase; - height: 30px; -} - -.HeaderMain { - display: flex; - justify-content: space-between; - align-items: center; - margin-bottom: 2.5rem; -} - .SettingsButton { width: 35px; height: 35px; @@ -40,21 +19,12 @@ opacity: 1; } -.SettingsLink { - visibility: visible; - color: var(--color-accent); -} - @media (min-width: 769px) { .SettingsButton { visibility: visible; } - - .SettingsLink { - visibility: hidden; - } } .HomeSpace { height: 20px; -} \ No newline at end of file +} diff --git a/client/src/components/Home/Home.tsx b/client/src/components/Home/Home.tsx index 4a0adbe..017df9c 100644 --- a/client/src/components/Home/Home.tsx +++ b/client/src/components/Home/Home.tsx @@ -21,12 +21,8 @@ import classes from './Home.module.css'; // Components import AppGrid from '../Apps/AppGrid/AppGrid'; import BookmarkGrid from '../Bookmarks/BookmarkGrid/BookmarkGrid'; -import WeatherWidget from '../Widgets/WeatherWidget/WeatherWidget'; import SearchBar from '../SearchBar/SearchBar'; - -// Functions -import { greeter } from './functions/greeter'; -import { dateTime } from './functions/dateTime'; +import Header from './Header/Header'; interface ComponentProps { getApps: Function; @@ -48,11 +44,6 @@ const Home = (props: ComponentProps): JSX.Element => { categoriesLoading, } = props; - const [header, setHeader] = useState({ - dateTime: dateTime(), - greeting: greeter(), - }); - // Local search query const [localSearch, setLocalSearch] = useState(null); const [appSearchResult, setAppSearchResult] = useState(null); @@ -74,23 +65,6 @@ const Home = (props: ComponentProps): JSX.Element => { } }, [getCategories]); - // Refresh greeter and time - useEffect(() => { - let interval: any; - - // Start interval only when hideHeader is false - if (!props.config.hideHeader) { - interval = setInterval(() => { - setHeader({ - dateTime: dateTime(), - greeting: greeter(), - }); - }, 1000); - } - - return () => clearInterval(interval); - }, []); - useEffect(() => { if (localSearch) { // Search through apps @@ -126,20 +100,7 @@ const Home = (props: ComponentProps): JSX.Element => {
)} - {!props.config.hideHeader ? ( -
-

{header.dateTime}

- - Go to Settings - - -

{header.greeting}

- -
-
- ) : ( -
- )} + {!props.config.hideHeader ?
:
} {!props.config.hideApps ? ( diff --git a/client/src/components/Home/functions/greeter.ts b/client/src/components/Home/functions/greeter.ts deleted file mode 100644 index 64cb2ea..0000000 --- a/client/src/components/Home/functions/greeter.ts +++ /dev/null @@ -1,12 +0,0 @@ -export const greeter = (): string => { - const now = new Date().getHours(); - let msg: string; - - if (now >= 18) msg = 'Good evening!'; - else if (now >= 12) msg = 'Good afternoon!'; - else if (now >= 6) msg = 'Good morning!'; - else if (now >= 0) msg = 'Good night!'; - else msg = 'Hello!'; - - return msg; -} \ No newline at end of file diff --git a/client/src/components/Settings/OtherSettings/OtherSettings.tsx b/client/src/components/Settings/OtherSettings/OtherSettings.tsx index 6610b65..b076735 100644 --- a/client/src/components/Settings/OtherSettings/OtherSettings.tsx +++ b/client/src/components/Settings/OtherSettings/OtherSettings.tsx @@ -187,6 +187,21 @@ const OtherSettings = (props: ComponentProps): JSX.Element => { + + + inputChangeHandler(e)} + /> + + Greetings must be separated with semicolon. Only 4 messages can be + used + + { onChange={(e) => inputChangeHandler(e)} /> + + {/* DATE FORMAT */} + + {/* PIN CATEGORIES */} + + {/* SORT TYPE */} + + {/* APPS OPPENING */} + + {/* BOOKMARKS OPPENING */} { + + {/* CUSTOM GREETINGS */} { used + + {/* CUSTOM DAYS */} + + + inputChangeHandler(e)} + /> + Names must be separated with semicolon + + + {/* CUSTOM MONTHS */} + + + inputChangeHandler(e)} + /> + Names must be separated with semicolon + + + {/* HIDE APPS */} + + {/* HIDE CATEGORIES */} { onChange={(e) => inputChangeHandler(e)} /> + + {/* USE DOCKER API */} + + {/* UNPIN DOCKER APPS */}