#!/usr/bin/env node const { spawn } = require('child_process'); const path = require('path'); console.log('šŸ” TickTick MCP Server - Final TypeScript Check'); console.log('==============================================\n'); // Change to project directory const projectDir = '/Users/takashishibata/Desktop/creative-lab/mcp-research/ticktick-mcp-server'; process.chdir(projectDir); console.log(`šŸ“‚ Working directory: ${process.cwd()}\n`); function runCommand(command, args = []) { return new Promise((resolve, reject) => { console.log(`⚔ Executing: ${command} ${args.join(' ')}`); const child = spawn(command, args, { stdio: 'pipe', shell: true }); let stdout = ''; let stderr = ''; child.stdout.on('data', (data) => { stdout += data.toString(); }); child.stderr.on('data', (data) => { stderr += data.toString(); }); child.on('close', (code) => { resolve({ code, stdout, stderr }); }); child.on('error', (error) => { reject(error); }); }); } async function main() { try { // Step 1: TypeScript Version Check console.log('šŸ“‹ Step 1: TypeScript Version Check'); console.log('-----------------------------------'); const versionResult = await runCommand('npx', ['tsc', '--version']); console.log(`TypeScript Version: ${versionResult.stdout.trim()}`); console.log('āœ… Version check complete\n'); // Step 2: TypeScript Type Check (no emit) console.log('šŸ” Step 2: TypeScript Type Check (no emit)'); console.log('-------------------------------------------'); const typeCheckResult = await runCommand('npx', ['tsc', '--noEmit']); if (typeCheckResult.code === 0) { console.log('āœ… TypeScript type check: PASSED'); console.log(' No type errors found!'); } else { console.log('āŒ TypeScript type check: FAILED'); console.log(' Errors found:'); console.log(typeCheckResult.stderr); // Count and categorize errors const errorLines = typeCheckResult.stderr.split('\n').filter(line => line.includes('error TS')); console.log(`\nšŸ“Š Error Summary: ${errorLines.length} errors found`); } console.log(''); // Step 3: Full Build Test (only if type check passed) if (typeCheckResult.code === 0) { console.log('šŸ—ļø Step 3: Full Build Test'); console.log('---------------------------'); const buildResult = await runCommand('npm', ['run', 'build']); if (buildResult.code === 0) { console.log('āœ… Build: SUCCESS'); // Check build output const fs = require('fs'); try { const distExists = fs.existsSync('./dist'); const indexExists = fs.existsSync('./dist/index.js'); console.log(`šŸ“ dist directory: ${distExists ? 'āœ…' : 'āŒ'}`); console.log(`šŸ“„ index.js: ${indexExists ? 'āœ…' : 'āŒ'}`); if (distExists) { const distFiles = fs.readdirSync('./dist'); console.log(`šŸ“¦ Generated files: ${distFiles.length}`); distFiles.forEach(file => { console.log(` - ${file}`); }); } } catch (e) { console.log('āš ļø Could not check build output:', e.message); } } else { console.log('āŒ Build: FAILED'); console.log('Build errors:'); console.log(buildResult.stderr); } console.log(''); } else { console.log('ā­ļø Skipping build test due to type errors\n'); } // Step 4: Summary console.log('šŸ“Š Final Summary'); console.log('================'); console.log(`Type Check: ${typeCheckResult.code === 0 ? 'āœ… PASSED' : 'āŒ FAILED'}`); if (typeCheckResult.code === 0) { console.log('šŸŽ‰ TickTick MCP Server is ready for testing!'); console.log(''); console.log('Next steps:'); console.log(' 1. Test setup: node dist/index.js --setup'); console.log(' 2. Test demo mode: node dist/index.js --demo'); console.log(' 3. Publish to NPM (when ready)'); } else { console.log('šŸ”§ Please fix the type errors before proceeding.'); } console.log(''); } catch (error) { console.error('šŸ’„ Script error:', error); } } main();