Skip to content

Commit 9b7bf74

Browse files
authored
ESBuild (#2298)
1 parent 8867613 commit 9b7bf74

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

52 files changed

+1401
-3228
lines changed

package-lock.json

+975-2,492
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

+5-14
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
"node": ">=18.0.0"
77
},
88
"scripts": {
9+
"clean": "turbo run clean",
910
"build": "turbo run build",
1011
"test": "turbo run test",
1112
"lint": "eslint packages/",
@@ -22,18 +23,14 @@
2223
"@babel/preset-react": "7.22.5",
2324
"@babel/preset-typescript": "7.22.5",
2425
"@cyclonedx/cyclonedx-npm": "1.12.1",
25-
"@emotion/babel-plugin": "11.11.0",
26-
"@rollup/plugin-json": "6.0.0",
27-
"@rollup/plugin-node-resolve": "15.1.0",
28-
"@rollup/plugin-replace": "5.0.2",
29-
"@rollup/plugin-terser": "0.4.3",
30-
"@rollup/plugin-typescript": "11.1.1",
3126
"@types/jest": "29.5.2",
3227
"@types/node": "20.3.1",
3328
"@typescript-eslint/eslint-plugin": "5.60.0",
3429
"@typescript-eslint/parser": "5.60.0",
3530
"babel-jest": "29.5.0",
31+
"babel-preset-vite": "1.1.0",
3632
"cross-env": "7.0.3",
33+
"esbuild": "0.18.6",
3734
"eslint": "8.43.0",
3835
"eslint-config-prettier": "8.8.0",
3936
"eslint-plugin-jsdoc": "46.2.6",
@@ -46,20 +43,14 @@
4643
"nyc": "15.1.0",
4744
"prettier": "2.8.8",
4845
"rimraf": "5.0.1",
49-
"rollup": "3.25.1",
50-
"rollup-plugin-copy": "3.4.0",
51-
"rollup-plugin-peer-deps-external": "2.2.4",
5246
"source-map-explorer": "2.5.3",
5347
"ts-node": "10.9.1",
5448
"tslib": "2.5.3",
5549
"turbo": "1.10.3",
56-
"typescript": "5.1.3",
57-
"webpack": "5.87.0",
58-
"webpack-cli": "5.1.4",
59-
"webpack-dev-server": "4.15.1"
50+
"typescript": "5.1.3"
6051
},
6152
"overrides": {
62-
"fast-xml-parser": "4.2.4",
53+
"esbuild": "0.18.6",
6354
"got": "11.8.6",
6455
"react": "18.2.0",
6556
"react-dom": "18.2.0",

packages/app/babel.config.json

+1-2
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
11
{
2-
"presets": ["@babel/preset-env", "@babel/preset-react", "@babel/preset-typescript"],
3-
"plugins": [["@emotion/babel-plugin"]]
2+
"presets": ["@babel/preset-env", "@babel/preset-react", "@babel/preset-typescript", "babel-preset-vite"]
43
}

packages/app/index.html.ejs packages/app/index.html

+2-2
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,11 @@
1010
<meta name="apple-mobile-web-app-status-bar-style" content="black" />
1111
<meta name="theme-color" content="#5b2876" />
1212
<link rel="shortcut icon" type="image/x-icon" href="/favicon.ico" />
13-
<link rel="apple-touch-icon" href="/img/medplum-logo-512x512.png">
14-
<link rel="manifest" href="/manifest.webmanifest" />
13+
<link rel="apple-touch-icon" href="/img/medplum-logo-512x512.png" />
1514
</head>
1615

1716
<body>
1817
<div id="root"></div>
18+
<script type="module" src="/src/index.tsx"></script>
1919
</body>
2020
</html>

packages/app/package.json

+4-14
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,8 @@
1616
],
1717
"scripts": {
1818
"clean": "rimraf dist",
19-
"dev": "webpack serve --mode development",
20-
"build": "npm run clean && tsc && cross-env NODE_ENV=production webpack --mode production",
21-
"debug": "webpack --mode development",
22-
"start": "http-server dist --port 3000 --proxy http://localhost:3000?",
19+
"dev": "vite",
20+
"build": "npm run clean && tsc && vite build",
2321
"test": "jest",
2422
"source-map-explorer": "source-map-explorer dist/**/*.js --gzip"
2523
},
@@ -41,19 +39,11 @@
4139
"@types/react": "18.2.13",
4240
"@types/react-dom": "18.2.6",
4341
"@types/react-router-dom": "5.3.3",
44-
"babel-loader": "9.1.2",
45-
"copy-webpack-plugin": "11.0.0",
46-
"css-loader": "6.8.1",
47-
"dotenv-webpack": "8.0.1",
48-
"html-webpack-plugin": "5.5.3",
49-
"http-server": "14.1.1",
50-
"identity-obj-proxy": "3.0.0",
51-
"mini-css-extract-plugin": "2.7.6",
5242
"react": "18.2.0",
5343
"react-dom": "18.2.0",
5444
"react-router-dom": "6.13.0",
55-
"webpack-manifest-plugin": "5.0.0",
56-
"workbox-webpack-plugin": "7.0.0"
45+
"vite": "4.3.9",
46+
"vite-plugin-pwa": "0.16.4"
5747
},
5848
"browserslist": [
5949
"last 1 Chrome versions"

packages/app/src/config.ts

+5-5
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,11 @@ export interface MedplumAppConfig {
77
}
88

99
const config: MedplumAppConfig = {
10-
baseUrl: process.env.MEDPLUM_BASE_URL as string,
11-
clientId: process.env.MEDPLUM_CLIENT_ID || undefined,
12-
googleClientId: process.env.GOOGLE_CLIENT_ID || undefined,
13-
recaptchaSiteKey: process.env.RECAPTCHA_SITE_KEY || undefined,
14-
registerEnabled: process.env.MEDPLUM_REGISTER_ENABLED !== 'false', // default true
10+
baseUrl: import.meta.env?.MEDPLUM_BASE_URL as string,
11+
clientId: import.meta.env?.MEDPLUM_CLIENT_ID || undefined,
12+
googleClientId: import.meta.env?.GOOGLE_CLIENT_ID || undefined,
13+
recaptchaSiteKey: import.meta.env?.RECAPTCHA_SITE_KEY || undefined,
14+
registerEnabled: import.meta.env?.MEDPLUM_REGISTER_ENABLED !== 'false', // default true
1515
};
1616

1717
export function getConfig(): MedplumAppConfig {

packages/app/src/index.tsx

+2-2
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,11 @@ import { MedplumClient } from '@medplum/core';
44
import { MedplumProvider } from '@medplum/react';
55
import React from 'react';
66
import { createRoot } from 'react-dom/client';
7-
import { RouterProvider, createBrowserRouter } from 'react-router-dom';
7+
import { createBrowserRouter, RouterProvider } from 'react-router-dom';
88
import { App } from './App';
99
import { getConfig } from './config';
1010

11-
if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) {
11+
if (import.meta.env?.PROD && 'serviceWorker' in navigator) {
1212
window.addEventListener('load', () => {
1313
navigator.serviceWorker
1414
.register('/service-worker.js')

packages/app/tsconfig.json

+2-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,8 @@
22
"extends": "../../tsconfig.base.json",
33
"compilerOptions": {
44
"module": "esnext",
5-
"lib": ["esnext", "dom", "dom.iterable"]
5+
"lib": ["esnext", "dom", "dom.iterable"],
6+
"types": ["vite/client"]
67
},
78
"include": ["src/**/*.ts", "src/**/*.tsx", "./jest.setup.ts"]
89
}

packages/app/vite.config.ts

+46
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
/// <reference types="vite/client" />
2+
import react from '@vitejs/plugin-react';
3+
import { defineConfig } from 'vite';
4+
import { VitePWA } from 'vite-plugin-pwa';
5+
6+
export default defineConfig({
7+
envPrefix: ['MEDPLUM_', 'GOOGLE_', 'RECAPTCHA_'],
8+
plugins: [
9+
react(),
10+
VitePWA({
11+
registerType: 'autoUpdate',
12+
injectRegister: null,
13+
includeAssets: ['favicon.ico', 'apple-touch-icon.png', 'masked-icon.svg'],
14+
manifest: {
15+
name: 'Medplum',
16+
short_name: 'Medplum',
17+
start_url: '/',
18+
display: 'standalone',
19+
background_color: '#ffffff',
20+
theme_color: '#ffffff',
21+
icons: [
22+
{
23+
src: '/img/medplum-logo.svg',
24+
type: 'image/svg+xml',
25+
sizes: '512x512',
26+
},
27+
{
28+
src: '/img/medplum-logo-512x512.png',
29+
type: 'image/png',
30+
sizes: '512x512',
31+
},
32+
{
33+
src: '/img/medplum-logo-maskable.png',
34+
type: 'image/png',
35+
sizes: '512x512',
36+
purpose: 'maskable',
37+
},
38+
],
39+
},
40+
}),
41+
],
42+
server: {
43+
port: 3000,
44+
},
45+
publicDir: 'static',
46+
});

packages/app/webpack.config.js

-116
This file was deleted.

packages/cdk/.gitignore

-1
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,2 @@
11
cdk.context.json
22
cdk.out
3-

packages/cdk/esbuild.mjs

+46
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
/* global console */
2+
/* eslint no-console: "off" */
3+
4+
import esbuild from 'esbuild';
5+
import { writeFileSync } from 'fs';
6+
7+
const options = {
8+
entryPoints: ['./src/index.ts'],
9+
bundle: true,
10+
platform: 'node',
11+
loader: { '.ts': 'ts' },
12+
resolveExtensions: ['.ts'],
13+
target: 'es2021',
14+
tsconfig: 'tsconfig.json',
15+
minify: true,
16+
external: [
17+
'@aws-sdk/client-acm',
18+
'@aws-sdk/client-ssm',
19+
'@aws-sdk/client-sts',
20+
'aws-cdk-lib',
21+
'aws-cdk-lib/aws-ecr',
22+
'aws-cdk-lib/aws-rds',
23+
'cdk',
24+
'cdk-nag',
25+
'cdk-serverless-clamscan',
26+
'constructs',
27+
],
28+
};
29+
30+
esbuild
31+
.build({
32+
...options,
33+
format: 'cjs',
34+
outfile: './dist/cjs/index.cjs',
35+
})
36+
.then(() => writeFileSync('./dist/cjs/package.json', '{"type": "commonjs"}'))
37+
.catch(console.error);
38+
39+
esbuild
40+
.build({
41+
...options,
42+
format: 'esm',
43+
outfile: './dist/esm/index.mjs',
44+
})
45+
.then(() => writeFileSync('./dist/esm/package.json', '{"type": "module"}'))
46+
.catch(console.error);

packages/cdk/package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
},
1313
"scripts": {
1414
"clean": "rimraf dist cdk.out",
15-
"build": "npm run clean && tsc && rollup --config rollup.config.mjs",
15+
"build": "npm run clean && tsc --project tsconfig.build.json && node esbuild.mjs",
1616
"cdk": "cdk",
1717
"test": "jest --runInBand"
1818
},

0 commit comments

Comments
 (0)