40 Commits

Author SHA1 Message Date
aa1b61cfb3 chore: 2.0.3 버전 범프
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
v2.0.3
2026-05-20 22:14:57 +09:00
7209486a71 fix(watcher): 한글 NFD 파일 압축 해제 시 동일 파일 반복 변환 race condition 수정
- 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>
2026-05-20 22:06:46 +09:00
7889f8eb96 chore: 2.0.2 버전 범프
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
v2.0.2
2026-05-13 14:30:30 +09:00
8db9e64302 chore(deps): vite 5→6, electron-vite 2→3, vitest 1→4 업그레이드 — 나머지 보안 취약점 해결
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>
2026-05-13 11:41:00 +09:00
2d7d586be7 chore(deps): electron 35 → 39 업그레이드 — Dependabot 보안 취약점 17개 해결
use-after-free, AppleScript injection, IPC spoofing 등 high/medium/low
Electron 취약점을 모두 39.8.x 패치 버전으로 해결한다.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-13 11:22:40 +09:00
17a7a617fd fix(web): custom domain 대응 — base '/' 변경 및 CNAME 추가
Vite base를 '/NFD2NFC/'에서 '/'로 변경하고 web/public/CNAME을 추가해
nfd2nfc.pieroot.xyz에서 자산 404 및 배포 후 custom domain 초기화 문제를 수정한다.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-12 18:49:48 +09:00
6f44af3e4f fix(web): 드롭존 label에 display:block 추가 — 테두리 잘림 수정
label 요소는 기본 display:inline이라 content 너비만큼만 테두리가 그려짐.
display:block + width:100% 로 full-width 드롭존으로 수정.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-11 15:38:24 +09:00
51f99856cf fix(ci): configure-pages enablement: true 추가 — Pages 미활성화 시 자동 활성화
첫 배포 시 '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>
2026-05-11 15:17:03 +09:00
e967a0fbdb feat(web): GitHub Pages 기반 NFD→NFC 파일명 변환 웹앱 추가
설치 없이 브라우저에서 한글 파일명을 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>
2026-05-11 15:11:41 +09:00
aa772f7f97 Refactor code structure for improved readability and maintainability 2026-05-11 14:18:14 +09:00
8f2af73ed4 fix(ci): release 워크플로에 contents: write 권한 추가
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>
v2.0.1
2026-05-11 14:04:47 +09:00
a469c666fe fix(build): electron-builder publish 비활성화 및 explicit 플래그 적용
- package.json: "publish": "never" → null (이전 값은 "never" 이름의
  publisher provider를 찾으려 해 v2.0.0/v2.0.1 release 빌드가 실패함)
