- inFlight Set으로 handlePath 진입 즉시 경로를 잠가 burst add 이벤트가
몰려올 때 첫 번째 처리가 끝나기 전 두 번째 호출을 즉시 차단
- recentlyRenamed 키를 NFC 정규화로 통일하고 oldPath/newPath 양쪽 등록
(chokidar가 NFD·NFC 변형 중 어느 쪽으로 이벤트를 보내도 TTL 가드 적용)
- chokidar awaitWriteFinish(stabilityThreshold 300ms) 추가로 압축 해제
중 부분 쓰기 단계의 add 폭주를 상류에서 차단
- race condition 회귀 방지를 위한 watcher 단위 테스트 3개 추가
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Vite path traversal(CVE) 및 esbuild dev-server SSRF 취약점을 Vite 6.4.2,
esbuild 0.25 업그레이드로 해결한다. @vitejs/plugin-react 5.x, vitest 4.x 동반 업그레이드.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
use-after-free, AppleScript injection, IPC spoofing 등 high/medium/low
Electron 취약점을 모두 39.8.x 패치 버전으로 해결한다.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Vite base를 '/NFD2NFC/'에서 '/'로 변경하고 web/public/CNAME을 추가해
nfd2nfc.pieroot.xyz에서 자산 404 및 배포 후 custom domain 초기화 문제를 수정한다.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
label 요소는 기본 display:inline이라 content 너비만큼만 테두리가 그려짐.
display:block + width:100% 로 full-width 드롭존으로 수정.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
첫 배포 시 'Get Pages site failed. Not Found' 오류 수정.
actions/configure-pages@v5 의 enablement: true 옵션으로 repo Pages 설정이
없을 때 자동으로 GitHub Actions source 로 활성화.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
설치 없이 브라우저에서 한글 파일명을 NFC 로 정규화할 수 있는 웹 도구.
파일/폴더 드롭 → 모든 path segment 를 독립적으로 NFC 변환 → fflate 스트리밍
ZIP 다운로드. UTF-8 flag(bit 11) 자동 설정으로 Windows Explorer 에서 정상 표시.
기존 src/core/filter.ts 의 shouldNormalize 를 그대로 재사용. 빌드는 web/
디렉토리의 별도 Vite 설정으로 격리되어 Electron 빌드에 영향 없음.
main 브랜치 push 시 .github/workflows/pages.yml 이
https://jung-geun.github.io/NFD2NFC/ 로 자동 배포.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
DMG asset 업로드 시 softprops/action-gh-release가
"Resource not accessible by integration" 오류로 실패. 기본 GITHUB_TOKEN에
release 수정 권한이 없어 발생.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
100ms 주기 stat 폴링이 누적 CPU를 점유했음. 파일 이름만 다루는
정규화 도구이므로 안정화 대기가 불필요하며, recentlyRenamed TTL
맵이 이미 중복 이벤트를 막아준다.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
release.yml:
- setup-node cache: 'npm' 추가로 설치 속도 향상
- CSC_IDENTITY_AUTO_DISCOVERY=false: code signing 없이 DMG 빌드 가능
- List dist 단계 추가 (디버깅용)
- softprops/action-gh-release token 명시, files 멀티라인 형식
package.json:
- build.publish: "never" 추가 (electron-builder 자체 auto-publish 방지)
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
tsconfig.cli.json + tsconfig.lib.json outDir을 out/cli→out, out/lib→out으로 변경.
bin out/cli/index.js, main out/lib/index.js 경로와 일치시킴.
files에서 resources/** 제거 (아이콘 파일 npm 사용자 불필요).
files에 out/core/** 추가, !out/core/__tests__/**로 테스트 파일 제외.
tarball 크기 1.8MB → 8.4KB.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
단일 패키지 구조로 통합. MACOS-APP/(vanilla Electron 1.0), nfd2nfc/(CLI+lib v1),
OS-detecting launcher 스크립트(run.sh/run.bat) 제거.
아이콘 자산은 커밋 8에서 resources/로 이전 완료.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
normalizeToNFC/normalizeToNFD — v1 require('@pieroot/nfd2nfc') 호환 유지.
신규 API: normalizeEntry, scan, shouldNormalize + 타입 export.
tsconfig.lib.json: declaration: true, out/lib/에 .d.ts 생성.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
file/dir 서브커맨드 외에 \$0 <path> 디폴트 커맨드 추가.
stat으로 파일/디렉토리 자동 감지 → 기존 v1 스타일 nfd2nfc <path> 형태 지원.
--recursive(-r), --dry-run(-n) 옵션.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
filter.ts: 한글 자모 코드포인트 정확 필터 (U+1100-11FF, U+A960-A97F, U+D7B0-D7FF).
normalizer.ts: APFS normalization-insensitive 정확 처리 (inode 비교).
scanner.ts: 재귀 스캔 결과 깊이 역순 정렬 (자식 먼저 rename).
types.ts: WatchedDir, RenameResult, ActivityEvent, AppSchema 등 공유 타입.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
TypeScript strict + electron-vite + Vitest 환경을 위한 설정 파일 추가.
tsconfig 4종: 베이스/cli/node(main+preload)/web(renderer) 역할 분담.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>