db-json-cli 2.0.4 → 2.1.1

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.
Files changed (61) hide show
  1. package/.next/standalone/.next/BUILD_ID +1 -1
  2. package/.next/standalone/.next/app-build-manifest.json +17 -13
  3. package/.next/standalone/.next/app-path-routes-manifest.json +1 -1
  4. package/.next/standalone/.next/build-manifest.json +7 -7
  5. package/.next/standalone/.next/prerender-manifest.json +1 -1
  6. package/.next/standalone/.next/server/app/_not-found/page.js +1 -1
  7. package/.next/standalone/.next/server/app/_not-found/page.js.nft.json +1 -1
  8. package/.next/standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  9. package/.next/standalone/.next/server/app/_not-found.html +1 -1
  10. package/.next/standalone/.next/server/app/_not-found.rsc +7 -6
  11. package/.next/standalone/.next/server/app/api/[resource]/[id]/route.js +1 -1
  12. package/.next/standalone/.next/server/app/api/[resource]/[id]/route.js.nft.json +1 -1
  13. package/.next/standalone/.next/server/app/api/[resource]/route.js +1 -1
  14. package/.next/standalone/.next/server/app/api/[resource]/route.js.nft.json +1 -1
  15. package/.next/standalone/.next/server/app/api/info/route.js +1 -1
  16. package/.next/standalone/.next/server/app/api/info/route.js.nft.json +1 -1
  17. package/.next/standalone/.next/server/app/api/info.body +1 -1
  18. package/.next/standalone/.next/server/app/api/login/route.js +1 -1
  19. package/.next/standalone/.next/server/app/api/login/route.js.nft.json +1 -1
  20. package/.next/standalone/.next/server/app/api/register/route.js +1 -1
  21. package/.next/standalone/.next/server/app/api/register/route.js.nft.json +1 -1
  22. package/.next/standalone/.next/server/app/index.html +1 -1
  23. package/.next/standalone/.next/server/app/index.rsc +7 -5
  24. package/.next/standalone/.next/server/app/page.js +59 -1
  25. package/.next/standalone/.next/server/app/page.js.nft.json +1 -1
  26. package/.next/standalone/.next/server/app/page_client-reference-manifest.js +1 -1
  27. package/.next/standalone/.next/server/app-paths-manifest.json +5 -5
  28. package/.next/standalone/.next/server/chunks/656.js +1 -0
  29. package/.next/standalone/.next/server/chunks/794.js +2 -0
  30. package/.next/standalone/.next/server/middleware-build-manifest.js +1 -1
  31. package/.next/standalone/.next/server/pages/404.html +1 -1
  32. package/.next/standalone/.next/server/pages/500.html +1 -1
  33. package/.next/standalone/.next/server/pages-manifest.json +1 -1
  34. package/.next/standalone/.next/server/server-reference-manifest.json +1 -1
  35. package/.next/standalone/.next/static/chunks/463-043b417c5568631f.js +1 -0
  36. package/.next/standalone/.next/static/chunks/954-b2c56f3f904cc664.js +1 -0
  37. package/.next/standalone/.next/static/chunks/app/layout-fa3af872c59446d2.js +1 -0
  38. package/.next/standalone/.next/static/chunks/app/page-4c8ddca89b830386.js +1 -0
  39. package/.next/standalone/.next/static/chunks/webpack-020ce2426d70958e.js +1 -0
  40. package/.next/standalone/.next/static/css/9e7c0563f88bbaa4.css +1 -0
  41. package/.next/standalone/.next/static/css/d5eb02ddce896298.css +1 -0
  42. package/.next/standalone/.next/static/media/4aeaaf124a5054bc-s.p.woff2 +0 -0
  43. package/.next/standalone/db.json +105 -0
  44. package/.next/standalone/node_modules/immutable/dist/immutable.js +6234 -0
  45. package/.next/standalone/node_modules/immutable/package.json +38 -0
  46. package/.next/standalone/node_modules/sass/package.json +1 -0
  47. package/.next/standalone/node_modules/sass/sass.dart.js +131551 -0
  48. package/.next/standalone/node_modules/sass/sass.node.js +12 -0
  49. package/.next/standalone/package.json +10 -6
  50. package/README.md +372 -42
  51. package/package.json +10 -6
  52. package/.next/standalone/.next/server/chunks/471.js +0 -2
  53. package/.next/standalone/.next/static/chunks/29-984b7c92c950b64f.js +0 -1
  54. package/.next/standalone/.next/static/chunks/app/layout-cbd3ebdc4ecc5247.js +0 -1
  55. package/.next/standalone/.next/static/chunks/app/page-448ab87af648362a.js +0 -1
  56. package/.next/standalone/.next/static/chunks/webpack-35b091ca5c5192ac.js +0 -1
  57. /package/.next/standalone/.next/static/{LxEs0HRjC2mVTMFB0QPeP → VRnkOhUo8cbYlQGI7OxpI}/_buildManifest.js +0 -0
  58. /package/.next/standalone/.next/static/{LxEs0HRjC2mVTMFB0QPeP → VRnkOhUo8cbYlQGI7OxpI}/_ssgManifest.js +0 -0
  59. /package/.next/standalone/.next/static/chunks/{117-9bcfe95f89d4b2e1.js → 117-69b8841dc3821afe.js} +0 -0
  60. /package/.next/standalone/.next/static/chunks/app/_not-found/{page-32c70da5a397ed57.js → page-633bb1b0381276e3.js} +0 -0
  61. /package/.next/standalone/.next/static/chunks/{fd9d1056-9f91b5e418130764.js → fd9d1056-13294f02aa6fd7af.js} +0 -0
