Files
cn-rdms-web/scripts/generate-elegant-router.mjs

68 lines
1.7 KiB
JavaScript

import fs from 'node:fs/promises';
import path from 'node:path';
import process from 'node:process';
import { fileURLToPath } from 'node:url';
import { setupElegantRouter } from '../build/plugins/router.ts';
const currentFilePath = fileURLToPath(import.meta.url);
const currentDirPath = path.dirname(currentFilePath);
const rootDir = path.resolve(currentDirPath, '..');
const generatedFiles = [
path.resolve(rootDir, 'src/router/elegant/imports.ts'),
path.resolve(rootDir, 'src/router/elegant/routes.ts'),
path.resolve(rootDir, 'src/router/elegant/transform.ts'),
path.resolve(rootDir, 'src/typings/elegant-router.d.ts')
];
async function getMtimeMs(filePath) {
try {
const stat = await fs.stat(filePath);
return stat.mtimeMs;
} catch {
return 0;
}
}
async function getGeneratedFileMtimes() {
return Promise.all(generatedFiles.map(getMtimeMs));
}
function isGenerated(before, after) {
return after.some((mtimeMs, index) => mtimeMs !== before[index]);
}
async function waitForGeneration(beforeMtimes, timeoutMs = 10000) {
const startTime = Date.now();
async function poll() {
const afterMtimes = await getGeneratedFileMtimes();
if (isGenerated(beforeMtimes, afterMtimes)) {
return;
}
if (Date.now() - startTime >= timeoutMs) {
throw new Error('Timed out while waiting for elegant-router generated files.');
}
await new Promise(resolve => {
setTimeout(resolve, 100);
});
await poll();
}
await poll();
}
process.chdir(rootDir);
const beforeMtimes = await getGeneratedFileMtimes();
setupElegantRouter();
await waitForGeneration(beforeMtimes);
console.log('Generated elegant-router files.');