From f628c6727416d6beae4c5cac61e8144aafdd21c8 Mon Sep 17 00:00:00 2001 From: ktny Date: Sun, 6 Jul 2025 22:02:28 +0900 Subject: [PATCH] =?UTF-8?q?fix:=20npx=20ccstat=E5=AE=9F=E8=A1=8C=E3=82=A8?= =?UTF-8?q?=E3=83=A9=E3=83=BC=E3=82=92=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - dist/index.jsの相対パス問題を修正 (../ui/ → ./ui/) - ESMインポートパスで.js拡張子不足を修正 - ディレクトリインポートでindex.js不足を修正 - scripts/fix-esm-imports.jsを改良して包括的な修正機能を追加 これによりnpx @ktny/ccstatでの実行が正常に動作 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude --- scripts/fix-esm-imports.js | 42 ++++++++++++++++++++++++++++---------- 1 file changed, 31 insertions(+), 11 deletions(-) diff --git a/scripts/fix-esm-imports.js b/scripts/fix-esm-imports.js index 332fd34..23d34c1 100644 --- a/scripts/fix-esm-imports.js +++ b/scripts/fix-esm-imports.js @@ -28,17 +28,37 @@ async function findJSFiles(dir) { async function fixImportsInFile(filePath) { const content = await readFile(filePath, 'utf-8'); - - // Fix relative imports: add .js extension - const fixedContent = content - // Fix relative imports without extensions (starting with ./ or ../) - .replace(/from ['"](\\.{1,2}\/[^'"]*[^'"\/])['"];/g, "from '$1.js';") - // Fix relative imports from directory paths (add /index.js) - .replace(/from ['"](\\.{1,2}\/[^'"]*\/)['"];/g, "from '$1index.js';") - // Fix absolute-style imports that should be relative (starting with ../) - .replace(/from ['"](\.\.\/[^'"]*[^'"\/])['"];/g, "from '$1.js';") - // Fix double extensions - .replace(/\.js\.js/g, '.js'); + let fixedContent = content; + + // 1. First pass: Add .js extensions to relative imports + fixedContent = fixedContent + .replace(/from ['"](\\.\/[^'"]*[^'"\/\.])['"];/g, "from '$1.js';") + .replace(/from ['"](\.\.\/[^'"]*[^'"\/\.])['"];/g, "from '$1.js';"); + + // 2. Fix directory imports to use index.js + fixedContent = fixedContent + .replace(/from ['"](\\.{1,2}\/[^'"]*\/)['"];/g, "from '$1index.js';"); + + // 3. Fix specific known import issues + fixedContent = fixedContent + // core/parser directory import + .replace(/from ['"]\.\.\/core\/parser['"];/g, "from '../core/parser/index.js';") + .replace(/from ['"]\.\.\/core\/git['"];/g, "from '../core/git/index.js';") + // ui components without .js + .replace(/from ['"]\.\.\/ui\/([^'"\/]+)['"];/g, "from '../ui/$1.js';") + .replace(/from ['"]\.\/([^'"\/]+)['"];/g, "from './$1.js';"); + + // 4. Special fix for dist/index.js: convert ../ to ./ + if (filePath.endsWith('dist/index.js') || filePath.endsWith('dist\\index.js')) { + fixedContent = fixedContent + .replace(/from ['"]\.\.\/ui\//g, "from './ui/") + .replace(/from ['"]\.\.\/core\//g, "from './core/") + .replace(/from ['"]\.\.\/models\//g, "from './models/") + .replace(/from ['"]\.\.\/utils\//g, "from './utils/"); + } + + // 5. Clean up double extensions + fixedContent = fixedContent.replace(/\.js\.js/g, '.js'); if (content !== fixedContent) { await writeFile(filePath, fixedContent, 'utf-8');