@@ -0,0 +1,12 @@
1
+ require('./sass.dart.js');
2
+ const library = globalThis._cliPkgExports.pop();
3
+ if (globalThis._cliPkgExports.length === 0) delete globalThis._cliPkgExports;
4
+ library.load({
5
+ util: require("util"),
6
+ stream: require("stream"),
7
+ nodeModule: require("module"),
8
+ fs: require("fs"),
9
+ immutable: require("immutable"),
10
+ });
11
+
12
+ module.exports = library;
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "name": "db-json-cli",
3
- "version": "2.0.4",
3
+ "version": "2.1.1",
4
4
  "license": "MIT",
5
- "description": "Lightweight JSON-based backend server with JWT authentication and CLI support",
5
+ "description": "JSON-based backend server with JWT authentication and CLI support",
6
6
  "repository": {
7
7
  "type": "git",
8
8
  "url": "https://github.com/JEONG-JI-HEON/db-json-cli.git"
@@ -29,18 +29,22 @@
29
29
  ".next/standalone/"
30
30
  ],
31
31
  "scripts": {
32
- "dev": "next dev",
32
+ "dev": "next dev --port 4000",
33
33
  "build": "next build && node scripts/post-build.js",
34
34
  "start": "next start",
35
35
  "prepublishOnly": "npm run build"
36
36
  },
37
37
  "dependencies": {
38
+ "@ant-design/icons": "^6.1.0",
39
+ "@tanstack/react-query": "^5.90.19",
40
+ "bcryptjs": "^2.4.3",
41
+ "fs-extra": "^11.2.0",
42
+ "jsonwebtoken": "^9.0.2",
43
+ "lucide-react": "^0.562.0",
38
44
  "next": "^14.0.0",
39
45
  "react": "^18.2.0",
40
46
  "react-dom": "^18.2.0",
41
- "fs-extra": "^11.2.0",
42
- "jsonwebtoken": "^9.0.2",
43
- "bcryptjs": "^2.4.3",
47
+ "sass": "^1.97.2",
44
48
  "yargs": "^17.7.2"
45
49
  }
46
50
  }
package/README.md CHANGED
@@ -1,6 +1,17 @@
1
1
  # db-json-cli
2
2
 
3
- JSON file 기반의 백엔드 서버 + JWT 인증 + CLI 도구
3
+ JSON 파일 기반의 즉시 사용 가능한 REST API 서버 + JWT 인증 + Swagger 스타일 문서화
4
+
5
+ ---
6
+
7
+ ## ✨ 특징
8
+
9
+ - 🚀 **즉시 시작**: JSON 파일만 있으면 바로 REST API 서버 실행
10
+ - 🔐 **JWT 인증**: 내장된 회원가입/로그인 시스템
11
+ - 📝 **자동 문서화**: Swagger 스타일 API 문서 자동 생성
12
+ - 🎯 **간단한 권한 관리**: public/private 리소스 관리
13
+ - 🔄 **CRUD 자동 생성**: GET, POST, PUT, DELETE 엔드포인트 자동 생성
14
+ - 🎨 **한글 지원**: 모든 에러 메시지 한글 제공
4
15
 
