jell-utils 0.0.18 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude/commands/tm/add-dependency.md +58 -0
- package/.claude/commands/tm/add-subtask.md +79 -0
- package/.claude/commands/tm/add-task.md +81 -0
- package/.claude/commands/tm/analyze-complexity.md +124 -0
- package/.claude/commands/tm/analyze-project.md +100 -0
- package/.claude/commands/tm/auto-implement-tasks.md +100 -0
- package/.claude/commands/tm/command-pipeline.md +80 -0
- package/.claude/commands/tm/complexity-report.md +120 -0
- package/.claude/commands/tm/convert-task-to-subtask.md +74 -0
- package/.claude/commands/tm/expand-all-tasks.md +52 -0
- package/.claude/commands/tm/expand-task.md +52 -0
- package/.claude/commands/tm/fix-dependencies.md +82 -0
- package/.claude/commands/tm/help.md +101 -0
- package/.claude/commands/tm/init-project-quick.md +49 -0
- package/.claude/commands/tm/init-project.md +53 -0
- package/.claude/commands/tm/install-taskmaster.md +118 -0
- package/.claude/commands/tm/learn.md +106 -0
- package/.claude/commands/tm/list-tasks-by-status.md +42 -0
- package/.claude/commands/tm/list-tasks-with-subtasks.md +30 -0
- package/.claude/commands/tm/list-tasks.md +46 -0
- package/.claude/commands/tm/next-task.md +69 -0
- package/.claude/commands/tm/parse-prd-with-research.md +51 -0
- package/.claude/commands/tm/parse-prd.md +52 -0
- package/.claude/commands/tm/project-status.md +67 -0
- package/.claude/commands/tm/quick-install-taskmaster.md +23 -0
- package/.claude/commands/tm/remove-all-subtasks.md +94 -0
- package/.claude/commands/tm/remove-dependency.md +65 -0
- package/.claude/commands/tm/remove-subtask.md +87 -0
- package/.claude/commands/tm/remove-subtasks.md +89 -0
- package/.claude/commands/tm/remove-task.md +110 -0
- package/.claude/commands/tm/setup-models.md +52 -0
- package/.claude/commands/tm/show-task.md +85 -0
- package/.claude/commands/tm/smart-workflow.md +58 -0
- package/.claude/commands/tm/sync-readme.md +120 -0
- package/.claude/commands/tm/tm-main.md +147 -0
- package/.claude/commands/tm/to-cancelled.md +58 -0
- package/.claude/commands/tm/to-deferred.md +50 -0
- package/.claude/commands/tm/to-done.md +47 -0
- package/.claude/commands/tm/to-in-progress.md +39 -0
- package/.claude/commands/tm/to-pending.md +35 -0
- package/.claude/commands/tm/to-review.md +43 -0
- package/.claude/commands/tm/update-single-task.md +122 -0
- package/.claude/commands/tm/update-task.md +75 -0
- package/.claude/commands/tm/update-tasks-from-id.md +111 -0
- package/.claude/commands/tm/validate-dependencies.md +72 -0
- package/.claude/commands/tm/view-models.md +52 -0
- package/.claude/settings.local.json +30 -0
- package/.cursor/commands/tm/add-dependency.md +55 -0
- package/.cursor/commands/tm/add-subtask.md +76 -0
- package/.cursor/commands/tm/add-task.md +78 -0
- package/.cursor/commands/tm/analyze-complexity.md +121 -0
- package/.cursor/commands/tm/analyze-project.md +97 -0
- package/.cursor/commands/tm/auto-implement-tasks.md +97 -0
- package/.cursor/commands/tm/command-pipeline.md +77 -0
- package/.cursor/commands/tm/complexity-report.md +117 -0
- package/.cursor/commands/tm/convert-task-to-subtask.md +71 -0
- package/.cursor/commands/tm/expand-all-tasks.md +51 -0
- package/.cursor/commands/tm/expand-task.md +49 -0
- package/.cursor/commands/tm/fix-dependencies.md +81 -0
- package/.cursor/commands/tm/help.md +98 -0
- package/.cursor/commands/tm/init-project-quick.md +46 -0
- package/.cursor/commands/tm/init-project.md +50 -0
- package/.cursor/commands/tm/install-taskmaster.md +117 -0
- package/.cursor/commands/tm/learn.md +103 -0
- package/.cursor/commands/tm/list-tasks-by-status.md +39 -0
- package/.cursor/commands/tm/list-tasks-with-subtasks.md +29 -0
- package/.cursor/commands/tm/list-tasks.md +43 -0
- package/.cursor/commands/tm/next-task.md +66 -0
- package/.cursor/commands/tm/parse-prd-with-research.md +48 -0
- package/.cursor/commands/tm/parse-prd.md +49 -0
- package/.cursor/commands/tm/project-status.md +64 -0
- package/.cursor/commands/tm/quick-install-taskmaster.md +22 -0
- package/.cursor/commands/tm/remove-all-subtasks.md +93 -0
- package/.cursor/commands/tm/remove-dependency.md +62 -0
- package/.cursor/commands/tm/remove-subtask.md +84 -0
- package/.cursor/commands/tm/remove-subtasks.md +86 -0
- package/.cursor/commands/tm/remove-task.md +107 -0
- package/.cursor/commands/tm/setup-models.md +51 -0
- package/.cursor/commands/tm/show-task.md +82 -0
- package/.cursor/commands/tm/smart-workflow.md +55 -0
- package/.cursor/commands/tm/sync-readme.md +117 -0
- package/.cursor/commands/tm/tm-main.md +146 -0
- package/.cursor/commands/tm/to-cancelled.md +55 -0
- package/.cursor/commands/tm/to-deferred.md +47 -0
- package/.cursor/commands/tm/to-done.md +44 -0
- package/.cursor/commands/tm/to-in-progress.md +36 -0
- package/.cursor/commands/tm/to-pending.md +32 -0
- package/.cursor/commands/tm/to-review.md +40 -0
- package/.cursor/commands/tm/update-single-task.md +119 -0
- package/.cursor/commands/tm/update-task.md +72 -0
- package/.cursor/commands/tm/update-tasks-from-id.md +108 -0
- package/.cursor/commands/tm/validate-dependencies.md +71 -0
- package/.cursor/commands/tm/view-models.md +51 -0
- package/.cursor/mcp.json +20 -0
- package/.cursor/rules/cursor_rules.mdc +53 -0
- package/.cursor/rules/self_improve.mdc +72 -0
- package/.cursor/rules/taskmaster/dev_workflow.mdc +424 -0
- package/.cursor/rules/taskmaster/taskmaster.mdc +573 -0
- package/.env.example +12 -0
- package/.gemini/commands/tm/add-dependency.toml +58 -0
- package/.gemini/commands/tm/add-subtask.toml +79 -0
- package/.gemini/commands/tm/add-task.toml +81 -0
- package/.gemini/commands/tm/analyze-complexity.toml +124 -0
- package/.gemini/commands/tm/analyze-project.toml +100 -0
- package/.gemini/commands/tm/auto-implement-tasks.toml +100 -0
- package/.gemini/commands/tm/command-pipeline.toml +80 -0
- package/.gemini/commands/tm/complexity-report.toml +120 -0
- package/.gemini/commands/tm/convert-task-to-subtask.toml +74 -0
- package/.gemini/commands/tm/expand-all-tasks.toml +54 -0
- package/.gemini/commands/tm/expand-task.toml +52 -0
- package/.gemini/commands/tm/fix-dependencies.toml +84 -0
- package/.gemini/commands/tm/help.toml +101 -0
- package/.gemini/commands/tm/init-project-quick.toml +49 -0
- package/.gemini/commands/tm/init-project.toml +53 -0
- package/.gemini/commands/tm/install-taskmaster.toml +120 -0
- package/.gemini/commands/tm/learn.toml +106 -0
- package/.gemini/commands/tm/list-tasks-by-status.toml +42 -0
- package/.gemini/commands/tm/list-tasks-with-subtasks.toml +32 -0
- package/.gemini/commands/tm/list-tasks.toml +46 -0
- package/.gemini/commands/tm/next-task.toml +69 -0
- package/.gemini/commands/tm/parse-prd-with-research.toml +51 -0
- package/.gemini/commands/tm/parse-prd.toml +52 -0
- package/.gemini/commands/tm/project-status.toml +67 -0
- package/.gemini/commands/tm/quick-install-taskmaster.toml +25 -0
- package/.gemini/commands/tm/remove-all-subtasks.toml +96 -0
- package/.gemini/commands/tm/remove-dependency.toml +65 -0
- package/.gemini/commands/tm/remove-subtask.toml +87 -0
- package/.gemini/commands/tm/remove-subtasks.toml +89 -0
- package/.gemini/commands/tm/remove-task.toml +110 -0
- package/.gemini/commands/tm/setup-models.toml +54 -0
- package/.gemini/commands/tm/show-task.toml +85 -0
- package/.gemini/commands/tm/smart-workflow.toml +58 -0
- package/.gemini/commands/tm/sync-readme.toml +120 -0
- package/.gemini/commands/tm/tm-main.toml +149 -0
- package/.gemini/commands/tm/to-cancelled.toml +58 -0
- package/.gemini/commands/tm/to-deferred.toml +50 -0
- package/.gemini/commands/tm/to-done.toml +47 -0
- package/.gemini/commands/tm/to-in-progress.toml +39 -0
- package/.gemini/commands/tm/to-pending.toml +35 -0
- package/.gemini/commands/tm/to-review.toml +43 -0
- package/.gemini/commands/tm/update-single-task.toml +122 -0
- package/.gemini/commands/tm/update-task.toml +75 -0
- package/.gemini/commands/tm/update-tasks-from-id.toml +111 -0
- package/.gemini/commands/tm/validate-dependencies.toml +74 -0
- package/.gemini/commands/tm/view-models.toml +54 -0
- package/.gemini/settings.json +20 -0
- package/.mcp.json +15 -0
- package/.releaserc.json +115 -0
- package/.taskmaster/CLAUDE.md +435 -0
- package/.taskmaster/config.json +44 -0
- package/.taskmaster/docs/prd.txt +584 -0
- package/.taskmaster/state.json +6 -0
- package/.taskmaster/tasks/tasks.json +304 -0
- package/.taskmaster/templates/example_prd.txt +47 -0
- package/.taskmaster/templates/example_prd_rpg.txt +511 -0
- package/CLAUDE.md +5 -0
- package/README.md +551 -0
- package/coverage/clover.xml +412 -0
- package/coverage/coverage-final.json +2 -0
- package/coverage/lcov-report/base.css +224 -0
- package/coverage/lcov-report/block-navigation.js +87 -0
- package/coverage/lcov-report/favicon.png +0 -0
- package/coverage/lcov-report/index.html +116 -0
- package/coverage/lcov-report/index.js.html +2884 -0
- package/coverage/lcov-report/prettify.css +1 -0
- package/coverage/lcov-report/prettify.js +2 -0
- package/coverage/lcov-report/sort-arrow-sprite.png +0 -0
- package/coverage/lcov-report/sorter.js +196 -0
- package/coverage/lcov.info +896 -0
- package/internal-docs/CLAUDE.md +139 -0
- package/internal-docs/DEPLOYMENT.md +351 -0
- package/internal-docs/NPM_DEPLOYMENT_GUIDE.md +203 -0
- package/internal-docs/OBSIDIAN_PROJECT_PROMPT.md +302 -0
- package/internal-docs/TEST_RESULTS.md +153 -0
- package/internal-docs/TEST_SIMULATION.md +27 -0
- package/lib/index.d.ts +226 -39
- package/lib/index.js +767 -121
- package/package.json +54 -17
|
@@ -0,0 +1,302 @@
|
|
|
1
|
+
# jell-utils.js - Obsidian 프로젝트 문서
|
|
2
|
+
|
|
3
|
+
## 프로젝트 개요
|
|
4
|
+
|
|
5
|
+
**프로젝트명**: jell-utils
|
|
6
|
+
**버전**: 0.1.0
|
|
7
|
+
**타입**: TypeScript 기반 NPM 패키지
|
|
8
|
+
**목적**: 개인용 JavaScript/TypeScript 유틸리티 함수 라이브러리
|
|
9
|
+
**저장소**: https://github.com/jellive/jell-utils.js
|
|
10
|
+
**NPM**: https://www.npmjs.com/package/jell-utils
|
|
11
|
+
**라이선스**: MIT
|
|
12
|
+
**작성자**: Jell <jellive7@gmail.com>
|
|
13
|
+
|
|
14
|
+
## 프로젝트 상태
|
|
15
|
+
|
|
16
|
+
- ✅ **배포 상태**: 활성 (npm에 배포됨)
|
|
17
|
+
- ✅ **테스트**: 50개 테스트 케이스, 79.67% 커버리지
|
|
18
|
+
- ✅ **빌드**: TypeScript → JavaScript 컴파일
|
|
19
|
+
- ✅ **품질 관리**: ESLint, Prettier 적용
|
|
20
|
+
- ✅ **CI/CD**: GitHub Actions (semantic-release)
|
|
21
|
+
|
|
22
|
+
## 핵심 기능 카테고리
|
|
23
|
+
|
|
24
|
+
### 1. 한국어 관련 기능
|
|
25
|
+
|
|
26
|
+
- `isKorean(message: string)`: 한글 문자 포함 여부 검사
|
|
27
|
+
- `isBusinessNumber(businessNumber: string)`: 사업자등록번호 유효성 검증 (체크섬 알고리즘)
|
|
28
|
+
- `chosungSearch(str: string, search: string)`: 한글 초성 검색 (예: "ㄱㄴㄷ"로 "가나다" 검색)
|
|
29
|
+
- `getKoreanDate(dateString, isYear)`: 한국식 날짜 포맷 (예: "3월 15일", "2024년 3월 15일")
|
|
30
|
+
|
|
31
|
+
### 2. 문자열 처리
|
|
32
|
+
|
|
33
|
+
- `parseTag(txt: string)`: HTML 엔티티 디코딩 (< → <)
|
|
34
|
+
- `toCamelCase(txt: string)`: snake_case → camelCase 변환
|
|
35
|
+
- `toSnakeCase(txt: string)`: 일반 문자열 → snake_case 변환
|
|
36
|
+
- `toTitleCase(txt: string)`: Title Case 변환 (첫 글자 대문자)
|
|
37
|
+
- `toText(txt: string)`: HTML <br> → \n 변환
|
|
38
|
+
- `toHtml(txt: string)`: \n → <br> 변환
|
|
39
|
+
- `clearTag(txt: string, preserveErrorTags)`: XSS 방지하며 HTML 태그 제거
|
|
40
|
+
- `replaceBetween(str, txt, startIndex, endIndex)`: 인덱스 기반 문자열 교체
|
|
41
|
+
- `extractNumbers(str: string)`: 문자열에서 숫자만 추출
|
|
42
|
+
- `maskString(str, visibleStart, visibleEnd, maskChar)`: 민감정보 마스킹 (예: 카드번호)
|
|
43
|
+
- `getFileExtension(filename: string)`: 파일 확장자 추출
|
|
44
|
+
|
|
45
|
+
### 3. 숫자 및 시간 파싱
|
|
46
|
+
|
|
47
|
+
- `parseNumber(target: string, defaultValue: number, isFloat)`: 문자열을 숫자로 안전하게 파싱
|
|
48
|
+
- `parseTime(target: string, defaultValue: number)`: 시간 문자열 파싱 (MM:SS, HH:MM:SS)
|
|
49
|
+
|
|
50
|
+
### 4. 날짜 처리
|
|
51
|
+
|
|
52
|
+
- `getNowDate()`: 현재 시간을 datetime 포맷으로 반환
|
|
53
|
+
- `formatDate(date)`: yyyy-mm-dd 포맷으로 변환
|
|
54
|
+
- `calDDay(date)`: D-day 계산
|
|
55
|
+
- `dateDiff(date1, date2)`: 두 날짜 차이 계산 (일/시간/분/초 객체 반환)
|
|
56
|
+
|
|
57
|
+
### 5. 객체 조작
|
|
58
|
+
|
|
59
|
+
- `clone<T>(obj: T)`: 깊은 복사 (structuredClone 또는 JSON fallback)
|
|
60
|
+
- `getByPath<T>(obj, path, defaultValue)`: 경로 문자열로 중첩 객체 값 가져오기 (예: 'user.profile.name')
|
|
61
|
+
- `setByPath(obj, path, value)`: 경로 문자열로 중첩 객체 값 설정
|
|
62
|
+
- `deepMerge<T>(target, source)`: 객체 깊은 병합
|
|
63
|
+
- `objectToQueryString(obj)`: 객체를 URL 쿼리 스트링으로 변환
|
|
64
|
+
|
|
65
|
+
### 6. 배열 조작
|
|
66
|
+
|
|
67
|
+
- `equalArrays(a, b)`: 배열 비교 (얕은 비교)
|
|
68
|
+
- `groupBy<T>(array, key)`: 배열을 특정 키로 그룹화
|
|
69
|
+
- `sortBy<T>(array, key, order)`: 객체 배열 정렬 (asc/desc)
|
|
70
|
+
|
|
71
|
+
### 7. 비동기 처리
|
|
72
|
+
|
|
73
|
+
- `retry<T>(fn, maxRetries, delay)`: exponential backoff로 비동기 함수 재시도
|
|
74
|
+
|
|
75
|
+
### 8. 브라우저 유틸리티
|
|
76
|
+
|
|
77
|
+
- `isiOS()`: iOS 기기 감지 (User Agent 기반)
|
|
78
|
+
|
|
79
|
+
## 기술 스택
|
|
80
|
+
|
|
81
|
+
### 언어 및 런타임
|
|
82
|
+
|
|
83
|
+
- TypeScript 5.2.2
|
|
84
|
+
- Node.js (ES6+)
|
|
85
|
+
|
|
86
|
+
### 개발 도구
|
|
87
|
+
|
|
88
|
+
- **빌드**: TypeScript Compiler (tsc)
|
|
89
|
+
- **테스트**: Jest 29.7.0 + ts-jest
|
|
90
|
+
- **린트**: ESLint + @typescript-eslint
|
|
91
|
+
- **포맷팅**: Prettier
|
|
92
|
+
- **CI/CD**: semantic-release + GitHub Actions
|
|
93
|
+
|
|
94
|
+
### 의존성 관리
|
|
95
|
+
|
|
96
|
+
- npm (주)
|
|
97
|
+
- yarn (부)
|
|
98
|
+
|
|
99
|
+
## 프로젝트 구조
|
|
100
|
+
|
|
101
|
+
```
|
|
102
|
+
jell-utils.js/
|
|
103
|
+
├── src/
|
|
104
|
+
│ └── index.ts # 메인 소스 파일 (모든 유틸 함수)
|
|
105
|
+
├── lib/
|
|
106
|
+
│ ├── index.js # 컴파일된 JavaScript
|
|
107
|
+
│ └── index.d.ts # TypeScript 타입 정의
|
|
108
|
+
├── __tests__/
|
|
109
|
+
│ ├── korean.test.ts # 한국어 관련 테스트
|
|
110
|
+
│ ├── string.test.ts # 문자열 처리 테스트
|
|
111
|
+
│ ├── number.test.ts # 숫자/시간 파싱 테스트
|
|
112
|
+
│ ├── date.test.ts # 날짜 처리 테스트
|
|
113
|
+
│ ├── object.test.ts # 객체 조작 테스트
|
|
114
|
+
│ ├── array.test.ts # 배열 조작 테스트
|
|
115
|
+
│ └── async.test.ts # 비동기 처리 테스트
|
|
116
|
+
├── coverage/ # 테스트 커버리지 리포트
|
|
117
|
+
├── .github/workflows/ # GitHub Actions CI/CD
|
|
118
|
+
├── package.json
|
|
119
|
+
├── tsconfig.json
|
|
120
|
+
├── jestconfig.json
|
|
121
|
+
└── .npmrc # npm 인증 토큰 (gitignore)
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
## 개발 워크플로우
|
|
125
|
+
|
|
126
|
+
### 로컬 개발
|
|
127
|
+
|
|
128
|
+
```bash
|
|
129
|
+
# 의존성 설치
|
|
130
|
+
npm install
|
|
131
|
+
|
|
132
|
+
# 빌드
|
|
133
|
+
npm run build
|
|
134
|
+
|
|
135
|
+
# 테스트
|
|
136
|
+
npm test
|
|
137
|
+
npm run test:coverage
|
|
138
|
+
|
|
139
|
+
# 린트
|
|
140
|
+
npm run lint
|
|
141
|
+
npm run lint:fix
|
|
142
|
+
|
|
143
|
+
# 포맷팅
|
|
144
|
+
npm run format
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
### 배포 프로세스
|
|
148
|
+
|
|
149
|
+
```bash
|
|
150
|
+
# 1. 변경사항 커밋
|
|
151
|
+
git add .
|
|
152
|
+
git commit -m "feat: new feature description"
|
|
153
|
+
git push
|
|
154
|
+
|
|
155
|
+
# 2. 버전 업데이트
|
|
156
|
+
npm version patch # 버그 수정
|
|
157
|
+
npm version minor # 새 기능
|
|
158
|
+
npm version major # Breaking changes
|
|
159
|
+
|
|
160
|
+
# 3. 배포 (자동으로 test + lint + build 실행)
|
|
161
|
+
npm publish
|
|
162
|
+
```
|
|
163
|
+
|
|
164
|
+
### Git Workflow
|
|
165
|
+
|
|
166
|
+
- **브랜치**: master (메인 브랜치)
|
|
167
|
+
- **커밋 컨벤션**: Conventional Commits
|
|
168
|
+
- `feat:` - 새 기능 (MINOR)
|
|
169
|
+
- `fix:` - 버그 수정 (PATCH)
|
|
170
|
+
- `docs:` - 문서 변경
|
|
171
|
+
- `chore:` - 빌드/설정 변경
|
|
172
|
+
- `BREAKING CHANGE:` - Breaking changes (MAJOR)
|
|
173
|
+
|
|
174
|
+
## 품질 관리
|
|
175
|
+
|
|
176
|
+
### 테스트 커버리지
|
|
177
|
+
|
|
178
|
+
- **Statements**: 79.67%
|
|
179
|
+
- **Branch**: 73.38%
|
|
180
|
+
- **Functions**: 88.88%
|
|
181
|
+
- **Lines**: 82.81%
|
|
182
|
+
- **총 테스트**: 50개 (모두 통과)
|
|
183
|
+
|
|
184
|
+
### 자동화된 검증
|
|
185
|
+
|
|
186
|
+
- `prepublishOnly`: 배포 전 test + lint 자동 실행
|
|
187
|
+
- `prepare`: 빌드 전 자동 실행
|
|
188
|
+
- GitHub Actions: PR 및 push 시 CI 자동 실행
|
|
189
|
+
|
|
190
|
+
## 사용 예시
|
|
191
|
+
|
|
192
|
+
```typescript
|
|
193
|
+
import util from 'jell-utils'
|
|
194
|
+
|
|
195
|
+
// 한국어 검증
|
|
196
|
+
util.isKorean('안녕하세요') // true
|
|
197
|
+
util.isBusinessNumber('1018626554') // true
|
|
198
|
+
util.chosungSearch('김철수', 'ㄱㅊㅅ') // true
|
|
199
|
+
|
|
200
|
+
// 문자열 처리
|
|
201
|
+
util.toCamelCase('hello_world') // 'helloWorld'
|
|
202
|
+
util.maskString('1234567890', 3, 3) // '123****890'
|
|
203
|
+
|
|
204
|
+
// 객체 조작
|
|
205
|
+
const obj = { user: { profile: { name: 'John' } } }
|
|
206
|
+
util.getByPath(obj, 'user.profile.name') // 'John'
|
|
207
|
+
|
|
208
|
+
// 배열 처리
|
|
209
|
+
const items = [{ age: 30 }, { age: 25 }, { age: 35 }]
|
|
210
|
+
util.sortBy(items, 'age', 'asc') // age 기준 오름차순 정렬
|
|
211
|
+
|
|
212
|
+
// 비동기 재시도
|
|
213
|
+
await util.retry(
|
|
214
|
+
async () => {
|
|
215
|
+
return await fetchData()
|
|
216
|
+
},
|
|
217
|
+
3,
|
|
218
|
+
1000
|
|
219
|
+
) // 3번 재시도, 1초 간격
|
|
220
|
+
```
|
|
221
|
+
|
|
222
|
+
## 주요 이정표
|
|
223
|
+
|
|
224
|
+
### v0.0.x (초기 버전)
|
|
225
|
+
|
|
226
|
+
- 기본 유틸리티 함수 구현
|
|
227
|
+
- 한국어 관련 기능
|
|
228
|
+
|
|
229
|
+
### v0.1.0 (2025-10-11) ✨ 현재 버전
|
|
230
|
+
|
|
231
|
+
- 50개 포괄적인 테스트 케이스 추가
|
|
232
|
+
- 한국어 특화 기능 강화 (사업자등록번호, 초성 검색)
|
|
233
|
+
- 객체/배열 고급 조작 함수 추가
|
|
234
|
+
- 비동기 retry 유틸리티 추가
|
|
235
|
+
- 테스트 커버리지 79.67% 달성
|
|
236
|
+
- ESLint strict 모드 적용 (any 타입 제거)
|
|
237
|
+
- npm 배포 자동화 개선
|
|
238
|
+
|
|
239
|
+
## 향후 계획
|
|
240
|
+
|
|
241
|
+
### 단기 (v0.2.0)
|
|
242
|
+
|
|
243
|
+
- [ ] 추가 한국어 유틸리티 (주민등록번호 검증, 한글 자모 분리 등)
|
|
244
|
+
- [ ] 테스트 커버리지 90% 이상 달성
|
|
245
|
+
- [ ] 브라우저 호환성 테스트 추가
|
|
246
|
+
- [ ] 성능 벤치마크 추가
|
|
247
|
+
|
|
248
|
+
### 중기 (v0.x.x)
|
|
249
|
+
|
|
250
|
+
- [ ] Tree-shaking 지원 (개별 함수 import)
|
|
251
|
+
- [ ] 웹 워커 지원
|
|
252
|
+
- [ ] React hooks 버전 제공
|
|
253
|
+
- [ ] 더 많은 날짜/시간 유틸리티
|
|
254
|
+
|
|
255
|
+
### 장기 (v1.0.0)
|
|
256
|
+
|
|
257
|
+
- [ ] 안정화 및 API freeze
|
|
258
|
+
- [ ] 완전한 문서화 (JSDoc + 사이트)
|
|
259
|
+
- [ ] 플러그인 시스템
|
|
260
|
+
- [ ] 다국어 지원 확장
|
|
261
|
+
|
|
262
|
+
## 알려진 이슈
|
|
263
|
+
|
|
264
|
+
- TypeScript 5.9.2 사용 중 (ESLint는 5.4.0 미만 권장)
|
|
265
|
+
- jest의 ts-jest 경고 (allowJs 설정 관련)
|
|
266
|
+
- Git push 권한 문제 (credential 재설정 필요)
|
|
267
|
+
|
|
268
|
+
## 참고 문서
|
|
269
|
+
|
|
270
|
+
- [NPM 배포 가이드](./NPM_DEPLOYMENT_GUIDE.md) - 로컬 전용
|
|
271
|
+
- [GitHub Repository](https://github.com/jellive/jell-utils.js)
|
|
272
|
+
- [NPM Package](https://www.npmjs.com/package/jell-utils)
|
|
273
|
+
- [블로그](https://blog.jell.kr)
|
|
274
|
+
|
|
275
|
+
## 프로젝트 관리 메타데이터
|
|
276
|
+
|
|
277
|
+
**프로젝트 타입**: 오픈소스 라이브러리
|
|
278
|
+
**유지보수 상태**: 활발히 개발 중
|
|
279
|
+
**기여 가능 여부**: Yes (MIT 라이선스)
|
|
280
|
+
**주 사용자**: 개인 프로젝트 (공개)
|
|
281
|
+
**업데이트 주기**: 기능 추가 시 비정기적
|
|
282
|
+
**최종 업데이트**: 2025-10-11 (v0.1.0 배포)
|
|
283
|
+
|
|
284
|
+
---
|
|
285
|
+
|
|
286
|
+
## Obsidian 태그
|
|
287
|
+
|
|
288
|
+
#project #typescript #npm #utilities #korean #open-source #active #library
|
|
289
|
+
|
|
290
|
+
## 연관 프로젝트
|
|
291
|
+
|
|
292
|
+
- (여기에 이 라이브러리를 사용하는 다른 프로젝트 링크 추가)
|
|
293
|
+
|
|
294
|
+
## 노트
|
|
295
|
+
|
|
296
|
+
- 이 라이브러리는 개인 프로젝트에서 자주 사용하는 패턴들을 모아놓은 것
|
|
297
|
+
- 한국어 특화 기능이 강점
|
|
298
|
+
- TypeScript로 작성되어 타입 안정성 보장
|
|
299
|
+
- 테스트 커버리지가 높아 안정적
|
|
300
|
+
|
|
301
|
+
|
|
302
|
+
|
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
# 🧪 CI/CD Pipeline Test Results
|
|
2
|
+
|
|
3
|
+
## 📊 Test Summary
|
|
4
|
+
|
|
5
|
+
**전체 테스트 완료**: 2024-01-XX
|
|
6
|
+
**테스트 환경**: 로컬 + GitHub Actions 시뮬레이션
|
|
7
|
+
**안전성**: ✅ 실제 배포 방지됨 (NPM_TOKEN 미설정)
|
|
8
|
+
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
## ✅ 성공한 테스트들
|
|
12
|
+
|
|
13
|
+
### 1. **Semantic Release 설정** ✅
|
|
14
|
+
- **상태**: 완전 작동
|
|
15
|
+
- **검증 결과**:
|
|
16
|
+
- 모든 플러그인 로드됨
|
|
17
|
+
- Conventional commit 인식됨
|
|
18
|
+
- BREAKING CHANGE → Major 버전 증가 예정 (0.0.18 → 1.0.0)
|
|
19
|
+
- 브랜치 필터링 정상 작동 (reboot 브랜치에서 배포 차단됨)
|
|
20
|
+
|
|
21
|
+
### 2. **Git Hooks (Husky)** ✅
|
|
22
|
+
- **상태**: 완전 작동
|
|
23
|
+
- **검증 결과**:
|
|
24
|
+
- Pre-commit: 린트 및 포맷팅 자동 실행 ✅
|
|
25
|
+
- Commit-msg: Conventional commits 검증 ✅
|
|
26
|
+
- Lint-staged: 변경된 파일만 처리 ✅
|
|
27
|
+
|
|
28
|
+
### 3. **Build & Test Pipeline** ✅
|
|
29
|
+
- **상태**: 완전 작동
|
|
30
|
+
- **검증 결과**:
|
|
31
|
+
- TypeScript 빌드 성공 ✅
|
|
32
|
+
- Jest 테스트 통과 ✅ (5/5 tests)
|
|
33
|
+
- ESLint 통과 ✅
|
|
34
|
+
- 의존성 설치 성공 ✅
|
|
35
|
+
|
|
36
|
+
### 4. **GitHub Actions 워크플로우** ✅
|
|
37
|
+
- **상태**: 문법 검증 완료
|
|
38
|
+
- **파일 구조**:
|
|
39
|
+
- `ci.yml`: Multi-Node.js, Cross-platform 테스트
|
|
40
|
+
- `release.yml`: Semantic release + NPM 배포
|
|
41
|
+
- 워크플로우 연결: CI 성공 → Release 실행
|
|
42
|
+
|
|
43
|
+
### 5. **Conventional Commits** ✅
|
|
44
|
+
- **테스트 커밋**: `feat: implement modern CI/CD pipeline`
|
|
45
|
+
- **BREAKING CHANGE**: 포함됨
|
|
46
|
+
- **예상 버전**: 0.0.18 → 1.0.0
|
|
47
|
+
|
|
48
|
+
### 6. **안전성 검증** ✅
|
|
49
|
+
- NPM_TOKEN 미설정으로 실제 배포 차단 확인
|
|
50
|
+
- 브랜치 필터링으로 테스트 브랜치에서 배포 차단 확인
|
|
51
|
+
|
|
52
|
+
---
|
|
53
|
+
|
|
54
|
+
## ⚠️ 테스트 제한사항
|
|
55
|
+
|
|
56
|
+
### 1. **GitHub Push 권한**
|
|
57
|
+
- **상태**: 권한 없음 (예상됨)
|
|
58
|
+
- **원인**: `hgyoo-azflow` → `jellive/jell-utils.js` 권한 없음
|
|
59
|
+
- **해결**: 프로젝트 소유자가 직접 push 필요
|
|
60
|
+
|
|
61
|
+
### 2. **실제 NPM 배포**
|
|
62
|
+
- **상태**: 테스트 안함 (의도적)
|
|
63
|
+
- **원인**: NPM_TOKEN 미설정
|
|
64
|
+
- **해결**: Repository secrets에 NPM_TOKEN 설정 후 테스트
|
|
65
|
+
|
|
66
|
+
---
|
|
67
|
+
|
|
68
|
+
## 🚀 실제 운영을 위한 다음 단계
|
|
69
|
+
|
|
70
|
+
### **Step 1: Repository Secrets 설정**
|
|
71
|
+
GitHub Repository → Settings → Secrets and variables → Actions:
|
|
72
|
+
|
|
73
|
+
```bash
|
|
74
|
+
# NPM 배포 토큰 (필수)
|
|
75
|
+
NPM_TOKEN=npm_xxxxxxxxxxxxxxxx
|
|
76
|
+
|
|
77
|
+
# 선택사항
|
|
78
|
+
SLACK_WEBHOOK_URL=https://hooks.slack.com/...
|
|
79
|
+
CODECOV_TOKEN=xxxxxxxx-xxxx-xxxx...
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
### **Step 2: Branch Protection Rules**
|
|
83
|
+
Repository → Settings → Branches → Add rule:
|
|
84
|
+
- Branch name pattern: `main`
|
|
85
|
+
- ✅ Require pull request before merging
|
|
86
|
+
- ✅ Require status checks to pass
|
|
87
|
+
|
|
88
|
+
### **Step 3: 실제 배포 테스트**
|
|
89
|
+
```bash
|
|
90
|
+
# 1. 작은 변경사항 커밋
|
|
91
|
+
git checkout -b test/ci-cd-validation
|
|
92
|
+
echo "# CI/CD Test" > TEST.md
|
|
93
|
+
git add TEST.md
|
|
94
|
+
git commit -m "docs: add CI/CD validation test"
|
|
95
|
+
|
|
96
|
+
# 2. PR 생성 및 merge
|
|
97
|
+
git push origin test/ci-cd-validation
|
|
98
|
+
# GitHub에서 PR 생성 → CI 실행 확인 → Merge
|
|
99
|
+
|
|
100
|
+
# 3. 자동 배포 확인
|
|
101
|
+
# GitHub Actions에서 release 워크플로우 실행
|
|
102
|
+
# NPM에 새 버전 자동 배포
|
|
103
|
+
# GitHub Release 자동 생성
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
---
|
|
107
|
+
|
|
108
|
+
## 🎯 예상 결과
|
|
109
|
+
|
|
110
|
+
### **실제 배포시 workflow:**
|
|
111
|
+
1. **CI Pipeline**: ✅ 다중 환경 테스트 (Ubuntu/Windows/macOS, Node 18/20/21)
|
|
112
|
+
2. **Security Scan**: ✅ 의존성 취약점 검사
|
|
113
|
+
3. **Semantic Analysis**: ✅ 커밋 분석 → 버전 계산 (1.0.0)
|
|
114
|
+
4. **Automated Release**: ✅ GitHub Release + Changelog 생성
|
|
115
|
+
5. **NPM Publish**: ✅ npm registry 배포
|
|
116
|
+
6. **Notifications**: ✅ Slack 알림 (설정시)
|
|
117
|
+
|
|
118
|
+
### **버전 관리:**
|
|
119
|
+
- **Current**: 0.0.18
|
|
120
|
+
- **Next Release**: 1.0.0 (BREAKING CHANGE 감지)
|
|
121
|
+
- **Changelog**: 자동 생성
|
|
122
|
+
- **Git Tags**: 자동 생성
|
|
123
|
+
|
|
124
|
+
---
|
|
125
|
+
|
|
126
|
+
## 📋 Test Checklist
|
|
127
|
+
|
|
128
|
+
- [x] Semantic Release 설정 및 검증
|
|
129
|
+
- [x] Conventional Commits 형식 검증
|
|
130
|
+
- [x] Git Hooks 작동 확인
|
|
131
|
+
- [x] Build Pipeline 검증
|
|
132
|
+
- [x] GitHub Actions YAML 문법 확인
|
|
133
|
+
- [x] 안전성 검증 (실제 배포 차단)
|
|
134
|
+
- [ ] 실제 GitHub Push (권한 필요)
|
|
135
|
+
- [ ] NPM Token 설정 후 배포 테스트
|
|
136
|
+
- [ ] Slack 알림 테스트
|
|
137
|
+
|
|
138
|
+
---
|
|
139
|
+
|
|
140
|
+
## 🎉 결론
|
|
141
|
+
|
|
142
|
+
**✅ CI/CD 파이프라인이 완전히 준비되었습니다!**
|
|
143
|
+
|
|
144
|
+
모든 핵심 기능들이 로컬에서 검증되었으며, 실제 배포를 위해서는:
|
|
145
|
+
1. GitHub Repository 접근 권한 확보
|
|
146
|
+
2. NPM_TOKEN 설정
|
|
147
|
+
3. Branch protection rules 적용
|
|
148
|
+
|
|
149
|
+
이후 단순히 `main` 브랜치에 conventional commit으로 merge하기만 하면 **완전 자동화된 버전 관리 + NPM 배포**가 실행됩니다.
|
|
150
|
+
|
|
151
|
+
---
|
|
152
|
+
|
|
153
|
+
*테스트 완료 시점: $(date)*
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
# 🧪 CI/CD Pipeline Test Simulation
|
|
2
|
+
|
|
3
|
+
## Test Environment
|
|
4
|
+
|
|
5
|
+
- Branch: reboot (safe for testing)
|
|
6
|
+
- Date: $(date)
|
|
7
|
+
- Purpose: Validate CI/CD pipeline without actual deployment
|
|
8
|
+
|
|
9
|
+
## Test Results
|
|
10
|
+
|
|
11
|
+
### ✅ Configuration Validation
|
|
12
|
+
|
|
13
|
+
- Semantic Release: LOADED
|
|
14
|
+
- All Plugins: CONFIGURED
|
|
15
|
+
- Dependencies: INSTALLED
|
|
16
|
+
|
|
17
|
+
### 🔄 Next Steps
|
|
18
|
+
|
|
19
|
+
1. Create test commit with conventional format
|
|
20
|
+
2. Run semantic-release dry-run
|
|
21
|
+
3. Validate version calculation
|
|
22
|
+
4. Test GitHub Actions workflow syntax
|
|
23
|
+
|
|
24
|
+
---
|
|
25
|
+
|
|
26
|
+
_This is a test file for CI/CD pipeline validation_
|
|
27
|
+
Test change
|