diff --git a/next-env.d.ts b/next-env.d.ts index 9bc3dd4..4f11a03 100644 --- a/next-env.d.ts +++ b/next-env.d.ts @@ -1,5 +1,4 @@ /// -/// /// // NOTE: This file should not be edited diff --git a/package.json b/package.json index 67e2d4c..cda5309 100644 --- a/package.json +++ b/package.json @@ -27,7 +27,7 @@ "fecha": "^4.2.1", "formik": "^2.2.9", "multer": "^1.4.2", - "next": "^12.0.4", + "next": "^12.0.7", "prisma": "^3.7.0", "react": "17.0.2", "react-color": "^2.19.3", diff --git a/server/index.js b/server/index.js index d2e9401..7a80312 100644 --- a/server/index.js +++ b/server/index.js @@ -86,25 +86,55 @@ function shouldUseYarn() { res.setHeader('Content-Type', mimetype); res.end(data); } else { - if (image) { - const data = await getFile(config.uploader.directory, image.file); - if (!data) return app.render404(req, res); + const data = await getFile(config.uploader.directory, image.file); + if (!data) return app.render404(req, res); - await prisma.image.update({ - where: { id: image.id }, - data: { views: { increment: 1 } }, - }); - res.setHeader('Content-Type', image.mimetype); - res.end(data); - } else { - const data = await getFile(config.uploader.directory, parts[2]); - if (!data) return app.render404(req, res); + await prisma.image.update({ + where: { id: image.id }, + data: { views: { increment: 1 } }, + }); + res.setHeader('Content-Type', image.mimetype); + res.end(data); + } + } else if (req.url.startsWith(config.uploader.route)) { + const parts = req.url.split('/'); + if (!parts[2] || parts[2] === '') return; + + let image = await prisma.image.findFirst({ + where: { + OR: [ + { file: parts[2] }, + { invisible:{ invis: decodeURI(parts[2]) } }, + ], + }, + select: { + mimetype: true, + id: true, + file: true, + invisible: true, + embed: true, + }, + }); + + if (!image) { + const data = await getFile(config.uploader.directory, parts[2]); + if (!data) return app.render404(req, res); - const mimetype = mimes[extname(parts[2])] ?? 'application/octet-stream'; - res.setHeader('Content-Type', mimetype); - res.end(data); - } + const mimetype = mimes[extname(parts[2])] ?? 'application/octet-stream'; + res.setHeader('Content-Type', mimetype); + res.end(data); + } else if (image.embed) { + handle(req, res); + } else { + const data = await getFile(config.uploader.directory, image.file); + if (!data) return app.render404(req, res); + await prisma.image.update({ + where: { id: image.id }, + data: { views: { increment: 1 } }, + }); + res.setHeader('Content-Type', image.mimetype); + res.end(data); } } else { handle(req, res); diff --git a/src/components/pages/Upload.tsx b/src/components/pages/Upload.tsx index 50b7274..c840473 100644 --- a/src/components/pages/Upload.tsx +++ b/src/components/pages/Upload.tsx @@ -1,4 +1,4 @@ -import React, { useState } from 'react'; +import React, { useEffect, useState } from 'react'; import { Typography, Button, CardActionArea, Paper, Box } from '@mui/material'; import { Upload as UploadIcon } from '@mui/icons-material'; import Dropzone from 'react-dropzone'; @@ -18,10 +18,19 @@ export default function Upload({ route }) { const [open, setOpen] = useState(false); const [severity, setSeverity] = useState('success'); const [message, setMessage] = useState('Saved'); + + useEffect(() => { + window.addEventListener('paste', (e: ClipboardEvent) => { + const item = Array.from(e.clipboardData.items).find(x => /^image/.test(x.type)); + const blob = item.getAsFile(); + setFiles([...files, new File([blob], blob.name, { type: blob.type })]); + }); + }); const handleUpload = async () => { const body = new FormData(); + for (let i = 0; i !== files.length; ++i) body.append('file', files[i]); setLoading(true); diff --git a/src/lib/config.ts b/src/lib/config.ts index a54937a..87a03fd 100644 --- a/src/lib/config.ts +++ b/src/lib/config.ts @@ -2,6 +2,6 @@ import type { Config } from './types'; import readConfig from './readConfig'; import validateConfig from '../../server/validateConfig'; -if (!global.config) global.config = validateConfig(readConfig()) as unknown as Config; +if (!global.config) global.config = validateConfig(readConfig()) as unknown as Config; export default global.config; \ No newline at end of file diff --git a/src/pages/[...id].tsx b/src/pages/[...id].tsx index fe55f5e..dab59fb 100644 --- a/src/pages/[...id].tsx +++ b/src/pages/[...id].tsx @@ -1,4 +1,4 @@ -import React, { useEffect, useRef, useState } from 'react'; +import React, { useEffect } from 'react'; import Head from 'next/head'; import { GetServerSideProps } from 'next'; import { Box } from '@mui/material'; @@ -57,7 +57,6 @@ export const getServerSideProps: GetServerSideProps = async (context) => { const route = context.params.id[0]; const routes = [config.uploader.route.substring(1), config.urls.route.substring(1)]; if (!routes.includes(route)) return { notFound: true }; - if (route === routes[1]) { const url = await prisma.url.findFirst({ where: { @@ -100,14 +99,6 @@ export const getServerSideProps: GetServerSideProps = async (context) => { }); if (!image) return { notFound: true }; - if (!image.embed) { - const data = await getFile(config.uploader.directory, id); - if (!data) return { notFound: true }; - - context.res.end(data); - return { props: {} }; - }; - const user = await prisma.user.findFirst({ select: { embedTitle: true, diff --git a/yarn.lock b/yarn.lock index 8314fd7..547ebd5 100644 --- a/yarn.lock +++ b/yarn.lock @@ -518,25 +518,25 @@ resolved "https://registry.npmjs.org/@napi-rs/triples/-/triples-1.0.3.tgz" integrity sha512-jDJTpta+P4p1NZTFVLHJ/TLFVYVcOqv6l8xwOeBKNPMgY/zDYH/YH7SJbvrr/h1RcS9GzbPcLKGzpuK9cV56UA== -"@next/env@12.0.4": - version "12.0.4" - resolved "https://registry.npmjs.org/@next/env/-/env-12.0.4.tgz" - integrity sha512-QtZ6X5c6Zqa7oWs5csEmZ7xy+gLdtRKKg02SOT5l0Ziea4P5IU8mSOCyNC4fZmXewcRVjpbY+yGqAAP7hJUfOA== +"@next/env@12.0.7": + version "12.0.7" + resolved "https://registry.yarnpkg.com/@next/env/-/env-12.0.7.tgz#316f7bd1b6b69f554d2676cfc91a16bc7e32ee79" + integrity sha512-TNDqBV37wd95SiNdZsSUq8gnnrTwr+aN9wqy4Zxrxw4bC/jCHNsbK94DxjkG99VL30VCRXXDBTA1/Wa2jIpF9Q== "@next/eslint-plugin-next@11.0.0": version "11.0.0" resolved "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-11.0.0.tgz" integrity sha512-fPZ0904yY1box6bRpR9rJqIkNxJdvzzxH7doXS+cdjyBAdptMR7wj3mcx1hEikBHzWduU8BOXBvRg2hWc09YDQ== -"@next/polyfill-module@12.0.4": - version "12.0.4" - resolved "https://registry.npmjs.org/@next/polyfill-module/-/polyfill-module-12.0.4.tgz" - integrity sha512-mk9yCDNpfXINTJKFTZNgwYs7eqRFpc5D/49O/fKB59blihyKl1GY1sZ0l7a2bn5l1X/WuaZzcIfqnrwkneqeaQ== +"@next/polyfill-module@12.0.7": + version "12.0.7" + resolved "https://registry.yarnpkg.com/@next/polyfill-module/-/polyfill-module-12.0.7.tgz#140e698557113cd3a3c0833f15ca8af1b608f2dc" + integrity sha512-sA8LAMMlmcspIZw/jeQuJTyA3uGrqOhTBaQE+G9u6DPohqrBFRkaz7RzzJeqXkUXw600occsIBknSjyVd1R67A== -"@next/react-dev-overlay@12.0.4": - version "12.0.4" - resolved "https://registry.npmjs.org/@next/react-dev-overlay/-/react-dev-overlay-12.0.4.tgz" - integrity sha512-9O0lXyzv5goFSmDwq9Hp8JE+DcObvd+bTXvmGSSvYR91AlIoVlH8/PwATx8Rf5YEuqggn/XKR1hn2kBYcbcGnA== +"@next/react-dev-overlay@12.0.7": + version "12.0.7" + resolved "https://registry.yarnpkg.com/@next/react-dev-overlay/-/react-dev-overlay-12.0.7.tgz#ae8f9bd14b1786e52330b729ff63061735d21c77" + integrity sha512-dSQLgpZ5uzyittFtIHlJCLAbc0LlMFbRBSYuGsIlrtGyjYN+WMcnz8lK48VLxNPFGuB/hEzkWV4TW5Zu75+Fzg== dependencies: "@babel/code-frame" "7.12.11" anser "1.4.9" @@ -550,65 +550,65 @@ stacktrace-parser "0.1.10" strip-ansi "6.0.1" -"@next/react-refresh-utils@12.0.4": - version "12.0.4" - resolved "https://registry.npmjs.org/@next/react-refresh-utils/-/react-refresh-utils-12.0.4.tgz" - integrity sha512-kNUDmpBaJ+8Lb8CtKNynRFF9oijCjUKKru6Ont+JKhti9//5dNFFIcuo607bJSH86un06OEK0TZUt5XWVlbkjw== +"@next/react-refresh-utils@12.0.7": + version "12.0.7" + resolved "https://registry.yarnpkg.com/@next/react-refresh-utils/-/react-refresh-utils-12.0.7.tgz#921c403798e188b4f1d9e609283c0e8d3e532f89" + integrity sha512-Pglj1t+7RxH0txEqVcD8ZxrJgqLDmKvQDqxKq3ZPRWxMv7LTl7FVT2Pnb36QFeBwCvMVl67jxsADKsW0idz8sA== -"@next/swc-android-arm64@12.0.4": - version "12.0.4" - resolved "https://registry.yarnpkg.com/@next/swc-android-arm64/-/swc-android-arm64-12.0.4.tgz#e3ad69d3aadbd1d3ff0768b4f02b66c3806aa6b2" - integrity sha512-6mXumia8ZPcy7bYu9kjItfWxrE6SFaJyqQDaFy9G9WrU9x3M1R1Yok8B2X1mboM8itD0tq+t3R/ebQEkkmevUw== +"@next/swc-android-arm64@12.0.7": + version "12.0.7" + resolved "https://registry.yarnpkg.com/@next/swc-android-arm64/-/swc-android-arm64-12.0.7.tgz#9b0a9e4bc646a045eef725764112096f0a6ea204" + integrity sha512-yViT7EEc7JqxncRT+ZTeTsrAYXLlcefo0Y0eAfYmmalGD2605L4FWAVrJi4WnrSLji7l+veczw1WBmNeHICKKA== -"@next/swc-darwin-arm64@12.0.4": - version "12.0.4" - resolved "https://registry.yarnpkg.com/@next/swc-darwin-arm64/-/swc-darwin-arm64-12.0.4.tgz#bc083ed3ad5e6971d2f374f38a7d8f3c46a6de0a" - integrity sha512-7WMen1qhF5JmjKD9S5IEgEoaPJOXyIZj/Nsqa8ZSWxdF5oogp3uYYbKb/rvMYoKzpIbjyoLH/OCM5lm5IFM4iw== +"@next/swc-darwin-arm64@12.0.7": + version "12.0.7" + resolved "https://registry.yarnpkg.com/@next/swc-darwin-arm64/-/swc-darwin-arm64-12.0.7.tgz#2fd506dba91e4a35036b9fc7930a4d6b8895f16a" + integrity sha512-vhAyW2rDEUcQesRVaj0z1hSoz7QhDzzGd0V1/5/5i9YJOfOtyrPsVJ82tlf7BfXl6/Ep+eKNfWVIb5/Jv89EKg== -"@next/swc-darwin-x64@12.0.4": - version "12.0.4" - resolved "https://registry.yarnpkg.com/@next/swc-darwin-x64/-/swc-darwin-x64-12.0.4.tgz#84855d4c9fef3b3a094c0f2424ae2b7e6dc29caa" - integrity sha512-PVgefMWjxP6CU1HQs39+Bfpjcue6qErJfvJ/+n2zimjLzyeQAmD6LM9f1lDSttW2LjKjasoxR5qkRNLVlqzlaA== +"@next/swc-darwin-x64@12.0.7": + version "12.0.7" + resolved "https://registry.yarnpkg.com/@next/swc-darwin-x64/-/swc-darwin-x64-12.0.7.tgz#b3016503caa5ed5cc6a20051517d5b2a79cfdc58" + integrity sha512-km+6Rx6TvbraoQ1f0MXa69ol/x0RxzucFGa2OgZaYJERas0spy0iwW8hpASsGcf597D8VRW1x+R2C7ZdjVBSTw== -"@next/swc-linux-arm-gnueabihf@12.0.4": - version "12.0.4" - resolved "https://registry.yarnpkg.com/@next/swc-linux-arm-gnueabihf/-/swc-linux-arm-gnueabihf-12.0.4.tgz#090156c4fc88d86ebc67df35e99daa97ddb232de" - integrity sha512-8xGQu3sJiIdriKiCux3jDJ9pwivELEg7z2zfW0CqmQMbKNB7qP9lc0pq6CxshtKyXRMczNWRMtQ3Cjwep+UvNg== +"@next/swc-linux-arm-gnueabihf@12.0.7": + version "12.0.7" + resolved "https://registry.yarnpkg.com/@next/swc-linux-arm-gnueabihf/-/swc-linux-arm-gnueabihf-12.0.7.tgz#8e91ecddc2d6d26946949a67d481110db3063d09" + integrity sha512-d0zWr877YqZ2cf/DQy6obouaR39r0FPebcXj2nws9AC99m68CO2xVpWv9jT7mFvpY+T40HJisLH80jSZ2iQ9sA== -"@next/swc-linux-arm64-gnu@12.0.4": - version "12.0.4" - resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-12.0.4.tgz#3ddda6eb703eda411b117d1974f08e028bb987ed" - integrity sha512-HhEWcBkqGr3E7SYLtN9VnYUGamAWaLcXawHN33Em0WP7gzXrBqz0iIJNH7uEzHDS6980EqU/rrkLyhCHrYSZgQ== +"@next/swc-linux-arm64-gnu@12.0.7": + version "12.0.7" + resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-12.0.7.tgz#1eefcf7b063610315b74e5c7dc24c3437370e49d" + integrity sha512-fdobh5u6gG13Gd5LkHhJ+W8tF9hbaFolRW99FhzArMe5/nMKlLdBymOxvitE3K4gSFQxbXJA6TbU0Vv0e59Kww== -"@next/swc-linux-arm64-musl@12.0.4": - version "12.0.4" - resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-12.0.4.tgz#a17985b811166bb3598816009e5f025539827c21" - integrity sha512-oZyQ9wjtE7OX9RlnovP7izNx2AR/RzTuYWU4Ttim8ssABsipQSxSlfRaeb+Qi6jTc6k+lrPhjRfaZ+fGv/m2Ag== +"@next/swc-linux-arm64-musl@12.0.7": + version "12.0.7" + resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-12.0.7.tgz#e9e764519dfb75e43355c442181346cd6e72459b" + integrity sha512-vx0c5Q3oIScFNT/4jI9rCe0yPzKuCqWOkiO/OOV0ixSI2gLhbrwDIcdkm79fKVn3i8JOJunxE4zDoFeR/g8xqQ== -"@next/swc-linux-x64-gnu@12.0.4": - version "12.0.4" - resolved "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-12.0.4.tgz" - integrity sha512-aBuf78QzL93T59Lk9kEGfHcA+9SzYIH7dGon1nqVxtAd2iqicKYNVaVcb38VKeiIBXMSUHXTdu6Ee053ZCOmSw== +"@next/swc-linux-x64-gnu@12.0.7": + version "12.0.7" + resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-12.0.7.tgz#fef02e14ed8f9c114479dabba1475ae2d3bb040d" + integrity sha512-9ITyp6s6uGVKNx3C/GP7GrYycbcwTADG7TdIXzXUxOOZORrdB1GNg3w/EL3Am4VMPPEpO6v1RfKo2IKZpVKfTA== -"@next/swc-linux-x64-musl@12.0.4": - version "12.0.4" - resolved "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-12.0.4.tgz" - integrity sha512-yDgqUqL4H8M3Y0hv30ZyL9UvjnK4iXmD4I6iJz+XIHSRdA/VUiyKKoL7okf9hxr0mSxBtagbZ5A3qEoW/VliUQ== +"@next/swc-linux-x64-musl@12.0.7": + version "12.0.7" + resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-12.0.7.tgz#07dc334b1924d9f5a8c4a891b91562af19ff5de4" + integrity sha512-C+k+cygbIZXYfc+Hx2fNPUBEg7jzio+mniP5ywZevuTXW14zodIfQ3ZMoMJR8EpOVvYpjWFk2uAjiwqgx8vo/g== -"@next/swc-win32-arm64-msvc@12.0.4": - version "12.0.4" - resolved "https://registry.yarnpkg.com/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-12.0.4.tgz#17705a3d20b35fddd2f61c4d2e491bbf6909e71a" - integrity sha512-evDUrEYsUo+PMHsedaymfZO98VwV9wNFzuWVCyKgqg6SD1ZRpzbpqYQY7aINIuqZVdIWZElBE6EM+oxaj7PuWQ== +"@next/swc-win32-arm64-msvc@12.0.7": + version "12.0.7" + resolved "https://registry.yarnpkg.com/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-12.0.7.tgz#6c559d87ce142693173039a18b1c1d65519762dd" + integrity sha512-7jTRjOKkDVnb5s7VoHT7eX+eyT/5BQJ/ljP2G56riAgKGqPL63/V7FXemLhhLT67D+OjoP8DRA2E2ne6IPHk4w== -"@next/swc-win32-ia32-msvc@12.0.4": - version "12.0.4" - resolved "https://registry.yarnpkg.com/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-12.0.4.tgz#a2a6d5c09a07c62d3a6b5b6dbc4443b566b8385b" - integrity sha512-Lbmz0xlo8vW4EDWyzCfy3nGfqt7skqwxaERwe+vDVTBZ56mvJ5dsdyjqK24sxu4FFkWR7SaU4eNlHwZR+A3kTg== +"@next/swc-win32-ia32-msvc@12.0.7": + version "12.0.7" + resolved "https://registry.yarnpkg.com/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-12.0.7.tgz#16b23f2301b16877b3623f0e8364e8177e2ef7db" + integrity sha512-2u5pGDsk7H6gGxob2ATIojzlwKzgYsrijo7RRpXOiPePVqwPWg6/pmhaJzLdpfjaBgRg1NFmwSp/7Ump9X8Ijg== -"@next/swc-win32-x64-msvc@12.0.4": - version "12.0.4" - resolved "https://registry.yarnpkg.com/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-12.0.4.tgz#acb9ffb17118b797d8c76dd688dd0aec5fa65cd4" - integrity sha512-f+7WNIJOno5QEelrmob+3vN5EZJb3KCkOrnvUsQ0+LCCD0dIPIhCjeHAh3BGj9msGu8ijnXvD7JxVxE5V26cnQ== +"@next/swc-win32-x64-msvc@12.0.7": + version "12.0.7" + resolved "https://registry.yarnpkg.com/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-12.0.7.tgz#8d75d3b6a872ab97ab73e3b4173d56dbb2991917" + integrity sha512-frEWtbf+q8Oz4e2UqKJrNssk6DZ6/NLCQXn5/ORWE9dPAfe9XS6aK5FRZ6DuEPmmKd5gOoRkKJFFz5nYd+TeyQ== "@nodelib/fs.scandir@2.1.5": version "2.1.5" @@ -3830,18 +3830,18 @@ natural-compare@^1.4.0: resolved "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz" integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= -next@^12.0.4: - version "12.0.4" - resolved "https://registry.npmjs.org/next/-/next-12.0.4.tgz" - integrity sha512-1pvjcSZBm5OLoGmDhp4JwKwIE798WbqUNLuyU7w6a2jUkdWaxOYtkE/ROXQTi2pXHj7+6rm68AvhxROLX2NHQg== +next@^12.0.7: + version "12.0.7" + resolved "https://registry.yarnpkg.com/next/-/next-12.0.7.tgz#33ebf229b81b06e583ab5ae7613cffe1ca2103fc" + integrity sha512-sKO8GJJYfuk9c+q+zHSNumvff+wP7ufmOlwT6BuzwiYfFJ61VTTkfTcDLSJ+95ErQJiC54uS4Yg5JEE8H6jXRA== dependencies: "@babel/runtime" "7.15.4" "@hapi/accept" "5.0.2" "@napi-rs/triples" "1.0.3" - "@next/env" "12.0.4" - "@next/polyfill-module" "12.0.4" - "@next/react-dev-overlay" "12.0.4" - "@next/react-refresh-utils" "12.0.4" + "@next/env" "12.0.7" + "@next/polyfill-module" "12.0.7" + "@next/react-dev-overlay" "12.0.7" + "@next/react-refresh-utils" "12.0.7" acorn "8.5.0" assert "2.0.0" browserify-zlib "0.2.0" @@ -3883,19 +3883,19 @@ next@^12.0.4: use-subscription "1.5.1" util "0.12.4" vm-browserify "1.1.2" - watchpack "2.1.1" + watchpack "2.3.0" optionalDependencies: - "@next/swc-android-arm64" "12.0.4" - "@next/swc-darwin-arm64" "12.0.4" - "@next/swc-darwin-x64" "12.0.4" - "@next/swc-linux-arm-gnueabihf" "12.0.4" - "@next/swc-linux-arm64-gnu" "12.0.4" - "@next/swc-linux-arm64-musl" "12.0.4" - "@next/swc-linux-x64-gnu" "12.0.4" - "@next/swc-linux-x64-musl" "12.0.4" - "@next/swc-win32-arm64-msvc" "12.0.4" - "@next/swc-win32-ia32-msvc" "12.0.4" - "@next/swc-win32-x64-msvc" "12.0.4" + "@next/swc-android-arm64" "12.0.7" + "@next/swc-darwin-arm64" "12.0.7" + "@next/swc-darwin-x64" "12.0.7" + "@next/swc-linux-arm-gnueabihf" "12.0.7" + "@next/swc-linux-arm64-gnu" "12.0.7" + "@next/swc-linux-arm64-musl" "12.0.7" + "@next/swc-linux-x64-gnu" "12.0.7" + "@next/swc-linux-x64-musl" "12.0.7" + "@next/swc-win32-arm64-msvc" "12.0.7" + "@next/swc-win32-ia32-msvc" "12.0.7" + "@next/swc-win32-x64-msvc" "12.0.7" nice-try@^1.0.4: version "1.0.5" @@ -5680,10 +5680,10 @@ vm-browserify@1.1.2: resolved "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz" integrity sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ== -watchpack@2.1.1: - version "2.1.1" - resolved "https://registry.npmjs.org/watchpack/-/watchpack-2.1.1.tgz" - integrity sha512-Oo7LXCmc1eE1AjyuSBmtC3+Wy4HcV8PxWh2kP6fOl8yTlNS7r0K9l1ao2lrrUza7V39Y3D/BbJgY8VeSlc5JKw== +watchpack@2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-2.3.0.tgz#a41bca3da6afaff31e92a433f4c856a0c25ea0c4" + integrity sha512-MnN0Q1OsvB/GGHETrFeZPQaOelWh/7O+EiFlj8sM9GPjtQkis7k01aAxrg/18kTfoIVcLL+haEVFlXDaSRwKRw== dependencies: glob-to-regexp "^0.4.1" graceful-fs "^4.1.2"