60 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			JavaScript
		
	
	
		
			Executable File
		
	
			
		
		
	
	
			60 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			JavaScript
		
	
	
		
			Executable File
		
	
| #!/usr/bin/env node
 | |
| 
 | |
| import * as fs from "node:fs";
 | |
| import { exec } from "node:child_process";
 | |
| 
 | |
| const includeJSSDK = process.argv.includes("--include-js-sdk");
 | |
| const ignore: string[] = [];
 | |
| 
 | |
| ignore.push(...Object.values<string>(JSON.parse(fs.readFileSync(`${__dirname}/../components.json`, "utf-8"))));
 | |
| ignore.push("/index.ts");
 | |
| ignore.push("/jest-matrix-react.tsx");
 | |
| ignore.push("/customisations/");
 | |
| ignore.push("/test-utils/");
 | |
| 
 | |
| // The following ignores are temporary and false-positives which need to be fixed
 | |
| ignore.push("/useLocalStorageState.ts");
 | |
| ignore.push("/blurhash.worker.ts");
 | |
| ignore.push("/OpenSpotlightPayload.ts");
 | |
| ignore.push("/PinnedMessageBadge.tsx");
 | |
| ignore.push("/editor/mock.ts");
 | |
| ignore.push("DeviceIsolationModeController.ts");
 | |
| 
 | |
| // We ignore js-sdk by default as it may export for other non element-web projects
 | |
| if (!includeJSSDK) ignore.push("matrix-js-sdk");
 | |
| 
 | |
| const command = `yarn ts-prune --ignore "${ignore.join("|")}" | grep -v "(used in module)"`;
 | |
| 
 | |
| exec(command, (error, stdout, stderr) => {
 | |
|     if (error) throw error;
 | |
|     // We have to do this as piping the output of ts-prune causes the return
 | |
|     // code to be 0
 | |
|     if (stderr) throw Error(stderr);
 | |
| 
 | |
|     let lines = stdout.split("\n");
 | |
|     // Remove the first line as that is the command that was being run and we
 | |
|     // log that only in case of an error
 | |
|     lines.splice(0, 1);
 | |
|     // Remove the last line as it is empty
 | |
|     lines.pop();
 | |
| 
 | |
|     // ts-prune has bug where if the unused export is in a dependency, the path
 | |
|     // won't have an "/" character at the start, so we try to fix that for
 | |
|     // better UX
 | |
|     // TODO: This might break on Windows
 | |
|     lines = lines.reduce<string[]>((newLines, line) => {
 | |
|         if (!line.startsWith("/")) newLines.push("/" + line);
 | |
|         else newLines.push(line);
 | |
|         return newLines;
 | |
|     }, []);
 | |
| 
 | |
|     // If an unused export has been found, we error
 | |
|     if (lines.length > 0) {
 | |
|         console.log(`Command that was run: ${command}`);
 | |
|         console.log(lines.join("\n"));
 | |
|         throw Error("Unused exports found!");
 | |
|     }
 | |
| 
 | |
|     console.log("Success - no unused exports found!");
 | |
| });
 |