68 lines
1.7 KiB
JavaScript
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.');
|