|
| 1 | +#!/usr/bin/env node |
| 2 | + |
| 3 | +const path = require('path') |
| 4 | +const fs = require('fs') |
| 5 | + |
| 6 | +// Directory constants |
| 7 | +const scriptDirectory = __dirname |
| 8 | +const repoDirectory = path.join(scriptDirectory, '..') |
| 9 | +const libDirectory = path.join(repoDirectory, 'lib') |
| 10 | + |
| 11 | +const helpText = ` |
| 12 | +Helper script to update lib/.gitignore for all .js files from .ts files. |
| 13 | +
|
| 14 | + update_gitignore_for_tsc_output.js COMMAND |
| 15 | +
|
| 16 | + COMMAND: |
| 17 | + run: Update lib/.gitignore file. |
| 18 | + help: Print this menu. |
| 19 | +
|
| 20 | + NOTES FOR USAGE: |
| 21 | + 1. This script is tested to work on Ubuntu 18.04 LTS. |
| 22 | +` |
| 23 | + |
| 24 | +const gitignoreHeader = `# DO NOT EDIT, GENERATED BY: scripts/update_gitignore_for_tsc_output.js |
| 25 | +
|
| 26 | +# Do not include tsc generated type definitions |
| 27 | +**/*.d.ts |
| 28 | +
|
| 29 | +# Do not include tsc source maps |
| 30 | +**/*.js.map |
| 31 | +
|
| 32 | +# Do not include .js files from .ts files |
| 33 | +` |
| 34 | + |
| 35 | +function main(cliCommand) { |
| 36 | + if (cliCommand === 'run') { |
| 37 | + console.log('Generating lib/.gitignore ...') |
| 38 | + |
| 39 | + // Find all .ts files in lib/ |
| 40 | + const directoriesToProcess = [libDirectory] |
| 41 | + const tsFiles = [] |
| 42 | + while (directoriesToProcess.length > 0) { |
| 43 | + const directory = directoriesToProcess.pop() |
| 44 | + if (!fs.existsSync(directory)) { |
| 45 | + throw new Error("Directory doesn't exist:", directory) |
| 46 | + } |
| 47 | + |
| 48 | + const files = fs.readdirSync(directory) |
| 49 | + files.forEach((file) => { |
| 50 | + const filename = path.join(directory, file) |
| 51 | + const stat = fs.lstatSync(filename) |
| 52 | + if (stat.isDirectory()) { |
| 53 | + directoriesToProcess.push(filename) |
| 54 | + } else if (filename.endsWith('.ts') && !filename.endsWith('.d.ts')) { |
| 55 | + tsFiles.push(filename) |
| 56 | + console.log('Found .ts file:', filename) |
| 57 | + } |
| 58 | + }) |
| 59 | + } |
| 60 | + |
| 61 | + // Get paths of .js files to ignore |
| 62 | + const jsFilesToIgnore = tsFiles.map((filepath) => { |
| 63 | + // Cuts off `${libDirectory}/` |
| 64 | + const relativeTsPath = filepath.slice(libDirectory.length + 1) |
| 65 | + // Swaps .ts for .js file ending |
| 66 | + const relativeJsPath = relativeTsPath.slice(0, relativeTsPath.length - 3) + '.js' |
| 67 | + return relativeJsPath |
| 68 | + }) |
| 69 | + const jsFilesToIgnoreString = jsFilesToIgnore.join('\n') |
| 70 | + const libGitignorePath = path.join(libDirectory, '.gitignore') |
| 71 | + fs.writeFileSync(libGitignorePath, gitignoreHeader + jsFilesToIgnoreString + '\n') |
| 72 | + console.log('DONE') |
| 73 | + } else if (['help', '--help', '-h', undefined].includes(cliCommand)) { |
| 74 | + console.log(helpText) |
| 75 | + } else { |
| 76 | + console.log(`Unsupported command: ${cliCommand}`) |
| 77 | + console.log("Try running with 'help' to see supported commands.") |
| 78 | + process.exit(1) |
| 79 | + } |
| 80 | +} |
| 81 | + |
| 82 | +// Main script logic |
| 83 | +const cliCommand = process.argv[2] |
| 84 | +// Start the bash app's main function |
| 85 | +main(cliCommand) |
0 commit comments