sales-frontend-gemini-cli 0.4.2 → 0.4.4
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/dist/common/helper.cjs +581 -53
- package/dist/common/helper.cjs.map +1 -1
- package/dist/common/helper.d.cts +114 -3
- package/dist/common/helper.d.ts +114 -3
- package/dist/common/helper.js +570 -54
- package/dist/common/helper.js.map +1 -1
- package/dist/common/types.d.cts +24 -1
- package/dist/common/types.d.ts +24 -1
- package/dist/pr-review/claude/claude-commander.cjs +60 -12
- package/dist/pr-review/claude/claude-commander.cjs.map +1 -1
- package/dist/pr-review/claude/claude-commander.js +60 -12
- package/dist/pr-review/claude/claude-commander.js.map +1 -1
- package/dist/pr-review/claude/installation-claude.cjs +42 -6
- package/dist/pr-review/claude/installation-claude.cjs.map +1 -1
- package/dist/pr-review/claude/installation-claude.js +42 -6
- package/dist/pr-review/claude/installation-claude.js.map +1 -1
- package/dist/pr-review/codex/codex-commander.cjs +63 -12
- package/dist/pr-review/codex/codex-commander.cjs.map +1 -1
- package/dist/pr-review/codex/codex-commander.d.cts +1 -1
- package/dist/pr-review/codex/codex-commander.d.ts +1 -1
- package/dist/pr-review/codex/codex-commander.js +63 -12
- package/dist/pr-review/codex/codex-commander.js.map +1 -1
- package/dist/pr-review/codex/installation-codex.cjs +42 -6
- package/dist/pr-review/codex/installation-codex.cjs.map +1 -1
- package/dist/pr-review/codex/installation-codex.js +42 -6
- package/dist/pr-review/codex/installation-codex.js.map +1 -1
- package/dist/pr-review/gemini/gemini-commander.cjs +76 -16
- package/dist/pr-review/gemini/gemini-commander.cjs.map +1 -1
- package/dist/pr-review/gemini/gemini-commander.js +76 -16
- package/dist/pr-review/gemini/gemini-commander.js.map +1 -1
- package/dist/pr-review/gemini/installation-gemini.cjs +42 -6
- package/dist/pr-review/gemini/installation-gemini.cjs.map +1 -1
- package/dist/pr-review/gemini/installation-gemini.js +42 -6
- package/dist/pr-review/gemini/installation-gemini.js.map +1 -1
- package/dist/pr-review/review-one-by-one.cjs +699 -106
- package/dist/pr-review/review-one-by-one.cjs.map +1 -1
- package/dist/pr-review/review-one-by-one.js +700 -107
- package/dist/pr-review/review-one-by-one.js.map +1 -1
- package/dist/pr-review/review.cjs +722 -105
- package/dist/pr-review/review.cjs.map +1 -1
- package/dist/pr-review/review.js +722 -105
- package/dist/pr-review/review.js.map +1 -1
- package/package.json +4 -7
- package/src/common/rules/coding-convention.md +393 -0
- package/src/common/rules/coding-convention.pdf +0 -0
- package/src/common/rules/naming-rule.md +347 -0
- package/src/common/rules/naming-rule.pdf +0 -0
|
@@ -0,0 +1,347 @@
|
|
|
1
|
+
# 03-1. 명명규칙
|
|
2
|
+
|
|
3
|
+
## 기본 명명 규칙
|
|
4
|
+
|
|
5
|
+
| 구분 | 표기법 | 예 |
|
|
6
|
+
| :------------------------- | :--------------- | :---------------------------- |
|
|
7
|
+
| 1. 프로젝트명 | kebab case | hli-nxl-dsp-{업무구분코드}-fe |
|
|
8
|
+
| 2. 경로명(pathname 포함) | kebab case | /user-info/user-name |
|
|
9
|
+
| 3. 컴포넌트 함수명 | Pascal case | UserName |
|
|
10
|
+
| 4. 클래스명 / 네임스페이스 | Pascal case | DataUtil, StringUtil |
|
|
11
|
+
| 5. 함수명(일반) | camel case | getUserName |
|
|
12
|
+
| 6. 변수명(일반) | camel case | userName |
|
|
13
|
+
| 7. 상수명 | upper snake case | BASE_URL |
|
|
14
|
+
| 8. type명 | Pascal case | NetworkStatus |
|
|
15
|
+
| 9. interface명 | Pascal case | UserName, ProductName |
|
|
16
|
+
| 10. enum | Pascal case | |
|
|
17
|
+
|
|
18
|
+
## 파일 명명 규칙
|
|
19
|
+
|
|
20
|
+
| 구분 | 표기법 | 확장자 | 예 |
|
|
21
|
+
| :----------- | :----------------- | :------------ | :-------------------------------------------------------------------------------------- |
|
|
22
|
+
| 1. 컴포넌트 | kebab case | .tsx | user-name.tsx |
|
|
23
|
+
| 2. 커스텀 훅 | kebab case | .tsx | use-user-name.tsx |
|
|
24
|
+
| 3. 스타일 | kebab case | .scss or .css | user-name.module.scss<br>global.css |
|
|
25
|
+
| 4. 스토리북 | kebab case or 한글 | .stories.tsx | user-name.stories.tsx or 1\_개인정보처리동의.stories.tsx<br>(관리하기 쉬운 네이밍) |
|
|
26
|
+
| 5. 유틸리티 | kebab case | .ts | user-name-utils.ts<br>{유틸리티명}-utils.ts |
|
|
27
|
+
| 6. 타입 | kebab case | .ts | user-name.types.ts<br>{이름}.types.ts<br>(외부 사용이 필요한 부분은 별도의 파일로 분리) |
|
|
28
|
+
| 7. dto 타입 | kebab case | .ts | user-name.dto.ts<br>{백엔드 주제영역명}.dto.ts |
|
|
29
|
+
| 8. declare | kebab case | .d.ts | user-name.d.ts |
|
|
30
|
+
|
|
31
|
+
- \*\* 리액트와 관련된 것들은 .tsx로 통일 (커스텀 훅, 컨텍스트 등)
|
|
32
|
+
|
|
33
|
+
## 컴포넌트 명명 규칙
|
|
34
|
+
|
|
35
|
+
- 표기법: Pascal case
|
|
36
|
+
- 단일 책임 원칙을 기반으로 한 컴포넌트 이름(특히 공통)
|
|
37
|
+
- 숫자, 특수문자 사용 X, 의미와 목적이 들어나는 네이밍, 두문자어도 파스칼 케이스 사용
|
|
38
|
+
|
|
39
|
+
```javascript
|
|
40
|
+
1 // ✅ 목적/의미 분명, Full Name
|
|
41
|
+
2 export const LoginForm = ({}: LoginFormProps) => {
|
|
42
|
+
3 ...
|
|
43
|
+
4 }
|
|
44
|
+
5
|
|
45
|
+
6 // ❌ 숫자
|
|
46
|
+
7 export const UserView1 = () => {
|
|
47
|
+
8 ...
|
|
48
|
+
9 }
|
|
49
|
+
10
|
|
50
|
+
11 // ✅ 두문자어
|
|
51
|
+
12 export const HtmlEdidor = () => {
|
|
52
|
+
13 ...
|
|
53
|
+
14 }
|
|
54
|
+
15 // ❌ 두문자어
|
|
55
|
+
16 export const HTMLEdidor = () => {
|
|
56
|
+
17 ...
|
|
57
|
+
18 }
|
|
58
|
+
19
|
|
59
|
+
20
|
|
60
|
+
21 // ❌ 약어, 축약형
|
|
61
|
+
22 export const UsrPrfl = () => {
|
|
62
|
+
23 ...
|
|
63
|
+
24 }
|
|
64
|
+
25
|
|
65
|
+
26 // ❌ 특수문자
|
|
66
|
+
27 export const User_Profile = () => {
|
|
67
|
+
28 ...
|
|
68
|
+
29 }
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
## 함수 명명 규칙
|
|
72
|
+
|
|
73
|
+
- 표기법: camel case
|
|
74
|
+
|
|
75
|
+
```javascript
|
|
76
|
+
1 // ✅ camel case
|
|
77
|
+
2 const getCamelCase = () => { ... }
|
|
78
|
+
3
|
|
79
|
+
4 // ❌
|
|
80
|
+
5 const Get_Camel_Case = () => { ... }
|
|
81
|
+
6
|
|
82
|
+
7 // ❌
|
|
83
|
+
8 const GetCamelCase = () => { ... }
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
- 동사로 시작
|
|
87
|
+
|
|
88
|
+
```javascript
|
|
89
|
+
1 // ✅ 동사로 시작
|
|
90
|
+
2 const getCamelCase = () => { ... }
|
|
91
|
+
3
|
|
92
|
+
4 // ❌ non 동사
|
|
93
|
+
5 const camelCase = () => { ... }
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
- 최대한 구체적 + 목표분명 + 한 가지 책임을 담당하는 함수명
|
|
97
|
+
- 함수의 역할을 명확히 알 수 있도록 하고 로직이 과도하게 몰리는 걸 방지하기 위함
|
|
98
|
+
|
|
99
|
+
```javascript
|
|
100
|
+
1 // ✅ 구체적이고 단일목적
|
|
101
|
+
2 const formatDateToKorean = () => { ... }
|
|
102
|
+
3
|
|
103
|
+
4 // ❌ 추상, 줄임
|
|
104
|
+
5 const format = () => { ... }
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
- 조건부
|
|
108
|
+
- is/has/should + 조건
|
|
109
|
+
|
|
110
|
+
```javascript
|
|
111
|
+
1 // ✅ 조건부 (is/has/should + 대상)
|
|
112
|
+
2 const isTablet = () => { ... }
|
|
113
|
+
3 const hasChildren = () => { ... }
|
|
114
|
+
4 const shouldPreventEvent = () => { ... }
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
- API 호출함수
|
|
118
|
+
- C(create): create + 대상 + (상세정보) (예: createUserProfile)
|
|
119
|
+
- R(read): 단건: get + 대상 + (상세정보) (예: getUserProfile), 다건: getList + 대상 + (상세정보) (예: getListUserProfile)
|
|
120
|
+
- U(update): update + 대상 + (상세정보) (예: updateUserProfile)
|
|
121
|
+
- D(delete): delete + 대상 + (상세정보) (예: deleteUserProfile)
|
|
122
|
+
|
|
123
|
+
```javascript
|
|
124
|
+
1 // ✅ 단건 조회 API 호출 (get + 대상)
|
|
125
|
+
2 const getUserName = () => { ... }
|
|
126
|
+
3
|
|
127
|
+
4 // ✅ 다건 조회 API 호출 (getList + 대상)
|
|
128
|
+
5 const getListrUserName = () => { ... }
|
|
129
|
+
6
|
|
130
|
+
7 // ✅ update 성격의 API 호출 (update + 대상)
|
|
131
|
+
8 const updateUserName = () => { ... }
|
|
132
|
+
9
|
|
133
|
+
10 // ✅ 삭제 성격의 API 호출 (delete + 대상)
|
|
134
|
+
11 const deleteUserName = () => { ... }
|
|
135
|
+
12
|
|
136
|
+
13 // ✅ insert 성격의 API 호출 (create + 대상)
|
|
137
|
+
14 const createUserName = () => { ... }
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
- 데이터 변환
|
|
141
|
+
- convert / format / parse + 대상
|
|
142
|
+
|
|
143
|
+
```javascript
|
|
144
|
+
1 // ✅ 변환 함수 (convert/format/parse + 대상)
|
|
145
|
+
2 const convertUserName = () => { ... }
|
|
146
|
+
3 const formatUserName = () => { ... }
|
|
147
|
+
4 const parseUserName = () => { ... }
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
- 검증
|
|
151
|
+
- validate + 대상
|
|
152
|
+
|
|
153
|
+
```javascript
|
|
154
|
+
1 // ✅ 데이터 검증 (validate + 대상)
|
|
155
|
+
2 const validateUserName = () => { ... }
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
- 이벤트 핸들러
|
|
159
|
+
- handle + 대상
|
|
160
|
+
|
|
161
|
+
```javascript
|
|
162
|
+
1 // ✅ 이벤트 핸들러 (handle + 이벤트타입 + 대상)
|
|
163
|
+
2 const handleUserNameClick = () => { ... }
|
|
164
|
+
3 const handleModalClose = () => { ... }
|
|
165
|
+
4
|
|
166
|
+
5 // ✅ 이벤트 핸들러를 Props로 넘길 땐(on + 핸들러 함수)
|
|
167
|
+
6 <UserName onUserNameClick={handleUserNameClick} onModalClose={handleModalClose}/>
|
|
168
|
+
```
|
|
169
|
+
|
|
170
|
+
- 초기화 / 생성
|
|
171
|
+
- create / initialize + 대상
|
|
172
|
+
|
|
173
|
+
```javascript
|
|
174
|
+
1 // ✅ 초기화 및 객체 생성(create/initialize + 대상)
|
|
175
|
+
2 const createApiInstance = () => { ... }
|
|
176
|
+
3 const initializeLoginInfomation = () => { ... }
|
|
177
|
+
```
|
|
178
|
+
|
|
179
|
+
## 변수 명명 규칙
|
|
180
|
+
|
|
181
|
+
- \*\* 단, 백엔드에서 정의된 필드는 그대로 따른다.
|
|
182
|
+
- 기본 표기법: camel case (object 포함)
|
|
183
|
+
- 상수: Upper Snake case
|
|
184
|
+
|
|
185
|
+
```javascript
|
|
186
|
+
1 // ✅ camel case
|
|
187
|
+
2 const userName = '김한화';
|
|
188
|
+
3
|
|
189
|
+
4 // ✅ 상수 case
|
|
190
|
+
5 const USER_NAME = '김한화';
|
|
191
|
+
6
|
|
192
|
+
7 // ✅ object case
|
|
193
|
+
8 const testUtils = {
|
|
194
|
+
9 convertCurrency() {...}
|
|
195
|
+
10 }
|
|
196
|
+
11
|
|
197
|
+
12
|
|
198
|
+
13 // ❌
|
|
199
|
+
14 const user_name = '';
|
|
200
|
+
15 const UserName = '';
|
|
201
|
+
16 const User_Name = '';
|
|
202
|
+
17 const TestUtils = {...};
|
|
203
|
+
```
|
|
204
|
+
|
|
205
|
+
- 의미 있고 구체적인 이름
|
|
206
|
+
|
|
207
|
+
```javascript
|
|
208
|
+
1 // ✅ 구체적
|
|
209
|
+
2 const userName = '김한화';
|
|
210
|
+
3 const isEmailValidated = false;
|
|
211
|
+
4
|
|
212
|
+
5 // ❌
|
|
213
|
+
6 const un = ''
|
|
214
|
+
7 const total = 0;
|
|
215
|
+
8 const item = [];
|
|
216
|
+
9
|
|
217
|
+
10 // ❌ ❌ ❌ 진짜 금지
|
|
218
|
+
11 const flag = false;
|
|
219
|
+
```
|
|
220
|
+
|
|
221
|
+
- 숫자
|
|
222
|
+
|
|
223
|
+
```javascript
|
|
224
|
+
1 // ✅ 개수 관련 count, total, num 접두사/접미사 활용
|
|
225
|
+
2 const userCount = 100;
|
|
226
|
+
3 const totalUsers = 1000;
|
|
227
|
+
4 const numPages = 100;
|
|
228
|
+
5
|
|
229
|
+
6
|
|
230
|
+
7 // ✅ 크기/양 관련 size, amount, length 접미사 활용
|
|
231
|
+
8 const fileSize = 100;
|
|
232
|
+
9 const fileAmount = 100;
|
|
233
|
+
10 const fileLength = 100;
|
|
234
|
+
```
|
|
235
|
+
|
|
236
|
+
- 배열
|
|
237
|
+
|
|
238
|
+
```javascript
|
|
239
|
+
1 // ✅ 복수형으로 내용을 정확하게 표현
|
|
240
|
+
2 const selectedUsers = [];
|
|
241
|
+
3 const errorMessages = [];
|
|
242
|
+
4
|
|
243
|
+
5
|
|
244
|
+
6 // ❌ 단수, 추상적 영문명
|
|
245
|
+
7 const user = [];
|
|
246
|
+
8 const data = [];
|
|
247
|
+
```
|
|
248
|
+
|
|
249
|
+
- boolean
|
|
250
|
+
|
|
251
|
+
```javascript
|
|
252
|
+
1 // ✅ is/has/should 접두사 활용
|
|
253
|
+
2
|
|
254
|
+
3 // ~이다 ,아니다
|
|
255
|
+
4 const isLoading = false;
|
|
256
|
+
5 const isValid = false;
|
|
257
|
+
6
|
|
258
|
+
7 // 갖다, 아니다
|
|
259
|
+
8 const hasError = false;
|
|
260
|
+
9
|
|
261
|
+
10 // 해야할지, 말아야할지
|
|
262
|
+
11 const shouldUpdate = false;
|
|
263
|
+
```
|
|
264
|
+
|
|
265
|
+
- Class
|
|
266
|
+
|
|
267
|
+
```javascript
|
|
268
|
+
1 // ✅ pascal case
|
|
269
|
+
2 class BridgeCore {}
|
|
270
|
+
3
|
|
271
|
+
4 // ❌
|
|
272
|
+
5 class bridgeCore {}
|
|
273
|
+
```
|
|
274
|
+
|
|
275
|
+
## Type, Interface 명명 규칙
|
|
276
|
+
|
|
277
|
+
- 기본 표기법: Pascal Case
|
|
278
|
+
|
|
279
|
+
```typescript
|
|
280
|
+
1 // ✅ Pascal case
|
|
281
|
+
2 interface UserInfo {
|
|
282
|
+
3 id: string;
|
|
283
|
+
4 name: string;
|
|
284
|
+
5 }
|
|
285
|
+
6
|
|
286
|
+
7 // ✅ Swagger DTO 명 그대로 승계
|
|
287
|
+
8 interface ApiResponse<T> {
|
|
288
|
+
9 data: T;
|
|
289
|
+
10 messaege: string;
|
|
290
|
+
11 }
|
|
291
|
+
12
|
|
292
|
+
13 // ❌
|
|
293
|
+
14 interface User_Info {}
|
|
294
|
+
15
|
|
295
|
+
16 // ❌
|
|
296
|
+
17 interface I_User_ {}
|
|
297
|
+
```
|
|
298
|
+
|
|
299
|
+
- Type: Pascal Case
|
|
300
|
+
|
|
301
|
+
```typescript
|
|
302
|
+
1 // ✅ Pascal case
|
|
303
|
+
2 type UserName = 'user' | 'admin';
|
|
304
|
+
3
|
|
305
|
+
4 // ✅
|
|
306
|
+
5 type ApiStatus = 'sucess' | 'loading' | 'error';
|
|
307
|
+
6
|
|
308
|
+
7 // ❌
|
|
309
|
+
8 type TUserName = 'user' | 'admin';
|
|
310
|
+
9
|
|
311
|
+
10 // ❌
|
|
312
|
+
11 type API_STATUS = 'sucess' | 'loading' | 'error';
|
|
313
|
+
```
|
|
314
|
+
|
|
315
|
+
- interface 사용 case
|
|
316
|
+
- DTO: Swagger에 정의된 Request/Response 명을 그대로 따른다.
|
|
317
|
+
|
|
318
|
+
```typescript
|
|
319
|
+
1 // ✅ 객체 구조 정의
|
|
320
|
+
2 interface UserInfo {
|
|
321
|
+
3 }
|
|
322
|
+
4
|
|
323
|
+
5 // ✅ class 구현을 위한 정의
|
|
324
|
+
6 interface BridgeController {
|
|
325
|
+
7 call() => void;
|
|
326
|
+
8 open() => void;
|
|
327
|
+
9 }
|
|
328
|
+
10
|
|
329
|
+
11 // ✅ 확장 가능한 구조
|
|
330
|
+
12 interface BaseConfig {}
|
|
331
|
+
13 interface ApiClient extends BaseConfig {}
|
|
332
|
+
14
|
|
333
|
+
15
|
|
334
|
+
16 // ✅ Swagger에 UserInfoRequest/UserInfoResponse 라고 정의된 경우
|
|
335
|
+
17 interface UserInfoRequest {}
|
|
336
|
+
18 interface UserInfoResponse {}
|
|
337
|
+
```
|
|
338
|
+
|
|
339
|
+
- Type 사용 case
|
|
340
|
+
|
|
341
|
+
```typescript
|
|
342
|
+
1 // 유니온 타입
|
|
343
|
+
2 type Status = 'sucess' | 'loading' | 'reject';
|
|
344
|
+
3
|
|
345
|
+
4 // 조건 케이스
|
|
346
|
+
5 type NonNullable<T> = T extends null | undefined ? never : T;
|
|
347
|
+
```
|
|
Binary file
|