Spaces:
Running
Running
Commit
·
1628025
1
Parent(s):
1dea2ab
feat: auto find routes and controllers
Browse files- .vscode/settings.json +5 -0
- package-lock.json +416 -10
- package.json +2 -0
- src/index.route.ts +0 -20
- src/index.ts +2 -2
- src/lib/controllers/controller.base.ts +10 -0
- src/modules/common/decorators/prefix.decorator.ts +7 -0
- src/modules/user/users/controllers/auth.controller.ts +63 -39
- src/modules/user/users/routes/auth.route.ts +3 -3
- src/routes.ts +61 -0
- tsconfig.json +2 -1
.vscode/settings.json
ADDED
@@ -0,0 +1,5 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
{
|
2 |
+
"cSpell.words": [
|
3 |
+
"Routable"
|
4 |
+
]
|
5 |
+
}
|
package-lock.json
CHANGED
@@ -9,10 +9,12 @@
|
|
9 |
"version": "1.0.0",
|
10 |
"license": "ISC",
|
11 |
"dependencies": {
|
|
|
12 |
"bcrypt": "^5.1.1",
|
13 |
"cors": "^2.8.5",
|
14 |
"dotenv": "^16.3.1",
|
15 |
"express": "^4.18.2",
|
|
|
16 |
"http": "^0.0.1-security",
|
17 |
"joi": "^17.11.0",
|
18 |
"jsonwebtoken": "^9.0.2",
|
@@ -51,6 +53,68 @@
|
|
51 |
"@hapi/hoek": "^9.0.0"
|
52 |
}
|
53 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
54 |
"node_modules/@jridgewell/resolve-uri": {
|
55 |
"version": "3.1.1",
|
56 |
"resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz",
|
@@ -117,6 +181,15 @@
|
|
117 |
"sparse-bitfield": "^3.0.3"
|
118 |
}
|
119 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
120 |
"node_modules/@sideway/address": {
|
121 |
"version": "4.1.4",
|
122 |
"resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.4.tgz",
|
@@ -202,6 +275,15 @@
|
|
202 |
"@types/send": "*"
|
203 |
}
|
204 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
205 |
"node_modules/@types/http-errors": {
|
206 |
"version": "2.0.4",
|
207 |
"resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.4.tgz",
|
@@ -214,6 +296,11 @@
|
|
214 |
"integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==",
|
215 |
"dev": true
|
216 |
},
|
|
|
|
|
|
|
|
|
|
|
217 |
"node_modules/@types/node": {
|
218 |
"version": "20.10.4",
|
219 |
"resolved": "https://registry.npmjs.org/@types/node/-/node-20.10.4.tgz",
|
@@ -326,6 +413,17 @@
|
|
326 |
"node": ">=8"
|
327 |
}
|
328 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
329 |
"node_modules/anymatch": {
|
330 |
"version": "3.1.3",
|
331 |
"resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz",
|
@@ -484,6 +582,22 @@
|
|
484 |
"node": ">=10"
|
485 |
}
|
486 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
487 |
"node_modules/color-support": {
|
488 |
"version": "1.1.3",
|
489 |
"resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz",
|
@@ -552,6 +666,19 @@
|
|
552 |
"integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==",
|
553 |
"dev": true
|
554 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
555 |
"node_modules/debug": {
|
556 |
"version": "4.3.4",
|
557 |
"resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
|
@@ -631,6 +758,11 @@
|
|
631 |
"url": "https://github.com/motdotla/dotenv?sponsor=1"
|
632 |
}
|
633 |
},
|
|
|
|
|
|
|
|
|
|
|
634 |
"node_modules/ecdsa-sig-formatter": {
|
635 |
"version": "1.0.11",
|
636 |
"resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz",
|
@@ -803,6 +935,32 @@
|
|
803 |
"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
|
804 |
"integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="
|
805 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
806 |
"node_modules/forwarded": {
|
807 |
"version": "0.2.0",
|
808 |
"resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz",
|
@@ -902,19 +1060,21 @@
|
|
902 |
}
|
903 |
},
|
904 |
"node_modules/glob": {
|
905 |
-
"version": "
|
906 |
-
"resolved": "https://registry.npmjs.org/glob/-/glob-
|
907 |
-
"integrity": "sha512-
|
908 |
"dependencies": {
|
909 |
-
"
|
910 |
-
"
|
911 |
-
"
|
912 |
-
"
|
913 |
-
"
|
914 |
-
|
|
|
|
|
915 |
},
|
916 |
"engines": {
|
917 |
-
"node": "
|
918 |
},
|
919 |
"funding": {
|
920 |
"url": "https://github.com/sponsors/isaacs"
|
@@ -932,6 +1092,28 @@
|
|
932 |
"node": ">= 6"
|
933 |
}
|
934 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
935 |
"node_modules/gopd": {
|
936 |
"version": "1.0.1",
|
937 |
"resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz",
|
@@ -1122,6 +1304,28 @@
|
|
1122 |
"node": ">=0.12.0"
|
1123 |
}
|
1124 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1125 |
"node_modules/joi": {
|
1126 |
"version": "17.11.0",
|
1127 |
"resolved": "https://registry.npmjs.org/joi/-/joi-17.11.0.tgz",
|
@@ -1643,6 +1847,37 @@
|
|
1643 |
"node": ">=0.10.0"
|
1644 |
}
|
1645 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1646 |
"node_modules/path-to-regexp": {
|
1647 |
"version": "0.1.7",
|
1648 |
"resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz",
|
@@ -1755,6 +1990,25 @@
|
|
1755 |
"url": "https://github.com/sponsors/isaacs"
|
1756 |
}
|
1757 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1758 |
"node_modules/safe-buffer": {
|
1759 |
"version": "5.2.1",
|
1760 |
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
|
@@ -1872,6 +2126,25 @@
|
|
1872 |
"resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz",
|
1873 |
"integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw=="
|
1874 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1875 |
"node_modules/side-channel": {
|
1876 |
"version": "1.0.4",
|
1877 |
"resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz",
|
@@ -1944,6 +2217,20 @@
|
|
1944 |
"node": ">=8"
|
1945 |
}
|
1946 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1947 |
"node_modules/strip-ansi": {
|
1948 |
"version": "6.0.1",
|
1949 |
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
|
@@ -1955,6 +2242,18 @@
|
|
1955 |
"node": ">=8"
|
1956 |
}
|
1957 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1958 |
"node_modules/supports-color": {
|
1959 |
"version": "5.5.0",
|
1960 |
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
|
@@ -2173,6 +2472,20 @@
|
|
2173 |
"node": ">=12"
|
2174 |
}
|
2175 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2176 |
"node_modules/wide-align": {
|
2177 |
"version": "1.1.5",
|
2178 |
"resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz",
|
@@ -2181,6 +2494,99 @@
|
|
2181 |
"string-width": "^1.0.2 || 2 || 3 || 4"
|
2182 |
}
|
2183 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2184 |
"node_modules/wrappy": {
|
2185 |
"version": "1.0.2",
|
2186 |
"resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
|
|
|
9 |
"version": "1.0.0",
|
10 |
"license": "ISC",
|
11 |
"dependencies": {
|
12 |
+
"@types/glob": "^8.1.0",
|
13 |
"bcrypt": "^5.1.1",
|
14 |
"cors": "^2.8.5",
|
15 |
"dotenv": "^16.3.1",
|
16 |
"express": "^4.18.2",
|
17 |
+
"glob": "^10.3.10",
|
18 |
"http": "^0.0.1-security",
|
19 |
"joi": "^17.11.0",
|
20 |
"jsonwebtoken": "^9.0.2",
|
|
|
53 |
"@hapi/hoek": "^9.0.0"
|
54 |
}
|
55 |
},
|
56 |
+
"node_modules/@isaacs/cliui": {
|
57 |
+
"version": "8.0.2",
|
58 |
+
"resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz",
|
59 |
+
"integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==",
|
60 |
+
"dependencies": {
|
61 |
+
"string-width": "^5.1.2",
|
62 |
+
"string-width-cjs": "npm:string-width@^4.2.0",
|
63 |
+
"strip-ansi": "^7.0.1",
|
64 |
+
"strip-ansi-cjs": "npm:strip-ansi@^6.0.1",
|
65 |
+
"wrap-ansi": "^8.1.0",
|
66 |
+
"wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0"
|
67 |
+
},
|
68 |
+
"engines": {
|
69 |
+
"node": ">=12"
|
70 |
+
}
|
71 |
+
},
|
72 |
+
"node_modules/@isaacs/cliui/node_modules/ansi-regex": {
|
73 |
+
"version": "6.0.1",
|
74 |
+
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz",
|
75 |
+
"integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==",
|
76 |
+
"engines": {
|
77 |
+
"node": ">=12"
|
78 |
+
},
|
79 |
+
"funding": {
|
80 |
+
"url": "https://github.com/chalk/ansi-regex?sponsor=1"
|
81 |
+
}
|
82 |
+
},
|
83 |
+
"node_modules/@isaacs/cliui/node_modules/emoji-regex": {
|
84 |
+
"version": "9.2.2",
|
85 |
+
"resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz",
|
86 |
+
"integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg=="
|
87 |
+
},
|
88 |
+
"node_modules/@isaacs/cliui/node_modules/string-width": {
|
89 |
+
"version": "5.1.2",
|
90 |
+
"resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz",
|
91 |
+
"integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==",
|
92 |
+
"dependencies": {
|
93 |
+
"eastasianwidth": "^0.2.0",
|
94 |
+
"emoji-regex": "^9.2.2",
|
95 |
+
"strip-ansi": "^7.0.1"
|
96 |
+
},
|
97 |
+
"engines": {
|
98 |
+
"node": ">=12"
|
99 |
+
},
|
100 |
+
"funding": {
|
101 |
+
"url": "https://github.com/sponsors/sindresorhus"
|
102 |
+
}
|
103 |
+
},
|
104 |
+
"node_modules/@isaacs/cliui/node_modules/strip-ansi": {
|
105 |
+
"version": "7.1.0",
|
106 |
+
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz",
|
107 |
+
"integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==",
|
108 |
+
"dependencies": {
|
109 |
+
"ansi-regex": "^6.0.1"
|
110 |
+
},
|
111 |
+
"engines": {
|
112 |
+
"node": ">=12"
|
113 |
+
},
|
114 |
+
"funding": {
|
115 |
+
"url": "https://github.com/chalk/strip-ansi?sponsor=1"
|
116 |
+
}
|
117 |
+
},
|
118 |
"node_modules/@jridgewell/resolve-uri": {
|
119 |
"version": "3.1.1",
|
120 |
"resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz",
|
|
|
181 |
"sparse-bitfield": "^3.0.3"
|
182 |
}
|
183 |
},
|
184 |
+
"node_modules/@pkgjs/parseargs": {
|
185 |
+
"version": "0.11.0",
|
186 |
+
"resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz",
|
187 |
+
"integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==",
|
188 |
+
"optional": true,
|
189 |
+
"engines": {
|
190 |
+
"node": ">=14"
|
191 |
+
}
|
192 |
+
},
|
193 |
"node_modules/@sideway/address": {
|
194 |
"version": "4.1.4",
|
195 |
"resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.4.tgz",
|
|
|
275 |
"@types/send": "*"
|
276 |
}
|
277 |
},
|
278 |
+
"node_modules/@types/glob": {
|
279 |
+
"version": "8.1.0",
|
280 |
+
"resolved": "https://registry.npmjs.org/@types/glob/-/glob-8.1.0.tgz",
|
281 |
+
"integrity": "sha512-IO+MJPVhoqz+28h1qLAcBEH2+xHMK6MTyHJc7MTnnYb6wsoLR29POVGJ7LycmVXIqyy/4/2ShP5sUwTXuOwb/w==",
|
282 |
+
"dependencies": {
|
283 |
+
"@types/minimatch": "^5.1.2",
|
284 |
+
"@types/node": "*"
|
285 |
+
}
|
286 |
+
},
|
287 |
"node_modules/@types/http-errors": {
|
288 |
"version": "2.0.4",
|
289 |
"resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.4.tgz",
|
|
|
296 |
"integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==",
|
297 |
"dev": true
|
298 |
},
|
299 |
+
"node_modules/@types/minimatch": {
|
300 |
+
"version": "5.1.2",
|
301 |
+
"resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-5.1.2.tgz",
|
302 |
+
"integrity": "sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA=="
|
303 |
+
},
|
304 |
"node_modules/@types/node": {
|
305 |
"version": "20.10.4",
|
306 |
"resolved": "https://registry.npmjs.org/@types/node/-/node-20.10.4.tgz",
|
|
|
413 |
"node": ">=8"
|
414 |
}
|
415 |
},
|
416 |
+
"node_modules/ansi-styles": {
|
417 |
+
"version": "6.2.1",
|
418 |
+
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz",
|
419 |
+
"integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==",
|
420 |
+
"engines": {
|
421 |
+
"node": ">=12"
|
422 |
+
},
|
423 |
+
"funding": {
|
424 |
+
"url": "https://github.com/chalk/ansi-styles?sponsor=1"
|
425 |
+
}
|
426 |
+
},
|
427 |
"node_modules/anymatch": {
|
428 |
"version": "3.1.3",
|
429 |
"resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz",
|
|
|
582 |
"node": ">=10"
|
583 |
}
|
584 |
},
|
585 |
+
"node_modules/color-convert": {
|
586 |
+
"version": "2.0.1",
|
587 |
+
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
|
588 |
+
"integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
|
589 |
+
"dependencies": {
|
590 |
+
"color-name": "~1.1.4"
|
591 |
+
},
|
592 |
+
"engines": {
|
593 |
+
"node": ">=7.0.0"
|
594 |
+
}
|
595 |
+
},
|
596 |
+
"node_modules/color-name": {
|
597 |
+
"version": "1.1.4",
|
598 |
+
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
|
599 |
+
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
|
600 |
+
},
|
601 |
"node_modules/color-support": {
|
602 |
"version": "1.1.3",
|
603 |
"resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz",
|
|
|
666 |
"integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==",
|
667 |
"dev": true
|
668 |
},
|
669 |
+
"node_modules/cross-spawn": {
|
670 |
+
"version": "7.0.3",
|
671 |
+
"resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
|
672 |
+
"integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
|
673 |
+
"dependencies": {
|
674 |
+
"path-key": "^3.1.0",
|
675 |
+
"shebang-command": "^2.0.0",
|
676 |
+
"which": "^2.0.1"
|
677 |
+
},
|
678 |
+
"engines": {
|
679 |
+
"node": ">= 8"
|
680 |
+
}
|
681 |
+
},
|
682 |
"node_modules/debug": {
|
683 |
"version": "4.3.4",
|
684 |
"resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
|
|
|
758 |
"url": "https://github.com/motdotla/dotenv?sponsor=1"
|
759 |
}
|
760 |
},
|
761 |
+
"node_modules/eastasianwidth": {
|
762 |
+
"version": "0.2.0",
|
763 |
+
"resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz",
|
764 |
+
"integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA=="
|
765 |
+
},
|
766 |
"node_modules/ecdsa-sig-formatter": {
|
767 |
"version": "1.0.11",
|
768 |
"resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz",
|
|
|
935 |
"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
|
936 |
"integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="
|
937 |
},
|
938 |
+
"node_modules/foreground-child": {
|
939 |
+
"version": "3.1.1",
|
940 |
+
"resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz",
|
941 |
+
"integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==",
|
942 |
+
"dependencies": {
|
943 |
+
"cross-spawn": "^7.0.0",
|
944 |
+
"signal-exit": "^4.0.1"
|
945 |
+
},
|
946 |
+
"engines": {
|
947 |
+
"node": ">=14"
|
948 |
+
},
|
949 |
+
"funding": {
|
950 |
+
"url": "https://github.com/sponsors/isaacs"
|
951 |
+
}
|
952 |
+
},
|
953 |
+
"node_modules/foreground-child/node_modules/signal-exit": {
|
954 |
+
"version": "4.1.0",
|
955 |
+
"resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz",
|
956 |
+
"integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==",
|
957 |
+
"engines": {
|
958 |
+
"node": ">=14"
|
959 |
+
},
|
960 |
+
"funding": {
|
961 |
+
"url": "https://github.com/sponsors/isaacs"
|
962 |
+
}
|
963 |
+
},
|
964 |
"node_modules/forwarded": {
|
965 |
"version": "0.2.0",
|
966 |
"resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz",
|
|
|
1060 |
}
|
1061 |
},
|
1062 |
"node_modules/glob": {
|
1063 |
+
"version": "10.3.10",
|
1064 |
+
"resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz",
|
1065 |
+
"integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==",
|
1066 |
"dependencies": {
|
1067 |
+
"foreground-child": "^3.1.0",
|
1068 |
+
"jackspeak": "^2.3.5",
|
1069 |
+
"minimatch": "^9.0.1",
|
1070 |
+
"minipass": "^5.0.0 || ^6.0.2 || ^7.0.0",
|
1071 |
+
"path-scurry": "^1.10.1"
|
1072 |
+
},
|
1073 |
+
"bin": {
|
1074 |
+
"glob": "dist/esm/bin.mjs"
|
1075 |
},
|
1076 |
"engines": {
|
1077 |
+
"node": ">=16 || 14 >=14.17"
|
1078 |
},
|
1079 |
"funding": {
|
1080 |
"url": "https://github.com/sponsors/isaacs"
|
|
|
1092 |
"node": ">= 6"
|
1093 |
}
|
1094 |
},
|
1095 |
+
"node_modules/glob/node_modules/brace-expansion": {
|
1096 |
+
"version": "2.0.1",
|
1097 |
+
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
|
1098 |
+
"integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
|
1099 |
+
"dependencies": {
|
1100 |
+
"balanced-match": "^1.0.0"
|
1101 |
+
}
|
1102 |
+
},
|
1103 |
+
"node_modules/glob/node_modules/minimatch": {
|
1104 |
+
"version": "9.0.3",
|
1105 |
+
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz",
|
1106 |
+
"integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==",
|
1107 |
+
"dependencies": {
|
1108 |
+
"brace-expansion": "^2.0.1"
|
1109 |
+
},
|
1110 |
+
"engines": {
|
1111 |
+
"node": ">=16 || 14 >=14.17"
|
1112 |
+
},
|
1113 |
+
"funding": {
|
1114 |
+
"url": "https://github.com/sponsors/isaacs"
|
1115 |
+
}
|
1116 |
+
},
|
1117 |
"node_modules/gopd": {
|
1118 |
"version": "1.0.1",
|
1119 |
"resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz",
|
|
|
1304 |
"node": ">=0.12.0"
|
1305 |
}
|
1306 |
},
|
1307 |
+
"node_modules/isexe": {
|
1308 |
+
"version": "2.0.0",
|
1309 |
+
"resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
|
1310 |
+
"integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw=="
|
1311 |
+
},
|
1312 |
+
"node_modules/jackspeak": {
|
1313 |
+
"version": "2.3.6",
|
1314 |
+
"resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.6.tgz",
|
1315 |
+
"integrity": "sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==",
|
1316 |
+
"dependencies": {
|
1317 |
+
"@isaacs/cliui": "^8.0.2"
|
1318 |
+
},
|
1319 |
+
"engines": {
|
1320 |
+
"node": ">=14"
|
1321 |
+
},
|
1322 |
+
"funding": {
|
1323 |
+
"url": "https://github.com/sponsors/isaacs"
|
1324 |
+
},
|
1325 |
+
"optionalDependencies": {
|
1326 |
+
"@pkgjs/parseargs": "^0.11.0"
|
1327 |
+
}
|
1328 |
+
},
|
1329 |
"node_modules/joi": {
|
1330 |
"version": "17.11.0",
|
1331 |
"resolved": "https://registry.npmjs.org/joi/-/joi-17.11.0.tgz",
|
|
|
1847 |
"node": ">=0.10.0"
|
1848 |
}
|
1849 |
},
|
1850 |
+
"node_modules/path-key": {
|
1851 |
+
"version": "3.1.1",
|
1852 |
+
"resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
|
1853 |
+
"integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
|
1854 |
+
"engines": {
|
1855 |
+
"node": ">=8"
|
1856 |
+
}
|
1857 |
+
},
|
1858 |
+
"node_modules/path-scurry": {
|
1859 |
+
"version": "1.10.1",
|
1860 |
+
"resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.1.tgz",
|
1861 |
+
"integrity": "sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==",
|
1862 |
+
"dependencies": {
|
1863 |
+
"lru-cache": "^9.1.1 || ^10.0.0",
|
1864 |
+
"minipass": "^5.0.0 || ^6.0.2 || ^7.0.0"
|
1865 |
+
},
|
1866 |
+
"engines": {
|
1867 |
+
"node": ">=16 || 14 >=14.17"
|
1868 |
+
},
|
1869 |
+
"funding": {
|
1870 |
+
"url": "https://github.com/sponsors/isaacs"
|
1871 |
+
}
|
1872 |
+
},
|
1873 |
+
"node_modules/path-scurry/node_modules/lru-cache": {
|
1874 |
+
"version": "10.1.0",
|
1875 |
+
"resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.1.0.tgz",
|
1876 |
+
"integrity": "sha512-/1clY/ui8CzjKFyjdvwPWJUYKiFVXG2I2cY0ssG7h4+hwk+XOIX7ZSG9Q7TW8TW3Kp3BUSqgFWBLgL4PJ+Blag==",
|
1877 |
+
"engines": {
|
1878 |
+
"node": "14 || >=16.14"
|
1879 |
+
}
|
1880 |
+
},
|
1881 |
"node_modules/path-to-regexp": {
|
1882 |
"version": "0.1.7",
|
1883 |
"resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz",
|
|
|
1990 |
"url": "https://github.com/sponsors/isaacs"
|
1991 |
}
|
1992 |
},
|
1993 |
+
"node_modules/rimraf/node_modules/glob": {
|
1994 |
+
"version": "7.2.3",
|
1995 |
+
"resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
|
1996 |
+
"integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
|
1997 |
+
"dependencies": {
|
1998 |
+
"fs.realpath": "^1.0.0",
|
1999 |
+
"inflight": "^1.0.4",
|
2000 |
+
"inherits": "2",
|
2001 |
+
"minimatch": "^3.1.1",
|
2002 |
+
"once": "^1.3.0",
|
2003 |
+
"path-is-absolute": "^1.0.0"
|
2004 |
+
},
|
2005 |
+
"engines": {
|
2006 |
+
"node": "*"
|
2007 |
+
},
|
2008 |
+
"funding": {
|
2009 |
+
"url": "https://github.com/sponsors/isaacs"
|
2010 |
+
}
|
2011 |
+
},
|
2012 |
"node_modules/safe-buffer": {
|
2013 |
"version": "5.2.1",
|
2014 |
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
|
|
|
2126 |
"resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz",
|
2127 |
"integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw=="
|
2128 |
},
|
2129 |
+
"node_modules/shebang-command": {
|
2130 |
+
"version": "2.0.0",
|
2131 |
+
"resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
|
2132 |
+
"integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
|
2133 |
+
"dependencies": {
|
2134 |
+
"shebang-regex": "^3.0.0"
|
2135 |
+
},
|
2136 |
+
"engines": {
|
2137 |
+
"node": ">=8"
|
2138 |
+
}
|
2139 |
+
},
|
2140 |
+
"node_modules/shebang-regex": {
|
2141 |
+
"version": "3.0.0",
|
2142 |
+
"resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
|
2143 |
+
"integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
|
2144 |
+
"engines": {
|
2145 |
+
"node": ">=8"
|
2146 |
+
}
|
2147 |
+
},
|
2148 |
"node_modules/side-channel": {
|
2149 |
"version": "1.0.4",
|
2150 |
"resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz",
|
|
|
2217 |
"node": ">=8"
|
2218 |
}
|
2219 |
},
|
2220 |
+
"node_modules/string-width-cjs": {
|
2221 |
+
"name": "string-width",
|
2222 |
+
"version": "4.2.3",
|
2223 |
+
"resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
|
2224 |
+
"integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
|
2225 |
+
"dependencies": {
|
2226 |
+
"emoji-regex": "^8.0.0",
|
2227 |
+
"is-fullwidth-code-point": "^3.0.0",
|
2228 |
+
"strip-ansi": "^6.0.1"
|
2229 |
+
},
|
2230 |
+
"engines": {
|
2231 |
+
"node": ">=8"
|
2232 |
+
}
|
2233 |
+
},
|
2234 |
"node_modules/strip-ansi": {
|
2235 |
"version": "6.0.1",
|
2236 |
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
|
|
|
2242 |
"node": ">=8"
|
2243 |
}
|
2244 |
},
|
2245 |
+
"node_modules/strip-ansi-cjs": {
|
2246 |
+
"name": "strip-ansi",
|
2247 |
+
"version": "6.0.1",
|
2248 |
+
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
|
2249 |
+
"integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
|
2250 |
+
"dependencies": {
|
2251 |
+
"ansi-regex": "^5.0.1"
|
2252 |
+
},
|
2253 |
+
"engines": {
|
2254 |
+
"node": ">=8"
|
2255 |
+
}
|
2256 |
+
},
|
2257 |
"node_modules/supports-color": {
|
2258 |
"version": "5.5.0",
|
2259 |
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
|
|
|
2472 |
"node": ">=12"
|
2473 |
}
|
2474 |
},
|
2475 |
+
"node_modules/which": {
|
2476 |
+
"version": "2.0.2",
|
2477 |
+
"resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
|
2478 |
+
"integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
|
2479 |
+
"dependencies": {
|
2480 |
+
"isexe": "^2.0.0"
|
2481 |
+
},
|
2482 |
+
"bin": {
|
2483 |
+
"node-which": "bin/node-which"
|
2484 |
+
},
|
2485 |
+
"engines": {
|
2486 |
+
"node": ">= 8"
|
2487 |
+
}
|
2488 |
+
},
|
2489 |
"node_modules/wide-align": {
|
2490 |
"version": "1.1.5",
|
2491 |
"resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz",
|
|
|
2494 |
"string-width": "^1.0.2 || 2 || 3 || 4"
|
2495 |
}
|
2496 |
},
|
2497 |
+
"node_modules/wrap-ansi": {
|
2498 |
+
"version": "8.1.0",
|
2499 |
+
"resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz",
|
2500 |
+
"integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==",
|
2501 |
+
"dependencies": {
|
2502 |
+
"ansi-styles": "^6.1.0",
|
2503 |
+
"string-width": "^5.0.1",
|
2504 |
+
"strip-ansi": "^7.0.1"
|
2505 |
+
},
|
2506 |
+
"engines": {
|
2507 |
+
"node": ">=12"
|
2508 |
+
},
|
2509 |
+
"funding": {
|
2510 |
+
"url": "https://github.com/chalk/wrap-ansi?sponsor=1"
|
2511 |
+
}
|
2512 |
+
},
|
2513 |
+
"node_modules/wrap-ansi-cjs": {
|
2514 |
+
"name": "wrap-ansi",
|
2515 |
+
"version": "7.0.0",
|
2516 |
+
"resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
|
2517 |
+
"integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
|
2518 |
+
"dependencies": {
|
2519 |
+
"ansi-styles": "^4.0.0",
|
2520 |
+
"string-width": "^4.1.0",
|
2521 |
+
"strip-ansi": "^6.0.0"
|
2522 |
+
},
|
2523 |
+
"engines": {
|
2524 |
+
"node": ">=10"
|
2525 |
+
},
|
2526 |
+
"funding": {
|
2527 |
+
"url": "https://github.com/chalk/wrap-ansi?sponsor=1"
|
2528 |
+
}
|
2529 |
+
},
|
2530 |
+
"node_modules/wrap-ansi-cjs/node_modules/ansi-styles": {
|
2531 |
+
"version": "4.3.0",
|
2532 |
+
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
|
2533 |
+
"integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
|
2534 |
+
"dependencies": {
|
2535 |
+
"color-convert": "^2.0.1"
|
2536 |
+
},
|
2537 |
+
"engines": {
|
2538 |
+
"node": ">=8"
|
2539 |
+
},
|
2540 |
+
"funding": {
|
2541 |
+
"url": "https://github.com/chalk/ansi-styles?sponsor=1"
|
2542 |
+
}
|
2543 |
+
},
|
2544 |
+
"node_modules/wrap-ansi/node_modules/ansi-regex": {
|
2545 |
+
"version": "6.0.1",
|
2546 |
+
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz",
|
2547 |
+
"integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==",
|
2548 |
+
"engines": {
|
2549 |
+
"node": ">=12"
|
2550 |
+
},
|
2551 |
+
"funding": {
|
2552 |
+
"url": "https://github.com/chalk/ansi-regex?sponsor=1"
|
2553 |
+
}
|
2554 |
+
},
|
2555 |
+
"node_modules/wrap-ansi/node_modules/emoji-regex": {
|
2556 |
+
"version": "9.2.2",
|
2557 |
+
"resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz",
|
2558 |
+
"integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg=="
|
2559 |
+
},
|
2560 |
+
"node_modules/wrap-ansi/node_modules/string-width": {
|
2561 |
+
"version": "5.1.2",
|
2562 |
+
"resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz",
|
2563 |
+
"integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==",
|
2564 |
+
"dependencies": {
|
2565 |
+
"eastasianwidth": "^0.2.0",
|
2566 |
+
"emoji-regex": "^9.2.2",
|
2567 |
+
"strip-ansi": "^7.0.1"
|
2568 |
+
},
|
2569 |
+
"engines": {
|
2570 |
+
"node": ">=12"
|
2571 |
+
},
|
2572 |
+
"funding": {
|
2573 |
+
"url": "https://github.com/sponsors/sindresorhus"
|
2574 |
+
}
|
2575 |
+
},
|
2576 |
+
"node_modules/wrap-ansi/node_modules/strip-ansi": {
|
2577 |
+
"version": "7.1.0",
|
2578 |
+
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz",
|
2579 |
+
"integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==",
|
2580 |
+
"dependencies": {
|
2581 |
+
"ansi-regex": "^6.0.1"
|
2582 |
+
},
|
2583 |
+
"engines": {
|
2584 |
+
"node": ">=12"
|
2585 |
+
},
|
2586 |
+
"funding": {
|
2587 |
+
"url": "https://github.com/chalk/strip-ansi?sponsor=1"
|
2588 |
+
}
|
2589 |
+
},
|
2590 |
"node_modules/wrappy": {
|
2591 |
"version": "1.0.2",
|
2592 |
"resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
|
package.json
CHANGED
@@ -18,10 +18,12 @@
|
|
18 |
"typescript": "^5.3.3"
|
19 |
},
|
20 |
"dependencies": {
|
|
|
21 |
"bcrypt": "^5.1.1",
|
22 |
"cors": "^2.8.5",
|
23 |
"dotenv": "^16.3.1",
|
24 |
"express": "^4.18.2",
|
|
|
25 |
"http": "^0.0.1-security",
|
26 |
"joi": "^17.11.0",
|
27 |
"jsonwebtoken": "^9.0.2",
|
|
|
18 |
"typescript": "^5.3.3"
|
19 |
},
|
20 |
"dependencies": {
|
21 |
+
"@types/glob": "^8.1.0",
|
22 |
"bcrypt": "^5.1.1",
|
23 |
"cors": "^2.8.5",
|
24 |
"dotenv": "^16.3.1",
|
25 |
"express": "^4.18.2",
|
26 |
+
"glob": "^10.3.10",
|
27 |
"http": "^0.0.1-security",
|
28 |
"joi": "^17.11.0",
|
29 |
"jsonwebtoken": "^9.0.2",
|
src/index.route.ts
DELETED
@@ -1,20 +0,0 @@
|
|
1 |
-
import express from "express";
|
2 |
-
|
3 |
-
import { userRoutes } from "./modules/user/index.route";
|
4 |
-
import { adminRouter } from "./modules/console/index.route";
|
5 |
-
|
6 |
-
const mainRouter = express.Router();
|
7 |
-
|
8 |
-
mainRouter.use("/user", userRoutes);
|
9 |
-
mainRouter.use("/admin", adminRouter);
|
10 |
-
|
11 |
-
mainRouter.get("/health", (_req: any, res: any) => {
|
12 |
-
res.status(200).json({ success: true, message: "Server is up!", code: 200 });
|
13 |
-
});
|
14 |
-
|
15 |
-
// catch non existing routes
|
16 |
-
mainRouter.all("*", (_req: any, res: any) => {
|
17 |
-
res.status(404).json({ success: false, message: "Invalid URL!", code: 404 });
|
18 |
-
});
|
19 |
-
|
20 |
-
export { mainRouter };
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
src/index.ts
CHANGED
@@ -2,7 +2,7 @@ import express from "express";
|
|
2 |
import cors from "cors";
|
3 |
import { connectDatabase } from "./configs/database";
|
4 |
import { config } from "./configs/config";
|
5 |
-
import {
|
6 |
|
7 |
const main = async () => {
|
8 |
// set up database connection
|
@@ -17,7 +17,7 @@ const main = async () => {
|
|
17 |
app.use(express.json());
|
18 |
|
19 |
// set up routes
|
20 |
-
app
|
21 |
|
22 |
// start server
|
23 |
app.listen(config.port, () => {
|
|
|
2 |
import cors from "cors";
|
3 |
import { connectDatabase } from "./configs/database";
|
4 |
import { config } from "./configs/config";
|
5 |
+
import { setAppRoutes } from "./routes";
|
6 |
|
7 |
const main = async () => {
|
8 |
// set up database connection
|
|
|
17 |
app.use(express.json());
|
18 |
|
19 |
// set up routes
|
20 |
+
await setAppRoutes(app);
|
21 |
|
22 |
// start server
|
23 |
app.listen(config.port, () => {
|
src/lib/controllers/controller.base.ts
ADDED
@@ -0,0 +1,10 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import { Router } from "express";
|
2 |
+
|
3 |
+
export abstract class BaseController {
|
4 |
+
public static router: Router = Router();
|
5 |
+
public static prefix: string = "/";
|
6 |
+
|
7 |
+
public static setRoutes(_router: Router) {
|
8 |
+
throw new Error(`routes not set for ${this.name}`);
|
9 |
+
}
|
10 |
+
}
|
src/modules/common/decorators/prefix.decorator.ts
ADDED
@@ -0,0 +1,7 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import { BaseController } from "../../../lib/controllers/controller.base";
|
2 |
+
|
3 |
+
export const Prefix = (prefix: string) => {
|
4 |
+
return (target: typeof BaseController) => {
|
5 |
+
target.prefix = prefix || target.prefix;
|
6 |
+
};
|
7 |
+
};
|
src/modules/user/users/controllers/auth.controller.ts
CHANGED
@@ -1,46 +1,70 @@
|
|
1 |
import { usersService } from "../services/users.service";
|
2 |
import { jwtHelper } from "../../../../helpers/jwt.helper";
|
|
|
|
|
|
|
|
|
|
|
3 |
|
4 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
5 |
|
6 |
-
|
7 |
-
|
8 |
-
|
9 |
-
|
10 |
-
|
11 |
-
|
12 |
-
|
13 |
-
|
14 |
-
|
15 |
-
|
16 |
-
|
17 |
-
}
|
18 |
}
|
|
|
19 |
|
20 |
-
|
21 |
-
|
22 |
-
|
23 |
-
|
24 |
-
|
25 |
-
|
26 |
-
|
27 |
-
|
28 |
-
|
29 |
-
|
30 |
-
|
31 |
-
|
32 |
-
|
33 |
-
|
34 |
-
|
35 |
-
|
36 |
-
|
37 |
-
|
38 |
-
|
39 |
-
|
40 |
-
|
41 |
-
|
42 |
-
|
43 |
-
|
44 |
-
|
|
|
|
|
|
|
|
|
|
|
45 |
}
|
46 |
-
}
|
|
|
|
1 |
import { usersService } from "../services/users.service";
|
2 |
import { jwtHelper } from "../../../../helpers/jwt.helper";
|
3 |
+
import { BaseController } from "../../../../lib/controllers/controller.base";
|
4 |
+
import { validator } from "../../../../helpers/validation.helper";
|
5 |
+
import { userValidation } from "../validation/user.Validation";
|
6 |
+
import { Router } from "express";
|
7 |
+
import { Prefix } from "../../../common/decorators/prefix.decorator";
|
8 |
|
9 |
+
@Prefix("/user")
|
10 |
+
export class AuthController extends BaseController {
|
11 |
+
static setRoutes(router: Router): void {
|
12 |
+
router.post(
|
13 |
+
"/register",
|
14 |
+
validator(userValidation.createValidation),
|
15 |
+
AuthController.register
|
16 |
+
);
|
17 |
+
router.post(
|
18 |
+
"/login",
|
19 |
+
validator(userValidation.loginValidation),
|
20 |
+
AuthController.login
|
21 |
+
);
|
22 |
+
}
|
23 |
|
24 |
+
static async register(req, res) {
|
25 |
+
try {
|
26 |
+
let result = await usersService.create(req.body);
|
27 |
+
return res.status(result.code).json(result);
|
28 |
+
} catch (err) {
|
29 |
+
console.log(`err.message`, err.message);
|
30 |
+
return res.status(500).json({
|
31 |
+
success: false,
|
32 |
+
code: 500,
|
33 |
+
error: err.message,
|
34 |
+
});
|
|
|
35 |
}
|
36 |
+
}
|
37 |
|
38 |
+
static async login(req, res) {
|
39 |
+
try {
|
40 |
+
const { email, password } = req.body;
|
41 |
+
let result: {
|
42 |
+
success: boolean;
|
43 |
+
code: number;
|
44 |
+
record?: any;
|
45 |
+
message?: string;
|
46 |
+
} = await usersService.comparePassword(email, password);
|
47 |
+
if (!result.success) return res.status(result.code).json(result);
|
48 |
+
let payload = {
|
49 |
+
_id: result.record?._id,
|
50 |
+
name: result.record?.name,
|
51 |
+
email: result.record?.email,
|
52 |
+
number: result.record?.number,
|
53 |
+
role: result.record?.role,
|
54 |
+
};
|
55 |
+
const token = jwtHelper.generateToken(payload);
|
56 |
+
return res.status(result.code).json({
|
57 |
+
success: result.success,
|
58 |
+
token,
|
59 |
+
code: result.code,
|
60 |
+
record: result.record,
|
61 |
+
});
|
62 |
+
} catch (err) {
|
63 |
+
console.log(`err.message`, err.message);
|
64 |
+
return res.status(500).json({
|
65 |
+
success: false,
|
66 |
+
message: err.message,
|
67 |
+
});
|
68 |
}
|
69 |
+
}
|
70 |
+
}
|
src/modules/user/users/routes/auth.route.ts
CHANGED
@@ -1,12 +1,12 @@
|
|
1 |
import express from "express";
|
2 |
-
import {
|
3 |
import { userValidation } from "../validation/user.Validation";
|
4 |
import { validator } from "../../../../helpers/validation.helper";
|
5 |
|
6 |
const app = express.Router();
|
7 |
|
8 |
-
app.post("/register", validator(userValidation.createValidation),
|
9 |
-
app.post("/login", validator(userValidation.loginValidation),
|
10 |
|
11 |
export { app as authRoutes };
|
12 |
|
|
|
1 |
import express from "express";
|
2 |
+
import { AuthController } from "../controllers/auth.controller";
|
3 |
import { userValidation } from "../validation/user.Validation";
|
4 |
import { validator } from "../../../../helpers/validation.helper";
|
5 |
|
6 |
const app = express.Router();
|
7 |
|
8 |
+
// app.post("/register", validator(userValidation.createValidation), AuthController.register);
|
9 |
+
// app.post("/login", validator(userValidation.loginValidation), AuthController.login);
|
10 |
|
11 |
export { app as authRoutes };
|
12 |
|
src/routes.ts
ADDED
@@ -0,0 +1,61 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import { Router, Express } from "express";
|
2 |
+
|
3 |
+
import { userRoutes } from "./modules/user/index.route";
|
4 |
+
import { adminRouter } from "./modules/console/index.route";
|
5 |
+
|
6 |
+
import * as glob from "glob";
|
7 |
+
import path from "path";
|
8 |
+
import { BaseController } from "./lib/controllers/controller.base";
|
9 |
+
|
10 |
+
export const setAppRoutes = async (app: Express) => {
|
11 |
+
const mainRouter = Router();
|
12 |
+
|
13 |
+
await importControllers(mainRouter);
|
14 |
+
setCustomRoutes(mainRouter);
|
15 |
+
|
16 |
+
app.use("/api/v1", mainRouter);
|
17 |
+
};
|
18 |
+
|
19 |
+
/* custom routes */
|
20 |
+
|
21 |
+
const setCustomRoutes = (router: Router) => {
|
22 |
+
router.use("/admin", adminRouter);
|
23 |
+
|
24 |
+
router.get("/health", (_req: any, res: any) => {
|
25 |
+
res
|
26 |
+
.status(200)
|
27 |
+
.json({ success: true, message: "Server is up!", code: 200 });
|
28 |
+
});
|
29 |
+
|
30 |
+
router.all("*", (_req: any, res: any) => {
|
31 |
+
res
|
32 |
+
.status(404)
|
33 |
+
.json({ success: false, message: "Invalid URL!", code: 404 });
|
34 |
+
});
|
35 |
+
};
|
36 |
+
|
37 |
+
/* importing all controllers */
|
38 |
+
|
39 |
+
const findControllerFiles = (): string[] => {
|
40 |
+
return glob.sync(path.join(__dirname, "**/*.controller.{ts,js}"));
|
41 |
+
};
|
42 |
+
|
43 |
+
const importControllers = async (router: Router) => {
|
44 |
+
const files = findControllerFiles();
|
45 |
+
|
46 |
+
await Promise.all(
|
47 |
+
files.map(async (file) => {
|
48 |
+
const controller = await importController(file);
|
49 |
+
if (!controller) return;
|
50 |
+
controller.setRoutes(controller.router);
|
51 |
+
router.use(controller.prefix, controller.router);
|
52 |
+
})
|
53 |
+
);
|
54 |
+
};
|
55 |
+
|
56 |
+
const importController = async (file: string) => {
|
57 |
+
const controllers = Object.values(await import(file));
|
58 |
+
return controllers.find(
|
59 |
+
(controller: { router?: Router }) => controller.router
|
60 |
+
) as typeof BaseController;
|
61 |
+
};
|
tsconfig.json
CHANGED
@@ -6,7 +6,8 @@
|
|
6 |
"target": "es6",
|
7 |
"moduleResolution": "node",
|
8 |
"sourceMap": true,
|
9 |
-
"outDir": "dist"
|
|
|
10 |
},
|
11 |
"lib": ["es2015"]
|
12 |
}
|
|
|
6 |
"target": "es6",
|
7 |
"moduleResolution": "node",
|
8 |
"sourceMap": true,
|
9 |
+
"outDir": "dist",
|
10 |
+
"experimentalDecorators": true,
|
11 |
},
|
12 |
"lib": ["es2015"]
|
13 |
}
|