fsHelpers.ts 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. import * as fs from 'node:fs';
  2. import * as path from 'node:path';
  3. import { Language } from './getLanguage';
  4. import { logErrorAndExit } from './getLogs';
  5. export function createOrEmptyTargetDirectory(
  6. language: Language,
  7. targetDirectoryName: string,
  8. shouldOverride: boolean
  9. ) {
  10. const targetDirectory = path.join(process.cwd(), targetDirectoryName);
  11. if (!fs.existsSync(targetDirectory)) {
  12. fs.mkdirSync(targetDirectory, { recursive: true });
  13. } else if (shouldOverride) {
  14. emptyGitDirectory(targetDirectory);
  15. } else {
  16. logErrorAndExit(
  17. language.errors.cannotOverrideDirectory.replace(
  18. '$targetDirectory',
  19. targetDirectoryName
  20. )
  21. );
  22. }
  23. }
  24. export function emptyGitDirectory(directory: string) {
  25. traverseGitDirectory(directory, (fullpath) => {
  26. fs.rmSync(fullpath, { recursive: true });
  27. });
  28. }
  29. export function traverseGitDirectory(
  30. directory: string,
  31. callback: (dir: string) => void
  32. ) {
  33. for (const filename of fs.readdirSync(directory)) {
  34. if (filename === '.git') continue;
  35. const fullpath = path.resolve(directory, filename);
  36. if (fs.lstatSync(fullpath).isDirectory()) {
  37. traverseGitDirectory(fullpath, callback);
  38. callback(fullpath);
  39. continue;
  40. }
  41. callback(fullpath);
  42. }
  43. }