1
0
mirror of https://github.com/jhillyerd/inbucket.git synced 2025-12-18 10:07:02 +00:00

Compare commits

...

15 Commits

Author SHA1 Message Date
James Hillyerd
0738791ba8 Update CHANGELOG for 3.0.4 2022-10-02 15:53:32 -07:00
James Hillyerd
66831d10c7 backport FROM <> fix from #291 for bug #283 (#296)
* bump nix go to 1.18

* backport FROM <> fix from #291 for bug #283
2022-10-02 15:32:49 -07:00
James Hillyerd
344c3ffb21 Update CHANGELOG for 3.0.3 (#286)
Signed-off-by: James Hillyerd <james@hillyerd.com>
2022-08-07 19:39:48 -07:00
James Hillyerd
87018ed42d Allow AUTH=<> FROM parameter (#284)
* Use backtick on regex
* Accept AUTH=<> FROM parameter
* Update changelog
2022-07-30 10:57:29 -07:00
James Hillyerd
1650a5b375 Merge pull request #281 from inbucket/dependabot/npm_and_yarn/ui/terser-5.14.2
build(deps): bump terser from 5.12.1 to 5.14.2 in /ui
2022-07-30 09:41:41 -07:00
dependabot[bot]
3f7adbfb22 build(deps): bump terser from 5.12.1 to 5.14.2 in /ui
Bumps [terser](https://github.com/terser/terser) from 5.12.1 to 5.14.2.
- [Release notes](https://github.com/terser/terser/releases)
- [Changelog](https://github.com/terser/terser/blob/master/CHANGELOG.md)
- [Commits](https://github.com/terser/terser/commits)

---
updated-dependencies:
- dependency-name: terser
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-07-21 02:45:45 +00:00
James Hillyerd
03cc31fb70 Build with Go 1.18 2022-07-04 16:23:06 -07:00
James Hillyerd
a10a6244c9 Merge pull request #279 from inbucket/v302rel
Release 3.0.2
2022-07-04 12:02:17 -07:00
James Hillyerd
9185423022 Update CHANGELOG 2022-07-04 11:03:48 -07:00
James Hillyerd
9aaca449f8 Fix non-root basepaths, closes #273 2022-05-22 21:47:52 -07:00
James Hillyerd
f39395bd7f Fix error in swaks tests server default env var 2022-05-22 21:47:52 -07:00
James Hillyerd
2c68128d5d swaks-tests: allow server address override 2022-05-08 13:13:25 -07:00
James Hillyerd
06d4120682 Migrate to Yarn & Parcel (#260)
* Switch from npm to yarn
* Add minimum viable parcel dev server config
* Remove webpack configs
* Update docker build, build w/ yarn on node 16.x
2022-04-23 13:35:54 -07:00
James Hillyerd
58bcd4f557 Docker frontend build runs as amd64 (#270) 2022-04-23 10:33:46 -07:00
kaustubh105
e91e8d5aee Add support for ARMv7 and ARM64 docker images (#267)
* Build armv7 and arm64 docker containers

* Add QEMU step to build for multi arch

* Pin qemu action version
2022-02-25 08:56:18 -08:00
23 changed files with 2404 additions and 8013 deletions

View File

@@ -6,7 +6,7 @@ jobs:
runs-on: ubuntu-latest runs-on: ubuntu-latest
strategy: strategy:
matrix: matrix:
go: [ '1.17', '1.16' ] go: [ '1.18', '1.17' ]
name: Go ${{ matrix.go }} build name: Go ${{ matrix.go }} build
steps: steps:
- uses: actions/checkout@v2 - uses: actions/checkout@v2

View File

@@ -25,6 +25,10 @@ jobs:
type=edge,branch=main type=edge,branch=main
flavor: | flavor: |
latest=auto latest=auto
- name: Set up QEMU
uses: docker/setup-qemu-action@v1
with:
platforms: all
- name: Set up Docker Buildx - name: Set up Docker Buildx
uses: docker/setup-buildx-action@v1 uses: docker/setup-buildx-action@v1
- name: Login to DockerHub - name: Login to DockerHub
@@ -44,6 +48,7 @@ jobs:
uses: docker/build-push-action@v2 uses: docker/build-push-action@v2
with: with:
context: . context: .
platforms: linux/amd64,linux/arm64, linux/arm/v7
push: ${{ github.event_name != 'pull_request' }} push: ${{ github.event_name != 'pull_request' }}
tags: ${{ steps.meta.outputs.tags }} tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }} labels: ${{ steps.meta.outputs.labels }}

View File

@@ -14,19 +14,17 @@ jobs:
- name: Setup Go - name: Setup Go
uses: actions/setup-go@v2 uses: actions/setup-go@v2
with: with:
go-version: 1.17 go-version: 1.18
- name: Setup Node.js - name: Setup Node.js
uses: actions/setup-node@v1 uses: actions/setup-node@v3
with: with:
node-version: '14.x' node-version: '16.x'
- name: Setup Elm cache: 'yarn'
uses: jorelali/setup-elm@v2 cache-dependency-path: ui/yarn.lock
with:
elm-version: 0.19.1
- name: Build frontend - name: Build frontend
run: | run: |
npm ci yarn install --frozen-lockfile --non-interactive
npm run build yarn run build
working-directory: ./ui working-directory: ./ui
- name: Test build release - name: Test build release
uses: goreleaser/goreleaser-action@v2 uses: goreleaser/goreleaser-action@v2

1
.gitignore vendored
View File

@@ -52,3 +52,4 @@ repl-temp-*
/ui/dist/ /ui/dist/
# Dependency directories # Dependency directories
/ui/node_modules /ui/node_modules
/ui/.parcel-cache

View File

@@ -6,6 +6,28 @@ This project adheres to [Semantic Versioning](http://semver.org/).
## [Unreleased] ## [Unreleased]
## [v3.0.4] - 2022-10-02
### Fixed
- More flexible support of `AUTH=<>` FROM parameter (#291)
## [v3.0.3] - 2022-08-07
### Fixed
- Support for `AUTH=<>` FROM parameter (#284)
## [v3.0.2] - 2022-07-04
Note: We had to abandon the 3.0.1 release, see the blog post [What happened to
3.0?](https://www.inbucket.org/news/2022/05/whathappenedtothree.html) for
details.
### Changed
- arm Docker builds now rely on amd64 frontend build stage
- Frontend build migrated from npm+webpack to yarn+parcel, node 16
## [v3.0.1-rc2] - 2022-01-23 ## [v3.0.1-rc2] - 2022-01-23
@@ -293,10 +315,13 @@ No change from beta1.
specific message. specific message.
[Unreleased]: https://github.com/inbucket/inbucket/compare/v3.0.1-rc2...main [Unreleased]: https://github.com/inbucket/inbucket/compare/v3.0.4...main
[v3.0.4]: https://github.com/inbucket/inbucket/compare/v3.0.3...v3.0.4
[v3.0.3]: https://github.com/inbucket/inbucket/compare/v3.0.2...v3.0.3
[v3.0.2]: https://github.com/inbucket/inbucket/compare/v3.0.1-rc2...v3.0.2
[v3.0.1-rc2]: https://github.com/inbucket/inbucket/compare/v3.0.1-rc1...v3.0.1-rc2 [v3.0.1-rc2]: https://github.com/inbucket/inbucket/compare/v3.0.1-rc1...v3.0.1-rc2
[v3.0.1-rc1]: https://github.com/inbucket/inbucket/compare/v3.0.0...v3.0.1-rc1 [v3.0.1-rc1]: https://github.com/inbucket/inbucket/compare/v3.0.0...v3.0.1-rc1
[v3.0.0]: https://github.com/inbucket/inbucket/compare/v3.0.0-rc4...v3.0.0 [v3.0.0]: https://github.com/inbucket/inbucket/compare/v3.0.0-rc4...v3.0.0
[v3.0.0-rc4]: https://github.com/inbucket/inbucket/compare/v3.0.0-rc2...v3.0.0-rc4 [v3.0.0-rc4]: https://github.com/inbucket/inbucket/compare/v3.0.0-rc2...v3.0.0-rc4
[v3.0.0-rc2]: https://github.com/inbucket/inbucket/compare/v3.0.0-rc1...v3.0.0-rc2 [v3.0.0-rc2]: https://github.com/inbucket/inbucket/compare/v3.0.0-rc1...v3.0.0-rc2
[v3.0.0-rc1]: https://github.com/inbucket/inbucket/compare/v3.0.0-beta3...v3.0.0-rc1 [v3.0.0-rc1]: https://github.com/inbucket/inbucket/compare/v3.0.0-beta3...v3.0.0-rc1

View File

@@ -1,35 +1,33 @@
# Docker build file for Inbucket: https://www.inbucket.org/ # Docker build file for Inbucket: https://www.inbucket.org/
# Install build-time dependencies ### Build frontend
FROM golang:1.17-alpine3.14 as builder # Due to no official elm compiler for arm; build frontend with amd64.
RUN apk add --no-cache --virtual .build-deps g++ git make npm python3 FROM --platform=linux/amd64 node:16 as frontend
WORKDIR /build
COPY . .
WORKDIR /build/ui
RUN rm -rf .parcel-cache dist elm-stuff node_modules
RUN yarn install --frozen-lockfile --non-interactive
RUN yarn run build
### Build backend
FROM golang:1.18-alpine3.16 as backend
RUN apk add --no-cache --virtual .build-deps g++ git make
WORKDIR /build WORKDIR /build
COPY . . COPY . .
ENV CGO_ENABLED 0 ENV CGO_ENABLED 0
RUN make clean deps RUN make clean deps
WORKDIR /build/ui
RUN rm -rf dist elm-stuff node_modules
RUN npm ci
ADD https://github.com/elm/compiler/releases/download/0.19.1/binary-for-linux-64-bit.gz elm.gz
RUN gunzip elm.gz && chmod 755 elm && mv elm /usr/bin/
# Build server
WORKDIR /build
RUN go build -o inbucket \ RUN go build -o inbucket \
-ldflags "-X 'main.version=$(git describe --tags --always)' -X 'main.date=$(date -Iseconds)'" \ -ldflags "-X 'main.version=$(git describe --tags --always)' -X 'main.date=$(date -Iseconds)'" \
-v ./cmd/inbucket -v ./cmd/inbucket
# Build frontend ### Run in minimal image
WORKDIR /build/ui FROM alpine:3.16
RUN npm run build
# Run in minimal image
FROM alpine:3.14
RUN apk --no-cache add tzdata RUN apk --no-cache add tzdata
WORKDIR /opt/inbucket WORKDIR /opt/inbucket
RUN mkdir bin defaults ui RUN mkdir bin defaults ui
COPY --from=builder /build/inbucket bin COPY --from=backend /build/inbucket bin
COPY --from=builder /build/ui/dist ui COPY --from=frontend /build/ui/dist ui
COPY etc/docker/defaults/greeting.html defaults COPY etc/docker/defaults/greeting.html defaults
COPY etc/docker/defaults/start-inbucket.sh / COPY etc/docker/defaults/start-inbucket.sh /

View File

@@ -33,14 +33,13 @@ tracks our tagged releases, and `edge` tracks our potentially unstable
## Building from Source ## Building from Source
You will need functioning [Go], [Elm] and [Node.js] installations for this to You will need functioning [Go] and [Node.js] installations for this to work.
work.
```sh ```sh
git clone https://github.com/inbucket/inbucket.git git clone https://github.com/inbucket/inbucket.git
cd inbucket/ui cd inbucket/ui
npm ci yarn install
npm run build yarn build
cd .. cd ..
go build ./cmd/inbucket go build ./cmd/inbucket
``` ```

View File

@@ -24,7 +24,7 @@ case "$1" in
;; ;;
esac esac
export SWAKS_OPT_server="127.0.0.1:2500" export SWAKS_OPT_server="${SWAKS_OPT_server:-127.0.0.1:2500}"
export SWAKS_OPT_to="$to@inbucket.local" export SWAKS_OPT_to="$to@inbucket.local"
# Basic test # Basic test

View File

@@ -54,11 +54,11 @@ const (
QUIT QUIT
) )
// fromRegex captures the from address and optional BODY=8BITMIME clause. Matches FROM, while // fromRegex captures the from address and optional parameters. Matches FROM, while accepting '>'
// accepting '>' as quoted pair and in double quoted strings (?i) makes the regex case insensitive, // as quoted pair and in double quoted strings (?i) makes the regex case insensitive, (?:) is
// (?:) is non-grouping sub-match // non-grouping sub-match. Accepts empty angle bracket value in options for 'AUTH=<>'.
var fromRegex = regexp.MustCompile( var fromRegex = regexp.MustCompile(
"(?i)^FROM:\\s*<((?:(?:\\\\>|[^>])+|\"[^\"]+\"@[^>])+)?>( [\\w= ]+)?$") `(?i)^FROM:\s*<((?:(?:\\>|[^>])+|"[^"]+"@[^>])+)?>( ([\w= ]|=<>)+)?$`)
func (s State) String() string { func (s State) String() string {
switch s { switch s {
@@ -619,7 +619,7 @@ func (s *Session) parseCmd(line string) (cmd string, arg string, ok bool) {
// The leading space is mandatory. // The leading space is mandatory.
func (s *Session) parseArgs(arg string) (args map[string]string, ok bool) { func (s *Session) parseArgs(arg string) (args map[string]string, ok bool) {
args = make(map[string]string) args = make(map[string]string)
re := regexp.MustCompile(` (\w+)=(\w+)`) re := regexp.MustCompile(` (\w+)=(\w+|<>)`)
pm := re.FindAllStringSubmatch(arg, -1) pm := re.FindAllStringSubmatch(arg, -1)
if pm == nil { if pm == nil {
s.logger.Warn().Msgf("Failed to parse arg string: %q", arg) s.logger.Warn().Msgf("Failed to parse arg string: %q", arg)

View File

@@ -193,6 +193,12 @@ func TestReadyState(t *testing.T) {
{"RSET", 250}, {"RSET", 250},
{"MAIL FROM:<john@gmail.com> SIZE=1024", 250}, {"MAIL FROM:<john@gmail.com> SIZE=1024", 250},
{"RSET", 250}, {"RSET", 250},
{"MAIL FROM:<john@gmail.com> SIZE=1024 BODY=8BITMIME", 250},
{"RSET", 250},
{"MAIL FROM:<bounces@onmicrosoft.com> SIZE=4096 AUTH=<>", 250},
{"RSET", 250},
{"MAIL FROM:<b@o.com> SIZE=4096 AUTH=<> BODY=7BIT", 250},
{"RSET", 250},
{"MAIL FROM:<host!host!user/data@foo.com>", 250}, {"MAIL FROM:<host!host!user/data@foo.com>", 250},
{"RSET", 250}, {"RSET", 250},
{"MAIL FROM:<\"first last\"@space.com>", 250}, {"MAIL FROM:<\"first last\"@space.com>", 250},

View File

@@ -3,6 +3,7 @@ stdenv.mkDerivation rec {
name = "env"; name = "env";
env = buildEnv { name = name; paths = buildInputs; }; env = buildEnv { name = name; paths = buildInputs; };
buildInputs = [ buildInputs = [
act
dpkg dpkg
elmPackages.elm elmPackages.elm
elmPackages.elm-analyse elmPackages.elm-analyse
@@ -10,9 +11,10 @@ stdenv.mkDerivation rec {
elmPackages.elm-json elmPackages.elm-json
elmPackages.elm-language-server elmPackages.elm-language-server
elmPackages.elm-test elmPackages.elm-test
go go_1_18
golint golint
nodejs-14_x nodejs-16_x
nodePackages.yarn
rpm rpm
swaks swaks
]; ];

4
ui/.parcelrc Normal file
View File

@@ -0,0 +1,4 @@
{
"extends": "@parcel/config-default",
"namers": [ "parcel-namer-rewrite" ]
}

12
ui/.proxyrc.json Normal file
View File

@@ -0,0 +1,12 @@
{
"/api": {
"target": "http://localhost:9000",
"ws": true
},
"/debug": {
"target": "http://localhost:9000"
},
"/serve": {
"target": "http://localhost:9000"
}
}

View File

@@ -11,9 +11,8 @@ One time setup (assuming [Node.js] is already installed):
``` ```
cd $INBUCKET/ui cd $INBUCKET/ui
npm i elm -g yarn install
npm i yarn build
npm run build
``` ```
This will the create `node_modules`, `elm-stuff`, and `dist` directories. This will the create `node_modules`, `elm-stuff`, and `dist` directories.
@@ -30,15 +29,16 @@ Inbucket will start, with HTTP listening on port 9000. You may verify the web
UI is functional if this is your first time building Inbucket, but your dev/test UI is functional if this is your first time building Inbucket, but your dev/test
cycle should favor the development server below. cycle should favor the development server below.
### Terminal 2: webpack development server ### Terminal 2: parcel development server
``` ```
cd $INBUCKET/ui cd $INBUCKET/ui
npm run dev yarn start
``` ```
npm will start a development HTTP server listening on port 3000. You should use yarn will start a development HTTP server listening on port 1234. You should
this server for UI development, as it features hot reload and the Elm debugger. use this server for UI development, as it features hot reload and the Elm
debugger.
[Elm]: https://elm-lang.org [Elm]: https://elm-lang.org
[Node.js]: https://nodejs.org [Node.js]: https://nodejs.org

7849
ui/package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@@ -4,30 +4,29 @@
"license": "MIT", "license": "MIT",
"private": true, "private": true,
"scripts": { "scripts": {
"clean": "rm -rf dist elm-stuff", "build": "parcel build --public-url ./",
"build": "webpack --mode production", "start": "parcel --hmr-port 1235 src/index-dev.html",
"watch": "webpack --mode development --watch", "clean": "rm -rf .parcel-cache dist elm-stuff"
"dev": "webpack-dev-server --mode development --port 3000 --hot --watch",
"errors": "webpack --mode development --display-error-details"
}, },
"dependencies": { "source": "src/index.html",
"opensans-npm-webfont": "^1.0.0" "parcel-namer-rewrite": {
"rules": {
"(.*)\\.(css|js|json|eot|png|svg|ttf|webmanifest|woff|woff2)": "static/$1{.hash}.$2"
}
}, },
"browserslist": "defaults",
"dependencies": {},
"devDependencies": { "devDependencies": {
"@babel/core": "^7.14.8",
"@babel/preset-env": "^7.14.8",
"@fortawesome/fontawesome-free": "^5.15.3", "@fortawesome/fontawesome-free": "^5.15.3",
"@parcel/packager-raw-url": "2.4.1",
"@parcel/transformer-elm": "^2.2.1",
"@parcel/transformer-webmanifest": "2.4.1",
"@webcomponents/webcomponentsjs": "^2.5.0", "@webcomponents/webcomponentsjs": "^2.5.0",
"babel-loader": "^8.2.2", "opensans-npm-webfont": "^1.0.0",
"css-loader": "^4.3.0", "parcel": "^2.4.1",
"elm-hot-webpack-loader": "^1.1.8", "parcel-namer-rewrite": "^2.0.0-rc.2"
"elm-webpack-loader": "^7.0.1", },
"file-loader": "^6.2.0", "optionalDependencies": {
"html-webpack-plugin": "^4.5.2", "elm": "^0.19.1-5"
"node-elm-compiler": "^5.0.6",
"style-loader": "^1.3.0",
"webpack": "^4.46.0",
"webpack-cli": "^3.3.12",
"webpack-dev-server": "^3.11.2"
} }
} }

View File

Before

Width:  |  Height:  |  Size: 3.0 KiB

After

Width:  |  Height:  |  Size: 3.0 KiB

View File

@@ -1,15 +1,20 @@
<!DOCTYPE html> <!DOCTYPE html>
<html lang="en"> <html lang="en">
<head> <head>
<!-- This index file will be served by the webpack development server. --> <!-- This index file will be served by the development server. -->
<base href="/"> <base href="/">
<meta charset="utf-8"> <meta charset="utf-8">
<meta http-equiv="x-ua-compatible" content="ie=edge"> <meta http-equiv="x-ua-compatible" content="ie=edge">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<meta name="theme-color" content="#000000"> <meta name="theme-color" content="#000000">
<meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate" /> <meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate">
<meta http-equiv="Pragma" content="no-cache" /> <meta http-equiv="Pragma" content="no-cache">
<meta http-equiv="Expires" content="0" /> <meta http-equiv="Expires" content="0">
<link rel="stylesheet" href="./main.css">
<link rel="stylesheet" href="./navbar.css">
<link rel="stylesheet" href="./mailbox.css">
<link rel="icon" type="image/png" href="./favicon.png">
<link rel="manifest" href="./manifest.json">
<title>Inbucket</title> <title>Inbucket</title>
</head> </head>
<body> <body>
@@ -17,5 +22,6 @@
You need to enable JavaScript to run this app. You need to enable JavaScript to run this app.
</noscript> </noscript>
<div id="root"></div> <div id="root"></div>
<script type="module" src="index.js"></script>
</body> </body>
</html> </html>

View File

@@ -6,9 +6,14 @@
<meta http-equiv="x-ua-compatible" content="ie=edge"> <meta http-equiv="x-ua-compatible" content="ie=edge">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<meta name="theme-color" content="#000000"> <meta name="theme-color" content="#000000">
<meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate" /> <meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate">
<meta http-equiv="Pragma" content="no-cache" /> <meta http-equiv="Pragma" content="no-cache">
<meta http-equiv="Expires" content="0" /> <meta http-equiv="Expires" content="0">
<link rel="stylesheet" href="./main.css">
<link rel="stylesheet" href="./navbar.css">
<link rel="stylesheet" href="./mailbox.css">
<link rel="icon" type="image/png" href="./favicon.png">
<link rel="manifest" href="./manifest.json">
<title>Inbucket</title> <title>Inbucket</title>
</head> </head>
<body> <body>
@@ -16,5 +21,6 @@
You need to enable JavaScript to run this app. You need to enable JavaScript to run this app.
</noscript> </noscript>
<div id="root"></div> <div id="root"></div>
<script type="module" src="index.js"></script>
</body> </body>
</html> </html>

View File

@@ -1,6 +1,3 @@
import './main.css'
import './mailbox.css'
import './navbar.css'
import '@fortawesome/fontawesome-free/css/all.css' import '@fortawesome/fontawesome-free/css/all.css'
import '@webcomponents/webcomponentsjs/webcomponents-bundle' import '@webcomponents/webcomponentsjs/webcomponents-bundle'
import 'opensans-npm-webfont' import 'opensans-npm-webfont'

View File

@@ -1,84 +0,0 @@
const HtmlWebpackPlugin = require('html-webpack-plugin')
const webpack = require('webpack')
module.exports = (env, argv) => {
const production = argv.mode === 'production'
const config = {
output: {
filename: 'static/[name].[hash:8].js',
publicPath: '',
},
module: {
rules: [
{
test: /\.js$/,
exclude: [/elm-stuff/, /node_modules/],
loader: 'babel-loader',
query: {
presets: [
'@babel/preset-env',
],
},
},
{
test: /\.elm$/,
exclude: [/elm-stuff/, /node_modules/],
use: [
{ loader: 'elm-hot-webpack-loader' },
{
loader: 'elm-webpack-loader',
options: {
debug: !production,
optimize: production,
},
},
],
},
{
test: /\.css$/,
loader: ['style-loader', 'css-loader'],
},
{
test: /\.(eot|svg|ttf|woff|woff2)$/,
loader: 'file-loader',
options: {
name: 'static/[name].[hash:8].[ext]',
},
},
]
},
plugins: [
new HtmlWebpackPlugin({
template: 'public/index.html',
favicon: 'public/favicon.png',
}),
new HtmlWebpackPlugin({
filename: 'index-dev.html',
template: 'public/index-dev.html',
favicon: 'public/favicon.png',
}),
],
devServer: {
historyApiFallback: {
index: '/index-dev.html',
},
index: 'index-dev.html',
inline: true,
overlay: true,
open: true,
proxy: [{
context: ['/api', '/debug', '/serve'],
target: 'http://localhost:9000',
ws: true,
}],
stats: { colors: true },
watchOptions: {
ignored: /node_modules/,
},
},
}
if (argv.hot) {
config.plugins.push(new webpack.HotModuleReplacementPlugin())
}
return config
}

2266
ui/yarn.lock Normal file

File diff suppressed because it is too large Load Diff