5
16
  ---
6
17
 
@@ -12,123 +23,442 @@ npm install -g db-json-cli
12
23
 
13
24
  ---
14
25
 
15
- ## 🚀 사용법
26
+ ## 🚀 빠른 시작
27
+
28
+ ### 1. JSON 파일 생성
16
29
 
17
- ### 1. 서버 시작
30
+ `db.json` 파일을 생성하세요:
31
+
32
+ ```json
33
+ {
34
+ "users": [],
35
+ "todos": [
36
+ { "id": 1, "title": "할 일 1", "completed": false },
37
+ { "id": 2, "title": "할 일 2", "completed": true }
38
+ ],
39
+ "posts": [{ "id": 1, "title": "첫 번째 글", "content": "내용" }],
40
+ "rules": {
41
+ "todos": "private",
42
+ "posts": "public"
43
+ }
44
+ }
45
+ ```
46
+
47
+ ### 2. 서버 실행
18
48
 
19
49
  ```bash
20
- db-json-cli --db ./path/to/db.json --port 4000
50
+ db-json-cli --db ./db.json --port 4000
21
51
  ```
22
52
 
23
- - `--db` : JSON 파일 경로
24
- - `--port` : 서버 포트 (기본 4000)
53
+ ### 3. API 문서 확인
54
+
55
+ 브라우저에서 `http://localhost:4000` 접속하여 자동 생성된 API 문서를 확인하세요!
25
56
 
26
57
  ---
27
58
 
28
- ### 2. JSON 구조
59
+ ## 📖 JSON 구조
29
60
 
30
61
  ```json
31
62
  {
32
- "users": [],
33
- "list": [{ "id": 1, "title": "Private item" }],
34
- "public": [{ "id": 1, "title": "Public item" }],
35
- "rules": {
36
- "list": "private",
37
- "public": "public"
63
+ "users": [], // 회원 정보 (자동 관리)
64
+ "리소스명1": [...], // 데이터 리소스
65
+ "리소스명2": [...], // 데이터 리소스
66
+ "rules": { // 접근 권한 설정
67
+ "리소스명1": "private", // 인증 필요
68
+ "리소스명2": "public" // 누구나 접근 가능
38
69
  }
39
70
  }
40
71
  ```
41
72
 
42
- - `users` : 회원 정보 저장
43
- - `list` : 인증 필요 데이터 ex)
44
- - `public` : 누구나 접근 가능한 데이터 ex)
45
- - `rules` : 키의 접근 권한 설정 (`private` 또는 `public`)
73
+ ### 필수 필드
74
+
75
+ - **users**: 회원 정보를 저장하는 배열 (시스템이 자동으로 관리)
76
+ - **rules**:리소스의 접근 권한 설정
77
+
78
+ ### 접근 권한
79
+
80
+ - `"private"`: JWT 토큰이 있어야만 접근 가능
81
+ - `"public"`: 누구나 접근 가능 (기본값)
46
82
 
47
83
  ---
48
84
 
49
- ### 3. API
85
+ ## 🔑 인증 API
50
86
 
51
- #### 회원가입
87
+ ### 회원가입
52
88
 
53
89
  ```http
54
90
  POST /register
55
91
  Content-Type: application/json
56
92
 
57
93
  {
58
- "email": "example@example.com",
94
+ "email": "user@example.com",
59
95
  "password": "password123",
60
96
  "name": "홍길동"
61
97
  }
62
98
  ```
63
99
 
64
- 응답:
100
+ **응답 (200 OK)**
65
101
 
66
102
  ```json
67
103
  {
68
- "accessToken": "...",
69
- "refreshToken": "..."
104
+ "accessToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
105
+ "refreshToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
106
+ "userInfo": {
107
+ "id": 1,
108
+ "email": "user@example.com",
109
+ "name": "홍길동"
110
+ }
70
111
  }
71
112
  ```