- release.yml: electron-builder에 --publish never 플래그를 명시적으로
  전달해 git tag 기반 implicit publishing(v27에서 제거 예정) 경고 제거

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-11 14:02:02 +09:00
4cbc044d15 perf(watcher): chokidar awaitWriteFinish 제거로 idle CPU 절감
100ms 주기 stat 폴링이 누적 CPU를 점유했음. 파일 이름만 다루는
정규화 도구이므로 안정화 대기가 불필요하며, recentlyRenamed TTL
맵이 이미 중복 이벤트를 막아준다.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-11 13:48:28 +09:00
2e3a9d1402 ci: release.yml 동작 수정 및 package.json publish never 설정
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>
v2.0.0
2026-05-09 16:05:13 +09:00
343fe004fe build: build:app을 독립 앱 빌드 타겟으로 분리
build:app: electron-vite build + electron-builder → 단독으로 .app/DMG 생성 가능.
build: build:cli + build:lib + build:app 순서로 재구성 (electron-builder 중복 제거).

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-09 15:58:38 +09:00
952e74de2f fix: npm tarball 빌드 경로 및 포함 파일 정정
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>
2026-05-09 15:55:36 +09:00
6fe306e7b1 fix: typecheck/lint 오류 수정
tsconfig.json: module ESNext로 변경, renderer 제외.
.eslintrc.cjs: varsIgnorePattern '^_' 추가.
store.ts: notificationIntervalSecs 기본값(30) 추가.
src/lib/index.ts: FilterOptions/ScanEntry를 올바른 소스 파일에서 import.
scanner.ts: 미사용 fs import 제거.
ipc.ts: 미사용 nanoid import 제거.
cli/index.ts: 미사용 argv 변수 void 처리, showHelp() → 메시지 출력으로 대체.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-09 15:50:25 +09:00
05ba9f3034 docs: README v2.0.0 재작성 + Makefile 신규 경로 반영
README: Breaking Change 안내, 트레이 팝오버/설정창/Auto-Manual/Undo 기능 설명,
새 CLI 명령(file/dir/디폴트), v2 라이브러리 API 추가.
Makefile: dist/mac-arm64/NFD2NFC.app 경로, clean 타겟 추가.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-09 15:45:07 +09:00
4b89a498f9 ci: release.yml 재작성 + publish.yml 추가
release.yml: Node 매트릭스 제거, Node 20.x 단일, actions v3→v4 업그레이드.
deprecated upload-release-asset@v1 → softprops/action-gh-release@v2.
단일 패키지 npm ci && npm run build 로 통합.
publish.yml: workflow_dispatch 수동 트리거 npm publish 추가.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-09 15:44:13 +09:00
2d3167cffe 레거시 디렉토리/스크립트 제거 (MACOS-APP, nfd2nfc, run.sh, run.bat)
단일 패키지 구조로 통합. 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>
2026-05-09 15:43:39 +09:00
46adced6c5 resources: 아이콘 자산을 electron-builder 표준 경로로 이전
MACOS-APP/build/icons/Macicon.icns → resources/icon.icns
MACOS-APP/build/icons/Macicon.iconset/ → resources/icon.iconset/
electron-builder buildResources: resources 설정과 일치.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-09 15:43:30 +09:00
1441a5c0b4 package.json: 단일 패키지 통합 (정체성 보존, dual main via extraMetadata)
name=@pieroot/nfd2nfc, appId=com.pieroot.nfd2nfc, productName=NFD2NFC 유지.
package.json main=out/lib/index.js (npm 라이브러리 진입점).
electron-builder extraMetadata.main=out/main/index.js (.app asar만 override).
react/react-dom는 devDependencies로 이동 (Vite renderer 번들에 포함).
files 필드로 npm tarball을 out/cli, out/lib, resources만으로 제한.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-09 15:42:51 +09:00
a24367c815 src/lib: 라이브러리 진입점 + 1.0.0 호환 shim
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>
2026-05-09 15:42:10 +09:00
6601c40bb4 src/cli: yargs 기반 CLI (file/dir 서브커맨드 + 디폴트 path)
file/dir 서브커맨드 외에 \$0 <path> 디폴트 커맨드 추가.
stat으로 파일/디렉토리 자동 감지 → 기존 v1 스타일 nfd2nfc <path> 형태 지원.
--recursive(-r), --dry-run(-n) 옵션.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-09 15:41:53 +09:00
08f1de7ea0 src/preload + src/renderer: contextBridge + React 19 popover/settings
preload/index.ts: window.api 노출 (dirs/watcher/undo/settings/events/app).
renderer/popover: 트레이 팝오버 (300×400, frameless, alwaysOnTop, blur시 자동 닫힘).
renderer/settings: 설정창 (720×560, 3탭: 디렉토리/Undo기록/일반).

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-09 15:41:18 +09:00
3dff470044 src/main: 트레이/감시자/저장소/IPC/알림 배치 (Electron 메인)
tray.ts: 트레이 아이콘, 팝오버 BrowserWindow 토글, 컨텍스트 메뉴.
watcher.ts: chokidar 감시, dedup TTL 2s, auto/manual 모드, 글로벌 일시정지.
store.ts: userData/store.json 영속화 (watchedDirs/settings/undoLog).
ipc.ts: 18개 IPC 채널 핸들러.
notifier.ts: interval 기반 알림 배치 처리 (알림 폭주 방지).
settings-window.ts: 설정창 BrowserWindow 라이프사이클.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-09 15:41:08 +09:00
4e92bb2690 src/core: 플랫폼 독립 정규화 로직 + Vitest 테스트
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>
2026-05-09 15:40:53 +09:00
8e67d25b3b v2 스캐폴드 추가 (tsconfig 4종, eslint, prettier, vitest)
TypeScript strict + electron-vite + Vitest 환경을 위한 설정 파일 추가.
tsconfig 4종: 베이스/cli/node(main+preload)/web(renderer) 역할 분담.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-09 15:39:01 +09:00
08b5538e49 GitHub Actions 워크플로우 업데이트: 빌드 프로세스 제거 및 릴리스 워크플로우 추가, package.json의 진입점 수정 v1.0.0 2024-12-18 03:43:47 +09:00
2bd1c05af3 preload.js 및 normalize_ko.js 파일 삭제, normalize.js 기능 개선 및 README 문서 업데이트 2024-12-18 02:51:41 +09:00
94059a0947 파일 이름 변환기 기능 추가: README 문서 작성 및 CLI 도구와 백그라운드 프로세스 구현 2024-12-18 02:35:22 +09:00
jung-geun
3f849808ac Create LICENSE 2024-12-17 03:03:30 +09:00
7afcf19178 README.md 추가 및 CLI 도구에 대한 사용법 설명: 파일 이름 변환기 기능 구현, 디렉토리 목록 가져오기 기능 추가 2024-12-17 02:57:18 +09:00
2794eb1c45 디렉토리 목록 업데이트 기능 추가: UI 개선 및 로그 메시지 현지화 2024-12-17 01:13:35 +09:00
40c2ecdd18 sqlite3 종속성 추가 및 UI 텍스트 영어로 변경 2024-12-16 23:40:30 +09:00
d5544dbc87 디렉토리 선택 및 제거 기능 추가: 선택된 디렉토리 목록 표시, 로그 기능 구현 2024-12-16 23:28:06 +09:00
776e2c9d82 Electron 애플리케이션 초기 설정: 메인 프로세스 및 프리로드 스크립트 추가, HTML 인터페이스 구현, 디렉토리 선택 및 감시 기능 추가 2024-12-16 23:08:23 +09:00
ea410d66f8 패키지 이름 변경 및 종속성 추가: nfd-to-nfc-converter에서 nfd2nfc로 변경, chokidar 및 readdirp 추가 2024-12-16 22:33:03 +09:00
24390231bc macOS 관련 파일 무시 규칙 추가 및 파일 이름 정규화 기능 개선 2024-12-16 22:17:47 +09:00
d8c15b6653 .gitignore 파일 추가 및 파일 이름 정규화 기능 구현 2024-12-16 20:05:22 +09:00