mirror of
https://github.com/ksyasuda/SubMiner.git
synced 2026-03-06 19:57:26 -08:00
71 lines
2.1 KiB
TypeScript
71 lines
2.1 KiB
TypeScript
import test from 'node:test';
|
|
import assert from 'node:assert/strict';
|
|
import fs from 'node:fs';
|
|
import path from 'node:path';
|
|
|
|
const DEAD_MODULE_PATHS = [
|
|
'src/translators/index.ts',
|
|
'src/subsync/engines.ts',
|
|
'src/subtitle/pipeline.ts',
|
|
'src/subtitle/stages/merge.ts',
|
|
'src/subtitle/stages/normalize.ts',
|
|
'src/subtitle/stages/normalize.test.ts',
|
|
'src/subtitle/stages/tokenize.ts',
|
|
'src/tokenizers/index.ts',
|
|
'src/token-mergers/index.ts',
|
|
] as const;
|
|
|
|
const FORBIDDEN_IMPORT_PATTERNS = [
|
|
/from ['"]\.\.?\/tokenizers['"]/,
|
|
/from ['"]\.\.?\/token-mergers['"]/,
|
|
/from ['"]\.\.?\/subtitle\/pipeline['"]/,
|
|
/from ['"]\.\.?\/subsync\/engines['"]/,
|
|
/from ['"]\.\.?\/translators['"]/,
|
|
] as const;
|
|
|
|
function readWorkspaceFile(relativePath: string): string {
|
|
return fs.readFileSync(path.join(process.cwd(), relativePath), 'utf8');
|
|
}
|
|
|
|
function collectSourceFiles(rootDir: string): string[] {
|
|
const absoluteRoot = path.join(process.cwd(), rootDir);
|
|
const out: string[] = [];
|
|
|
|
const visit = (currentDir: string) => {
|
|
for (const entry of fs.readdirSync(currentDir, { withFileTypes: true })) {
|
|
const fullPath = path.join(currentDir, entry.name);
|
|
if (entry.isDirectory()) {
|
|
visit(fullPath);
|
|
continue;
|
|
}
|
|
if (!fullPath.endsWith('.ts') && !fullPath.endsWith('.tsx')) {
|
|
continue;
|
|
}
|
|
out.push(path.relative(process.cwd(), fullPath).replaceAll('\\', '/'));
|
|
}
|
|
};
|
|
|
|
visit(absoluteRoot);
|
|
out.sort();
|
|
return out;
|
|
}
|
|
|
|
test('dead registry and pipeline modules stay removed from the repository', () => {
|
|
for (const relativePath of DEAD_MODULE_PATHS) {
|
|
assert.equal(
|
|
fs.existsSync(path.join(process.cwd(), relativePath)),
|
|
false,
|
|
`${relativePath} should stay deleted`,
|
|
);
|
|
}
|
|
});
|
|
|
|
test('live source tree no longer imports dead registry and pipeline modules', () => {
|
|
for (const relativePath of collectSourceFiles('src')) {
|
|
const source = readWorkspaceFile(relativePath);
|
|
for (const pattern of FORBIDDEN_IMPORT_PATTERNS) {
|
|
assert.doesNotMatch(source, pattern, `${relativePath} should not import ${pattern.source}`);
|
|
}
|
|
}
|
|
});
|