72
113
 
114
+ **에러 응답**
115
+
116
+ - `400`: 이메일/비밀번호가 필요합니다
117
+ - `409`: 사용자가 이미 존재합니다
118
+ - `422`: 올바른 이메일 형식이 아닙니다 / 비밀번호는 최소 8자 이상이어야 합니다
119
+
73
120
  ---
74
121
 
75
- #### 로그인
122
+ ### 로그인
76
123
 
77
124
  ```http
78
125
  POST /login
79
126
  Content-Type: application/json
80
127
 
81
128
  {
82
- "email": "example@example.com",
129
+ "email": "user@example.com",
83
130
  "password": "password123"
84
131
  }
85
132
  ```
86
133
 
87
- 응답:
134
+ **응답 (200 OK)**
88
135
 
89
136
  ```json
90
137
  {
91
- "accessToken": "...",
92
- "refreshToken": "..."
138
+ "accessToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
139
+ "refreshToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
140
+ "userInfo": {
141
+ "id": 1,
142
+ "email": "user@example.com",
143
+ "name": "홍길동"
144
+ }
93
145
  }
94
146
  ```
95
147
 
148
+ **에러 응답**
149
+
150
+ - `400`: 이메일/비밀번호가 필요합니다
151
+ - `401`: 인증 정보가 올바르지 않습니다
152
+
153
+ ---
154
+
155
+ ## 📡 리소스 API
156
+
157
+ ### 전체 조회
158
+
159
+ ```http
160
+ GET /{리소스명}
161
+ Authorization: Bearer <accessToken> # private인 경우에만
162
+ ```
163
+
164
+ **예시**
165
+
166
+ ```http
167
+ GET /todos
168
+ Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...
169
+ ```
170
+
171
+ **응답**
172
+
173
+ ```json
174
+ [
175
+ { "id": 1, "title": "할 일 1", "completed": false },
176
+ { "id": 2, "title": "할 일 2", "completed": true }
177
+ ]
178
+ ```
179
+
180
+ ---
181
+
182
+ ### 범위 조회 (페이지네이션)
183
+
184
+ ```http
185
+ GET /{리소스명}?from=1&to=10
186
+ Authorization: Bearer <accessToken> # private인 경우에만
187
+ ```
188
+
189
+ **예시**
190
+
191
+ ```http
192
+ GET /todos?from=1&to=5
193
+ ```
194
+
96
195
  ---
97
196
 
98
- #### 데이터 조회
197
+ ### 단일 조회
99
198
 
100
- - **인증 필요 데이터** (`private`)
199
+ ```http
200
+ GET /{리소스명}/{id}
201
+ Authorization: Bearer <accessToken> # private인 경우에만
202
+ ```
203
+
204
+ **예시**
101
205
 
102
206
  ```http
103
- GET /list/1
104
- Authorization: Bearer <accessToken>
207
+ GET /todos/1
105
208
  ```
106
209
 
107
- - **인증 불필요 데이터** (`public`)
210
+ **응답**
211
+
212
+ ```json
213
+ { "id": 1, "title": "할 일 1", "completed": false }
214
+ ```
215
+
216
+ **에러 응답**
217
+
218
+ - `400`: 올바른 ID 형식이 아닙니다
219
+ - `404`: 찾을 수 없습니다
220
+
221
+ ---
222
+
223
+ ### 생성
108
224
 
109
225
  ```http
110
- GET /public/1
226
+ POST /{리소스명}
227
+ Authorization: Bearer <accessToken> # private인 경우에만
228
+ Content-Type: application/json
229
+
230
+ {
231
+ "title": "새로운 할 일",
232
+ "completed": false
233
+ }
234
+ ```
235
+
236
+ **응답 (200 OK)**
237
+
238
+ ```json
239
+ {
240
+ "id": 3,
241
+ "title": "새로운 할 일",
242
+ "completed": false
243
+ }
244
+ ```
245
+
246
+ **에러 응답**
247
+
248
+ - `400`: 잘못된 본문입니다
249
+ - `401`: 토큰이 없습니다 (private 리소스)
250
+ - `413`: 요청 데이터가 너무 큽니다
251
+ - `422`: 필수 필드가 누락되었습니다
252
+
253
+ ---
254
+
255
+ ### 수정
256
+
257
+ ```http
258
+ PUT /{리소스명}/{id}
259
+ Authorization: Bearer <accessToken> # private인 경우에만
260
+ Content-Type: application/json
261
+
262
+ {
263
+ "title": "수정된 할 일",
264
+ "completed": true
265
+ }
266
+ ```
267
+
268
+ **응답 (200 OK)**
269
+
270
+ ```json
271
+ {
272
+ "id": 1,
273
+ "title": "수정된 할 일",
274
+ "completed": true
275
+ }
111
276
  ```
