Web Dev Solutions

Catalin Mititiuc

aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCatalin Mititiuc <webdevcat@proton.me>2024-05-27 12:13:54 -0700
committerCatalin Mititiuc <webdevcat@proton.me>2024-05-27 12:13:54 -0700
commit693d0c05017d14c82dd292fde37c00e84822a616 (patch)
tree4fe8736d64da48a45bc69a526a0a70054ce16309 /esbuild-server.mjs
parent1b04583ae8784a0ec9dec3f8acb624fda73c879d (diff)
Use a proxy to set cache-control header on responses
Diffstat (limited to 'esbuild-server.mjs')
-rw-r--r--esbuild-server.mjs116
1 files changed, 36 insertions, 80 deletions
diff --git a/esbuild-server.mjs b/esbuild-server.mjs
index c49aa47..73fabab 100644
--- a/esbuild-server.mjs
+++ b/esbuild-server.mjs
@@ -1,8 +1,16 @@
-// const esbuild = require('esbuild');
-// const fs = require('node:fs');
-
import * as esbuild from 'esbuild';
import * as fs from 'node:fs';
+import http from 'node:http';
+
+const colors = {
+ reset: '\x1b[0m',
+ dim: '\x1b[2m',
+ bright: '\x1b[1m',
+ normal: '\x1b[22m',
+ red: '\x1b[31m',
+ green: '\x1b[32m',
+ yellow: '\x1b[33m',
+}
const regex = new RegExp('mapsheets\..+\.svg');
@@ -19,84 +27,10 @@ const svgUseCacheBust = {
files.forEach(fn => fs.unlinkSync(`./public/assets/images/${fn}`));
fs.copyFileSync('./public/assets/images/mapsheets.svg', `./public/assets/images/mapsheets.${version}.svg`);
})
-
- // version = Math.random();
- // build.onResolve({ filter: /svg/ }, args => {
- // console.log('onresolve', version, args);
- // });
}
}
-// {
-// bundle: true,
-// define: {
-// 'env': `"${process.env.NODE_ENV || 'dev'}"`,
-// },
-// entryPoints: ['src/index.js', 'src/map.js', 'src/soldier_record_block.js'],
-// // outdir: 'build',
-// ...(process.env.NODE_ENV !== 'test') && {
-// outdir: 'build'
-// },
-// assetNames: `[name]${version}`,
-// plugins: [svgUseCacheBust],
-// loader: {
-// '.svg': 'file'
-// },
-// },
-
-// let ctx = await esbuild.context({
-// entryPoints: ['src/*.js'],
-// outdir: 'public',
-// bundle: true,
-// plugins: [svgUseCacheBust],
-// loader: {
-// '.svg': 'file'
-// },
-// })
-
-// let { host, port } = await ctx.serve({
-// servedir: 'public',
-// })
-
-const colors = {
- reset: '\x1b[0m',
- dim: '\x1b[2m',
- bright: '\x1b[1m',
- normal: '\x1b[22m',
- red: '\x1b[31m',
- green: '\x1b[32m',
- yellow: '\x1b[33m',
-}
-
-// esbuild.context({
-// entryPoints: ['src/*.js'],
-// outdir: 'public',
-// bundle: true,
-// plugins: [svgUseCacheBust],
-// loader: {
-// '.svg': 'file'
-// },
-// logLevel: 'info',
-// }).then(ctx => {
-// console.log('context', ctx);
-
-// ctx.serve({
-// servedir: 'public',
-// onRequest: function({ remoteAddress, method, path, status, timeInMS }) {
-// let statusColor = colors.red;
-
-// if (status >= 200 && status <= 299) {
-// statusColor = colors.green;
-// } else if (status >= 300 && status <= 399) {
-// statusColor = colors.yellow;
-// }
-
-// console.log(`${colors.dim}${remoteAddress} - "${method} ${path}" ${colors.normal}${statusColor}${status}${colors.reset}${colors.dim} [${timeInMS}ms]${colors.reset}`);
-// }
-// })
-// });
-
-let ctx = await esbuild.context({
+const ctx = await esbuild.context({
entryPoints: ['src/*.js'],
bundle: true,
outdir: 'public',
@@ -105,9 +39,9 @@ let ctx = await esbuild.context({
await ctx.watch();
-let { host, port } = await ctx.serve({
+const { host, port } = await ctx.serve({
servedir: 'public',
- port: 8080,
+ port: 3000,
onRequest: function({ remoteAddress, method, path, status, timeInMS }) {
let statusColor = colors.red;
@@ -120,3 +54,25 @@ let { host, port } = await ctx.serve({
console.log(`${colors.dim}${remoteAddress} - "${method} ${path}" ${colors.normal}${statusColor}${status}${colors.reset}${colors.dim} [${timeInMS}ms]${colors.reset}`);
},
});
+
+http.createServer((req, res) => {
+ const options = {
+ hostname: host,
+ port: port,
+ path: req.url,
+ method: req.method,
+ headers: req.headers,
+ }
+
+ const proxyReq = http.request(options, proxyRes => {
+ for (const k in proxyRes.headers) {
+ res.setHeader(k, proxyRes.headers[k]);
+ }
+
+ res.writeHead(proxyRes.statusCode, { 'Cache-Control': 'no-cache, no-store, must-revalidate' });
+
+ proxyRes.pipe(res, { end: true });
+ })
+
+ req.pipe(proxyReq, { end: true });
+}).listen(8080);