diff --git a/.env.example b/.env.example index e2662bccde..6e25fb2ee7 100644 --- a/.env.example +++ b/.env.example @@ -7,15 +7,6 @@ # @see https://github.com/rolodato/dotenv-safe for more details. # ------------------------------------------------------------------------------ -# Optional (for preview image support) -#GOOGLE_APPLICATION_CREDENTIALS= - -# Optional (for preview image support) -#GCLOUD_PROJECT= - -# Optional (for preview image support) -#FIREBASE_COLLECTION_IMAGES= - # Optional (for fathom analytics) #NEXT_PUBLIC_FATHOM_ID= diff --git a/.eslintrc b/.eslintrc deleted file mode 100644 index c8057adcf4..0000000000 --- a/.eslintrc +++ /dev/null @@ -1,38 +0,0 @@ -{ - "root": true, - "parserOptions": { - "ecmaVersion": 2020, - "ecmaFeatures": { - "legacyDecorators": true, - "jsx": true - } - }, - "settings": { - "react": { - "version": "detect" - } - }, - "ignorePatterns": ["**/*.js", "**/*.jsx"], - "parser": "@typescript-eslint/parser", - "plugins": ["@typescript-eslint"], - "extends": [ - "plugin:@typescript-eslint/recommended", - "standard", - "standard-react", - "plugin:prettier/recommended" - ], - "env": { "browser": true, "node": true }, - "rules": { - "@typescript-eslint/no-explicit-any": 0, - "@typescript-eslint/explicit-module-boundary-types": 0, - "no-use-before-define": 0, - "@typescript-eslint/no-use-before-define": 0, - "space-before-function-paren": 0, - "react/prop-types": 0, - "react/jsx-handler-names": 0, - "react/jsx-fragments": 0, - "react/no-unused-prop-types": 0, - "import/export": 0, - "standard/no-callback-literal": 0 - } -} diff --git a/.eslintrc.json b/.eslintrc.json new file mode 100644 index 0000000000..545d039632 --- /dev/null +++ b/.eslintrc.json @@ -0,0 +1,27 @@ +{ + "root": true, + "parser": "@typescript-eslint/parser", + "plugins": ["@typescript-eslint", "react", "react-hooks"], + "extends": [ + "eslint:recommended", + "plugin:@typescript-eslint/recommended", + "plugin:react/recommended", + "plugin:react-hooks/recommended", + "prettier" + ], + "settings": { + "react": { + "version": "detect" + } + }, + "env": { + "browser": true, + "node": true + }, + "rules": { + "@typescript-eslint/no-explicit-any": 0, + "@typescript-eslint/no-non-null-assertion": 0, + "@typescript-eslint/no-unused-vars": 2, + "react/prop-types": 0 + } +} diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index 8db044b549..0000000000 --- a/.travis.yml +++ /dev/null @@ -1,5 +0,0 @@ -language: node_js -cache: yarn -node_js: - - 12 - - 14 diff --git a/api/create-preview-image.ts b/api/create-preview-image.ts deleted file mode 100644 index 65579c2ce0..0000000000 --- a/api/create-preview-image.ts +++ /dev/null @@ -1,86 +0,0 @@ -import { NextApiRequest, NextApiResponse } from 'next' - -import got from 'got' -import lqip from 'lqip-modern' - -import { isPreviewImageSupportEnabled } from '../lib/config' -import * as types from '../lib/types' -import * as db from '../lib/db' - -export default async ( - req: NextApiRequest, - res: NextApiResponse -): Promise => { - if (req.method !== 'POST') { - return res.status(405).send({ error: 'method not allowed' }) - } - - if (!isPreviewImageSupportEnabled) { - return res.status(418).send({ - error: 'preview image support has been disabled for this deployment' - }) - } - - const { url, id } = req.body - - const result = await createPreviewImage(url, id) - - res.setHeader( - 'Cache-Control', - result.error - ? 'public, s-maxage=60, max-age=60, stale-while-revalidate=60' - : 'public, immutable, s-maxage=31536000, max-age=31536000, stale-while-revalidate=60' - ) - res.status(200).json(result) -} - -export async function createPreviewImage( - url: string, - id: string -): Promise { - console.log('createPreviewImage lambda', { url, id }) - const doc = db.images.doc(id) - - try { - const model = await doc.get() - if (model.exists) { - return model.data() as types.PreviewImage - } - - const { body } = await got(url, { responseType: 'buffer' }) - const result = await lqip(body) - console.log('lqip', result.metadata) - - const image = { - url, - originalWidth: result.metadata.originalWidth, - originalHeight: result.metadata.originalHeight, - width: result.metadata.width, - height: result.metadata.height, - type: result.metadata.type, - dataURIBase64: result.metadata.dataURIBase64 - } - - await doc.create(image) - return image - } catch (err) { - console.error('lqip error', err) - - try { - const error: any = { - url, - error: err.message || 'unknown error' - } - - if (err?.response?.statusCode) { - error.statusCode = err?.response?.statusCode - } - - await doc.create(error) - return error - } catch (err) { - // ignore errors - console.error(err) - } - } -} diff --git a/components/Footer.tsx b/components/Footer.tsx index 9c828aca17..7685b51d69 100644 --- a/components/Footer.tsx +++ b/components/Footer.tsx @@ -26,7 +26,7 @@ export const Footer: React.FC<{ return (