112
277
 
113
- - 여러 아이템 조회 시 범위 지정 가능
278
+ **에러 응답**
279
+
280
+ - `400`: 잘못된 본문입니다
281
+ - `404`: 찾을 수 없습니다
282
+
283
+ ---
284
+
285
+ ### 삭제
114
286
 
115
287
  ```http
116
- GET /list?from=1&to=10
288
+ DELETE /{리소스명}/{id}
289
+ Authorization: Bearer <accessToken> # private인 경우에만
290
+ ```
291
+
292
+ **응답 (200 OK)**
293
+
294
+ ```json
295
+ {
296
+ "id": 1,
297
+ "title": "삭제된 할 일",
298
+ "completed": true
299
+ }
117
300
  ```
118
301
 
302
+ **에러 응답**
303
+
304
+ - `404`: 찾을 수 없습니다
305
+
119
306
  ---
120
307
 
121
- ### 4. CLI 옵션
308
+ ## 🛠️ CLI 옵션
309
+
310
+ ```bash
311
+ db-json-cli [옵션]
312
+ ```
313
+
314
+ ### 옵션
315
+
316
+ | 옵션 | 설명 | 기본값 |
317
+ | --------------- | -------------- | ------ |
318
+ | `--db <경로>` | JSON 파일 경로 | 필수 |
319
+ | `--port <포트>` | 서버 포트 | 4000 |
320
+
321
+ ### 예시
322
+
323
+ ```bash
324
+ # 기본 사용
325
+ db-json-cli --db ./db.json
326
+
327
+ # 포트 지정
328
+ db-json-cli --db ./data/db.json --port 5000
329
+
330
+ # 절대 경로 사용
331
+ db-json-cli --db /home/user/data/db.json --port 8080
332
+ ```
333
+
334
+ ---
335
+
336
+ ## 📚 에러 코드
337
+
338
+ | 상태 코드 | 의미 | 예시 메시지 |
339
+ | --------- | ---------------- | ----------------------------- |
340
+ | 400 | 잘못된 요청 | 이메일/비밀번호가 필요합니다 |
341
+ | 401 | 인증 실패 | 토큰이 없습니다 |
342
+ | 403 | 권한 없음 | 접근이 금지되었습니다 |
343
+ | 404 | 찾을 수 없음 | 찾을 수 없습니다 |
344
+ | 409 | 충돌 | 사용자가 이미 존재합니다 |
345
+ | 413 | 페이로드 초과 | 요청 데이터가 너무 큽니다 |
346
+ | 422 | 유효성 검증 실패 | 올바른 이메일 형식이 아닙니다 |
347
+ | 500 | 서버 오류 | 서버 오류가 발생했습니다 |
348
+
349
+ ---
350
+
351
+ ## 💡 사용 예시
352
+
353
+ ### 1. Todo 앱 백엔드
354
+
355
+ ```json
356
+ {
357
+ "users": [],
358
+ "todos": [],
359
+ "rules": {
360
+ "todos": "private"
361
+ }
362
+ }
363
+ ```
364
+
365
+ ```bash
366
+ db-json-cli --db ./todo-db.json --port 3000
367
+ ```
368
+
369
+ ### 2. 블로그 백엔드
370
+
371
+ ```json
372
+ {
373
+ "users": [],
374
+ "posts": [],
375
+ "comments": [],
376
+ "rules": {
377
+ "posts": "public",
378
+ "comments": "private"
379
+ }
380
+ }
381
+ ```
382
+
383
+ ```bash
384
+ db-json-cli --db ./blog-db.json --port 4000
385
+ ```
386
+
387
+ ### 3. 쇼핑몰 백엔드
388
+
389
+ ```json
390
+ {
391
+ "users": [],
392
+ "products": [],
393
+ "orders": [],
394
+ "reviews": [],
395
+ "rules": {
396
+ "products": "public",
397
+ "orders": "private",
398
+ "reviews": "public"
399
+ }
400
+ }
401
+ ```
122
402
 
