mirror of
https://github.com/morten-olsen/morten-olsen.github.io.git
synced 2026-02-08 01:46:28 +01:00
foo
This commit is contained in:
@@ -1,40 +1,54 @@
|
||||
import express, { Express } from 'express';
|
||||
import { Bundler } from '../bundler';
|
||||
import { extname } from 'path';
|
||||
|
||||
const createServer = (bundler: Bundler): Express => {
|
||||
const app = express();
|
||||
app.use((req, res) => {
|
||||
let path = req.path;
|
||||
const getAsset = (path: string) => {
|
||||
let asset = bundler.get(path);
|
||||
if (!asset) {
|
||||
path = path.endsWith('/') ? path + 'index.html' : path + '/index.html';
|
||||
asset = bundler.get(path);
|
||||
}
|
||||
return asset;
|
||||
};
|
||||
const app = express();
|
||||
app.get('/dev', (req, res) => {
|
||||
res.set({
|
||||
'Cache-Control': 'no-cache',
|
||||
'Content-Type': 'text/event-stream',
|
||||
Connection: 'keep-alive',
|
||||
});
|
||||
res.flushHeaders();
|
||||
const path = req.query.path?.toString();
|
||||
if (!path) {
|
||||
res.status(400).send('Missing path');
|
||||
return;
|
||||
}
|
||||
const asset = getAsset(path);
|
||||
if (!asset) {
|
||||
res.status(404).send('Not found');
|
||||
return;
|
||||
}
|
||||
const reload = () => {
|
||||
res.write('data: reload\n\n');
|
||||
};
|
||||
asset.subscribe(reload);
|
||||
res.on('close', () => {
|
||||
asset.unsubscribe(reload);
|
||||
});
|
||||
res.on('error', () => {
|
||||
asset.unsubscribe(reload);
|
||||
});
|
||||
res.on('finish', () => {
|
||||
asset.unsubscribe(reload);
|
||||
});
|
||||
});
|
||||
app.use((req, res) => {
|
||||
let path = req.path;
|
||||
let asset = getAsset(path);
|
||||
if (asset) {
|
||||
const ext = extname(path);
|
||||
asset.data
|
||||
.then((data) => {
|
||||
if (ext === '.html') {
|
||||
const unsubscribe = asset!.subscribe(async () => {
|
||||
await asset?.data;
|
||||
unsubscribe();
|
||||
res.end('<script>window.location.reload()</script>');
|
||||
});
|
||||
res.on('close', unsubscribe);
|
||||
res.on('finish', unsubscribe);
|
||||
res.on('error', unsubscribe);
|
||||
res.writeHead(200, {
|
||||
'content-type': 'text/html;charset=utf-8',
|
||||
'Cache-Control': 'no-cache, no-store, must-revalidate',
|
||||
Pragma: 'no-cache',
|
||||
Expires: '0',
|
||||
'keep-alive': 'timeout=5, max=100',
|
||||
});
|
||||
res.write(data.content.toString().replace('</html>', ''));
|
||||
} else {
|
||||
res.send(data.content);
|
||||
}
|
||||
res.send(data.content);
|
||||
})
|
||||
.catch((err) => {
|
||||
console.error(err);
|
||||
|
||||
Reference in New Issue
Block a user