mirror of
				https://github.com/mermaid-js/mermaid.git
				synced 2025-10-26 08:24:07 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			43 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			43 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
| /* eslint-disable no-console */
 | |
| import { readFile } from 'fs/promises';
 | |
| import { globby } from 'globby';
 | |
| import { ESLint } from 'eslint';
 | |
| // @ts-ignore no typings
 | |
| import jison from 'jison';
 | |
| 
 | |
| const linter = new ESLint({
 | |
|   // @ts-expect-error ESLint types are incorrect
 | |
|   overrideConfigFile: true,
 | |
|   overrideConfig: { rules: { 'no-console': 'error' } },
 | |
| });
 | |
| 
 | |
| const lint = async (file: string): Promise<boolean> => {
 | |
|   console.log(`Linting ${file}`);
 | |
|   const jisonCode = await readFile(file, 'utf8');
 | |
|   // @ts-ignore no typings
 | |
|   const generator = new jison.Generator(jisonCode, { moduleType: 'amd' });
 | |
|   const jsCode = generator.generate();
 | |
|   const [result] = await linter.lintText(jsCode);
 | |
|   if (result.errorCount > 0) {
 | |
|     console.error(`Linting failed for ${file}`);
 | |
|     console.error(result.messages);
 | |
|   }
 | |
|   if (generator.conflicts > 0) {
 | |
|     console.error(`Linting failed for ${file}. Conflicts found in grammar`);
 | |
|     return false;
 | |
|   }
 | |
|   return result.errorCount === 0;
 | |
| };
 | |
| 
 | |
| const main = async () => {
 | |
|   const jisonFiles = await globby(['./packages/**/*.jison', '!./**/node_modules/**'], {
 | |
|     dot: true,
 | |
|   });
 | |
|   const lintResults = await Promise.all(jisonFiles.map(lint));
 | |
|   if (lintResults.includes(false)) {
 | |
|     process.exit(1);
 | |
|   }
 | |
| };
 | |
| 
 | |
| void main();
 | 