123
403
  ```bash
124
- db-json-cli --db ./src/db/db.json --port 5000
404
+ db-json-cli --db ./shop-db.json --port 5000
125
405
  ```
126
406
 
127
- - `--db` : JSON 파일 경로
128
- - `--port` : 포트
407
+ ---
408
+
409
+ ## 🎯 주요 기능
410
+
411
+ ### 자동 ID 생성
412
+
413
+ 새로운 항목을 생성할 때 ID는 자동으로 부여됩니다.
414
+
415
+ ```http
416
+ POST /todos
417
+ Content-Type: application/json
418
+
419
+ {
420
+ "title": "할 일"
421
+ }
422
+ ```
423
+
424
+ → 자동으로 `{ "id": 1, "title": "할 일" }` 생성
425
+
426
+ ### 비밀번호 암호화
427
+
428
+ 사용자 비밀번호는 bcrypt를 사용하여 자동으로 암호화됩니다.
429
+
430
+ ### JWT 토큰
431
+
432
+ - **Access Token**: 인증에 사용 (짧은 만료 시간)
433
+ - **Refresh Token**: Access Token 갱신에 사용 (긴 만료 시간)
434
+
435
+ ### 입력 검증
436
+
437
+ - 이메일 형식 검증
438
+ - 비밀번호 최소 길이 (8자)
439
+ - ID 형식 검증 (양의 정수)
440
+ - 쿼리 파라미터 검증
441
+ - 페이로드 크기 제한 (1MB)
129
442
 
130
443
  ---
131
444
 
132
- ### 5. 라이선스
445
+ ## 🔧 개발 환경
446
+
447
+ ### 요구사항
448
+
449
+ - Node.js 14.0.0 이상
450
+
451
+ ### 의존성
452
+
453
+ - `express`: 웹 서버
454
+ - `jsonwebtoken`: JWT 인증
455
+ - `bcryptjs`: 비밀번호 암호화
456
+ - `cors`: CORS 처리
133
457
 
134
- MIT © 2025 정지헌
458
+ ---
459
+
460
+ ## 📄 라이선스
461
+
462
+ MIT © 2026 hitorigotoh
463
+
464
+ ---
package/package.json CHANGED
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "name": "db-json-cli",
3
- "version": "2.0.4",
3
+ "version": "2.1.1",
4
4
  "license": "MIT",
5
- "description": "Lightweight JSON-based backend server with JWT authentication and CLI support",
5
+ "description": "JSON-based backend server with JWT authentication and CLI support",
6
6
  "repository": {
7
7
  "type": "git",
8
8
  "url": "https://github.com/JEONG-JI-HEON/db-json-cli.git"
@@ -29,18 +29,22 @@
29
29
  ".next/standalone/"
30
30
  ],
31
31
  "scripts": {
32
- "dev": "next dev",
32
+ "dev": "next dev --port 4000",
33
33
  "build": "next build && node scripts/post-build.js",
34
34
  "start": "next start",
35
35
  "prepublishOnly": "npm run build"
36
36
  },
37
37
  "dependencies": {
38
+ "@ant-design/icons": "^6.1.0",
39
+ "@tanstack/react-query": "^5.90.19",
40
+ "bcryptjs": "^2.4.3",
41
+ "fs-extra": "^11.2.0",
42
+ "jsonwebtoken": "^9.0.2",
43
+ "lucide-react": "^0.562.0",
38
44
  "next": "^14.0.0",
39
45
  "react": "^18.2.0",
40
46
  "react-dom": "^18.2.0",
41
- "fs-extra": "^11.2.0",
42
- "jsonwebtoken": "^9.0.2",
43
- "bcryptjs": "^2.4.3",
47
+ "sass": "^1.97.2",
44
48
  "yargs": "^17.7.2"
45
49
  }
46
50
  }