chore: update Angular build cache and TypeScript definitions
This commit is contained in:
@@ -4,6 +4,7 @@ import express from 'express';
|
||||
import path from 'path';
|
||||
import { fileURLToPath } from 'url';
|
||||
import fs from 'fs';
|
||||
import chokidar from 'chokidar';
|
||||
|
||||
const __filename = fileURLToPath(import.meta.url);
|
||||
const __dirname = path.dirname(__filename);
|
||||
@@ -15,6 +16,43 @@ const rootDir = path.resolve(__dirname, '..');
|
||||
const distDir = path.join(rootDir, 'dist');
|
||||
const vaultDir = path.join(rootDir, 'vault');
|
||||
|
||||
const vaultEventClients = new Set();
|
||||
|
||||
const registerVaultEventClient = (res) => {
|
||||
const heartbeat = setInterval(() => {
|
||||
try {
|
||||
res.write(':keepalive\n\n');
|
||||
} catch {
|
||||
// Write failures will be handled by the close handler.
|
||||
}
|
||||
}, 20000);
|
||||
|
||||
const client = { res, heartbeat };
|
||||
vaultEventClients.add(client);
|
||||
return client;
|
||||
};
|
||||
|
||||
const unregisterVaultEventClient = (client) => {
|
||||
clearInterval(client.heartbeat);
|
||||
vaultEventClients.delete(client);
|
||||
};
|
||||
|
||||
const broadcastVaultEvent = (payload) => {
|
||||
if (!vaultEventClients.size) {
|
||||
return;
|
||||
}
|
||||
|
||||
const data = `data: ${JSON.stringify(payload)}\n\n`;
|
||||
for (const client of [...vaultEventClients]) {
|
||||
try {
|
||||
client.res.write(data);
|
||||
} catch (error) {
|
||||
console.error('Failed to notify vault event client:', error);
|
||||
unregisterVaultEventClient(client);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
const isMarkdownFile = (entry) => entry.isFile() && entry.name.toLowerCase().endsWith('.md');
|
||||
|
||||
const normalizeString = (value) => {
|
||||
@@ -138,6 +176,44 @@ const isDateWithinRange = (target, start, end) => {
|
||||
return targetTime >= start.getTime() && targetTime <= end.getTime();
|
||||
};
|
||||
|
||||
const vaultWatcher = chokidar.watch(vaultDir, {
|
||||
persistent: true,
|
||||
ignoreInitial: true,
|
||||
awaitWriteFinish: {
|
||||
stabilityThreshold: 250,
|
||||
pollInterval: 100,
|
||||
},
|
||||
});
|
||||
|
||||
const watchedVaultEvents = ['add', 'change', 'unlink', 'addDir', 'unlinkDir'];
|
||||
|
||||
watchedVaultEvents.forEach((eventName) => {
|
||||
vaultWatcher.on(eventName, (changedPath) => {
|
||||
const relativePath = path.relative(vaultDir, changedPath).replace(/\\/g, '/');
|
||||
broadcastVaultEvent({
|
||||
event: eventName,
|
||||
path: relativePath,
|
||||
timestamp: Date.now(),
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
vaultWatcher.on('ready', () => {
|
||||
broadcastVaultEvent({
|
||||
event: 'ready',
|
||||
timestamp: Date.now(),
|
||||
});
|
||||
});
|
||||
|
||||
vaultWatcher.on('error', (error) => {
|
||||
console.error('Vault watcher error:', error);
|
||||
broadcastVaultEvent({
|
||||
event: 'error',
|
||||
message: typeof error?.message === 'string' ? error.message : 'Unknown watcher error',
|
||||
timestamp: Date.now(),
|
||||
});
|
||||
});
|
||||
|
||||
// Vérifier si le répertoire dist existe
|
||||
if (!fs.existsSync(distDir)) {
|
||||
console.warn(`Warning: build directory not found at ${distDir}. Did you run \`npm run build\`?`);
|
||||
@@ -151,6 +227,29 @@ app.get('/api/health', (req, res) => {
|
||||
res.json({ status: 'ok', timestamp: new Date().toISOString() });
|
||||
});
|
||||
|
||||
app.get('/api/vault/events', (req, res) => {
|
||||
res.set({
|
||||
'Content-Type': 'text/event-stream',
|
||||
'Cache-Control': 'no-cache',
|
||||
Connection: 'keep-alive',
|
||||
'X-Accel-Buffering': 'no',
|
||||
});
|
||||
|
||||
res.flushHeaders?.();
|
||||
res.write(
|
||||
`data: ${JSON.stringify({
|
||||
event: 'connected',
|
||||
timestamp: Date.now(),
|
||||
})}\n\n`,
|
||||
);
|
||||
|
||||
const client = registerVaultEventClient(res);
|
||||
|
||||
req.on('close', () => {
|
||||
unregisterVaultEventClient(client);
|
||||
});
|
||||
});
|
||||
|
||||
// API endpoint pour les données de la voûte (contenu réel)
|
||||
app.get('/api/vault', (req, res) => {
|
||||
try {
|
||||
|
||||
Reference in New Issue
Block a user