mirror of
https://github.com/nestjs/nest.git
synced 2026-02-24 00:02:56 +00:00
Compare commits
455 Commits
v10.3.10
...
fix/valida
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
f76a69341e | ||
|
|
a3acefffda | ||
|
|
5064d9b4a4 | ||
|
|
d98524ab9c | ||
|
|
ddf99c39d0 | ||
|
|
691e7d448e | ||
|
|
518879b3d6 | ||
|
|
b770d7d9b2 | ||
|
|
8b978e3028 | ||
|
|
0f25e83229 | ||
|
|
f3ec5f22fa | ||
|
|
1dafb5fdce | ||
|
|
71e8acec39 | ||
|
|
6094701679 | ||
|
|
99b5a5bbfe | ||
|
|
1531e6a767 | ||
|
|
3fa80a9dab | ||
|
|
439516d7dc | ||
|
|
22c4e9cae3 | ||
|
|
2dda578d9a | ||
|
|
b65c41c5a8 | ||
|
|
f0c3cef7d4 | ||
|
|
e2e70c1bc3 | ||
|
|
70c18e9e7b | ||
|
|
102718ad1b | ||
|
|
02d26a6fd7 | ||
|
|
8279fb5319 | ||
|
|
d4e5743c9b | ||
|
|
b1e33ece5d | ||
|
|
e15d73190d | ||
|
|
4564503936 | ||
|
|
30a6b52c50 | ||
|
|
bc19f81729 | ||
|
|
989075e6c1 | ||
|
|
c60428a6fd | ||
|
|
92e2db8d99 | ||
|
|
5911ed245e | ||
|
|
1b4decf75e | ||
|
|
36756dd194 | ||
|
|
27193cc99f | ||
|
|
194732f4aa | ||
|
|
3559e0c1f2 | ||
|
|
2e4ebe4870 | ||
|
|
7d62aad5fc | ||
|
|
ef8f64cf42 | ||
|
|
afa667509f | ||
|
|
dc09280634 | ||
|
|
8115930ec8 | ||
|
|
8fc1c9786a | ||
|
|
2b9f2fd493 | ||
|
|
2867dff697 | ||
|
|
ee7eb9d48d | ||
|
|
f38a07719a | ||
|
|
af8cd7e4c9 | ||
|
|
c800b06a22 | ||
|
|
f00192f4f1 | ||
|
|
b8ddf4fa59 | ||
|
|
a9954025dd | ||
|
|
0d9b7c85db | ||
|
|
d9a592d899 | ||
|
|
ef24801fcc | ||
|
|
bde210677f | ||
|
|
d35006a0d3 | ||
|
|
29a80ba8ab | ||
|
|
3c5180d2d5 | ||
|
|
a7b73e3107 | ||
|
|
491ed77f22 | ||
|
|
e64ab182ba | ||
|
|
dade6d5889 | ||
|
|
49dc36d9e5 | ||
|
|
831d29553d | ||
|
|
1a076fc4cb | ||
|
|
5c6986f0c7 | ||
|
|
229d97f018 | ||
|
|
1fe4dc2cad | ||
|
|
bc4667c15a | ||
|
|
a544552f72 | ||
|
|
954616da7d | ||
|
|
c6b95f54a7 | ||
|
|
7843db3984 | ||
|
|
42e0798d8c | ||
|
|
d9c8df7d40 | ||
|
|
025b32f342 | ||
|
|
c28f92e0c3 | ||
|
|
bc3ba4861d | ||
|
|
8996a10235 | ||
|
|
2c6eea08a9 | ||
|
|
f63e7adc80 | ||
|
|
4d3d39158a | ||
|
|
198eaf7e5c | ||
|
|
94a1ca14a9 | ||
|
|
ed644e9877 | ||
|
|
bb2f2c4bb5 | ||
|
|
0ea48d2d7a | ||
|
|
508d2f3428 | ||
|
|
7cf4708a05 | ||
|
|
8c2e03dcc9 | ||
|
|
6ada824161 | ||
|
|
d2ca9ec757 | ||
|
|
78b3f0c912 | ||
|
|
980eb5bb0a | ||
|
|
160c3b37d8 | ||
|
|
d0f401ab6e | ||
|
|
89840cee57 | ||
|
|
94237439c4 | ||
|
|
9ee022495a | ||
|
|
9cd43532ae | ||
|
|
aff30bf63d | ||
|
|
0dafaaa0b9 | ||
|
|
93514fdc70 | ||
|
|
a46a7dbe12 | ||
|
|
9825529f40 | ||
|
|
826ff4b426 | ||
|
|
fd740b61a6 | ||
|
|
c936deccad | ||
|
|
47cda92922 | ||
|
|
d70d0ba209 | ||
|
|
0fbc2a65d1 | ||
|
|
fa56e58847 | ||
|
|
44c4f8fa8d | ||
|
|
1460c6b468 | ||
|
|
a1336bf60c | ||
|
|
4d46bd8f75 | ||
|
|
5ae7e0f214 | ||
|
|
166d5840c1 | ||
|
|
03e122a273 | ||
|
|
0682d390cb | ||
|
|
3c24de6e1f | ||
|
|
091722e179 | ||
|
|
7dca5bdf42 | ||
|
|
f9c5140a47 | ||
|
|
29fca46d55 | ||
|
|
d378fff036 | ||
|
|
b389a536fb | ||
|
|
6ca325476a | ||
|
|
2409e3c48b | ||
|
|
43e374c07b | ||
|
|
fd3dddf57a | ||
|
|
a6e9c9306f | ||
|
|
50ad923137 | ||
|
|
725e958e5d | ||
|
|
a26fca197d | ||
|
|
fd5697dd79 | ||
|
|
bd71e16a84 | ||
|
|
203395ce73 | ||
|
|
093860ad2b | ||
|
|
2b3cfb6d22 | ||
|
|
3e00cc01e3 | ||
|
|
508619c391 | ||
|
|
fefb01ec8e | ||
|
|
325be0a257 | ||
|
|
74e81c0b3b | ||
|
|
6d0ff386e3 | ||
|
|
1b40f2c90e | ||
|
|
c27b43a992 | ||
|
|
9690825f97 | ||
|
|
e7282af96d | ||
|
|
f23184d0cd | ||
|
|
f9c2a11a39 | ||
|
|
9d9b03366f | ||
|
|
51ba90249d | ||
|
|
545061c0b2 | ||
|
|
336815dfea | ||
|
|
6581bcf6c2 | ||
|
|
3149bbca59 | ||
|
|
a77a55291d | ||
|
|
d68a7c1e55 | ||
|
|
b5e34f4cfc | ||
|
|
3c162055e0 | ||
|
|
2fb629ec33 | ||
|
|
3014240ff5 | ||
|
|
d3dd896181 | ||
|
|
53c15f8ecd | ||
|
|
8a55668746 | ||
|
|
02a6e98108 | ||
|
|
f0f156821b | ||
|
|
1c8e510335 | ||
|
|
834a49ddf1 | ||
|
|
bf629e60cd | ||
|
|
2009e9b6af | ||
|
|
00ae6c523a | ||
|
|
b287aff5ba | ||
|
|
ac99d20955 | ||
|
|
508da6ee29 | ||
|
|
91c6f3dc03 | ||
|
|
fa9c0178cd | ||
|
|
e9235c02f9 | ||
|
|
8aecc3705e | ||
|
|
5ec4606bf8 | ||
|
|
3aa2b18f44 | ||
|
|
1010513535 | ||
|
|
923246a362 | ||
|
|
94069796f7 | ||
|
|
82c262e938 | ||
|
|
05b77911cd | ||
|
|
93caaacc7d | ||
|
|
696b4410a3 | ||
|
|
cfc2217a48 | ||
|
|
102577adb3 | ||
|
|
fff4b96de8 | ||
|
|
f593343a45 | ||
|
|
71c1a73120 | ||
|
|
6aa0f7d041 | ||
|
|
291cf96d41 | ||
|
|
484a956e89 | ||
|
|
54f0126440 | ||
|
|
fad1b1f57b | ||
|
|
b0d0ab8ac3 | ||
|
|
daaba39520 | ||
|
|
679812a1c7 | ||
|
|
918c0c1a43 | ||
|
|
1b3af389ea | ||
|
|
b8d9a7b573 | ||
|
|
e0d2ba6c98 | ||
|
|
874e33d2d1 | ||
|
|
4746fd053d | ||
|
|
a80f8a4ee7 | ||
|
|
de966024dc | ||
|
|
a1231aac6b | ||
|
|
409e71898d | ||
|
|
6864375fd5 | ||
|
|
6bc77cdd31 | ||
|
|
78408352d5 | ||
|
|
5fd8e42083 | ||
|
|
742536834b | ||
|
|
656f7ee23c | ||
|
|
412c180259 | ||
|
|
80baf9d16a | ||
|
|
a8ff9a820b | ||
|
|
e4b2624c55 | ||
|
|
731e8069a4 | ||
|
|
f02791a672 | ||
|
|
bc55d1442e | ||
|
|
8b4af57604 | ||
|
|
6e48bfdb9b | ||
|
|
dda5940654 | ||
|
|
3d1d18ad79 | ||
|
|
e4b07eb06b | ||
|
|
a822e1567a | ||
|
|
d51d2c26a6 | ||
|
|
250b3209d6 | ||
|
|
1e729166f4 | ||
|
|
6a85b75ea8 | ||
|
|
13151085f0 | ||
|
|
488792847a | ||
|
|
eee1fcd042 | ||
|
|
8bf32bb45d | ||
|
|
e1fe32c0e9 | ||
|
|
e8152d1bbf | ||
|
|
296db1249b | ||
|
|
5fa9148c54 | ||
|
|
3e061e9b14 | ||
|
|
d0b2835293 | ||
|
|
2da82286d2 | ||
|
|
3c6a295037 | ||
|
|
3117b241c1 | ||
|
|
f0527d08fc | ||
|
|
b9562a8dc5 | ||
|
|
2d8e721791 | ||
|
|
67f32e8d5f | ||
|
|
6f624d12d5 | ||
|
|
7468810734 | ||
|
|
0c84c7e1cc | ||
|
|
e1f1aa901e | ||
|
|
1b8e3287d0 | ||
|
|
aaebb6f278 | ||
|
|
fec6e82d52 | ||
|
|
5bcd024798 | ||
|
|
2e7c493a4f | ||
|
|
7041fd03e4 | ||
|
|
952bd3bf4e | ||
|
|
e5e65c26f9 | ||
|
|
e5c439dd94 | ||
|
|
ccfa23ee69 | ||
|
|
b18fd39013 | ||
|
|
6e7216a7bc | ||
|
|
9ce4f892b8 | ||
|
|
00483139cc | ||
|
|
dc9df54d29 | ||
|
|
9b077ad99f | ||
|
|
7fcf35b00d | ||
|
|
f5f390ae52 | ||
|
|
7b360d9c66 | ||
|
|
9f77a75bb4 | ||
|
|
7ec89365a8 | ||
|
|
cf42f23f10 | ||
|
|
e43b903b73 | ||
|
|
a602ab5ec5 | ||
|
|
ae88fbd37b | ||
|
|
7dbee9d0ac | ||
|
|
38c05481e4 | ||
|
|
9e9095cfe9 | ||
|
|
d0115e6cea | ||
|
|
1e2343afed | ||
|
|
07a6a3f105 | ||
|
|
a95ae2edb8 | ||
|
|
af16406ed2 | ||
|
|
39ec0e8835 | ||
|
|
62cd4e1d9c | ||
|
|
418ffd92b8 | ||
|
|
c39d9032cd | ||
|
|
859067d1fc | ||
|
|
6c369c6bff | ||
|
|
b7065bc081 | ||
|
|
b2da62ad23 | ||
|
|
42e20bffa5 | ||
|
|
ce8eee1a60 | ||
|
|
233a89ab3d | ||
|
|
110c186a51 | ||
|
|
6737a0268f | ||
|
|
cb11e2e2d9 | ||
|
|
552e3a4583 | ||
|
|
0e5efa575b | ||
|
|
88edd7cc30 | ||
|
|
d463920b34 | ||
|
|
ca47f1848a | ||
|
|
3d26f3d74b | ||
|
|
4633476252 | ||
|
|
e1023600e4 | ||
|
|
2195dcec38 | ||
|
|
8234c7d034 | ||
|
|
7c65ba96a9 | ||
|
|
74db21cd76 | ||
|
|
22d7a7b6af | ||
|
|
705d2e00c4 | ||
|
|
0eb51c9d7a | ||
|
|
39ca180c0e | ||
|
|
424532e50f | ||
|
|
4d45a41086 | ||
|
|
ee89c849a6 | ||
|
|
eb1e89e6c3 | ||
|
|
4988e587af | ||
|
|
706af4cefb | ||
|
|
f442d43636 | ||
|
|
6147a8215a | ||
|
|
f765e5a05b | ||
|
|
a9b2655b25 | ||
|
|
01cd73e66f | ||
|
|
7f7237004a | ||
|
|
1d095afca1 | ||
|
|
aa4b4de2cf | ||
|
|
ad546f5509 | ||
|
|
094db3711e | ||
|
|
d8035d9ab6 | ||
|
|
10b8fd969a | ||
|
|
5c01248e87 | ||
|
|
b97eae547b | ||
|
|
b0d93433b8 | ||
|
|
895e51453f | ||
|
|
e8f4015580 | ||
|
|
1bf28048d7 | ||
|
|
be55c55db1 | ||
|
|
85e9a731da | ||
|
|
099025fa53 | ||
|
|
cf89ecb78e | ||
|
|
1c5db3e2fd | ||
|
|
46d1e95b93 | ||
|
|
351173f152 | ||
|
|
3f5f65450c | ||
|
|
2be3d779d2 | ||
|
|
5fea278f98 | ||
|
|
7ea09b0516 | ||
|
|
365fd1e5d8 | ||
|
|
9f7c42744f | ||
|
|
185bc5e17b | ||
|
|
aa10c8b8b6 | ||
|
|
6a60f3c785 | ||
|
|
32e63b6d11 | ||
|
|
75b9f07a1a | ||
|
|
a7f8dcd3e0 | ||
|
|
ccdb46b665 | ||
|
|
51198a4850 | ||
|
|
8cf92c0946 | ||
|
|
9972ac6f27 | ||
|
|
8a9e3bf9f7 | ||
|
|
2884c10451 | ||
|
|
c7b9573244 | ||
|
|
5c5558b3c0 | ||
|
|
73ad7f2652 | ||
|
|
3ab0da8c04 | ||
|
|
6732d9d731 | ||
|
|
c9343596fc | ||
|
|
ddb44b992d | ||
|
|
27a8a417a5 | ||
|
|
15f2f1ce70 | ||
|
|
b6996baec0 | ||
|
|
72eedeb756 | ||
|
|
d49a8634f6 | ||
|
|
4b8b971d58 | ||
|
|
40f3975bc8 | ||
|
|
05966661fb | ||
|
|
206128b805 | ||
|
|
03d53a5995 | ||
|
|
228d8c3c19 | ||
|
|
b5376e45fc | ||
|
|
102e24a6c0 | ||
|
|
5f01d8fcc0 | ||
|
|
05d0513a13 | ||
|
|
1a0ad0a3b7 | ||
|
|
5047d8f210 | ||
|
|
821b080963 | ||
|
|
6a791dcff4 | ||
|
|
0e0f433f77 | ||
|
|
4b09876611 | ||
|
|
9ae655f695 | ||
|
|
1860d58642 | ||
|
|
b384aad9dc | ||
|
|
12d0e1ae33 | ||
|
|
37a2360bc8 | ||
|
|
324c6dba17 | ||
|
|
c2593b15f2 | ||
|
|
c5d08c81ef | ||
|
|
4df251b385 | ||
|
|
6afb66e539 | ||
|
|
184cbe3640 | ||
|
|
99da89ba20 | ||
|
|
96237c9192 | ||
|
|
5b454cf853 | ||
|
|
4995cedc28 | ||
|
|
22af4c889e | ||
|
|
e8a2ff0cc0 | ||
|
|
40e38322d2 | ||
|
|
7b994bda72 | ||
|
|
f7201d9321 | ||
|
|
d0b9474319 | ||
|
|
2434299a33 | ||
|
|
4467c5dc6d | ||
|
|
f7f32fc1b8 | ||
|
|
f78380db06 | ||
|
|
d3ba05df84 | ||
|
|
71996b63ac | ||
|
|
e6856af754 | ||
|
|
55e98472fc | ||
|
|
671d979cf6 | ||
|
|
d6b9a9f56f | ||
|
|
b1b66d2d6c | ||
|
|
f850786af4 | ||
|
|
d22ffc1d0b | ||
|
|
27d01d6ed2 | ||
|
|
ce0b4fbd88 | ||
|
|
9b4aa27ba6 | ||
|
|
333c8353f1 | ||
|
|
8c7718e383 | ||
|
|
0f00a347a6 | ||
|
|
14cffb328a | ||
|
|
cb8e04dd62 | ||
|
|
069676fd84 | ||
|
|
86826a651a | ||
|
|
bb520c073e | ||
|
|
992b18e12a | ||
|
|
d073083757 | ||
|
|
1a80a9c6cd | ||
|
|
c032e83e4d | ||
|
|
5c9bcc85ef | ||
|
|
7ec3eb235d |
@@ -121,7 +121,7 @@ jobs:
|
||||
lint:
|
||||
working_directory: ~/nest
|
||||
docker:
|
||||
- image: cimg/node:<< pipeline.parameters.maintenance-node-version >>
|
||||
- image: cimg/node:<< pipeline.parameters.current-node-version >>
|
||||
steps:
|
||||
- checkout
|
||||
- *restore-cache
|
||||
|
||||
@@ -6,8 +6,8 @@ cd "$(dirname "$0")"
|
||||
|
||||
cd /tmp/
|
||||
sudo apt-get install build-essential libssl-dev git -y
|
||||
git clone https://github.com/wg/wrk.git wrk
|
||||
git clone --depth=1 https://github.com/wg/wrk.git wrk
|
||||
cd wrk
|
||||
sudo make
|
||||
# move the executable to somewhere in your PATH, ex:
|
||||
sudo cp wrk /usr/local/bin
|
||||
sudo cp wrk /usr/local/bin
|
||||
|
||||
20
.eslintrc.js
20
.eslintrc.js
@@ -17,13 +17,13 @@ module.exports = {
|
||||
sourceType: 'module',
|
||||
},
|
||||
rules: {
|
||||
'@typescript-eslint/interface-name-prefix': 'off',
|
||||
'@typescript-eslint/explicit-function-return-type': 'off',
|
||||
'@typescript-eslint/no-explicit-any': 'off',
|
||||
'@typescript-eslint/explicit-module-boundary-types': 'off',
|
||||
'@typescript-eslint/no-unused-vars': 'off',
|
||||
'@typescript-eslint/ban-types': 'off',
|
||||
'@typescript-eslint/no-array-constructor': 'off',
|
||||
'@typescript-eslint/no-unsafe-function-type': 'off',
|
||||
'@typescript-eslint/no-unused-expressions': 'off',
|
||||
'@typescript-eslint/no-require-imports': 'off',
|
||||
'@typescript-eslint/no-empty-object-type': 'off',
|
||||
'@typescript-eslint/no-wrapper-object-types': 'off',
|
||||
},
|
||||
},
|
||||
{
|
||||
@@ -34,13 +34,13 @@ module.exports = {
|
||||
sourceType: 'module',
|
||||
},
|
||||
rules: {
|
||||
'@typescript-eslint/interface-name-prefix': 'off',
|
||||
'@typescript-eslint/explicit-function-return-type': 'off',
|
||||
'@typescript-eslint/no-explicit-any': 'off',
|
||||
'@typescript-eslint/explicit-module-boundary-types': 'off',
|
||||
'@typescript-eslint/no-unused-vars': 'off',
|
||||
'@typescript-eslint/ban-types': 'off',
|
||||
'@typescript-eslint/no-empty-function': 'off',
|
||||
'@typescript-eslint/no-unsafe-function-type': 'off',
|
||||
'@typescript-eslint/no-unused-expressions': 'off',
|
||||
'@typescript-eslint/no-require-imports': 'off',
|
||||
'@typescript-eslint/no-empty-object-type': 'off',
|
||||
'@typescript-eslint/no-wrapper-object-types': 'off',
|
||||
},
|
||||
}
|
||||
]
|
||||
|
||||
5
.gitignore
vendored
5
.gitignore
vendored
@@ -1,3 +1,5 @@
|
||||
packages/*/package-lock.json
|
||||
|
||||
# dependencies
|
||||
node_modules/
|
||||
|
||||
@@ -47,4 +49,5 @@ yarn-error.log
|
||||
build/config\.gypi
|
||||
|
||||
.npmrc
|
||||
pnpm-lock.yaml
|
||||
pnpm-lock.yaml
|
||||
/.history
|
||||
|
||||
15
Readme.md
15
Readme.md
@@ -91,10 +91,12 @@ Nest is an MIT-licensed open source project. It can grow thanks to the sponsors
|
||||
|
||||
<table style="text-align:center;">
|
||||
<tr>
|
||||
<td><a href="https://n.inc" target="_blank"><img src="https://nestjs.com/img/logos/n-inc-logo.svg" width="90" valign="middle" /></a></td>
|
||||
<td><a href="https://twistag.com/" target="_blank"><img src="https://nestjs.com/img/logos/twistag-logo.png" width="120" valign="middle" /></a></td>
|
||||
<td><a href="https://www.dinii.jp/" target="_blank"><img src="https://nestjs.com/img/logos/dinii-logo.png" width="75" valign="middle" /></a></td>
|
||||
<td><a href="https://www.mercedes-benz.com/" target="_blank"><img src="https://nestjs.com/img/logos/mercedes-logo.png" width="110" valign="middle" /></a></td>
|
||||
<td><a href="https://www.mercedes-benz.com/" target="_blank"><img src="https://nestjs.com/img/logos/mercedes-logo.png" width="100" valign="middle" /></a></td>
|
||||
<td><a href="https://www.dinii.jp/" target="_blank"><img src="https://nestjs.com/img/logos/dinii-logo.png" width="65" valign="middle" /></a></td>
|
||||
<td><a href="https://bloodycase.com/?promocode=NEST" target="_blank"><img src="https://nestjs.com/img/logos/bloodycase-logo.png" width="65" valign="middle" /></a></td>
|
||||
<td><a href="https://handsontable.com/docs/react-data-grid/?utm_source=NestJS_GH&utm_medium=sponsorship&utm_campaign=library_sponsorship_2024" target="_blank"><img src="https://nestjs.com/img/logos/handsontable-dark-logo.svg#2" width="150" valign="middle" /></a></td>
|
||||
<td align="center" valign="middle"><a href="https://www.itflashcards.com/" target="_blank"><img src="https://nestjs.com/img/logos/it_flashcards-logo.png" width="170" valign="middle" /></a></td>
|
||||
<td align="center" valign="middle"><a href="https://arcjet.com/?ref=nestjs" target="_blank"><img src="https://nestjs.com/img/logos/arcjet-logo.svg" width="170" valign="middle" /></a></td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
@@ -126,10 +128,11 @@ Nest is an MIT-licensed open source project. It can grow thanks to the sponsors
|
||||
<td align="center" valign="middle"><a href="https://www.hingehealth.com/" target="_blank"><img src="https://nestjs.com/img/logos/hinge-health-logo.svg" width="100" valign="middle" /></a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center" valign="middle"><a href="https://julienferand.dev/" target="_blank"><img src="https://nestjs.com/img/logos/julienferand-logo.jpeg" width="65" valign="middle" /></a></td>
|
||||
<td align="center" valign="middle"><a href="https://julienferand.dev/" target="_blank"><img src="https://nestjs.com/img/logos/julienferand-logo.jpeg" width="55" valign="middle" /></a></td>
|
||||
<td align="center" valign="middle"><a href="https://www.tripoffice.com/" target="_blank"><img src="https://nestjs.com/img/logos/tripoffice-logo.png" width="140" valign="middle" /></a></td>
|
||||
<td align="center" valign="middle"><a href="https://solcellsforetag.se/" target="_blank"><img src="https://nestjs.com/img/logos/solcellsforetag-logo.svg" width="140" valign="middle" /></a></td>
|
||||
<td align="center" valign="middle"><a href="https://www.itflashcards.com/" target="_blank"><img src="https://nestjs.com/img/logos/it_flashcards-logo.png" width="150" valign="middle" /></a></td>
|
||||
<td align="center" valign="middle"><a href="https://www.route4me.com/" target="_blank"><img src="https://nestjs.com/img/logos/route4me-logo.svg" width="100" valign="middle" /></a></td>
|
||||
<td align="center" valign="middle"><a href="https://www.slotsup.com/" target="_blank"><img src="https://nestjs.com/img/logos/slotsup-logo.png" width="60" valign="middle" /></a></td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
|
||||
@@ -45,6 +45,10 @@ describe('Hello world (express instance)', () => {
|
||||
});
|
||||
});
|
||||
|
||||
it('/HEAD should respond to with a 200', () => {
|
||||
return request(server).head('/hello').expect(200);
|
||||
});
|
||||
|
||||
afterEach(async () => {
|
||||
await app.close();
|
||||
});
|
||||
|
||||
@@ -87,6 +87,15 @@ describe('Hello world (fastify adapter)', () => {
|
||||
.then(({ payload }) => expect(payload).to.be.eql('Hello world!'));
|
||||
});
|
||||
|
||||
it('/HEAD should respond to with a 200', () => {
|
||||
return app
|
||||
.inject({
|
||||
method: 'HEAD',
|
||||
url: '/hello',
|
||||
})
|
||||
.then(({ statusCode }) => expect(statusCode).to.be.eq(200));
|
||||
});
|
||||
|
||||
afterEach(async () => {
|
||||
await app.close();
|
||||
});
|
||||
|
||||
@@ -24,8 +24,9 @@ export class DisconnectedClientController {
|
||||
return throwError(() =>
|
||||
code === 'ECONNREFUSED' ||
|
||||
code === 'CONN_ERR' ||
|
||||
code === 'ENOTFOUND' ||
|
||||
code === 'CONNECTION_REFUSED' ||
|
||||
error.message === 'Connection is closed.'
|
||||
error.message.includes('Connection is closed.')
|
||||
? new RequestTimeoutException('ECONNREFUSED')
|
||||
: new InternalServerErrorException(),
|
||||
);
|
||||
|
||||
@@ -27,10 +27,14 @@ describe('Durable providers', () => {
|
||||
tenantId: number,
|
||||
end: (err?: any) => void,
|
||||
endpoint = '/durable',
|
||||
opts: {
|
||||
forceError: boolean;
|
||||
} = { forceError: false },
|
||||
) =>
|
||||
request(server)
|
||||
.get(endpoint)
|
||||
.set({ ['x-tenant-id']: tenantId })
|
||||
.set({ ['x-tenant-id']: String(tenantId) })
|
||||
.set({ ['x-force-error']: opts.forceError ? 'true' : 'false' })
|
||||
.end((err, res) => {
|
||||
if (err) return end(err);
|
||||
end(res);
|
||||
@@ -84,6 +88,23 @@ describe('Durable providers', () => {
|
||||
);
|
||||
expect(result.body).deep.equal({ tenantId: '3' });
|
||||
});
|
||||
|
||||
it(`should not cache durable providers that throw errors`, async () => {
|
||||
let result: request.Response;
|
||||
|
||||
result = await new Promise<request.Response>(resolve =>
|
||||
performHttpCall(10, resolve, '/durable/echo', { forceError: true }),
|
||||
);
|
||||
|
||||
expect(result.statusCode).equal(412);
|
||||
|
||||
// The second request should be successful
|
||||
result = await new Promise<request.Response>(resolve =>
|
||||
performHttpCall(10, resolve, '/durable/echo'),
|
||||
);
|
||||
|
||||
expect(result.body).deep.equal({ tenantId: '10' });
|
||||
});
|
||||
});
|
||||
|
||||
after(async () => {
|
||||
|
||||
@@ -6,6 +6,8 @@ const tenants = new Map<string, ContextId>();
|
||||
export class DurableContextIdStrategy implements ContextIdStrategy {
|
||||
attach(contextId: ContextId, request: Request) {
|
||||
const tenantId = request.headers['x-tenant-id'] as string;
|
||||
const forceError = request.headers['x-force-error'] === 'true';
|
||||
|
||||
let tenantSubTreeId: ContextId;
|
||||
|
||||
if (tenants.has(tenantId)) {
|
||||
@@ -14,10 +16,18 @@ export class DurableContextIdStrategy implements ContextIdStrategy {
|
||||
tenantSubTreeId = { id: +tenantId } as ContextId;
|
||||
tenants.set(tenantId, tenantSubTreeId);
|
||||
}
|
||||
|
||||
const payload: {
|
||||
tenantId: string;
|
||||
forceError?: boolean;
|
||||
} = { tenantId };
|
||||
if (forceError) {
|
||||
payload.forceError = true;
|
||||
}
|
||||
return {
|
||||
resolve: (info: HostComponentInfo) =>
|
||||
info.isTreeDurable ? tenantSubTreeId : contextId,
|
||||
payload: { tenantId },
|
||||
payload,
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,11 +1,23 @@
|
||||
import { Inject, Injectable, Scope } from '@nestjs/common';
|
||||
import {
|
||||
Inject,
|
||||
Injectable,
|
||||
PreconditionFailedException,
|
||||
Scope,
|
||||
} from '@nestjs/common';
|
||||
import { REQUEST } from '@nestjs/core';
|
||||
|
||||
@Injectable({ scope: Scope.REQUEST, durable: true })
|
||||
export class DurableService {
|
||||
public instanceCounter = 0;
|
||||
|
||||
constructor(@Inject(REQUEST) public readonly requestPayload: unknown) {}
|
||||
constructor(
|
||||
@Inject(REQUEST)
|
||||
public readonly requestPayload: { tenantId: string; forceError: boolean },
|
||||
) {
|
||||
if (requestPayload.forceError) {
|
||||
throw new PreconditionFailedException('Forced error');
|
||||
}
|
||||
}
|
||||
|
||||
greeting() {
|
||||
++this.instanceCounter;
|
||||
|
||||
@@ -3,5 +3,5 @@
|
||||
"packages": [
|
||||
"packages/*"
|
||||
],
|
||||
"version": "10.3.10"
|
||||
"version": "10.4.8"
|
||||
}
|
||||
|
||||
16434
package-lock.json
generated
16434
package-lock.json
generated
File diff suppressed because it is too large
Load Diff
104
package.json
104
package.json
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@nestjs/core",
|
||||
"version": "10.3.4",
|
||||
"version": "10.4.5",
|
||||
"description": "Modern, fast, powerful node.js web framework",
|
||||
"homepage": "https://nestjs.com",
|
||||
"repository": {
|
||||
@@ -59,119 +59,119 @@
|
||||
},
|
||||
"dependencies": {
|
||||
"@nuxtjs/opencollective": "0.3.2",
|
||||
"ansis": "3.3.2",
|
||||
"class-transformer": "0.5.1",
|
||||
"class-validator": "0.14.1",
|
||||
"cli-color": "2.0.4",
|
||||
"cors": "2.8.5",
|
||||
"express": "4.19.2",
|
||||
"fast-json-stringify": "5.16.1",
|
||||
"express": "4.21.1",
|
||||
"fast-json-stringify": "6.0.0",
|
||||
"fast-safe-stringify": "2.1.1",
|
||||
"graphql-subscriptions": "2.0.0",
|
||||
"iterare": "1.2.1",
|
||||
"object-hash": "3.0.0",
|
||||
"path-to-regexp": "3.2.0",
|
||||
"reflect-metadata": "0.2.2",
|
||||
"rxjs": "7.8.1",
|
||||
"socket.io": "4.7.5",
|
||||
"tslib": "2.6.3",
|
||||
"socket.io": "4.8.1",
|
||||
"tslib": "2.8.1",
|
||||
"uid": "2.0.2",
|
||||
"uuid": "10.0.0"
|
||||
"uuid": "11.0.3"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@apollo/server": "4.10.4",
|
||||
"@apollo/server": "4.11.2",
|
||||
"@codechecks/client": "0.1.12",
|
||||
"@commitlint/cli": "19.3.0",
|
||||
"@commitlint/config-angular": "19.3.0",
|
||||
"@commitlint/cli": "19.5.0",
|
||||
"@commitlint/config-angular": "19.5.0",
|
||||
"@fastify/cors": "9.0.1",
|
||||
"@fastify/formbody": "7.4.0",
|
||||
"@fastify/middie": "8.3.1",
|
||||
"@fastify/multipart": "8.3.0",
|
||||
"@fastify/static": "7.0.4",
|
||||
"@fastify/view": "9.1.0",
|
||||
"@grpc/grpc-js": "1.10.9",
|
||||
"@grpc/grpc-js": "1.12.2",
|
||||
"@grpc/proto-loader": "0.7.13",
|
||||
"@nestjs/apollo": "12.1.0",
|
||||
"@nestjs/graphql": "12.1.1",
|
||||
"@nestjs/mongoose": "10.0.6",
|
||||
"@nestjs/apollo": "12.2.1",
|
||||
"@nestjs/graphql": "12.2.1",
|
||||
"@nestjs/mongoose": "10.1.0",
|
||||
"@nestjs/typeorm": "10.0.2",
|
||||
"@types/amqplib": "0.10.5",
|
||||
"@types/bytes": "3.1.4",
|
||||
"@types/chai": "4.3.11",
|
||||
"@types/chai": "4.3.16",
|
||||
"@types/chai-as-promised": "7.1.8",
|
||||
"@types/cors": "2.8.17",
|
||||
"@types/express": "4.17.21",
|
||||
"@types/gulp": "4.0.17",
|
||||
"@types/http-errors": "2.0.4",
|
||||
"@types/mocha": "10.0.6",
|
||||
"@types/node": "20.14.9",
|
||||
"@types/mocha": "10.0.9",
|
||||
"@types/node": "22.9.0",
|
||||
"@types/sinon": "17.0.3",
|
||||
"@types/supertest": "2.0.16",
|
||||
"@types/ws": "8.5.10",
|
||||
"@typescript-eslint/eslint-plugin": "7.13.1",
|
||||
"@typescript-eslint/parser": "7.13.1",
|
||||
"@types/supertest": "6.0.2",
|
||||
"@types/ws": "8.5.13",
|
||||
"@typescript-eslint/eslint-plugin": "8.15.0",
|
||||
"@typescript-eslint/parser": "8.15.0",
|
||||
"amqp-connection-manager": "4.1.14",
|
||||
"amqplib": "0.10.4",
|
||||
"artillery": "2.0.15",
|
||||
"body-parser": "1.20.2",
|
||||
"artillery": "2.0.21",
|
||||
"body-parser": "1.20.3",
|
||||
"bytes": "3.1.2",
|
||||
"cache-manager": "5.6.1",
|
||||
"cache-manager": "5.7.6",
|
||||
"cache-manager-redis-store": "3.0.1",
|
||||
"chai": "4.4.1",
|
||||
"chai": "4.5.0",
|
||||
"chai-as-promised": "7.1.2",
|
||||
"clang-format": "1.8.0",
|
||||
"concurrently": "8.2.2",
|
||||
"concurrently": "9.1.0",
|
||||
"conventional-changelog": "6.0.0",
|
||||
"core-js": "3.37.1",
|
||||
"core-js": "3.39.0",
|
||||
"coveralls": "3.1.1",
|
||||
"delete-empty": "3.0.0",
|
||||
"engine.io-client": "6.6.0",
|
||||
"eslint": "8.57.0",
|
||||
"engine.io-client": "6.6.2",
|
||||
"eslint": "8.57.1",
|
||||
"eslint-config-prettier": "9.1.0",
|
||||
"eslint-plugin-import": "2.29.1",
|
||||
"eslint-plugin-import": "2.31.0",
|
||||
"eventsource": "2.0.2",
|
||||
"fancy-log": "2.0.0",
|
||||
"fastify": "4.28.0",
|
||||
"fastify": "4.28.1",
|
||||
"graphql": "16.9.0",
|
||||
"graphql-tools": "9.0.1",
|
||||
"gulp": "4.0.2",
|
||||
"graphql-tools": "9.0.3",
|
||||
"graphql-subscriptions": "2.0.0",
|
||||
"gulp": "5.0.0",
|
||||
"gulp-clang-format": "1.0.27",
|
||||
"gulp-clean": "0.4.0",
|
||||
"gulp-sourcemaps": "3.0.0",
|
||||
"gulp-typescript": "5.0.1",
|
||||
"gulp-watch": "5.0.1",
|
||||
"http-errors": "2.0.0",
|
||||
"husky": "9.0.11",
|
||||
"husky": "9.1.6",
|
||||
"imports-loader": "5.0.0",
|
||||
"ioredis": "5.4.1",
|
||||
"json-loader": "0.5.7",
|
||||
"kafkajs": "2.2.4",
|
||||
"lerna": "2.11.0",
|
||||
"lerna-changelog": "2.2.0",
|
||||
"light-my-request": "5.13.0",
|
||||
"lint-staged": "15.2.7",
|
||||
"light-my-request": "6.3.0",
|
||||
"lint-staged": "15.2.10",
|
||||
"markdown-table": "2.0.0",
|
||||
"mocha": "10.4.0",
|
||||
"mongoose": "8.4.3",
|
||||
"mqtt": "5.6.0",
|
||||
"mocha": "10.8.2",
|
||||
"mongoose": "8.8.1",
|
||||
"mqtt": "5.10.2",
|
||||
"multer": "1.4.4",
|
||||
"mysql2": "3.10.1",
|
||||
"nats": "2.27.0",
|
||||
"nodemon": "3.1.4",
|
||||
"nyc": "14.1.1",
|
||||
"prettier": "3.3.2",
|
||||
"redis": "4.6.14",
|
||||
"mysql2": "3.11.4",
|
||||
"nats": "2.28.2",
|
||||
"nodemon": "3.1.7",
|
||||
"nyc": "17.1.0",
|
||||
"prettier": "3.3.3",
|
||||
"redis": "4.7.0",
|
||||
"rxjs-compat": "6.6.7",
|
||||
"sinon": "18.0.0",
|
||||
"sinon-chai": "3.7.0",
|
||||
"socket.io-client": "4.7.5",
|
||||
"sinon": "19.0.2",
|
||||
"sinon-chai": "4.0.0",
|
||||
"socket.io-client": "4.8.1",
|
||||
"subscriptions-transport-ws": "0.11.0",
|
||||
"supertest": "7.0.0",
|
||||
"ts-morph": "23.0.0",
|
||||
"ts-morph": "24.0.0",
|
||||
"ts-node": "10.9.2",
|
||||
"typeorm": "0.3.20",
|
||||
"typescript": "5.5.2",
|
||||
"typescript": "5.6.3",
|
||||
"wrk": "1.2.1",
|
||||
"ws": "8.17.1"
|
||||
"ws": "8.18.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">= 16"
|
||||
|
||||
@@ -91,10 +91,12 @@ Nest is an MIT-licensed open source project. It can grow thanks to the sponsors
|
||||
|
||||
<table style="text-align:center;">
|
||||
<tr>
|
||||
<td><a href="https://n.inc" target="_blank"><img src="https://nestjs.com/img/logos/n-inc-logo.svg" width="90" valign="middle" /></a></td>
|
||||
<td><a href="https://twistag.com/" target="_blank"><img src="https://nestjs.com/img/logos/twistag-logo.png" width="120" valign="middle" /></a></td>
|
||||
<td><a href="https://www.dinii.jp/" target="_blank"><img src="https://nestjs.com/img/logos/dinii-logo.png" width="75" valign="middle" /></a></td>
|
||||
<td><a href="https://www.mercedes-benz.com/" target="_blank"><img src="https://nestjs.com/img/logos/mercedes-logo.png" width="110" valign="middle" /></a></td>
|
||||
<td><a href="https://www.mercedes-benz.com/" target="_blank"><img src="https://nestjs.com/img/logos/mercedes-logo.png" width="100" valign="middle" /></a></td>
|
||||
<td><a href="https://www.dinii.jp/" target="_blank"><img src="https://nestjs.com/img/logos/dinii-logo.png" width="65" valign="middle" /></a></td>
|
||||
<td><a href="https://bloodycase.com/?promocode=NEST" target="_blank"><img src="https://nestjs.com/img/logos/bloodycase-logo.png" width="65" valign="middle" /></a></td>
|
||||
<td><a href="https://handsontable.com/docs/react-data-grid/?utm_source=NestJS_GH&utm_medium=sponsorship&utm_campaign=library_sponsorship_2024" target="_blank"><img src="https://nestjs.com/img/logos/handsontable-dark-logo.svg#2" width="150" valign="middle" /></a></td>
|
||||
<td align="center" valign="middle"><a href="https://www.itflashcards.com/" target="_blank"><img src="https://nestjs.com/img/logos/it_flashcards-logo.png" width="170" valign="middle" /></a></td>
|
||||
<td align="center" valign="middle"><a href="https://arcjet.com/?ref=nestjs" target="_blank"><img src="https://nestjs.com/img/logos/arcjet-logo.svg" width="170" valign="middle" /></a></td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
@@ -126,10 +128,11 @@ Nest is an MIT-licensed open source project. It can grow thanks to the sponsors
|
||||
<td align="center" valign="middle"><a href="https://www.hingehealth.com/" target="_blank"><img src="https://nestjs.com/img/logos/hinge-health-logo.svg" width="100" valign="middle" /></a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center" valign="middle"><a href="https://julienferand.dev/" target="_blank"><img src="https://nestjs.com/img/logos/julienferand-logo.jpeg" width="65" valign="middle" /></a></td>
|
||||
<td align="center" valign="middle"><a href="https://julienferand.dev/" target="_blank"><img src="https://nestjs.com/img/logos/julienferand-logo.jpeg" width="55" valign="middle" /></a></td>
|
||||
<td align="center" valign="middle"><a href="https://www.tripoffice.com/" target="_blank"><img src="https://nestjs.com/img/logos/tripoffice-logo.png" width="140" valign="middle" /></a></td>
|
||||
<td align="center" valign="middle"><a href="https://solcellsforetag.se/" target="_blank"><img src="https://nestjs.com/img/logos/solcellsforetag-logo.svg" width="140" valign="middle" /></a></td>
|
||||
<td align="center" valign="middle"><a href="https://www.itflashcards.com/" target="_blank"><img src="https://nestjs.com/img/logos/it_flashcards-logo.png" width="150" valign="middle" /></a></td>
|
||||
<td align="center" valign="middle"><a href="https://www.route4me.com/" target="_blank"><img src="https://nestjs.com/img/logos/route4me-logo.svg" width="100" valign="middle" /></a></td>
|
||||
<td align="center" valign="middle"><a href="https://www.slotsup.com/" target="_blank"><img src="https://nestjs.com/img/logos/slotsup-logo.png" width="60" valign="middle" /></a></td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
|
||||
@@ -1,10 +1,22 @@
|
||||
/**
|
||||
* Options for `StreamableFile`
|
||||
*
|
||||
* @see [Streaming files](https://docs.nestjs.com/techniques/streaming-files)
|
||||
*
|
||||
* @publicApi
|
||||
*/
|
||||
export interface StreamableFileOptions {
|
||||
/**
|
||||
* The value that will be used for the `Content-Type` response header.
|
||||
* @default `"application/octet-stream"`
|
||||
*/
|
||||
type?: string;
|
||||
/**
|
||||
* The value that will be used for the `Content-Disposition` response header.
|
||||
*/
|
||||
disposition?: string;
|
||||
/**
|
||||
* The value that will be used for the `Content-Length` response header.
|
||||
*/
|
||||
length?: number;
|
||||
}
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@nestjs/common",
|
||||
"version": "10.3.10",
|
||||
"version": "10.4.8",
|
||||
"description": "Nest - modern, fast, powerful node.js web framework (@common)",
|
||||
"author": "Kamil Mysliwiec",
|
||||
"homepage": "https://nestjs.com",
|
||||
@@ -19,7 +19,7 @@
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"iterare": "1.2.1",
|
||||
"tslib": "2.6.3",
|
||||
"tslib": "2.7.0",
|
||||
"uid": "2.0.2"
|
||||
},
|
||||
"peerDependencies": {
|
||||
|
||||
@@ -15,7 +15,7 @@ import { isNil, isString } from '../utils/shared.utils';
|
||||
* @publicApi
|
||||
*/
|
||||
export interface ParseUUIDPipeOptions {
|
||||
version?: '3' | '4' | '5';
|
||||
version?: '3' | '4' | '5' | '7';
|
||||
errorHttpStatusCode?: ErrorHttpStatusCode;
|
||||
exceptionFactory?: (errors: string) => any;
|
||||
optional?: boolean;
|
||||
@@ -34,9 +34,10 @@ export class ParseUUIDPipe implements PipeTransform<string> {
|
||||
3: /^[0-9A-F]{8}-[0-9A-F]{4}-3[0-9A-F]{3}-[0-9A-F]{4}-[0-9A-F]{12}$/i,
|
||||
4: /^[0-9A-F]{8}-[0-9A-F]{4}-4[0-9A-F]{3}-[89AB][0-9A-F]{3}-[0-9A-F]{12}$/i,
|
||||
5: /^[0-9A-F]{8}-[0-9A-F]{4}-5[0-9A-F]{3}-[89AB][0-9A-F]{3}-[0-9A-F]{12}$/i,
|
||||
7: /^[0-9A-F]{8}-[0-9A-F]{4}-7[0-9A-F]{3}-[89AB][0-9A-F]{3}-[0-9A-F]{12}$/i,
|
||||
all: /^[0-9A-F]{8}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{12}$/i,
|
||||
};
|
||||
private readonly version: '3' | '4' | '5';
|
||||
private readonly version: '3' | '4' | '5' | '7';
|
||||
protected exceptionFactory: (errors: string) => any;
|
||||
|
||||
constructor(@Optional() protected readonly options?: ParseUUIDPipeOptions) {
|
||||
|
||||
@@ -116,11 +116,12 @@ export class ValidationPipe implements PipeTransform<any> {
|
||||
: value;
|
||||
}
|
||||
const originalValue = value;
|
||||
value = this.toEmptyIfNil(value);
|
||||
value = this.toEmptyIfNil(value, metatype);
|
||||
|
||||
const isNil = value !== originalValue;
|
||||
const isPrimitive = this.isPrimitive(value);
|
||||
this.stripProtoKeys(value);
|
||||
|
||||
let entity = classTransformer.plainToClass(
|
||||
metatype,
|
||||
value,
|
||||
@@ -208,8 +209,24 @@ export class ValidationPipe implements PipeTransform<any> {
|
||||
return value;
|
||||
}
|
||||
|
||||
protected toEmptyIfNil<T = any, R = any>(value: T): R | {} {
|
||||
return isNil(value) ? {} : value;
|
||||
protected toEmptyIfNil<T = any, R = any>(
|
||||
value: T,
|
||||
metatype: Type<unknown> | object,
|
||||
): R | {} {
|
||||
if (!isNil(value)) {
|
||||
return value;
|
||||
}
|
||||
if (
|
||||
typeof metatype === 'function' ||
|
||||
(metatype && 'prototype' in metatype && metatype.prototype?.constructor)
|
||||
) {
|
||||
return {};
|
||||
}
|
||||
// Builder like SWC require empty string to be returned instead of an empty object
|
||||
// when the value is nil and the metatype is not a class instance, but a plain object (enum, for example).
|
||||
// Otherwise, the error will be thrown.
|
||||
// @see https://github.com/nestjs/nest/issues/12680
|
||||
return '';
|
||||
}
|
||||
|
||||
protected stripProtoKeys(value: any) {
|
||||
|
||||
@@ -478,6 +478,56 @@ describe('ValidationPipe', () => {
|
||||
});
|
||||
});
|
||||
|
||||
describe('option: "validateCustomDecorators" when metadata.type is not `body`', () => {
|
||||
describe('when is set to `true`', () => {
|
||||
it('should transform and validate', async () => {
|
||||
const target = new ValidationPipe({
|
||||
validateCustomDecorators: true,
|
||||
});
|
||||
|
||||
const metadata: ArgumentMetadata = {
|
||||
type: 'custom',
|
||||
metatype: TestModel,
|
||||
data: '',
|
||||
};
|
||||
|
||||
const testObj = { prop1: 'value1', prop2: 'value2' };
|
||||
expect(await target.transform(testObj, metadata)).to.not.be.undefined;
|
||||
});
|
||||
});
|
||||
describe('when is set to `false`', () => {
|
||||
it('should throw an error', async () => {
|
||||
const target = new ValidationPipe({
|
||||
validateCustomDecorators: false,
|
||||
});
|
||||
|
||||
const metadata: ArgumentMetadata = {
|
||||
type: 'custom',
|
||||
metatype: TestModel,
|
||||
data: '',
|
||||
};
|
||||
|
||||
const objNotFollowingTestModel = { prop1: undefined, prop2: 'value2' };
|
||||
expect(await target.transform(objNotFollowingTestModel, metadata)).to
|
||||
.not.be.undefined;
|
||||
});
|
||||
});
|
||||
describe('when is not supplied', () => {
|
||||
it('should transform and validate', async () => {
|
||||
const target = new ValidationPipe({});
|
||||
|
||||
const metadata: ArgumentMetadata = {
|
||||
type: 'custom',
|
||||
metatype: TestModel,
|
||||
data: '',
|
||||
};
|
||||
|
||||
const testObj = { prop1: 'value1', prop2: 'value2' };
|
||||
expect(await target.transform(testObj, metadata)).to.not.be.undefined;
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
describe('option: "errorHttpStatusCode"', () => {
|
||||
describe('when validation fails', () => {
|
||||
beforeEach(() => {
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import { Logger } from '../services/logger.service';
|
||||
|
||||
const MISSING_REQUIRED_DEPENDENCY = (name: string, reason: string) =>
|
||||
`The "${name}" package is missing. Please, make sure to install this library ($ npm install ${name}) to take advantage of ${reason}.`;
|
||||
`The "${name}" package is missing. Please, make sure to install it to take advantage of ${reason}.`;
|
||||
|
||||
const logger = new Logger('PackageLoader');
|
||||
|
||||
|
||||
@@ -91,10 +91,12 @@ Nest is an MIT-licensed open source project. It can grow thanks to the sponsors
|
||||
|
||||
<table style="text-align:center;">
|
||||
<tr>
|
||||
<td><a href="https://n.inc" target="_blank"><img src="https://nestjs.com/img/logos/n-inc-logo.svg" width="90" valign="middle" /></a></td>
|
||||
<td><a href="https://twistag.com/" target="_blank"><img src="https://nestjs.com/img/logos/twistag-logo.png" width="120" valign="middle" /></a></td>
|
||||
<td><a href="https://www.dinii.jp/" target="_blank"><img src="https://nestjs.com/img/logos/dinii-logo.png" width="75" valign="middle" /></a></td>
|
||||
<td><a href="https://www.mercedes-benz.com/" target="_blank"><img src="https://nestjs.com/img/logos/mercedes-logo.png" width="110" valign="middle" /></a></td>
|
||||
<td><a href="https://www.mercedes-benz.com/" target="_blank"><img src="https://nestjs.com/img/logos/mercedes-logo.png" width="100" valign="middle" /></a></td>
|
||||
<td><a href="https://www.dinii.jp/" target="_blank"><img src="https://nestjs.com/img/logos/dinii-logo.png" width="65" valign="middle" /></a></td>
|
||||
<td><a href="https://bloodycase.com/?promocode=NEST" target="_blank"><img src="https://nestjs.com/img/logos/bloodycase-logo.png" width="65" valign="middle" /></a></td>
|
||||
<td><a href="https://handsontable.com/docs/react-data-grid/?utm_source=NestJS_GH&utm_medium=sponsorship&utm_campaign=library_sponsorship_2024" target="_blank"><img src="https://nestjs.com/img/logos/handsontable-dark-logo.svg#2" width="150" valign="middle" /></a></td>
|
||||
<td align="center" valign="middle"><a href="https://www.itflashcards.com/" target="_blank"><img src="https://nestjs.com/img/logos/it_flashcards-logo.png" width="170" valign="middle" /></a></td>
|
||||
<td align="center" valign="middle"><a href="https://arcjet.com/?ref=nestjs" target="_blank"><img src="https://nestjs.com/img/logos/arcjet-logo.svg" width="170" valign="middle" /></a></td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
@@ -126,10 +128,11 @@ Nest is an MIT-licensed open source project. It can grow thanks to the sponsors
|
||||
<td align="center" valign="middle"><a href="https://www.hingehealth.com/" target="_blank"><img src="https://nestjs.com/img/logos/hinge-health-logo.svg" width="100" valign="middle" /></a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center" valign="middle"><a href="https://julienferand.dev/" target="_blank"><img src="https://nestjs.com/img/logos/julienferand-logo.jpeg" width="65" valign="middle" /></a></td>
|
||||
<td align="center" valign="middle"><a href="https://julienferand.dev/" target="_blank"><img src="https://nestjs.com/img/logos/julienferand-logo.jpeg" width="55" valign="middle" /></a></td>
|
||||
<td align="center" valign="middle"><a href="https://www.tripoffice.com/" target="_blank"><img src="https://nestjs.com/img/logos/tripoffice-logo.png" width="140" valign="middle" /></a></td>
|
||||
<td align="center" valign="middle"><a href="https://solcellsforetag.se/" target="_blank"><img src="https://nestjs.com/img/logos/solcellsforetag-logo.svg" width="140" valign="middle" /></a></td>
|
||||
<td align="center" valign="middle"><a href="https://www.itflashcards.com/" target="_blank"><img src="https://nestjs.com/img/logos/it_flashcards-logo.png" width="150" valign="middle" /></a></td>
|
||||
<td align="center" valign="middle"><a href="https://www.route4me.com/" target="_blank"><img src="https://nestjs.com/img/logos/route4me-logo.svg" width="100" valign="middle" /></a></td>
|
||||
<td align="center" valign="middle"><a href="https://www.slotsup.com/" target="_blank"><img src="https://nestjs.com/img/logos/slotsup-logo.png" width="60" valign="middle" /></a></td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
|
||||
@@ -146,7 +146,7 @@ export class DiscoverableMetaHostCollection {
|
||||
// But since calling `wrapper.instance` could degrade overall performance
|
||||
// we must defer it as much we can.
|
||||
instanceWrapper.metatype || instanceWrapper.inject
|
||||
? instanceWrapper.instance?.constructor ?? instanceWrapper.metatype
|
||||
? (instanceWrapper.instance?.constructor ?? instanceWrapper.metatype)
|
||||
: instanceWrapper.metatype,
|
||||
);
|
||||
}
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
import { Observable, Subject } from 'rxjs';
|
||||
import { AbstractHttpAdapter } from '../adapters/http-adapter';
|
||||
|
||||
/**
|
||||
@@ -16,6 +17,8 @@ export class HttpAdapterHost<
|
||||
T extends AbstractHttpAdapter = AbstractHttpAdapter,
|
||||
> {
|
||||
private _httpAdapter?: T;
|
||||
private _listen$ = new Subject<void>();
|
||||
private isListening = false;
|
||||
|
||||
/**
|
||||
* Accessor for the underlying `HttpAdapter`
|
||||
@@ -35,4 +38,31 @@ export class HttpAdapterHost<
|
||||
get httpAdapter(): T {
|
||||
return this._httpAdapter;
|
||||
}
|
||||
|
||||
/**
|
||||
* Observable that allows to subscribe to the `listen` event.
|
||||
* This event is emitted when the HTTP application is listening for incoming requests.
|
||||
*/
|
||||
get listen$(): Observable<void> {
|
||||
return this._listen$.asObservable();
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the listening state of the application.
|
||||
*/
|
||||
set listening(listening: boolean) {
|
||||
this.isListening = listening;
|
||||
|
||||
if (listening) {
|
||||
this._listen$.next();
|
||||
this._listen$.complete();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a boolean indicating whether the application is listening for incoming requests.
|
||||
*/
|
||||
get listening(): boolean {
|
||||
return this.isListening;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -313,7 +313,7 @@ export class NestContainer {
|
||||
metadataKey?: Exclude<keyof DynamicModule, 'global' | 'module'>,
|
||||
) {
|
||||
const metadata = this.dynamicModulesMetadata.get(token);
|
||||
return metadataKey ? metadata?.[metadataKey] ?? [] : metadata;
|
||||
return metadataKey ? (metadata?.[metadataKey] ?? []) : metadata;
|
||||
}
|
||||
|
||||
public registerCoreModuleRef(moduleRef: Module) {
|
||||
|
||||
@@ -170,6 +170,11 @@ export class Injector {
|
||||
inquirer,
|
||||
);
|
||||
} catch (err) {
|
||||
wrapper.removeInstanceByContextId(
|
||||
this.getContextId(contextId, wrapper),
|
||||
inquirerId,
|
||||
);
|
||||
|
||||
settlementSignal.error(err);
|
||||
throw err;
|
||||
}
|
||||
|
||||
@@ -168,6 +168,21 @@ export class InstanceWrapper<T = any> {
|
||||
collection.set(contextId, value);
|
||||
}
|
||||
|
||||
public removeInstanceByContextId(contextId: ContextId, inquirerId?: string) {
|
||||
if (this.scope === Scope.TRANSIENT && inquirerId) {
|
||||
return this.removeInstanceByInquirerId(contextId, inquirerId);
|
||||
}
|
||||
this.values.delete(contextId);
|
||||
}
|
||||
|
||||
public removeInstanceByInquirerId(contextId: ContextId, inquirerId: string) {
|
||||
const collection = this.transientMap.get(inquirerId);
|
||||
if (!collection) {
|
||||
return;
|
||||
}
|
||||
collection.delete(contextId);
|
||||
}
|
||||
|
||||
public addCtorMetadata(index: number, wrapper: InstanceWrapper) {
|
||||
if (!this[INSTANCE_METADATA_SYMBOL].dependencies) {
|
||||
this[INSTANCE_METADATA_SYMBOL].dependencies = [];
|
||||
|
||||
@@ -2,6 +2,7 @@ import { Logger } from '@nestjs/common';
|
||||
import { ExternalContextCreator } from '../../helpers/external-context-creator';
|
||||
import { HttpAdapterHost } from '../../helpers/http-adapter-host';
|
||||
import { GraphInspector } from '../../inspector/graph-inspector';
|
||||
import { InitializeOnPreviewAllowlist } from '../../inspector/initialize-on-preview.allowlist';
|
||||
import { SerializedGraph } from '../../inspector/serialized-graph';
|
||||
import { ModuleOverride } from '../../interfaces/module-override.interface';
|
||||
import { DependenciesScanner } from '../../scanner';
|
||||
@@ -42,6 +43,8 @@ export class InternalCoreModuleFactory {
|
||||
);
|
||||
};
|
||||
|
||||
InitializeOnPreviewAllowlist.add(InternalCoreModule);
|
||||
|
||||
return InternalCoreModule.register([
|
||||
{
|
||||
provide: ExternalContextCreator,
|
||||
|
||||
@@ -144,7 +144,7 @@ export class SerializedGraph {
|
||||
if (typeof value === 'symbol') {
|
||||
return value.toString();
|
||||
}
|
||||
return typeof value === 'function' ? value.name ?? 'Function' : value;
|
||||
return typeof value === 'function' ? (value.name ?? 'Function') : value;
|
||||
};
|
||||
return JSON.stringify(this.toJSON(), replacer, 2);
|
||||
}
|
||||
|
||||
@@ -30,7 +30,8 @@ export class InterceptorsConsumer {
|
||||
return defer(AsyncResource.bind(() => this.transformDeferred(next)));
|
||||
}
|
||||
const handler: CallHandler = {
|
||||
handle: () => fromPromise(nextFn(i + 1)).pipe(mergeAll()),
|
||||
handle: () =>
|
||||
defer(AsyncResource.bind(() => nextFn(i + 1))).pipe(mergeAll()),
|
||||
};
|
||||
return interceptors[i].intercept(context, handler);
|
||||
};
|
||||
|
||||
@@ -54,6 +54,7 @@ export class NestApplicationContext<
|
||||
private shutdownCleanupRef?: (...args: unknown[]) => unknown;
|
||||
private _instanceLinksHost: InstanceLinksHost;
|
||||
private _moduleRefsForHooksByDistance?: Array<Module>;
|
||||
private initializationPromise?: Promise<void>;
|
||||
|
||||
protected get instanceLinksHost() {
|
||||
if (!this._instanceLinksHost) {
|
||||
@@ -234,8 +235,16 @@ export class NestApplicationContext<
|
||||
if (this.isInitialized) {
|
||||
return this;
|
||||
}
|
||||
await this.callInitHook();
|
||||
await this.callBootstrapHook();
|
||||
this.initializationPromise = new Promise(async (resolve, reject) => {
|
||||
try {
|
||||
await this.callInitHook();
|
||||
await this.callBootstrapHook();
|
||||
resolve();
|
||||
} catch (err) {
|
||||
reject(err);
|
||||
}
|
||||
});
|
||||
await this.initializationPromise;
|
||||
|
||||
this.isInitialized = true;
|
||||
return this;
|
||||
@@ -246,6 +255,7 @@ export class NestApplicationContext<
|
||||
* @returns {Promise<void>}
|
||||
*/
|
||||
public async close(signal?: string): Promise<void> {
|
||||
await this.initializationPromise;
|
||||
await this.callDestroyHook();
|
||||
await this.callBeforeShutdownHook(signal);
|
||||
await this.dispose();
|
||||
@@ -333,6 +343,7 @@ export class NestApplicationContext<
|
||||
return;
|
||||
}
|
||||
receivedSignal = true;
|
||||
await this.initializationPromise;
|
||||
await this.callDestroyHook();
|
||||
await this.callBeforeShutdownHook(signal);
|
||||
await this.dispose();
|
||||
|
||||
@@ -294,8 +294,12 @@ export class NestApplication
|
||||
public async listen(port: number | string, hostname: string): Promise<any>;
|
||||
public async listen(port: number | string, ...args: any[]): Promise<any> {
|
||||
this.assertNotInPreviewMode('listen');
|
||||
!this.isInitialized && (await this.init());
|
||||
|
||||
if (!this.isInitialized) {
|
||||
await this.init();
|
||||
}
|
||||
|
||||
const httpAdapterHost = this.container.getHttpAdapterHostRef();
|
||||
return new Promise((resolve, reject) => {
|
||||
const errorHandler = (e: any) => {
|
||||
this.logger.error(e?.toString?.());
|
||||
@@ -323,6 +327,8 @@ export class NestApplication
|
||||
if (address) {
|
||||
this.httpServer.removeListener('error', errorHandler);
|
||||
this.isListening = true;
|
||||
|
||||
httpAdapterHost.listening = true;
|
||||
resolve(this.httpServer);
|
||||
}
|
||||
if (isCallbackInOriginalArgs) {
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@nestjs/core",
|
||||
"version": "10.3.10",
|
||||
"version": "10.4.8",
|
||||
"description": "Nest - modern, fast, powerful node.js web framework (@core)",
|
||||
"author": "Kamil Mysliwiec",
|
||||
"license": "MIT",
|
||||
@@ -31,12 +31,12 @@
|
||||
"@nuxtjs/opencollective": "0.3.2",
|
||||
"fast-safe-stringify": "2.1.1",
|
||||
"iterare": "1.2.1",
|
||||
"path-to-regexp": "3.2.0",
|
||||
"tslib": "2.6.3",
|
||||
"path-to-regexp": "3.3.0",
|
||||
"tslib": "2.7.0",
|
||||
"uid": "2.0.2"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@nestjs/common": "10.3.10"
|
||||
"@nestjs/common": "10.4.8"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"@nestjs/common": "^10.0.0",
|
||||
|
||||
@@ -522,7 +522,7 @@ export class DependenciesScanner {
|
||||
}
|
||||
|
||||
public insertExportedProvider(
|
||||
// TODO: improve the type definition bellow because it doesn't reflects the real usage of this method
|
||||
// TODO: improve the type definition below because it doesn't reflects the real usage of this method
|
||||
exportedProvider: Type<Injectable> | ForwardReference,
|
||||
token: string,
|
||||
) {
|
||||
|
||||
@@ -2,11 +2,27 @@ import { expect } from 'chai';
|
||||
import { HttpAdapterHost } from '../../helpers/http-adapter-host';
|
||||
|
||||
describe('HttpAdapterHost', () => {
|
||||
const applicationRefHost = new HttpAdapterHost();
|
||||
let applicationRefHost: HttpAdapterHost;
|
||||
beforeEach(() => {
|
||||
applicationRefHost = new HttpAdapterHost();
|
||||
});
|
||||
|
||||
it('should wrap application reference', () => {
|
||||
const ref = {};
|
||||
applicationRefHost.httpAdapter = ref as any;
|
||||
|
||||
expect(applicationRefHost.httpAdapter).to.be.eql(ref);
|
||||
});
|
||||
|
||||
it('should emit listen event when listening is set to true', done => {
|
||||
applicationRefHost.listen$.subscribe(() => {
|
||||
expect(applicationRefHost.listening).to.be.true;
|
||||
done();
|
||||
});
|
||||
applicationRefHost.listening = true;
|
||||
});
|
||||
|
||||
it('listening should return false if the application isnt listening yet', () => {
|
||||
expect(applicationRefHost.listening).to.be.false;
|
||||
});
|
||||
});
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
import { Scope } from '@nestjs/common';
|
||||
import { expect } from 'chai';
|
||||
import * as sinon from 'sinon';
|
||||
import { createContextId } from '../../helpers';
|
||||
import { STATIC_CONTEXT } from '../../injector/constants';
|
||||
import { InstanceWrapper } from '../../injector/instance-wrapper';
|
||||
|
||||
@@ -737,6 +738,53 @@ describe('InstanceWrapper', () => {
|
||||
});
|
||||
});
|
||||
|
||||
describe('removeInstanceByContextId', () => {
|
||||
describe('without inquirer', () => {
|
||||
it('should remove instance for given context', () => {
|
||||
const wrapper = new InstanceWrapper({
|
||||
scope: Scope.TRANSIENT,
|
||||
});
|
||||
|
||||
const contextId = createContextId();
|
||||
wrapper.setInstanceByContextId(contextId, { instance: {} });
|
||||
|
||||
const existingContext = wrapper.getInstanceByContextId(contextId);
|
||||
expect(existingContext.instance).to.be.not.undefined;
|
||||
wrapper.removeInstanceByContextId(contextId);
|
||||
|
||||
const removedContext = wrapper.getInstanceByContextId(contextId);
|
||||
expect(removedContext.instance).to.be.undefined;
|
||||
});
|
||||
});
|
||||
|
||||
describe('when transient and inquirer has been passed', () => {
|
||||
it('should remove instance for given context', () => {
|
||||
const wrapper = new InstanceWrapper({
|
||||
scope: Scope.TRANSIENT,
|
||||
});
|
||||
|
||||
wrapper.setInstanceByContextId(
|
||||
STATIC_CONTEXT,
|
||||
{ instance: {} },
|
||||
'inquirerId',
|
||||
);
|
||||
|
||||
const existingContext = wrapper.getInstanceByContextId(
|
||||
STATIC_CONTEXT,
|
||||
'inquirerId',
|
||||
);
|
||||
expect(existingContext.instance).to.be.not.undefined;
|
||||
wrapper.removeInstanceByContextId(STATIC_CONTEXT, 'inquirerId');
|
||||
|
||||
const removedContext = wrapper.getInstanceByContextId(
|
||||
STATIC_CONTEXT,
|
||||
'inquirerId',
|
||||
);
|
||||
expect(removedContext.instance).to.be.undefined;
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
describe('isInRequestScope', () => {
|
||||
describe('when tree and context are not static and is not transient', () => {
|
||||
it('should return true', () => {
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import { CallHandler, ExecutionContext, NestInterceptor } from '@nestjs/common';
|
||||
import { AsyncLocalStorage } from 'async_hooks';
|
||||
import { expect } from 'chai';
|
||||
import { Observable, lastValueFrom, of, retry } from 'rxjs';
|
||||
import { Observable, defer, lastValueFrom, merge, of, retry } from 'rxjs';
|
||||
import * as sinon from 'sinon';
|
||||
import { InterceptorsConsumer } from '../../interceptors/interceptors-consumer';
|
||||
|
||||
@@ -179,6 +179,51 @@ describe('InterceptorsConsumer', () => {
|
||||
});
|
||||
});
|
||||
});
|
||||
describe('deferred promise conversion', () => {
|
||||
it('should convert promise to observable deferred', async () => {
|
||||
class TestError extends Error {}
|
||||
const testInterceptors = [
|
||||
{
|
||||
intercept: sinon.stub().callsFake(async (ctx, handler) => {
|
||||
return merge(
|
||||
handler.handle(),
|
||||
defer(() => {
|
||||
throw new TestError();
|
||||
}),
|
||||
);
|
||||
}),
|
||||
},
|
||||
{
|
||||
intercept: sinon
|
||||
.stub()
|
||||
.callsFake(async (ctx, handler) => handler.handle()),
|
||||
},
|
||||
{
|
||||
intercept: sinon
|
||||
.stub()
|
||||
.callsFake(async (ctx, handler) => handler.handle()),
|
||||
},
|
||||
,
|
||||
];
|
||||
|
||||
const observable = await consumer.intercept(
|
||||
testInterceptors,
|
||||
null,
|
||||
{ constructor: null },
|
||||
null,
|
||||
async () => 1,
|
||||
);
|
||||
|
||||
try {
|
||||
await transformToResult(observable);
|
||||
} catch (error) {
|
||||
if (!(error instanceof TestError)) {
|
||||
throw error;
|
||||
}
|
||||
}
|
||||
expect(testInterceptors[2].intercept.called).to.be.false;
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
async function transformToResult(resultOrDeferred: any) {
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import { InjectionToken, Scope } from '@nestjs/common';
|
||||
import { InjectionToken, Provider, Scope } from '@nestjs/common';
|
||||
import { expect } from 'chai';
|
||||
import * as sinon from 'sinon';
|
||||
import { ContextIdFactory } from '../helpers/context-id-factory';
|
||||
@@ -7,6 +7,7 @@ import { Injector } from '../injector/injector';
|
||||
import { InstanceLoader } from '../injector/instance-loader';
|
||||
import { GraphInspector } from '../inspector/graph-inspector';
|
||||
import { NestApplicationContext } from '../nest-application-context';
|
||||
import { setTimeout } from 'timers/promises';
|
||||
|
||||
describe('NestApplicationContext', () => {
|
||||
class A {}
|
||||
@@ -14,6 +15,7 @@ describe('NestApplicationContext', () => {
|
||||
async function testHelper(
|
||||
injectionKey: InjectionToken,
|
||||
scope: Scope,
|
||||
additionalProviders: Array<Provider> = [],
|
||||
): Promise<NestApplicationContext> {
|
||||
const nestContainer = new NestContainer();
|
||||
const injector = new Injector();
|
||||
@@ -33,6 +35,10 @@ describe('NestApplicationContext', () => {
|
||||
moduleRef.token,
|
||||
);
|
||||
|
||||
for (const provider of additionalProviders) {
|
||||
nestContainer.addProvider(provider, moduleRef.token);
|
||||
}
|
||||
|
||||
nestContainer.addInjectable(
|
||||
{
|
||||
provide: injectionKey,
|
||||
@@ -96,6 +102,58 @@ describe('NestApplicationContext', () => {
|
||||
expect(processUp).to.be.false;
|
||||
expect(promisesResolved).to.be.true;
|
||||
});
|
||||
|
||||
it('should defer shutdown until all init hooks are resolved', async () => {
|
||||
const clock = sinon.useFakeTimers({
|
||||
toFake: ['setTimeout'],
|
||||
});
|
||||
const signal = 'SIGTERM';
|
||||
|
||||
const onModuleInitStub = sinon.stub();
|
||||
const onApplicationShutdownStub = sinon.stub();
|
||||
|
||||
class B {
|
||||
async onModuleInit() {
|
||||
await setTimeout(5000);
|
||||
onModuleInitStub();
|
||||
}
|
||||
|
||||
async onApplicationShutdown() {
|
||||
await setTimeout(1000);
|
||||
onApplicationShutdownStub();
|
||||
}
|
||||
}
|
||||
|
||||
const applicationContext = await testHelper(A, Scope.DEFAULT, [
|
||||
{ provide: B, useClass: B, scope: Scope.DEFAULT },
|
||||
]);
|
||||
applicationContext.enableShutdownHooks([signal]);
|
||||
|
||||
const ignoreProcessSignal = () => {
|
||||
// noop to prevent process from exiting
|
||||
};
|
||||
process.on(signal, ignoreProcessSignal);
|
||||
|
||||
const deferredShutdown = async () => {
|
||||
setTimeout(1);
|
||||
process.kill(process.pid, signal);
|
||||
};
|
||||
Promise.all([applicationContext.init(), deferredShutdown()]);
|
||||
|
||||
await clock.nextAsync();
|
||||
expect(onModuleInitStub.called).to.be.false;
|
||||
expect(onApplicationShutdownStub.called).to.be.false;
|
||||
|
||||
await clock.nextAsync();
|
||||
expect(onModuleInitStub.called).to.be.true;
|
||||
expect(onApplicationShutdownStub.called).to.be.false;
|
||||
|
||||
await clock.nextAsync();
|
||||
expect(onModuleInitStub.called).to.be.true;
|
||||
expect(onApplicationShutdownStub.called).to.be.true;
|
||||
|
||||
clock.restore();
|
||||
});
|
||||
});
|
||||
|
||||
describe('get', () => {
|
||||
|
||||
@@ -382,7 +382,7 @@ data: test
|
||||
|
||||
beforeEach(() => {
|
||||
// Can't access to the internal sseStream,
|
||||
// as a workround, set `defaultMaxListeners` of `SseStream` and reset the max listeners of `process`
|
||||
// as a workaround, set `defaultMaxListeners` of `SseStream` and reset the max listeners of `process`
|
||||
const PROCESS_MAX_LISTENERS = process.getMaxListeners();
|
||||
SseStream.defaultMaxListeners = MAX_LISTENERS;
|
||||
process.setMaxListeners(PROCESS_MAX_LISTENERS);
|
||||
|
||||
@@ -91,10 +91,12 @@ Nest is an MIT-licensed open source project. It can grow thanks to the sponsors
|
||||
|
||||
<table style="text-align:center;">
|
||||
<tr>
|
||||
<td><a href="https://n.inc" target="_blank"><img src="https://nestjs.com/img/logos/n-inc-logo.svg" width="90" valign="middle" /></a></td>
|
||||
<td><a href="https://twistag.com/" target="_blank"><img src="https://nestjs.com/img/logos/twistag-logo.png" width="120" valign="middle" /></a></td>
|
||||
<td><a href="https://www.dinii.jp/" target="_blank"><img src="https://nestjs.com/img/logos/dinii-logo.png" width="75" valign="middle" /></a></td>
|
||||
<td><a href="https://www.mercedes-benz.com/" target="_blank"><img src="https://nestjs.com/img/logos/mercedes-logo.png" width="110" valign="middle" /></a></td>
|
||||
<td><a href="https://www.mercedes-benz.com/" target="_blank"><img src="https://nestjs.com/img/logos/mercedes-logo.png" width="100" valign="middle" /></a></td>
|
||||
<td><a href="https://www.dinii.jp/" target="_blank"><img src="https://nestjs.com/img/logos/dinii-logo.png" width="65" valign="middle" /></a></td>
|
||||
<td><a href="https://bloodycase.com/?promocode=NEST" target="_blank"><img src="https://nestjs.com/img/logos/bloodycase-logo.png" width="65" valign="middle" /></a></td>
|
||||
<td><a href="https://handsontable.com/docs/react-data-grid/?utm_source=NestJS_GH&utm_medium=sponsorship&utm_campaign=library_sponsorship_2024" target="_blank"><img src="https://nestjs.com/img/logos/handsontable-dark-logo.svg#2" width="150" valign="middle" /></a></td>
|
||||
<td align="center" valign="middle"><a href="https://www.itflashcards.com/" target="_blank"><img src="https://nestjs.com/img/logos/it_flashcards-logo.png" width="170" valign="middle" /></a></td>
|
||||
<td align="center" valign="middle"><a href="https://arcjet.com/?ref=nestjs" target="_blank"><img src="https://nestjs.com/img/logos/arcjet-logo.svg" width="170" valign="middle" /></a></td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
@@ -126,10 +128,11 @@ Nest is an MIT-licensed open source project. It can grow thanks to the sponsors
|
||||
<td align="center" valign="middle"><a href="https://www.hingehealth.com/" target="_blank"><img src="https://nestjs.com/img/logos/hinge-health-logo.svg" width="100" valign="middle" /></a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center" valign="middle"><a href="https://julienferand.dev/" target="_blank"><img src="https://nestjs.com/img/logos/julienferand-logo.jpeg" width="65" valign="middle" /></a></td>
|
||||
<td align="center" valign="middle"><a href="https://julienferand.dev/" target="_blank"><img src="https://nestjs.com/img/logos/julienferand-logo.jpeg" width="55" valign="middle" /></a></td>
|
||||
<td align="center" valign="middle"><a href="https://www.tripoffice.com/" target="_blank"><img src="https://nestjs.com/img/logos/tripoffice-logo.png" width="140" valign="middle" /></a></td>
|
||||
<td align="center" valign="middle"><a href="https://solcellsforetag.se/" target="_blank"><img src="https://nestjs.com/img/logos/solcellsforetag-logo.svg" width="140" valign="middle" /></a></td>
|
||||
<td align="center" valign="middle"><a href="https://www.itflashcards.com/" target="_blank"><img src="https://nestjs.com/img/logos/it_flashcards-logo.png" width="150" valign="middle" /></a></td>
|
||||
<td align="center" valign="middle"><a href="https://www.route4me.com/" target="_blank"><img src="https://nestjs.com/img/logos/route4me-logo.svg" width="100" valign="middle" /></a></td>
|
||||
<td align="center" valign="middle"><a href="https://www.slotsup.com/" target="_blank"><img src="https://nestjs.com/img/logos/slotsup-logo.png" width="60" valign="middle" /></a></td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import { Logger } from '@nestjs/common/services/logger.service';
|
||||
import { loadPackage } from '@nestjs/common/utils/load-package.util';
|
||||
import { isUndefined } from '@nestjs/common/utils/shared.utils';
|
||||
import { isNil, isUndefined } from '@nestjs/common/utils/shared.utils';
|
||||
import {
|
||||
KAFKA_DEFAULT_BROKER,
|
||||
KAFKA_DEFAULT_CLIENT,
|
||||
@@ -37,6 +37,15 @@ import {
|
||||
KafkaRequestSerializer,
|
||||
} from '../serializers/kafka-request.serializer';
|
||||
import { ClientProxy } from './client-proxy';
|
||||
import {
|
||||
connectable,
|
||||
defer,
|
||||
Observable,
|
||||
Subject,
|
||||
throwError as _throw,
|
||||
} from 'rxjs';
|
||||
import { mergeMap } from 'rxjs/operators';
|
||||
import { InvalidMessageException } from '../errors/invalid-message.exception';
|
||||
|
||||
let kafkaPackage: any = {};
|
||||
|
||||
@@ -223,6 +232,58 @@ export class ClientKafka extends ClientProxy {
|
||||
return this.consumerAssignments;
|
||||
}
|
||||
|
||||
public emitBatch<TResult = any, TInput = any>(
|
||||
pattern: any,
|
||||
data: { messages: TInput[] },
|
||||
): Observable<TResult> {
|
||||
if (isNil(pattern) || isNil(data)) {
|
||||
return _throw(() => new InvalidMessageException());
|
||||
}
|
||||
const source = defer(async () => this.connect()).pipe(
|
||||
mergeMap(() => this.dispatchBatchEvent({ pattern, data })),
|
||||
);
|
||||
const connectableSource = connectable(source, {
|
||||
connector: () => new Subject(),
|
||||
resetOnDisconnect: false,
|
||||
});
|
||||
connectableSource.connect();
|
||||
return connectableSource;
|
||||
}
|
||||
|
||||
public commitOffsets(
|
||||
topicPartitions: TopicPartitionOffsetAndMetadata[],
|
||||
): Promise<void> {
|
||||
if (this.consumer) {
|
||||
return this.consumer.commitOffsets(topicPartitions);
|
||||
} else {
|
||||
throw new Error('No consumer initialized');
|
||||
}
|
||||
}
|
||||
|
||||
protected async dispatchBatchEvent<TInput = any>(
|
||||
packets: ReadPacket<{ messages: TInput[] }>,
|
||||
): Promise<any> {
|
||||
if (packets.data.messages.length === 0) {
|
||||
return;
|
||||
}
|
||||
const pattern = this.normalizePattern(packets.pattern);
|
||||
const outgoingEvents = await Promise.all(
|
||||
packets.data.messages.map(message => {
|
||||
return this.serializer.serialize(message as any, { pattern });
|
||||
}),
|
||||
);
|
||||
|
||||
const message = Object.assign(
|
||||
{
|
||||
topic: pattern,
|
||||
messages: outgoingEvents,
|
||||
},
|
||||
this.options.send || {},
|
||||
);
|
||||
|
||||
return this.producer.send(message);
|
||||
}
|
||||
|
||||
protected async dispatchEvent(packet: OutgoingEvent): Promise<any> {
|
||||
const pattern = this.normalizePattern(packet.pattern);
|
||||
const outgoingEvent = await this.serializer.serialize(packet.data, {
|
||||
@@ -320,14 +381,4 @@ export class ClientKafka extends ClientProxy {
|
||||
this.deserializer =
|
||||
(options && options.deserializer) || new KafkaResponseDeserializer();
|
||||
}
|
||||
|
||||
public commitOffsets(
|
||||
topicPartitions: TopicPartitionOffsetAndMetadata[],
|
||||
): Promise<void> {
|
||||
if (this.consumer) {
|
||||
return this.consumer.commitOffsets(topicPartitions);
|
||||
} else {
|
||||
throw new Error('No consumer initialized');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -210,15 +210,22 @@ export class ClientMqtt extends ClientProxy {
|
||||
return undefined;
|
||||
}
|
||||
|
||||
return {
|
||||
...requestOptions,
|
||||
properties: {
|
||||
...requestOptions?.properties,
|
||||
// Cant just spread objects as MQTT won't deliver
|
||||
// any message with empty object as "userProperties" field
|
||||
// @url https://github.com/nestjs/nest/issues/14079
|
||||
let options: MqttRecordOptions = {};
|
||||
if (requestOptions) {
|
||||
options = { ...requestOptions };
|
||||
}
|
||||
if (this.options?.userProperties) {
|
||||
options.properties = {
|
||||
...options.properties,
|
||||
userProperties: {
|
||||
...this.options?.userProperties,
|
||||
...requestOptions?.properties?.userProperties,
|
||||
...options.properties?.userProperties,
|
||||
},
|
||||
},
|
||||
};
|
||||
};
|
||||
}
|
||||
return options;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -18,6 +18,7 @@ let natsPackage = {} as any;
|
||||
export class ClientNats extends ClientProxy {
|
||||
protected readonly logger = new Logger(ClientNats.name);
|
||||
protected natsClient: Client;
|
||||
protected clientConnectionPromise: Promise<Client>;
|
||||
|
||||
constructor(protected readonly options: NatsOptions['options']) {
|
||||
super();
|
||||
@@ -30,13 +31,15 @@ export class ClientNats extends ClientProxy {
|
||||
public async close() {
|
||||
await this.natsClient?.close();
|
||||
this.natsClient = null;
|
||||
this.clientConnectionPromise = null;
|
||||
}
|
||||
|
||||
public async connect(): Promise<any> {
|
||||
if (this.natsClient) {
|
||||
return this.natsClient;
|
||||
if (this.clientConnectionPromise) {
|
||||
return this.clientConnectionPromise;
|
||||
}
|
||||
this.natsClient = await this.createClient();
|
||||
this.clientConnectionPromise = this.createClient();
|
||||
this.natsClient = await this.clientConnectionPromise;
|
||||
this.handleStatusUpdates(this.natsClient);
|
||||
return this.natsClient;
|
||||
}
|
||||
|
||||
@@ -135,9 +135,7 @@ export class ClientRMQ extends ClientProxy {
|
||||
|
||||
public createClient(): AmqpConnectionManager {
|
||||
const socketOptions = this.getOptionsProp(this.options, 'socketOptions');
|
||||
return rmqPackage.connect(this.urls, {
|
||||
connectionOptions: socketOptions?.connectionOptions,
|
||||
});
|
||||
return rmqPackage.connect(this.urls, socketOptions);
|
||||
}
|
||||
|
||||
public mergeDisconnectEvent<T = any>(
|
||||
|
||||
@@ -1,23 +1,23 @@
|
||||
import {
|
||||
isObject,
|
||||
isNumber,
|
||||
isNil,
|
||||
isNumber,
|
||||
isObject,
|
||||
isSymbol,
|
||||
} from '@nestjs/common/utils/shared.utils';
|
||||
/* eslint-disable @typescript-eslint/no-use-before-define */
|
||||
import {
|
||||
PATTERN_EXTRAS_METADATA,
|
||||
PATTERN_HANDLER_METADATA,
|
||||
PATTERN_METADATA,
|
||||
TRANSPORT_METADATA,
|
||||
PATTERN_EXTRAS_METADATA,
|
||||
} from '../constants';
|
||||
import { PatternHandler } from '../enums/pattern-handler.enum';
|
||||
import { PatternMetadata } from '../interfaces/pattern-metadata.interface';
|
||||
import { Transport } from '../enums';
|
||||
import { PatternHandler } from '../enums/pattern-handler.enum';
|
||||
import {
|
||||
InvalidGrpcDecoratorException,
|
||||
RpcDecoratorMetadata,
|
||||
} from '../errors/invalid-grpc-message-decorator.exception';
|
||||
import { PatternMetadata } from '../interfaces/pattern-metadata.interface';
|
||||
|
||||
export enum GrpcMethodStreamingType {
|
||||
NO_STREAMING = 'no_stream',
|
||||
@@ -141,7 +141,37 @@ export function GrpcStreamMethod(
|
||||
method,
|
||||
GrpcMethodStreamingType.RX_STREAMING,
|
||||
);
|
||||
return MessagePattern(metadata, Transport.GRPC)(target, key, descriptor);
|
||||
|
||||
MessagePattern(metadata, Transport.GRPC)(target, key, descriptor);
|
||||
|
||||
const originalMethod = descriptor.value;
|
||||
|
||||
// Override original method to call the "drainBuffer" method on the first parameter
|
||||
// This is required to avoid premature message emission
|
||||
descriptor.value = async function (
|
||||
this: any,
|
||||
observable: any,
|
||||
...args: any[]
|
||||
) {
|
||||
const result = await Promise.resolve(
|
||||
originalMethod.apply(this, [observable, ...args]),
|
||||
);
|
||||
|
||||
// Drain buffer if "drainBuffer" method is available
|
||||
if (observable && observable.drainBuffer) {
|
||||
process.nextTick(() => {
|
||||
observable.drainBuffer();
|
||||
});
|
||||
}
|
||||
return result;
|
||||
};
|
||||
|
||||
// Copy all metadata from the original method to the new one
|
||||
const metadataKeys = Reflect.getMetadataKeys(originalMethod);
|
||||
metadataKeys.forEach(metadataKey => {
|
||||
const metadataValue = Reflect.getMetadata(metadataKey, originalMethod);
|
||||
Reflect.defineMetadata(metadataKey, metadataValue, descriptor.value);
|
||||
});
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@nestjs/microservices",
|
||||
"version": "10.3.10",
|
||||
"version": "10.4.8",
|
||||
"description": "Nest - modern, fast, powerful node.js web framework (@microservices)",
|
||||
"author": "Kamil Mysliwiec",
|
||||
"license": "MIT",
|
||||
@@ -19,11 +19,11 @@
|
||||
},
|
||||
"dependencies": {
|
||||
"iterare": "1.2.1",
|
||||
"tslib": "2.6.3"
|
||||
"tslib": "2.7.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@nestjs/common": "10.3.10",
|
||||
"@nestjs/core": "10.3.10"
|
||||
"@nestjs/common": "10.4.8",
|
||||
"@nestjs/core": "10.4.8"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"@grpc/grpc-js": "*",
|
||||
|
||||
@@ -6,6 +6,7 @@ import {
|
||||
import {
|
||||
EMPTY,
|
||||
Observable,
|
||||
ReplaySubject,
|
||||
Subject,
|
||||
Subscription,
|
||||
defaultIfEmpty,
|
||||
@@ -125,7 +126,6 @@ export class ServerGrpc extends Server implements CustomTransportStrategy {
|
||||
const service = {};
|
||||
|
||||
for (const methodName in grpcService.prototype) {
|
||||
let pattern = '';
|
||||
let methodHandler = null;
|
||||
let streamingType = GrpcMethodStreamingType.NO_STREAMING;
|
||||
|
||||
@@ -135,38 +135,38 @@ export class ServerGrpc extends Server implements CustomTransportStrategy {
|
||||
if (!isUndefined(methodReqStreaming) && methodReqStreaming) {
|
||||
// Try first pattern to be presented, RX streaming pattern would be
|
||||
// a preferable pattern to select among a few defined
|
||||
pattern = this.createPattern(
|
||||
methodHandler = this.getMessageHandler(
|
||||
name,
|
||||
methodName,
|
||||
GrpcMethodStreamingType.RX_STREAMING,
|
||||
methodFunction,
|
||||
);
|
||||
methodHandler = this.messageHandlers.get(pattern);
|
||||
streamingType = GrpcMethodStreamingType.RX_STREAMING;
|
||||
// If first pattern didn't match to any of handlers then try
|
||||
// pass-through handler to be presented
|
||||
if (!methodHandler) {
|
||||
pattern = this.createPattern(
|
||||
methodHandler = this.getMessageHandler(
|
||||
name,
|
||||
methodName,
|
||||
GrpcMethodStreamingType.PT_STREAMING,
|
||||
methodFunction,
|
||||
);
|
||||
methodHandler = this.messageHandlers.get(pattern);
|
||||
streamingType = GrpcMethodStreamingType.PT_STREAMING;
|
||||
}
|
||||
} else {
|
||||
pattern = this.createPattern(
|
||||
// Select handler if any presented for No-Streaming pattern
|
||||
methodHandler = this.getMessageHandler(
|
||||
name,
|
||||
methodName,
|
||||
GrpcMethodStreamingType.NO_STREAMING,
|
||||
methodFunction,
|
||||
);
|
||||
// Select handler if any presented for No-Streaming pattern
|
||||
methodHandler = this.messageHandlers.get(pattern);
|
||||
streamingType = GrpcMethodStreamingType.NO_STREAMING;
|
||||
}
|
||||
if (!methodHandler) {
|
||||
continue;
|
||||
}
|
||||
service[methodName] = await this.createServiceMethod(
|
||||
service[methodName] = this.createServiceMethod(
|
||||
methodHandler,
|
||||
grpcService.prototype[methodName],
|
||||
streamingType,
|
||||
@@ -175,6 +175,22 @@ export class ServerGrpc extends Server implements CustomTransportStrategy {
|
||||
return service;
|
||||
}
|
||||
|
||||
public getMessageHandler(
|
||||
serviceName: string,
|
||||
methodName: string,
|
||||
streaming: GrpcMethodStreamingType,
|
||||
grpcMethod: { path?: string },
|
||||
) {
|
||||
let pattern = this.createPattern(serviceName, methodName, streaming);
|
||||
let methodHandler = this.messageHandlers.get(pattern);
|
||||
if (!methodHandler) {
|
||||
const packageServiceName = grpcMethod.path?.split?.('/')[1];
|
||||
pattern = this.createPattern(packageServiceName, methodName, streaming);
|
||||
methodHandler = this.messageHandlers.get(pattern);
|
||||
}
|
||||
return methodHandler;
|
||||
}
|
||||
|
||||
/**
|
||||
* Will create a string of a JSON serialized format
|
||||
*
|
||||
@@ -263,7 +279,7 @@ export class ServerGrpc extends Server implements CustomTransportStrategy {
|
||||
source: Observable<T>,
|
||||
call: GrpcCall<T>,
|
||||
): Promise<void> {
|
||||
// this promise should **not** reject, as we're handling errors in the observable for the Call
|
||||
// This promise should **not** reject, as we're handling errors in the observable for the Call
|
||||
// the promise is only needed to signal when writing/draining has been completed
|
||||
return new Promise((resolve, _doNotUse) => {
|
||||
const valuesWaitingToBeDrained: T[] = [];
|
||||
@@ -365,8 +381,11 @@ export class ServerGrpc extends Server implements CustomTransportStrategy {
|
||||
call: GrpcCall,
|
||||
callback: (err: unknown, value: unknown) => void,
|
||||
) => {
|
||||
const req = new Subject<any>();
|
||||
call.on('data', (m: any) => req.next(m));
|
||||
// Needs to be a Proxy in order to buffer messages that come before handler is executed
|
||||
// This could happen if handler has any async guards or interceptors registered that would delay
|
||||
// the execution.
|
||||
const { subject, next, error, complete } = this.bufferUntilDrained();
|
||||
call.on('data', (m: any) => next(m));
|
||||
call.on('error', (e: any) => {
|
||||
// Check if error means that stream ended on other end
|
||||
const isCancelledError = String(e).toLowerCase().indexOf('cancelled');
|
||||
@@ -376,11 +395,15 @@ export class ServerGrpc extends Server implements CustomTransportStrategy {
|
||||
return;
|
||||
}
|
||||
// If another error then just pass it along
|
||||
req.error(e);
|
||||
error(e);
|
||||
});
|
||||
call.on('end', () => req.complete());
|
||||
call.on('end', () => complete());
|
||||
|
||||
const handler = methodHandler(req.asObservable(), call.metadata, call);
|
||||
const handler = methodHandler(
|
||||
subject.asObservable(),
|
||||
call.metadata,
|
||||
call,
|
||||
);
|
||||
const res = this.transformToObservable(await handler);
|
||||
if (isResponseStream) {
|
||||
await this.writeObservableToGrpc(res, call);
|
||||
@@ -411,11 +434,15 @@ export class ServerGrpc extends Server implements CustomTransportStrategy {
|
||||
call: GrpcCall,
|
||||
callback: (err: unknown, value: unknown) => void,
|
||||
) => {
|
||||
let handlerStream: Observable<any>;
|
||||
if (isResponseStream) {
|
||||
methodHandler(call);
|
||||
handlerStream = this.transformToObservable(await methodHandler(call));
|
||||
} else {
|
||||
methodHandler(call, callback);
|
||||
handlerStream = this.transformToObservable(
|
||||
await methodHandler(call, callback),
|
||||
);
|
||||
}
|
||||
await lastValueFrom(handlerStream);
|
||||
};
|
||||
}
|
||||
|
||||
@@ -454,7 +481,7 @@ export class ServerGrpc extends Server implements CustomTransportStrategy {
|
||||
this.messageHandlers.set(route, callback);
|
||||
}
|
||||
|
||||
public async createClient(): Promise<any> {
|
||||
public async createClient() {
|
||||
const channelOptions: ChannelOptions =
|
||||
this.options && this.options.channelOptions
|
||||
? this.options.channelOptions
|
||||
@@ -597,4 +624,70 @@ export class ServerGrpc extends Server implements CustomTransportStrategy {
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
private bufferUntilDrained<T>() {
|
||||
type DrainableSubject<T> = Subject<T> & { drainBuffer: () => void };
|
||||
|
||||
const subject = new Subject<T>();
|
||||
const replayBuffer = new ReplaySubject<T>();
|
||||
let hasDrained = false;
|
||||
|
||||
function drainBuffer(this: DrainableSubject<T>) {
|
||||
if (hasDrained) {
|
||||
return;
|
||||
}
|
||||
hasDrained = true;
|
||||
|
||||
// Replay buffered values to the new subscriber
|
||||
replayBuffer.subscribe({
|
||||
next: val => console.log('emitted', val),
|
||||
});
|
||||
replayBuffer.complete();
|
||||
}
|
||||
|
||||
return {
|
||||
subject: new Proxy<DrainableSubject<T>>(subject as DrainableSubject<T>, {
|
||||
get(target, prop, receiver) {
|
||||
if (prop === 'asObservable') {
|
||||
return () => {
|
||||
const stream = subject.asObservable();
|
||||
|
||||
// "drainBuffer" will be called before the evaluation of the handler
|
||||
// but after any enhancers have been applied (e.g., `interceptors`)
|
||||
Object.defineProperty(stream, drainBuffer.name, {
|
||||
value: drainBuffer,
|
||||
});
|
||||
return stream;
|
||||
};
|
||||
}
|
||||
if (hasDrained) {
|
||||
return Reflect.get(target, prop, receiver);
|
||||
}
|
||||
return Reflect.get(replayBuffer, prop, receiver);
|
||||
},
|
||||
}),
|
||||
next: (value: T) => {
|
||||
if (!hasDrained) {
|
||||
replayBuffer.next(value);
|
||||
}
|
||||
subject.next(value);
|
||||
},
|
||||
error: (err: any) => {
|
||||
if (!hasDrained) {
|
||||
replayBuffer.error(err);
|
||||
}
|
||||
subject.error(err);
|
||||
},
|
||||
complete: () => {
|
||||
if (!hasDrained) {
|
||||
replayBuffer.complete();
|
||||
// Replay buffer is no longer needed
|
||||
// Return early to allow subject to complete later, after the replay buffer
|
||||
// has been drained
|
||||
return;
|
||||
}
|
||||
subject.complete();
|
||||
},
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
@@ -9,6 +9,8 @@ import {
|
||||
EachMessagePayload,
|
||||
KafkaMessage,
|
||||
} from '../../external/kafka.interface';
|
||||
import { Observable } from 'rxjs';
|
||||
import { Producer } from 'kafkajs';
|
||||
|
||||
describe('ClientKafka', () => {
|
||||
const topic = 'test.topic';
|
||||
@@ -549,6 +551,77 @@ describe('ClientKafka', () => {
|
||||
});
|
||||
});
|
||||
|
||||
describe('emitBatch', () => {
|
||||
it(`should return an observable stream`, () => {
|
||||
const stream$ = client.emitBatch(
|
||||
{},
|
||||
{
|
||||
messages: [],
|
||||
},
|
||||
);
|
||||
expect(stream$ instanceof Observable).to.be.true;
|
||||
});
|
||||
|
||||
it(`should call "connect" immediately`, () => {
|
||||
const connectSpy = sinon.spy(client, 'connect');
|
||||
client.emitBatch(
|
||||
{},
|
||||
{
|
||||
messages: [],
|
||||
},
|
||||
);
|
||||
expect(connectSpy.calledOnce).to.be.true;
|
||||
});
|
||||
|
||||
describe('when "connect" throws', () => {
|
||||
it('should return Observable with error', () => {
|
||||
sinon.stub(client, 'connect').callsFake(() => {
|
||||
throw new Error();
|
||||
});
|
||||
|
||||
const stream$ = client.emitBatch(
|
||||
{},
|
||||
{
|
||||
messages: [],
|
||||
},
|
||||
);
|
||||
|
||||
stream$.subscribe({
|
||||
next: () => {},
|
||||
error: err => {
|
||||
expect(err).to.be.instanceof(Error);
|
||||
},
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
describe('when is connected', () => {
|
||||
beforeEach(() => {
|
||||
sinon
|
||||
.stub(client, 'connect')
|
||||
.callsFake(() => Promise.resolve({} as Producer));
|
||||
});
|
||||
|
||||
it(`should call dispatchBatchEvent`, () => {
|
||||
const pattern = { test: 3 };
|
||||
const data = { messages: [] };
|
||||
const dispatchBatchEventSpy = sinon
|
||||
.stub()
|
||||
.callsFake(() => Promise.resolve(true));
|
||||
const stream$ = client.emitBatch(pattern, data);
|
||||
client['dispatchBatchEvent'] = dispatchBatchEventSpy;
|
||||
stream$.subscribe(() => {
|
||||
expect(dispatchBatchEventSpy.calledOnce).to.be.true;
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
it('should return Observable with error', () => {
|
||||
const err$ = client.emitBatch(null, null);
|
||||
expect(err$).to.be.instanceOf(Observable);
|
||||
});
|
||||
});
|
||||
|
||||
describe('dispatchEvent', () => {
|
||||
const eventMessage = {
|
||||
id: undefined,
|
||||
|
||||
@@ -253,6 +253,7 @@ describe('ClientNats', () => {
|
||||
describe('when is not connected', () => {
|
||||
beforeEach(async () => {
|
||||
client['natsClient'] = null;
|
||||
client['clientConnectionPromise'] = null;
|
||||
await client.connect();
|
||||
});
|
||||
it('should call "handleStatusUpdatesSpy" once', async () => {
|
||||
|
||||
@@ -281,6 +281,8 @@ describe('ServerGrpc', () => {
|
||||
.onFirstCall()
|
||||
.returns('_invalid')
|
||||
.onSecondCall()
|
||||
.returns('_invalid')
|
||||
.onThirdCall()
|
||||
.returns('test2');
|
||||
|
||||
sinon.stub(server, 'createServiceMethod').callsFake(() => ({}) as any);
|
||||
@@ -306,6 +308,69 @@ describe('ServerGrpc', () => {
|
||||
});
|
||||
});
|
||||
|
||||
describe('getMessageHandler', () => {
|
||||
it('should return handler when service name specified', () => {
|
||||
const testPattern = server.createPattern(
|
||||
'test',
|
||||
'TestMethod',
|
||||
GrpcMethodStreamingType.NO_STREAMING,
|
||||
);
|
||||
const handlers = new Map([[testPattern, () => ({})]]);
|
||||
console.log(handlers.entries());
|
||||
(server as any).messageHandlers = handlers;
|
||||
|
||||
expect(
|
||||
server.getMessageHandler(
|
||||
'test',
|
||||
'TestMethod',
|
||||
GrpcMethodStreamingType.NO_STREAMING,
|
||||
{},
|
||||
),
|
||||
).not.to.be.undefined;
|
||||
});
|
||||
it('should return handler when package name specified with service name', () => {
|
||||
const testPattern = server.createPattern(
|
||||
'package.example.test',
|
||||
'TestMethod',
|
||||
GrpcMethodStreamingType.NO_STREAMING,
|
||||
);
|
||||
const handlers = new Map([[testPattern, () => ({})]]);
|
||||
(server as any).messageHandlers = handlers;
|
||||
|
||||
expect(
|
||||
server.getMessageHandler(
|
||||
'test',
|
||||
'TestMethod',
|
||||
GrpcMethodStreamingType.NO_STREAMING,
|
||||
{
|
||||
path: '/package.example.test/TestMethod',
|
||||
},
|
||||
),
|
||||
).not.to.be.undefined;
|
||||
});
|
||||
|
||||
it('should return undefined when method name is unknown', () => {
|
||||
const testPattern = server.createPattern(
|
||||
'package.example.test',
|
||||
'unknown',
|
||||
GrpcMethodStreamingType.NO_STREAMING,
|
||||
);
|
||||
const handlers = new Map([[testPattern, () => ({})]]);
|
||||
(server as any).messageHandlers = handlers;
|
||||
|
||||
expect(
|
||||
server.getMessageHandler(
|
||||
'test',
|
||||
'TestMethod',
|
||||
GrpcMethodStreamingType.NO_STREAMING,
|
||||
{
|
||||
path: '/package.example.test/TestMethod',
|
||||
},
|
||||
),
|
||||
).to.be.undefined;
|
||||
});
|
||||
});
|
||||
|
||||
describe('createPattern', () => {
|
||||
it('should return pattern', () => {
|
||||
const service = 'test';
|
||||
|
||||
@@ -91,10 +91,12 @@ Nest is an MIT-licensed open source project. It can grow thanks to the sponsors
|
||||
|
||||
<table style="text-align:center;">
|
||||
<tr>
|
||||
<td><a href="https://n.inc" target="_blank"><img src="https://nestjs.com/img/logos/n-inc-logo.svg" width="90" valign="middle" /></a></td>
|
||||
<td><a href="https://twistag.com/" target="_blank"><img src="https://nestjs.com/img/logos/twistag-logo.png" width="120" valign="middle" /></a></td>
|
||||
<td><a href="https://www.dinii.jp/" target="_blank"><img src="https://nestjs.com/img/logos/dinii-logo.png" width="75" valign="middle" /></a></td>
|
||||
<td><a href="https://www.mercedes-benz.com/" target="_blank"><img src="https://nestjs.com/img/logos/mercedes-logo.png" width="110" valign="middle" /></a></td>
|
||||
<td><a href="https://www.mercedes-benz.com/" target="_blank"><img src="https://nestjs.com/img/logos/mercedes-logo.png" width="100" valign="middle" /></a></td>
|
||||
<td><a href="https://www.dinii.jp/" target="_blank"><img src="https://nestjs.com/img/logos/dinii-logo.png" width="65" valign="middle" /></a></td>
|
||||
<td><a href="https://bloodycase.com/?promocode=NEST" target="_blank"><img src="https://nestjs.com/img/logos/bloodycase-logo.png" width="65" valign="middle" /></a></td>
|
||||
<td><a href="https://handsontable.com/docs/react-data-grid/?utm_source=NestJS_GH&utm_medium=sponsorship&utm_campaign=library_sponsorship_2024" target="_blank"><img src="https://nestjs.com/img/logos/handsontable-dark-logo.svg#2" width="150" valign="middle" /></a></td>
|
||||
<td align="center" valign="middle"><a href="https://www.itflashcards.com/" target="_blank"><img src="https://nestjs.com/img/logos/it_flashcards-logo.png" width="170" valign="middle" /></a></td>
|
||||
<td align="center" valign="middle"><a href="https://arcjet.com/?ref=nestjs" target="_blank"><img src="https://nestjs.com/img/logos/arcjet-logo.svg" width="170" valign="middle" /></a></td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
@@ -126,10 +128,11 @@ Nest is an MIT-licensed open source project. It can grow thanks to the sponsors
|
||||
<td align="center" valign="middle"><a href="https://www.hingehealth.com/" target="_blank"><img src="https://nestjs.com/img/logos/hinge-health-logo.svg" width="100" valign="middle" /></a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center" valign="middle"><a href="https://julienferand.dev/" target="_blank"><img src="https://nestjs.com/img/logos/julienferand-logo.jpeg" width="65" valign="middle" /></a></td>
|
||||
<td align="center" valign="middle"><a href="https://julienferand.dev/" target="_blank"><img src="https://nestjs.com/img/logos/julienferand-logo.jpeg" width="55" valign="middle" /></a></td>
|
||||
<td align="center" valign="middle"><a href="https://www.tripoffice.com/" target="_blank"><img src="https://nestjs.com/img/logos/tripoffice-logo.png" width="140" valign="middle" /></a></td>
|
||||
<td align="center" valign="middle"><a href="https://solcellsforetag.se/" target="_blank"><img src="https://nestjs.com/img/logos/solcellsforetag-logo.svg" width="140" valign="middle" /></a></td>
|
||||
<td align="center" valign="middle"><a href="https://www.itflashcards.com/" target="_blank"><img src="https://nestjs.com/img/logos/it_flashcards-logo.png" width="150" valign="middle" /></a></td>
|
||||
<td align="center" valign="middle"><a href="https://www.route4me.com/" target="_blank"><img src="https://nestjs.com/img/logos/route4me-logo.svg" width="100" valign="middle" /></a></td>
|
||||
<td align="center" valign="middle"><a href="https://www.slotsup.com/" target="_blank"><img src="https://nestjs.com/img/logos/slotsup-logo.png" width="60" valign="middle" /></a></td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@nestjs/platform-express",
|
||||
"version": "10.3.10",
|
||||
"version": "10.4.8",
|
||||
"description": "Nest - modern, fast, powerful node.js web framework (@platform-express)",
|
||||
"author": "Kamil Mysliwiec",
|
||||
"license": "MIT",
|
||||
@@ -18,15 +18,15 @@
|
||||
"access": "public"
|
||||
},
|
||||
"dependencies": {
|
||||
"body-parser": "1.20.2",
|
||||
"body-parser": "1.20.3",
|
||||
"cors": "2.8.5",
|
||||
"express": "4.19.2",
|
||||
"express": "4.21.1",
|
||||
"multer": "1.4.4-lts.1",
|
||||
"tslib": "2.6.3"
|
||||
"tslib": "2.7.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@nestjs/common": "10.3.10",
|
||||
"@nestjs/core": "10.3.10"
|
||||
"@nestjs/common": "10.4.8",
|
||||
"@nestjs/core": "10.4.8"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"@nestjs/common": "^10.0.0",
|
||||
|
||||
@@ -91,10 +91,12 @@ Nest is an MIT-licensed open source project. It can grow thanks to the sponsors
|
||||
|
||||
<table style="text-align:center;">
|
||||
<tr>
|
||||
<td><a href="https://n.inc" target="_blank"><img src="https://nestjs.com/img/logos/n-inc-logo.svg" width="90" valign="middle" /></a></td>
|
||||
<td><a href="https://twistag.com/" target="_blank"><img src="https://nestjs.com/img/logos/twistag-logo.png" width="120" valign="middle" /></a></td>
|
||||
<td><a href="https://www.dinii.jp/" target="_blank"><img src="https://nestjs.com/img/logos/dinii-logo.png" width="75" valign="middle" /></a></td>
|
||||
<td><a href="https://www.mercedes-benz.com/" target="_blank"><img src="https://nestjs.com/img/logos/mercedes-logo.png" width="110" valign="middle" /></a></td>
|
||||
<td><a href="https://www.mercedes-benz.com/" target="_blank"><img src="https://nestjs.com/img/logos/mercedes-logo.png" width="100" valign="middle" /></a></td>
|
||||
<td><a href="https://www.dinii.jp/" target="_blank"><img src="https://nestjs.com/img/logos/dinii-logo.png" width="65" valign="middle" /></a></td>
|
||||
<td><a href="https://bloodycase.com/?promocode=NEST" target="_blank"><img src="https://nestjs.com/img/logos/bloodycase-logo.png" width="65" valign="middle" /></a></td>
|
||||
<td><a href="https://handsontable.com/docs/react-data-grid/?utm_source=NestJS_GH&utm_medium=sponsorship&utm_campaign=library_sponsorship_2024" target="_blank"><img src="https://nestjs.com/img/logos/handsontable-dark-logo.svg#2" width="150" valign="middle" /></a></td>
|
||||
<td align="center" valign="middle"><a href="https://www.itflashcards.com/" target="_blank"><img src="https://nestjs.com/img/logos/it_flashcards-logo.png" width="170" valign="middle" /></a></td>
|
||||
<td align="center" valign="middle"><a href="https://arcjet.com/?ref=nestjs" target="_blank"><img src="https://nestjs.com/img/logos/arcjet-logo.svg" width="170" valign="middle" /></a></td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
@@ -126,10 +128,11 @@ Nest is an MIT-licensed open source project. It can grow thanks to the sponsors
|
||||
<td align="center" valign="middle"><a href="https://www.hingehealth.com/" target="_blank"><img src="https://nestjs.com/img/logos/hinge-health-logo.svg" width="100" valign="middle" /></a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center" valign="middle"><a href="https://julienferand.dev/" target="_blank"><img src="https://nestjs.com/img/logos/julienferand-logo.jpeg" width="65" valign="middle" /></a></td>
|
||||
<td align="center" valign="middle"><a href="https://julienferand.dev/" target="_blank"><img src="https://nestjs.com/img/logos/julienferand-logo.jpeg" width="55" valign="middle" /></a></td>
|
||||
<td align="center" valign="middle"><a href="https://www.tripoffice.com/" target="_blank"><img src="https://nestjs.com/img/logos/tripoffice-logo.png" width="140" valign="middle" /></a></td>
|
||||
<td align="center" valign="middle"><a href="https://solcellsforetag.se/" target="_blank"><img src="https://nestjs.com/img/logos/solcellsforetag-logo.svg" width="140" valign="middle" /></a></td>
|
||||
<td align="center" valign="middle"><a href="https://www.itflashcards.com/" target="_blank"><img src="https://nestjs.com/img/logos/it_flashcards-logo.png" width="150" valign="middle" /></a></td>
|
||||
<td align="center" valign="middle"><a href="https://www.route4me.com/" target="_blank"><img src="https://nestjs.com/img/logos/route4me-logo.svg" width="100" valign="middle" /></a></td>
|
||||
<td align="center" valign="middle"><a href="https://www.slotsup.com/" target="_blank"><img src="https://nestjs.com/img/logos/slotsup-logo.png" width="60" valign="middle" /></a></td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
|
||||
@@ -34,12 +34,14 @@ import {
|
||||
RequestGenericInterface,
|
||||
RouteOptions,
|
||||
RouteShorthandOptions,
|
||||
HTTPMethods,
|
||||
fastify,
|
||||
} from 'fastify';
|
||||
import * as Reply from 'fastify/lib/reply';
|
||||
import { kRouteContext } from 'fastify/lib/symbols';
|
||||
import * as http2 from 'http2';
|
||||
import * as https from 'https';
|
||||
import * as http from 'http';
|
||||
import {
|
||||
InjectOptions,
|
||||
Chain as LightMyRequestChain,
|
||||
@@ -88,6 +90,13 @@ type FastifyHttpsOptions<
|
||||
https: https.ServerOptions;
|
||||
};
|
||||
|
||||
type FastifyHttpOptions<
|
||||
Server extends http.Server,
|
||||
Logger extends FastifyBaseLogger = FastifyBaseLogger,
|
||||
> = FastifyAdapterBaseOptions<Server, Logger> & {
|
||||
http: http.ServerOptions;
|
||||
};
|
||||
|
||||
type VersionedRoute<TRequest, TResponse> = ((
|
||||
req: TRequest,
|
||||
res: TResponse,
|
||||
@@ -217,6 +226,7 @@ export class FastifyAdapter<
|
||||
| FastifyHttp2Options<any>
|
||||
| FastifyHttp2SecureOptions<any>
|
||||
| FastifyHttpsOptions<any>
|
||||
| FastifyHttpOptions<any>
|
||||
| FastifyAdapterBaseOptions<TServer>,
|
||||
) {
|
||||
super();
|
||||
@@ -279,31 +289,35 @@ export class FastifyAdapter<
|
||||
}
|
||||
|
||||
public get(...args: any[]) {
|
||||
return this.injectRouteOptions('get', ...args);
|
||||
return this.injectRouteOptions('GET', ...args);
|
||||
}
|
||||
|
||||
public post(...args: any[]) {
|
||||
return this.injectRouteOptions('post', ...args);
|
||||
return this.injectRouteOptions('POST', ...args);
|
||||
}
|
||||
|
||||
public head(...args: any[]) {
|
||||
return this.injectRouteOptions('head', ...args);
|
||||
return this.injectRouteOptions('HEAD', ...args);
|
||||
}
|
||||
|
||||
public delete(...args: any[]) {
|
||||
return this.injectRouteOptions('delete', ...args);
|
||||
return this.injectRouteOptions('DELETE', ...args);
|
||||
}
|
||||
|
||||
public put(...args: any[]) {
|
||||
return this.injectRouteOptions('put', ...args);
|
||||
return this.injectRouteOptions('PUT', ...args);
|
||||
}
|
||||
|
||||
public patch(...args: any[]) {
|
||||
return this.injectRouteOptions('patch', ...args);
|
||||
return this.injectRouteOptions('PATCH', ...args);
|
||||
}
|
||||
|
||||
public options(...args: any[]) {
|
||||
return this.injectRouteOptions('options', ...args);
|
||||
return this.injectRouteOptions('OPTIONS', ...args);
|
||||
}
|
||||
|
||||
public search(...args: any[]) {
|
||||
return this.injectRouteOptions('SEARCH', ...args);
|
||||
}
|
||||
|
||||
public applyVersionFilter(
|
||||
@@ -669,14 +683,7 @@ export class FastifyAdapter<
|
||||
}
|
||||
|
||||
private injectRouteOptions(
|
||||
routerMethodKey:
|
||||
| 'get'
|
||||
| 'post'
|
||||
| 'put'
|
||||
| 'delete'
|
||||
| 'options'
|
||||
| 'patch'
|
||||
| 'head',
|
||||
routerMethodKey: Uppercase<HTTPMethods>,
|
||||
...args: any[]
|
||||
) {
|
||||
const handlerRef = args[args.length - 1];
|
||||
|
||||
@@ -1,19 +1,20 @@
|
||||
import { INestApplication, HttpServer } from '@nestjs/common';
|
||||
import { HttpServer, INestApplication } from '@nestjs/common';
|
||||
import {
|
||||
FastifyBodyParser,
|
||||
FastifyInstance,
|
||||
FastifyListenOptions,
|
||||
FastifyPluginAsync,
|
||||
FastifyPluginCallback,
|
||||
FastifyPluginOptions,
|
||||
FastifyRegisterOptions,
|
||||
FastifyRequest,
|
||||
FastifyReply,
|
||||
FastifyRequest,
|
||||
RawServerBase,
|
||||
RawServerDefault,
|
||||
} from 'fastify';
|
||||
import {
|
||||
Chain as LightMyRequestChain,
|
||||
InjectOptions,
|
||||
Chain as LightMyRequestChain,
|
||||
Response as LightMyRequestResponse,
|
||||
} from 'light-my-request';
|
||||
import { FastifyStaticOptions, FastifyViewOptions } from './external';
|
||||
@@ -93,19 +94,27 @@ export interface NestFastifyApplication<
|
||||
* Starts the application.
|
||||
* @returns A Promise that, when resolved, is a reference to the underlying HttpServer.
|
||||
*/
|
||||
listen(
|
||||
opts: FastifyListenOptions,
|
||||
callback?: (err: Error | null, address: string) => void,
|
||||
): Promise<TServer>;
|
||||
listen(opts?: FastifyListenOptions): Promise<TServer>;
|
||||
listen(
|
||||
callback?: (err: Error | null, address: string) => void,
|
||||
): Promise<TServer>;
|
||||
listen(
|
||||
port: number | string,
|
||||
callback?: (err: Error, address: string) => void,
|
||||
callback?: (err: Error | null, address: string) => void,
|
||||
): Promise<TServer>;
|
||||
listen(
|
||||
port: number | string,
|
||||
address: string,
|
||||
callback?: (err: Error, address: string) => void,
|
||||
callback?: (err: Error | null, address: string) => void,
|
||||
): Promise<TServer>;
|
||||
listen(
|
||||
port: number | string,
|
||||
address: string,
|
||||
backlog: number,
|
||||
callback?: (err: Error, address: string) => void,
|
||||
callback?: (err: Error | null, address: string) => void,
|
||||
): Promise<TServer>;
|
||||
}
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@nestjs/platform-fastify",
|
||||
"version": "10.3.10",
|
||||
"version": "10.4.8",
|
||||
"description": "Nest - modern, fast, powerful node.js web framework (@platform-fastify)",
|
||||
"author": "Kamil Mysliwiec",
|
||||
"license": "MIT",
|
||||
@@ -20,11 +20,11 @@
|
||||
"dependencies": {
|
||||
"@fastify/cors": "9.0.1",
|
||||
"@fastify/formbody": "7.4.0",
|
||||
"@fastify/middie": "8.3.1",
|
||||
"fastify": "4.28.0",
|
||||
"light-my-request": "5.13.0",
|
||||
"path-to-regexp": "3.2.0",
|
||||
"tslib": "2.6.3"
|
||||
"@fastify/middie": "8.3.3",
|
||||
"fastify": "4.28.1",
|
||||
"light-my-request": "6.1.0",
|
||||
"path-to-regexp": "3.3.0",
|
||||
"tslib": "2.7.0"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"@fastify/static": "^6.0.0 || ^7.0.0",
|
||||
|
||||
@@ -91,10 +91,12 @@ Nest is an MIT-licensed open source project. It can grow thanks to the sponsors
|
||||
|
||||
<table style="text-align:center;">
|
||||
<tr>
|
||||
<td><a href="https://n.inc" target="_blank"><img src="https://nestjs.com/img/logos/n-inc-logo.svg" width="90" valign="middle" /></a></td>
|
||||
<td><a href="https://twistag.com/" target="_blank"><img src="https://nestjs.com/img/logos/twistag-logo.png" width="120" valign="middle" /></a></td>
|
||||
<td><a href="https://www.dinii.jp/" target="_blank"><img src="https://nestjs.com/img/logos/dinii-logo.png" width="75" valign="middle" /></a></td>
|
||||
<td><a href="https://www.mercedes-benz.com/" target="_blank"><img src="https://nestjs.com/img/logos/mercedes-logo.png" width="110" valign="middle" /></a></td>
|
||||
<td><a href="https://www.mercedes-benz.com/" target="_blank"><img src="https://nestjs.com/img/logos/mercedes-logo.png" width="100" valign="middle" /></a></td>
|
||||
<td><a href="https://www.dinii.jp/" target="_blank"><img src="https://nestjs.com/img/logos/dinii-logo.png" width="65" valign="middle" /></a></td>
|
||||
<td><a href="https://bloodycase.com/?promocode=NEST" target="_blank"><img src="https://nestjs.com/img/logos/bloodycase-logo.png" width="65" valign="middle" /></a></td>
|
||||
<td><a href="https://handsontable.com/docs/react-data-grid/?utm_source=NestJS_GH&utm_medium=sponsorship&utm_campaign=library_sponsorship_2024" target="_blank"><img src="https://nestjs.com/img/logos/handsontable-dark-logo.svg#2" width="150" valign="middle" /></a></td>
|
||||
<td align="center" valign="middle"><a href="https://www.itflashcards.com/" target="_blank"><img src="https://nestjs.com/img/logos/it_flashcards-logo.png" width="170" valign="middle" /></a></td>
|
||||
<td align="center" valign="middle"><a href="https://arcjet.com/?ref=nestjs" target="_blank"><img src="https://nestjs.com/img/logos/arcjet-logo.svg" width="170" valign="middle" /></a></td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
@@ -126,10 +128,11 @@ Nest is an MIT-licensed open source project. It can grow thanks to the sponsors
|
||||
<td align="center" valign="middle"><a href="https://www.hingehealth.com/" target="_blank"><img src="https://nestjs.com/img/logos/hinge-health-logo.svg" width="100" valign="middle" /></a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center" valign="middle"><a href="https://julienferand.dev/" target="_blank"><img src="https://nestjs.com/img/logos/julienferand-logo.jpeg" width="65" valign="middle" /></a></td>
|
||||
<td align="center" valign="middle"><a href="https://julienferand.dev/" target="_blank"><img src="https://nestjs.com/img/logos/julienferand-logo.jpeg" width="55" valign="middle" /></a></td>
|
||||
<td align="center" valign="middle"><a href="https://www.tripoffice.com/" target="_blank"><img src="https://nestjs.com/img/logos/tripoffice-logo.png" width="140" valign="middle" /></a></td>
|
||||
<td align="center" valign="middle"><a href="https://solcellsforetag.se/" target="_blank"><img src="https://nestjs.com/img/logos/solcellsforetag-logo.svg" width="140" valign="middle" /></a></td>
|
||||
<td align="center" valign="middle"><a href="https://www.itflashcards.com/" target="_blank"><img src="https://nestjs.com/img/logos/it_flashcards-logo.png" width="150" valign="middle" /></a></td>
|
||||
<td align="center" valign="middle"><a href="https://www.route4me.com/" target="_blank"><img src="https://nestjs.com/img/logos/route4me-logo.svg" width="100" valign="middle" /></a></td>
|
||||
<td align="center" valign="middle"><a href="https://www.slotsup.com/" target="_blank"><img src="https://nestjs.com/img/logos/slotsup-logo.png" width="60" valign="middle" /></a></td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@nestjs/platform-socket.io",
|
||||
"version": "10.3.10",
|
||||
"version": "10.4.8",
|
||||
"description": "Nest - modern, fast, powerful node.js web framework (@platform-socket.io)",
|
||||
"author": "Kamil Mysliwiec",
|
||||
"license": "MIT",
|
||||
@@ -18,8 +18,8 @@
|
||||
"access": "public"
|
||||
},
|
||||
"dependencies": {
|
||||
"socket.io": "4.7.5",
|
||||
"tslib": "2.6.3"
|
||||
"socket.io": "4.8.0",
|
||||
"tslib": "2.7.0"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"@nestjs/common": "^10.0.0",
|
||||
|
||||
@@ -91,10 +91,12 @@ Nest is an MIT-licensed open source project. It can grow thanks to the sponsors
|
||||
|
||||
<table style="text-align:center;">
|
||||
<tr>
|
||||
<td><a href="https://n.inc" target="_blank"><img src="https://nestjs.com/img/logos/n-inc-logo.svg" width="90" valign="middle" /></a></td>
|
||||
<td><a href="https://twistag.com/" target="_blank"><img src="https://nestjs.com/img/logos/twistag-logo.png" width="120" valign="middle" /></a></td>
|
||||
<td><a href="https://www.dinii.jp/" target="_blank"><img src="https://nestjs.com/img/logos/dinii-logo.png" width="75" valign="middle" /></a></td>
|
||||
<td><a href="https://www.mercedes-benz.com/" target="_blank"><img src="https://nestjs.com/img/logos/mercedes-logo.png" width="110" valign="middle" /></a></td>
|
||||
<td><a href="https://www.mercedes-benz.com/" target="_blank"><img src="https://nestjs.com/img/logos/mercedes-logo.png" width="100" valign="middle" /></a></td>
|
||||
<td><a href="https://www.dinii.jp/" target="_blank"><img src="https://nestjs.com/img/logos/dinii-logo.png" width="65" valign="middle" /></a></td>
|
||||
<td><a href="https://bloodycase.com/?promocode=NEST" target="_blank"><img src="https://nestjs.com/img/logos/bloodycase-logo.png" width="65" valign="middle" /></a></td>
|
||||
<td><a href="https://handsontable.com/docs/react-data-grid/?utm_source=NestJS_GH&utm_medium=sponsorship&utm_campaign=library_sponsorship_2024" target="_blank"><img src="https://nestjs.com/img/logos/handsontable-dark-logo.svg#2" width="150" valign="middle" /></a></td>
|
||||
<td align="center" valign="middle"><a href="https://www.itflashcards.com/" target="_blank"><img src="https://nestjs.com/img/logos/it_flashcards-logo.png" width="170" valign="middle" /></a></td>
|
||||
<td align="center" valign="middle"><a href="https://arcjet.com/?ref=nestjs" target="_blank"><img src="https://nestjs.com/img/logos/arcjet-logo.svg" width="170" valign="middle" /></a></td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
@@ -126,10 +128,11 @@ Nest is an MIT-licensed open source project. It can grow thanks to the sponsors
|
||||
<td align="center" valign="middle"><a href="https://www.hingehealth.com/" target="_blank"><img src="https://nestjs.com/img/logos/hinge-health-logo.svg" width="100" valign="middle" /></a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center" valign="middle"><a href="https://julienferand.dev/" target="_blank"><img src="https://nestjs.com/img/logos/julienferand-logo.jpeg" width="65" valign="middle" /></a></td>
|
||||
<td align="center" valign="middle"><a href="https://julienferand.dev/" target="_blank"><img src="https://nestjs.com/img/logos/julienferand-logo.jpeg" width="55" valign="middle" /></a></td>
|
||||
<td align="center" valign="middle"><a href="https://www.tripoffice.com/" target="_blank"><img src="https://nestjs.com/img/logos/tripoffice-logo.png" width="140" valign="middle" /></a></td>
|
||||
<td align="center" valign="middle"><a href="https://solcellsforetag.se/" target="_blank"><img src="https://nestjs.com/img/logos/solcellsforetag-logo.svg" width="140" valign="middle" /></a></td>
|
||||
<td align="center" valign="middle"><a href="https://www.itflashcards.com/" target="_blank"><img src="https://nestjs.com/img/logos/it_flashcards-logo.png" width="150" valign="middle" /></a></td>
|
||||
<td align="center" valign="middle"><a href="https://www.route4me.com/" target="_blank"><img src="https://nestjs.com/img/logos/route4me-logo.svg" width="100" valign="middle" /></a></td>
|
||||
<td align="center" valign="middle"><a href="https://www.slotsup.com/" target="_blank"><img src="https://nestjs.com/img/logos/slotsup-logo.png" width="60" valign="middle" /></a></td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
|
||||
@@ -111,10 +111,13 @@ export class WsAdapter extends AbstractWsAdapter {
|
||||
handlers: MessageMappingProperties[],
|
||||
transform: (data: any) => Observable<any>,
|
||||
) {
|
||||
const handlersMap = new Map<string, MessageMappingProperties>();
|
||||
handlers.forEach(handler => handlersMap.set(handler.message, handler));
|
||||
|
||||
const close$ = fromEvent(client, CLOSE_EVENT).pipe(share(), first());
|
||||
const source$ = fromEvent(client, 'message').pipe(
|
||||
mergeMap(data =>
|
||||
this.bindMessageHandler(data, handlers, transform).pipe(
|
||||
this.bindMessageHandler(data, handlersMap, transform).pipe(
|
||||
filter(result => !isNil(result)),
|
||||
),
|
||||
),
|
||||
@@ -131,14 +134,12 @@ export class WsAdapter extends AbstractWsAdapter {
|
||||
|
||||
public bindMessageHandler(
|
||||
buffer: any,
|
||||
handlers: MessageMappingProperties[],
|
||||
handlersMap: Map<string, MessageMappingProperties>,
|
||||
transform: (data: any) => Observable<any>,
|
||||
): Observable<any> {
|
||||
try {
|
||||
const message = JSON.parse(buffer.data);
|
||||
const messageHandler = handlers.find(
|
||||
handler => handler.message === message.event,
|
||||
);
|
||||
const messageHandler = handlersMap.get(message.event);
|
||||
const { callback } = messageHandler;
|
||||
return transform(callback(message.data, message.event));
|
||||
} catch {
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@nestjs/platform-ws",
|
||||
"version": "10.3.10",
|
||||
"version": "10.4.8",
|
||||
"description": "Nest - modern, fast, powerful node.js web framework (@platform-ws)",
|
||||
"author": "Kamil Mysliwiec",
|
||||
"license": "MIT",
|
||||
@@ -18,8 +18,8 @@
|
||||
"access": "public"
|
||||
},
|
||||
"dependencies": {
|
||||
"tslib": "2.6.3",
|
||||
"ws": "8.17.1"
|
||||
"tslib": "2.7.0",
|
||||
"ws": "8.18.0"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"@nestjs/common": "^10.0.0",
|
||||
|
||||
@@ -91,10 +91,12 @@ Nest is an MIT-licensed open source project. It can grow thanks to the sponsors
|
||||
|
||||
<table style="text-align:center;">
|
||||
<tr>
|
||||
<td><a href="https://n.inc" target="_blank"><img src="https://nestjs.com/img/logos/n-inc-logo.svg" width="90" valign="middle" /></a></td>
|
||||
<td><a href="https://twistag.com/" target="_blank"><img src="https://nestjs.com/img/logos/twistag-logo.png" width="120" valign="middle" /></a></td>
|
||||
<td><a href="https://www.dinii.jp/" target="_blank"><img src="https://nestjs.com/img/logos/dinii-logo.png" width="75" valign="middle" /></a></td>
|
||||
<td><a href="https://www.mercedes-benz.com/" target="_blank"><img src="https://nestjs.com/img/logos/mercedes-logo.png" width="110" valign="middle" /></a></td>
|
||||
<td><a href="https://www.mercedes-benz.com/" target="_blank"><img src="https://nestjs.com/img/logos/mercedes-logo.png" width="100" valign="middle" /></a></td>
|
||||
<td><a href="https://www.dinii.jp/" target="_blank"><img src="https://nestjs.com/img/logos/dinii-logo.png" width="65" valign="middle" /></a></td>
|
||||
<td><a href="https://bloodycase.com/?promocode=NEST" target="_blank"><img src="https://nestjs.com/img/logos/bloodycase-logo.png" width="65" valign="middle" /></a></td>
|
||||
<td><a href="https://handsontable.com/docs/react-data-grid/?utm_source=NestJS_GH&utm_medium=sponsorship&utm_campaign=library_sponsorship_2024" target="_blank"><img src="https://nestjs.com/img/logos/handsontable-dark-logo.svg#2" width="150" valign="middle" /></a></td>
|
||||
<td align="center" valign="middle"><a href="https://www.itflashcards.com/" target="_blank"><img src="https://nestjs.com/img/logos/it_flashcards-logo.png" width="170" valign="middle" /></a></td>
|
||||
<td align="center" valign="middle"><a href="https://arcjet.com/?ref=nestjs" target="_blank"><img src="https://nestjs.com/img/logos/arcjet-logo.svg" width="170" valign="middle" /></a></td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
@@ -126,10 +128,11 @@ Nest is an MIT-licensed open source project. It can grow thanks to the sponsors
|
||||
<td align="center" valign="middle"><a href="https://www.hingehealth.com/" target="_blank"><img src="https://nestjs.com/img/logos/hinge-health-logo.svg" width="100" valign="middle" /></a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center" valign="middle"><a href="https://julienferand.dev/" target="_blank"><img src="https://nestjs.com/img/logos/julienferand-logo.jpeg" width="65" valign="middle" /></a></td>
|
||||
<td align="center" valign="middle"><a href="https://julienferand.dev/" target="_blank"><img src="https://nestjs.com/img/logos/julienferand-logo.jpeg" width="55" valign="middle" /></a></td>
|
||||
<td align="center" valign="middle"><a href="https://www.tripoffice.com/" target="_blank"><img src="https://nestjs.com/img/logos/tripoffice-logo.png" width="140" valign="middle" /></a></td>
|
||||
<td align="center" valign="middle"><a href="https://solcellsforetag.se/" target="_blank"><img src="https://nestjs.com/img/logos/solcellsforetag-logo.svg" width="140" valign="middle" /></a></td>
|
||||
<td align="center" valign="middle"><a href="https://www.itflashcards.com/" target="_blank"><img src="https://nestjs.com/img/logos/it_flashcards-logo.png" width="150" valign="middle" /></a></td>
|
||||
<td align="center" valign="middle"><a href="https://www.route4me.com/" target="_blank"><img src="https://nestjs.com/img/logos/route4me-logo.svg" width="100" valign="middle" /></a></td>
|
||||
<td align="center" valign="middle"><a href="https://www.slotsup.com/" target="_blank"><img src="https://nestjs.com/img/logos/slotsup-logo.png" width="60" valign="middle" /></a></td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@nestjs/testing",
|
||||
"version": "10.3.10",
|
||||
"version": "10.4.8",
|
||||
"description": "Nest - modern, fast, powerful node.js web framework (@testing)",
|
||||
"author": "Kamil Mysliwiec",
|
||||
"license": "MIT",
|
||||
@@ -18,7 +18,7 @@
|
||||
"access": "public"
|
||||
},
|
||||
"dependencies": {
|
||||
"tslib": "2.6.3"
|
||||
"tslib": "2.7.0"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"@nestjs/common": "^10.0.0",
|
||||
|
||||
@@ -91,10 +91,12 @@ Nest is an MIT-licensed open source project. It can grow thanks to the sponsors
|
||||
|
||||
<table style="text-align:center;">
|
||||
<tr>
|
||||
<td><a href="https://n.inc" target="_blank"><img src="https://nestjs.com/img/logos/n-inc-logo.svg" width="90" valign="middle" /></a></td>
|
||||
<td><a href="https://twistag.com/" target="_blank"><img src="https://nestjs.com/img/logos/twistag-logo.png" width="120" valign="middle" /></a></td>
|
||||
<td><a href="https://www.dinii.jp/" target="_blank"><img src="https://nestjs.com/img/logos/dinii-logo.png" width="75" valign="middle" /></a></td>
|
||||
<td><a href="https://www.mercedes-benz.com/" target="_blank"><img src="https://nestjs.com/img/logos/mercedes-logo.png" width="110" valign="middle" /></a></td>
|
||||
<td><a href="https://www.mercedes-benz.com/" target="_blank"><img src="https://nestjs.com/img/logos/mercedes-logo.png" width="100" valign="middle" /></a></td>
|
||||
<td><a href="https://www.dinii.jp/" target="_blank"><img src="https://nestjs.com/img/logos/dinii-logo.png" width="65" valign="middle" /></a></td>
|
||||
<td><a href="https://bloodycase.com/?promocode=NEST" target="_blank"><img src="https://nestjs.com/img/logos/bloodycase-logo.png" width="65" valign="middle" /></a></td>
|
||||
<td><a href="https://handsontable.com/docs/react-data-grid/?utm_source=NestJS_GH&utm_medium=sponsorship&utm_campaign=library_sponsorship_2024" target="_blank"><img src="https://nestjs.com/img/logos/handsontable-dark-logo.svg#2" width="150" valign="middle" /></a></td>
|
||||
<td align="center" valign="middle"><a href="https://www.itflashcards.com/" target="_blank"><img src="https://nestjs.com/img/logos/it_flashcards-logo.png" width="170" valign="middle" /></a></td>
|
||||
<td align="center" valign="middle"><a href="https://arcjet.com/?ref=nestjs" target="_blank"><img src="https://nestjs.com/img/logos/arcjet-logo.svg" width="170" valign="middle" /></a></td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
@@ -126,10 +128,11 @@ Nest is an MIT-licensed open source project. It can grow thanks to the sponsors
|
||||
<td align="center" valign="middle"><a href="https://www.hingehealth.com/" target="_blank"><img src="https://nestjs.com/img/logos/hinge-health-logo.svg" width="100" valign="middle" /></a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center" valign="middle"><a href="https://julienferand.dev/" target="_blank"><img src="https://nestjs.com/img/logos/julienferand-logo.jpeg" width="65" valign="middle" /></a></td>
|
||||
<td align="center" valign="middle"><a href="https://julienferand.dev/" target="_blank"><img src="https://nestjs.com/img/logos/julienferand-logo.jpeg" width="55" valign="middle" /></a></td>
|
||||
<td align="center" valign="middle"><a href="https://www.tripoffice.com/" target="_blank"><img src="https://nestjs.com/img/logos/tripoffice-logo.png" width="140" valign="middle" /></a></td>
|
||||
<td align="center" valign="middle"><a href="https://solcellsforetag.se/" target="_blank"><img src="https://nestjs.com/img/logos/solcellsforetag-logo.svg" width="140" valign="middle" /></a></td>
|
||||
<td align="center" valign="middle"><a href="https://www.itflashcards.com/" target="_blank"><img src="https://nestjs.com/img/logos/it_flashcards-logo.png" width="150" valign="middle" /></a></td>
|
||||
<td align="center" valign="middle"><a href="https://www.route4me.com/" target="_blank"><img src="https://nestjs.com/img/logos/route4me-logo.svg" width="100" valign="middle" /></a></td>
|
||||
<td align="center" valign="middle"><a href="https://www.slotsup.com/" target="_blank"><img src="https://nestjs.com/img/logos/slotsup-logo.png" width="60" valign="middle" /></a></td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@nestjs/websockets",
|
||||
"version": "10.3.10",
|
||||
"version": "10.4.8",
|
||||
"description": "Nest - modern, fast, powerful node.js web framework (@websockets)",
|
||||
"author": "Kamil Mysliwiec",
|
||||
"license": "MIT",
|
||||
@@ -15,11 +15,11 @@
|
||||
"dependencies": {
|
||||
"iterare": "1.2.1",
|
||||
"object-hash": "3.0.0",
|
||||
"tslib": "2.6.3"
|
||||
"tslib": "2.7.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@nestjs/common": "10.3.10",
|
||||
"@nestjs/core": "10.3.10"
|
||||
"@nestjs/common": "10.4.8",
|
||||
"@nestjs/core": "10.4.8"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"@nestjs/common": "^10.0.0",
|
||||
|
||||
141
sample/01-cats-app/package-lock.json
generated
141
sample/01-cats-app/package-lock.json
generated
@@ -24,8 +24,8 @@
|
||||
"@nestjs/testing": "10.3.2",
|
||||
"@types/express": "4.17.21",
|
||||
"@types/jest": "29.5.12",
|
||||
"@types/node": "20.8.7",
|
||||
"@types/supertest": "2.0.16",
|
||||
"@types/node": "20.17.6",
|
||||
"@types/supertest": "6.0.2",
|
||||
"@typescript-eslint/eslint-plugin": "5.62.0",
|
||||
"@typescript-eslint/parser": "5.62.0",
|
||||
"eslint": "8.42.0",
|
||||
@@ -33,7 +33,7 @@
|
||||
"eslint-plugin-import": "2.29.1",
|
||||
"jest": "29.7.0",
|
||||
"prettier": "3.2.5",
|
||||
"supertest": "6.3.3",
|
||||
"supertest": "6.3.4",
|
||||
"ts-jest": "29.1.2",
|
||||
"ts-loader": "9.5.1",
|
||||
"ts-node": "10.9.2",
|
||||
@@ -2229,9 +2229,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@types/cookiejar": {
|
||||
"version": "2.1.2",
|
||||
"resolved": "https://registry.npmjs.org/@types/cookiejar/-/cookiejar-2.1.2.tgz",
|
||||
"integrity": "sha512-t73xJJrvdTjXrn4jLS9VSGRbz0nUY3cl2DMGDU48lKl+HR9dbbjW2A9r3g40VA++mQpy6uuHg33gy7du2BKpog==",
|
||||
"version": "2.1.5",
|
||||
"resolved": "https://registry.npmjs.org/@types/cookiejar/-/cookiejar-2.1.5.tgz",
|
||||
"integrity": "sha512-he+DHOWReW0nghN24E1WUqM0efK4kI9oTqDm6XmK8ZPe2djZ90BSNdGnIyCLzCPw7/pogPlGbzI2wHGGmi4O/Q==",
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/@types/eslint": {
|
||||
@@ -2339,6 +2339,12 @@
|
||||
"integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==",
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/@types/methods": {
|
||||
"version": "1.1.4",
|
||||
"resolved": "https://registry.npmjs.org/@types/methods/-/methods-1.1.4.tgz",
|
||||
"integrity": "sha512-ymXWVrDiCxTBE3+RIrrP533E70eA+9qu7zdWoHuOmGujkYtzf4HQF96b8nwHLqhuf4ykX61IGRIB38CC6/sImQ==",
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/@types/mime": {
|
||||
"version": "1.3.2",
|
||||
"resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.2.tgz",
|
||||
@@ -2346,12 +2352,12 @@
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/@types/node": {
|
||||
"version": "20.8.7",
|
||||
"resolved": "https://registry.npmjs.org/@types/node/-/node-20.8.7.tgz",
|
||||
"integrity": "sha512-21TKHHh3eUHIi2MloeptJWALuCu5H7HQTdTrWIFReA8ad+aggoX+lRes3ex7/FtpC+sVUpFMQ+QTfYr74mruiQ==",
|
||||
"version": "20.17.6",
|
||||
"resolved": "https://registry.npmjs.org/@types/node/-/node-20.17.6.tgz",
|
||||
"integrity": "sha512-VEI7OdvK2wP7XHnsuXbAJnEpEkF6NjSN45QJlL4VGqZSXsnicpesdTWsg9RISeSdYd3yeRj/y3k5KGjUXYnFwQ==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"undici-types": "~5.25.1"
|
||||
"undici-types": "~6.19.2"
|
||||
}
|
||||
},
|
||||
"node_modules/@types/qs": {
|
||||
@@ -2399,22 +2405,25 @@
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/@types/superagent": {
|
||||
"version": "4.1.10",
|
||||
"resolved": "https://registry.npmjs.org/@types/superagent/-/superagent-4.1.10.tgz",
|
||||
"integrity": "sha512-xAgkb2CMWUMCyVc/3+7iQfOEBE75NvuZeezvmixbUw3nmENf2tCnQkW5yQLTYqvXUQ+R6EXxdqKKbal2zM5V/g==",
|
||||
"version": "8.1.9",
|
||||
"resolved": "https://registry.npmjs.org/@types/superagent/-/superagent-8.1.9.tgz",
|
||||
"integrity": "sha512-pTVjI73witn+9ILmoJdajHGW2jkSaOzhiFYF1Rd3EQ94kymLqB9PjD9ISg7WaALC7+dCHT0FGe9T2LktLq/3GQ==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"@types/cookiejar": "*",
|
||||
"@types/node": "*"
|
||||
"@types/cookiejar": "^2.1.5",
|
||||
"@types/methods": "^1.1.4",
|
||||
"@types/node": "*",
|
||||
"form-data": "^4.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@types/supertest": {
|
||||
"version": "2.0.16",
|
||||
"resolved": "https://registry.npmjs.org/@types/supertest/-/supertest-2.0.16.tgz",
|
||||
"integrity": "sha512-6c2ogktZ06tr2ENoZivgm7YnprnhYE4ZoXGMY+oA7IuAf17M8FWvujXZGmxLv8y0PTyts4x5A+erSwVUFA8XSg==",
|
||||
"version": "6.0.2",
|
||||
"resolved": "https://registry.npmjs.org/@types/supertest/-/supertest-6.0.2.tgz",
|
||||
"integrity": "sha512-137ypx2lk/wTQbW6An6safu9hXmajAifU/s7szAHLN/FeIm5w7yR0Wkl9fdJMRSHwOn4HLAI0DaB2TOORuhPDg==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"@types/superagent": "*"
|
||||
"@types/methods": "^1.1.4",
|
||||
"@types/superagent": "^8.1.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@types/validator": {
|
||||
@@ -3916,9 +3925,9 @@
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/cross-spawn": {
|
||||
"version": "7.0.3",
|
||||
"resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
|
||||
"integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
|
||||
"version": "7.0.6",
|
||||
"resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz",
|
||||
"integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==",
|
||||
"dependencies": {
|
||||
"path-key": "^3.1.0",
|
||||
"shebang-command": "^2.0.0",
|
||||
@@ -8565,9 +8574,10 @@
|
||||
}
|
||||
},
|
||||
"node_modules/superagent": {
|
||||
"version": "8.0.9",
|
||||
"resolved": "https://registry.npmjs.org/superagent/-/superagent-8.0.9.tgz",
|
||||
"integrity": "sha512-4C7Bh5pyHTvU33KpZgwrNKh/VQnvgtCSqPRfJAUdmrtSYePVzVg4E4OzsrbkhJj9O7SO6Bnv75K/F8XVZT8YHA==",
|
||||
"version": "8.1.2",
|
||||
"resolved": "https://registry.npmjs.org/superagent/-/superagent-8.1.2.tgz",
|
||||
"integrity": "sha512-6WTxW1EB6yCxV5VFOIPQruWGHqc3yI7hEmZK6h+pyk69Lk/Ut7rLUY6W/ONF2MjBuGjvmMiIpsrVJ2vjrHlslA==",
|
||||
"deprecated": "Please upgrade to v9.0.0+ as we have fixed a public vulnerability with formidable dependency. Note that v9.0.0+ requires Node.js v14.18.0+. See https://github.com/ladjs/superagent/pull/1800 for insight. This project is supported and maintained by the team at Forward Email @ https://forwardemail.net",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"component-emitter": "^1.3.0",
|
||||
@@ -8621,13 +8631,13 @@
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/supertest": {
|
||||
"version": "6.3.3",
|
||||
"resolved": "https://registry.npmjs.org/supertest/-/supertest-6.3.3.tgz",
|
||||
"integrity": "sha512-EMCG6G8gDu5qEqRQ3JjjPs6+FYT1a7Hv5ApHvtSghmOFJYtsU5S+pSb6Y2EUeCEY3CmEL3mmQ8YWlPOzQomabA==",
|
||||
"version": "6.3.4",
|
||||
"resolved": "https://registry.npmjs.org/supertest/-/supertest-6.3.4.tgz",
|
||||
"integrity": "sha512-erY3HFDG0dPnhw4U+udPfrzXa4xhSG+n4rxfRuZWCUvjFWwKl+OxWf/7zk50s84/fAAs7vf5QAb9uRa0cCykxw==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"methods": "^1.1.2",
|
||||
"superagent": "^8.0.5"
|
||||
"superagent": "^8.1.2"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=6.4.0"
|
||||
@@ -9172,9 +9182,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/undici-types": {
|
||||
"version": "5.25.3",
|
||||
"resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.25.3.tgz",
|
||||
"integrity": "sha512-Ga1jfYwRn7+cP9v8auvEXN1rX3sWqlayd4HP7OKk4mZWylEmu3KzXDUGrQUN6Ol7qo1gPvB2e5gX6udnyEPgdA==",
|
||||
"version": "6.19.8",
|
||||
"resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz",
|
||||
"integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==",
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/universalify": {
|
||||
@@ -11203,9 +11213,9 @@
|
||||
}
|
||||
},
|
||||
"@types/cookiejar": {
|
||||
"version": "2.1.2",
|
||||
"resolved": "https://registry.npmjs.org/@types/cookiejar/-/cookiejar-2.1.2.tgz",
|
||||
"integrity": "sha512-t73xJJrvdTjXrn4jLS9VSGRbz0nUY3cl2DMGDU48lKl+HR9dbbjW2A9r3g40VA++mQpy6uuHg33gy7du2BKpog==",
|
||||
"version": "2.1.5",
|
||||
"resolved": "https://registry.npmjs.org/@types/cookiejar/-/cookiejar-2.1.5.tgz",
|
||||
"integrity": "sha512-he+DHOWReW0nghN24E1WUqM0efK4kI9oTqDm6XmK8ZPe2djZ90BSNdGnIyCLzCPw7/pogPlGbzI2wHGGmi4O/Q==",
|
||||
"dev": true
|
||||
},
|
||||
"@types/eslint": {
|
||||
@@ -11313,6 +11323,12 @@
|
||||
"integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==",
|
||||
"dev": true
|
||||
},
|
||||
"@types/methods": {
|
||||
"version": "1.1.4",
|
||||
"resolved": "https://registry.npmjs.org/@types/methods/-/methods-1.1.4.tgz",
|
||||
"integrity": "sha512-ymXWVrDiCxTBE3+RIrrP533E70eA+9qu7zdWoHuOmGujkYtzf4HQF96b8nwHLqhuf4ykX61IGRIB38CC6/sImQ==",
|
||||
"dev": true
|
||||
},
|
||||
"@types/mime": {
|
||||
"version": "1.3.2",
|
||||
"resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.2.tgz",
|
||||
@@ -11320,12 +11336,12 @@
|
||||
"dev": true
|
||||
},
|
||||
"@types/node": {
|
||||
"version": "20.8.7",
|
||||
"resolved": "https://registry.npmjs.org/@types/node/-/node-20.8.7.tgz",
|
||||
"integrity": "sha512-21TKHHh3eUHIi2MloeptJWALuCu5H7HQTdTrWIFReA8ad+aggoX+lRes3ex7/FtpC+sVUpFMQ+QTfYr74mruiQ==",
|
||||
"version": "20.17.6",
|
||||
"resolved": "https://registry.npmjs.org/@types/node/-/node-20.17.6.tgz",
|
||||
"integrity": "sha512-VEI7OdvK2wP7XHnsuXbAJnEpEkF6NjSN45QJlL4VGqZSXsnicpesdTWsg9RISeSdYd3yeRj/y3k5KGjUXYnFwQ==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"undici-types": "~5.25.1"
|
||||
"undici-types": "~6.19.2"
|
||||
}
|
||||
},
|
||||
"@types/qs": {
|
||||
@@ -11373,22 +11389,25 @@
|
||||
"dev": true
|
||||
},
|
||||
"@types/superagent": {
|
||||
"version": "4.1.10",
|
||||
"resolved": "https://registry.npmjs.org/@types/superagent/-/superagent-4.1.10.tgz",
|
||||
"integrity": "sha512-xAgkb2CMWUMCyVc/3+7iQfOEBE75NvuZeezvmixbUw3nmENf2tCnQkW5yQLTYqvXUQ+R6EXxdqKKbal2zM5V/g==",
|
||||
"version": "8.1.9",
|
||||
"resolved": "https://registry.npmjs.org/@types/superagent/-/superagent-8.1.9.tgz",
|
||||
"integrity": "sha512-pTVjI73witn+9ILmoJdajHGW2jkSaOzhiFYF1Rd3EQ94kymLqB9PjD9ISg7WaALC7+dCHT0FGe9T2LktLq/3GQ==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"@types/cookiejar": "*",
|
||||
"@types/node": "*"
|
||||
"@types/cookiejar": "^2.1.5",
|
||||
"@types/methods": "^1.1.4",
|
||||
"@types/node": "*",
|
||||
"form-data": "^4.0.0"
|
||||
}
|
||||
},
|
||||
"@types/supertest": {
|
||||
"version": "2.0.16",
|
||||
"resolved": "https://registry.npmjs.org/@types/supertest/-/supertest-2.0.16.tgz",
|
||||
"integrity": "sha512-6c2ogktZ06tr2ENoZivgm7YnprnhYE4ZoXGMY+oA7IuAf17M8FWvujXZGmxLv8y0PTyts4x5A+erSwVUFA8XSg==",
|
||||
"version": "6.0.2",
|
||||
"resolved": "https://registry.npmjs.org/@types/supertest/-/supertest-6.0.2.tgz",
|
||||
"integrity": "sha512-137ypx2lk/wTQbW6An6safu9hXmajAifU/s7szAHLN/FeIm5w7yR0Wkl9fdJMRSHwOn4HLAI0DaB2TOORuhPDg==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"@types/superagent": "*"
|
||||
"@types/methods": "^1.1.4",
|
||||
"@types/superagent": "^8.1.0"
|
||||
}
|
||||
},
|
||||
"@types/validator": {
|
||||
@@ -12485,9 +12504,9 @@
|
||||
"dev": true
|
||||
},
|
||||
"cross-spawn": {
|
||||
"version": "7.0.3",
|
||||
"resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
|
||||
"integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
|
||||
"version": "7.0.6",
|
||||
"resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz",
|
||||
"integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==",
|
||||
"requires": {
|
||||
"path-key": "^3.1.0",
|
||||
"shebang-command": "^2.0.0",
|
||||
@@ -15938,9 +15957,9 @@
|
||||
"dev": true
|
||||
},
|
||||
"superagent": {
|
||||
"version": "8.0.9",
|
||||
"resolved": "https://registry.npmjs.org/superagent/-/superagent-8.0.9.tgz",
|
||||
"integrity": "sha512-4C7Bh5pyHTvU33KpZgwrNKh/VQnvgtCSqPRfJAUdmrtSYePVzVg4E4OzsrbkhJj9O7SO6Bnv75K/F8XVZT8YHA==",
|
||||
"version": "8.1.2",
|
||||
"resolved": "https://registry.npmjs.org/superagent/-/superagent-8.1.2.tgz",
|
||||
"integrity": "sha512-6WTxW1EB6yCxV5VFOIPQruWGHqc3yI7hEmZK6h+pyk69Lk/Ut7rLUY6W/ONF2MjBuGjvmMiIpsrVJ2vjrHlslA==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"component-emitter": "^1.3.0",
|
||||
@@ -15979,13 +15998,13 @@
|
||||
}
|
||||
},
|
||||
"supertest": {
|
||||
"version": "6.3.3",
|
||||
"resolved": "https://registry.npmjs.org/supertest/-/supertest-6.3.3.tgz",
|
||||
"integrity": "sha512-EMCG6G8gDu5qEqRQ3JjjPs6+FYT1a7Hv5ApHvtSghmOFJYtsU5S+pSb6Y2EUeCEY3CmEL3mmQ8YWlPOzQomabA==",
|
||||
"version": "6.3.4",
|
||||
"resolved": "https://registry.npmjs.org/supertest/-/supertest-6.3.4.tgz",
|
||||
"integrity": "sha512-erY3HFDG0dPnhw4U+udPfrzXa4xhSG+n4rxfRuZWCUvjFWwKl+OxWf/7zk50s84/fAAs7vf5QAb9uRa0cCykxw==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"methods": "^1.1.2",
|
||||
"superagent": "^8.0.5"
|
||||
"superagent": "^8.1.2"
|
||||
}
|
||||
},
|
||||
"supports-color": {
|
||||
@@ -16345,9 +16364,9 @@
|
||||
}
|
||||
},
|
||||
"undici-types": {
|
||||
"version": "5.25.3",
|
||||
"resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.25.3.tgz",
|
||||
"integrity": "sha512-Ga1jfYwRn7+cP9v8auvEXN1rX3sWqlayd4HP7OKk4mZWylEmu3KzXDUGrQUN6Ol7qo1gPvB2e5gX6udnyEPgdA==",
|
||||
"version": "6.19.8",
|
||||
"resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz",
|
||||
"integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==",
|
||||
"dev": true
|
||||
},
|
||||
"universalify": {
|
||||
|
||||
@@ -34,11 +34,11 @@
|
||||
"@nestjs/testing": "10.3.2",
|
||||
"@types/express": "4.17.21",
|
||||
"@types/jest": "29.5.12",
|
||||
"@types/node": "20.8.7",
|
||||
"@types/supertest": "2.0.16",
|
||||
"@types/node": "20.17.6",
|
||||
"@types/supertest": "6.0.2",
|
||||
"jest": "29.7.0",
|
||||
"prettier": "3.2.5",
|
||||
"supertest": "6.3.3",
|
||||
"supertest": "6.3.4",
|
||||
"ts-jest": "29.1.2",
|
||||
"ts-loader": "9.5.1",
|
||||
"ts-node": "10.9.2",
|
||||
|
||||
@@ -19,16 +19,36 @@ describe('CatsController', () => {
|
||||
|
||||
describe('findAll', () => {
|
||||
it('should return an array of cats', async () => {
|
||||
const result: Cat[] = [
|
||||
const cats: Cat[] = [
|
||||
{
|
||||
age: 2,
|
||||
breed: 'Bombay',
|
||||
name: 'Pixel',
|
||||
},
|
||||
];
|
||||
jest.spyOn(catsService, 'findAll').mockImplementation(() => result);
|
||||
// @ts-ignore
|
||||
catsService.cats = cats;
|
||||
|
||||
expect(await catsController.findAll()).toBe(result);
|
||||
expect(await catsController.findAll()).toBe(cats);
|
||||
});
|
||||
});
|
||||
|
||||
describe('create', () => {
|
||||
it('should add a new cat', async () => {
|
||||
const cat: Cat = {
|
||||
age: 2,
|
||||
breed: 'Bombay',
|
||||
name: 'Pixel',
|
||||
};
|
||||
const expectedCatArray = [cat];
|
||||
|
||||
// @ts-ignore
|
||||
expect(catsService.cats).toStrictEqual([]);
|
||||
|
||||
await catsController.create(cat);
|
||||
|
||||
// @ts-ignore
|
||||
expect(catsService.cats).toStrictEqual(expectedCatArray);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
48
sample/01-cats-app/src/cats/cats.service.spec.ts
Normal file
48
sample/01-cats-app/src/cats/cats.service.spec.ts
Normal file
@@ -0,0 +1,48 @@
|
||||
import { Test } from '@nestjs/testing';
|
||||
import { CatsService } from './cats.service';
|
||||
import { Cat } from './interfaces/cat.interface';
|
||||
|
||||
describe('CatsService', () => {
|
||||
let catsService: CatsService;
|
||||
|
||||
beforeEach(async () => {
|
||||
const moduleRef = await Test.createTestingModule({
|
||||
providers: [CatsService],
|
||||
}).compile();
|
||||
|
||||
catsService = moduleRef.get<CatsService>(CatsService);
|
||||
});
|
||||
|
||||
describe('findAll', () => {
|
||||
it('should return an array of cats', async () => {
|
||||
const result = [
|
||||
{
|
||||
name: 'Frajola',
|
||||
age: 2,
|
||||
breed: 'Stray',
|
||||
},
|
||||
];
|
||||
//@ts-ignore
|
||||
catsService.cats = result;
|
||||
|
||||
await expect(catsService.findAll()).resolves.toBe(result);
|
||||
});
|
||||
});
|
||||
|
||||
describe('create', () => {
|
||||
it('should add a new cat', async () => {
|
||||
const cat: Cat = {
|
||||
name: 'Frajola',
|
||||
age: 2,
|
||||
breed: 'Stray',
|
||||
};
|
||||
const expectedCatArray = [cat];
|
||||
//@ts-ignore
|
||||
expect(catsService.cats).toStrictEqual([]);
|
||||
|
||||
await catsService.create(cat);
|
||||
//@ts-ignore
|
||||
expect(catsService.cats).toStrictEqual(expectedCatArray);
|
||||
});
|
||||
});
|
||||
});
|
||||
@@ -9,7 +9,7 @@ export class CatsService {
|
||||
this.cats.push(cat);
|
||||
}
|
||||
|
||||
findAll(): Cat[] {
|
||||
return this.cats;
|
||||
findAll(): Promise<Cat[]> {
|
||||
return Promise.resolve(this.cats);
|
||||
}
|
||||
}
|
||||
|
||||
1319
sample/02-gateways/package-lock.json
generated
1319
sample/02-gateways/package-lock.json
generated
File diff suppressed because it is too large
Load Diff
@@ -33,13 +33,13 @@
|
||||
"socket.io": "4.7.4"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@nestjs/cli": "10.3.2",
|
||||
"@nestjs/cli": "10.4.5",
|
||||
"@nestjs/schematics": "10.1.1",
|
||||
"@nestjs/testing": "10.3.2",
|
||||
"@types/express": "4.17.21",
|
||||
"@types/jest": "29.5.12",
|
||||
"@types/node": "20.8.7",
|
||||
"@types/supertest": "2.0.16",
|
||||
"@types/node": "20.17.6",
|
||||
"@types/supertest": "6.0.2",
|
||||
"@types/ws": "8.5.5",
|
||||
"@typescript-eslint/eslint-plugin": "5.62.0",
|
||||
"@typescript-eslint/parser": "5.62.0",
|
||||
@@ -49,7 +49,7 @@
|
||||
"jest": "29.7.0",
|
||||
"prettier": "3.2.5",
|
||||
"redis": "4.6.13",
|
||||
"supertest": "6.3.3",
|
||||
"supertest": "6.3.4",
|
||||
"ts-jest": "29.1.2",
|
||||
"ts-loader": "9.5.1",
|
||||
"ts-node": "10.9.2",
|
||||
|
||||
129
sample/03-microservices/package-lock.json
generated
129
sample/03-microservices/package-lock.json
generated
@@ -25,8 +25,8 @@
|
||||
"@nestjs/testing": "10.3.2",
|
||||
"@types/amqplib": "0.10.4",
|
||||
"@types/express": "4.17.21",
|
||||
"@types/node": "20.8.7",
|
||||
"@types/supertest": "2.0.16",
|
||||
"@types/node": "20.17.6",
|
||||
"@types/supertest": "6.0.2",
|
||||
"@typescript-eslint/eslint-plugin": "5.62.0",
|
||||
"@typescript-eslint/parser": "5.62.0",
|
||||
"eslint": "8.42.0",
|
||||
@@ -34,7 +34,7 @@
|
||||
"eslint-plugin-import": "2.29.1",
|
||||
"jest": "29.7.0",
|
||||
"prettier": "3.2.5",
|
||||
"supertest": "6.3.3",
|
||||
"supertest": "6.3.4",
|
||||
"ts-jest": "29.1.2",
|
||||
"ts-loader": "9.5.1",
|
||||
"ts-node": "10.9.2",
|
||||
@@ -2209,9 +2209,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@types/cookiejar": {
|
||||
"version": "2.1.2",
|
||||
"resolved": "https://registry.npmjs.org/@types/cookiejar/-/cookiejar-2.1.2.tgz",
|
||||
"integrity": "sha512-t73xJJrvdTjXrn4jLS9VSGRbz0nUY3cl2DMGDU48lKl+HR9dbbjW2A9r3g40VA++mQpy6uuHg33gy7du2BKpog==",
|
||||
"version": "2.1.5",
|
||||
"resolved": "https://registry.npmjs.org/@types/cookiejar/-/cookiejar-2.1.5.tgz",
|
||||
"integrity": "sha512-he+DHOWReW0nghN24E1WUqM0efK4kI9oTqDm6XmK8ZPe2djZ90BSNdGnIyCLzCPw7/pogPlGbzI2wHGGmi4O/Q==",
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/@types/eslint": {
|
||||
@@ -2309,6 +2309,12 @@
|
||||
"integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==",
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/@types/methods": {
|
||||
"version": "1.1.4",
|
||||
"resolved": "https://registry.npmjs.org/@types/methods/-/methods-1.1.4.tgz",
|
||||
"integrity": "sha512-ymXWVrDiCxTBE3+RIrrP533E70eA+9qu7zdWoHuOmGujkYtzf4HQF96b8nwHLqhuf4ykX61IGRIB38CC6/sImQ==",
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/@types/mime": {
|
||||
"version": "1.3.2",
|
||||
"resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.2.tgz",
|
||||
@@ -2316,12 +2322,12 @@
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/@types/node": {
|
||||
"version": "20.8.7",
|
||||
"resolved": "https://registry.npmjs.org/@types/node/-/node-20.8.7.tgz",
|
||||
"integrity": "sha512-21TKHHh3eUHIi2MloeptJWALuCu5H7HQTdTrWIFReA8ad+aggoX+lRes3ex7/FtpC+sVUpFMQ+QTfYr74mruiQ==",
|
||||
"version": "20.17.6",
|
||||
"resolved": "https://registry.npmjs.org/@types/node/-/node-20.17.6.tgz",
|
||||
"integrity": "sha512-VEI7OdvK2wP7XHnsuXbAJnEpEkF6NjSN45QJlL4VGqZSXsnicpesdTWsg9RISeSdYd3yeRj/y3k5KGjUXYnFwQ==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"undici-types": "~5.25.1"
|
||||
"undici-types": "~6.19.2"
|
||||
}
|
||||
},
|
||||
"node_modules/@types/qs": {
|
||||
@@ -2369,22 +2375,25 @@
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/@types/superagent": {
|
||||
"version": "4.1.10",
|
||||
"resolved": "https://registry.npmjs.org/@types/superagent/-/superagent-4.1.10.tgz",
|
||||
"integrity": "sha512-xAgkb2CMWUMCyVc/3+7iQfOEBE75NvuZeezvmixbUw3nmENf2tCnQkW5yQLTYqvXUQ+R6EXxdqKKbal2zM5V/g==",
|
||||
"version": "8.1.9",
|
||||
"resolved": "https://registry.npmjs.org/@types/superagent/-/superagent-8.1.9.tgz",
|
||||
"integrity": "sha512-pTVjI73witn+9ILmoJdajHGW2jkSaOzhiFYF1Rd3EQ94kymLqB9PjD9ISg7WaALC7+dCHT0FGe9T2LktLq/3GQ==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"@types/cookiejar": "*",
|
||||
"@types/node": "*"
|
||||
"@types/cookiejar": "^2.1.5",
|
||||
"@types/methods": "^1.1.4",
|
||||
"@types/node": "*",
|
||||
"form-data": "^4.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@types/supertest": {
|
||||
"version": "2.0.16",
|
||||
"resolved": "https://registry.npmjs.org/@types/supertest/-/supertest-2.0.16.tgz",
|
||||
"integrity": "sha512-6c2ogktZ06tr2ENoZivgm7YnprnhYE4ZoXGMY+oA7IuAf17M8FWvujXZGmxLv8y0PTyts4x5A+erSwVUFA8XSg==",
|
||||
"version": "6.0.2",
|
||||
"resolved": "https://registry.npmjs.org/@types/supertest/-/supertest-6.0.2.tgz",
|
||||
"integrity": "sha512-137ypx2lk/wTQbW6An6safu9hXmajAifU/s7szAHLN/FeIm5w7yR0Wkl9fdJMRSHwOn4HLAI0DaB2TOORuhPDg==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"@types/superagent": "*"
|
||||
"@types/methods": "^1.1.4",
|
||||
"@types/superagent": "^8.1.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@types/validator": {
|
||||
@@ -8443,9 +8452,10 @@
|
||||
}
|
||||
},
|
||||
"node_modules/superagent": {
|
||||
"version": "8.0.9",
|
||||
"resolved": "https://registry.npmjs.org/superagent/-/superagent-8.0.9.tgz",
|
||||
"integrity": "sha512-4C7Bh5pyHTvU33KpZgwrNKh/VQnvgtCSqPRfJAUdmrtSYePVzVg4E4OzsrbkhJj9O7SO6Bnv75K/F8XVZT8YHA==",
|
||||
"version": "8.1.2",
|
||||
"resolved": "https://registry.npmjs.org/superagent/-/superagent-8.1.2.tgz",
|
||||
"integrity": "sha512-6WTxW1EB6yCxV5VFOIPQruWGHqc3yI7hEmZK6h+pyk69Lk/Ut7rLUY6W/ONF2MjBuGjvmMiIpsrVJ2vjrHlslA==",
|
||||
"deprecated": "Please upgrade to v9.0.0+ as we have fixed a public vulnerability with formidable dependency. Note that v9.0.0+ requires Node.js v14.18.0+. See https://github.com/ladjs/superagent/pull/1800 for insight. This project is supported and maintained by the team at Forward Email @ https://forwardemail.net",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"component-emitter": "^1.3.0",
|
||||
@@ -8476,13 +8486,13 @@
|
||||
}
|
||||
},
|
||||
"node_modules/supertest": {
|
||||
"version": "6.3.3",
|
||||
"resolved": "https://registry.npmjs.org/supertest/-/supertest-6.3.3.tgz",
|
||||
"integrity": "sha512-EMCG6G8gDu5qEqRQ3JjjPs6+FYT1a7Hv5ApHvtSghmOFJYtsU5S+pSb6Y2EUeCEY3CmEL3mmQ8YWlPOzQomabA==",
|
||||
"version": "6.3.4",
|
||||
"resolved": "https://registry.npmjs.org/supertest/-/supertest-6.3.4.tgz",
|
||||
"integrity": "sha512-erY3HFDG0dPnhw4U+udPfrzXa4xhSG+n4rxfRuZWCUvjFWwKl+OxWf/7zk50s84/fAAs7vf5QAb9uRa0cCykxw==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"methods": "^1.1.2",
|
||||
"superagent": "^8.0.5"
|
||||
"superagent": "^8.1.2"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=6.4.0"
|
||||
@@ -9027,9 +9037,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/undici-types": {
|
||||
"version": "5.25.3",
|
||||
"resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.25.3.tgz",
|
||||
"integrity": "sha512-Ga1jfYwRn7+cP9v8auvEXN1rX3sWqlayd4HP7OKk4mZWylEmu3KzXDUGrQUN6Ol7qo1gPvB2e5gX6udnyEPgdA==",
|
||||
"version": "6.19.8",
|
||||
"resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz",
|
||||
"integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==",
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/universalify": {
|
||||
@@ -11021,9 +11031,9 @@
|
||||
}
|
||||
},
|
||||
"@types/cookiejar": {
|
||||
"version": "2.1.2",
|
||||
"resolved": "https://registry.npmjs.org/@types/cookiejar/-/cookiejar-2.1.2.tgz",
|
||||
"integrity": "sha512-t73xJJrvdTjXrn4jLS9VSGRbz0nUY3cl2DMGDU48lKl+HR9dbbjW2A9r3g40VA++mQpy6uuHg33gy7du2BKpog==",
|
||||
"version": "2.1.5",
|
||||
"resolved": "https://registry.npmjs.org/@types/cookiejar/-/cookiejar-2.1.5.tgz",
|
||||
"integrity": "sha512-he+DHOWReW0nghN24E1WUqM0efK4kI9oTqDm6XmK8ZPe2djZ90BSNdGnIyCLzCPw7/pogPlGbzI2wHGGmi4O/Q==",
|
||||
"dev": true
|
||||
},
|
||||
"@types/eslint": {
|
||||
@@ -11121,6 +11131,12 @@
|
||||
"integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==",
|
||||
"dev": true
|
||||
},
|
||||
"@types/methods": {
|
||||
"version": "1.1.4",
|
||||
"resolved": "https://registry.npmjs.org/@types/methods/-/methods-1.1.4.tgz",
|
||||
"integrity": "sha512-ymXWVrDiCxTBE3+RIrrP533E70eA+9qu7zdWoHuOmGujkYtzf4HQF96b8nwHLqhuf4ykX61IGRIB38CC6/sImQ==",
|
||||
"dev": true
|
||||
},
|
||||
"@types/mime": {
|
||||
"version": "1.3.2",
|
||||
"resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.2.tgz",
|
||||
@@ -11128,12 +11144,12 @@
|
||||
"dev": true
|
||||
},
|
||||
"@types/node": {
|
||||
"version": "20.8.7",
|
||||
"resolved": "https://registry.npmjs.org/@types/node/-/node-20.8.7.tgz",
|
||||
"integrity": "sha512-21TKHHh3eUHIi2MloeptJWALuCu5H7HQTdTrWIFReA8ad+aggoX+lRes3ex7/FtpC+sVUpFMQ+QTfYr74mruiQ==",
|
||||
"version": "20.17.6",
|
||||
"resolved": "https://registry.npmjs.org/@types/node/-/node-20.17.6.tgz",
|
||||
"integrity": "sha512-VEI7OdvK2wP7XHnsuXbAJnEpEkF6NjSN45QJlL4VGqZSXsnicpesdTWsg9RISeSdYd3yeRj/y3k5KGjUXYnFwQ==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"undici-types": "~5.25.1"
|
||||
"undici-types": "~6.19.2"
|
||||
}
|
||||
},
|
||||
"@types/qs": {
|
||||
@@ -11181,22 +11197,25 @@
|
||||
"dev": true
|
||||
},
|
||||
"@types/superagent": {
|
||||
"version": "4.1.10",
|
||||
"resolved": "https://registry.npmjs.org/@types/superagent/-/superagent-4.1.10.tgz",
|
||||
"integrity": "sha512-xAgkb2CMWUMCyVc/3+7iQfOEBE75NvuZeezvmixbUw3nmENf2tCnQkW5yQLTYqvXUQ+R6EXxdqKKbal2zM5V/g==",
|
||||
"version": "8.1.9",
|
||||
"resolved": "https://registry.npmjs.org/@types/superagent/-/superagent-8.1.9.tgz",
|
||||
"integrity": "sha512-pTVjI73witn+9ILmoJdajHGW2jkSaOzhiFYF1Rd3EQ94kymLqB9PjD9ISg7WaALC7+dCHT0FGe9T2LktLq/3GQ==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"@types/cookiejar": "*",
|
||||
"@types/node": "*"
|
||||
"@types/cookiejar": "^2.1.5",
|
||||
"@types/methods": "^1.1.4",
|
||||
"@types/node": "*",
|
||||
"form-data": "^4.0.0"
|
||||
}
|
||||
},
|
||||
"@types/supertest": {
|
||||
"version": "2.0.16",
|
||||
"resolved": "https://registry.npmjs.org/@types/supertest/-/supertest-2.0.16.tgz",
|
||||
"integrity": "sha512-6c2ogktZ06tr2ENoZivgm7YnprnhYE4ZoXGMY+oA7IuAf17M8FWvujXZGmxLv8y0PTyts4x5A+erSwVUFA8XSg==",
|
||||
"version": "6.0.2",
|
||||
"resolved": "https://registry.npmjs.org/@types/supertest/-/supertest-6.0.2.tgz",
|
||||
"integrity": "sha512-137ypx2lk/wTQbW6An6safu9hXmajAifU/s7szAHLN/FeIm5w7yR0Wkl9fdJMRSHwOn4HLAI0DaB2TOORuhPDg==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"@types/superagent": "*"
|
||||
"@types/methods": "^1.1.4",
|
||||
"@types/superagent": "^8.1.0"
|
||||
}
|
||||
},
|
||||
"@types/validator": {
|
||||
@@ -15698,9 +15717,9 @@
|
||||
"dev": true
|
||||
},
|
||||
"superagent": {
|
||||
"version": "8.0.9",
|
||||
"resolved": "https://registry.npmjs.org/superagent/-/superagent-8.0.9.tgz",
|
||||
"integrity": "sha512-4C7Bh5pyHTvU33KpZgwrNKh/VQnvgtCSqPRfJAUdmrtSYePVzVg4E4OzsrbkhJj9O7SO6Bnv75K/F8XVZT8YHA==",
|
||||
"version": "8.1.2",
|
||||
"resolved": "https://registry.npmjs.org/superagent/-/superagent-8.1.2.tgz",
|
||||
"integrity": "sha512-6WTxW1EB6yCxV5VFOIPQruWGHqc3yI7hEmZK6h+pyk69Lk/Ut7rLUY6W/ONF2MjBuGjvmMiIpsrVJ2vjrHlslA==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"component-emitter": "^1.3.0",
|
||||
@@ -15724,13 +15743,13 @@
|
||||
}
|
||||
},
|
||||
"supertest": {
|
||||
"version": "6.3.3",
|
||||
"resolved": "https://registry.npmjs.org/supertest/-/supertest-6.3.3.tgz",
|
||||
"integrity": "sha512-EMCG6G8gDu5qEqRQ3JjjPs6+FYT1a7Hv5ApHvtSghmOFJYtsU5S+pSb6Y2EUeCEY3CmEL3mmQ8YWlPOzQomabA==",
|
||||
"version": "6.3.4",
|
||||
"resolved": "https://registry.npmjs.org/supertest/-/supertest-6.3.4.tgz",
|
||||
"integrity": "sha512-erY3HFDG0dPnhw4U+udPfrzXa4xhSG+n4rxfRuZWCUvjFWwKl+OxWf/7zk50s84/fAAs7vf5QAb9uRa0cCykxw==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"methods": "^1.1.2",
|
||||
"superagent": "^8.0.5"
|
||||
"superagent": "^8.1.2"
|
||||
}
|
||||
},
|
||||
"supports-color": {
|
||||
@@ -16090,9 +16109,9 @@
|
||||
}
|
||||
},
|
||||
"undici-types": {
|
||||
"version": "5.25.3",
|
||||
"resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.25.3.tgz",
|
||||
"integrity": "sha512-Ga1jfYwRn7+cP9v8auvEXN1rX3sWqlayd4HP7OKk4mZWylEmu3KzXDUGrQUN6Ol7qo1gPvB2e5gX6udnyEPgdA==",
|
||||
"version": "6.19.8",
|
||||
"resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz",
|
||||
"integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==",
|
||||
"dev": true
|
||||
},
|
||||
"universalify": {
|
||||
|
||||
@@ -35,11 +35,11 @@
|
||||
"@nestjs/testing": "10.3.2",
|
||||
"@types/amqplib": "0.10.4",
|
||||
"@types/express": "4.17.21",
|
||||
"@types/node": "20.8.7",
|
||||
"@types/supertest": "2.0.16",
|
||||
"@types/node": "20.17.6",
|
||||
"@types/supertest": "6.0.2",
|
||||
"jest": "29.7.0",
|
||||
"prettier": "3.2.5",
|
||||
"supertest": "6.3.3",
|
||||
"supertest": "6.3.4",
|
||||
"ts-jest": "29.1.2",
|
||||
"ts-loader": "9.5.1",
|
||||
"ts-node": "10.9.2",
|
||||
|
||||
740
sample/04-grpc/package-lock.json
generated
740
sample/04-grpc/package-lock.json
generated
File diff suppressed because it is too large
Load Diff
@@ -21,10 +21,10 @@
|
||||
"dependencies": {
|
||||
"@grpc/grpc-js": "1.10.9",
|
||||
"@grpc/reflection": "1.0.3",
|
||||
"@nestjs/common": "10.3.2",
|
||||
"@nestjs/core": "10.3.2",
|
||||
"@nestjs/microservices": "10.3.2",
|
||||
"@nestjs/platform-express": "10.3.8",
|
||||
"@nestjs/common": "10.4.8",
|
||||
"@nestjs/core": "10.4.8",
|
||||
"@nestjs/microservices": "10.4.8",
|
||||
"@nestjs/platform-express": "10.4.8",
|
||||
"class-transformer": "0.5.1",
|
||||
"class-validator": "0.14.1",
|
||||
"reflect-metadata": "0.2.1",
|
||||
@@ -36,8 +36,8 @@
|
||||
"@nestjs/schematics": "10.1.1",
|
||||
"@nestjs/testing": "10.3.2",
|
||||
"@types/express": "4.17.21",
|
||||
"@types/node": "20.8.7",
|
||||
"@types/supertest": "2.0.16",
|
||||
"@types/node": "20.17.6",
|
||||
"@types/supertest": "6.0.2",
|
||||
"@typescript-eslint/eslint-plugin": "5.62.0",
|
||||
"@typescript-eslint/parser": "5.62.0",
|
||||
"eslint": "8.42.0",
|
||||
@@ -45,7 +45,7 @@
|
||||
"eslint-plugin-import": "2.29.1",
|
||||
"jest": "29.7.0",
|
||||
"prettier": "3.2.5",
|
||||
"supertest": "6.3.3",
|
||||
"supertest": "6.3.4",
|
||||
"ts-jest": "29.1.2",
|
||||
"ts-loader": "9.5.1",
|
||||
"ts-node": "10.9.2",
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
import { ReflectionService } from '@grpc/reflection';
|
||||
import { ClientOptions, Transport } from '@nestjs/microservices';
|
||||
import { GrpcOptions, Transport } from '@nestjs/microservices';
|
||||
import { join } from 'path';
|
||||
|
||||
export const grpcClientOptions: ClientOptions = {
|
||||
export const grpcClientOptions: GrpcOptions = {
|
||||
transport: Transport.GRPC,
|
||||
options: {
|
||||
package: 'hero', // ['hero', 'hero2']
|
||||
|
||||
@@ -35,8 +35,8 @@
|
||||
"@nestjs/testing": "10.3.2",
|
||||
"@types/express": "4.17.21",
|
||||
"@types/jest": "29.5.12",
|
||||
"@types/node": "20.8.7",
|
||||
"@types/supertest": "2.0.16",
|
||||
"@types/node": "20.17.6",
|
||||
"@types/supertest": "6.0.2",
|
||||
"@typescript-eslint/eslint-plugin": "5.62.0",
|
||||
"@typescript-eslint/parser": "5.62.0",
|
||||
"eslint": "8.42.0",
|
||||
@@ -44,7 +44,7 @@
|
||||
"eslint-plugin-import": "2.29.1",
|
||||
"jest": "29.7.0",
|
||||
"prettier": "3.2.5",
|
||||
"supertest": "6.3.3",
|
||||
"supertest": "6.3.4",
|
||||
"ts-jest": "29.1.2",
|
||||
"ts-loader": "9.5.1",
|
||||
"ts-node": "10.9.2",
|
||||
|
||||
251
sample/06-mongoose/package-lock.json
generated
251
sample/06-mongoose/package-lock.json
generated
@@ -11,7 +11,7 @@
|
||||
"dependencies": {
|
||||
"@nestjs/common": "10.3.2",
|
||||
"@nestjs/core": "10.3.2",
|
||||
"@nestjs/mongoose": "10.0.2",
|
||||
"@nestjs/mongoose": "10.0.3",
|
||||
"@nestjs/platform-express": "10.3.8",
|
||||
"mongoose": "8.0.1",
|
||||
"reflect-metadata": "0.2.1",
|
||||
@@ -24,8 +24,8 @@
|
||||
"@nestjs/testing": "10.3.2",
|
||||
"@types/express": "4.17.21",
|
||||
"@types/jest": "29.5.12",
|
||||
"@types/node": "20.8.7",
|
||||
"@types/supertest": "2.0.16",
|
||||
"@types/node": "20.17.6",
|
||||
"@types/supertest": "6.0.2",
|
||||
"@typescript-eslint/eslint-plugin": "5.62.0",
|
||||
"@typescript-eslint/parser": "5.62.0",
|
||||
"eslint": "8.42.0",
|
||||
@@ -33,7 +33,7 @@
|
||||
"eslint-plugin-import": "2.29.1",
|
||||
"jest": "29.7.0",
|
||||
"prettier": "3.2.5",
|
||||
"supertest": "6.3.3",
|
||||
"supertest": "6.3.4",
|
||||
"ts-jest": "29.1.2",
|
||||
"ts-loader": "9.5.1",
|
||||
"ts-node": "10.9.2",
|
||||
@@ -1915,14 +1915,14 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@nestjs/mongoose": {
|
||||
"version": "10.0.2",
|
||||
"resolved": "https://registry.npmjs.org/@nestjs/mongoose/-/mongoose-10.0.2.tgz",
|
||||
"integrity": "sha512-ITHh075DynjPIaKeJh6WkarS21WXYslu4nrLkNPbWaCP6JfxVAOftaA2X5tPSiiE/gNJWgs+QFWsfCFZUUenow==",
|
||||
"version": "10.0.3",
|
||||
"resolved": "https://registry.npmjs.org/@nestjs/mongoose/-/mongoose-10.0.3.tgz",
|
||||
"integrity": "sha512-EW0qIhERafiUpBGkLgHyEEmteHg7xYkjGwApAzDszZk5+osp14jbwtTDhOOLe81pSs03caVepeS2KAl+68xwew==",
|
||||
"license": "MIT",
|
||||
"peerDependencies": {
|
||||
"@nestjs/common": "^8.0.0 || ^9.0.0 || ^10.0.0",
|
||||
"@nestjs/core": "^8.0.0 || ^9.0.0 || ^10.0.0",
|
||||
"mongoose": "^6.0.2 || ^7.0.0 || ^8.0.0",
|
||||
"reflect-metadata": "^0.1.12",
|
||||
"rxjs": "^7.0.0"
|
||||
}
|
||||
},
|
||||
@@ -2165,9 +2165,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@types/cookiejar": {
|
||||
"version": "2.1.2",
|
||||
"resolved": "https://registry.npmjs.org/@types/cookiejar/-/cookiejar-2.1.2.tgz",
|
||||
"integrity": "sha512-t73xJJrvdTjXrn4jLS9VSGRbz0nUY3cl2DMGDU48lKl+HR9dbbjW2A9r3g40VA++mQpy6uuHg33gy7du2BKpog==",
|
||||
"version": "2.1.5",
|
||||
"resolved": "https://registry.npmjs.org/@types/cookiejar/-/cookiejar-2.1.5.tgz",
|
||||
"integrity": "sha512-he+DHOWReW0nghN24E1WUqM0efK4kI9oTqDm6XmK8ZPe2djZ90BSNdGnIyCLzCPw7/pogPlGbzI2wHGGmi4O/Q==",
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/@types/eslint": {
|
||||
@@ -2275,6 +2275,12 @@
|
||||
"integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==",
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/@types/methods": {
|
||||
"version": "1.1.4",
|
||||
"resolved": "https://registry.npmjs.org/@types/methods/-/methods-1.1.4.tgz",
|
||||
"integrity": "sha512-ymXWVrDiCxTBE3+RIrrP533E70eA+9qu7zdWoHuOmGujkYtzf4HQF96b8nwHLqhuf4ykX61IGRIB38CC6/sImQ==",
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/@types/mime": {
|
||||
"version": "1.3.2",
|
||||
"resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.2.tgz",
|
||||
@@ -2282,11 +2288,11 @@
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/@types/node": {
|
||||
"version": "20.8.7",
|
||||
"resolved": "https://registry.npmjs.org/@types/node/-/node-20.8.7.tgz",
|
||||
"integrity": "sha512-21TKHHh3eUHIi2MloeptJWALuCu5H7HQTdTrWIFReA8ad+aggoX+lRes3ex7/FtpC+sVUpFMQ+QTfYr74mruiQ==",
|
||||
"version": "20.17.6",
|
||||
"resolved": "https://registry.npmjs.org/@types/node/-/node-20.17.6.tgz",
|
||||
"integrity": "sha512-VEI7OdvK2wP7XHnsuXbAJnEpEkF6NjSN45QJlL4VGqZSXsnicpesdTWsg9RISeSdYd3yeRj/y3k5KGjUXYnFwQ==",
|
||||
"dependencies": {
|
||||
"undici-types": "~5.25.1"
|
||||
"undici-types": "~6.19.2"
|
||||
}
|
||||
},
|
||||
"node_modules/@types/qs": {
|
||||
@@ -2334,22 +2340,25 @@
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/@types/superagent": {
|
||||
"version": "4.1.14",
|
||||
"resolved": "https://registry.npmjs.org/@types/superagent/-/superagent-4.1.14.tgz",
|
||||
"integrity": "sha512-iiXaOL2wSbnSY4qg0mFPWJHL9iwyEsoNYwaHF2w58/fsVAQJlj+KUfFAFZu+nzbz+b7dUprJEAc+O9vhHHhQTA==",
|
||||
"version": "8.1.9",
|
||||
"resolved": "https://registry.npmjs.org/@types/superagent/-/superagent-8.1.9.tgz",
|
||||
"integrity": "sha512-pTVjI73witn+9ILmoJdajHGW2jkSaOzhiFYF1Rd3EQ94kymLqB9PjD9ISg7WaALC7+dCHT0FGe9T2LktLq/3GQ==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"@types/cookiejar": "*",
|
||||
"@types/node": "*"
|
||||
"@types/cookiejar": "^2.1.5",
|
||||
"@types/methods": "^1.1.4",
|
||||
"@types/node": "*",
|
||||
"form-data": "^4.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@types/supertest": {
|
||||
"version": "2.0.16",
|
||||
"resolved": "https://registry.npmjs.org/@types/supertest/-/supertest-2.0.16.tgz",
|
||||
"integrity": "sha512-6c2ogktZ06tr2ENoZivgm7YnprnhYE4ZoXGMY+oA7IuAf17M8FWvujXZGmxLv8y0PTyts4x5A+erSwVUFA8XSg==",
|
||||
"version": "6.0.2",
|
||||
"resolved": "https://registry.npmjs.org/@types/supertest/-/supertest-6.0.2.tgz",
|
||||
"integrity": "sha512-137ypx2lk/wTQbW6An6safu9hXmajAifU/s7szAHLN/FeIm5w7yR0Wkl9fdJMRSHwOn4HLAI0DaB2TOORuhPDg==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"@types/superagent": "*"
|
||||
"@types/methods": "^1.1.4",
|
||||
"@types/superagent": "^8.1.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@types/webidl-conversions": {
|
||||
@@ -3663,10 +3672,13 @@
|
||||
}
|
||||
},
|
||||
"node_modules/component-emitter": {
|
||||
"version": "1.3.0",
|
||||
"resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz",
|
||||
"integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==",
|
||||
"dev": true
|
||||
"version": "1.3.1",
|
||||
"resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.1.tgz",
|
||||
"integrity": "sha512-T0+barUSQRTUQASh8bx02dl+DhF54GtIDY13Y3m9oWTklKbb3Wv974meRpeZ3lp1JpLVECWWNHC4vaG2XHXouQ==",
|
||||
"dev": true,
|
||||
"funding": {
|
||||
"url": "https://github.com/sponsors/sindresorhus"
|
||||
}
|
||||
},
|
||||
"node_modules/concat-map": {
|
||||
"version": "0.0.1",
|
||||
@@ -4934,9 +4946,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/form-data": {
|
||||
"version": "4.0.0",
|
||||
"resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz",
|
||||
"integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==",
|
||||
"version": "4.0.1",
|
||||
"resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.1.tgz",
|
||||
"integrity": "sha512-tzN8e4TX8+kkxGPK8D5u0FNmjPUjw3lwC9lSLxxoB/+GtsJG91CO8bSWy73APlgAZzZbXEYZJuxjkHH2w+Ezhw==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"asynckit": "^0.4.0",
|
||||
@@ -5531,13 +5543,6 @@
|
||||
"node": ">= 0.10"
|
||||
}
|
||||
},
|
||||
"node_modules/ip": {
|
||||
"version": "2.0.1",
|
||||
"resolved": "https://registry.npmjs.org/ip/-/ip-2.0.1.tgz",
|
||||
"integrity": "sha512-lJUL9imLTNi1ZfXT+DU6rBBdbiKGBuay9B6xGSPVjUeQwaH1RIGqef8RZkUtHioLmSNpPR5M4HVKJGm1j8FWVQ==",
|
||||
"optional": true,
|
||||
"peer": true
|
||||
},
|
||||
"node_modules/ipaddr.js": {
|
||||
"version": "1.9.1",
|
||||
"resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz",
|
||||
@@ -8352,32 +8357,6 @@
|
||||
"node": ">=8"
|
||||
}
|
||||
},
|
||||
"node_modules/smart-buffer": {
|
||||
"version": "4.2.0",
|
||||
"resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz",
|
||||
"integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==",
|
||||
"optional": true,
|
||||
"peer": true,
|
||||
"engines": {
|
||||
"node": ">= 6.0.0",
|
||||
"npm": ">= 3.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/socks": {
|
||||
"version": "2.7.1",
|
||||
"resolved": "https://registry.npmjs.org/socks/-/socks-2.7.1.tgz",
|
||||
"integrity": "sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ==",
|
||||
"optional": true,
|
||||
"peer": true,
|
||||
"dependencies": {
|
||||
"ip": "^2.0.0",
|
||||
"smart-buffer": "^4.2.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">= 10.13.0",
|
||||
"npm": ">= 3.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/source-map": {
|
||||
"version": "0.7.4",
|
||||
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz",
|
||||
@@ -8609,9 +8588,10 @@
|
||||
}
|
||||
},
|
||||
"node_modules/superagent": {
|
||||
"version": "8.0.9",
|
||||
"resolved": "https://registry.npmjs.org/superagent/-/superagent-8.0.9.tgz",
|
||||
"integrity": "sha512-4C7Bh5pyHTvU33KpZgwrNKh/VQnvgtCSqPRfJAUdmrtSYePVzVg4E4OzsrbkhJj9O7SO6Bnv75K/F8XVZT8YHA==",
|
||||
"version": "8.1.2",
|
||||
"resolved": "https://registry.npmjs.org/superagent/-/superagent-8.1.2.tgz",
|
||||
"integrity": "sha512-6WTxW1EB6yCxV5VFOIPQruWGHqc3yI7hEmZK6h+pyk69Lk/Ut7rLUY6W/ONF2MjBuGjvmMiIpsrVJ2vjrHlslA==",
|
||||
"deprecated": "Please upgrade to v9.0.0+ as we have fixed a public vulnerability with formidable dependency. Note that v9.0.0+ requires Node.js v14.18.0+. See https://github.com/ladjs/superagent/pull/1800 for insight. This project is supported and maintained by the team at Forward Email @ https://forwardemail.net",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"component-emitter": "^1.3.0",
|
||||
@@ -8642,13 +8622,13 @@
|
||||
}
|
||||
},
|
||||
"node_modules/supertest": {
|
||||
"version": "6.3.3",
|
||||
"resolved": "https://registry.npmjs.org/supertest/-/supertest-6.3.3.tgz",
|
||||
"integrity": "sha512-EMCG6G8gDu5qEqRQ3JjjPs6+FYT1a7Hv5ApHvtSghmOFJYtsU5S+pSb6Y2EUeCEY3CmEL3mmQ8YWlPOzQomabA==",
|
||||
"version": "6.3.4",
|
||||
"resolved": "https://registry.npmjs.org/supertest/-/supertest-6.3.4.tgz",
|
||||
"integrity": "sha512-erY3HFDG0dPnhw4U+udPfrzXa4xhSG+n4rxfRuZWCUvjFWwKl+OxWf/7zk50s84/fAAs7vf5QAb9uRa0cCykxw==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"methods": "^1.1.2",
|
||||
"superagent": "^8.0.5"
|
||||
"superagent": "^8.1.2"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=6.4.0"
|
||||
@@ -9170,9 +9150,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/undici-types": {
|
||||
"version": "5.25.3",
|
||||
"resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.25.3.tgz",
|
||||
"integrity": "sha512-Ga1jfYwRn7+cP9v8auvEXN1rX3sWqlayd4HP7OKk4mZWylEmu3KzXDUGrQUN6Ol7qo1gPvB2e5gX6udnyEPgdA=="
|
||||
"version": "6.19.8",
|
||||
"resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz",
|
||||
"integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw=="
|
||||
},
|
||||
"node_modules/universalify": {
|
||||
"version": "2.0.0",
|
||||
@@ -10952,10 +10932,9 @@
|
||||
}
|
||||
},
|
||||
"@nestjs/mongoose": {
|
||||
"version": "10.0.2",
|
||||
"resolved": "https://registry.npmjs.org/@nestjs/mongoose/-/mongoose-10.0.2.tgz",
|
||||
"integrity": "sha512-ITHh075DynjPIaKeJh6WkarS21WXYslu4nrLkNPbWaCP6JfxVAOftaA2X5tPSiiE/gNJWgs+QFWsfCFZUUenow==",
|
||||
"requires": {}
|
||||
"version": "10.0.3",
|
||||
"resolved": "https://registry.npmjs.org/@nestjs/mongoose/-/mongoose-10.0.3.tgz",
|
||||
"integrity": "sha512-EW0qIhERafiUpBGkLgHyEEmteHg7xYkjGwApAzDszZk5+osp14jbwtTDhOOLe81pSs03caVepeS2KAl+68xwew=="
|
||||
},
|
||||
"@nestjs/platform-express": {
|
||||
"version": "10.3.8",
|
||||
@@ -11150,9 +11129,9 @@
|
||||
}
|
||||
},
|
||||
"@types/cookiejar": {
|
||||
"version": "2.1.2",
|
||||
"resolved": "https://registry.npmjs.org/@types/cookiejar/-/cookiejar-2.1.2.tgz",
|
||||
"integrity": "sha512-t73xJJrvdTjXrn4jLS9VSGRbz0nUY3cl2DMGDU48lKl+HR9dbbjW2A9r3g40VA++mQpy6uuHg33gy7du2BKpog==",
|
||||
"version": "2.1.5",
|
||||
"resolved": "https://registry.npmjs.org/@types/cookiejar/-/cookiejar-2.1.5.tgz",
|
||||
"integrity": "sha512-he+DHOWReW0nghN24E1WUqM0efK4kI9oTqDm6XmK8ZPe2djZ90BSNdGnIyCLzCPw7/pogPlGbzI2wHGGmi4O/Q==",
|
||||
"dev": true
|
||||
},
|
||||
"@types/eslint": {
|
||||
@@ -11260,6 +11239,12 @@
|
||||
"integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==",
|
||||
"dev": true
|
||||
},
|
||||
"@types/methods": {
|
||||
"version": "1.1.4",
|
||||
"resolved": "https://registry.npmjs.org/@types/methods/-/methods-1.1.4.tgz",
|
||||
"integrity": "sha512-ymXWVrDiCxTBE3+RIrrP533E70eA+9qu7zdWoHuOmGujkYtzf4HQF96b8nwHLqhuf4ykX61IGRIB38CC6/sImQ==",
|
||||
"dev": true
|
||||
},
|
||||
"@types/mime": {
|
||||
"version": "1.3.2",
|
||||
"resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.2.tgz",
|
||||
@@ -11267,11 +11252,11 @@
|
||||
"dev": true
|
||||
},
|
||||
"@types/node": {
|
||||
"version": "20.8.7",
|
||||
"resolved": "https://registry.npmjs.org/@types/node/-/node-20.8.7.tgz",
|
||||
"integrity": "sha512-21TKHHh3eUHIi2MloeptJWALuCu5H7HQTdTrWIFReA8ad+aggoX+lRes3ex7/FtpC+sVUpFMQ+QTfYr74mruiQ==",
|
||||
"version": "20.17.6",
|
||||
"resolved": "https://registry.npmjs.org/@types/node/-/node-20.17.6.tgz",
|
||||
"integrity": "sha512-VEI7OdvK2wP7XHnsuXbAJnEpEkF6NjSN45QJlL4VGqZSXsnicpesdTWsg9RISeSdYd3yeRj/y3k5KGjUXYnFwQ==",
|
||||
"requires": {
|
||||
"undici-types": "~5.25.1"
|
||||
"undici-types": "~6.19.2"
|
||||
}
|
||||
},
|
||||
"@types/qs": {
|
||||
@@ -11319,22 +11304,25 @@
|
||||
"dev": true
|
||||
},
|
||||
"@types/superagent": {
|
||||
"version": "4.1.14",
|
||||
"resolved": "https://registry.npmjs.org/@types/superagent/-/superagent-4.1.14.tgz",
|
||||
"integrity": "sha512-iiXaOL2wSbnSY4qg0mFPWJHL9iwyEsoNYwaHF2w58/fsVAQJlj+KUfFAFZu+nzbz+b7dUprJEAc+O9vhHHhQTA==",
|
||||
"version": "8.1.9",
|
||||
"resolved": "https://registry.npmjs.org/@types/superagent/-/superagent-8.1.9.tgz",
|
||||
"integrity": "sha512-pTVjI73witn+9ILmoJdajHGW2jkSaOzhiFYF1Rd3EQ94kymLqB9PjD9ISg7WaALC7+dCHT0FGe9T2LktLq/3GQ==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"@types/cookiejar": "*",
|
||||
"@types/node": "*"
|
||||
"@types/cookiejar": "^2.1.5",
|
||||
"@types/methods": "^1.1.4",
|
||||
"@types/node": "*",
|
||||
"form-data": "^4.0.0"
|
||||
}
|
||||
},
|
||||
"@types/supertest": {
|
||||
"version": "2.0.16",
|
||||
"resolved": "https://registry.npmjs.org/@types/supertest/-/supertest-2.0.16.tgz",
|
||||
"integrity": "sha512-6c2ogktZ06tr2ENoZivgm7YnprnhYE4ZoXGMY+oA7IuAf17M8FWvujXZGmxLv8y0PTyts4x5A+erSwVUFA8XSg==",
|
||||
"version": "6.0.2",
|
||||
"resolved": "https://registry.npmjs.org/@types/supertest/-/supertest-6.0.2.tgz",
|
||||
"integrity": "sha512-137ypx2lk/wTQbW6An6safu9hXmajAifU/s7szAHLN/FeIm5w7yR0Wkl9fdJMRSHwOn4HLAI0DaB2TOORuhPDg==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"@types/superagent": "*"
|
||||
"@types/methods": "^1.1.4",
|
||||
"@types/superagent": "^8.1.0"
|
||||
}
|
||||
},
|
||||
"@types/webidl-conversions": {
|
||||
@@ -11642,15 +11630,13 @@
|
||||
"version": "1.9.0",
|
||||
"resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz",
|
||||
"integrity": "sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==",
|
||||
"dev": true,
|
||||
"requires": {}
|
||||
"dev": true
|
||||
},
|
||||
"acorn-jsx": {
|
||||
"version": "5.3.2",
|
||||
"resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz",
|
||||
"integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==",
|
||||
"dev": true,
|
||||
"requires": {}
|
||||
"dev": true
|
||||
},
|
||||
"acorn-walk": {
|
||||
"version": "8.2.0",
|
||||
@@ -11703,8 +11689,7 @@
|
||||
"version": "3.5.2",
|
||||
"resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz",
|
||||
"integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==",
|
||||
"dev": true,
|
||||
"requires": {}
|
||||
"dev": true
|
||||
},
|
||||
"ansi-colors": {
|
||||
"version": "4.1.3",
|
||||
@@ -12291,9 +12276,9 @@
|
||||
}
|
||||
},
|
||||
"component-emitter": {
|
||||
"version": "1.3.0",
|
||||
"resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz",
|
||||
"integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==",
|
||||
"version": "1.3.1",
|
||||
"resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.1.tgz",
|
||||
"integrity": "sha512-T0+barUSQRTUQASh8bx02dl+DhF54GtIDY13Y3m9oWTklKbb3Wv974meRpeZ3lp1JpLVECWWNHC4vaG2XHXouQ==",
|
||||
"dev": true
|
||||
},
|
||||
"concat-map": {
|
||||
@@ -12433,8 +12418,7 @@
|
||||
"version": "1.5.1",
|
||||
"resolved": "https://registry.npmjs.org/dedent/-/dedent-1.5.1.tgz",
|
||||
"integrity": "sha512-+LxW+KLWxu3HW3M2w2ympwtqPrqYRzU8fqi6Fhd18fBALe15blJPI/I4+UHveMVG6lJqB4JNd4UG0S5cnVHwIg==",
|
||||
"dev": true,
|
||||
"requires": {}
|
||||
"dev": true
|
||||
},
|
||||
"deep-is": {
|
||||
"version": "0.1.4",
|
||||
@@ -12769,8 +12753,7 @@
|
||||
"version": "9.1.0",
|
||||
"resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-9.1.0.tgz",
|
||||
"integrity": "sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==",
|
||||
"dev": true,
|
||||
"requires": {}
|
||||
"dev": true
|
||||
},
|
||||
"eslint-import-resolver-node": {
|
||||
"version": "0.3.9",
|
||||
@@ -13288,9 +13271,9 @@
|
||||
}
|
||||
},
|
||||
"form-data": {
|
||||
"version": "4.0.0",
|
||||
"resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz",
|
||||
"integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==",
|
||||
"version": "4.0.1",
|
||||
"resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.1.tgz",
|
||||
"integrity": "sha512-tzN8e4TX8+kkxGPK8D5u0FNmjPUjw3lwC9lSLxxoB/+GtsJG91CO8bSWy73APlgAZzZbXEYZJuxjkHH2w+Ezhw==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"asynckit": "^0.4.0",
|
||||
@@ -13704,13 +13687,6 @@
|
||||
"integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==",
|
||||
"dev": true
|
||||
},
|
||||
"ip": {
|
||||
"version": "2.0.1",
|
||||
"resolved": "https://registry.npmjs.org/ip/-/ip-2.0.1.tgz",
|
||||
"integrity": "sha512-lJUL9imLTNi1ZfXT+DU6rBBdbiKGBuay9B6xGSPVjUeQwaH1RIGqef8RZkUtHioLmSNpPR5M4HVKJGm1j8FWVQ==",
|
||||
"optional": true,
|
||||
"peer": true
|
||||
},
|
||||
"ipaddr.js": {
|
||||
"version": "1.9.1",
|
||||
"resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz",
|
||||
@@ -14253,8 +14229,7 @@
|
||||
"version": "1.2.3",
|
||||
"resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz",
|
||||
"integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==",
|
||||
"dev": true,
|
||||
"requires": {}
|
||||
"dev": true
|
||||
},
|
||||
"jest-regex-util": {
|
||||
"version": "29.6.3",
|
||||
@@ -15756,24 +15731,6 @@
|
||||
"integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
|
||||
"dev": true
|
||||
},
|
||||
"smart-buffer": {
|
||||
"version": "4.2.0",
|
||||
"resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz",
|
||||
"integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==",
|
||||
"optional": true,
|
||||
"peer": true
|
||||
},
|
||||
"socks": {
|
||||
"version": "2.7.1",
|
||||
"resolved": "https://registry.npmjs.org/socks/-/socks-2.7.1.tgz",
|
||||
"integrity": "sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ==",
|
||||
"optional": true,
|
||||
"peer": true,
|
||||
"requires": {
|
||||
"ip": "^2.0.0",
|
||||
"smart-buffer": "^4.2.0"
|
||||
}
|
||||
},
|
||||
"source-map": {
|
||||
"version": "0.7.4",
|
||||
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz",
|
||||
@@ -15952,9 +15909,9 @@
|
||||
"dev": true
|
||||
},
|
||||
"superagent": {
|
||||
"version": "8.0.9",
|
||||
"resolved": "https://registry.npmjs.org/superagent/-/superagent-8.0.9.tgz",
|
||||
"integrity": "sha512-4C7Bh5pyHTvU33KpZgwrNKh/VQnvgtCSqPRfJAUdmrtSYePVzVg4E4OzsrbkhJj9O7SO6Bnv75K/F8XVZT8YHA==",
|
||||
"version": "8.1.2",
|
||||
"resolved": "https://registry.npmjs.org/superagent/-/superagent-8.1.2.tgz",
|
||||
"integrity": "sha512-6WTxW1EB6yCxV5VFOIPQruWGHqc3yI7hEmZK6h+pyk69Lk/Ut7rLUY6W/ONF2MjBuGjvmMiIpsrVJ2vjrHlslA==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"component-emitter": "^1.3.0",
|
||||
@@ -15978,13 +15935,13 @@
|
||||
}
|
||||
},
|
||||
"supertest": {
|
||||
"version": "6.3.3",
|
||||
"resolved": "https://registry.npmjs.org/supertest/-/supertest-6.3.3.tgz",
|
||||
"integrity": "sha512-EMCG6G8gDu5qEqRQ3JjjPs6+FYT1a7Hv5ApHvtSghmOFJYtsU5S+pSb6Y2EUeCEY3CmEL3mmQ8YWlPOzQomabA==",
|
||||
"version": "6.3.4",
|
||||
"resolved": "https://registry.npmjs.org/supertest/-/supertest-6.3.4.tgz",
|
||||
"integrity": "sha512-erY3HFDG0dPnhw4U+udPfrzXa4xhSG+n4rxfRuZWCUvjFWwKl+OxWf/7zk50s84/fAAs7vf5QAb9uRa0cCykxw==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"methods": "^1.1.2",
|
||||
"superagent": "^8.0.5"
|
||||
"superagent": "^8.1.2"
|
||||
}
|
||||
},
|
||||
"supports-color": {
|
||||
@@ -16329,9 +16286,9 @@
|
||||
}
|
||||
},
|
||||
"undici-types": {
|
||||
"version": "5.25.3",
|
||||
"resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.25.3.tgz",
|
||||
"integrity": "sha512-Ga1jfYwRn7+cP9v8auvEXN1rX3sWqlayd4HP7OKk4mZWylEmu3KzXDUGrQUN6Ol7qo1gPvB2e5gX6udnyEPgdA=="
|
||||
"version": "6.19.8",
|
||||
"resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz",
|
||||
"integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw=="
|
||||
},
|
||||
"universalify": {
|
||||
"version": "2.0.0",
|
||||
|
||||
@@ -21,7 +21,7 @@
|
||||
"dependencies": {
|
||||
"@nestjs/common": "10.3.2",
|
||||
"@nestjs/core": "10.3.2",
|
||||
"@nestjs/mongoose": "10.0.2",
|
||||
"@nestjs/mongoose": "10.0.3",
|
||||
"@nestjs/platform-express": "10.3.8",
|
||||
"mongoose": "8.0.1",
|
||||
"reflect-metadata": "0.2.1",
|
||||
@@ -34,8 +34,8 @@
|
||||
"@nestjs/testing": "10.3.2",
|
||||
"@types/express": "4.17.21",
|
||||
"@types/jest": "29.5.12",
|
||||
"@types/node": "20.8.7",
|
||||
"@types/supertest": "2.0.16",
|
||||
"@types/node": "20.17.6",
|
||||
"@types/supertest": "6.0.2",
|
||||
"@typescript-eslint/eslint-plugin": "5.62.0",
|
||||
"@typescript-eslint/parser": "5.62.0",
|
||||
"eslint": "8.42.0",
|
||||
@@ -43,7 +43,7 @@
|
||||
"eslint-plugin-import": "2.29.1",
|
||||
"jest": "29.7.0",
|
||||
"prettier": "3.2.5",
|
||||
"supertest": "6.3.3",
|
||||
"supertest": "6.3.4",
|
||||
"ts-jest": "29.1.2",
|
||||
"ts-loader": "9.5.1",
|
||||
"ts-node": "10.9.2",
|
||||
|
||||
@@ -1,23 +1,20 @@
|
||||
import { Test, TestingModule } from '@nestjs/testing';
|
||||
import { Types } from 'mongoose';
|
||||
import { CatsController } from './cats.controller';
|
||||
import { CreateCatDto } from './dto/create-cat.dto';
|
||||
import { CatsService } from './cats.service';
|
||||
import { CreateCatDto } from './dto/create-cat.dto';
|
||||
|
||||
describe('Cats Controller', () => {
|
||||
const catsServiceMock = {
|
||||
create: jest.fn(),
|
||||
findAll: jest.fn(),
|
||||
findOne: jest.fn(),
|
||||
update: jest.fn(),
|
||||
delete: jest.fn(),
|
||||
};
|
||||
|
||||
describe('CatsController', () => {
|
||||
let controller: CatsController;
|
||||
let service: CatsService;
|
||||
const createCatDto: CreateCatDto = {
|
||||
name: 'Cat #1',
|
||||
breed: 'Breed #1',
|
||||
age: 4,
|
||||
};
|
||||
|
||||
const mockCat = {
|
||||
name: 'Cat #1',
|
||||
breed: 'Breed #1',
|
||||
age: 4,
|
||||
_id: 'a id',
|
||||
};
|
||||
let service: jest.Mocked<CatsService>;
|
||||
|
||||
beforeEach(async () => {
|
||||
const module: TestingModule = await Test.createTestingModule({
|
||||
@@ -25,65 +22,124 @@ describe('Cats Controller', () => {
|
||||
providers: [
|
||||
{
|
||||
provide: CatsService,
|
||||
useValue: {
|
||||
findAll: jest.fn().mockResolvedValue([
|
||||
{
|
||||
name: 'Cat #1',
|
||||
breed: 'Bread #1',
|
||||
age: 4,
|
||||
},
|
||||
{
|
||||
name: 'Cat #2',
|
||||
breed: 'Breed #2',
|
||||
age: 3,
|
||||
},
|
||||
{
|
||||
name: 'Cat #3',
|
||||
breed: 'Breed #3',
|
||||
age: 2,
|
||||
},
|
||||
]),
|
||||
create: jest.fn().mockResolvedValue(createCatDto),
|
||||
},
|
||||
useValue: catsServiceMock,
|
||||
},
|
||||
],
|
||||
}).compile();
|
||||
|
||||
controller = module.get<CatsController>(CatsController);
|
||||
service = module.get<CatsService>(CatsService);
|
||||
controller = module.get(CatsController);
|
||||
service = module.get(CatsService);
|
||||
});
|
||||
|
||||
describe('create()', () => {
|
||||
describe('create', () => {
|
||||
it('should create a new cat', async () => {
|
||||
const createSpy = jest
|
||||
.spyOn(service, 'create')
|
||||
.mockResolvedValueOnce(mockCat);
|
||||
const mockedCat = {
|
||||
_id: new Types.ObjectId(),
|
||||
name: 'Cat #1',
|
||||
breed: 'Breed #1',
|
||||
age: 4,
|
||||
};
|
||||
service.create.mockResolvedValueOnce(mockedCat);
|
||||
|
||||
await controller.create(createCatDto);
|
||||
expect(createSpy).toHaveBeenCalledWith(createCatDto);
|
||||
const createCatDto: CreateCatDto = {
|
||||
name: 'Cat #1',
|
||||
breed: 'Breed #1',
|
||||
age: 4,
|
||||
};
|
||||
const result = await controller.create(createCatDto);
|
||||
|
||||
expect(result).toEqual(mockedCat);
|
||||
expect(service.create).toHaveBeenCalledWith(createCatDto);
|
||||
});
|
||||
});
|
||||
|
||||
describe('findAll()', () => {
|
||||
describe('findAll', () => {
|
||||
it('should return an array of cats', async () => {
|
||||
expect(controller.findAll()).resolves.toEqual([
|
||||
const mockedCats = [
|
||||
{
|
||||
_id: new Types.ObjectId(),
|
||||
name: 'Cat #1',
|
||||
breed: 'Bread #1',
|
||||
age: 4,
|
||||
},
|
||||
{
|
||||
_id: new Types.ObjectId(),
|
||||
name: 'Cat #2',
|
||||
breed: 'Breed #2',
|
||||
age: 3,
|
||||
},
|
||||
{
|
||||
_id: new Types.ObjectId(),
|
||||
name: 'Cat #3',
|
||||
breed: 'Breed #3',
|
||||
age: 2,
|
||||
},
|
||||
]);
|
||||
];
|
||||
service.findAll.mockResolvedValueOnce(mockedCats);
|
||||
|
||||
const result = await controller.findAll();
|
||||
|
||||
expect(result).toEqual(mockedCats);
|
||||
expect(service.findAll).toHaveBeenCalled();
|
||||
});
|
||||
});
|
||||
|
||||
describe('findOne', () => {
|
||||
it('should return a single cat', async () => {
|
||||
const mockedCat = {
|
||||
_id: new Types.ObjectId(),
|
||||
name: 'Cat #1',
|
||||
breed: 'Breed #1',
|
||||
age: 4,
|
||||
};
|
||||
service.findOne.mockResolvedValueOnce(mockedCat);
|
||||
|
||||
const id = new Types.ObjectId().toString();
|
||||
const result = await controller.findOne(id);
|
||||
|
||||
expect(result).toEqual(mockedCat);
|
||||
expect(service.findOne).toHaveBeenCalledWith(id);
|
||||
});
|
||||
});
|
||||
|
||||
describe('update', () => {
|
||||
it('should update a single cat', async () => {
|
||||
const mockedCat = {
|
||||
_id: new Types.ObjectId(),
|
||||
name: 'Cat #1',
|
||||
breed: 'Breed #1',
|
||||
age: 4,
|
||||
};
|
||||
service.update.mockResolvedValueOnce(mockedCat);
|
||||
|
||||
const id = new Types.ObjectId().toString();
|
||||
const updateCatDto: CreateCatDto = {
|
||||
name: 'Cat #1',
|
||||
breed: 'Breed #1',
|
||||
age: 4,
|
||||
};
|
||||
const result = await controller.update(id, updateCatDto);
|
||||
|
||||
expect(result).toEqual(mockedCat);
|
||||
expect(service.update).toHaveBeenCalledWith(id, updateCatDto);
|
||||
});
|
||||
});
|
||||
|
||||
describe('delete', () => {
|
||||
it('should delete a single cat', async () => {
|
||||
const mockedCat = {
|
||||
_id: new Types.ObjectId(),
|
||||
name: 'Cat #1',
|
||||
breed: 'Breed #1',
|
||||
age: 4,
|
||||
};
|
||||
service.delete.mockResolvedValueOnce(mockedCat);
|
||||
|
||||
const id = new Types.ObjectId().toString();
|
||||
const result = await controller.delete(id);
|
||||
|
||||
expect(result).toEqual(mockedCat);
|
||||
expect(service.delete).toHaveBeenCalledWith(id);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
import { Body, Controller, Delete, Get, Param, Post } from '@nestjs/common';
|
||||
import { CatsService } from './cats.service';
|
||||
import { CreateCatDto } from './dto/create-cat.dto';
|
||||
import { UpdateCatDto } from './dto/update-cat.dto';
|
||||
import { Cat } from './schemas/cat.schema';
|
||||
|
||||
@Controller('cats')
|
||||
@@ -9,7 +10,7 @@ export class CatsController {
|
||||
|
||||
@Post()
|
||||
async create(@Body() createCatDto: CreateCatDto) {
|
||||
await this.catsService.create(createCatDto);
|
||||
return this.catsService.create(createCatDto);
|
||||
}
|
||||
|
||||
@Get()
|
||||
@@ -22,6 +23,11 @@ export class CatsController {
|
||||
return this.catsService.findOne(id);
|
||||
}
|
||||
|
||||
@Post(':id')
|
||||
async update(@Param('id') id: string, @Body() updateCatDto: UpdateCatDto) {
|
||||
return this.catsService.update(id, updateCatDto);
|
||||
}
|
||||
|
||||
@Delete(':id')
|
||||
async delete(@Param('id') id: string) {
|
||||
return this.catsService.delete(id);
|
||||
|
||||
@@ -1,31 +1,21 @@
|
||||
import { getModelToken } from '@nestjs/mongoose';
|
||||
import { Test, TestingModule } from '@nestjs/testing';
|
||||
import { Model } from 'mongoose';
|
||||
import { Model, Types } from 'mongoose';
|
||||
import { CatsService } from './cats.service';
|
||||
import { CreateCatDto } from './dto/create-cat.dto';
|
||||
import { Cat } from './schemas/cat.schema';
|
||||
|
||||
const mockCat = {
|
||||
name: 'Cat #1',
|
||||
breed: 'Breed #1',
|
||||
age: 4,
|
||||
const catModelMock = {
|
||||
create: jest.fn(),
|
||||
find: jest.fn(),
|
||||
findOne: jest.fn(),
|
||||
findByIdAndUpdate: jest.fn(),
|
||||
findByIdAndRemove: jest.fn(),
|
||||
};
|
||||
|
||||
describe('CatsService', () => {
|
||||
let service: CatsService;
|
||||
let model: Model<Cat>;
|
||||
|
||||
const catsArray = [
|
||||
{
|
||||
name: 'Cat #1',
|
||||
breed: 'Breed #1',
|
||||
age: 4,
|
||||
},
|
||||
{
|
||||
name: 'Cat #2',
|
||||
breed: 'Breed #2',
|
||||
age: 2,
|
||||
},
|
||||
];
|
||||
let model: jest.Mocked<Model<Cat>>;
|
||||
|
||||
beforeEach(async () => {
|
||||
const module: TestingModule = await Test.createTestingModule({
|
||||
@@ -33,46 +23,128 @@ describe('CatsService', () => {
|
||||
CatsService,
|
||||
{
|
||||
provide: getModelToken('Cat'),
|
||||
useValue: {
|
||||
new: jest.fn().mockResolvedValue(mockCat),
|
||||
constructor: jest.fn().mockResolvedValue(mockCat),
|
||||
find: jest.fn(),
|
||||
create: jest.fn(),
|
||||
exec: jest.fn(),
|
||||
},
|
||||
useValue: catModelMock,
|
||||
},
|
||||
],
|
||||
}).compile();
|
||||
|
||||
service = module.get<CatsService>(CatsService);
|
||||
model = module.get<Model<Cat>>(getModelToken('Cat'));
|
||||
service = module.get(CatsService);
|
||||
model = module.get(getModelToken('Cat'));
|
||||
});
|
||||
|
||||
it('should be defined', () => {
|
||||
expect(service).toBeDefined();
|
||||
});
|
||||
|
||||
it('should return all cats', async () => {
|
||||
jest.spyOn(model, 'find').mockReturnValue({
|
||||
exec: jest.fn().mockResolvedValueOnce(catsArray),
|
||||
} as any);
|
||||
const cats = await service.findAll();
|
||||
expect(cats).toEqual(catsArray);
|
||||
});
|
||||
|
||||
it('should insert a new cat', async () => {
|
||||
jest.spyOn(model, 'create').mockImplementationOnce(() =>
|
||||
Promise.resolve({
|
||||
describe('create', () => {
|
||||
it('should insert a new cat', async () => {
|
||||
const mockedCat: CreateCatDto = {
|
||||
name: 'Cat #1',
|
||||
breed: 'Breed #1',
|
||||
age: 4,
|
||||
} as any),
|
||||
);
|
||||
const newCat = await service.create({
|
||||
name: 'Cat #1',
|
||||
breed: 'Breed #1',
|
||||
age: 4,
|
||||
};
|
||||
model.create.mockResolvedValueOnce(mockedCat as any);
|
||||
|
||||
const createCatDto = {
|
||||
name: 'Cat #1',
|
||||
breed: 'Breed #1',
|
||||
age: 4,
|
||||
};
|
||||
const result = await service.create(createCatDto);
|
||||
|
||||
expect(result).toEqual(mockedCat);
|
||||
expect(model.create).toHaveBeenCalledWith(createCatDto);
|
||||
});
|
||||
});
|
||||
|
||||
describe('findAll', () => {
|
||||
it('should return all cats', async () => {
|
||||
const mockedCats = [
|
||||
{
|
||||
name: 'Cat #1',
|
||||
breed: 'Breed #1',
|
||||
age: 4,
|
||||
},
|
||||
{
|
||||
name: 'Cat #2',
|
||||
breed: 'Breed #2',
|
||||
age: 2,
|
||||
},
|
||||
];
|
||||
model.find.mockReturnValueOnce({
|
||||
exec: jest.fn().mockResolvedValueOnce(mockedCats),
|
||||
} as any);
|
||||
|
||||
const result = await service.findAll();
|
||||
|
||||
expect(result).toEqual(mockedCats);
|
||||
expect(model.find).toHaveBeenCalled();
|
||||
});
|
||||
});
|
||||
|
||||
describe('findOne', () => {
|
||||
it('should return one cat', async () => {
|
||||
const mockedCat = {
|
||||
name: 'Cat #1',
|
||||
breed: 'Breed #1',
|
||||
age: 4,
|
||||
};
|
||||
model.findOne.mockReturnValueOnce({
|
||||
exec: jest.fn().mockResolvedValueOnce(mockedCat),
|
||||
} as any);
|
||||
|
||||
const id = new Types.ObjectId().toString();
|
||||
const result = await service.findOne(id);
|
||||
|
||||
expect(result).toEqual(mockedCat);
|
||||
expect(model.findOne).toHaveBeenCalledWith({ _id: id });
|
||||
});
|
||||
});
|
||||
|
||||
describe('update', () => {
|
||||
it('should update a cat', async () => {
|
||||
const mockedCat = {
|
||||
name: 'Cat #1',
|
||||
breed: 'Breed #1',
|
||||
age: 4,
|
||||
};
|
||||
model.findByIdAndUpdate.mockReturnValueOnce({
|
||||
exec: jest.fn().mockResolvedValueOnce(mockedCat),
|
||||
} as any);
|
||||
|
||||
const id = new Types.ObjectId().toString();
|
||||
const updateCatDto = {
|
||||
name: 'Cat #1',
|
||||
breed: 'Breed #1',
|
||||
age: 4,
|
||||
};
|
||||
const result = await service.update(id, updateCatDto);
|
||||
|
||||
expect(result).toEqual(mockedCat);
|
||||
expect(model.findByIdAndUpdate).toHaveBeenCalledWith(
|
||||
{ _id: id },
|
||||
updateCatDto,
|
||||
{ new: true },
|
||||
);
|
||||
});
|
||||
});
|
||||
|
||||
describe('delete', () => {
|
||||
it('should delete a cat', async () => {
|
||||
const mockedCat = {
|
||||
name: 'Cat #1',
|
||||
breed: 'Breed #1',
|
||||
age: 4,
|
||||
};
|
||||
model.findByIdAndRemove.mockReturnValueOnce({
|
||||
exec: jest.fn().mockResolvedValueOnce(mockedCat),
|
||||
} as any);
|
||||
|
||||
const id = new Types.ObjectId().toString();
|
||||
const result = await service.delete(id);
|
||||
|
||||
expect(result).toEqual(mockedCat);
|
||||
expect(model.findByIdAndRemove).toHaveBeenCalledWith({ _id: id });
|
||||
});
|
||||
expect(newCat).toEqual(mockCat);
|
||||
});
|
||||
});
|
||||
|
||||
@@ -3,6 +3,7 @@ import { InjectModel } from '@nestjs/mongoose';
|
||||
import { Model } from 'mongoose';
|
||||
import { CreateCatDto } from './dto/create-cat.dto';
|
||||
import { Cat } from './schemas/cat.schema';
|
||||
import { UpdateCatDto } from './dto/update-cat.dto';
|
||||
|
||||
@Injectable()
|
||||
export class CatsService {
|
||||
@@ -21,7 +22,13 @@ export class CatsService {
|
||||
return this.catModel.findOne({ _id: id }).exec();
|
||||
}
|
||||
|
||||
async delete(id: string) {
|
||||
async update(id: string, updateCatDto: UpdateCatDto): Promise<Cat> {
|
||||
return this.catModel
|
||||
.findByIdAndUpdate({ _id: id }, updateCatDto, { new: true })
|
||||
.exec();
|
||||
}
|
||||
|
||||
async delete(id: string): Promise<Cat> {
|
||||
const deletedCat = await this.catModel
|
||||
.findByIdAndRemove({ _id: id })
|
||||
.exec();
|
||||
|
||||
5
sample/06-mongoose/src/cats/dto/update-cat.dto.ts
Normal file
5
sample/06-mongoose/src/cats/dto/update-cat.dto.ts
Normal file
@@ -0,0 +1,5 @@
|
||||
export class UpdateCatDto {
|
||||
readonly name?: string;
|
||||
readonly age?: number;
|
||||
readonly breed?: string;
|
||||
}
|
||||
@@ -23,7 +23,7 @@
|
||||
"@nestjs/core": "10.3.2",
|
||||
"@nestjs/platform-express": "10.3.8",
|
||||
"@nestjs/sequelize": "10.0.0",
|
||||
"mysql2": "3.9.7",
|
||||
"mysql2": "3.9.8",
|
||||
"reflect-metadata": "0.2.1",
|
||||
"rimraf": "5.0.5",
|
||||
"rxjs": "7.8.1",
|
||||
@@ -37,8 +37,8 @@
|
||||
"@nestjs/testing": "10.3.2",
|
||||
"@types/express": "4.17.21",
|
||||
"@types/jest": "29.5.12",
|
||||
"@types/node": "20.8.7",
|
||||
"@types/supertest": "2.0.16",
|
||||
"@types/node": "20.17.6",
|
||||
"@types/supertest": "6.0.2",
|
||||
"@typescript-eslint/eslint-plugin": "5.62.0",
|
||||
"@typescript-eslint/parser": "5.62.0",
|
||||
"eslint": "8.42.0",
|
||||
@@ -46,7 +46,7 @@
|
||||
"eslint-plugin-import": "2.29.1",
|
||||
"jest": "29.7.0",
|
||||
"prettier": "3.2.5",
|
||||
"supertest": "6.3.3",
|
||||
"supertest": "6.3.4",
|
||||
"ts-jest": "29.1.2",
|
||||
"ts-loader": "9.5.1",
|
||||
"ts-node": "10.9.2",
|
||||
|
||||
30
sample/08-webpack/package-lock.json
generated
30
sample/08-webpack/package-lock.json
generated
@@ -19,7 +19,7 @@
|
||||
"devDependencies": {
|
||||
"@nestjs/cli": "10.3.2",
|
||||
"@nestjs/schematics": "10.1.1",
|
||||
"@types/node": "20.8.7",
|
||||
"@types/node": "20.17.6",
|
||||
"@typescript-eslint/eslint-plugin": "5.62.0",
|
||||
"@typescript-eslint/parser": "5.62.0",
|
||||
"eslint": "8.42.0",
|
||||
@@ -1213,12 +1213,12 @@
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/@types/node": {
|
||||
"version": "20.8.7",
|
||||
"resolved": "https://registry.npmjs.org/@types/node/-/node-20.8.7.tgz",
|
||||
"integrity": "sha512-21TKHHh3eUHIi2MloeptJWALuCu5H7HQTdTrWIFReA8ad+aggoX+lRes3ex7/FtpC+sVUpFMQ+QTfYr74mruiQ==",
|
||||
"version": "20.17.6",
|
||||
"resolved": "https://registry.npmjs.org/@types/node/-/node-20.17.6.tgz",
|
||||
"integrity": "sha512-VEI7OdvK2wP7XHnsuXbAJnEpEkF6NjSN45QJlL4VGqZSXsnicpesdTWsg9RISeSdYd3yeRj/y3k5KGjUXYnFwQ==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"undici-types": "~5.25.1"
|
||||
"undici-types": "~6.19.2"
|
||||
}
|
||||
},
|
||||
"node_modules/@types/semver": {
|
||||
@@ -6462,9 +6462,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/undici-types": {
|
||||
"version": "5.25.3",
|
||||
"resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.25.3.tgz",
|
||||
"integrity": "sha512-Ga1jfYwRn7+cP9v8auvEXN1rX3sWqlayd4HP7OKk4mZWylEmu3KzXDUGrQUN6Ol7qo1gPvB2e5gX6udnyEPgdA==",
|
||||
"version": "6.19.8",
|
||||
"resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz",
|
||||
"integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==",
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/universalify": {
|
||||
@@ -7714,12 +7714,12 @@
|
||||
"dev": true
|
||||
},
|
||||
"@types/node": {
|
||||
"version": "20.8.7",
|
||||
"resolved": "https://registry.npmjs.org/@types/node/-/node-20.8.7.tgz",
|
||||
"integrity": "sha512-21TKHHh3eUHIi2MloeptJWALuCu5H7HQTdTrWIFReA8ad+aggoX+lRes3ex7/FtpC+sVUpFMQ+QTfYr74mruiQ==",
|
||||
"version": "20.17.6",
|
||||
"resolved": "https://registry.npmjs.org/@types/node/-/node-20.17.6.tgz",
|
||||
"integrity": "sha512-VEI7OdvK2wP7XHnsuXbAJnEpEkF6NjSN45QJlL4VGqZSXsnicpesdTWsg9RISeSdYd3yeRj/y3k5KGjUXYnFwQ==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"undici-types": "~5.25.1"
|
||||
"undici-types": "~6.19.2"
|
||||
}
|
||||
},
|
||||
"@types/semver": {
|
||||
@@ -11527,9 +11527,9 @@
|
||||
}
|
||||
},
|
||||
"undici-types": {
|
||||
"version": "5.25.3",
|
||||
"resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.25.3.tgz",
|
||||
"integrity": "sha512-Ga1jfYwRn7+cP9v8auvEXN1rX3sWqlayd4HP7OKk4mZWylEmu3KzXDUGrQUN6Ol7qo1gPvB2e5gX6udnyEPgdA==",
|
||||
"version": "6.19.8",
|
||||
"resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz",
|
||||
"integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==",
|
||||
"dev": true
|
||||
},
|
||||
"universalify": {
|
||||
|
||||
@@ -22,7 +22,7 @@
|
||||
"devDependencies": {
|
||||
"@nestjs/cli": "10.3.2",
|
||||
"@nestjs/schematics": "10.1.1",
|
||||
"@types/node": "20.8.7",
|
||||
"@types/node": "20.17.6",
|
||||
"@typescript-eslint/eslint-plugin": "5.62.0",
|
||||
"@typescript-eslint/parser": "5.62.0",
|
||||
"eslint": "8.42.0",
|
||||
|
||||
31
sample/09-babel-example/package-lock.json
generated
31
sample/09-babel-example/package-lock.json
generated
@@ -30,7 +30,7 @@
|
||||
"jest": "29.7.0",
|
||||
"nodemon": "3.0.3",
|
||||
"prettier": "3.2.5",
|
||||
"supertest": "6.3.3"
|
||||
"supertest": "6.3.4"
|
||||
}
|
||||
},
|
||||
"node_modules/@ampproject/remapping": {
|
||||
@@ -8319,9 +8319,10 @@
|
||||
}
|
||||
},
|
||||
"node_modules/superagent": {
|
||||
"version": "8.0.9",
|
||||
"resolved": "https://registry.npmjs.org/superagent/-/superagent-8.0.9.tgz",
|
||||
"integrity": "sha512-4C7Bh5pyHTvU33KpZgwrNKh/VQnvgtCSqPRfJAUdmrtSYePVzVg4E4OzsrbkhJj9O7SO6Bnv75K/F8XVZT8YHA==",
|
||||
"version": "8.1.2",
|
||||
"resolved": "https://registry.npmjs.org/superagent/-/superagent-8.1.2.tgz",
|
||||
"integrity": "sha512-6WTxW1EB6yCxV5VFOIPQruWGHqc3yI7hEmZK6h+pyk69Lk/Ut7rLUY6W/ONF2MjBuGjvmMiIpsrVJ2vjrHlslA==",
|
||||
"deprecated": "Please upgrade to v9.0.0+ as we have fixed a public vulnerability with formidable dependency. Note that v9.0.0+ requires Node.js v14.18.0+. See https://github.com/ladjs/superagent/pull/1800 for insight. This project is supported and maintained by the team at Forward Email @ https://forwardemail.net",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"component-emitter": "^1.3.0",
|
||||
@@ -8367,13 +8368,13 @@
|
||||
}
|
||||
},
|
||||
"node_modules/supertest": {
|
||||
"version": "6.3.3",
|
||||
"resolved": "https://registry.npmjs.org/supertest/-/supertest-6.3.3.tgz",
|
||||
"integrity": "sha512-EMCG6G8gDu5qEqRQ3JjjPs6+FYT1a7Hv5ApHvtSghmOFJYtsU5S+pSb6Y2EUeCEY3CmEL3mmQ8YWlPOzQomabA==",
|
||||
"version": "6.3.4",
|
||||
"resolved": "https://registry.npmjs.org/supertest/-/supertest-6.3.4.tgz",
|
||||
"integrity": "sha512-erY3HFDG0dPnhw4U+udPfrzXa4xhSG+n4rxfRuZWCUvjFWwKl+OxWf/7zk50s84/fAAs7vf5QAb9uRa0cCykxw==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"methods": "^1.1.2",
|
||||
"superagent": "^8.0.5"
|
||||
"superagent": "^8.1.2"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=6.4.0"
|
||||
@@ -14847,9 +14848,9 @@
|
||||
"dev": true
|
||||
},
|
||||
"superagent": {
|
||||
"version": "8.0.9",
|
||||
"resolved": "https://registry.npmjs.org/superagent/-/superagent-8.0.9.tgz",
|
||||
"integrity": "sha512-4C7Bh5pyHTvU33KpZgwrNKh/VQnvgtCSqPRfJAUdmrtSYePVzVg4E4OzsrbkhJj9O7SO6Bnv75K/F8XVZT8YHA==",
|
||||
"version": "8.1.2",
|
||||
"resolved": "https://registry.npmjs.org/superagent/-/superagent-8.1.2.tgz",
|
||||
"integrity": "sha512-6WTxW1EB6yCxV5VFOIPQruWGHqc3yI7hEmZK6h+pyk69Lk/Ut7rLUY6W/ONF2MjBuGjvmMiIpsrVJ2vjrHlslA==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"component-emitter": "^1.3.0",
|
||||
@@ -14882,13 +14883,13 @@
|
||||
}
|
||||
},
|
||||
"supertest": {
|
||||
"version": "6.3.3",
|
||||
"resolved": "https://registry.npmjs.org/supertest/-/supertest-6.3.3.tgz",
|
||||
"integrity": "sha512-EMCG6G8gDu5qEqRQ3JjjPs6+FYT1a7Hv5ApHvtSghmOFJYtsU5S+pSb6Y2EUeCEY3CmEL3mmQ8YWlPOzQomabA==",
|
||||
"version": "6.3.4",
|
||||
"resolved": "https://registry.npmjs.org/supertest/-/supertest-6.3.4.tgz",
|
||||
"integrity": "sha512-erY3HFDG0dPnhw4U+udPfrzXa4xhSG+n4rxfRuZWCUvjFWwKl+OxWf/7zk50s84/fAAs7vf5QAb9uRa0cCykxw==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"methods": "^1.1.2",
|
||||
"superagent": "^8.0.5"
|
||||
"superagent": "^8.1.2"
|
||||
}
|
||||
},
|
||||
"supports-color": {
|
||||
|
||||
@@ -34,7 +34,7 @@
|
||||
"jest": "29.7.0",
|
||||
"nodemon": "3.0.3",
|
||||
"prettier": "3.2.5",
|
||||
"supertest": "6.3.3"
|
||||
"supertest": "6.3.4"
|
||||
},
|
||||
"jest": {
|
||||
"moduleFileExtensions": [
|
||||
|
||||
175
sample/10-fastify/package-lock.json
generated
175
sample/10-fastify/package-lock.json
generated
@@ -23,8 +23,8 @@
|
||||
"@nestjs/schematics": "10.1.1",
|
||||
"@nestjs/testing": "10.3.2",
|
||||
"@types/express": "4.17.21",
|
||||
"@types/node": "20.8.7",
|
||||
"@types/supertest": "2.0.16",
|
||||
"@types/node": "20.17.6",
|
||||
"@types/supertest": "6.0.2",
|
||||
"@typescript-eslint/eslint-plugin": "5.62.0",
|
||||
"@typescript-eslint/parser": "5.62.0",
|
||||
"eslint": "8.42.0",
|
||||
@@ -32,7 +32,7 @@
|
||||
"eslint-plugin-import": "2.29.1",
|
||||
"jest": "29.7.0",
|
||||
"prettier": "3.2.5",
|
||||
"supertest": "6.3.3",
|
||||
"supertest": "6.3.4",
|
||||
"ts-jest": "29.1.2",
|
||||
"ts-loader": "9.5.1",
|
||||
"ts-node": "10.9.2",
|
||||
@@ -2210,9 +2210,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@types/cookiejar": {
|
||||
"version": "2.1.2",
|
||||
"resolved": "https://registry.npmjs.org/@types/cookiejar/-/cookiejar-2.1.2.tgz",
|
||||
"integrity": "sha512-t73xJJrvdTjXrn4jLS9VSGRbz0nUY3cl2DMGDU48lKl+HR9dbbjW2A9r3g40VA++mQpy6uuHg33gy7du2BKpog==",
|
||||
"version": "2.1.5",
|
||||
"resolved": "https://registry.npmjs.org/@types/cookiejar/-/cookiejar-2.1.5.tgz",
|
||||
"integrity": "sha512-he+DHOWReW0nghN24E1WUqM0efK4kI9oTqDm6XmK8ZPe2djZ90BSNdGnIyCLzCPw7/pogPlGbzI2wHGGmi4O/Q==",
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/@types/eslint": {
|
||||
@@ -2310,6 +2310,12 @@
|
||||
"integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==",
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/@types/methods": {
|
||||
"version": "1.1.4",
|
||||
"resolved": "https://registry.npmjs.org/@types/methods/-/methods-1.1.4.tgz",
|
||||
"integrity": "sha512-ymXWVrDiCxTBE3+RIrrP533E70eA+9qu7zdWoHuOmGujkYtzf4HQF96b8nwHLqhuf4ykX61IGRIB38CC6/sImQ==",
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/@types/mime": {
|
||||
"version": "1.3.2",
|
||||
"resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.2.tgz",
|
||||
@@ -2317,12 +2323,12 @@
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/@types/node": {
|
||||
"version": "20.8.7",
|
||||
"resolved": "https://registry.npmjs.org/@types/node/-/node-20.8.7.tgz",
|
||||
"integrity": "sha512-21TKHHh3eUHIi2MloeptJWALuCu5H7HQTdTrWIFReA8ad+aggoX+lRes3ex7/FtpC+sVUpFMQ+QTfYr74mruiQ==",
|
||||
"version": "20.17.6",
|
||||
"resolved": "https://registry.npmjs.org/@types/node/-/node-20.17.6.tgz",
|
||||
"integrity": "sha512-VEI7OdvK2wP7XHnsuXbAJnEpEkF6NjSN45QJlL4VGqZSXsnicpesdTWsg9RISeSdYd3yeRj/y3k5KGjUXYnFwQ==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"undici-types": "~5.25.1"
|
||||
"undici-types": "~6.19.2"
|
||||
}
|
||||
},
|
||||
"node_modules/@types/qs": {
|
||||
@@ -2370,22 +2376,25 @@
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/@types/superagent": {
|
||||
"version": "4.1.10",
|
||||
"resolved": "https://registry.npmjs.org/@types/superagent/-/superagent-4.1.10.tgz",
|
||||
"integrity": "sha512-xAgkb2CMWUMCyVc/3+7iQfOEBE75NvuZeezvmixbUw3nmENf2tCnQkW5yQLTYqvXUQ+R6EXxdqKKbal2zM5V/g==",
|
||||
"version": "8.1.9",
|
||||
"resolved": "https://registry.npmjs.org/@types/superagent/-/superagent-8.1.9.tgz",
|
||||
"integrity": "sha512-pTVjI73witn+9ILmoJdajHGW2jkSaOzhiFYF1Rd3EQ94kymLqB9PjD9ISg7WaALC7+dCHT0FGe9T2LktLq/3GQ==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"@types/cookiejar": "*",
|
||||
"@types/node": "*"
|
||||
"@types/cookiejar": "^2.1.5",
|
||||
"@types/methods": "^1.1.4",
|
||||
"@types/node": "*",
|
||||
"form-data": "^4.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@types/supertest": {
|
||||
"version": "2.0.16",
|
||||
"resolved": "https://registry.npmjs.org/@types/supertest/-/supertest-2.0.16.tgz",
|
||||
"integrity": "sha512-6c2ogktZ06tr2ENoZivgm7YnprnhYE4ZoXGMY+oA7IuAf17M8FWvujXZGmxLv8y0PTyts4x5A+erSwVUFA8XSg==",
|
||||
"version": "6.0.2",
|
||||
"resolved": "https://registry.npmjs.org/@types/supertest/-/supertest-6.0.2.tgz",
|
||||
"integrity": "sha512-137ypx2lk/wTQbW6An6safu9hXmajAifU/s7szAHLN/FeIm5w7yR0Wkl9fdJMRSHwOn4HLAI0DaB2TOORuhPDg==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"@types/superagent": "*"
|
||||
"@types/methods": "^1.1.4",
|
||||
"@types/superagent": "^8.1.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@types/validator": {
|
||||
@@ -4664,13 +4673,13 @@
|
||||
}
|
||||
},
|
||||
"node_modules/find-my-way": {
|
||||
"version": "8.1.0",
|
||||
"resolved": "https://registry.npmjs.org/find-my-way/-/find-my-way-8.1.0.tgz",
|
||||
"integrity": "sha512-41QwjCGcVTODUmLLqTMeoHeiozbMXYMAE1CKFiDyi9zVZ2Vjh0yz3MF0WQZoIb+cmzP/XlbFjlF2NtJmvZHznA==",
|
||||
"version": "8.2.2",
|
||||
"resolved": "https://registry.npmjs.org/find-my-way/-/find-my-way-8.2.2.tgz",
|
||||
"integrity": "sha512-Dobi7gcTEq8yszimcfp/R7+owiT4WncAJ7VTTgFH1jYJ5GaG1FbhjwDG820hptN0QDFvzVY3RfCzdInvGPGzjA==",
|
||||
"dependencies": {
|
||||
"fast-deep-equal": "^3.1.3",
|
||||
"fast-querystring": "^1.0.0",
|
||||
"safe-regex2": "^2.0.0"
|
||||
"safe-regex2": "^3.1.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=14"
|
||||
@@ -7690,11 +7699,11 @@
|
||||
}
|
||||
},
|
||||
"node_modules/ret": {
|
||||
"version": "0.2.2",
|
||||
"resolved": "https://registry.npmjs.org/ret/-/ret-0.2.2.tgz",
|
||||
"integrity": "sha512-M0b3YWQs7R3Z917WRQy1HHA7Ba7D8hvZg6UE5mLykJxQVE2ju0IXbGlaHPPlkY+WN7wFP+wUMXmBFA0aV6vYGQ==",
|
||||
"version": "0.4.3",
|
||||
"resolved": "https://registry.npmjs.org/ret/-/ret-0.4.3.tgz",
|
||||
"integrity": "sha512-0f4Memo5QP7WQyUEAYUO3esD/XjOc3Zjjg5CPsAq1p8sIu0XPeMbHJemKA0BO7tV0X7+A0FoEpbmHXWxPyD3wQ==",
|
||||
"engines": {
|
||||
"node": ">=4"
|
||||
"node": ">=10"
|
||||
}
|
||||
},
|
||||
"node_modules/reusify": {
|
||||
@@ -7855,11 +7864,11 @@
|
||||
}
|
||||
},
|
||||
"node_modules/safe-regex2": {
|
||||
"version": "2.0.0",
|
||||
"resolved": "https://registry.npmjs.org/safe-regex2/-/safe-regex2-2.0.0.tgz",
|
||||
"integrity": "sha512-PaUSFsUaNNuKwkBijoAPHAK6/eM6VirvyPWlZ7BAQy4D+hCvh4B6lIG+nPdhbFfIbP+gTGBcrdsOaUs0F+ZBOQ==",
|
||||
"version": "3.1.0",
|
||||
"resolved": "https://registry.npmjs.org/safe-regex2/-/safe-regex2-3.1.0.tgz",
|
||||
"integrity": "sha512-RAAZAGbap2kBfbVhvmnTFv73NWLMvDGOITFYTZBAaY8eR+Ir4ef7Up/e7amo+y1+AH+3PtLkrt9mvcTsG9LXug==",
|
||||
"dependencies": {
|
||||
"ret": "~0.2.0"
|
||||
"ret": "~0.4.0"
|
||||
}
|
||||
},
|
||||
"node_modules/safe-stable-stringify": {
|
||||
@@ -8296,9 +8305,10 @@
|
||||
}
|
||||
},
|
||||
"node_modules/superagent": {
|
||||
"version": "8.0.9",
|
||||
"resolved": "https://registry.npmjs.org/superagent/-/superagent-8.0.9.tgz",
|
||||
"integrity": "sha512-4C7Bh5pyHTvU33KpZgwrNKh/VQnvgtCSqPRfJAUdmrtSYePVzVg4E4OzsrbkhJj9O7SO6Bnv75K/F8XVZT8YHA==",
|
||||
"version": "8.1.2",
|
||||
"resolved": "https://registry.npmjs.org/superagent/-/superagent-8.1.2.tgz",
|
||||
"integrity": "sha512-6WTxW1EB6yCxV5VFOIPQruWGHqc3yI7hEmZK6h+pyk69Lk/Ut7rLUY6W/ONF2MjBuGjvmMiIpsrVJ2vjrHlslA==",
|
||||
"deprecated": "Please upgrade to v9.0.0+ as we have fixed a public vulnerability with formidable dependency. Note that v9.0.0+ requires Node.js v14.18.0+. See https://github.com/ladjs/superagent/pull/1800 for insight. This project is supported and maintained by the team at Forward Email @ https://forwardemail.net",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"component-emitter": "^1.3.0",
|
||||
@@ -8317,13 +8327,13 @@
|
||||
}
|
||||
},
|
||||
"node_modules/supertest": {
|
||||
"version": "6.3.3",
|
||||
"resolved": "https://registry.npmjs.org/supertest/-/supertest-6.3.3.tgz",
|
||||
"integrity": "sha512-EMCG6G8gDu5qEqRQ3JjjPs6+FYT1a7Hv5ApHvtSghmOFJYtsU5S+pSb6Y2EUeCEY3CmEL3mmQ8YWlPOzQomabA==",
|
||||
"version": "6.3.4",
|
||||
"resolved": "https://registry.npmjs.org/supertest/-/supertest-6.3.4.tgz",
|
||||
"integrity": "sha512-erY3HFDG0dPnhw4U+udPfrzXa4xhSG+n4rxfRuZWCUvjFWwKl+OxWf/7zk50s84/fAAs7vf5QAb9uRa0cCykxw==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"methods": "^1.1.2",
|
||||
"superagent": "^8.0.5"
|
||||
"superagent": "^8.1.2"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=6.4.0"
|
||||
@@ -8859,9 +8869,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/undici-types": {
|
||||
"version": "5.25.3",
|
||||
"resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.25.3.tgz",
|
||||
"integrity": "sha512-Ga1jfYwRn7+cP9v8auvEXN1rX3sWqlayd4HP7OKk4mZWylEmu3KzXDUGrQUN6Ol7qo1gPvB2e5gX6udnyEPgdA==",
|
||||
"version": "6.19.8",
|
||||
"resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz",
|
||||
"integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==",
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/universalify": {
|
||||
@@ -10861,9 +10871,9 @@
|
||||
}
|
||||
},
|
||||
"@types/cookiejar": {
|
||||
"version": "2.1.2",
|
||||
"resolved": "https://registry.npmjs.org/@types/cookiejar/-/cookiejar-2.1.2.tgz",
|
||||
"integrity": "sha512-t73xJJrvdTjXrn4jLS9VSGRbz0nUY3cl2DMGDU48lKl+HR9dbbjW2A9r3g40VA++mQpy6uuHg33gy7du2BKpog==",
|
||||
"version": "2.1.5",
|
||||
"resolved": "https://registry.npmjs.org/@types/cookiejar/-/cookiejar-2.1.5.tgz",
|
||||
"integrity": "sha512-he+DHOWReW0nghN24E1WUqM0efK4kI9oTqDm6XmK8ZPe2djZ90BSNdGnIyCLzCPw7/pogPlGbzI2wHGGmi4O/Q==",
|
||||
"dev": true
|
||||
},
|
||||
"@types/eslint": {
|
||||
@@ -10961,6 +10971,12 @@
|
||||
"integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==",
|
||||
"dev": true
|
||||
},
|
||||
"@types/methods": {
|
||||
"version": "1.1.4",
|
||||
"resolved": "https://registry.npmjs.org/@types/methods/-/methods-1.1.4.tgz",
|
||||
"integrity": "sha512-ymXWVrDiCxTBE3+RIrrP533E70eA+9qu7zdWoHuOmGujkYtzf4HQF96b8nwHLqhuf4ykX61IGRIB38CC6/sImQ==",
|
||||
"dev": true
|
||||
},
|
||||
"@types/mime": {
|
||||
"version": "1.3.2",
|
||||
"resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.2.tgz",
|
||||
@@ -10968,12 +10984,12 @@
|
||||
"dev": true
|
||||
},
|
||||
"@types/node": {
|
||||
"version": "20.8.7",
|
||||
"resolved": "https://registry.npmjs.org/@types/node/-/node-20.8.7.tgz",
|
||||
"integrity": "sha512-21TKHHh3eUHIi2MloeptJWALuCu5H7HQTdTrWIFReA8ad+aggoX+lRes3ex7/FtpC+sVUpFMQ+QTfYr74mruiQ==",
|
||||
"version": "20.17.6",
|
||||
"resolved": "https://registry.npmjs.org/@types/node/-/node-20.17.6.tgz",
|
||||
"integrity": "sha512-VEI7OdvK2wP7XHnsuXbAJnEpEkF6NjSN45QJlL4VGqZSXsnicpesdTWsg9RISeSdYd3yeRj/y3k5KGjUXYnFwQ==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"undici-types": "~5.25.1"
|
||||
"undici-types": "~6.19.2"
|
||||
}
|
||||
},
|
||||
"@types/qs": {
|
||||
@@ -11021,22 +11037,25 @@
|
||||
"dev": true
|
||||
},
|
||||
"@types/superagent": {
|
||||
"version": "4.1.10",
|
||||
"resolved": "https://registry.npmjs.org/@types/superagent/-/superagent-4.1.10.tgz",
|
||||
"integrity": "sha512-xAgkb2CMWUMCyVc/3+7iQfOEBE75NvuZeezvmixbUw3nmENf2tCnQkW5yQLTYqvXUQ+R6EXxdqKKbal2zM5V/g==",
|
||||
"version": "8.1.9",
|
||||
"resolved": "https://registry.npmjs.org/@types/superagent/-/superagent-8.1.9.tgz",
|
||||
"integrity": "sha512-pTVjI73witn+9ILmoJdajHGW2jkSaOzhiFYF1Rd3EQ94kymLqB9PjD9ISg7WaALC7+dCHT0FGe9T2LktLq/3GQ==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"@types/cookiejar": "*",
|
||||
"@types/node": "*"
|
||||
"@types/cookiejar": "^2.1.5",
|
||||
"@types/methods": "^1.1.4",
|
||||
"@types/node": "*",
|
||||
"form-data": "^4.0.0"
|
||||
}
|
||||
},
|
||||
"@types/supertest": {
|
||||
"version": "2.0.16",
|
||||
"resolved": "https://registry.npmjs.org/@types/supertest/-/supertest-2.0.16.tgz",
|
||||
"integrity": "sha512-6c2ogktZ06tr2ENoZivgm7YnprnhYE4ZoXGMY+oA7IuAf17M8FWvujXZGmxLv8y0PTyts4x5A+erSwVUFA8XSg==",
|
||||
"version": "6.0.2",
|
||||
"resolved": "https://registry.npmjs.org/@types/supertest/-/supertest-6.0.2.tgz",
|
||||
"integrity": "sha512-137ypx2lk/wTQbW6An6safu9hXmajAifU/s7szAHLN/FeIm5w7yR0Wkl9fdJMRSHwOn4HLAI0DaB2TOORuhPDg==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"@types/superagent": "*"
|
||||
"@types/methods": "^1.1.4",
|
||||
"@types/superagent": "^8.1.0"
|
||||
}
|
||||
},
|
||||
"@types/validator": {
|
||||
@@ -12745,13 +12764,13 @@
|
||||
}
|
||||
},
|
||||
"find-my-way": {
|
||||
"version": "8.1.0",
|
||||
"resolved": "https://registry.npmjs.org/find-my-way/-/find-my-way-8.1.0.tgz",
|
||||
"integrity": "sha512-41QwjCGcVTODUmLLqTMeoHeiozbMXYMAE1CKFiDyi9zVZ2Vjh0yz3MF0WQZoIb+cmzP/XlbFjlF2NtJmvZHznA==",
|
||||
"version": "8.2.2",
|
||||
"resolved": "https://registry.npmjs.org/find-my-way/-/find-my-way-8.2.2.tgz",
|
||||
"integrity": "sha512-Dobi7gcTEq8yszimcfp/R7+owiT4WncAJ7VTTgFH1jYJ5GaG1FbhjwDG820hptN0QDFvzVY3RfCzdInvGPGzjA==",
|
||||
"requires": {
|
||||
"fast-deep-equal": "^3.1.3",
|
||||
"fast-querystring": "^1.0.0",
|
||||
"safe-regex2": "^2.0.0"
|
||||
"safe-regex2": "^3.1.0"
|
||||
}
|
||||
},
|
||||
"find-up": {
|
||||
@@ -14964,9 +14983,9 @@
|
||||
}
|
||||
},
|
||||
"ret": {
|
||||
"version": "0.2.2",
|
||||
"resolved": "https://registry.npmjs.org/ret/-/ret-0.2.2.tgz",
|
||||
"integrity": "sha512-M0b3YWQs7R3Z917WRQy1HHA7Ba7D8hvZg6UE5mLykJxQVE2ju0IXbGlaHPPlkY+WN7wFP+wUMXmBFA0aV6vYGQ=="
|
||||
"version": "0.4.3",
|
||||
"resolved": "https://registry.npmjs.org/ret/-/ret-0.4.3.tgz",
|
||||
"integrity": "sha512-0f4Memo5QP7WQyUEAYUO3esD/XjOc3Zjjg5CPsAq1p8sIu0XPeMbHJemKA0BO7tV0X7+A0FoEpbmHXWxPyD3wQ=="
|
||||
},
|
||||
"reusify": {
|
||||
"version": "1.0.4",
|
||||
@@ -15076,11 +15095,11 @@
|
||||
}
|
||||
},
|
||||
"safe-regex2": {
|
||||
"version": "2.0.0",
|
||||
"resolved": "https://registry.npmjs.org/safe-regex2/-/safe-regex2-2.0.0.tgz",
|
||||
"integrity": "sha512-PaUSFsUaNNuKwkBijoAPHAK6/eM6VirvyPWlZ7BAQy4D+hCvh4B6lIG+nPdhbFfIbP+gTGBcrdsOaUs0F+ZBOQ==",
|
||||
"version": "3.1.0",
|
||||
"resolved": "https://registry.npmjs.org/safe-regex2/-/safe-regex2-3.1.0.tgz",
|
||||
"integrity": "sha512-RAAZAGbap2kBfbVhvmnTFv73NWLMvDGOITFYTZBAaY8eR+Ir4ef7Up/e7amo+y1+AH+3PtLkrt9mvcTsG9LXug==",
|
||||
"requires": {
|
||||
"ret": "~0.2.0"
|
||||
"ret": "~0.4.0"
|
||||
}
|
||||
},
|
||||
"safe-stable-stringify": {
|
||||
@@ -15409,9 +15428,9 @@
|
||||
"dev": true
|
||||
},
|
||||
"superagent": {
|
||||
"version": "8.0.9",
|
||||
"resolved": "https://registry.npmjs.org/superagent/-/superagent-8.0.9.tgz",
|
||||
"integrity": "sha512-4C7Bh5pyHTvU33KpZgwrNKh/VQnvgtCSqPRfJAUdmrtSYePVzVg4E4OzsrbkhJj9O7SO6Bnv75K/F8XVZT8YHA==",
|
||||
"version": "8.1.2",
|
||||
"resolved": "https://registry.npmjs.org/superagent/-/superagent-8.1.2.tgz",
|
||||
"integrity": "sha512-6WTxW1EB6yCxV5VFOIPQruWGHqc3yI7hEmZK6h+pyk69Lk/Ut7rLUY6W/ONF2MjBuGjvmMiIpsrVJ2vjrHlslA==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"component-emitter": "^1.3.0",
|
||||
@@ -15427,13 +15446,13 @@
|
||||
}
|
||||
},
|
||||
"supertest": {
|
||||
"version": "6.3.3",
|
||||
"resolved": "https://registry.npmjs.org/supertest/-/supertest-6.3.3.tgz",
|
||||
"integrity": "sha512-EMCG6G8gDu5qEqRQ3JjjPs6+FYT1a7Hv5ApHvtSghmOFJYtsU5S+pSb6Y2EUeCEY3CmEL3mmQ8YWlPOzQomabA==",
|
||||
"version": "6.3.4",
|
||||
"resolved": "https://registry.npmjs.org/supertest/-/supertest-6.3.4.tgz",
|
||||
"integrity": "sha512-erY3HFDG0dPnhw4U+udPfrzXa4xhSG+n4rxfRuZWCUvjFWwKl+OxWf/7zk50s84/fAAs7vf5QAb9uRa0cCykxw==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"methods": "^1.1.2",
|
||||
"superagent": "^8.0.5"
|
||||
"superagent": "^8.1.2"
|
||||
}
|
||||
},
|
||||
"supports-color": {
|
||||
@@ -15787,9 +15806,9 @@
|
||||
}
|
||||
},
|
||||
"undici-types": {
|
||||
"version": "5.25.3",
|
||||
"resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.25.3.tgz",
|
||||
"integrity": "sha512-Ga1jfYwRn7+cP9v8auvEXN1rX3sWqlayd4HP7OKk4mZWylEmu3KzXDUGrQUN6Ol7qo1gPvB2e5gX6udnyEPgdA==",
|
||||
"version": "6.19.8",
|
||||
"resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz",
|
||||
"integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==",
|
||||
"dev": true
|
||||
},
|
||||
"universalify": {
|
||||
|
||||
@@ -33,8 +33,8 @@
|
||||
"@nestjs/schematics": "10.1.1",
|
||||
"@nestjs/testing": "10.3.2",
|
||||
"@types/express": "4.17.21",
|
||||
"@types/node": "20.8.7",
|
||||
"@types/supertest": "2.0.16",
|
||||
"@types/node": "20.17.6",
|
||||
"@types/supertest": "6.0.2",
|
||||
"@typescript-eslint/eslint-plugin": "5.62.0",
|
||||
"@typescript-eslint/parser": "5.62.0",
|
||||
"eslint": "8.42.0",
|
||||
@@ -42,7 +42,7 @@
|
||||
"eslint-plugin-import": "2.29.1",
|
||||
"jest": "29.7.0",
|
||||
"prettier": "3.2.5",
|
||||
"supertest": "6.3.3",
|
||||
"supertest": "6.3.4",
|
||||
"ts-jest": "29.1.2",
|
||||
"ts-loader": "9.5.1",
|
||||
"ts-node": "10.9.2",
|
||||
|
||||
243
sample/11-swagger/package-lock.json
generated
243
sample/11-swagger/package-lock.json
generated
@@ -12,7 +12,7 @@
|
||||
"@nestjs/common": "10.3.2",
|
||||
"@nestjs/core": "10.3.2",
|
||||
"@nestjs/platform-express": "10.3.8",
|
||||
"@nestjs/swagger": "7.2.0",
|
||||
"@nestjs/swagger": "7.3.0",
|
||||
"class-transformer": "0.5.1",
|
||||
"class-validator": "0.14.1",
|
||||
"reflect-metadata": "0.2.1",
|
||||
@@ -24,8 +24,8 @@
|
||||
"@nestjs/schematics": "10.1.1",
|
||||
"@nestjs/testing": "10.3.2",
|
||||
"@types/express": "4.17.21",
|
||||
"@types/node": "20.8.7",
|
||||
"@types/supertest": "2.0.16",
|
||||
"@types/node": "20.17.6",
|
||||
"@types/supertest": "6.0.2",
|
||||
"@typescript-eslint/eslint-plugin": "5.62.0",
|
||||
"@typescript-eslint/parser": "5.62.0",
|
||||
"eslint": "8.42.0",
|
||||
@@ -33,7 +33,7 @@
|
||||
"eslint-plugin-import": "2.29.1",
|
||||
"jest": "29.7.0",
|
||||
"prettier": "3.2.5",
|
||||
"supertest": "6.3.3",
|
||||
"supertest": "6.3.4",
|
||||
"ts-jest": "29.1.2",
|
||||
"ts-loader": "9.5.1",
|
||||
"ts-node": "10.9.2",
|
||||
@@ -1669,6 +1669,11 @@
|
||||
"node": ">=8"
|
||||
}
|
||||
},
|
||||
"node_modules/@microsoft/tsdoc": {
|
||||
"version": "0.14.2",
|
||||
"resolved": "https://registry.npmjs.org/@microsoft/tsdoc/-/tsdoc-0.14.2.tgz",
|
||||
"integrity": "sha512-9b8mPpKrfeGRuhFH5iO1iwCLeIIsV6+H1sRfxbkoGXIyQE2BTsPd9zqSqQJ+pv5sJ/hT5M1zvOFL02MnEezFug=="
|
||||
},
|
||||
"node_modules/@nestjs/cli": {
|
||||
"version": "10.3.2",
|
||||
"resolved": "https://registry.npmjs.org/@nestjs/cli/-/cli-10.3.2.tgz",
|
||||
@@ -1898,6 +1903,25 @@
|
||||
"resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz",
|
||||
"integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q=="
|
||||
},
|
||||
"node_modules/@nestjs/mapped-types": {
|
||||
"version": "2.0.5",
|
||||
"resolved": "https://registry.npmjs.org/@nestjs/mapped-types/-/mapped-types-2.0.5.tgz",
|
||||
"integrity": "sha512-bSJv4pd6EY99NX9CjBIyn4TVDoSit82DUZlL4I3bqNfy5Gt+gXTa86i3I/i0iIV9P4hntcGM5GyO+FhZAhxtyg==",
|
||||
"peerDependencies": {
|
||||
"@nestjs/common": "^8.0.0 || ^9.0.0 || ^10.0.0",
|
||||
"class-transformer": "^0.4.0 || ^0.5.0",
|
||||
"class-validator": "^0.13.0 || ^0.14.0",
|
||||
"reflect-metadata": "^0.1.12 || ^0.2.0"
|
||||
},
|
||||
"peerDependenciesMeta": {
|
||||
"class-transformer": {
|
||||
"optional": true
|
||||
},
|
||||
"class-validator": {
|
||||
"optional": true
|
||||
}
|
||||
}
|
||||
},
|
||||
"node_modules/@nestjs/platform-express": {
|
||||
"version": "10.3.8",
|
||||
"resolved": "https://registry.npmjs.org/@nestjs/platform-express/-/platform-express-10.3.8.tgz",
|
||||
@@ -1946,23 +1970,24 @@
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/@nestjs/swagger": {
|
||||
"version": "7.2.0",
|
||||
"resolved": "https://registry.npmjs.org/@nestjs/swagger/-/swagger-7.2.0.tgz",
|
||||
"integrity": "sha512-W7WPq561/79w27ZEgViXS7c5hqPwT7QXhsLsSeu2jeBROUhMM825QKDFKbMmtb643IW5dznJ4PjherlZZgtMvg==",
|
||||
"version": "7.3.0",
|
||||
"resolved": "https://registry.npmjs.org/@nestjs/swagger/-/swagger-7.3.0.tgz",
|
||||
"integrity": "sha512-zLkfKZ+ioYsIZ3dfv7Bj8YHnZMNAGWFUmx2ZDuLp/fBE4P8BSjB7hldzDueFXsmwaPL90v7lgyd82P+s7KME1Q==",
|
||||
"dependencies": {
|
||||
"@nestjs/mapped-types": "2.0.4",
|
||||
"@microsoft/tsdoc": "^0.14.2",
|
||||
"@nestjs/mapped-types": "2.0.5",
|
||||
"js-yaml": "4.1.0",
|
||||
"lodash": "4.17.21",
|
||||
"path-to-regexp": "3.2.0",
|
||||
"swagger-ui-dist": "5.11.0"
|
||||
"swagger-ui-dist": "5.11.2"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"@fastify/static": "^6.0.0",
|
||||
"@fastify/static": "^6.0.0 || ^7.0.0",
|
||||
"@nestjs/common": "^9.0.0 || ^10.0.0",
|
||||
"@nestjs/core": "^9.0.0 || ^10.0.0",
|
||||
"class-transformer": "*",
|
||||
"class-validator": "*",
|
||||
"reflect-metadata": "^0.1.12"
|
||||
"reflect-metadata": "^0.1.12 || ^0.2.0"
|
||||
},
|
||||
"peerDependenciesMeta": {
|
||||
"@fastify/static": {
|
||||
@@ -1976,25 +2001,6 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"node_modules/@nestjs/swagger/node_modules/@nestjs/mapped-types": {
|
||||
"version": "2.0.4",
|
||||
"resolved": "https://registry.npmjs.org/@nestjs/mapped-types/-/mapped-types-2.0.4.tgz",
|
||||
"integrity": "sha512-xl+gUSp0B+ln1VSNoUftlglk8dfpUes3DHGxKZ5knuBxS5g2H/8p9/DSBOYWUfO5f4u9s6ffBPZ71WO+tbe5SA==",
|
||||
"peerDependencies": {
|
||||
"@nestjs/common": "^8.0.0 || ^9.0.0 || ^10.0.0",
|
||||
"class-transformer": "^0.4.0 || ^0.5.0",
|
||||
"class-validator": "^0.13.0 || ^0.14.0",
|
||||
"reflect-metadata": "^0.1.12"
|
||||
},
|
||||
"peerDependenciesMeta": {
|
||||
"class-transformer": {
|
||||
"optional": true
|
||||
},
|
||||
"class-validator": {
|
||||
"optional": true
|
||||
}
|
||||
}
|
||||
},
|
||||
"node_modules/@nestjs/testing": {
|
||||
"version": "10.3.2",
|
||||
"resolved": "https://registry.npmjs.org/@nestjs/testing/-/testing-10.3.2.tgz",
|
||||
@@ -2198,9 +2204,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@types/cookiejar": {
|
||||
"version": "2.1.2",
|
||||
"resolved": "https://registry.npmjs.org/@types/cookiejar/-/cookiejar-2.1.2.tgz",
|
||||
"integrity": "sha512-t73xJJrvdTjXrn4jLS9VSGRbz0nUY3cl2DMGDU48lKl+HR9dbbjW2A9r3g40VA++mQpy6uuHg33gy7du2BKpog==",
|
||||
"version": "2.1.5",
|
||||
"resolved": "https://registry.npmjs.org/@types/cookiejar/-/cookiejar-2.1.5.tgz",
|
||||
"integrity": "sha512-he+DHOWReW0nghN24E1WUqM0efK4kI9oTqDm6XmK8ZPe2djZ90BSNdGnIyCLzCPw7/pogPlGbzI2wHGGmi4O/Q==",
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/@types/eslint": {
|
||||
@@ -2298,6 +2304,12 @@
|
||||
"integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==",
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/@types/methods": {
|
||||
"version": "1.1.4",
|
||||
"resolved": "https://registry.npmjs.org/@types/methods/-/methods-1.1.4.tgz",
|
||||
"integrity": "sha512-ymXWVrDiCxTBE3+RIrrP533E70eA+9qu7zdWoHuOmGujkYtzf4HQF96b8nwHLqhuf4ykX61IGRIB38CC6/sImQ==",
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/@types/mime": {
|
||||
"version": "1.3.2",
|
||||
"resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.2.tgz",
|
||||
@@ -2305,12 +2317,12 @@
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/@types/node": {
|
||||
"version": "20.8.7",
|
||||
"resolved": "https://registry.npmjs.org/@types/node/-/node-20.8.7.tgz",
|
||||
"integrity": "sha512-21TKHHh3eUHIi2MloeptJWALuCu5H7HQTdTrWIFReA8ad+aggoX+lRes3ex7/FtpC+sVUpFMQ+QTfYr74mruiQ==",
|
||||
"version": "20.17.6",
|
||||
"resolved": "https://registry.npmjs.org/@types/node/-/node-20.17.6.tgz",
|
||||
"integrity": "sha512-VEI7OdvK2wP7XHnsuXbAJnEpEkF6NjSN45QJlL4VGqZSXsnicpesdTWsg9RISeSdYd3yeRj/y3k5KGjUXYnFwQ==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"undici-types": "~5.25.1"
|
||||
"undici-types": "~6.19.2"
|
||||
}
|
||||
},
|
||||
"node_modules/@types/qs": {
|
||||
@@ -2358,22 +2370,25 @@
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/@types/superagent": {
|
||||
"version": "4.1.10",
|
||||
"resolved": "https://registry.npmjs.org/@types/superagent/-/superagent-4.1.10.tgz",
|
||||
"integrity": "sha512-xAgkb2CMWUMCyVc/3+7iQfOEBE75NvuZeezvmixbUw3nmENf2tCnQkW5yQLTYqvXUQ+R6EXxdqKKbal2zM5V/g==",
|
||||
"version": "8.1.9",
|
||||
"resolved": "https://registry.npmjs.org/@types/superagent/-/superagent-8.1.9.tgz",
|
||||
"integrity": "sha512-pTVjI73witn+9ILmoJdajHGW2jkSaOzhiFYF1Rd3EQ94kymLqB9PjD9ISg7WaALC7+dCHT0FGe9T2LktLq/3GQ==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"@types/cookiejar": "*",
|
||||
"@types/node": "*"
|
||||
"@types/cookiejar": "^2.1.5",
|
||||
"@types/methods": "^1.1.4",
|
||||
"@types/node": "*",
|
||||
"form-data": "^4.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@types/supertest": {
|
||||
"version": "2.0.16",
|
||||
"resolved": "https://registry.npmjs.org/@types/supertest/-/supertest-2.0.16.tgz",
|
||||
"integrity": "sha512-6c2ogktZ06tr2ENoZivgm7YnprnhYE4ZoXGMY+oA7IuAf17M8FWvujXZGmxLv8y0PTyts4x5A+erSwVUFA8XSg==",
|
||||
"version": "6.0.2",
|
||||
"resolved": "https://registry.npmjs.org/@types/supertest/-/supertest-6.0.2.tgz",
|
||||
"integrity": "sha512-137ypx2lk/wTQbW6An6safu9hXmajAifU/s7szAHLN/FeIm5w7yR0Wkl9fdJMRSHwOn4HLAI0DaB2TOORuhPDg==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"@types/superagent": "*"
|
||||
"@types/methods": "^1.1.4",
|
||||
"@types/superagent": "^8.1.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@types/validator": {
|
||||
@@ -3826,9 +3841,9 @@
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/cross-spawn": {
|
||||
"version": "7.0.3",
|
||||
"resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
|
||||
"integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
|
||||
"version": "7.0.6",
|
||||
"resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz",
|
||||
"integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==",
|
||||
"dependencies": {
|
||||
"path-key": "^3.1.0",
|
||||
"shebang-command": "^2.0.0",
|
||||
@@ -8523,9 +8538,10 @@
|
||||
}
|
||||
},
|
||||
"node_modules/superagent": {
|
||||
"version": "8.0.9",
|
||||
"resolved": "https://registry.npmjs.org/superagent/-/superagent-8.0.9.tgz",
|
||||
"integrity": "sha512-4C7Bh5pyHTvU33KpZgwrNKh/VQnvgtCSqPRfJAUdmrtSYePVzVg4E4OzsrbkhJj9O7SO6Bnv75K/F8XVZT8YHA==",
|
||||
"version": "8.1.2",
|
||||
"resolved": "https://registry.npmjs.org/superagent/-/superagent-8.1.2.tgz",
|
||||
"integrity": "sha512-6WTxW1EB6yCxV5VFOIPQruWGHqc3yI7hEmZK6h+pyk69Lk/Ut7rLUY6W/ONF2MjBuGjvmMiIpsrVJ2vjrHlslA==",
|
||||
"deprecated": "Please upgrade to v9.0.0+ as we have fixed a public vulnerability with formidable dependency. Note that v9.0.0+ requires Node.js v14.18.0+. See https://github.com/ladjs/superagent/pull/1800 for insight. This project is supported and maintained by the team at Forward Email @ https://forwardemail.net",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"component-emitter": "^1.3.0",
|
||||
@@ -8556,13 +8572,13 @@
|
||||
}
|
||||
},
|
||||
"node_modules/supertest": {
|
||||
"version": "6.3.3",
|
||||
"resolved": "https://registry.npmjs.org/supertest/-/supertest-6.3.3.tgz",
|
||||
"integrity": "sha512-EMCG6G8gDu5qEqRQ3JjjPs6+FYT1a7Hv5ApHvtSghmOFJYtsU5S+pSb6Y2EUeCEY3CmEL3mmQ8YWlPOzQomabA==",
|
||||
"version": "6.3.4",
|
||||
"resolved": "https://registry.npmjs.org/supertest/-/supertest-6.3.4.tgz",
|
||||
"integrity": "sha512-erY3HFDG0dPnhw4U+udPfrzXa4xhSG+n4rxfRuZWCUvjFWwKl+OxWf/7zk50s84/fAAs7vf5QAb9uRa0cCykxw==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"methods": "^1.1.2",
|
||||
"superagent": "^8.0.5"
|
||||
"superagent": "^8.1.2"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=6.4.0"
|
||||
@@ -8592,9 +8608,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/swagger-ui-dist": {
|
||||
"version": "5.11.0",
|
||||
"resolved": "https://registry.npmjs.org/swagger-ui-dist/-/swagger-ui-dist-5.11.0.tgz",
|
||||
"integrity": "sha512-j0PIATqQSEFGOLmiJOJZj1X1Jt6bFIur3JpY7+ghliUnfZs0fpWDdHEkn9q7QUlBtKbkn6TepvSxTqnE8l3s0A=="
|
||||
"version": "5.11.2",
|
||||
"resolved": "https://registry.npmjs.org/swagger-ui-dist/-/swagger-ui-dist-5.11.2.tgz",
|
||||
"integrity": "sha512-jQG0cRgJNMZ7aCoiFofnoojeSaa/+KgWaDlfgs8QN+BXoGMpxeMVY5OEnjq4OlNvF3yjftO8c9GRAgcHlO+u7A=="
|
||||
},
|
||||
"node_modules/symbol-observable": {
|
||||
"version": "4.0.0",
|
||||
@@ -9064,9 +9080,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/undici-types": {
|
||||
"version": "5.25.3",
|
||||
"resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.25.3.tgz",
|
||||
"integrity": "sha512-Ga1jfYwRn7+cP9v8auvEXN1rX3sWqlayd4HP7OKk4mZWylEmu3KzXDUGrQUN6Ol7qo1gPvB2e5gX6udnyEPgdA==",
|
||||
"version": "6.19.8",
|
||||
"resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz",
|
||||
"integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==",
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/universalify": {
|
||||
@@ -10690,6 +10706,11 @@
|
||||
"resolved": "https://registry.npmjs.org/@lukeed/csprng/-/csprng-1.1.0.tgz",
|
||||
"integrity": "sha512-Z7C/xXCiGWsg0KuKsHTKJxbWhpI3Vs5GwLfOean7MGyVFGqdRgBbAjOCh6u4bbjPc/8MJ2pZmK/0DLdCbivLDA=="
|
||||
},
|
||||
"@microsoft/tsdoc": {
|
||||
"version": "0.14.2",
|
||||
"resolved": "https://registry.npmjs.org/@microsoft/tsdoc/-/tsdoc-0.14.2.tgz",
|
||||
"integrity": "sha512-9b8mPpKrfeGRuhFH5iO1iwCLeIIsV6+H1sRfxbkoGXIyQE2BTsPd9zqSqQJ+pv5sJ/hT5M1zvOFL02MnEezFug=="
|
||||
},
|
||||
"@nestjs/cli": {
|
||||
"version": "10.3.2",
|
||||
"resolved": "https://registry.npmjs.org/@nestjs/cli/-/cli-10.3.2.tgz",
|
||||
@@ -10828,6 +10849,12 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"@nestjs/mapped-types": {
|
||||
"version": "2.0.5",
|
||||
"resolved": "https://registry.npmjs.org/@nestjs/mapped-types/-/mapped-types-2.0.5.tgz",
|
||||
"integrity": "sha512-bSJv4pd6EY99NX9CjBIyn4TVDoSit82DUZlL4I3bqNfy5Gt+gXTa86i3I/i0iIV9P4hntcGM5GyO+FhZAhxtyg==",
|
||||
"requires": {}
|
||||
},
|
||||
"@nestjs/platform-express": {
|
||||
"version": "10.3.8",
|
||||
"resolved": "https://registry.npmjs.org/@nestjs/platform-express/-/platform-express-10.3.8.tgz",
|
||||
@@ -10869,23 +10896,16 @@
|
||||
}
|
||||
},
|
||||
"@nestjs/swagger": {
|
||||
"version": "7.2.0",
|
||||
"resolved": "https://registry.npmjs.org/@nestjs/swagger/-/swagger-7.2.0.tgz",
|
||||
"integrity": "sha512-W7WPq561/79w27ZEgViXS7c5hqPwT7QXhsLsSeu2jeBROUhMM825QKDFKbMmtb643IW5dznJ4PjherlZZgtMvg==",
|
||||
"version": "7.3.0",
|
||||
"resolved": "https://registry.npmjs.org/@nestjs/swagger/-/swagger-7.3.0.tgz",
|
||||
"integrity": "sha512-zLkfKZ+ioYsIZ3dfv7Bj8YHnZMNAGWFUmx2ZDuLp/fBE4P8BSjB7hldzDueFXsmwaPL90v7lgyd82P+s7KME1Q==",
|
||||
"requires": {
|
||||
"@nestjs/mapped-types": "2.0.4",
|
||||
"@microsoft/tsdoc": "^0.14.2",
|
||||
"@nestjs/mapped-types": "2.0.5",
|
||||
"js-yaml": "4.1.0",
|
||||
"lodash": "4.17.21",
|
||||
"path-to-regexp": "3.2.0",
|
||||
"swagger-ui-dist": "5.11.0"
|
||||
},
|
||||
"dependencies": {
|
||||
"@nestjs/mapped-types": {
|
||||
"version": "2.0.4",
|
||||
"resolved": "https://registry.npmjs.org/@nestjs/mapped-types/-/mapped-types-2.0.4.tgz",
|
||||
"integrity": "sha512-xl+gUSp0B+ln1VSNoUftlglk8dfpUes3DHGxKZ5knuBxS5g2H/8p9/DSBOYWUfO5f4u9s6ffBPZ71WO+tbe5SA==",
|
||||
"requires": {}
|
||||
}
|
||||
"swagger-ui-dist": "5.11.2"
|
||||
}
|
||||
},
|
||||
"@nestjs/testing": {
|
||||
@@ -11056,9 +11076,9 @@
|
||||
}
|
||||
},
|
||||
"@types/cookiejar": {
|
||||
"version": "2.1.2",
|
||||
"resolved": "https://registry.npmjs.org/@types/cookiejar/-/cookiejar-2.1.2.tgz",
|
||||
"integrity": "sha512-t73xJJrvdTjXrn4jLS9VSGRbz0nUY3cl2DMGDU48lKl+HR9dbbjW2A9r3g40VA++mQpy6uuHg33gy7du2BKpog==",
|
||||
"version": "2.1.5",
|
||||
"resolved": "https://registry.npmjs.org/@types/cookiejar/-/cookiejar-2.1.5.tgz",
|
||||
"integrity": "sha512-he+DHOWReW0nghN24E1WUqM0efK4kI9oTqDm6XmK8ZPe2djZ90BSNdGnIyCLzCPw7/pogPlGbzI2wHGGmi4O/Q==",
|
||||
"dev": true
|
||||
},
|
||||
"@types/eslint": {
|
||||
@@ -11156,6 +11176,12 @@
|
||||
"integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==",
|
||||
"dev": true
|
||||
},
|
||||
"@types/methods": {
|
||||
"version": "1.1.4",
|
||||
"resolved": "https://registry.npmjs.org/@types/methods/-/methods-1.1.4.tgz",
|
||||
"integrity": "sha512-ymXWVrDiCxTBE3+RIrrP533E70eA+9qu7zdWoHuOmGujkYtzf4HQF96b8nwHLqhuf4ykX61IGRIB38CC6/sImQ==",
|
||||
"dev": true
|
||||
},
|
||||
"@types/mime": {
|
||||
"version": "1.3.2",
|
||||
"resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.2.tgz",
|
||||
@@ -11163,12 +11189,12 @@
|
||||
"dev": true
|
||||
},
|
||||
"@types/node": {
|
||||
"version": "20.8.7",
|
||||
"resolved": "https://registry.npmjs.org/@types/node/-/node-20.8.7.tgz",
|
||||
"integrity": "sha512-21TKHHh3eUHIi2MloeptJWALuCu5H7HQTdTrWIFReA8ad+aggoX+lRes3ex7/FtpC+sVUpFMQ+QTfYr74mruiQ==",
|
||||
"version": "20.17.6",
|
||||
"resolved": "https://registry.npmjs.org/@types/node/-/node-20.17.6.tgz",
|
||||
"integrity": "sha512-VEI7OdvK2wP7XHnsuXbAJnEpEkF6NjSN45QJlL4VGqZSXsnicpesdTWsg9RISeSdYd3yeRj/y3k5KGjUXYnFwQ==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"undici-types": "~5.25.1"
|
||||
"undici-types": "~6.19.2"
|
||||
}
|
||||
},
|
||||
"@types/qs": {
|
||||
@@ -11216,22 +11242,25 @@
|
||||
"dev": true
|
||||
},
|
||||
"@types/superagent": {
|
||||
"version": "4.1.10",
|
||||
"resolved": "https://registry.npmjs.org/@types/superagent/-/superagent-4.1.10.tgz",
|
||||
"integrity": "sha512-xAgkb2CMWUMCyVc/3+7iQfOEBE75NvuZeezvmixbUw3nmENf2tCnQkW5yQLTYqvXUQ+R6EXxdqKKbal2zM5V/g==",
|
||||
"version": "8.1.9",
|
||||
"resolved": "https://registry.npmjs.org/@types/superagent/-/superagent-8.1.9.tgz",
|
||||
"integrity": "sha512-pTVjI73witn+9ILmoJdajHGW2jkSaOzhiFYF1Rd3EQ94kymLqB9PjD9ISg7WaALC7+dCHT0FGe9T2LktLq/3GQ==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"@types/cookiejar": "*",
|
||||
"@types/node": "*"
|
||||
"@types/cookiejar": "^2.1.5",
|
||||
"@types/methods": "^1.1.4",
|
||||
"@types/node": "*",
|
||||
"form-data": "^4.0.0"
|
||||
}
|
||||
},
|
||||
"@types/supertest": {
|
||||
"version": "2.0.16",
|
||||
"resolved": "https://registry.npmjs.org/@types/supertest/-/supertest-2.0.16.tgz",
|
||||
"integrity": "sha512-6c2ogktZ06tr2ENoZivgm7YnprnhYE4ZoXGMY+oA7IuAf17M8FWvujXZGmxLv8y0PTyts4x5A+erSwVUFA8XSg==",
|
||||
"version": "6.0.2",
|
||||
"resolved": "https://registry.npmjs.org/@types/supertest/-/supertest-6.0.2.tgz",
|
||||
"integrity": "sha512-137ypx2lk/wTQbW6An6safu9hXmajAifU/s7szAHLN/FeIm5w7yR0Wkl9fdJMRSHwOn4HLAI0DaB2TOORuhPDg==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"@types/superagent": "*"
|
||||
"@types/methods": "^1.1.4",
|
||||
"@types/superagent": "^8.1.0"
|
||||
}
|
||||
},
|
||||
"@types/validator": {
|
||||
@@ -12298,9 +12327,9 @@
|
||||
"dev": true
|
||||
},
|
||||
"cross-spawn": {
|
||||
"version": "7.0.3",
|
||||
"resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
|
||||
"integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
|
||||
"version": "7.0.6",
|
||||
"resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz",
|
||||
"integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==",
|
||||
"requires": {
|
||||
"path-key": "^3.1.0",
|
||||
"shebang-command": "^2.0.0",
|
||||
@@ -15792,9 +15821,9 @@
|
||||
"dev": true
|
||||
},
|
||||
"superagent": {
|
||||
"version": "8.0.9",
|
||||
"resolved": "https://registry.npmjs.org/superagent/-/superagent-8.0.9.tgz",
|
||||
"integrity": "sha512-4C7Bh5pyHTvU33KpZgwrNKh/VQnvgtCSqPRfJAUdmrtSYePVzVg4E4OzsrbkhJj9O7SO6Bnv75K/F8XVZT8YHA==",
|
||||
"version": "8.1.2",
|
||||
"resolved": "https://registry.npmjs.org/superagent/-/superagent-8.1.2.tgz",
|
||||
"integrity": "sha512-6WTxW1EB6yCxV5VFOIPQruWGHqc3yI7hEmZK6h+pyk69Lk/Ut7rLUY6W/ONF2MjBuGjvmMiIpsrVJ2vjrHlslA==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"component-emitter": "^1.3.0",
|
||||
@@ -15818,13 +15847,13 @@
|
||||
}
|
||||
},
|
||||
"supertest": {
|
||||
"version": "6.3.3",
|
||||
"resolved": "https://registry.npmjs.org/supertest/-/supertest-6.3.3.tgz",
|
||||
"integrity": "sha512-EMCG6G8gDu5qEqRQ3JjjPs6+FYT1a7Hv5ApHvtSghmOFJYtsU5S+pSb6Y2EUeCEY3CmEL3mmQ8YWlPOzQomabA==",
|
||||
"version": "6.3.4",
|
||||
"resolved": "https://registry.npmjs.org/supertest/-/supertest-6.3.4.tgz",
|
||||
"integrity": "sha512-erY3HFDG0dPnhw4U+udPfrzXa4xhSG+n4rxfRuZWCUvjFWwKl+OxWf/7zk50s84/fAAs7vf5QAb9uRa0cCykxw==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"methods": "^1.1.2",
|
||||
"superagent": "^8.0.5"
|
||||
"superagent": "^8.1.2"
|
||||
}
|
||||
},
|
||||
"supports-color": {
|
||||
@@ -15842,9 +15871,9 @@
|
||||
"dev": true
|
||||
},
|
||||
"swagger-ui-dist": {
|
||||
"version": "5.11.0",
|
||||
"resolved": "https://registry.npmjs.org/swagger-ui-dist/-/swagger-ui-dist-5.11.0.tgz",
|
||||
"integrity": "sha512-j0PIATqQSEFGOLmiJOJZj1X1Jt6bFIur3JpY7+ghliUnfZs0fpWDdHEkn9q7QUlBtKbkn6TepvSxTqnE8l3s0A=="
|
||||
"version": "5.11.2",
|
||||
"resolved": "https://registry.npmjs.org/swagger-ui-dist/-/swagger-ui-dist-5.11.2.tgz",
|
||||
"integrity": "sha512-jQG0cRgJNMZ7aCoiFofnoojeSaa/+KgWaDlfgs8QN+BXoGMpxeMVY5OEnjq4OlNvF3yjftO8c9GRAgcHlO+u7A=="
|
||||
},
|
||||
"symbol-observable": {
|
||||
"version": "4.0.0",
|
||||
@@ -16151,9 +16180,9 @@
|
||||
}
|
||||
},
|
||||
"undici-types": {
|
||||
"version": "5.25.3",
|
||||
"resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.25.3.tgz",
|
||||
"integrity": "sha512-Ga1jfYwRn7+cP9v8auvEXN1rX3sWqlayd4HP7OKk4mZWylEmu3KzXDUGrQUN6Ol7qo1gPvB2e5gX6udnyEPgdA==",
|
||||
"version": "6.19.8",
|
||||
"resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz",
|
||||
"integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==",
|
||||
"dev": true
|
||||
},
|
||||
"universalify": {
|
||||
|
||||
@@ -34,8 +34,8 @@
|
||||
"@nestjs/schematics": "10.1.1",
|
||||
"@nestjs/testing": "10.3.2",
|
||||
"@types/express": "4.17.21",
|
||||
"@types/node": "20.8.7",
|
||||
"@types/supertest": "2.0.16",
|
||||
"@types/node": "20.17.6",
|
||||
"@types/supertest": "6.0.2",
|
||||
"@typescript-eslint/eslint-plugin": "5.62.0",
|
||||
"@typescript-eslint/parser": "5.62.0",
|
||||
"eslint": "8.42.0",
|
||||
@@ -43,7 +43,7 @@
|
||||
"eslint-plugin-import": "2.29.1",
|
||||
"jest": "29.7.0",
|
||||
"prettier": "3.2.5",
|
||||
"supertest": "6.3.3",
|
||||
"supertest": "6.3.4",
|
||||
"ts-jest": "29.1.2",
|
||||
"ts-loader": "9.5.1",
|
||||
"ts-node": "10.9.2",
|
||||
|
||||
67
sample/12-graphql-schema-first/e2e/cats/cats.e2e-spec.ts
Normal file
67
sample/12-graphql-schema-first/e2e/cats/cats.e2e-spec.ts
Normal file
@@ -0,0 +1,67 @@
|
||||
import { INestApplication } from '@nestjs/common';
|
||||
import { Test, TestingModule } from '@nestjs/testing';
|
||||
import * as request from 'supertest';
|
||||
|
||||
import { Cat } from '../../src/graphql.schema';
|
||||
import { AppModule } from '../../src/app.module';
|
||||
|
||||
describe('Cats Resolver (e2e)', () => {
|
||||
let app: INestApplication;
|
||||
let cat: Cat;
|
||||
|
||||
beforeEach(async () => {
|
||||
const moduleFixture: TestingModule = await Test.createTestingModule({
|
||||
imports: [AppModule],
|
||||
}).compile();
|
||||
|
||||
app = moduleFixture.createNestApplication();
|
||||
await app.init();
|
||||
});
|
||||
|
||||
afterEach(async () => {
|
||||
await app.close();
|
||||
});
|
||||
|
||||
it('should create a new cat', async () => {
|
||||
const query = `
|
||||
mutation {
|
||||
createCat(createCatInput: { name: "Cat", age: 5 }) {
|
||||
id
|
||||
name
|
||||
age
|
||||
}
|
||||
}
|
||||
`;
|
||||
|
||||
return request(app.getHttpServer())
|
||||
.post('/graphql')
|
||||
.send({ query })
|
||||
.expect(200)
|
||||
.expect(response => {
|
||||
cat = response.body.data.createCat;
|
||||
expect(cat.name).toEqual('Cat');
|
||||
expect(cat.age).toEqual(5);
|
||||
});
|
||||
});
|
||||
|
||||
it('should get all cats', async () => {
|
||||
const query = `
|
||||
query {
|
||||
cats {
|
||||
id
|
||||
name
|
||||
age
|
||||
}
|
||||
}
|
||||
`;
|
||||
|
||||
return request(app.getHttpServer())
|
||||
.post('/graphql')
|
||||
.send({ query })
|
||||
.expect(200)
|
||||
.expect(response => {
|
||||
const cats = response.body.data.cats;
|
||||
expect(cats[0].name).toEqual('Cat');
|
||||
});
|
||||
});
|
||||
});
|
||||
13
sample/12-graphql-schema-first/e2e/jest-e2e.json
Normal file
13
sample/12-graphql-schema-first/e2e/jest-e2e.json
Normal file
@@ -0,0 +1,13 @@
|
||||
{
|
||||
"moduleFileExtensions": ["ts", "tsx", "js", "json"],
|
||||
"transform": {
|
||||
"^.+\\.tsx?$": "ts-jest"
|
||||
},
|
||||
"testRegex": "/e2e/.*\\.(e2e-test|e2e-spec).(ts|tsx|js)$",
|
||||
"collectCoverageFrom": [
|
||||
"src/**/*.{js,jsx,tsx,ts}",
|
||||
"!**/node_modules/**",
|
||||
"!**/vendor/**"
|
||||
],
|
||||
"coverageReporters": ["json", "lcov"]
|
||||
}
|
||||
431
sample/12-graphql-schema-first/package-lock.json
generated
431
sample/12-graphql-schema-first/package-lock.json
generated
@@ -14,7 +14,7 @@
|
||||
"@nestjs/apollo": "12.0.11",
|
||||
"@nestjs/common": "10.3.2",
|
||||
"@nestjs/core": "10.3.2",
|
||||
"@nestjs/graphql": "12.0.11",
|
||||
"@nestjs/graphql": "12.2.0",
|
||||
"@nestjs/platform-express": "10.3.8",
|
||||
"class-transformer": "0.5.1",
|
||||
"class-validator": "0.14.1",
|
||||
@@ -29,8 +29,9 @@
|
||||
"@nestjs/schematics": "10.1.1",
|
||||
"@nestjs/testing": "10.3.2",
|
||||
"@types/express": "4.17.21",
|
||||
"@types/node": "20.8.7",
|
||||
"@types/supertest": "2.0.16",
|
||||
"@types/jest": "29.5.10",
|
||||
"@types/node": "20.17.6",
|
||||
"@types/supertest": "6.0.2",
|
||||
"@typescript-eslint/eslint-plugin": "5.62.0",
|
||||
"@typescript-eslint/parser": "5.62.0",
|
||||
"eslint": "8.42.0",
|
||||
@@ -38,7 +39,7 @@
|
||||
"eslint-plugin-import": "2.29.1",
|
||||
"jest": "29.7.0",
|
||||
"prettier": "3.2.5",
|
||||
"supertest": "6.3.3",
|
||||
"supertest": "6.3.4",
|
||||
"ts-jest": "29.1.2",
|
||||
"ts-loader": "9.5.1",
|
||||
"ts-morph": "21.0.1",
|
||||
@@ -2088,30 +2089,6 @@
|
||||
"balanced-match": "^1.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@nestjs/cli/node_modules/chokidar": {
|
||||
"version": "3.6.0",
|
||||
"resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz",
|
||||
"integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"anymatch": "~3.1.2",
|
||||
"braces": "~3.0.2",
|
||||
"glob-parent": "~5.1.2",
|
||||
"is-binary-path": "~2.1.0",
|
||||
"is-glob": "~4.0.1",
|
||||
"normalize-path": "~3.0.0",
|
||||
"readdirp": "~3.6.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">= 8.10.0"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://paulmillr.com/funding/"
|
||||
},
|
||||
"optionalDependencies": {
|
||||
"fsevents": "~2.3.2"
|
||||
}
|
||||
},
|
||||
"node_modules/@nestjs/cli/node_modules/glob": {
|
||||
"version": "10.3.10",
|
||||
"resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz",
|
||||
@@ -2275,24 +2252,24 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@nestjs/graphql": {
|
||||
"version": "12.0.11",
|
||||
"resolved": "https://registry.npmjs.org/@nestjs/graphql/-/graphql-12.0.11.tgz",
|
||||
"integrity": "sha512-iCyVs9+utCQt9ehMhUjQcEdjRN/MrcTBINd7P44O1fzGENuWMbt1Z8RCoZbeGi5iVPBY63HgYik+BnnICqmxZw==",
|
||||
"version": "12.2.0",
|
||||
"resolved": "https://registry.npmjs.org/@nestjs/graphql/-/graphql-12.2.0.tgz",
|
||||
"integrity": "sha512-du/aI+EXADxtJrHF1mAXR6RYRHuEWPNnJyHTmIOPW2Wx5qN32P7lQoHGD7TySATMl5aa47w05lPzxcasdUmpMQ==",
|
||||
"dependencies": {
|
||||
"@graphql-tools/merge": "9.0.0",
|
||||
"@graphql-tools/schema": "10.0.0",
|
||||
"@graphql-tools/utils": "10.0.8",
|
||||
"@nestjs/mapped-types": "2.0.2",
|
||||
"chokidar": "3.5.3",
|
||||
"@graphql-tools/merge": "9.0.4",
|
||||
"@graphql-tools/schema": "10.0.4",
|
||||
"@graphql-tools/utils": "10.2.3",
|
||||
"@nestjs/mapped-types": "2.0.5",
|
||||
"chokidar": "3.6.0",
|
||||
"fast-glob": "3.3.2",
|
||||
"graphql-tag": "2.12.6",
|
||||
"graphql-ws": "5.14.2",
|
||||
"graphql-ws": "5.16.0",
|
||||
"lodash": "4.17.21",
|
||||
"normalize-path": "3.0.0",
|
||||
"subscriptions-transport-ws": "0.11.0",
|
||||
"tslib": "2.6.2",
|
||||
"tslib": "2.6.3",
|
||||
"uuid": "9.0.1",
|
||||
"ws": "8.14.2"
|
||||
"ws": "8.17.1"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"@apollo/subgraph": "^2.0.0",
|
||||
@@ -2301,8 +2278,8 @@
|
||||
"class-transformer": "*",
|
||||
"class-validator": "*",
|
||||
"graphql": "^16.6.0",
|
||||
"reflect-metadata": "^0.1.13",
|
||||
"ts-morph": "^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^20.0.0"
|
||||
"reflect-metadata": "^0.1.13 || ^0.2.0",
|
||||
"ts-morph": "^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^20.0.0 || ^21.0.0"
|
||||
},
|
||||
"peerDependenciesMeta": {
|
||||
"@apollo/subgraph": {
|
||||
@@ -2320,11 +2297,11 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@nestjs/graphql/node_modules/@graphql-tools/merge": {
|
||||
"version": "9.0.0",
|
||||
"resolved": "https://registry.npmjs.org/@graphql-tools/merge/-/merge-9.0.0.tgz",
|
||||
"integrity": "sha512-J7/xqjkGTTwOJmaJQJ2C+VDBDOWJL3lKrHJN4yMaRLAJH3PosB7GiPRaSDZdErs0+F77sH2MKs2haMMkywzx7Q==",
|
||||
"version": "9.0.4",
|
||||
"resolved": "https://registry.npmjs.org/@graphql-tools/merge/-/merge-9.0.4.tgz",
|
||||
"integrity": "sha512-MivbDLUQ+4Q8G/Hp/9V72hbn810IJDEZQ57F01sHnlrrijyadibfVhaQfW/pNH+9T/l8ySZpaR/DpL5i+ruZ+g==",
|
||||
"dependencies": {
|
||||
"@graphql-tools/utils": "^10.0.0",
|
||||
"@graphql-tools/utils": "^10.0.13",
|
||||
"tslib": "^2.4.0"
|
||||
},
|
||||
"engines": {
|
||||
@@ -2335,12 +2312,12 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@nestjs/graphql/node_modules/@graphql-tools/schema": {
|
||||
"version": "10.0.0",
|
||||
"resolved": "https://registry.npmjs.org/@graphql-tools/schema/-/schema-10.0.0.tgz",
|
||||
"integrity": "sha512-kf3qOXMFcMs2f/S8Y3A8fm/2w+GaHAkfr3Gnhh2LOug/JgpY/ywgFVxO3jOeSpSEdoYcDKLcXVjMigNbY4AdQg==",
|
||||
"version": "10.0.4",
|
||||
"resolved": "https://registry.npmjs.org/@graphql-tools/schema/-/schema-10.0.4.tgz",
|
||||
"integrity": "sha512-HuIwqbKxPaJujox25Ra4qwz0uQzlpsaBOzO6CVfzB/MemZdd+Gib8AIvfhQArK0YIN40aDran/yi+E5Xf0mQww==",
|
||||
"dependencies": {
|
||||
"@graphql-tools/merge": "^9.0.0",
|
||||
"@graphql-tools/utils": "^10.0.0",
|
||||
"@graphql-tools/merge": "^9.0.3",
|
||||
"@graphql-tools/utils": "^10.2.1",
|
||||
"tslib": "^2.4.0",
|
||||
"value-or-promise": "^1.0.12"
|
||||
},
|
||||
@@ -2352,9 +2329,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@nestjs/graphql/node_modules/@graphql-tools/utils": {
|
||||
"version": "10.0.8",
|
||||
"resolved": "https://registry.npmjs.org/@graphql-tools/utils/-/utils-10.0.8.tgz",
|
||||
"integrity": "sha512-yjyA8ycSa1WRlJqyX/aLqXeE5DvF/H02+zXMUFnCzIDrj0UvLMUrxhmVFnMK0Q2n3bh4uuTeY3621m5za9ovXw==",
|
||||
"version": "10.2.3",
|
||||
"resolved": "https://registry.npmjs.org/@graphql-tools/utils/-/utils-10.2.3.tgz",
|
||||
"integrity": "sha512-j7x0sO0VtWVhD3FubyY42abx+g61/at5W5Y3DSOckPkBo7yVjkcnAsXoB4jiUnznhGme/o+uX5VgA8HrjyR5ZQ==",
|
||||
"dependencies": {
|
||||
"@graphql-typed-document-node/core": "^3.1.1",
|
||||
"cross-inspect": "1.0.0",
|
||||
@@ -2368,15 +2345,20 @@
|
||||
"graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@nestjs/graphql/node_modules/@nestjs/mapped-types": {
|
||||
"version": "2.0.2",
|
||||
"resolved": "https://registry.npmjs.org/@nestjs/mapped-types/-/mapped-types-2.0.2.tgz",
|
||||
"integrity": "sha512-V0izw6tWs6fTp9+KiiPUbGHWALy563Frn8X6Bm87ANLRuE46iuBMD5acKBDP5lKL/75QFvrzSJT7HkCbB0jTpg==",
|
||||
"node_modules/@nestjs/graphql/node_modules/tslib": {
|
||||
"version": "2.6.3",
|
||||
"resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz",
|
||||
"integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ=="
|
||||
},
|
||||
"node_modules/@nestjs/mapped-types": {
|
||||
"version": "2.0.5",
|
||||
"resolved": "https://registry.npmjs.org/@nestjs/mapped-types/-/mapped-types-2.0.5.tgz",
|
||||
"integrity": "sha512-bSJv4pd6EY99NX9CjBIyn4TVDoSit82DUZlL4I3bqNfy5Gt+gXTa86i3I/i0iIV9P4hntcGM5GyO+FhZAhxtyg==",
|
||||
"peerDependencies": {
|
||||
"@nestjs/common": "^8.0.0 || ^9.0.0 || ^10.0.0",
|
||||
"class-transformer": "^0.4.0 || ^0.5.0",
|
||||
"class-validator": "^0.13.0 || ^0.14.0",
|
||||
"reflect-metadata": "^0.1.12"
|
||||
"reflect-metadata": "^0.1.12 || ^0.2.0"
|
||||
},
|
||||
"peerDependenciesMeta": {
|
||||
"class-transformer": {
|
||||
@@ -2596,7 +2578,7 @@
|
||||
"version": "0.22.0",
|
||||
"resolved": "https://registry.npmjs.org/@ts-morph/common/-/common-0.22.0.tgz",
|
||||
"integrity": "sha512-HqNBuV/oIlMKdkLshXd1zKBqNQCsuPEsgQOkfFQ/eUKjRlwndXW1AjN9LVkBEIukm00gGXSRmfkl0Wv5VXLnlw==",
|
||||
"devOptional": true,
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"fast-glob": "^3.3.2",
|
||||
"minimatch": "^9.0.3",
|
||||
@@ -2608,7 +2590,7 @@
|
||||
"version": "2.0.1",
|
||||
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
|
||||
"integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
|
||||
"devOptional": true,
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"balanced-match": "^1.0.0"
|
||||
}
|
||||
@@ -2617,7 +2599,7 @@
|
||||
"version": "9.0.3",
|
||||
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz",
|
||||
"integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==",
|
||||
"devOptional": true,
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"brace-expansion": "^2.0.1"
|
||||
},
|
||||
@@ -2632,7 +2614,7 @@
|
||||
"version": "3.0.1",
|
||||
"resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-3.0.1.tgz",
|
||||
"integrity": "sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==",
|
||||
"devOptional": true,
|
||||
"dev": true,
|
||||
"bin": {
|
||||
"mkdirp": "dist/cjs/src/bin.js"
|
||||
},
|
||||
@@ -2726,9 +2708,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@types/cookiejar": {
|
||||
"version": "2.1.2",
|
||||
"resolved": "https://registry.npmjs.org/@types/cookiejar/-/cookiejar-2.1.2.tgz",
|
||||
"integrity": "sha512-t73xJJrvdTjXrn4jLS9VSGRbz0nUY3cl2DMGDU48lKl+HR9dbbjW2A9r3g40VA++mQpy6uuHg33gy7du2BKpog==",
|
||||
"version": "2.1.5",
|
||||
"resolved": "https://registry.npmjs.org/@types/cookiejar/-/cookiejar-2.1.5.tgz",
|
||||
"integrity": "sha512-he+DHOWReW0nghN24E1WUqM0efK4kI9oTqDm6XmK8ZPe2djZ90BSNdGnIyCLzCPw7/pogPlGbzI2wHGGmi4O/Q==",
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/@types/eslint": {
|
||||
@@ -2811,6 +2793,16 @@
|
||||
"@types/istanbul-lib-report": "*"
|
||||
}
|
||||
},
|
||||
"node_modules/@types/jest": {
|
||||
"version": "29.5.10",
|
||||
"resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.5.10.tgz",
|
||||
"integrity": "sha512-tE4yxKEphEyxj9s4inideLHktW/x6DwesIwWZ9NN1FKf9zbJYsnhBoA9vrHA/IuIOKwPa5PcFBNV4lpMIOEzyQ==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"expect": "^29.0.0",
|
||||
"pretty-format": "^29.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@types/json-schema": {
|
||||
"version": "7.0.11",
|
||||
"resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz",
|
||||
@@ -2828,17 +2820,23 @@
|
||||
"resolved": "https://registry.npmjs.org/@types/long/-/long-4.0.2.tgz",
|
||||
"integrity": "sha512-MqTGEo5bj5t157U6fA/BiDynNkn0YknVdh48CMPkTSpFTVmvao5UQmm7uEF6xBEo7qIMAlY/JSleYaE6VOdpaA=="
|
||||
},
|
||||
"node_modules/@types/methods": {
|
||||
"version": "1.1.4",
|
||||
"resolved": "https://registry.npmjs.org/@types/methods/-/methods-1.1.4.tgz",
|
||||
"integrity": "sha512-ymXWVrDiCxTBE3+RIrrP533E70eA+9qu7zdWoHuOmGujkYtzf4HQF96b8nwHLqhuf4ykX61IGRIB38CC6/sImQ==",
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/@types/mime": {
|
||||
"version": "1.3.2",
|
||||
"resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.2.tgz",
|
||||
"integrity": "sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw=="
|
||||
},
|
||||
"node_modules/@types/node": {
|
||||
"version": "20.8.7",
|
||||
"resolved": "https://registry.npmjs.org/@types/node/-/node-20.8.7.tgz",
|
||||
"integrity": "sha512-21TKHHh3eUHIi2MloeptJWALuCu5H7HQTdTrWIFReA8ad+aggoX+lRes3ex7/FtpC+sVUpFMQ+QTfYr74mruiQ==",
|
||||
"version": "20.17.6",
|
||||
"resolved": "https://registry.npmjs.org/@types/node/-/node-20.17.6.tgz",
|
||||
"integrity": "sha512-VEI7OdvK2wP7XHnsuXbAJnEpEkF6NjSN45QJlL4VGqZSXsnicpesdTWsg9RISeSdYd3yeRj/y3k5KGjUXYnFwQ==",
|
||||
"dependencies": {
|
||||
"undici-types": "~5.25.1"
|
||||
"undici-types": "~6.19.2"
|
||||
}
|
||||
},
|
||||
"node_modules/@types/node-fetch": {
|
||||
@@ -2895,22 +2893,25 @@
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/@types/superagent": {
|
||||
"version": "4.1.10",
|
||||
"resolved": "https://registry.npmjs.org/@types/superagent/-/superagent-4.1.10.tgz",
|
||||
"integrity": "sha512-xAgkb2CMWUMCyVc/3+7iQfOEBE75NvuZeezvmixbUw3nmENf2tCnQkW5yQLTYqvXUQ+R6EXxdqKKbal2zM5V/g==",
|
||||
"version": "8.1.9",
|
||||
"resolved": "https://registry.npmjs.org/@types/superagent/-/superagent-8.1.9.tgz",
|
||||
"integrity": "sha512-pTVjI73witn+9ILmoJdajHGW2jkSaOzhiFYF1Rd3EQ94kymLqB9PjD9ISg7WaALC7+dCHT0FGe9T2LktLq/3GQ==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"@types/cookiejar": "*",
|
||||
"@types/node": "*"
|
||||
"@types/cookiejar": "^2.1.5",
|
||||
"@types/methods": "^1.1.4",
|
||||
"@types/node": "*",
|
||||
"form-data": "^4.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@types/supertest": {
|
||||
"version": "2.0.16",
|
||||
"resolved": "https://registry.npmjs.org/@types/supertest/-/supertest-2.0.16.tgz",
|
||||
"integrity": "sha512-6c2ogktZ06tr2ENoZivgm7YnprnhYE4ZoXGMY+oA7IuAf17M8FWvujXZGmxLv8y0PTyts4x5A+erSwVUFA8XSg==",
|
||||
"version": "6.0.2",
|
||||
"resolved": "https://registry.npmjs.org/@types/supertest/-/supertest-6.0.2.tgz",
|
||||
"integrity": "sha512-137ypx2lk/wTQbW6An6safu9hXmajAifU/s7szAHLN/FeIm5w7yR0Wkl9fdJMRSHwOn4HLAI0DaB2TOORuhPDg==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"@types/superagent": "*"
|
||||
"@types/methods": "^1.1.4",
|
||||
"@types/superagent": "^8.1.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@types/validator": {
|
||||
@@ -4022,15 +4023,9 @@
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/chokidar": {
|
||||
"version": "3.5.3",
|
||||
"resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz",
|
||||
"integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==",
|
||||
"funding": [
|
||||
{
|
||||
"type": "individual",
|
||||
"url": "https://paulmillr.com/funding/"
|
||||
}
|
||||
],
|
||||
"version": "3.6.0",
|
||||
"resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz",
|
||||
"integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==",
|
||||
"dependencies": {
|
||||
"anymatch": "~3.1.2",
|
||||
"braces": "~3.0.2",
|
||||
@@ -4043,6 +4038,9 @@
|
||||
"engines": {
|
||||
"node": ">= 8.10.0"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://paulmillr.com/funding/"
|
||||
},
|
||||
"optionalDependencies": {
|
||||
"fsevents": "~2.3.2"
|
||||
}
|
||||
@@ -4177,7 +4175,7 @@
|
||||
"version": "12.0.0",
|
||||
"resolved": "https://registry.npmjs.org/code-block-writer/-/code-block-writer-12.0.0.tgz",
|
||||
"integrity": "sha512-q4dMFMlXtKR3XNBHyMHt/3pwYNA69EDk00lloMOaaUMKPUXBw6lpXtbu3MMVG6/uOihGnRDOlkyqsONEUj60+w==",
|
||||
"devOptional": true
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/collect-v8-coverage": {
|
||||
"version": "1.0.2",
|
||||
@@ -5862,9 +5860,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/graphql-ws": {
|
||||
"version": "5.14.2",
|
||||
"resolved": "https://registry.npmjs.org/graphql-ws/-/graphql-ws-5.14.2.tgz",
|
||||
"integrity": "sha512-LycmCwhZ+Op2GlHz4BZDsUYHKRiiUz+3r9wbhBATMETNlORQJAaFlAgTFoeRh6xQoQegwYwIylVD1Qns9/DA3w==",
|
||||
"version": "5.16.0",
|
||||
"resolved": "https://registry.npmjs.org/graphql-ws/-/graphql-ws-5.16.0.tgz",
|
||||
"integrity": "sha512-Ju2RCU2dQMgSKtArPbEtsK5gNLnsQyTNIo/T7cZNp96niC1x0KdJNZV0TIoilceBPQwfb5itrGl8pkFeOUMl4A==",
|
||||
"engines": {
|
||||
"node": ">=10"
|
||||
},
|
||||
@@ -8006,7 +8004,7 @@
|
||||
"version": "1.0.1",
|
||||
"resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz",
|
||||
"integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==",
|
||||
"devOptional": true
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/path-exists": {
|
||||
"version": "4.0.0",
|
||||
@@ -9163,9 +9161,10 @@
|
||||
}
|
||||
},
|
||||
"node_modules/superagent": {
|
||||
"version": "8.0.9",
|
||||
"resolved": "https://registry.npmjs.org/superagent/-/superagent-8.0.9.tgz",
|
||||
"integrity": "sha512-4C7Bh5pyHTvU33KpZgwrNKh/VQnvgtCSqPRfJAUdmrtSYePVzVg4E4OzsrbkhJj9O7SO6Bnv75K/F8XVZT8YHA==",
|
||||
"version": "8.1.2",
|
||||
"resolved": "https://registry.npmjs.org/superagent/-/superagent-8.1.2.tgz",
|
||||
"integrity": "sha512-6WTxW1EB6yCxV5VFOIPQruWGHqc3yI7hEmZK6h+pyk69Lk/Ut7rLUY6W/ONF2MjBuGjvmMiIpsrVJ2vjrHlslA==",
|
||||
"deprecated": "Please upgrade to v9.0.0+ as we have fixed a public vulnerability with formidable dependency. Note that v9.0.0+ requires Node.js v14.18.0+. See https://github.com/ladjs/superagent/pull/1800 for insight. This project is supported and maintained by the team at Forward Email @ https://forwardemail.net",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"component-emitter": "^1.3.0",
|
||||
@@ -9196,13 +9195,13 @@
|
||||
}
|
||||
},
|
||||
"node_modules/supertest": {
|
||||
"version": "6.3.3",
|
||||
"resolved": "https://registry.npmjs.org/supertest/-/supertest-6.3.3.tgz",
|
||||
"integrity": "sha512-EMCG6G8gDu5qEqRQ3JjjPs6+FYT1a7Hv5ApHvtSghmOFJYtsU5S+pSb6Y2EUeCEY3CmEL3mmQ8YWlPOzQomabA==",
|
||||
"version": "6.3.4",
|
||||
"resolved": "https://registry.npmjs.org/supertest/-/supertest-6.3.4.tgz",
|
||||
"integrity": "sha512-erY3HFDG0dPnhw4U+udPfrzXa4xhSG+n4rxfRuZWCUvjFWwKl+OxWf/7zk50s84/fAAs7vf5QAb9uRa0cCykxw==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"methods": "^1.1.2",
|
||||
"superagent": "^8.0.5"
|
||||
"superagent": "^8.1.2"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=6.4.0"
|
||||
@@ -9483,7 +9482,7 @@
|
||||
"version": "21.0.1",
|
||||
"resolved": "https://registry.npmjs.org/ts-morph/-/ts-morph-21.0.1.tgz",
|
||||
"integrity": "sha512-dbDtVdEAncKctzrVZ+Nr7kHpHkv+0JDJb2MjjpBaj8bFeCkePU9rHfMklmhuLFnpeq/EJZk2IhStY6NzqgjOkg==",
|
||||
"devOptional": true,
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"@ts-morph/common": "~0.22.0",
|
||||
"code-block-writer": "^12.0.0"
|
||||
@@ -9741,9 +9740,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/undici-types": {
|
||||
"version": "5.25.3",
|
||||
"resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.25.3.tgz",
|
||||
"integrity": "sha512-Ga1jfYwRn7+cP9v8auvEXN1rX3sWqlayd4HP7OKk4mZWylEmu3KzXDUGrQUN6Ol7qo1gPvB2e5gX6udnyEPgdA=="
|
||||
"version": "6.19.8",
|
||||
"resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz",
|
||||
"integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw=="
|
||||
},
|
||||
"node_modules/universalify": {
|
||||
"version": "2.0.0",
|
||||
@@ -10086,9 +10085,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/ws": {
|
||||
"version": "8.14.2",
|
||||
"resolved": "https://registry.npmjs.org/ws/-/ws-8.14.2.tgz",
|
||||
"integrity": "sha512-wEBG1ftX4jcglPxgFCMJmZ2PLtSbJ2Peg6TmpJFTbe9GZYOQCDPdMYu/Tm0/bGZkw8paZnJY45J4K2PZrLYq8g==",
|
||||
"version": "8.17.1",
|
||||
"resolved": "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz",
|
||||
"integrity": "sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==",
|
||||
"engines": {
|
||||
"node": ">=10.0.0"
|
||||
},
|
||||
@@ -10360,8 +10359,7 @@
|
||||
"@apollo/cache-control-types": {
|
||||
"version": "1.0.3",
|
||||
"resolved": "https://registry.npmjs.org/@apollo/cache-control-types/-/cache-control-types-1.0.3.tgz",
|
||||
"integrity": "sha512-F17/vCp7QVwom9eG7ToauIKdAxpSoadsJnqIfyryLFSkLSOEqu+eC5Z3N8OXcUVStuOMcNHlyraRsA6rRICu4g==",
|
||||
"requires": {}
|
||||
"integrity": "sha512-F17/vCp7QVwom9eG7ToauIKdAxpSoadsJnqIfyryLFSkLSOEqu+eC5Z3N8OXcUVStuOMcNHlyraRsA6rRICu4g=="
|
||||
},
|
||||
"@apollo/protobufjs": {
|
||||
"version": "1.2.7",
|
||||
@@ -10461,8 +10459,7 @@
|
||||
"@apollo/utils.dropunuseddefinitions": {
|
||||
"version": "2.0.1",
|
||||
"resolved": "https://registry.npmjs.org/@apollo/utils.dropunuseddefinitions/-/utils.dropunuseddefinitions-2.0.1.tgz",
|
||||
"integrity": "sha512-EsPIBqsSt2BwDsv8Wu76LK5R1KtsVkNoO4b0M5aK0hx+dGg9xJXuqlr7Fo34Dl+y83jmzn+UvEW+t1/GP2melA==",
|
||||
"requires": {}
|
||||
"integrity": "sha512-EsPIBqsSt2BwDsv8Wu76LK5R1KtsVkNoO4b0M5aK0hx+dGg9xJXuqlr7Fo34Dl+y83jmzn+UvEW+t1/GP2melA=="
|
||||
},
|
||||
"@apollo/utils.fetcher": {
|
||||
"version": "2.0.0",
|
||||
@@ -10498,14 +10495,12 @@
|
||||
"@apollo/utils.printwithreducedwhitespace": {
|
||||
"version": "2.0.1",
|
||||
"resolved": "https://registry.npmjs.org/@apollo/utils.printwithreducedwhitespace/-/utils.printwithreducedwhitespace-2.0.1.tgz",
|
||||
"integrity": "sha512-9M4LUXV/fQBh8vZWlLvb/HyyhjJ77/I5ZKu+NBWV/BmYGyRmoEP9EVAy7LCVoY3t8BDcyCAGfxJaLFCSuQkPUg==",
|
||||
"requires": {}
|
||||
"integrity": "sha512-9M4LUXV/fQBh8vZWlLvb/HyyhjJ77/I5ZKu+NBWV/BmYGyRmoEP9EVAy7LCVoY3t8BDcyCAGfxJaLFCSuQkPUg=="
|
||||
},
|
||||
"@apollo/utils.removealiases": {
|
||||
"version": "2.0.1",
|
||||
"resolved": "https://registry.npmjs.org/@apollo/utils.removealiases/-/utils.removealiases-2.0.1.tgz",
|
||||
"integrity": "sha512-0joRc2HBO4u594Op1nev+mUF6yRnxoUH64xw8x3bX7n8QBDYdeYgY4tF0vJReTy+zdn2xv6fMsquATSgC722FA==",
|
||||
"requires": {}
|
||||
"integrity": "sha512-0joRc2HBO4u594Op1nev+mUF6yRnxoUH64xw8x3bX7n8QBDYdeYgY4tF0vJReTy+zdn2xv6fMsquATSgC722FA=="
|
||||
},
|
||||
"@apollo/utils.sortast": {
|
||||
"version": "2.0.1",
|
||||
@@ -10518,8 +10513,7 @@
|
||||
"@apollo/utils.stripsensitiveliterals": {
|
||||
"version": "2.0.1",
|
||||
"resolved": "https://registry.npmjs.org/@apollo/utils.stripsensitiveliterals/-/utils.stripsensitiveliterals-2.0.1.tgz",
|
||||
"integrity": "sha512-QJs7HtzXS/JIPMKWimFnUMK7VjkGQTzqD9bKD1h3iuPAqLsxd0mUNVbkYOPTsDhUKgcvUOfOqOJWYohAKMvcSA==",
|
||||
"requires": {}
|
||||
"integrity": "sha512-QJs7HtzXS/JIPMKWimFnUMK7VjkGQTzqD9bKD1h3iuPAqLsxd0mUNVbkYOPTsDhUKgcvUOfOqOJWYohAKMvcSA=="
|
||||
},
|
||||
"@apollo/utils.usagereporting": {
|
||||
"version": "2.1.0",
|
||||
@@ -11187,8 +11181,7 @@
|
||||
"@graphql-typed-document-node/core": {
|
||||
"version": "3.1.2",
|
||||
"resolved": "https://registry.npmjs.org/@graphql-typed-document-node/core/-/core-3.1.2.tgz",
|
||||
"integrity": "sha512-9anpBMM9mEgZN4wr2v8wHJI2/u5TnnggewRN6OlvXTTnuVyoY19X6rOv9XTqKRw6dcGKwZsBi8n0kDE2I5i4VA==",
|
||||
"requires": {}
|
||||
"integrity": "sha512-9anpBMM9mEgZN4wr2v8wHJI2/u5TnnggewRN6OlvXTTnuVyoY19X6rOv9XTqKRw6dcGKwZsBi8n0kDE2I5i4VA=="
|
||||
},
|
||||
"@humanwhocodes/config-array": {
|
||||
"version": "0.11.10",
|
||||
@@ -11719,22 +11712,6 @@
|
||||
"balanced-match": "^1.0.0"
|
||||
}
|
||||
},
|
||||
"chokidar": {
|
||||
"version": "3.6.0",
|
||||
"resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz",
|
||||
"integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"anymatch": "~3.1.2",
|
||||
"braces": "~3.0.2",
|
||||
"fsevents": "~2.3.2",
|
||||
"glob-parent": "~5.1.2",
|
||||
"is-binary-path": "~2.1.0",
|
||||
"is-glob": "~4.0.1",
|
||||
"normalize-path": "~3.0.0",
|
||||
"readdirp": "~3.6.0"
|
||||
}
|
||||
},
|
||||
"glob": {
|
||||
"version": "10.3.10",
|
||||
"resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz",
|
||||
@@ -11821,50 +11798,50 @@
|
||||
}
|
||||
},
|
||||
"@nestjs/graphql": {
|
||||
"version": "12.0.11",
|
||||
"resolved": "https://registry.npmjs.org/@nestjs/graphql/-/graphql-12.0.11.tgz",
|
||||
"integrity": "sha512-iCyVs9+utCQt9ehMhUjQcEdjRN/MrcTBINd7P44O1fzGENuWMbt1Z8RCoZbeGi5iVPBY63HgYik+BnnICqmxZw==",
|
||||
"version": "12.2.0",
|
||||
"resolved": "https://registry.npmjs.org/@nestjs/graphql/-/graphql-12.2.0.tgz",
|
||||
"integrity": "sha512-du/aI+EXADxtJrHF1mAXR6RYRHuEWPNnJyHTmIOPW2Wx5qN32P7lQoHGD7TySATMl5aa47w05lPzxcasdUmpMQ==",
|
||||
"requires": {
|
||||
"@graphql-tools/merge": "9.0.0",
|
||||
"@graphql-tools/schema": "10.0.0",
|
||||
"@graphql-tools/utils": "10.0.8",
|
||||
"@nestjs/mapped-types": "2.0.2",
|
||||
"chokidar": "3.5.3",
|
||||
"@graphql-tools/merge": "9.0.4",
|
||||
"@graphql-tools/schema": "10.0.4",
|
||||
"@graphql-tools/utils": "10.2.3",
|
||||
"@nestjs/mapped-types": "2.0.5",
|
||||
"chokidar": "3.6.0",
|
||||
"fast-glob": "3.3.2",
|
||||
"graphql-tag": "2.12.6",
|
||||
"graphql-ws": "5.14.2",
|
||||
"graphql-ws": "5.16.0",
|
||||
"lodash": "4.17.21",
|
||||
"normalize-path": "3.0.0",
|
||||
"subscriptions-transport-ws": "0.11.0",
|
||||
"tslib": "2.6.2",
|
||||
"tslib": "2.6.3",
|
||||
"uuid": "9.0.1",
|
||||
"ws": "8.14.2"
|
||||
"ws": "8.17.1"
|
||||
},
|
||||
"dependencies": {
|
||||
"@graphql-tools/merge": {
|
||||
"version": "9.0.0",
|
||||
"resolved": "https://registry.npmjs.org/@graphql-tools/merge/-/merge-9.0.0.tgz",
|
||||
"integrity": "sha512-J7/xqjkGTTwOJmaJQJ2C+VDBDOWJL3lKrHJN4yMaRLAJH3PosB7GiPRaSDZdErs0+F77sH2MKs2haMMkywzx7Q==",
|
||||
"version": "9.0.4",
|
||||
"resolved": "https://registry.npmjs.org/@graphql-tools/merge/-/merge-9.0.4.tgz",
|
||||
"integrity": "sha512-MivbDLUQ+4Q8G/Hp/9V72hbn810IJDEZQ57F01sHnlrrijyadibfVhaQfW/pNH+9T/l8ySZpaR/DpL5i+ruZ+g==",
|
||||
"requires": {
|
||||
"@graphql-tools/utils": "^10.0.0",
|
||||
"@graphql-tools/utils": "^10.0.13",
|
||||
"tslib": "^2.4.0"
|
||||
}
|
||||
},
|
||||
"@graphql-tools/schema": {
|
||||
"version": "10.0.0",
|
||||
"resolved": "https://registry.npmjs.org/@graphql-tools/schema/-/schema-10.0.0.tgz",
|
||||
"integrity": "sha512-kf3qOXMFcMs2f/S8Y3A8fm/2w+GaHAkfr3Gnhh2LOug/JgpY/ywgFVxO3jOeSpSEdoYcDKLcXVjMigNbY4AdQg==",
|
||||
"version": "10.0.4",
|
||||
"resolved": "https://registry.npmjs.org/@graphql-tools/schema/-/schema-10.0.4.tgz",
|
||||
"integrity": "sha512-HuIwqbKxPaJujox25Ra4qwz0uQzlpsaBOzO6CVfzB/MemZdd+Gib8AIvfhQArK0YIN40aDran/yi+E5Xf0mQww==",
|
||||
"requires": {
|
||||
"@graphql-tools/merge": "^9.0.0",
|
||||
"@graphql-tools/utils": "^10.0.0",
|
||||
"@graphql-tools/merge": "^9.0.3",
|
||||
"@graphql-tools/utils": "^10.2.1",
|
||||
"tslib": "^2.4.0",
|
||||
"value-or-promise": "^1.0.12"
|
||||
}
|
||||
},
|
||||
"@graphql-tools/utils": {
|
||||
"version": "10.0.8",
|
||||
"resolved": "https://registry.npmjs.org/@graphql-tools/utils/-/utils-10.0.8.tgz",
|
||||
"integrity": "sha512-yjyA8ycSa1WRlJqyX/aLqXeE5DvF/H02+zXMUFnCzIDrj0UvLMUrxhmVFnMK0Q2n3bh4uuTeY3621m5za9ovXw==",
|
||||
"version": "10.2.3",
|
||||
"resolved": "https://registry.npmjs.org/@graphql-tools/utils/-/utils-10.2.3.tgz",
|
||||
"integrity": "sha512-j7x0sO0VtWVhD3FubyY42abx+g61/at5W5Y3DSOckPkBo7yVjkcnAsXoB4jiUnznhGme/o+uX5VgA8HrjyR5ZQ==",
|
||||
"requires": {
|
||||
"@graphql-typed-document-node/core": "^3.1.1",
|
||||
"cross-inspect": "1.0.0",
|
||||
@@ -11872,14 +11849,18 @@
|
||||
"tslib": "^2.4.0"
|
||||
}
|
||||
},
|
||||
"@nestjs/mapped-types": {
|
||||
"version": "2.0.2",
|
||||
"resolved": "https://registry.npmjs.org/@nestjs/mapped-types/-/mapped-types-2.0.2.tgz",
|
||||
"integrity": "sha512-V0izw6tWs6fTp9+KiiPUbGHWALy563Frn8X6Bm87ANLRuE46iuBMD5acKBDP5lKL/75QFvrzSJT7HkCbB0jTpg==",
|
||||
"requires": {}
|
||||
"tslib": {
|
||||
"version": "2.6.3",
|
||||
"resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz",
|
||||
"integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ=="
|
||||
}
|
||||
}
|
||||
},
|
||||
"@nestjs/mapped-types": {
|
||||
"version": "2.0.5",
|
||||
"resolved": "https://registry.npmjs.org/@nestjs/mapped-types/-/mapped-types-2.0.5.tgz",
|
||||
"integrity": "sha512-bSJv4pd6EY99NX9CjBIyn4TVDoSit82DUZlL4I3bqNfy5Gt+gXTa86i3I/i0iIV9P4hntcGM5GyO+FhZAhxtyg=="
|
||||
},
|
||||
"@nestjs/platform-express": {
|
||||
"version": "10.3.8",
|
||||
"resolved": "https://registry.npmjs.org/@nestjs/platform-express/-/platform-express-10.3.8.tgz",
|
||||
@@ -12043,7 +12024,7 @@
|
||||
"version": "0.22.0",
|
||||
"resolved": "https://registry.npmjs.org/@ts-morph/common/-/common-0.22.0.tgz",
|
||||
"integrity": "sha512-HqNBuV/oIlMKdkLshXd1zKBqNQCsuPEsgQOkfFQ/eUKjRlwndXW1AjN9LVkBEIukm00gGXSRmfkl0Wv5VXLnlw==",
|
||||
"devOptional": true,
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"fast-glob": "^3.3.2",
|
||||
"minimatch": "^9.0.3",
|
||||
@@ -12055,7 +12036,7 @@
|
||||
"version": "2.0.1",
|
||||
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
|
||||
"integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
|
||||
"devOptional": true,
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"balanced-match": "^1.0.0"
|
||||
}
|
||||
@@ -12064,7 +12045,7 @@
|
||||
"version": "9.0.3",
|
||||
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz",
|
||||
"integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==",
|
||||
"devOptional": true,
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"brace-expansion": "^2.0.1"
|
||||
}
|
||||
@@ -12073,7 +12054,7 @@
|
||||
"version": "3.0.1",
|
||||
"resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-3.0.1.tgz",
|
||||
"integrity": "sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==",
|
||||
"devOptional": true
|
||||
"dev": true
|
||||
}
|
||||
}
|
||||
},
|
||||
@@ -12160,9 +12141,9 @@
|
||||
}
|
||||
},
|
||||
"@types/cookiejar": {
|
||||
"version": "2.1.2",
|
||||
"resolved": "https://registry.npmjs.org/@types/cookiejar/-/cookiejar-2.1.2.tgz",
|
||||
"integrity": "sha512-t73xJJrvdTjXrn4jLS9VSGRbz0nUY3cl2DMGDU48lKl+HR9dbbjW2A9r3g40VA++mQpy6uuHg33gy7du2BKpog==",
|
||||
"version": "2.1.5",
|
||||
"resolved": "https://registry.npmjs.org/@types/cookiejar/-/cookiejar-2.1.5.tgz",
|
||||
"integrity": "sha512-he+DHOWReW0nghN24E1WUqM0efK4kI9oTqDm6XmK8ZPe2djZ90BSNdGnIyCLzCPw7/pogPlGbzI2wHGGmi4O/Q==",
|
||||
"dev": true
|
||||
},
|
||||
"@types/eslint": {
|
||||
@@ -12245,6 +12226,16 @@
|
||||
"@types/istanbul-lib-report": "*"
|
||||
}
|
||||
},
|
||||
"@types/jest": {
|
||||
"version": "29.5.10",
|
||||
"resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.5.10.tgz",
|
||||
"integrity": "sha512-tE4yxKEphEyxj9s4inideLHktW/x6DwesIwWZ9NN1FKf9zbJYsnhBoA9vrHA/IuIOKwPa5PcFBNV4lpMIOEzyQ==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"expect": "^29.0.0",
|
||||
"pretty-format": "^29.0.0"
|
||||
}
|
||||
},
|
||||
"@types/json-schema": {
|
||||
"version": "7.0.11",
|
||||
"resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz",
|
||||
@@ -12262,17 +12253,23 @@
|
||||
"resolved": "https://registry.npmjs.org/@types/long/-/long-4.0.2.tgz",
|
||||
"integrity": "sha512-MqTGEo5bj5t157U6fA/BiDynNkn0YknVdh48CMPkTSpFTVmvao5UQmm7uEF6xBEo7qIMAlY/JSleYaE6VOdpaA=="
|
||||
},
|
||||
"@types/methods": {
|
||||
"version": "1.1.4",
|
||||
"resolved": "https://registry.npmjs.org/@types/methods/-/methods-1.1.4.tgz",
|
||||
"integrity": "sha512-ymXWVrDiCxTBE3+RIrrP533E70eA+9qu7zdWoHuOmGujkYtzf4HQF96b8nwHLqhuf4ykX61IGRIB38CC6/sImQ==",
|
||||
"dev": true
|
||||
},
|
||||
"@types/mime": {
|
||||
"version": "1.3.2",
|
||||
"resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.2.tgz",
|
||||
"integrity": "sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw=="
|
||||
},
|
||||
"@types/node": {
|
||||
"version": "20.8.7",
|
||||
"resolved": "https://registry.npmjs.org/@types/node/-/node-20.8.7.tgz",
|
||||
"integrity": "sha512-21TKHHh3eUHIi2MloeptJWALuCu5H7HQTdTrWIFReA8ad+aggoX+lRes3ex7/FtpC+sVUpFMQ+QTfYr74mruiQ==",
|
||||
"version": "20.17.6",
|
||||
"resolved": "https://registry.npmjs.org/@types/node/-/node-20.17.6.tgz",
|
||||
"integrity": "sha512-VEI7OdvK2wP7XHnsuXbAJnEpEkF6NjSN45QJlL4VGqZSXsnicpesdTWsg9RISeSdYd3yeRj/y3k5KGjUXYnFwQ==",
|
||||
"requires": {
|
||||
"undici-types": "~5.25.1"
|
||||
"undici-types": "~6.19.2"
|
||||
}
|
||||
},
|
||||
"@types/node-fetch": {
|
||||
@@ -12328,22 +12325,25 @@
|
||||
"dev": true
|
||||
},
|
||||
"@types/superagent": {
|
||||
"version": "4.1.10",
|
||||
"resolved": "https://registry.npmjs.org/@types/superagent/-/superagent-4.1.10.tgz",
|
||||
"integrity": "sha512-xAgkb2CMWUMCyVc/3+7iQfOEBE75NvuZeezvmixbUw3nmENf2tCnQkW5yQLTYqvXUQ+R6EXxdqKKbal2zM5V/g==",
|
||||
"version": "8.1.9",
|
||||
"resolved": "https://registry.npmjs.org/@types/superagent/-/superagent-8.1.9.tgz",
|
||||
"integrity": "sha512-pTVjI73witn+9ILmoJdajHGW2jkSaOzhiFYF1Rd3EQ94kymLqB9PjD9ISg7WaALC7+dCHT0FGe9T2LktLq/3GQ==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"@types/cookiejar": "*",
|
||||
"@types/node": "*"
|
||||
"@types/cookiejar": "^2.1.5",
|
||||
"@types/methods": "^1.1.4",
|
||||
"@types/node": "*",
|
||||
"form-data": "^4.0.0"
|
||||
}
|
||||
},
|
||||
"@types/supertest": {
|
||||
"version": "2.0.16",
|
||||
"resolved": "https://registry.npmjs.org/@types/supertest/-/supertest-2.0.16.tgz",
|
||||
"integrity": "sha512-6c2ogktZ06tr2ENoZivgm7YnprnhYE4ZoXGMY+oA7IuAf17M8FWvujXZGmxLv8y0PTyts4x5A+erSwVUFA8XSg==",
|
||||
"version": "6.0.2",
|
||||
"resolved": "https://registry.npmjs.org/@types/supertest/-/supertest-6.0.2.tgz",
|
||||
"integrity": "sha512-137ypx2lk/wTQbW6An6safu9hXmajAifU/s7szAHLN/FeIm5w7yR0Wkl9fdJMRSHwOn4HLAI0DaB2TOORuhPDg==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"@types/superagent": "*"
|
||||
"@types/methods": "^1.1.4",
|
||||
"@types/superagent": "^8.1.0"
|
||||
}
|
||||
},
|
||||
"@types/validator": {
|
||||
@@ -12642,15 +12642,13 @@
|
||||
"version": "1.9.0",
|
||||
"resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz",
|
||||
"integrity": "sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==",
|
||||
"dev": true,
|
||||
"requires": {}
|
||||
"dev": true
|
||||
},
|
||||
"acorn-jsx": {
|
||||
"version": "5.3.2",
|
||||
"resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz",
|
||||
"integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==",
|
||||
"dev": true,
|
||||
"requires": {}
|
||||
"dev": true
|
||||
},
|
||||
"acorn-walk": {
|
||||
"version": "8.2.0",
|
||||
@@ -12705,8 +12703,7 @@
|
||||
"version": "3.5.2",
|
||||
"resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz",
|
||||
"integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==",
|
||||
"dev": true,
|
||||
"requires": {}
|
||||
"dev": true
|
||||
},
|
||||
"ansi-colors": {
|
||||
"version": "4.1.3",
|
||||
@@ -13151,9 +13148,9 @@
|
||||
"dev": true
|
||||
},
|
||||
"chokidar": {
|
||||
"version": "3.5.3",
|
||||
"resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz",
|
||||
"integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==",
|
||||
"version": "3.6.0",
|
||||
"resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz",
|
||||
"integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==",
|
||||
"requires": {
|
||||
"anymatch": "~3.1.2",
|
||||
"braces": "~3.0.2",
|
||||
@@ -13256,7 +13253,7 @@
|
||||
"version": "12.0.0",
|
||||
"resolved": "https://registry.npmjs.org/code-block-writer/-/code-block-writer-12.0.0.tgz",
|
||||
"integrity": "sha512-q4dMFMlXtKR3XNBHyMHt/3pwYNA69EDk00lloMOaaUMKPUXBw6lpXtbu3MMVG6/uOihGnRDOlkyqsONEUj60+w==",
|
||||
"devOptional": true
|
||||
"dev": true
|
||||
},
|
||||
"collect-v8-coverage": {
|
||||
"version": "1.0.2",
|
||||
@@ -13458,8 +13455,7 @@
|
||||
"version": "1.5.1",
|
||||
"resolved": "https://registry.npmjs.org/dedent/-/dedent-1.5.1.tgz",
|
||||
"integrity": "sha512-+LxW+KLWxu3HW3M2w2ympwtqPrqYRzU8fqi6Fhd18fBALe15blJPI/I4+UHveMVG6lJqB4JNd4UG0S5cnVHwIg==",
|
||||
"dev": true,
|
||||
"requires": {}
|
||||
"dev": true
|
||||
},
|
||||
"deep-is": {
|
||||
"version": "0.1.3",
|
||||
@@ -13817,8 +13813,7 @@
|
||||
"version": "9.1.0",
|
||||
"resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-9.1.0.tgz",
|
||||
"integrity": "sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==",
|
||||
"dev": true,
|
||||
"requires": {}
|
||||
"dev": true
|
||||
},
|
||||
"eslint-import-resolver-node": {
|
||||
"version": "0.3.9",
|
||||
@@ -14551,10 +14546,9 @@
|
||||
}
|
||||
},
|
||||
"graphql-ws": {
|
||||
"version": "5.14.2",
|
||||
"resolved": "https://registry.npmjs.org/graphql-ws/-/graphql-ws-5.14.2.tgz",
|
||||
"integrity": "sha512-LycmCwhZ+Op2GlHz4BZDsUYHKRiiUz+3r9wbhBATMETNlORQJAaFlAgTFoeRh6xQoQegwYwIylVD1Qns9/DA3w==",
|
||||
"requires": {}
|
||||
"version": "5.16.0",
|
||||
"resolved": "https://registry.npmjs.org/graphql-ws/-/graphql-ws-5.16.0.tgz",
|
||||
"integrity": "sha512-Ju2RCU2dQMgSKtArPbEtsK5gNLnsQyTNIo/T7cZNp96niC1x0KdJNZV0TIoilceBPQwfb5itrGl8pkFeOUMl4A=="
|
||||
},
|
||||
"has": {
|
||||
"version": "1.0.3",
|
||||
@@ -15306,8 +15300,7 @@
|
||||
"version": "1.2.3",
|
||||
"resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz",
|
||||
"integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==",
|
||||
"dev": true,
|
||||
"requires": {}
|
||||
"dev": true
|
||||
},
|
||||
"jest-regex-util": {
|
||||
"version": "29.6.3",
|
||||
@@ -16127,7 +16120,7 @@
|
||||
"version": "1.0.1",
|
||||
"resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz",
|
||||
"integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==",
|
||||
"devOptional": true
|
||||
"dev": true
|
||||
},
|
||||
"path-exists": {
|
||||
"version": "4.0.0",
|
||||
@@ -16950,15 +16943,14 @@
|
||||
"ws": {
|
||||
"version": "7.5.7",
|
||||
"resolved": "https://registry.npmjs.org/ws/-/ws-7.5.7.tgz",
|
||||
"integrity": "sha512-KMvVuFzpKBuiIXW3E4u3mySRO2/mCHSyZDJQM5NQ9Q9KHWHWh0NHgfbRMLLrceUK5qAL4ytALJbpRMjixFZh8A==",
|
||||
"requires": {}
|
||||
"integrity": "sha512-KMvVuFzpKBuiIXW3E4u3mySRO2/mCHSyZDJQM5NQ9Q9KHWHWh0NHgfbRMLLrceUK5qAL4ytALJbpRMjixFZh8A=="
|
||||
}
|
||||
}
|
||||
},
|
||||
"superagent": {
|
||||
"version": "8.0.9",
|
||||
"resolved": "https://registry.npmjs.org/superagent/-/superagent-8.0.9.tgz",
|
||||
"integrity": "sha512-4C7Bh5pyHTvU33KpZgwrNKh/VQnvgtCSqPRfJAUdmrtSYePVzVg4E4OzsrbkhJj9O7SO6Bnv75K/F8XVZT8YHA==",
|
||||
"version": "8.1.2",
|
||||
"resolved": "https://registry.npmjs.org/superagent/-/superagent-8.1.2.tgz",
|
||||
"integrity": "sha512-6WTxW1EB6yCxV5VFOIPQruWGHqc3yI7hEmZK6h+pyk69Lk/Ut7rLUY6W/ONF2MjBuGjvmMiIpsrVJ2vjrHlslA==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"component-emitter": "^1.3.0",
|
||||
@@ -16982,13 +16974,13 @@
|
||||
}
|
||||
},
|
||||
"supertest": {
|
||||
"version": "6.3.3",
|
||||
"resolved": "https://registry.npmjs.org/supertest/-/supertest-6.3.3.tgz",
|
||||
"integrity": "sha512-EMCG6G8gDu5qEqRQ3JjjPs6+FYT1a7Hv5ApHvtSghmOFJYtsU5S+pSb6Y2EUeCEY3CmEL3mmQ8YWlPOzQomabA==",
|
||||
"version": "6.3.4",
|
||||
"resolved": "https://registry.npmjs.org/supertest/-/supertest-6.3.4.tgz",
|
||||
"integrity": "sha512-erY3HFDG0dPnhw4U+udPfrzXa4xhSG+n4rxfRuZWCUvjFWwKl+OxWf/7zk50s84/fAAs7vf5QAb9uRa0cCykxw==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"methods": "^1.1.2",
|
||||
"superagent": "^8.0.5"
|
||||
"superagent": "^8.1.2"
|
||||
}
|
||||
},
|
||||
"supports-color": {
|
||||
@@ -17167,7 +17159,7 @@
|
||||
"version": "21.0.1",
|
||||
"resolved": "https://registry.npmjs.org/ts-morph/-/ts-morph-21.0.1.tgz",
|
||||
"integrity": "sha512-dbDtVdEAncKctzrVZ+Nr7kHpHkv+0JDJb2MjjpBaj8bFeCkePU9rHfMklmhuLFnpeq/EJZk2IhStY6NzqgjOkg==",
|
||||
"devOptional": true,
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"@ts-morph/common": "~0.22.0",
|
||||
"code-block-writer": "^12.0.0"
|
||||
@@ -17347,9 +17339,9 @@
|
||||
}
|
||||
},
|
||||
"undici-types": {
|
||||
"version": "5.25.3",
|
||||
"resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.25.3.tgz",
|
||||
"integrity": "sha512-Ga1jfYwRn7+cP9v8auvEXN1rX3sWqlayd4HP7OKk4mZWylEmu3KzXDUGrQUN6Ol7qo1gPvB2e5gX6udnyEPgdA=="
|
||||
"version": "6.19.8",
|
||||
"resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz",
|
||||
"integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw=="
|
||||
},
|
||||
"universalify": {
|
||||
"version": "2.0.0",
|
||||
@@ -17583,10 +17575,9 @@
|
||||
}
|
||||
},
|
||||
"ws": {
|
||||
"version": "8.14.2",
|
||||
"resolved": "https://registry.npmjs.org/ws/-/ws-8.14.2.tgz",
|
||||
"integrity": "sha512-wEBG1ftX4jcglPxgFCMJmZ2PLtSbJ2Peg6TmpJFTbe9GZYOQCDPdMYu/Tm0/bGZkw8paZnJY45J4K2PZrLYq8g==",
|
||||
"requires": {}
|
||||
"version": "8.17.1",
|
||||
"resolved": "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz",
|
||||
"integrity": "sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ=="
|
||||
},
|
||||
"xss": {
|
||||
"version": "1.0.14",
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
"test:watch": "jest --watch",
|
||||
"test:cov": "jest --coverage",
|
||||
"test:debug": "node --inspect-brk -r tsconfig-paths/register -r ts-node/register node_modules/.bin/jest --runInBand",
|
||||
"test:e2e": "echo 'No e2e tests implemented yet.'"
|
||||
"test:e2e": "jest --config ./e2e/jest-e2e.json"
|
||||
},
|
||||
"dependencies": {
|
||||
"@apollo/server": "4.9.3",
|
||||
@@ -24,7 +24,7 @@
|
||||
"@nestjs/apollo": "12.0.11",
|
||||
"@nestjs/common": "10.3.2",
|
||||
"@nestjs/core": "10.3.2",
|
||||
"@nestjs/graphql": "12.0.11",
|
||||
"@nestjs/graphql": "12.2.0",
|
||||
"@nestjs/platform-express": "10.3.8",
|
||||
"class-transformer": "0.5.1",
|
||||
"class-validator": "0.14.1",
|
||||
@@ -39,8 +39,9 @@
|
||||
"@nestjs/schematics": "10.1.1",
|
||||
"@nestjs/testing": "10.3.2",
|
||||
"@types/express": "4.17.21",
|
||||
"@types/node": "20.8.7",
|
||||
"@types/supertest": "2.0.16",
|
||||
"@types/jest": "29.5.10",
|
||||
"@types/node": "20.17.6",
|
||||
"@types/supertest": "6.0.2",
|
||||
"@typescript-eslint/eslint-plugin": "5.62.0",
|
||||
"@typescript-eslint/parser": "5.62.0",
|
||||
"eslint": "8.42.0",
|
||||
@@ -48,12 +49,43 @@
|
||||
"eslint-plugin-import": "2.29.1",
|
||||
"jest": "29.7.0",
|
||||
"prettier": "3.2.5",
|
||||
"supertest": "6.3.3",
|
||||
"supertest": "6.3.4",
|
||||
"ts-jest": "29.1.2",
|
||||
"ts-loader": "9.5.1",
|
||||
"ts-morph": "21.0.1",
|
||||
"ts-node": "10.9.2",
|
||||
"tsconfig-paths": "4.2.0",
|
||||
"typescript": "5.3.3"
|
||||
},
|
||||
"jest": {
|
||||
"moduleFileExtensions": [
|
||||
"js",
|
||||
"json",
|
||||
"ts"
|
||||
],
|
||||
"rootDir": "src",
|
||||
"testRegex": ".*\\.spec\\.ts$",
|
||||
"transform": {
|
||||
"^.+\\.(t|j)s$": "ts-jest"
|
||||
},
|
||||
"collectCoverageFrom": [
|
||||
"**/*.(t|j)s",
|
||||
"!main.(t|j)s",
|
||||
"!**/*.module.(t|j)s",
|
||||
"!**/*.dto.(t|j)s",
|
||||
"!**/*.entity.(t|j)s",
|
||||
"!**/*.guard.(t|j)s",
|
||||
"!**/*.response.(t|j)s",
|
||||
"!**/*.strategy.(t|j)s",
|
||||
"!**/*.args.(t|j)s",
|
||||
"!**/*.types.(t|j)s",
|
||||
"!**/*.directive.(t|j)s",
|
||||
"!**/*.plugin.(t|j)s",
|
||||
"!**/*.scalar.(t|j)s",
|
||||
"!**/*.schema.(t|j)s",
|
||||
"!**/node_modules/**"
|
||||
],
|
||||
"coverageDirectory": "../coverage",
|
||||
"testEnvironment": "node"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,42 @@
|
||||
import { Test, TestingModule } from '@nestjs/testing';
|
||||
import { Cat, Owner } from '../graphql.schema';
|
||||
import { OwnersService } from '../owners/owners.service';
|
||||
import { CatOwnerResolver } from './cat-owner.resolver';
|
||||
|
||||
describe('CatOwnerResolver', () => {
|
||||
let resolver: CatOwnerResolver;
|
||||
let ownersService: OwnersService;
|
||||
|
||||
beforeEach(async () => {
|
||||
const moduleRef: TestingModule = await Test.createTestingModule({
|
||||
providers: [
|
||||
CatOwnerResolver,
|
||||
{
|
||||
provide: OwnersService,
|
||||
useValue: {
|
||||
findOneById: jest.fn(),
|
||||
},
|
||||
},
|
||||
],
|
||||
}).compile();
|
||||
|
||||
resolver = moduleRef.get(CatOwnerResolver);
|
||||
ownersService = moduleRef.get(OwnersService);
|
||||
});
|
||||
|
||||
it('should be defined', () => {
|
||||
expect(resolver).toBeDefined();
|
||||
});
|
||||
|
||||
it('should resolve the owner for a cat', async () => {
|
||||
const cat: Cat & { ownerId: number } = { id: 1, ownerId: 101 };
|
||||
const owner: Owner = { id: 101, name: 'Kambale' };
|
||||
|
||||
jest.spyOn(ownersService, 'findOneById').mockImplementation(() => owner);
|
||||
|
||||
const resolvedOwner = await resolver.owner(cat);
|
||||
|
||||
expect(ownersService.findOneById).toHaveBeenCalledWith(cat.ownerId);
|
||||
expect(resolvedOwner).toEqual(owner);
|
||||
});
|
||||
});
|
||||
@@ -0,0 +1,63 @@
|
||||
import { Test, TestingModule } from '@nestjs/testing';
|
||||
|
||||
import { Cat } from '../graphql.schema';
|
||||
import { CatsResolver } from './cats.resolver';
|
||||
import { CatsService } from './cats.service';
|
||||
|
||||
import { MINIMUM_AGE, MINIMUM_AGE_ERROR } from './dto/create-cat.dto';
|
||||
|
||||
describe('CatsResolver', () => {
|
||||
let resolver: CatsResolver;
|
||||
const cat: Cat = { name: 'Cat', age: 5 };
|
||||
|
||||
beforeEach(async () => {
|
||||
const moduleRef: TestingModule = await Test.createTestingModule({
|
||||
providers: [
|
||||
CatsResolver,
|
||||
{
|
||||
provide: CatsService,
|
||||
useValue: {
|
||||
create: jest
|
||||
.fn()
|
||||
.mockImplementation((cat: Cat) => ({ id: 1, ...cat })),
|
||||
findAll: jest.fn().mockReturnValue([cat]),
|
||||
findOneById: jest
|
||||
.fn()
|
||||
.mockImplementation((id: number) => ({ ...cat, id })),
|
||||
},
|
||||
},
|
||||
],
|
||||
}).compile();
|
||||
|
||||
resolver = moduleRef.get<CatsResolver>(CatsResolver);
|
||||
});
|
||||
|
||||
it('should be defined', () => {
|
||||
expect(resolver).toBeDefined();
|
||||
});
|
||||
|
||||
it('should create a new cat', async () => {
|
||||
const newCat = await resolver.create({ name: cat.name, age: cat.age });
|
||||
expect(newCat.name).toEqual(cat.name);
|
||||
expect(newCat).toEqual({ id: 1, ...cat });
|
||||
});
|
||||
|
||||
it(`should fail to save if the age is under ${MINIMUM_AGE}`, async () => {
|
||||
try {
|
||||
await resolver.create({ name: cat.name, age: 0 });
|
||||
} catch (error) {
|
||||
expect(error.message).toBe(MINIMUM_AGE_ERROR);
|
||||
}
|
||||
});
|
||||
|
||||
it('should return all cats', async () => {
|
||||
const cats = await resolver.getCats();
|
||||
expect(cats.length).toEqual(1);
|
||||
expect(cats[0].name).toEqual(cat.name);
|
||||
});
|
||||
|
||||
it('should return a cat by id', async () => {
|
||||
const cat = await resolver.findOneById(1);
|
||||
expect(cat).toEqual({ ...cat, id: 1 });
|
||||
});
|
||||
});
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user