feat(engine): Pagination 기능을 가진 CSM Dictionary Builder 구현#917
Conversation
- Add buildPaginatedCSMDict function with cursor-based pagination - Support perPage parameter to control page size - Implement lastCommitId cursor for next page navigation - Add comprehensive test coverage (8 test cases) - Extract buildPRDict utility function to reduce duplication - Export buildPaginatedCSMDict from package entry point The new function enables efficient lazy loading of CSM nodes for large repositories, improving performance and memory usage. Related: #916 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
- Extract buildCSMNodesWithPR to eliminate code duplication - Add comprehensive JSDoc documentation with examples - Improve validation consistency across functions - Enhance variable naming (prDict, baseStem) - Add stemDict.size validation to buildPaginatedCSMDict This refactoring improves maintainability and reusability while preserving all external behavior. All tests pass. Related: #916 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
|
아, 제가 pagination을 잘 이해 못 한것 같은데
|
=> Stem 을 이미 만들고 perPage 만큼 CSMDict를 만들어서 보여주기 때문에 CSMNode를 만들다가 중간에 잘리는 케이스는 없을 것이라고 생각했습니다! |
commit을 10개씩 자르면, |
=> @ytaek CSMNode는 다 만들어진 Stem을 기준으로 만들어서 잘릴 일이 없을 것 같은데 이 내용도 혹시 일요일에 설명 해주실 수 있으실까요?? |
ytaek
left a comment
There was a problem hiding this comment.
pagination 기능 확인했습니다!!!! 심플한 방법이 좋은 것 같아요!! LGGGGTM!
🎯 목적
대규모 저장소에서 효율적인 지연 로딩(lazy loading)을 위해 커서 기반 페이지네이션을 지원하는 CSM Dictionary Builder를 구현합니다.
📋 주요 변경사항
1.
buildPaginatedCSMDict함수 추가lastCommitId를 커서로 사용하여 다음 페이지 탐색perPage파라미터로 한 번에 로드할 커밋 수 조절buildCSMDict와 동일하게 Pull Request 정보 통합2. 코드 품질 개선 (리팩토링)
buildPRDict유틸리티 함수 추출buildCSMNodesWithPR함수 추출로 공통 로직 공유3. 테스트 커버리지 강화
csm.spec.ts)4. 패키지 엔트리포인트 업데이트
buildPaginatedCSMDict를index.ts에서 export📊 영향 범위
csm.ts: +90줄 (새 함수 및 리팩토링)csm.spec.ts: +148줄 (테스트 추가)index.ts: +2줄 (export 추가)buildCSMDict동작 변경 없음)🚀 성능 개선
📝 API 사용 예시
✅ 체크리스트
buildCSMDict동작 유지 확인🔗 관련 이슈
📚 기술적 세부사항
페이지네이션 로직
lastCommitId가 없으면 startIndex = 0 (첫 페이지)lastCommitId가 있으면 해당 커밋의 다음 인덱스부터 시작perPage개수만큼 slice하여 페이지 노드 추출에러 처리
perPage <= 0: "perPage must be greater than 0"stemDict.size === 0: "no stem"baseStem이 없음: "no master-stem"lastCommitId: "Invalid lastCommitId"🔄 마이그레이션 가이드
기존 코드는 변경 없이 동작합니다. 페이지네이션이 필요한 경우에만 새 함수를 사용하세요: