Core Utilities
Core Utilities
Section titled “Core Utilities”Core utilities are the heart of the pjt tool, providing basic functions for working with files, Git and executing commands.
Module structure
Section titled “Module structure”Core utilities are organized in src/lib/:
src/lib/├── build-utils.ts # Utility for build processes├── cli-utils.ts # CLI helper functions├── command-executor.ts # Command execution├── completions.ts # Auto-completion├── errors.ts # Error handling├── fs.ts # File system operations├── git.ts # Git operations├── logger.ts # Logging└── types.ts # TypeScript typesFile system (fs.ts)
Section titled “File system (fs.ts)”Basic operations
Section titled “Basic operations”import { readFile, writeFile, removeFile } from 'pjt/lib/fs';
// Reading fileconst content = await readFile('package.json');console.log(content);
// Writing fileawait writeFile('config.json', JSON.stringify(config, null, 2));
// Removing fileawait removeFile('temp.txt');Working with directories
Section titled “Working with directories”import { listDir, createDir, removeDir, isEmptyDir } from 'pjt/lib/fs';
// Listing contentsconst files = await listDir('src/');console.log(files);
// Creating directoryawait createDir('dist/');
// Checking empty directoryconst empty = await isEmptyDir('empty-folder/');
// Recursive removalawait removeDir('temp/', { recursive: true });Git operations (git.ts)
Section titled “Git operations (git.ts)”Basic Git functions
Section titled “Basic Git functions”import { isGitRepo, getGitRoot, cleanIgnored } from 'pjt/lib/git';
// Checking if Git repoconst isRepo = await isGitRepo();if (!isRepo) throw new Error('Not a git repository');
// Getting root directoryconst root = await getGitRoot();console.log('Git root:', root);
// Cleaning ignored filesconst cleaned = await cleanIgnored();console.log(`Cleaned ${cleaned.length} files`);Advanced operations
Section titled “Advanced operations”import { getStatus, getIgnoredFiles } from 'pjt/lib/git';
// Repository statusconst status = await getStatus();console.log('Modified files:', status.modified);
// Ignored filesconst ignored = await getIgnoredFiles();console.log('Ignored files:', ignored);Command executor (command-executor.ts)
Section titled “Command executor (command-executor.ts)”Executing commands
Section titled “Executing commands”import { execCommand, execAsync } from 'pjt/lib/command-executor';
// Synchronous executionconst result = execCommand('ls -la');console.log(result.stdout);
// Asynchronous executionconst promise = execAsync('npm install');promise.then(result => console.log('Installed'));With options
Section titled “With options”// With timeoutconst result = await execAsync('slow-command', { timeout: 30000, cwd: '/tmp'});
// With environment variablesconst result = await execAsync('echo $MY_VAR', { env: { MY_VAR: 'hello' }});Logger (logger.ts)
Section titled “Logger (logger.ts)”Different logging levels
Section titled “Different logging levels”import { logger } from 'pjt/lib/logger';
// Basic logginglogger.info('Starting process...');logger.success('Process completed!');logger.error('Something went wrong');
// With contextlogger.info('Processing file', { file: 'config.json' });Custom logger
Section titled “Custom logger”import { createLogger } from 'pjt/lib/logger';
const customLogger = createLogger({ prefix: '[CUSTOM]', level: 'debug'});
customLogger.debug('Debug message');Error handling (errors.ts)
Section titled “Error handling (errors.ts)”Custom errors
Section titled “Custom errors”import { PJTError, ValidationError } from 'pjt/lib/errors';
// Throw custom errorthrow new PJTError('Something failed');
// Validation errorthrow new ValidationError('Invalid input', { field: 'email' });Error handling utility
Section titled “Error handling utility”import { handleError, isPJTError } from 'pjt/lib/errors';
try { riskyOperation();} catch (error) { if (isPJTError(error)) { logger.error(error.message); } else { handleError(error); }}CLI utilities (cli-utils.ts)
Section titled “CLI utilities (cli-utils.ts)”Parsing arguments
Section titled “Parsing arguments”import { parseArgs, validateArgs } from 'pjt/lib/cli-utils';
// Parsing CLI argumentsconst args = parseArgs(process.argv.slice(2));console.log(args);
// Validationconst validated = validateArgs(args, { required: ['input'], optional: ['output', 'verbose']});Help and version
Section titled “Help and version”import { showHelp, showVersion } from 'pjt/lib/cli-utils';
// Show helpshowHelp();
// Show versionshowVersion();Build utilities (build-utils.ts)
Section titled “Build utilities (build-utils.ts)”Build processes
Section titled “Build processes”import { build, cleanBuild } from 'pjt/lib/build-utils';
// Build projectawait build({ entry: 'src/index.ts', outDir: 'dist', format: 'esm'});
// Clean build filesawait cleanBuild('dist/');Types (types.ts)
Section titled “Types (types.ts)”Basic types
Section titled “Basic types”import type { FileInfo, GitStatus, CommandResult} from 'pjt/lib/types';
interface FileInfo { path: string; size: number; mtime: Date;}
interface GitStatus { modified: string[]; added: string[]; deleted: string[];}
interface CommandResult { stdout: string; stderr: string; code: number;}Best practices
Section titled “Best practices”1. Error handling
Section titled “1. Error handling”Always use try/catch with async operations.
2. Logging
Section titled “2. Logging”Use logger for consistent logging.
3. Validation
Section titled “3. Validation”Validate inputs before processing.
4. Types
Section titled “4. Types”Use TypeScript types for type safety.
Testing utilities
Section titled “Testing utilities”For testing core functions:
import { mockFs, mockGit } from 'pjt/lib/test-utils';
// Mock file systemconst mock = mockFs({ 'package.json': '{"name": "test"}'});
// Mock Gitconst gitMock = mockGit({ isRepo: true, status: { modified: [] }});